diff --git a/_arena_lib/arena_callbacks.lua b/_arena_lib/arena_callbacks.lua index 3b95fc3..6061220 100644 --- a/_arena_lib/arena_callbacks.lua +++ b/_arena_lib/arena_callbacks.lua @@ -59,10 +59,10 @@ end) arena_lib.on_end("skywars", function(arena, players) - for pl_name in pairs(arena.players) do + for pl_name in pairs(players) do local player = minetest.get_player_by_name(pl_name) - remove_privs(pl_name) + remove_privs(pl_name) skywars.remove_HUD(arena, pl_name) skywars.remove_armor(player) end @@ -78,8 +78,7 @@ arena_lib.on_death("skywars", function(arena, pl_name, reason) local killer = reason.object:get_player_name() arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("@1 was killed by @2", pl_name, killer)) - arena.HUDs[killer].players_killed.amount = arena.HUDs[killer].players_killed.amount + 1 - reason.object:hud_change(arena.HUDs[killer].players_killed.id, "text", tostring(arena.HUDs[killer].players_killed.amount)) + skywars.increment_players_killed(killer) end end @@ -91,6 +90,15 @@ end) +arena_lib.on_prequit("skywars", function(arena, pl_name) + if arena.in_loading then + return false + else + return true + end +end) + + arena_lib.on_quit("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) @@ -169,14 +177,7 @@ function add_privs(pl_name) player:get_meta():set_string("sw_can_noclip", "false") end - if skywars_settings.build_permission ~= "" then - if privs[skywars_settings.build_permission] then - player:get_meta():set_string("sw_can_build", "true") - else - player:get_meta():set_string("sw_can_build", "false") - end - privs[skywars_settings.build_permission] = true - end + privs[skywars_settings.build_permission] = true minetest.set_player_privs(pl_name, privs) end @@ -190,7 +191,7 @@ function remove_privs(pl_name) if player:get_meta():get_string("sw_can_noclip") == "true" then privs.noclip = true end - if player:get_meta():get_string("sw_can_build") == "false" then + if not privs.server and not privs["privs"] then privs[skywars_settings.build_permission] = nil end @@ -249,12 +250,13 @@ end function keep_teleporting(player, pos, seconds, current_second) - local step = 3 + local step = 2 current_second = current_second or 1 if current_second > seconds then return end minetest.after(step, function() + player:add_player_velocity(vector.multiply(player:get_player_velocity(), -1)) player:set_pos(pos) keep_teleporting(player, pos, seconds, current_second + step) end) diff --git a/_hud/hud_manager.lua b/_hud/hud_manager.lua index a249a7f..2417705 100644 --- a/_hud/hud_manager.lua +++ b/_hud/hud_manager.lua @@ -1,3 +1,6 @@ +local saved_huds = {} -- id = hud + + function skywars.generate_HUD(arena, pl_name) local player = minetest.get_player_by_name(pl_name) local players_count_ @@ -72,7 +75,7 @@ function skywars.generate_HUD(arena, pl_name) number = 0xdff6f5, }) - arena.HUDs[pl_name] = { + saved_huds[pl_name] = { background_players_counter = background_players_counter_, players_count = players_count_, players_killed = {id = players_killed_, amount = 0}, @@ -88,12 +91,12 @@ end function skywars.remove_HUD(arena, pl_name) local player = minetest.get_player_by_name(pl_name) - player:hud_remove(arena.HUDs[pl_name].background_players_counter) - player:hud_remove(arena.HUDs[pl_name].background_kill_counter) - player:hud_remove(arena.HUDs[pl_name].players_count) - player:hud_remove(arena.HUDs[pl_name].players_killed.id) - player:hud_remove(arena.HUDs[pl_name].timer) - player:hud_remove(arena.HUDs[pl_name].background_timer) + for name, id in pairs(saved_huds[pl_name]) do + if type(id) == "table" then id = id.id end + player:hud_remove(id) + end + + saved_huds[pl_name] = {} end @@ -111,15 +114,25 @@ function skywars.update_players_counter(arena, players_amount_updated) if arena.players_original_amount == nil then return end local players_counter = tostring(arena.players_amount) .. "/" .. tostring(arena.players_original_amount) - player:hud_change(arena.HUDs[pl_name].players_count, "text", players_counter) + player:hud_change(saved_huds[pl_name].players_count, "text", players_counter) end end +function skywars.increment_players_killed(pl_name) + local player = minetest.get_player_by_name(pl_name) + local players_killed = saved_huds[pl_name].players_killed.amount + 1 + saved_huds[pl_name].players_killed.amount = players_killed + + player:hud_change(saved_huds[pl_name].players_killed.id, "text", players_killed) +end + + + function skywars.update_timer_hud(arena) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) - player:hud_change(arena.HUDs[pl_name].timer, "text", arena.current_time) + player:hud_change(saved_huds[pl_name].timer, "text", arena.current_time) end end \ No newline at end of file diff --git a/init.lua b/init.lua index 205f75e..1383b8a 100644 --- a/init.lua +++ b/init.lua @@ -14,7 +14,6 @@ arena_lib.register_minigame("skywars", { celebration_time = skywars_settings.celebration_time, load_time = skywars_settings.loading_time, temp_properties = { - HUDs = {}, players_original_amount = 0, }, properties = {