大家好 我是misk。
相信有很多接觸studio的玩家都有看過這個方塊,但卻不知道這個方塊的用途,
而這個方塊是什麼呢?就是函數調用Script方塊(這邊簡稱為藍lua)。
這邊先說明這顆方塊的用處。
這個方塊能在遊戲中調用lua函數,舉一個比較貼近生活的例子,今天您想跟一位朋友聊天,但是你們身處在不同地點,這時候就需要電話,而電話就是藍lua,也就是負責連接你(遊戲)跟朋友(lua)的橋樑。有的時候你需要使用藍lua來達成一般設備方塊做不到的事情,例如重置設備方塊。
但我就是不會寫程序阿,怎麼辦?沒關係,本人寫了一些比較實用的指令讓大家使用,讓大家也能在不會寫程序的情況下,使用藍lua達成重置設備方塊,更改玩家金錢、血量等功能。
首先介紹一下藍lua方塊的介面。
按E打開藍lua方塊介面,應該會是這個樣子。
(上面是指令名稱,下方是要設置的參數。)
接下來,您需要複製以下代碼到Game.lua中。
(如果不知道Game.lua的文件位置,請參考這篇。
)
function pos_transform(str)
— x座標
locate = string.find(str, “,”, 1)
x = string.sub(str, 1, locate – 1)
str = string.gsub(str, x .. “,”, “”, 1)
x = math.floor(x)
— y座標
locate = string.find(str, “,”, 1)
y = string.sub(str, 1, locate – 1)
str = string.gsub(str, y .. “,”, “”, 1)
y = math.floor(y)
— z座標
z = math.floor(str)
return {x = x, y = y, z = z}
end
— 重置設備方塊
function Reset(onoff, position)
if onoff == false then
return
end
EntityBlock = Game.EntityBlock:Create(pos_transform(position))
EntityBlock:Event({action = “reset”})
end
— 發送玩家位置
function Convey(onoff, position)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.position = pos_transform(position)
end
— 增加玩家金幣
function Add_coin(onoff, coin)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.coin = player.coin + math.floor(coin)
end
— 更改玩家金幣
function Change_coin(onoff, coin)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.coin = math.floor(coin)
end
— 更改玩家最大血量
function Change_maxhealth(onoff, maxhealth)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.maxhealth = math.floor(maxhealth)
end
— 增加玩家最大血量
function Add_maxhealth(onoff, maxhealth)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.maxhealth = player.maxhealth + math.floor(maxhealth)
end
— 更改玩家血量
function Change_health(onoff, health)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.health = math.floor(health)
end
— 增加玩家血量
function Add_health(onoff, health)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.health = player.health + math.floor(health)
end
— 更改玩家最大護甲
function Change_maxarmor(onoff, maxarmor)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.maxarmor = math.floor(maxarmor)
end
— 增加玩家最大護甲
function Add_maxarmor(onoff, maxarmor)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.maxarmor = player.maxarmor + math.floor(maxarmor)
end
— 更改玩家護甲
function Change_armor(onoff, armor)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.armor = math.floor(armor)
end
— 更改玩家護甲
function Add_armor(onoff, armor)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player.armor = player.armor + math.floor(armor)
end
— 殺死玩家
function Kill(onoff)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player:Kill()
end
— 移除武器
function Remove_weapon(onoff)
if onoff == false then
return
end
if Game.GetTriggerEntity() ~= nil then
player = Game.GetTriggerEntity():ToPlayer()
else
return
end
player:RemoveWeapon()
end
— 所有玩家復活
function Allplayer_spawn(onoff)
if onoff == false then
return
end
Game.Rule:Respawn()
end
而指令有那些呢?我寫了一些自製指令列在下方。
Reset
重置一個設備方塊(參數為位置,詳細在下方說明)。
Convey
將玩家發送(參數為位置,詳細在下方說明)。
Add_coin
增加玩家金幣(參數為金幣數量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Change_coin
更改玩家金幣(參數為金幣數量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Add_maxhealth
增加玩家最大血量(參數為血量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Change_maxhealth
更改玩家最大血量(參數為血量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Add_health
增加玩家血量(參數為血量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Change_health
更改玩家血量(參數為血量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Add_maxarmor
增加玩家最大護甲(參數為護甲量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Change_maxarmor
更改玩家最大護甲(參數為護甲量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Add_armor
增加玩家護甲(參數為護甲量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Change_armor
更改玩家護甲(參數為護甲量(整數))。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Kill
殺死玩家(不須填入參數)。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Remove_weapon
移除玩家武器(不須填入參數)。
注意:若使用該指令,設備方塊與藍lua之間不得有任何邏輯方塊,例如and, or等。
Allplayer_spawn
讓所有玩家復活(不須填入參數)。
*位置參數
如果位置為(x = 0, y = 0, z = 0),參數就填0,0,0
同樣的,如果位置為(x = -80, y = 100, z = 0),參數就填-80,100,0
下方圖片為舉例(重置一個位置為(x = -80, y = 100, z = 0)的設備方塊):
*不允許中間接上邏輯方塊的指令
有些指令不允許中間有邏輯方塊,下方說明正確的連接方式。
正確(中間無連接邏輯方塊)
錯誤(中間連接了邏輯方塊)
也就是說,設備方塊下一個連接點必須是藍lua,另外標靶,怪物目標方塊等設備也無法使用於這類指令,因為這些設備方塊並未由玩家直接操作。
目前想到了這些指令,如果有新的想法會增加上去,另外如果有問題或是想法也可以提出來,謝謝大家觀看,祝大家聖誕節快樂!