最後更新於 2021 年 6 月 29 日
效果
按照點裝分類成 臉飾、眼飾、耳環、帽子、上衣、褲子、手套、套服、披風、戒指、盾牌、鞋子、武器,當然怎麼分全靠你怎麼設定範圍。
輸入代碼領取點裝。
不能領取的點裝會提示不能領取。
代碼
我先解釋一下會用到的一些方法是什麼意思,最後會附上完整的程式碼。
主要會用到 sendGetNumber()
和 isCash()
兩個方法
sendGetNumber
是可以獲取玩家輸入的數值的方法 在 NPCConversationManager.java
可以看到方法是怎麼定義的:
public void sendGetNumber(String text, int def, int min, int max) { if (lastMsg > -1) { return; } if (text.contains("#L")) { // will dc otherwise! sendSimple(text); return; } c.getSession().write(MaplePacketCreator.getNPCTalkNum(npc, text, def, min, max)); lastMsg = 4; }
這裡的 text 為顯示的對話內容,def 為預設的數值,min 為最小值,max 為最大值。
我們將用這個方法來做點裝的分類,至於點裝代碼是怎麼去分類的請看 伺服端\wz\String.wz\Eqp.img
比如說我點裝臉飾是代碼介於 1010001 ~ 1012672 就可以這樣寫:
cm.sendGetNumber("#h0#,你想領取什麼臉飾呢?請輸入代碼吧!\r\n",1010001,1010001,1012672);
接收到玩家輸入的數值後就有幾種狀況需要去判斷:
- 是否為點裝? => 使用
isCash()
方法判斷 - 這個道具是否存在?
- 是否介於這個分類範圍? => 不需要特別寫判斷式,因為如果輸入的數值不在那個分類設定的最小值和最大值區間,系統會直接提示。
- 是否是不能直接領取的道具? => 多寫一個判斷式
if(cm.isCash(id)){ // 判斷是否為點裝 if(id==1112127){ // welcome back戒指 不能直接領取 cm.sendOk("#z"+id+"##i"+id+"#可不能用領取的哦!!!!"); cm.dispose(); }else{ cm.sendYesNo("你確定要領取#z"+id+"##i"+id+"#嗎?"); } }else{ // 不是點裝或不存在 cm.sendOk("你輸入的代碼不存在或者非點裝!"); cm.dispose(); }
完整腳本
隨便找一個 NPC 塞進去。
/* 點裝領取 */ var status = 0; var id; function start() { status = -1; action(1, 0, 0); } function action(mode, type, selection) { if (mode == -1) { cm.dispose(); } else { if (status >= 0 && mode == 0) { cm.sendOk("改天再來領吧~"); cm.dispose(); return; } if (mode == 1) { status++; } else { status--; } if (status == 0 || selection == 99) { cm.sendSimple("該系統可以讓您輸入代碼獲得點裝,請選擇分類後自行上網搜索喜愛的點裝代碼領取。#d\r\n #L0#臉飾#l #L1#眼飾#l #L2#耳環#l \r\n #L3#帽子#l #L4#上衣#l #L5#褲子#l \r\n #L6#手套#l #L7#套服#l #L8#披風#l \r\n #L9#戒指#l #L10#盾牌#l #L11#鞋子#l \r\n #L12#武器#l"); } else if (status == 1) { sel = selection; switch(sel){ case 0: cm.sendGetNumber("#h0#,你想領取什麼臉飾呢?請輸入代碼吧!\r\n",1010001,1010001,1012672); break; case 1: cm.sendGetNumber("#h0#,你想領取什麼眼飾呢?請輸入代碼吧!\r\n",1020000,1020000,1022280); break; case 2: cm.sendGetNumber("#h0#,你想領取什麼耳環呢?請輸入代碼吧!\r\n",1032051,1032051,1033000); break; case 3: cm.sendGetNumber("#h0#,你想領取什麼帽子呢?請輸入代碼吧!\r\n",1000000,1000000,1005232); break; case 4: cm.sendGetNumber("#h0#,你想領取什麼上衣呢?請輸入代碼吧!\r\n",1040001,1040001,1049000); break; case 5: cm.sendGetNumber("#h0#,你想領取什麼褲子呢?請輸入代碼吧!\r\n",1060000,1060000,1062124); break; case 6: cm.sendGetNumber("#h0#,你想領取什麼手套呢?請輸入代碼吧!\r\n",1080000,1080000,1082691); break; case 7: cm.sendGetNumber("#h0#,你想領取什麼套服呢?請輸入代碼吧!\r\n",1050040,1050040,1053378); break; case 8: cm.sendGetNumber("#h0#,你想領取什麼披風呢?請輸入代碼吧!\r\n",1102005,1102005,1102945); break; case 9: cm.sendGetNumber("#h0#,你想領取什麼戒指呢?請輸入代碼吧!\r\n",1112000,1112000,1115158); break; case 10: cm.sendGetNumber("#h0#,你想領取什麼盾牌呢?請輸入代碼吧!\r\n",1092031,1092031,1092067); break; case 11: cm.sendGetNumber("#h0#,你想領取什麼鞋子呢?請輸入代碼吧!\r\n",1070000,1070000,1073240); break; case 12: cm.sendGetNumber("#h0#,你想領取什麼武器呢?請輸入代碼吧!\r\n",1702000,1702000,1702883); break; } } else if(status == 2){ id = selection; if(cm.isCash(id)){ if(id==1112127){ //welcome back戒指 cm.sendOk("#z" + id + "##i" + id + "#可不能用領取的哦!!!!"); cm.dispose(); }else{ cm.sendYesNo("你確定要領取#z" + id + "##i" + id + "#嗎?"); } }else{ cm.sendOk("你輸入的代碼不存在或者非點裝!"); cm.dispose(); } } else if(status == 3){ cm.gainItem(id,1); cm.sendOk("已經將#z" + id + "##i" + id + "#送給您了,滿不滿意?\r\n#L99##r我想回去繼續領取#k#l"); } } }
Latest posts by pluto (see all)
- 解決 preact-router 資源請求路徑錯誤的問題 - 2022 年 6 月 24 日
- [楓之谷私服] 潮流轉蛋機 NPC 腳本優化 - 2022 年 6 月 19 日
- [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120 - 2022 年 6 月 19 日
謝謝大大提供完整的教學
你怎麼都知道我什麼時候發文 ( ・◇・)?
我不知道大大您什麼時候發文
因為我每天都在看你發的教學文
所以都能很快發現您有發文
希望大大能發副本的教學 最近找到這個網站收穫良多
如果你說的副本是指組隊任務,那可能會涉及到地圖新增(包括世界的新增、地圖用到的物件..等)、怪物的新增、腳本的撰寫,比較麻煩,我自己也還沒有碰過組隊任務,所以可能近期都不會發類似的教學哦!
嘗試新東西都會出問題呢QQ
sendGetNumber()
用到這個它會要我解卡不然就閃退
是v120嗎?
打開 tools/MaplePacketCreator.java 搜索 getNPCTalkNum
把這兩行
修改成
在下面找到 getNPCTalkText
將
修改成
應該就沒問題了
( 我在這篇下面問題匯總有提到 https://namepluto.com/3279/#i-13 )
好的~沒看仔細一點~抱歉
請問一下 針對113的火焰噴射練續使用容易斷線問題
有任何修正的教學嗎? 看您的文感覺受益良多
不過對於修SRC因為沒有良好基礎所以目前還是很苦手
想知道斷線的話是會提示什麼錯誤訊息嗎?
因為斷線的話有滿多種原因的
比如說 MKD 封包異常 或是 WZ檔有問題
你可以參考這篇
https://87ms.net/offline/