2013年6月6日 星期四

【Java教學】【★★★★★】進入某地圖後廣播

你想要進入某個地圖後 廣播  某某某玩家進入某某某地圖?沒錯 答案就在這裡!

https://blogger.googleusercontent.com/img/proxy/AVvXsEgwTY6VlpmpttzlAB5elUlt6p4qo-lmyaCyhbZEcwBj9Il71YCc4yD3rnUlz_l1ZQt0BW78f1uYTjWrVBKurkLLjXMtq078RVjPt68FaxF0VAtyyk0QSNQg3tLAs-uWWPptqp4v0bkpjSFE1TMw3B98dRaoGOXyRT6OrVlXIF5u=
我做的一個進入地圖公告 是利用NPC的傳送功能製作出來的。
在於NPC對話的同時判定身上是否帶有進入該地圖所需的物品。
若無物品。則提示。沒有XXX物品。
若有。則扣除1個物品 進入地圖 公告:XXX進入XXX地圖。
以下是修改:
server\server\clientpackets\C_NPCAction.java
隨便在一個地方插入,或者可以插入到製作NPC下面。搜索:

                        htmlid = "eris7";
                }
        }
}

在 第三個
下面加入:

                } else        if (s.equalsIgnoreCase("BOSS")){
                        if (pc.getInventory().checkItem(
輸入你進入地圖需要的物品ID,1)){
                                L1Teleport.teleport(pc, 32700, 32899, (short) 93, 5,true);                     
                                pc.getInventory().consumeItem(
輸入要扣除的物品ID數量為,1);
                                L1World.getInstance().broadcastServerMessage((new StringBuilder("
玩家【 ")).append(pc.getName()).append(" 】進入BOSS地圖!").toString());             
                        }else{
                                pc.sendPackets(new S_SystemMessage("
地圖所需鑰匙不足,無法進入。"));
                        }



若是要指定NPC的話就把開頭改成
        } else if (((L1NpcInstance) obj).getNpcTemplate().get_npcId() == 95020) {
if (s.equals("e")) {
                        if (pc.getInventory().checkItem(49324,1)){ //提卡爾庫庫爾坎祭壇鑰匙
                        L1Teleport.teleport(pc, 32730, 32863, (short) 784, 5,true);   


=================================================================
解析:

if (s.equalsIgnoreCase("BOSS")){

在這裡的類【BOSS】是指你在對話檔中的代碼。

對話檔:

<body>
<font fg=FFFFFF>BOSS
地圖:</font><br>

<a action="BOSS">
進入BOSS地圖</a><br>
</body>
這裡的BOSS對應核心裡的BOSS類名稱。

DB裡找到npcaction。這裡是設置NPC對應對話檔。
NPCID
:輸入你創建的NPC ID
normal_action
: 輸入你對話檔的名稱。
caotic_action
:一樣輸入對話檔名稱。
後面的都不管他。留空白。
大陸對話檔名稱因該為 -h.html

做好了這些後把你製作好的對話檔丟到用戶端裡的text然後吃檔 完成 進入遊戲刷出NPC。即大功告成。

                                     
核心代碼解析========================================================================
L1Teleport.teleport(pc, 32700, 32899, (short) 93, 5,true);
這裡的32700 32899(short)93  就是地圖的座標 93是地圖代碼。其他2個分別是地圖的X Y座標.具體怎麼找座標.可以參考DB裡的L1Loc指令.
========================================================================
pc.getInventory().consumeItem(
輸入要扣除的物品ID數量為,1);
這句。顧名思義。就是進入地圖要扣除的物品ID。數量為1個。假設可以這樣。你進入一個地圖 需要一個BOSS地圖證明。
然後進入地圖。你也可以選擇扣除金幣3EBOSS地圖證明設置為可以交易,這樣。遊戲就會有更大的市場空間。
========================================================================
pc.sendPackets(new S_SystemMessage("
地圖所需鑰匙不足,無法進入。"));
這句話因該看的懂吧。就是當你指定的ID物品不足時,提示框會顯示這句話。
========================================================================
當你點擊進入BOSS地圖的時候。他就會按照核心的代碼進入指定地圖了。
當然。有些人會說。幹嘛要這麼麻煩。我直接到data\xml\NpcActions\Teleporter.xml 加入傳送就可以了。
可是我問你。你在這能用你所需要指定的物品嗎?例如說我要用BOSS鑰匙進入。Teleporter.xml這是不能判定的。只能判定所需金幣量。【至少在我的端是這樣的】。
========================================================================


沒有留言:

張貼留言