Sabotage is nearly fully functional.

master
Nathan Salapat 2022-05-26 20:35:26 -05:00
parent 498236077d
commit 9da11683bc
4 changed files with 22 additions and 12 deletions

View File

@ -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({

View File

@ -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

View File

@ -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)

View File

@ -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