115 lines
4.9 KiB
Lua
115 lines
4.9 KiB
Lua
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if formname == 'sabotage:traitor' then
|
|
local name = player:get_player_name()
|
|
local map_id = lobby.game[name]
|
|
local pos = sabotage.player_pos[name]
|
|
local meta = minetest.get_meta(pos)
|
|
if fields.sabotage then
|
|
local sabotaged = lobby.sabotage[map_id]
|
|
if sabotaged == true then
|
|
minetest.chat_send_player(name, 'Sorry you can only sabotage one item at a time currently.')
|
|
else
|
|
local chance = meta:get_int('chance') or 1
|
|
local damage = meta:get_int('damage') or 1
|
|
local level = meta:get_int('level') or 1
|
|
local player_attributes = player:get_meta()
|
|
local luck = player_attributes:get_int('luck')
|
|
if math.random(10) + luck >= chance then
|
|
local hurt = math.random(damage)
|
|
local health = player:get_hp()
|
|
local new_health = health - hurt
|
|
player:set_hp(new_health)
|
|
end
|
|
if math.random(10) + luck >= chance then
|
|
local node = minetest.get_node(pos)
|
|
local node_name = node.name
|
|
local def = minetest.registered_nodes[node_name]
|
|
local desc = def.description
|
|
local flip = def.sabotage_switch
|
|
if flip then
|
|
minetest.swap_node(pos, {name = flip, param2 = node.param2})
|
|
end
|
|
meta:set_string('traitor', name)
|
|
meta:set_string('map_id', map_id)
|
|
lobby.sabotage[map_id] = true
|
|
local time = meta:get_int('timer')
|
|
if time > 29 then
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(time)
|
|
sabotage.show_hud_timed(map_id, time, desc)
|
|
sabotage.timer[map_id] = time
|
|
elseif time < 30 then
|
|
sabotage.show_hud(map_id, desc)
|
|
end
|
|
local alert = meta:get_string('alert')
|
|
local level = meta:get_int('level') or 0
|
|
lobby.message_to_level(map_id, 'Warning!!! Level has been sabotaged. Proceed with caution!!!') --needs changing
|
|
lobby.message_to_level(map_id, alert)
|
|
minetest.chat_send_player(name, 'You dirty dog, you just doomed the lives of all other players.') --needs changing
|
|
lobby.sabotage_level[map_id] = level
|
|
end
|
|
end
|
|
end
|
|
elseif formname == 'sabotage:builder' then
|
|
local name = player:get_player_name()
|
|
local map_id = lobby.game[name]
|
|
local pos = sabotage.player_pos[name]
|
|
local meta = minetest.get_meta(pos)
|
|
if fields.save then
|
|
local timer = tonumber(fields.timer_input) or 0
|
|
if timer < 30 then
|
|
timer = 0
|
|
end
|
|
local chance = math.min((tonumber(fields.chance) or 2), 10)
|
|
local damage = tonumber(fields.damage) or 1
|
|
local alert = fields.alert or ''
|
|
local level = math.min((tonumber(fields.level) or 1), 4)
|
|
meta:set_int('timer', timer)
|
|
meta:set_int('chance', chance)
|
|
meta:set_int('damage', damage)
|
|
meta:set_int('level', level)
|
|
meta:set_string('alert', alert)
|
|
end
|
|
elseif formname == 'sabotage:player' then
|
|
local name = player:get_player_name()
|
|
local map_id = lobby.game[name]
|
|
if fields.repair then
|
|
local pos = sabotage.player_pos[name]
|
|
local meta = minetest.get_meta(pos)
|
|
local chance = meta:get_int('chance') or 1
|
|
local damage = meta:get_int('damage') or 1
|
|
local player_attributes = player:get_meta()
|
|
local luck = player_attributes:get_int('luck')
|
|
if math.random(10) + luck >= chance then
|
|
local hurt = math.random(damage)
|
|
local health = player:get_hp()
|
|
local new_health = health - hurt
|
|
player:set_hp(new_health)
|
|
end
|
|
if math.random(10) + luck >= chance then
|
|
local node = minetest.get_node(pos)
|
|
local node_name = node.name
|
|
local def = minetest.registered_nodes[node_name]
|
|
local flip = def.sabotage_switch
|
|
if flip then
|
|
minetest.swap_node(pos, {name = flip, param2 = node.param2})
|
|
end
|
|
local time = meta:get_int('timer')
|
|
sabotage.clear_hud(map_id)
|
|
lobby.sabotage_level[map_id] = 5
|
|
lobby.sabotage[map_id] = false
|
|
if time > 29 then
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:stop()
|
|
lobby.team_win(map_id)
|
|
elseif time < 30 then
|
|
local node = minetest.get_node(pos).name
|
|
local def = minetest.registered_nodes[node]
|
|
local desc = def.description
|
|
lobby.message_to_level(map_id, name..' just fixed '..desc)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|