查看: 1888|回复: 3

楓之谷私服js基本教學

[复制链接]
  • TA的每日心情

    2022-12-15 19:48
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    74

    主题

    9

    回帖

    355

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    355
    QQ
    发表于 2022-12-1 19:54:57 | 显示全部楼层 |阅读模式
    本帖最后由 小强 于 2022-12-1 19:56 编辑

    第一篇:
    教你如何建立/使用NPC編輯工具

    首先所有NPC檔案都位於服務端內的scripts的npc資料夾內
    (如果你連這個都不知道,那你真的是得好好學習)
    其中檔案架構為:"NPC代碼.js"其中NPC代碼可以從String.wz找到
    Js檔案建立完成後建議使用Netbeans進行編寫
    原因很簡單如果發生程式錯誤例如{ }未完整包含.......或者部分語法問題可以優先處理

    第二篇
    教你如何實作簡單NPC
    架構1(僅彈出對話框後立即結束對話):
    [JavaScript] 纯文本查看 复制代码
    function start() {
    cm.sendOk("您好我是最簡單的NPC"); //開啟對話
    cm.dispose(); //結束對話
    } /////就像這樣



    架構1(僅彈出對話框後立即結束對話):
    [JavaScript] 纯文本查看 复制代码
    function start() {
    cm.sendOk("您好我是另一個NPC"); //點選後觸發
    }
    function action(mode, type, selection) { //進行簡單處理
    cm.warp(100000000, 0); //傳送
    cm.gainItem(4001126, 1); //獲得道具
    cm.sendOk("看到了吧我已經幫你傳送並且給你一個道具了");
    cm.dispose();
    }




    架構2 (有狀態處理之NPC大部分NPC都為此種架構):
    [JavaScript] 纯文本查看 复制代码
    var status;
    function start() {
    status = 1;
    action(1, 0, 0);
    }
    function action(mode , type, selection) {
    if (mode == 1) {
    status++;
    } else {
    status;
    }
    if (status == 0) {
    cm.sendNext("按下下一個後將產生第二個對話框" ); //點選NPC後觸發
    } else if (status == 1) {
    cm.sendSimple("想要再看看如何調用狀態嗎?\r\n#b#L0#是\r\n#L1 #否");
    } else if (status == 2) { //每當跳往下一個對話框時status會增加1
    if (selection == 0) { //選擇為是(L0)
    cm.sendOk( "您好這是第三個對話框也就是狀態2的對話框");
    cm.dispose();
    } else if (selection == 1) { //選擇為否(L1)
    cm.dispose(); //直接結束對話
    }
    }
    }



    第三篇:
    編寫NPC必須要對語法進行認識,否則最後將無法造出任何程式碼,以下提供常用NPC語法
    #b =藍色字體
    #c[道具代碼]#顯示玩家擁有多少個該道具
    #d =紫色字體
    #e =粗體
    #f[IMG位置]#
    顯示一個位於WZ中的 像
    #g =綠色字體
    #h #
    顯示玩家暱稱
    #i[道具代碼]#
    顯示該道具圖片
    #k =黑色字體
    #l
    選項關閉(通常可省略)
    #m[地圖代碼]#
    顯示地圖名稱
    #n =普通字體(用於移除粗體)
    #o[怪物代碼]#
    顯示怪物名稱
    #p[NPC代碼]#
    顯示NPC名稱
    #q[技能代碼]#
    顯示該技能名稱
    #r =紅色字體
    #s[技能代碼]#
    顯示該技能圖片
    #t[道具代碼]#
    顯示該道具文字
    #v[道具代碼]#
    與#i相同顯示道具圖片
    #z[道具代碼]#
    與#t相同顯示道具名稱
    #B[百分比]#
    顯示進度條
    #L[選項代號]#
    新增一個選項
    \r\n
    產生換行
    \t =等同於Tab (4個空白)
    第4章:cm.[指令]的運用
    dispose
    結束語目前NPC對話(通常末端一定要加入否則將無法與其他NPC產生新對話)
    範例:cm.dispose();
    sendNext
    顯示一個具有"下個"的NPC對話框(當按下"下個"後status + 1)
    範例:cm.sendNext("您好");
    sendPrev
    顯示一個具有"上個"的NPC對話框(當按下"上個"後status 1)
    例:cm.sendPrev("您好");
    sendNextPrev
    同時顯示具有"上個"與"下個"的NPC對話框
    範例:cm.sendNextPrev("您好");
    sendOk
    顯示一個具有"確認"的NPC對話框(同理按下後status + 1)
    範例:cm.sendOk("您好");
    sendYesNo
    顯示一個具有"是"與"否"的NPC對話框(若按下是則status + 1)
    範例:cm.sendYesNo("您好");
    sendAcceptDecline
    顯示一個具有"接受"與"拒絕"的NPC對話框(若按下接受則status + 1)
    範例:cm.sendAcceptDecline("您好");

    sendStyle
    顯示髮型/臉型選擇畫面
    範例:cm.sendStyle("您好", hair); //必須先宣告hair內容
    warp
    傳送玩家至指定地圖
    架構:cm.warp([地圖代碼], [傳送點位置]); //若傳送點位置為0則表示預設傳送點
    範例:cm.warp(100000000, 0 );
    openShop
    開啟商店畫面
    架構:cm.openShop([商店代碼]); //商店代碼請參考資料庫中的shops
    範例:cm.openShop(5000 );
    haveItem
    檢查玩家是否擁有足夠數量的道具
    架構:cm.haveItem([道具代碼], [道具數量);
    範例:cm.haveItem(2046894, 1);
    gainItem
    給予玩家指定數量的道具
    架構:cm.gainItem ([道具代碼], [道具數量]); //道具數量可為正(給予)與負(失去)
    範例:cm.gainItem(2046894, 1)
    ;
    changeJob
    改變玩家職業
    範例:cm.changeJob(222 );
    getJob
    取得玩家職業
    範例:cm.getJob();
    實作:通常用於條件判斷if(cm.getJob() == 512) { //程式區段}
    startQuest
    開始一個任務
    範例:cm.startQuest( 1000);
    completeQuest
    完成一個任務

    到這裡先休息一下來複習剛剛的內容以確保你能充分吸收喔!
    範例:cm.completeQuest(1000);
    forfeitQuest
    放棄一個任務
    範例:cm.forfeitQuest(1000);
    getMeso
    取得玩家擁有的楓幣數量
    範例:cm.getMeso();
    實作:通常用於條件判斷if(cm.getMeso() >= 10000000) { / /程式區段}
    gainMeso
    給予玩家指定楓幣
    架構:cm.gainMeso ([楓幣數量]); //楓幣數量可為正(獲得)與負(失去)
    範例:cm.gainMeso(100000)
    ;
    gainExp
    給予玩家指定經驗值
    架構:cm.gainExp([經驗值數量]); //經驗值數量可為正(獲得)與負(失去)
    範例:cm.gainExp(10000);
    getLevel
    取得玩家等級
    範例:cm.getLevel();
    實作:通常用於條件判斷if( cm.getLevel() <= 50) { //程式區段}

    使玩家學習一個技能
    架構:cm.teachSkill([技能代碼], [技能等級], [最大技能等級]);
    get[能力值]
    取得玩家能力值,能力值可為HP MP STR INT DEX LUK
    架構:cm.get[能力值]();
    範例:cm.getSTR();
    實作:通常用於條件判斷if(cm.getSTR() >= 100) { //程式區段}



    [轉發自 冰楓 魚鬆哥]
    专注于GMS研究,有偿调试架设,全网最低,公益群:915210346。
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    16

    积分

    新手上路

    Rank: 1

    积分
    16
    发表于 2024-1-23 16:00:24 | 显示全部楼层
    非常棒 很详细
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-25 05:19
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    4

    主题

    65

    回帖

    353

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    353
    发表于 2024-4-4 02:56:26 | 显示全部楼层
    1111111111111111111
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-6-28 07:37
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    2

    主题

    66

    回帖

    71

    积分

    注册会员

    Rank: 2

    积分
    71
    发表于 2024-6-19 18:15:39 | 显示全部楼层

    666666666666666
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表