I think sabotage is working properly now.

master
Nathan Salapat 2022-06-13 08:32:52 -05:00
parent d09b994dab
commit 6d7413e162
8 changed files with 40 additions and 19 deletions

View File

@ -116,9 +116,9 @@ function doors.door_toggle(pos, node, clicker, close)
if not minetest.is_protected(pos, player_name) and minetest.check_player_privs(player_name, { creative = true }) then
else
local map_id = lobby.game[player_name]
local sabotage_level = lobby.sabotage_level[map_id] or 0--hmmm
local sabotage_level = lobby.sabotage_level[map_id] or 5
local level = meta:get_int('level') or 0
if level > sabotage_level then
if level <= sabotage_level then
if lock_status == 1 and (minetest.is_protected(pos, player_name) or not minetest.check_player_privs(player_name, { creative = true })) then
return
elseif lock_status == 2 then
@ -376,9 +376,9 @@ function doors.trapdoor_toggle(pos, node, clicker, close)
if not minetest.is_protected(pos, player_name) and minetest.check_player_privs(player_name, { creative = true }) then
else
local map_id = lobby.game[player_name]
local sabotage_level = lobby.sabotage_level[map_id] or 0--hmmm
local sabotage_level = lobby.sabotage_level[map_id] or 5
local level = meta:get_int('level') or 0
if level > sabotage_level then
if level <= sabotage_level then
if lock_status == 1 and (minetest.is_protected(pos, player_name) or not minetest.check_player_privs(player_name, { creative = true })) then
return
elseif lock_status == 2 then

View File

@ -318,7 +318,7 @@ minetest.register_node('lobby:button_1', {
lobby.votes[map_id] = 0
lobby.corpses[map_id] = {}
lobby.sabotage[map_id] = false
lobby.sabotage_level[map_id] = 0
lobby.sabotage_level[map_id] = 5
for i=1,player_count do
minetest.chat_send_player(map_players[i], 'Hold tight, loading the level.')
local player = minetest.get_player_by_name(map_players[i])
@ -376,9 +376,9 @@ minetest.register_node('lobby:button_1', {
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name()
if formname == 'lobby:button_display' then
if fields.stats then
local name = player:get_player_name()
local map_id = lobby.stat[name]
minetest.show_formspec(name, 'lobby:stats', lobby.retrieve_stats(map_id))
end

View File

@ -188,6 +188,10 @@ function lobby.team_win(map_id)
local player_inv = player:get_inventory()
player_inv:set_list('main', {})
lobby.game[rname] = 'lobby'
local idx = sabotage.hud[rname]
for key,value in pairs(idx) do
player:hud_remove(value)
end
elseif lobby.game[rname] == map_id..'_ghost' then
minetest.close_formspec(rname, '')
local player_attributes = player:get_meta()
@ -202,6 +206,10 @@ function lobby.team_win(map_id)
local player_inv = player:get_inventory()
player_inv:set_list('main', {})
lobby.game[rname] = 'lobby'
local idx = sabotage.hud[rname]
for key,value in pairs(idx) do
player:hud_remove(value)
end
end
end
lobby.map[map_id] = 0
@ -243,6 +251,10 @@ function lobby.traitor_win(traitor, map_id)
local player_inv = player:get_inventory()
player_inv:set_list('main', {})
lobby.game[rname] = 'lobby'
local idx = sabotage.hud[rname]
for key,value in pairs(idx) do
player:hud_remove(value)
end
end
end
lobby.map[map_id] = 0

View File

@ -131,7 +131,7 @@ minetest.register_on_leaveplayer(function(player, timed_out)
local map_id = lobby.game[name]
local player_attributes = player:get_meta()
local mode = player_attributes:get_string('mode')
if map_id ~= 'lobby' and mode == 'player' then
if map_id ~= 'lobby' and (mode == 'player' or mode == 'traitor') then
local game_data = lobby.savedata.data[map_id]
local map_name = game_data['map_name'] or map_id
local traitor = lobby.traitors[map_id]

View File

@ -96,7 +96,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
local time = meta:get_int('timer')
sabotage.clear_hud(map_id)
lobby.sabotage_level[map_id] = 0
lobby.sabotage_level[map_id] = 5
lobby.sabotage[map_id] = false
if time > 29 then
local timer = minetest.get_node_timer(pos)

View File

@ -59,10 +59,10 @@ minetest.register_node('tasks:food_crate_apple_active',{
on_rightclick = function(pos, node, clicker)
local name = clicker:get_player_name()
local map_id = lobby.game[name]
local sabotage_level = lobby.sabotage_level[map_id] or 1
local sabotage_level = lobby.sabotage_level[map_id] or 5
local meta = minetest.get_meta(pos)
local level = meta:get_int('level') or 0
if level < sabotage_level then
if level <= sabotage_level then
tasks.player_config[name] = pos
minetest.show_formspec(name, 'tasks:food_crate_apple', formspec_apple_bad())
else

View File

@ -33,7 +33,7 @@ function tasks.add_xp(pos, node, puncher, swap_to) -- This function adds xp and
lobby.xp[map_id] = lobby.xp[map_id] + earned_xp
local needed_xp = game_data['xp'] - lobby.xp[map_id]
minetest.chat_send_player(name, 'You just earned '..earned_xp..' XP for your team.\nYou need '..needed_xp..' more XP to defeat the imposter.')
minetest.log('action', map_id..': Gained '..xp..' still '..needed_xp..' required to complete level.')
minetest.log('action', map_id..': Gained '..earned_xp..' xp, still '..needed_xp..' xp required to complete level.')
tasks.check_xp(map_id, needed_xp)
else
lobby.give_xp(puncher, 1)
@ -64,7 +64,7 @@ function tasks.only_add_xp(xp, name) -- This function only adds XP, you are resp
lobby.xp[map_id] = lobby.xp[map_id] + xp
local needed_xp = game_data['xp'] - lobby.xp[map_id]
minetest.chat_send_player(name, 'You just earned '..xp..' XP for your team.\nYou need '..needed_xp..' more XP to defeat the imposter.')
minetest.log('action', map_id..': Gained '..xp..' still '..needed_xp..' required to complete level.')
minetest.log('action', map_id..': Gained '..xp..' xp, still '..needed_xp..' xp required to complete level.')
tasks.check_xp(map_id, needed_xp)
else
lobby.give_xp(player, 1)
@ -78,23 +78,31 @@ function tasks.only_add_xp(xp, name) -- This function only adds XP, you are resp
end
function tasks.right_click_on(pos, node, clicker, formspec)
local name = clicker:get_player_name()
local timer = minetest.get_node_timer(pos)
local meta = minetest.get_meta(pos)
local min = meta:get_int('time_min') or 30
local max = meta:get_int('time_max') or 60
local random_number = math.random(min,max)
timer:start(random_number)
minetest.show_formspec(clicker:get_player_name(), 'tasks:good', formspec)
meta:set_string('formspec', '')--Can be removed at a future point, this just clears formspecs from individual nodes as they are now handled differently.
local map_id = lobby.game[name]
local sabotage_level = lobby.sabotage_level[map_id] or 5
local level = meta:get_int('level') or 0
if level <= sabotage_level then
minetest.show_formspec(name, 'tasks:good', formspec)
meta:set_string('formspec', '')--Can be removed at a future point, this just clears formspecs from individual nodes as they are now handled differently.
else
minetest.chat_send_player(name, 'level is currently sabotaged, and you can\'t do this now.')
end
end
function tasks.right_click_off(pos, node, clicker, formspec)
local name = clicker:get_player_name()
local map_id = lobby.game[name]
local sabotage_level = lobby.sabotage_level[map_id] or 1
local sabotage_level = lobby.sabotage_level[map_id] or 5
local meta = minetest.get_meta(pos)
local level = meta:get_int('level') or 0
if level < sabotage_level then
if level <= sabotage_level then
tasks.player_config[name] = pos
minetest.show_formspec(name, 'tasks:part_req_form', formspec)
else

View File

@ -40,11 +40,13 @@ minetest.register_node('tasks:microscope',{
on_rightclick = function(pos, node, clicker)
local name = clicker:get_player_name()
local map_id = lobby.game[name]
local sabotage_level = lobby.sabotage_level[map_id] or 1
local sabotage_level = lobby.sabotage_level[map_id] or 5
local meta = minetest.get_meta(pos)
local count = meta:get_int('count') or 0
local level = meta:get_int('level') or 0
if level < sabotage_level then
print ('sabotage level is '..sabotage_level)
print ('node level is '..level)
if level <= sabotage_level then --helps to check if the level is actually sabotaged
tasks.player_config[name] = pos
if count == 0 then
tasks.right_click_on(pos, node, clicker, formspec_idle)
@ -52,7 +54,6 @@ minetest.register_node('tasks:microscope',{
local name = clicker:get_player_name()
local ran = math.random(1,9)
meta:set_int('answer', ran)
tasks.player_config[name] = pos
minetest.show_formspec(name, 'tasks:microscope', microscope_identify(pos, ran, count))
end
else