1. 影音教學
2. 教學前提
在第二課
NPC對話樣式與多段對話
我們有提到關於if判斷的使用方式
還不熟悉的朋友記得去複習一下哦
3. 使用情境
判斷等級
var status = -1; function action(mode, type, selection) { status = (mode == 1 ? status+1 : cm.dispose()); if(status == 0){ var player = cm.getPlayer(); // 取得玩家 var playerLv = player.getLevel(); // 取得玩家等級 var str = ""; /* 此處判斷玩家等級是否30(函)以上 true = NPC跟玩家說好棒棒 false = NPC跟玩家說加油哦 */ if(playerLv >= 30){ str += "好棒棒"; }else{ str += "加油哦"; } cm.sendOk(str); cm.dispose() } }
以上的範例只判斷等級30以下 跟 以上 兩種條件而已
如果想要有更多且精細的條件
可以這樣做
var status = -1; function action(mode, type, selection) { status = (mode == 1 ? status+1 : cm.dispose()); if(status == 0){ var player = cm.getPlayer(); // 取得玩家 var playerLv = player.getLevel(); // 取得玩家等級 var str = ""; //此處等級是以高的優先進行判斷 if(playerLv >= 120){ //玩家等級120(含)以上 str += "哇 120級 四轉大神欸 ! 可以給我錢嗎"; }else if(playerLv >= 100){ //玩家等級100(含)以上 str += "哇 100級 你快要可以四轉了欸 ! 可以給我錢嗎"; }else if(playerLv >= 70){ //玩家等級70(含)以上 str += "哇 70級 三轉欸 ! 可以放影分身給我看嗎"; }else if(playerLv >= 50){ //玩家等級50(含)以上 str += "哇 50級 你可以穿炎魔頭盔了欸 ! 然後可以給我錢嗎"; }else if(playerLv >= 30){ //玩家等級30(含)以上 str += "哇 30級 你怎麼還沒二轉? 是不是不知道去哪轉職 ?"; }else if(playerLv >= 10){ //玩家等級10(含)以上 str += "你的冒險正要開始 ! 我看你骨骼驚奇...我這有一本...; }else{ // 連10級都不到的玩家 str += "呃..剛玩喔? 要我給你錢嗎 ?"; cm.gainMeso(5000); } cm.sendOk(str); cm.dispose() } }
這段腳本的主要功能是根據玩家等級來顯示對應的對話內容。
如果玩家等級大於等於120級,則顯示”哇 120級 四轉大神欸 ! 可以給我錢嗎”;
如果玩家等級小於10級,則顯示”呃..剛玩喔? 要我給你錢嗎 ?”,並給玩家5000金幣。
cm.sendOk(str)
是用於向玩家顯示一個對話框,其中的str
是要顯示的內容。cm.dispose()
則是用於關閉對話框。
判斷楓幣
var status = -1; function action(mode, type, selection) { status = (mode == 1 ? status+1 : cm.dispose()); if(status == 0){ var meso = cm.getMeso(); // 取得玩家目前擁有的楓幣(遊戲幣) if(meso >= 1000000){ //玩家目前擁有100萬(含)以上的楓幣 str += "哇你好多錢!!"; }else if(meso >= 500000){ //玩家目前擁有50萬(含)以上的楓幣 str += "真羨慕你"; }else if(meso >= 100000){ //玩家目前擁有10萬(含)以上的楓幣 str += "怎麼賺錢呀 ?"; }else{ //玩家目前擁有10萬以下的楓幣 str += "感覺你也很努力在賺錢哦!加油 送你一個小禮物!"; cm.gainItem(4000000, 1); } cm.sendOk(str); cm.dispose() } }
腳本開始時,先將status
變數初始化為-1,表示腳本的狀態還未開始。
接著,進入action
函數,判斷玩家對話的模式,如果是1,就將status
加1;否則,直接結束腳本。
當status
等於0時,代表腳本開始執行,接著取得玩家的等級,根據不同等級,給出不同的回應。
如果玩家等級大於等於120,會回應”哇 120級 四轉大神欸 ! 可以給我錢嗎”;
如果玩家等級大於等於100,會回應”哇 100級 你快要可以四轉了欸 ! 可以給我錢嗎”;以此類推。
如果玩家等級小於10級,回應”呃..剛玩喔? 要我給你錢嗎 ?”,並給予玩家5000楓幣的獎勵。
最後,通過cm.sendOk()
函數將回應傳送給玩家,然後執行cm.dispose()
函數,結束腳本的執行。
判斷點數
var status = -1; function action(mode, type, selection) { status = (mode == 1 ? status+1 : cm.dispose()); if(status == 0){ var player = cm.getPlayer(); // 取得玩家 var points = player.getCSPoints(2); // 取得玩家目前擁有的點數 1:GASH 2:楓葉點數 if(points >= 100){ //玩家目前擁有100(含)以上的楓葉點數 str += "為什麼你會有楓葉點數 !! 交出來"; player.modifyCSPoints(-50, 2); //將玩家的楓葉點數扣50 }else{ //玩家目前擁有100以下的楓葉點數 str += "你竟然沒有100點楓葉點數 ! 好吧..."; player.modifyCSPoints(50, 2); //將玩家的楓葉點數加50 } cm.sendOk(str); cm.dispose() } }
如果玩家擁有100或以上的楓葉點數,則從玩家身上扣除50點楓葉點數,否則給玩家增加50點楓葉點數。
判斷道具
var status = -1; function action(mode, type, selection) { status = (mode == 1 ? status+1 : cm.dispose()); if(status == 0){ if(cm.haveItem(4000000, 10)){ //玩家目前擁有藍寶殼(道具編號4000000)這個道具10個 str += "你蒐集到10個藍寶殼了哦 ? 太棒了 交給我吧"; cm.gainItem(4000000, -10); //回收藍寶殼(道具編號4000000)這個道具10個 }else{ //玩家並不擁有藍寶殼(道具編號4000000)這個道具10個 str += "還沒蒐集到10個藍寶殼嗎? 加油喔!!"; } cm.sendOk(str); cm.dispose() } }
會檢查玩家是否擁有 10 個藍寶殼 (道具編號 4000000)
如果擁有,該 NPC 會將藍寶殼收回並給予玩家獎勵;
如果不擁有,則該 NPC 會提醒玩家繼續尋找。
結語
以上的範例是非常實用的基礎根基
在功能腳本中判斷語句是經常出現的
需要多次的練習方能將判斷句寫得盡善盡美