Lon

Lv.1 初心者
管理成員
管理員
註冊
2022-08-27
文章
13
評分
4
聲望
0
第一篇:
教你如何建立 / 使用 NPC 編輯工具
首先 所有 NPC 檔案都位於服務端內的 scripts的npc 資料夾內
(如果你連這個都不知道,那你真的是得好好學習)
其中檔案架構為:"NPC 代碼.js" 其中NPC 代碼可以從 String.wz 找到
Js 檔案建立完成後 建議使用 Netbeans 進行編寫
原因很簡單 如果發生程式錯誤 例如 { } 未完整包含....... 或者部分語法問題 可以優先處理

第二篇:
教你如何實作簡單 NPC
架構1(僅彈出對話框後立即結束對話):
function start() {

cm.sendOk("您好 我是最簡單的 NPC"); // 開啟對話
cm.dispose(); // 結束對話
} /////就像這樣
架構1(僅彈出對話框後立即結束對話):

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 都為此種架構):

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 個空白)


第四篇:
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("您好");

sendSimple

顯示一個無任何附加按鈕的對話框 (結束對話除外)
範例:cm.sendSimple("您好");

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) { // 程式區段 }

teachSkill


使玩家學習一個技能
架構:cm.teachSkill([技能代碼], [技能等級], [最大技能等級]);
get[能力值]
取得玩家能力值,能力值可為 HP MP STR INT DEX LUK
架構:cm.get[能力值]();
範例:cm.getSTR();
實作:通常用於條件判斷 if(cm.getSTR() >= 100) { // 程式區段 }
p.s.以上的文章都是比較常見的,除了這些還有很多,如果真的有心向學,你可以去多爬爬文或者
多買些相關書籍看看,相信你一定會進步!警告:部分指令在部分端口無法使用!!!!!!!!!!!!!!!!!!!

[轉發自 冰楓論壇 魚鬆哥]