Compare commits

...

5 Commits

11 changed files with 70 additions and 106 deletions

View File

@ -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

80
src/api/in_queue.lua Normal file → Executable file
View File

@ -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

View File

@ -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
})

View File

@ -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

0
src/editor/tools_customise.lua Normal file → Executable file
View File

0
src/editor/tools_lighting.lua Normal file → Executable file
View File

View File

@ -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
})

View File

@ -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
})

0
src/spectate/spectate_dummy.lua Normal file → Executable file
View File

View File

@ -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

View File

@ -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
})