楓之谷私服架設教學網站 if判斷教學 封面

3. NPC腳本 if判斷教學

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 會提醒玩家繼續尋找。

結語

以上的範例是非常實用的基礎根基
在功能腳本中判斷語句是經常出現的
需要多次的練習方能將判斷句寫得盡善盡美

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *