Compare commits
5 Commits
a0449234a7
...
8f4c537b67
Author | SHA1 | Date |
---|---|---|
Zughy | 8f4c537b67 | |
Zughy | 22e3683b59 | |
Zughy | c015c8c2c4 | |
Zughy | 39d2803d26 | |
Zughy | 3db1c62336 |
|
@ -684,7 +684,7 @@ function arena_lib.set_spawner(sender, mod, arena_name, teamID_or_name, param, I
|
|||
|
||||
-- se c'è già uno spawner in quel punto, annullo
|
||||
for id, spawn in pairs(arena.spawn_points) do
|
||||
if minetest.serialize(pos) == minetest.serialize(spawn.pos) then
|
||||
if vector.equals(pos, spawn.pos) then
|
||||
minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] There's already a spawn in this point!")))
|
||||
return end
|
||||
end
|
||||
|
|
|
@ -2,12 +2,11 @@ local S = minetest.get_translator("arena_lib")
|
|||
|
||||
local function initialise_queue_container() end
|
||||
local function assign_team() end
|
||||
local function countdown() end
|
||||
local function go_to_arena() end
|
||||
local function queue_format() end
|
||||
|
||||
local players_in_queue = {} -- KEY: player name, VALUE: {(string) minigame, (int) arenaID}
|
||||
local active_queues = {} -- KEY: [mod] arena_name, VALUE: (int) current timer
|
||||
local active_queues = {} -- KEY: [mod] arena_name, VALUE: {(table) arena, (int) time_left, (table) was_second_run}
|
||||
|
||||
-- inizializzo il contenitore delle code una volta che tutti i minigiochi sono stati caricati
|
||||
minetest.after(0.1, function()
|
||||
|
@ -15,7 +14,43 @@ minetest.after(0.1, function()
|
|||
end)
|
||||
|
||||
----------------------------------------
|
||||
-- GESTIONE CONTO ALLA ROVESCIA SU GLOBALSTEP
|
||||
--
|
||||
-- se usassi un normale `after`, all'entrare e uscire ripetutamente da una coda
|
||||
-- i giocatori riuscirebbero a impallarle, eseguendone due o più per la stessa
|
||||
-- arena. Nonostante ciò non vada a fondere il server, dimezza comunque i tempi
|
||||
-- d'attesa e riproduce il doppio dei suoni. Da qui il globalstep
|
||||
minetest.register_globalstep(function(dtime)
|
||||
for mod, ar_name in pairs(active_queues) do
|
||||
for _, info in pairs(ar_name) do
|
||||
info.time_left = info.time_left - dtime
|
||||
|
||||
local arena = info.arena
|
||||
local time_left = math.ceil(info.time_left)
|
||||
|
||||
-- per eseguire queste chiamate solo una volta al secondo, utilizzo un booleano
|
||||
if info.was_second_run[time_left] then return end
|
||||
|
||||
if time_left == 0 then
|
||||
go_to_arena(mod, arena)
|
||||
elseif time_left <= 5 then
|
||||
arena_lib.HUD_send_msg_all("broadcast", arena, S("Game begins in @1!", time_left), nil, "arenalib_countdown")
|
||||
arena_lib.HUD_send_msg_all("hotbar", arena, queue_format(arena, S("Get ready!")))
|
||||
else
|
||||
arena_lib.HUD_send_msg_all("hotbar", arena, queue_format(arena, S("@1 seconds for the match to start", time_left)))
|
||||
end
|
||||
|
||||
info.was_second_run[time_left] = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
----------------------------------------
|
||||
|
||||
|
||||
----------------------------------------------
|
||||
--------------------CORPO---------------------
|
||||
----------------------------------------------
|
||||
|
||||
function arena_lib.join_queue(mod, arena, p_name)
|
||||
-- se si è nell'editor
|
||||
|
@ -181,8 +216,7 @@ function arena_lib.join_queue(mod, arena, p_name)
|
|||
|
||||
arena.in_queue = true
|
||||
has_queue_status_changed = true
|
||||
active_queues[mod][arena_name] = timer
|
||||
countdown(mod, arena)
|
||||
active_queues[mod][arena_name] = { arena = arena, time_left = timer, was_second_run = {} }
|
||||
|
||||
-- sennò aggiorno semplicemente la HUD
|
||||
else
|
||||
|
@ -193,8 +227,8 @@ function arena_lib.join_queue(mod, arena, p_name)
|
|||
|
||||
-- se raggiungo i giocatori massimi e la partita non è iniziata, accorcio eventualmente la durata
|
||||
if arena.players_amount == arena_max_players and arena.in_queue then
|
||||
if active_queues[mod][arena_name] > 5 then
|
||||
active_queues[mod][arena_name] = 5
|
||||
if active_queues[mod][arena_name].time_left > 5 then
|
||||
active_queues[mod][arena_name].time_left = 5
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -247,6 +281,9 @@ function arena_lib.remove_player_from_queue(p_name)
|
|||
local arena_name = arena.name
|
||||
|
||||
for pl_name, _ in pairs(players_to_remove) do
|
||||
arena_lib.HUD_hide("all", pl_name)
|
||||
arena_lib.send_message_in_arena(arena, "both", minetest.colorize("#d69298", arena_name .. " < " .. pl_name))
|
||||
|
||||
players_in_queue[pl_name] = nil
|
||||
arena.players_amount = arena.players_amount - 1
|
||||
if arena.teams_enabled then
|
||||
|
@ -255,9 +292,6 @@ function arena_lib.remove_player_from_queue(p_name)
|
|||
end
|
||||
arena.players[pl_name] = nil
|
||||
arena.players_and_spectators[pl_name] = nil
|
||||
|
||||
arena_lib.HUD_hide("all", pl_name)
|
||||
arena_lib.send_message_in_arena(arena, "both", minetest.colorize("#d69298", arena_name .. " < " .. pl_name))
|
||||
end
|
||||
|
||||
local players_required = arena_lib.get_players_amount_left_to_start_queue(arena)
|
||||
|
@ -282,7 +316,7 @@ function arena_lib.remove_player_from_queue(p_name)
|
|||
|
||||
-- idem se è rimasta in coda
|
||||
else
|
||||
local seconds = active_queues[mod][arena_name]
|
||||
local seconds = math.ceil(active_queues[mod][arena_name].time_left)
|
||||
arena_lib.HUD_send_msg_all("hotbar", arena, queue_format(arena, S("@1 seconds for the match to start", seconds)))
|
||||
end
|
||||
|
||||
|
@ -419,32 +453,6 @@ end
|
|||
|
||||
|
||||
|
||||
function countdown(mod, arena)
|
||||
local seconds = active_queues[mod][arena.name]
|
||||
|
||||
-- dai 5 secondi in giù il messaggio è stampato su broadcast e genero le squadre
|
||||
if seconds == 0 then
|
||||
go_to_arena(mod, arena)
|
||||
elseif seconds <= 5 then
|
||||
arena_lib.HUD_send_msg_all("broadcast", arena, S("Game begins in @1!", seconds), nil, "arenalib_countdown")
|
||||
arena_lib.HUD_send_msg_all("hotbar", arena, queue_format(arena, S("Get ready!")))
|
||||
else
|
||||
arena_lib.HUD_send_msg_all("hotbar", arena, queue_format(arena, S("@1 seconds for the match to start", seconds)))
|
||||
end
|
||||
|
||||
minetest.after(1, function()
|
||||
-- i secondi potrebbero esser stati alterati dall'esterno, tipo se la coda si è riempita
|
||||
seconds = active_queues[mod][arena.name]
|
||||
|
||||
if not arena.in_queue or not seconds then return end
|
||||
|
||||
active_queues[mod][arena.name] = seconds -1
|
||||
countdown(mod, arena)
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function go_to_arena(mod, arena)
|
||||
|
||||
active_queues[mod][arena.name] = nil
|
||||
|
|
|
@ -23,12 +23,8 @@ minetest.register_tool("arena_lib:editor_players", {
|
|||
user:get_meta():set_int("arena_lib_editor.players_number", 2)
|
||||
|
||||
arena_lib.HUD_send_msg("hotbar", user:get_player_name(), S("Players | num to set: @1 (left/right click slot #3 to change)", 2))
|
||||
|
||||
minetest.after(0, function()
|
||||
arena_lib.give_players_tools(user:get_inventory(), mod, arena)
|
||||
end)
|
||||
arena_lib.give_players_tools(user:get_inventory(), mod, arena)
|
||||
end
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
@ -47,12 +43,8 @@ minetest.register_tool("arena_lib:editor_spawners", {
|
|||
user:get_meta():set_int("arena_lib_editor.team_ID", 1)
|
||||
|
||||
arena_lib.HUD_send_msg("hotbar", user:get_player_name(), S("Spawners | sel. ID: @1 (right click slot #2 to change)", 1))
|
||||
|
||||
minetest.after(0, function()
|
||||
arena_lib.give_spawners_tools(user)
|
||||
end)
|
||||
arena_lib.give_spawners_tools(user)
|
||||
end
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
@ -66,14 +58,9 @@ minetest.register_tool("arena_lib:editor_signs", {
|
|||
on_drop = function() end,
|
||||
|
||||
on_use = function(itemstack, user)
|
||||
|
||||
arena_lib.HUD_send_msg("hotbar", user:get_player_name(), S("One sign per arena"))
|
||||
|
||||
minetest.after(0, function()
|
||||
arena_lib.give_signs_tools(user)
|
||||
end)
|
||||
arena_lib.give_signs_tools(user)
|
||||
end
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
@ -87,14 +74,9 @@ minetest.register_tool("arena_lib:editor_customise", {
|
|||
on_drop = function() end,
|
||||
|
||||
on_use = function(itemstack, user)
|
||||
|
||||
arena_lib.HUD_send_msg("hotbar", user:get_player_name(), S("Pimp my arena"))
|
||||
|
||||
minetest.after(0, function()
|
||||
arena_lib.give_customise_tools(user)
|
||||
end)
|
||||
arena_lib.give_customise_tools(user)
|
||||
end
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
@ -111,9 +93,7 @@ minetest.register_tool("arena_lib:editor_settings", {
|
|||
|
||||
arena_lib.HUD_send_msg("hotbar", user:get_player_name(), S("Arena settings"))
|
||||
|
||||
minetest.after(0, function()
|
||||
arena_lib.give_settings_tools(user)
|
||||
end)
|
||||
arena_lib.give_settings_tools(user)
|
||||
end
|
||||
|
||||
})
|
||||
|
@ -149,9 +129,7 @@ minetest.register_tool("arena_lib:editor_return", {
|
|||
on_drop = function() end,
|
||||
|
||||
on_use = function(itemstack, user)
|
||||
minetest.after(0, function()
|
||||
arena_lib.show_main_editor(user)
|
||||
end)
|
||||
arena_lib.show_main_editor(user)
|
||||
end
|
||||
|
||||
})
|
||||
|
|
|
@ -45,11 +45,9 @@ function arena_lib.register_editor_section(mod, def)
|
|||
|
||||
local inv = user:get_inventory()
|
||||
|
||||
minetest.after(0, function()
|
||||
inv:set_list("main", item_list)
|
||||
inv:set_stack("main", 7, "arena_lib:editor_return")
|
||||
inv:set_stack("main", 8, "arena_lib:editor_quit")
|
||||
end)
|
||||
inv:set_list("main", item_list)
|
||||
inv:set_stack("main", 7, "arena_lib:editor_return")
|
||||
inv:set_stack("main", 8, "arena_lib:editor_quit")
|
||||
end
|
||||
})
|
||||
end
|
||||
|
@ -177,11 +175,7 @@ function arena_lib.quit_editor(player)
|
|||
player:override_day_night_ratio(lighting.light)
|
||||
|
||||
-- restituisco l'inventario
|
||||
minetest.after(0, function()
|
||||
if not minetest.get_player_by_name(p_name) then return end
|
||||
player:get_inventory():set_list("main", inv)
|
||||
end)
|
||||
|
||||
player:get_inventory():set_list("main", inv)
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -33,10 +33,8 @@ minetest.register_node("arena_lib:players_min", {
|
|||
|
||||
if not arena_lib.change_players_amount(user:get_player_name(), mod, arena_name, players_amount, nil, true) then return end
|
||||
|
||||
-- aggiorno lo stack se il cambio è andato a buon fine
|
||||
minetest.after(0, function()
|
||||
user:set_wielded_item("arena_lib:players_min " .. players_amount)
|
||||
end)
|
||||
-- aggiorno la quantità se il cambio è andato a buon fine
|
||||
user:set_wielded_item("arena_lib:players_min " .. players_amount)
|
||||
end
|
||||
})
|
||||
|
||||
|
@ -59,10 +57,8 @@ minetest.register_node("arena_lib:players_max", {
|
|||
|
||||
if not arena_lib.change_players_amount(user:get_player_name(), mod, arena_name, nil, players_amount, true) then return end
|
||||
|
||||
-- aggiorno lo stack se il cambio è andato a buon fine
|
||||
minetest.after(0, function()
|
||||
user:set_wielded_item("arena_lib:players_max " .. players_amount)
|
||||
end)
|
||||
-- aggiorno la quantità se il cambio è andato a buon fine
|
||||
user:set_wielded_item("arena_lib:players_max " .. players_amount)
|
||||
end
|
||||
})
|
||||
|
||||
|
@ -105,9 +101,7 @@ minetest.register_tool("arena_lib:players_teams_on", {
|
|||
|
||||
arena_lib.toggle_teams_per_arena(user:get_player_name(), mod, arena_name, 0, true)
|
||||
|
||||
minetest.after(0, function()
|
||||
user:get_inventory():set_stack("main", 5, "arena_lib:players_teams_off")
|
||||
end)
|
||||
user:get_inventory():set_stack("main", 5, "arena_lib:players_teams_off")
|
||||
end
|
||||
})
|
||||
|
||||
|
@ -128,9 +122,7 @@ minetest.register_tool("arena_lib:players_teams_off", {
|
|||
|
||||
arena_lib.toggle_teams_per_arena(user:get_player_name(), mod, arena_name, 1, true)
|
||||
|
||||
minetest.after(0, function()
|
||||
user:get_inventory():set_stack("main", 5, "arena_lib:players_teams_on")
|
||||
end)
|
||||
user:get_inventory():set_stack("main", 5, "arena_lib:players_teams_on")
|
||||
end
|
||||
})
|
||||
|
||||
|
|
|
@ -84,9 +84,7 @@ minetest.register_craftitem("arena_lib:timer", {
|
|||
|
||||
arena_lib.set_timer(placer:get_player_name(), mod, arena_name, -1, true)
|
||||
|
||||
minetest.after(0, function()
|
||||
inv:set_stack("main", 1, "arena_lib:timer_off")
|
||||
end)
|
||||
inv:set_stack("main", 1, "arena_lib:timer_off")
|
||||
end
|
||||
|
||||
})
|
||||
|
|
|
@ -661,9 +661,7 @@ function override_hotbar(player, mod, arena)
|
|||
table.insert(tools, #tools, "arena_lib:spectate_join")
|
||||
end
|
||||
|
||||
minetest.after(0, function()
|
||||
player:hud_set_hotbar_image("arenalib_gui_hotbar" .. #tools .. ".png")
|
||||
player:hud_set_hotbar_itemcount(#tools)
|
||||
player:get_inventory():set_list("main", tools)
|
||||
end)
|
||||
player:hud_set_hotbar_image("arenalib_gui_hotbar" .. #tools .. ".png")
|
||||
player:hud_set_hotbar_itemcount(#tools)
|
||||
player:get_inventory():set_list("main", tools)
|
||||
end
|
||||
|
|
|
@ -92,12 +92,10 @@ minetest.register_tool("arena_lib:spectate_join", {
|
|||
on_drop = function() end,
|
||||
|
||||
on_use = function(itemstack, user)
|
||||
minetest.after(0, function() -- after sennò non rimuove quest'oggetto
|
||||
local p_name = user:get_player_name()
|
||||
local mod = arena_lib.get_mod_by_player(p_name)
|
||||
local arena_ID = arena_lib.get_arenaID_by_player(p_name)
|
||||
arena_lib.join_arena(mod, p_name, arena_ID)
|
||||
end)
|
||||
local p_name = user:get_player_name()
|
||||
local mod = arena_lib.get_mod_by_player(p_name)
|
||||
local arena_ID = arena_lib.get_arenaID_by_player(p_name)
|
||||
arena_lib.join_arena(mod, p_name, arena_ID)
|
||||
end
|
||||
|
||||
})
|
||||
|
@ -113,9 +111,7 @@ minetest.register_tool("arena_lib:spectate_quit", {
|
|||
on_drop = function() end,
|
||||
|
||||
on_use = function(itemstack, user)
|
||||
minetest.after(0, function() -- after sennò non rimuove quest'oggetto
|
||||
arena_lib.remove_player_from_arena(user:get_player_name(), 3)
|
||||
end)
|
||||
arena_lib.remove_player_from_arena(user:get_player_name(), 3)
|
||||
end
|
||||
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue