我們又見面囉,有JS基礎就讓我們繼續看下去~
本文重點是函式(Function)
函式在JS中是可以自己創的…不過BLP提供一些函式讓遊戲去執行,見下文。
你還需要跟插件方法(ModPE Script Methods)相結合,請見Part 3。
函式用法:跟JS一樣,把程式碼包起來:
function useItem(){
//程式碼
}
OK,接著是一些有特別功能的函式。
註:有些可以使用preventDefault()
阻止發生原本的效果,請參看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見!