Move all death operations inside the arena_lib callback

master
Zughy 2022-06-07 01:18:12 +02:00
parent ac21605bc4
commit 38b3e541a0
2 changed files with 60 additions and 65 deletions

View File

@ -5,6 +5,7 @@ local function create_and_show_HUD() end
local function remove_HUD() end
local function remove_spectate_HUD() end
local function equip_weapons() end
local function wait_for_respawn() end
@ -122,9 +123,26 @@ end)
arena_lib.on_death("block_league", function(arena, p_name, reason)
-- se muoio suicida, perdo un'uccisione
if reason.type == "fall" or reason.player_name == p_name then
local player = minetest.get_player_by_name(p_name)
-- TD: se il giocatore è morto con la palla, questa si sgancia e torna a oscillare
if arena.mode == 1 then
for _, child in pairs (player:get_children()) do
if child:get_luaentity() and child:get_luaentity().timer then
local arena = arena_lib.get_arena_by_player(p_name)
local ball = child:get_luaentity()
if player:get_pos().y < arena.min_y then
ball:reset()
else
ball:detach()
end
break
end
end
-- DM: se muoio suicida, perdo un'uccisione
elseif arena.mode == 2 then
local p_stats = arena.players[p_name]
p_stats.kills = p_stats.kills - 1
@ -132,10 +150,16 @@ arena_lib.on_death("block_league", function(arena, p_name, reason)
team.deaths = team.deaths + 1
block_league.info_panel_update(arena)
end
block_league.deactivate_zoom(player)
player:get_meta():set_int("bl_death_delay", 1)
wait_for_respawn(arena, p_name, 6)
end)
arena_lib.on_change_spectated_target("block_league", function(arena, sp_name, t_type, t_name, prev_type, prev_spectated)
if t_type ~= "player" then return end
-- ritardo di 0.1 perché on_join non è ancora stato chiamato, quindi non hanno ancora la HUD
@ -254,3 +278,37 @@ function equip_weapons(arena, p_name)
end
inv:add_item("main", ItemStack(bouncer))
end
function wait_for_respawn(arena, p_name, time_left)
if not arena_lib.is_player_in_arena(p_name, "block_league") or arena.weapons_disabled then
arena_lib.HUD_hide("broadcast", p_name)
return end
if time_left > 0 then
arena_lib.HUD_send_msg("broadcast", p_name, S("Back in the game in @1", time_left))
else
local player = minetest.get_player_by_name(p_name)
player:get_meta():set_int("bl_death_delay", 0)
player:get_meta():set_int("bl_reloading", 0)
arena_lib.HUD_hide("broadcast", p_name)
-- se è nella sala d'attesa
if player:get_hp() > 0 then
block_league.HUD_spectate_update(arena, p_name, "alive")
player:set_pos(arena_lib.get_random_spawner(arena, arena.players[p_name].teamID))
block_league.immunity(player)
end
return
end
time_left = time_left -1
minetest.after(1, function()
wait_for_respawn(arena, p_name, time_left)
end)
end

View File

@ -28,35 +28,6 @@ end)
minetest.register_on_dieplayer(function(player)
local p_name = player:get_player_name()
if not arena_lib.is_player_in_arena(p_name, "block_league") then return end
-- se il giocatore è morto con la palla, questa si sgancia e torna a oscillare
for _, child in pairs (minetest.get_player_by_name(p_name):get_children()) do
if child:get_luaentity() and child:get_luaentity().timer then
local arena = arena_lib.get_arena_by_player(p_name)
local ball = child:get_luaentity()
if player:get_pos().y < arena.min_y then
ball:reset()
else
ball:detach()
end
break
end
end
block_league.deactivate_zoom(player)
player:get_meta():set_int("bl_death_delay", 1)
wait_for_respawn(arena_lib.get_arena_by_player(p_name), p_name, 6)
end)
minetest.register_on_respawnplayer(function(player)
local p_name = player:get_player_name()
@ -94,40 +65,6 @@ end)
---------------FUNZIONI LOCALI----------------
----------------------------------------------
function wait_for_respawn(arena, p_name, time_left)
if not arena_lib.is_player_in_arena(p_name, "block_league") or arena.weapons_disabled then
arena_lib.HUD_hide("broadcast", p_name)
return end
if time_left > 0 then
arena_lib.HUD_send_msg("broadcast", p_name, S("Back in the game in @1", time_left))
else
local player = minetest.get_player_by_name(p_name)
player:get_meta():set_int("bl_death_delay", 0)
player:get_meta():set_int("bl_reloading", 0)
arena_lib.HUD_hide("broadcast", p_name)
-- se è nella sala d'attesa
if player:get_hp() > 0 then
block_league.HUD_spectate_update(arena, p_name, "alive")
player:set_pos(arena_lib.get_random_spawner(arena, arena.players[p_name].teamID))
block_league.immunity(player)
end
return
end
time_left = time_left -1
minetest.after(1, function()
wait_for_respawn(arena, p_name, time_left)
end)
end
function remove_weapons(inv)
inv:remove_item("main", ItemStack("block_league:smg"))