diff --git a/init.lua b/init.lua index d351291..45a1b64 100644 --- a/init.lua +++ b/init.lua @@ -116,6 +116,7 @@ dofile(srcpath .. "/modes/game_main.lua") dofile(srcpath .. "/modes/TD/ball.lua") -- misc dofile(srcpath .. "/misc/energy.lua") +dofile(srcpath .. "/misc/fall.lua") dofile(srcpath .. "/misc/immunity.lua") block_league.init_storage() diff --git a/src/arena_lib/arena_manager.lua b/src/arena_lib/arena_manager.lua index f2231f0..f694f35 100644 --- a/src/arena_lib/arena_manager.lua +++ b/src/arena_lib/arena_manager.lua @@ -34,6 +34,7 @@ end) arena_lib.on_start("block_league", function(arena) block_league.HUD_remove_inputs(arena) block_league.energy_refill_loop(arena) + block_league.fall_check_loop(arena) end) @@ -147,7 +148,6 @@ end) - arena_lib.on_quit("block_league", function(arena, p_name, is_spectator) -- se aveva la palla, sganciala diff --git a/src/misc/energy.lua b/src/misc/energy.lua index b364567..45abbd8 100644 --- a/src/misc/energy.lua +++ b/src/misc/energy.lua @@ -11,19 +11,12 @@ function block_league.energy_refill_loop(arena) local player = minetest.get_player_by_name(pl_name) local health = player:get_hp() + local energy = arena.players[pl_name].energy - -- se è vivo - if health > 0 then - if player:get_meta():get_int("bl_has_ball") == 0 and arena.players[pl_name].energy < MAX_ENERGY then - arena.players[pl_name].energy = arena.players[pl_name].energy + 1 - block_league.HUD_energy_update(arena, pl_name) - end - - if player:get_pos().y < arena.min_y then - player:set_hp(0) - player:get_meta():set_int("bl_has_ball", 0) - block_league.hud_log_update(arena, "bl_log_suicide.png", pl_name, "") - end + -- se è vivo, senza palla e con energia non al massimo + if health > 0 and player:get_meta():get_int("bl_has_ball") == 0 and energy < MAX_ENERGY then + arena.players[pl_name].energy = energy + 1 + block_league.HUD_energy_update(arena, pl_name) end end diff --git a/src/misc/fall.lua b/src/misc/fall.lua new file mode 100644 index 0000000..e4e8ab4 --- /dev/null +++ b/src/misc/fall.lua @@ -0,0 +1,17 @@ +function block_league.fall_check_loop(arena) + + if not arena.in_game then return end + + for pl_name, stats in pairs(arena.players) do + + local player = minetest.get_player_by_name(pl_name) + + if player:get_hp() > 0 and player:get_pos().y < arena.min_y then + player:set_hp(0) + player:get_meta():set_int("bl_has_ball", 0) + block_league.hud_log_update(arena, "bl_log_suicide.png", pl_name, "") + end + end + + minetest.after(0.1, function() block_league.fall_check(arena) end) +end