[楓之谷私服] 點裝領取系統

最後更新於 2022 年 6 月 26 日

效果

按照點裝分類成 臉飾、眼飾、耳環、帽子、上衣、褲子、手套、套服、披風、戒指、盾牌、鞋子、武器,當然怎麼分全靠你怎麼設定範圍。

c1 [楓之谷私服] 點裝領取系統

輸入代碼領取點裝。

c2 [楓之谷私服] 點裝領取系統
c3 [楓之谷私服] 點裝領取系統
c4 [楓之谷私服] 點裝領取系統

不能領取的點裝會提示不能領取。

c5 [楓之谷私服] 點裝領取系統

代碼

我先解釋一下會用到的一些方法是什麼意思,最後會附上完整的程式碼。

主要會用到 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() 方法判斷
  • 這個道具是否存在?
  • 是否介於這個分類範圍? => 不需要特別寫判斷式,因為如果輸入的數值不在那個分類設定的最小值和最大值區間,系統會直接提示。
image 62 [楓之谷私服] 點裝領取系統
  • 是否是不能直接領取的道具? => 多寫一個判斷式
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 塞進去。

0 0 評分數
Article Rating
訂閱
通知
guest

10 Comments
在線反饋
查看所有評論
CAT
CAT
1 年 前

謝謝大大提供完整的教學

CAT
CAT
回复  pluto
1 年 前

我不知道大大您什麼時候發文
因為我每天都在看你發的教學文
所以都能很快發現您有發文

CAT 最後編輯於 1 年 前
Gary
Gary
1 年 前

希望大大能發副本的教學 最近找到這個網站收穫良多

Gary 最後編輯於 1 年 前
lala
lala
1 年 前

嘗試新東西都會出問題呢QQ
sendGetNumber()
用到這個它會要我解卡不然就閃退

lala
lala
回复  pluto
1 年 前

好的~沒看仔細一點~抱歉

choco
choco
回复  pluto
1 年 前

請問一下 針對113的火焰噴射練續使用容易斷線問題
有任何修正的教學嗎? 看您的文感覺受益良多
不過對於修SRC因為沒有良好基礎所以目前還是很苦手