2015年6月19日 星期五

MCPE插件教學Part 2-函式


(本文最後更新時間:2016/10/01)

我們又見面囉,有JS基礎就讓我們繼續看下去~

本文重點是函式(Function)

函式在JS中是可以自己創的...不過BLP提供一些函式讓遊戲去執行,見下文。
你還需要跟插件方法(ModPE Script Methods)相結合,請見Part 3。


  • 函式用法

跟JS一樣,把程式碼包起來:
function useItem(){
//程式碼
}

OK,接著是一些有特別功能的函式。
註:有些可以使用preventDefaul()阻止發生原本的效果,請參看modpescriptdump.txt附的函數表。


  • attackHook(attacker,victim)

觸發: 實體被攻擊時
用法: attacker為發動攻擊的實體,victim為被攻擊的實體,目前對象皆不能指向玩家。
實體被攻擊(被攻擊者非玩家無效)


  • blockEventHook(x,y,z,eventType,data)

翻譯:blockEventHook(x,y,z,事件,副ID)
觸發:每3秒執行一次開關箱子時。
用法:事件代碼不明。
x,y,z是事件發生的座標。
副ID在被開啟時為0,關閉為1。


  • continueDestroyBlock(x, y, z, side, progress)

觸發:玩家破壞方塊時
用法:x,y,z為方塊座標,side為方塊的面,progress為破壞進度值。


  • chatHook(str)

觸發:當有玩家輸入訊息時,str即輸入的字串內容。


  • deathHook(murder,victim)

翻譯:deathHook(殺人者,被殺者)
觸發:實體死亡時。(跟entityRemoveHook()不太一樣)
用法:跟attackHook()差不多。


  • destroyBlock(x,y,z,side)

翻譯:destroyBlock(x座標,y座標,z座標,方塊面)
觸發:玩家破壞方塊後
用法:用Level.getTile()取得被破壞的方塊訊息等。


  • eatHook(hearts, saturationRatio)
觸發: 玩家吃東西時
用法: hearts為恢復的飽食度,saturationRatio為隱藏飽食度。

  • entityAddedHook(entity)

觸發:一個實體出現時。
用法:entity是實體。



  • entityRemoveHook(entity)

觸發:一個實體被移除時。
用法:entity是實體。


  • eatHook(hearts, saturationRatio)

觸發:玩家吃東西時
用法:hearts為玩家血量,saturationRatio為飢餓值比例。


  • explodeHook(entity, x, y, z, power, onFire)

觸發:有爆炸產生後
用法:entity為產生爆炸的實體,xyz為座標,power為威力(半徑),onFire為是否著火(布林值)。


  • entityHurtHook(attacker, victim, halfhearts)

觸發:有實體受到傷害時
用法:attacker為攻擊的實體,victim為受到攻擊的實體,halfhearts為受到的傷害(以半顆心計)。


  • levelEventHook(entity,eventType,x,y,z,data)

翻譯:levelEventHook(實體,事件,x,y,z,副ID)
觸發:開關門(陷阱、柵欄)時、羊吃草、玩家睡覺時
用法:實體就是玩家,
事件代碼開關門為1003,羊吃草2001,睡覺9800。
x,y,z是事件發生的座標,睡覺時為0,0,0。
附ID在門被開啟時為0,關閉為1。


  • leaveGame()

觸發:離開世界時。



  • modTick()

觸發:一進入某個世界就每20秒一次,一直觸發。
用法:死不了, 一直存在的函式,可以用來做計時器。



  • newLevel()

觸發:進入世界時。


  • playerAddExpHook(player, experienceAdded)

觸發:玩家得到經驗值時
用法:player為得到經驗值的玩家(單人就是Player.getEntity()),experienceAdded為得到的經驗值。


  • procCmd(cmd)

翻譯:procCmd(指令)
觸發:玩家在聊天欄輸入開頭帶有"/"斜線號時觸發。

用法:用於做指令,cmd是指令內容(不包括"/")。



  • playerExpLevelChangeHook(player, levelsAdded)

觸發:玩家等級有變化時
用法:player為等級變化的的玩家(單人還是Player.getEntity()),levelsAdded為變化的等級。


  • projectileHitBlockHook(projectile, blockX, blockY, blockZ, side)

觸發:拋射實體撞到方塊時
用法:projectile為該實體,blocX、blockY、blockZ為座標,side為方塊的面。

  • projectileHitEntityHook(projectile, targetEntity)

觸發:有拋射實體(如雪球)碰到另一個實體時
用法:projectile為拋射實體,targetEntity為它碰到的實體。



  •  screenChangeHook(screenName)
觸發: 當視窗切換時,例如開啟背包等。
用法: screenname為切換的視窗代碼。
可自行使用這函數並在當中使用print(),顯示出視窗的對應代碼。

  • serverMessageReceiveHook(str)

觸發:伺服收到訊息
用法:str為收到的字串內容


  • startdestroyBlock(x,y,z,side)

翻譯:startdestroyBlock(x座標,y座標,z座標,方塊面)
觸發:玩家要開始破壞方塊時
用法:可以提前偵測方塊,用Level.getTile()取得要破壞的方塊訊息等。


  • redstoneUpdateHook(x, y, z, newCurrent, wolrdloading, blockId, blockData)

觸發:紅石訊號更新時
用法:xyz為座標,newCurrent為其訊號為開或關(布林值),worldloading為是否在世界載入時就偵測紅石訊號(布林值),blockId為方塊ID,blockData為方塊副ID。
  • useItem(x,y,z,itemID,blockID,side,itemdamage,blockdamage)

觸發:點擊方塊。
用法:x,y,z就是方塊座標,
itemid就是你手持物品id,
blockid就是你點擊的方塊,
itemdamage手持物品附ID,
blockid被點擊方塊附ID。
至於方塊面,有1~6,就是你點擊的方塊面。
所以,你需要ID表,可以參考這個或用TMI看。


Part 3見!

參考來源。

2 則留言:

  1. 真是太太太~~~~~~~~~感謝您了!!!!找了好久

    回覆刪除
  2. 真是太太太~~~~~~~~~感謝您了!!!!找了好久

    回覆刪除