henrybobo

Lv.1 初心者
管理成員
管理員
註冊
2022-08-27
文章
274
評分
68
聲望
0
第一篇:
教你如何建立/使用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) { //程式區段}



[轉發自 冰楓 魚鬆哥]