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

最後更新於 2021 年 6 月 29 日

效果

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

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 塞進去。

/* 點裝領取 */
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");
        }
    }
}
4e52d54f6bc42abb41d26eb5b0df6517?s=250&d=wavatar&r=g [楓之谷私服] 點裝領取系統
0 0 評分數
Article Rating
訂閱
通知
guest
10 Comments
在線反饋
查看所有評論
CAT
CAT
1 年 前

謝謝大大提供完整的教學

CAT
CAT
回复  pluto
1 年 前

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

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

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

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

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

lala
lala
回复  pluto
11 月 前

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

choco
choco
回复  pluto
11 月 前

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