Sabotage is nearly fully functional.
parent
498236077d
commit
9da11683bc
|
@ -174,6 +174,9 @@ function lobby.team_win(map_id)
|
|||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local rname = player:get_player_name()
|
||||
if lobby.game[rname] == map_id then
|
||||
local player_attributes = player:get_meta()
|
||||
player_attributes:set_string('mode', 'solo')
|
||||
minetest.close_formspec(rname, '')
|
||||
lobby.give_xp(player, 25)
|
||||
minetest.chat_send_player(rname, 'The traitor was defeated.')
|
||||
player:set_pos(lobby.spawn_pos)
|
||||
|
@ -182,6 +185,7 @@ function lobby.team_win(map_id)
|
|||
player_inv:set_list('main', {})
|
||||
lobby.game[rname] = 'lobby'
|
||||
elseif lobby.game[rname] == map_id..'_ghost' then
|
||||
minetest.close_formspec(rname, '')
|
||||
local player_attributes = player:get_meta()
|
||||
player:set_nametag_attributes({
|
||||
color = {a = 255, r = 255, g = 255, b = 255}
|
||||
|
@ -205,7 +209,7 @@ function lobby.team_win(map_id)
|
|||
else
|
||||
map_name = map_id
|
||||
end
|
||||
minetest.chat_send_all('The traitor was defeated on this round in the '..map_name)
|
||||
minetest.chat_send_all('The traitor was defeated on this round in '..map_name)
|
||||
end
|
||||
|
||||
function lobby.traitor_win(traitor, map_id)
|
||||
|
@ -222,6 +226,7 @@ function lobby.traitor_win(traitor, map_id)
|
|||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local rname = player:get_player_name()
|
||||
if lobby.game[rname] == map_id..'_ghost' or lobby.game[rname] == map_id then
|
||||
minetest.close_formspec(rname, '')
|
||||
minetest.chat_send_player(rname, 'The traitor won.')
|
||||
local player_attributes = player:get_meta()
|
||||
player:set_nametag_attributes({
|
||||
|
|
|
@ -39,6 +39,7 @@ function sabotage.clear_hud(map_id)
|
|||
end
|
||||
|
||||
function sabotage.update_hud(map_id)
|
||||
print 'updating hud.'
|
||||
local time = sabotage.timer[map_id] - 1
|
||||
sabotage.timer[map_id] = time
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
|
@ -48,7 +49,9 @@ function sabotage.update_hud(map_id)
|
|||
player:hud_change(idx.timer, 'text', time..' seconds')
|
||||
end
|
||||
end
|
||||
minetest.after(1, function()
|
||||
sabotage.update_hud(map_id)
|
||||
end)
|
||||
if time > 0 then
|
||||
minetest.after(1, function()
|
||||
sabotage.update_hud(map_id)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -38,6 +38,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
local map_id = lobby.game[name]
|
||||
meta:set_string('traitor', name)
|
||||
meta:set_string('map_id', map_id)
|
||||
meta:set_string('sabotaged', 'true')
|
||||
local time = meta:get_int('timer')
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(time)
|
||||
|
@ -57,6 +58,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
meta:set_int('timer', timer)
|
||||
meta:set_int('chance', chance)
|
||||
meta:set_int('damage', damage)
|
||||
meta:set_string('sabotaged', 'false')
|
||||
end
|
||||
elseif formname == 'sabotage:player' then
|
||||
if fields.repair then
|
||||
|
@ -76,6 +78,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
local map_id = lobby.game[name]
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
sabotage.clear_hud(map_id)
|
||||
meta:set_string('sabotaged', 'false')
|
||||
timer:stop()
|
||||
lobby.team_win(map_id)
|
||||
end
|
||||
|
@ -91,18 +94,17 @@ minetest.register_node('sabotage:test', {
|
|||
local name = clicker:get_player_name()
|
||||
local player_attributes = clicker:get_meta()
|
||||
local mode = player_attributes:get_string('mode')
|
||||
local meta = minetest.get_meta(pos)
|
||||
local sabotaged = meta:get_string('sabotaged')
|
||||
sabotage.player_pos[name] = pos
|
||||
if mode == 'traitor' then
|
||||
if mode == 'traitor' and sabotaged == 'false' then
|
||||
minetest.show_formspec(name, 'sabotage:traitor', sabotage.traitor_formspec(pos))
|
||||
elseif mode == 'builder' then
|
||||
minetest.show_formspec(name, 'sabotage:builder', sabotage.builder_formspec(pos))
|
||||
elseif mode == 'player' then
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if timer:is_started() then
|
||||
minetest.show_formspec(name, 'sabotage:player', sabotage.player_formspec(pos))
|
||||
end
|
||||
elseif mode == 'player' and sabotaged == 'true' then
|
||||
minetest.show_formspec(name, 'sabotage:player', sabotage.player_formspec(pos))
|
||||
else
|
||||
minetest.chat_send_player(name, 'Only traitors and builders can interact with this node.')
|
||||
minetest.chat_send_player(name, 'You can\'t interact with this now.')
|
||||
end
|
||||
end,
|
||||
on_timer = function(pos)
|
||||
|
|
|
@ -114,7 +114,7 @@ sfinv.register_page('sfinv:clothing', {
|
|||
is_in_nav = function(self, player, context)
|
||||
local player_attributes = player:get_meta()
|
||||
local mode = player_attributes:get_string('mode')
|
||||
if mode == 'player' then
|
||||
if mode == 'player' or mode == 'traitor' then
|
||||
return false
|
||||
else
|
||||
return true
|
||||
|
|
Loading…
Reference in New Issue