Waiting room instead of the obnoxious jittering effect when respawning

master
Zughy 2020-11-12 15:12:14 +01:00
parent fc47bd5262
commit 8f79312ade
3 changed files with 47 additions and 18 deletions

View File

@ -105,7 +105,7 @@ ChatCmdBuilder.new("bladmin", function(cmd)
arena_lib.disable_arena(sender, mod, arena)
end)
-- aggiunta/rimozione TD. option può essere "add" o "remove"
-- aggiunta/rimozione TD. option può essere "set" o "remove"
cmd:sub("goal :option :arena :team", function(sender, option, arena_name, team)
-- TODO: muovere in una funzione a parte
local id, arena = arena_lib.get_arena_by_name("block_league", arena_name)
@ -114,7 +114,7 @@ ChatCmdBuilder.new("bladmin", function(cmd)
minetest.chat_send_player(sender, "Invalid parameter")
return end
if arena.mod == 2 then
if arena.mod ~= 1 then
minetest.chat_send_player(sender, "Invalid parameter")
return end
@ -155,6 +155,35 @@ ChatCmdBuilder.new("bladmin", function(cmd)
arena_lib.change_arena_property(sender, "block_league", arena_name, "ball_spawn" , new_param)
end)
cmd:sub("wroom :option :arena :team", function(sender, option, arena_name, team)
local id, arena = arena_lib.get_arena_by_name("block_league", arena_name)
if not arena then
minetest.chat_send_player(sender, "Invalid parameter")
return end
if arena.mod ~= 1 then
minetest.chat_send_player(sender, "Invalid parameter")
return end
if team ~= "red" and team ~= "blue" then
minetest.chat_send_player(sender, "Invalid parameter")
return end
local w_room = team == "red" and "waiting_room_red" or "waiting_room_blue"
if option == "set" then
local pos = vector.round(minetest.get_player_by_name(sender):get_pos())
arena_lib.change_arena_property(sender, "block_league", arena_name, w_room, pos)
elseif option == "remove" then
arena_lib.change_arena_property(sender, "block_league", arena_name, w_room , {})
else
minetest.chat_send_player(sender, "Invalid parameter")
return
end
end)
cmd:sub("addminy :arena", function(sender, arena_name)
local id, arena = arena_lib.get_arena_by_name("block_league", arena_name)
local pos = vector.round(minetest.get_player_by_name(sender):get_pos())

View File

@ -43,6 +43,8 @@ arena_lib.register_minigame("block_league", {
immunity_time = 6,
goal_red = {},
goal_blue = {},
waiting_room_red = {},
waiting_room_blue = {},
ball_spawn = {},
min_y = 0
},

View File

@ -1,7 +1,6 @@
local S = minetest.get_translator("block_league")
local function wait_for_respawn() end
local function death_delay() end
local function remove_weapons() end
@ -47,7 +46,13 @@ minetest.register_on_respawnplayer(function(player)
local p_name = player:get_player_name()
local arena = arena_lib.get_arena_by_player(p_name)
death_delay(arena, p_name, player:get_pos())
if player:get_meta():get_int("bl_death_delay") == 1 then
if arena.players[p_name].teamID == 1 then
player:set_pos(arena.waiting_room_red)
else
player:set_pos(arena.waiting_room_blue)
end
end
arena.players[p_name].energy = 100
block_league.energy_update(arena, p_name)
@ -78,9 +83,16 @@ function wait_for_respawn(arena, p_name, time_left)
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
player:set_pos(arena_lib.get_random_spawner(arena, arena.players[p_name].teamID))
end
return
end
@ -93,20 +105,6 @@ end
function death_delay(arena, p_name, pos)
if not arena_lib.is_player_in_arena(p_name, "block_league") or arena.weapons_disabled then return end
local player = minetest.get_player_by_name(p_name)
if player:get_meta():get_int("bl_death_delay") == 0 then return end
player:set_pos(pos)
minetest.after(0.2, function() death_delay(arena, p_name, pos) end)
end
function remove_weapons(inv)
inv:remove_item("main", ItemStack("block_league:smg"))