From 3cefc54002543d29ba75e341078a40a8b439f0af Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Thu, 26 Jan 2023 21:51:22 +0000 Subject: [PATCH 1/8] DOCS: remove deprecated commands --- DOCS.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/DOCS.md b/DOCS.md index e670c91..2b81fcb 100644 --- a/DOCS.md +++ b/DOCS.md @@ -124,8 +124,6 @@ A few more are available for players having the `arenalib_admin` privilege: * `list `: lists all the arenas of `` * `remove () `: deletes an arena * `settings `: changes `` settings -* `/forceend mod arena_name`: forcibly ends an ongoing game -* `/flusharena mod arena_name`: restores a broken arena (when not in progress) ### 1.4 Callbacks Callbacks are divided in two types: minigame callbacks and global callbacks. The former allow you to customise your mod even more, whilst the latter are great for external mods that want to customise the experience outside of a specific minigame (e.g. a server giving players some currency when winning, a HUD telling players what game is in progress). From 5e73a5cdb637bf9798a9769b7454fa5ef799625c Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Sat, 28 Jan 2023 13:51:58 +0100 Subject: [PATCH 2/8] Bugfix: spectators leaving an arena were still considered inside when on_quit callback was run --- src/api/in_game.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/in_game.lua b/src/api/in_game.lua index 52619cf..fcd6fa1 100755 --- a/src/api/in_game.lua +++ b/src/api/in_game.lua @@ -481,9 +481,9 @@ function arena_lib.remove_player_from_arena(p_name, reason, executioner) operations_before_leaving_arena(mod_ref, arena, p_name, reason) arena.players_and_spectators[p_name] = nil arena.past_present_players_inside[p_name] = nil + players_in_game[p_name] = nil handle_leaving_callbacks(mod_ref, arena, p_name, reason, executioner, true) - players_in_game[p_name] = nil -- sennò... else From 0702e9d1f0daf0e97c240247c6cdde80d8985d90 Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Sat, 28 Jan 2023 14:18:42 +0100 Subject: [PATCH 3/8] Warn about STORE_INVENTORY_MODE deprecation --- init.lua | 2 -- src/_load.lua | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/init.lua b/init.lua index 331e994..9c9ceb0 100755 --- a/init.lua +++ b/init.lua @@ -7,8 +7,6 @@ arena_lib = {} dofile(srcpath .. "/_load.lua") dofile(modpath .. "/libs/chatcmdbuilder.lua") -dofile(minetest.get_worldpath() .. "/arena_lib/SETTINGS.lua") - dofile(srcpath .. "/admin_tools/entrances.lua") dofile(srcpath .. "/admin_tools/minigame_settings.lua") dofile(srcpath .. "/api/core.lua") diff --git a/src/_load.lua b/src/_load.lua index d42b4bc..552b3c2 100644 --- a/src/_load.lua +++ b/src/_load.lua @@ -1,3 +1,6 @@ +---------------------------------------------- +-----------------WORLD FOLDER----------------- +---------------------------------------------- local function load_world_folder() local wrld_dir = minetest.get_worldpath() .. "/arena_lib" local content = minetest.get_dir_list(wrld_dir) @@ -43,3 +46,17 @@ local function load_world_folder() end load_world_folder() + + + + + +---------------------------------------------- +-------------------SETTINGS------------------- +---------------------------------------------- +dofile(minetest.get_worldpath() .. "/arena_lib/SETTINGS.lua") + +-- deprecated, to remove in 7.0 +if arena_lib.STORE_INVENTORY_MODE then + minetest.log("warning", "[ARENA_LIB] Setting 'STORE_INVENTORY_MODE' is of no use now, please delete it from SETTINGS.lua (inside the arena_lib world folder)") +end From 4e845543d105515e101c5a6407691906a6594f1d Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Sun, 29 Jan 2023 00:16:53 +0100 Subject: [PATCH 4/8] Add /arenas help command (closes #199) --- locale/arena_lib.it.tr | 19 ++++++++++++++----- locale/template.txt | 19 ++++++++++++++----- src/commands.lua | 37 ++++++++++++++++++------------------- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/locale/arena_lib.it.tr b/locale/arena_lib.it.tr index c78848d..266fa2e 100755 --- a/locale/arena_lib.it.tr +++ b/locale/arena_lib.it.tr @@ -1,4 +1,4 @@ -# version 5.4.0 +# version 5.5.0-dev # author(s): Zughy # reviewer(s): # textdomain: arena_lib @@ -21,11 +21,20 @@ message=messaggio Writes a message in the arena global chat while in a game=Scrive un messaggio nella chat globale dell'arena mentre si è in una partita Writes a message in the arena team chat while in a game (if teams are enabled)=Scrive un messaggio nella chat di squadra dell'arena mentre si è in una partita (se le squadre sono abilitate) [!] Teams are not enabled!=[!] Le squadre non sono abilitate! -# TODO: for when /arenas help is implemented -Kicks a player from an ongoing game=Caccia un giocatore da una partita in corso -Tweaks the minigame settings for the current server=Modifica le impostazioni del minigioco per il server corrente -DEBUG ONLY: reset the properties of a bugged arena=SOLO DEBUG: ripristina le proprietà di un'arena rotta +Creates an arena for the specified minigame=Crea un'arena per il minigioco specificato +Disables an arena=Disabilita un'arena +Enters the arena editor=Entra nell'editor dell'arena +Enables an arena=Abilita un'arena +Changes the entrance types of the specified minigame=Cambia i tipi d'entrata del minigioco specificato +DEBUG ONLY - resets the properties of a bugged arena=SOLO DEBUG - ripristina le proprietà di un'arena rotta Forcibly ends an ongoing game=Forza la conclusione di una partita in corso +Lists all the installed minigames, alphabetically sorted=Elenca tutti i minigiochi installati, in ordine alfabetico +See @1=Vedi @1 +Prints all the arena's info=Stampa a schermo tutte le informazioni dell'arena +Kicks a player from an ongoing game=Caccia un giocatore da una partita in corso +Lists all the arenas of the specified minigame=Elenca tutte le arene del minigioco specificato +Deletes an arena=Cancella un'arena +Tweaks the minigame settings for the current server=Modifica le impostazioni del minigioco per il server corrente # admin_tools/entrances.lua [!] You can't perform this action while in game!=[!] Non puoi eseguire quest'azione mentre sei in partita! diff --git a/locale/template.txt b/locale/template.txt index 452eade..bb0303a 100755 --- a/locale/template.txt +++ b/locale/template.txt @@ -1,4 +1,4 @@ -# version 5.4.0 +# version 5.5.0-dev # author(s): # reviewer(s): # textdomain: arena_lib @@ -21,11 +21,20 @@ message= Writes a message in the arena global chat while in a game= Writes a message in the arena team chat while in a game (if teams are enabled)= [!] Teams are not enabled!= -#TODO: for when /arenas help is implemented -Kicks a player from an ongoing game= -Tweaks the minigame settings for the current server= -DEBUG ONLY: reset the properties of a bugged arena= +Creates an arena for the specified minigame= +Disables an arena= +Enters the arena editor= +Enables an arena= +Changes the entrance types of the specified minigame= +DEBUG ONLY - resets the properties of a bugged arena= Forcibly ends an ongoing game= +Lists all the installed minigames, alphabetically sorted= +See @1= +Prints all the arena's info= +Kicks a player from an ongoing game= +Lists all the arenas of the specified minigame= +Deletes an arena= +Tweaks the minigame settings for the current server= # admin_tools/entrances.lua [!] You can't perform this action while in game!= diff --git a/src/commands.lua b/src/commands.lua index 4b5570f..c578d87 100755 --- a/src/commands.lua +++ b/src/commands.lua @@ -158,29 +158,28 @@ ChatCmdBuilder.new("arenas", function(cmd) end) -- aiuto - --[[ TODO: per elencare comandi con descrizione geolocalizzata e con sintassi colorata tipo World Edit. In /help è orribile, rimuovere da lì. !Alcune traduzioni stanno già nei file di localizzazione! cmd:sub("help", function(sender) - minetest.chat_send_player(sender, "TUTTI I VARI COMANDI") + minetest.chat_send_player(sender, + minetest.colorize("#00ffff", "/arenas create") .. " <" .. S("minigame") .. "> <" .. S("arena") .. "> ( ): " .. S("Creates an arena for the specified minigame") .. "\n" + .. minetest.colorize("#00ffff", "/arenas disable") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("Disables an arena") .. "\n" + .. minetest.colorize("#00ffff", "/arenas edit") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("Enters the arena editor") .. "\n" + .. minetest.colorize("#00ffff", "/arenas enable") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("Enables an arena") .. "\n" + .. minetest.colorize("#00ffff", "/arenas entrances") .. " <" .. S("minigame") .. ">: " .. S("Changes the entrance types of the specified minigame") .. "\n" + .. minetest.colorize("#00ffff", "/arenas flush") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("DEBUG ONLY - resets the properties of a bugged arena") .. "\n" + .. minetest.colorize("#00ffff", "/arenas forceend") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("Forcibly ends an ongoing game") .. "\n" + .. minetest.colorize("#00ffff", "/arenas gamelist") .. ": " .. S("Lists all the installed minigames, alphabetically sorted") .. "\n" + .. minetest.colorize("#00ffff", "/arenas glist") .. ": " .. S("See @1", "gamelist") .. "\n" + .. minetest.colorize("#00ffff", "/arenas info") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("Prints all the arena's info") .. "\n" + .. minetest.colorize("#00ffff", "/arenas kick") .. " <" .. S("player") .. ">: " .. S("Kicks a player from an ongoing game") .. "\n" + .. minetest.colorize("#00ffff", "/arenas list") .. " <" .. S("minigame") .. ">: " .. S("Lists all the arenas of the specified minigame") .. "\n" + .. minetest.colorize("#00ffff", "/arenas remove") .. " (<" .. S("minigame") .. ">) <" .. S("arena") .. ">: " .. S("Deletes an arena") .. "\n" + .. minetest.colorize("#00ffff", "/arenas settings") .. " <" .. S("minigame") .. ">: " .. S("Tweaks the minigame settings for the current server") + ) end) - ]] end, { - params = "[ create | disable | edit | enable | entrances | flush | forceend | gamelist | glist | info | kick | list | remove | settings ]", - description = S("Manage arena_lib arenas; it requires arenalib_admin") .. "\n" - .. "/arenas create <" .. S("minigame") .. "> <" .. S("arena") .. "> ( )\n" - .. "/arenas disable (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas edit (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas enable (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas entrances <" .. S("minigame") .. ">\n" - .. "/arenas flush (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas forceend (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas gamelist \n" - .. "/arenas glist \n" - .. "/arenas info (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas kick <" .. S("player") .. ">\n" - .. "/arenas list <" .. S("minigame") .. ">\n" - .. "/arenas remove (<" .. S("minigame") .. ">) <" .. S("arena") .. ">\n" - .. "/arenas settings <" .. S("minigame") .. ">", + params = "help", + description = S("Manage arena_lib arenas; it requires arenalib_admin"), privs = { arenalib_admin = true } }) From 9775a4598d440b8a5f940b19f031cb462ce2ab7e Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Mon, 30 Jan 2023 23:36:13 +0100 Subject: [PATCH 5/8] Comments --- src/deps/parties.lua | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/deps/parties.lua b/src/deps/parties.lua index 27bcdd4..d7b5c5d 100644 --- a/src/deps/parties.lua +++ b/src/deps/parties.lua @@ -7,13 +7,12 @@ local S = minetest.get_translator("arena_lib") parties.register_on_pre_party_invite(function(sender, p_name) - - -- se il party leader è in coda + -- se il capogruppo è in coda if arena_lib.is_player_in_queue(sender) then minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] You can't perform this action while in queue!"))) return false end - -- se il party leader è in gioco + -- se il capogruppo è in gioco if arena_lib.is_player_in_arena(sender) then minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] You can't perform this action while in game!"))) return false end @@ -24,13 +23,12 @@ end) parties.register_on_pre_party_join(function(party_leader, p_name) - - -- se il party leader è in coda + -- se il capogruppo è in coda if arena_lib.is_player_in_queue(party_leader) then minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] The party leader must not be in queue to perform this action!"))) return false end - -- se il party leader è in gioco + -- se il capogruppo è in gioco if arena_lib.is_player_in_arena(party_leader) then minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] The party leader must not be in game to perform this action!"))) return false end From 006a6791aafea534dadcde7bfc7ab5bf5f510af9 Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Tue, 31 Jan 2023 00:06:37 +0100 Subject: [PATCH 6/8] Add minigame parameter spectator_properties | Add spectate_target(..) to force a spectator to follow a specific target | Add get_target_spectators(..) to retrieve all the spectators following a specific target | Add is_forced as parameter to the on_change_spectated_target callback --- DOCS.md | 13 +++++--- src/api/core.lua | 5 +++ src/api/in_game.lua | 1 - src/spectate/spectate_main.lua | 60 +++++++++++++++++++++++++++------- 4 files changed, 61 insertions(+), 18 deletions(-) diff --git a/DOCS.md b/DOCS.md index 2b81fcb..e3b534f 100644 --- a/DOCS.md +++ b/DOCS.md @@ -13,7 +13,7 @@ * [1.5.1 Arena properties](#151-arena-properties) * [1.5.1.1 Updating non temporary properties via code](#1511-updating-non-temporary-properties-via-code) * [1.5.1.2 Updating properties for old arenas](#1512-updating-properties-for-old-arenas) - * [1.5.2 Player properties](#152-player-properties) + * [1.5.2 Player and spectator properties](#152-player-and-spectator-properties) * [1.5.3 Team properties](#153-team-properties) * [1.6 HUD](#16-hud) * [1.7 Utils](#17-utils) @@ -87,6 +87,7 @@ The second field, on the contrary, is a table of optional parameters: they defin * `properties`: see [1.5 Additional properties](#15-additional-properties) * `temp_properties`: ^ * `player_properties`: ^ +* `spectator_properties`: ^ * `team_properties`: ^ (it won't work if `teams` hasn't been declared) ### 1.1 Per server configuration @@ -141,7 +142,7 @@ Callbacks are divided in two types: minigame callbacks and global callbacks. The * `arena_lib.on_join(mod, function(p_name, arena, as_spectator, was_spectator))`: called when a user joins an ongoing match. `as_spectator` returns true if they join as a spectator. `was_spectator` returns true if the user was spectating the arena when joining as an actual player * `arena_lib.on_death(mod, function(arena, p_name, reason))`: called when a player dies * `arena_lib.on_respawn(mod, function(arena, p_name))`: called when a player respawns -* `arena_lib.on_change_spectated_target(mod, function(arena, sp_name, t_type, t_name, prev_type, prev_spectated))`: called when a spectator (`sp_name`) changes who or what they're spectating, including when they get assigned someone to spectate at entering the arena. +* `arena_lib.on_change_spectated_target(mod, function(arena, sp_name, t_type, t_name, prev_type, prev_spectated, is_forced))`: called when a spectator (`sp_name`) changes who or what they're spectating, including when they get assigned someone to spectate at entering the arena. `is_forced` returns true when the change is a result of `spectate_target(...)` * `t_type` represents the type of the target (either `"player"`, `"entity"` or `"area"`) * `t_name` its name. If it's an entity or an area, it'll be the name used to register it through the `arena_lib.add_spectate...` functions * if they were following someone/something else earlier, `prev_type` and `prev_spectated` follow the same logic of the aforementioned parameters @@ -223,8 +224,8 @@ Instead, the right way to permanently update a property for an arena is calling ##### 1.5.1.2 Updating properties for old arenas This is done automatically by arena_lib every time you change the properties declaration in `register_minigame`, so don't worry. Just, keep in mind that when a property is removed, it'll be removed from every arena; so if you're not sure about what you're doing, do a backup first. -#### 1.5.2 Player properties -These are a particular type of temporary properties, as they're attached to every player in the arena. Let's say you now want to keep track of how many kills a player does in a streak without dying. You just need to create a killstreak parameter, declaring it like so +#### 1.5.2 Player and spectator properties +These are a particular type of temporary properties, as they're attached to every player/spectator in the arena. Let's say you now want to keep track of how many kills a player does in a streak without dying. You just need to create a killstreak parameter, declaring it like so ```lua arena_lib.register_minigame("mymod", { --stuff @@ -278,6 +279,7 @@ There are also some other functions which might turn useful. They are: * `arena_lib.add_spectate_area(mod, arena, pos_name, pos)`: same as `add_spectate_entity`, but it adds an area instead. `pos` is a table containing the coordinates of the area to spectate * `arena_lib.remove_spectate_entity(mod, arena, e_name)`: removes an entity from the spectatable entities of an ongoing match * `arena_lib.remove_spectate_area(mod, arena, pos_name)`: removes an area from the spectatable areas of an ongoing match +* `arena_lib.spectate_target(mod, arena, sp_name, type, t_name)`: forces `sp_name` to spectate a specific target, if exists. `type` is a string that can either be `"player"`, `"entity"` or `"area"` * `arena_lib.is_player_spectating(sp_name)`: returns whether a player is spectating a match, as a boolean * `arena_lib.is_player_spectated(p_name)`: returns whether a player is being spectated * `arena_lib.is_entity_spectated(mod, arena_name, e_name)`: returns whether an entity is being spectated @@ -298,7 +300,8 @@ There are also some other functions which might turn useful. They are: * `arena_lib.get_players_in_minigame(mod, )`: returns a table containing as value either the names of all the players inside the specified minigame (`mod`) or, if `to_player` is `true`, the players themselves * `arena_lib.get_players_in_team(arena, team_ID, )`: returns a table containing as value either the names of the players inside the specified team or, if `to_player` is `true`, the players themselves * `arena_lib.get_active_teams(arena)`: returns an ordered table having as values the ID of teams that are not empty -* `arena_lib.get_player_spectators(p_name)`: returns a list containing all the people currently spectating `p_name`. Format `{sp_name = true}` +* `arena_lib.get_target_spectators(mod, arena_name, type, t_name)`: returns a list containing all the spectators currently following `t_name`. Format `{sp_name = true}`. For players, consider using the next function instead +* `arena_lib.get_player_spectators(p_name)`: Like `get_target_spectators(...)` but cleaner and just for players. It's cleaner since there can't be two players with the same name, contrary to areas and entities * `arena_lib.get_player_spectated(sp_name)`: returns the player `sp_name` is currently spectating, if any * `arena_lib.get_spectate_entities(mod, arena_name)`: returns a table containing all the spectatable entities of `arena_name`, if any. Format `{e_name = entity}`, where `e_name` is the name used to register the entity in `add_spectate_entity(...)` and `entity` the `luaentity` table * `arena_lib.get_spectate_areas(mod, arena_name)`: same as in `get_spectate_entities(...)` but for areas. Entities returned in the table are the dummy ObjectRef entities put at the area coordinates diff --git a/src/api/core.lua b/src/api/core.lua index 9ba0215..0196cee 100755 --- a/src/api/core.lua +++ b/src/api/core.lua @@ -122,6 +122,7 @@ function arena_lib.register_minigame(mod, def) mod_ref.properties = {} mod_ref.temp_properties = {} mod_ref.player_properties = {} + mod_ref.spectator_properties = {} mod_ref.team_properties = {} if def.prefix then @@ -236,6 +237,10 @@ function arena_lib.register_minigame(mod, def) mod_ref.player_properties = def.player_properties end + if def.spectator_properties then + mod_ref.spectator_properties = def.spectator_properties + end + if def.team_properties then mod_ref.team_properties = def.team_properties end diff --git a/src/api/in_game.lua b/src/api/in_game.lua index fcd6fa1..42c1f7d 100755 --- a/src/api/in_game.lua +++ b/src/api/in_game.lua @@ -74,7 +74,6 @@ function arena_lib.load_arena(mod, arena_ID) -- per ogni giocatore... for pl_name, _ in pairs(arena.players) do - operations_before_entering_arena(mod_ref, mod, arena, arena_ID, pl_name) -- teletrasporto i giocatori diff --git a/src/spectate/spectate_main.lua b/src/spectate/spectate_main.lua index d6bba8e..e0ff9f5 100755 --- a/src/spectate/spectate_main.lua +++ b/src/spectate/spectate_main.lua @@ -83,10 +83,19 @@ function arena_lib.enter_spectate_mode(p_name, arena) local hand = player:get_inventory():get_list("hand") players_in_spectate_mode[p_name] = { minigame = mod, arenaID = arena_ID, teamID = team_ID, hand = hand} - arena.spectators[p_name] = true + arena.spectators[p_name] = {} arena.players_and_spectators[p_name] = true arena.spectators_amount = arena.spectators_amount + 1 + -- eventuali proprietà aggiuntive + for k, v in pairs(arena_lib.mods[mod].spectator_properties) do + if type(v) == "table" then + arena.spectators[p_name][k] = table.copy(v) + else + arena.spectators[p_name][k] = v + end + end + -- applico mano finta player:get_inventory():set_size("hand", 1) player:get_inventory():add_item("hand", "arena_lib:spectate_hand") @@ -183,7 +192,7 @@ end ---------------------------- --- find next spectatatable target +-- find next spectatable target ---------------------------- function arena_lib.find_and_spectate_player(sp_name, change_team, go_counterwise) @@ -273,7 +282,6 @@ function arena_lib.find_and_spectate_player(sp_name, change_team, go_counterwise else local i = 1 for pl_name, _ in pairs(arena.players) do - if i == new_ID then set_spectator(mod, arena.name, spectator, "player", pl_name, i) return true @@ -362,9 +370,9 @@ function arena_lib.find_and_spectate_area(mod, arena, sp_name) end local i = 1 - for pos_name, _ in pairs(areas_storage[mod][arena_name]) do + for ar_name, _ in pairs(areas_storage[mod][arena_name]) do if i == new_ID then - set_spectator(mod, arena_name, spectator, "area", pos_name, i) + set_spectator(mod, arena_name, spectator, "area", ar_name, i) return true end @@ -380,8 +388,6 @@ end ---------------------CORE--------------------- ---------------------------------------------- - - function arena_lib.add_spectate_entity(mod, arena, e_name, entity) if not arena.in_game then return end @@ -483,6 +489,27 @@ end +function arena_lib.spectate_target(mod, arena, sp_name, type, t_name) + if type == "player" then + if arena.players_amount == 0 or not players_spectated[t_name]then return end + elseif type == "entity" then + if arena.spectate_entities_amount == 0 or not entities_spectated[mod][arena.name][t_name] then return end + elseif type == "area" then + if arena.spectate_areas_amount == 0 or not areas_spectated[mod][arena.name][t_name] then return end + else + return + end + + -- sì, potrei richiedere direttamente 'spectator', ma per coesione con il resto dell'API e con il fatto che + -- arena_lib salva lɜ spettatorɜ indicizzandolɜ per nome, tanto vale una conversione in più qui + local spectator = minetest.get_player_by_name(sp_name) + local i = spectator:get_meta():get_int("arenalib_watchID") -- non c'è bisogno di calcolare l'ID, riapplico quello che già ha + set_spectator(mod, arena.name, spectator, type, t_name, i, true) +end + + + + ---------------------------------------------- --------------------UTILS--------------------- @@ -524,6 +551,18 @@ end +function arena_lib.get_target_spectators(mod, arena_name, type, t_name) + if type == "player" then + return players_spectated[p_name] + elseif type == "entity" then + return entities_spectated[mod][arena_name][t_name] + elseif type == "area" then + return areas_spectated[mod][arena_name][t_name] + end +end + + + function arena_lib.get_player_spectated(sp_name) if arena_lib.is_player_spectating(sp_name) then return players_in_spectate_mode[sp_name].spectating @@ -544,14 +583,11 @@ end - - ---------------------------------------------- ---------------FUNZIONI LOCALI---------------- ---------------------------------------------- -function set_spectator(mod, arena_name, spectator, type, name, i) - +function set_spectator(mod, arena_name, spectator, type, name, i, is_forced) local sp_name = spectator:get_player_name() local prev_spectated = players_in_spectate_mode[sp_name].spectating local prev_type = players_in_spectate_mode[sp_name].type @@ -602,7 +638,7 @@ function set_spectator(mod, arena_name, spectator, type, name, i) -- eventuale codice aggiuntivo if mod_ref.on_change_spectated_target then local arena = arena_lib.get_arena_by_player(sp_name) - mod_ref.on_change_spectated_target(arena, sp_name, type, name, prev_type, prev_spectated) + mod_ref.on_change_spectated_target(arena, sp_name, type, name, prev_type, prev_spectated, is_forced) end end From 0f175e8aa6b883b87edc2d7b16bdf3a98a70f483 Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Thu, 2 Feb 2023 22:55:44 +0000 Subject: [PATCH 7/8] Possibility to declare a variable teams amount per arena --- DOCS.md | 7 +- locale/arena_lib.it.tr | 8 +- locale/template.txt | 8 +- src/api/core.lua | 71 +++++++++++++++--- src/api/in_queue.lua | 7 +- src/api/teams.lua | 2 - src/editor/editor_icons.lua | 2 +- src/editor/tools_players.lua | 66 +++++++++++----- src/utils/debug.lua | 6 ++ textures/arenalib_tool_players_max.png | Bin 182 -> 182 bytes .../arenalib_tool_players_teams_amount.png | Bin 0 -> 184 bytes 11 files changed, 135 insertions(+), 42 deletions(-) create mode 100644 textures/arenalib_tool_players_teams_amount.png diff --git a/DOCS.md b/DOCS.md index e3b534f..5f3db2a 100644 --- a/DOCS.md +++ b/DOCS.md @@ -54,7 +54,8 @@ The second field, on the contrary, is a table of optional parameters: they defin * `name`: (string) the name of your minigame. If not specified, it takes the name used to register the minigame * `prefix`: (string) what's going to appear in most of the lines printed by your mod. Default is `[] `, where `` is the name of your minigame * `icon`: (string) optional icon to represent your minigame. Currently unused by default (`nil`), it comes in handy for external mods -* `teams`: (table) contains team names. If not declared, your minigame won't have teams and the table will be equal to `{-1}`. You can add as many teams as you like, as the number of spawners (and players) will be multiplied by the number of teams (so `max_players = 4` * 3 teams = `max_players = 12`) +* `teams`: (table) contains team names. If not declared, your minigame won't have teams and the table will be equal to `{-1}`. You can add as many teams as you like, as the number of spawners (and players) will be multiplied by the number of teams (so `max_players = 4` * 3 teams = 12 players in total) +* `variable_teams_amount`: (boolean) whether to support a variable amount of teams per arena. It requires `teams`. Default is `false` * `teams_color_overlay`: (table) [color strings](https://drafts.csswg.org/css-color/#named-colors). It applies a color overlay onto the players' skin according to their team, to better distinguish them. It requires `teams`. Default is `nil` * `is_team_chat_default`: (bool) whether players messages in a game should be sent to their teammates only. It requires `teams`, default is false * `chat_all_prefix`: (string) prefix for every message sent in arena, team chat aside. Default is `[arena] ` (geolocalised) @@ -435,7 +436,9 @@ If you don't want to rely on the hotbar, or you want both the editor and the com `arena_lib.set_thumbnail(sender, mod, arena_name, thumbnail)`: changes the thumbnail of the arena. `thumbnail` is the name of the file, including its extension. It must be inside the `arena_lib/Thumbnails` world folder. ##### 2.2.2.2 Players management -`arena_lib.change_players_amount(sender, mod, arena_name, min_players, max_players)` changes the amount of players in a specific arena. It also works by specifying only one field (such as `([...] myarena, 3)` or `([...] myarena, nil, 6)`). It returns true if it succeeded. +`arena_lib.change_players_amount(sender, mod, arena_name, min_players, max_players)` changes the amount of players in a specific arena. It also works by specifying only one field (such as `([...] myarena, 3)` or `([...] myarena, nil, 6)`). It returns true if it succeeds. + +`arena_lib.change_teams_amount(sender, mod, arena_name, amount)` changes the amount of teams in a specific arena. It'll use the first N teams declared, where N is `amount`. It returns `true` if it succeeds. ##### 2.2.2.3 Enabling/Disabling teams `arena_lib.toggle_teams_per_arena(sender, mod, arena_name, enable)` enables/disables teams per single arena. `enable` is an int, where `0` disables teams and `1` enables them. diff --git a/locale/arena_lib.it.tr b/locale/arena_lib.it.tr index 266fa2e..0b39cf9 100755 --- a/locale/arena_lib.it.tr +++ b/locale/arena_lib.it.tr @@ -63,6 +63,7 @@ Arena @1 successfully renamed in @2=Arena @1 rinominata con successo in @2 [!] File not found!=[!] File non trovato! Players amount successfully changed ( min @1 | max @2 )=Numero dei giocatori modificato con successo ( min @1 | max @2 ) [!] Nothing to do here!=[!] È già tutto a posto qui! +Teams amount successfully changed (@1)=Numero delle squadre modificato con successo (@1) Teams successfully enabled for the arena @1=Squadre abilitate con successo nell'arena @1 Teams successfully disabled for the arena @1=Squadre disabilitate con successo nell'arena @1 [!] This team doesn't exist!=[!] Questo team non esiste! @@ -149,7 +150,7 @@ Arena_lib editor | Now editing: @1=Arena_lib editor | Stai modificando: @1 # editor/editor_icons.lua Players=Giocatori -Players | num to set: @1 (left/right click slot #3 to change)=Giocatori | num: @1 (click sx/dx su slot #3 per cambiare) +Players | num to set: @1 (left/right click slot #4 to change)=Giocatori | num: @1 (click sx/dx su slot #4 per cambiare) Values are PER TEAM!=I valori sono PER SQUADRA! Spawners=Spawner Spawners | sel. ID: @1 (right click slot #2 to change)=Spawner | ID sel.: @1 (tasto dx su slot #2 per cambiare) @@ -178,6 +179,9 @@ Global light=Luce globale Shadows=Ombre # editor/tools_players.lua +Players required=Giocatori minimi +Players supported=Giocatori massimi +Teams amount=Numero squadre Change the current number=Cambia il numero attuale Teams: on (click to toggle off)=Squadre: attive (premi per disattivare) Teams: off (click to toggle on)=Squadre: non attive (premi per attivare) @@ -330,4 +334,4 @@ Team properties: =Proprietà squadra: [!] The arena is already full!=[!] L'arena è già piena! #utils/utils.lua -You've joined team @1=Ti sei unito alla squadra @1 \ No newline at end of file +You've joined team @1=Ti sei unito alla squadra @1 diff --git a/locale/template.txt b/locale/template.txt index bb0303a..a507756 100755 --- a/locale/template.txt +++ b/locale/template.txt @@ -63,6 +63,7 @@ Arena @1 successfully renamed in @2= [!] File not found!= Players amount successfully changed ( min @1 | max @2 )= [!] Nothing to do here!= +Teams amount successfully changed (@1)= Teams successfully enabled for the arena @1= Teams successfully disabled for the arena @1= [!] This team doesn't exist!= @@ -148,7 +149,7 @@ Arena_lib editor | Now editing: @1= # editor/editor_icons.lua Players= -Players | num to set: @1 (left/right click slot #3 to change)= +Players | num to set: @1 (left/right click slot #4 to change)= Values are PER TEAM!= Spawners= Spawners | sel. ID: @1 (right click slot #2 to change)= @@ -177,6 +178,9 @@ Global light= Shadows= # editor/tools_players.lua +Players required= +Players supported= +Teams amount= Change the current number= Teams: on (click to toggle off)= Teams: off (click to toggle on)= @@ -329,4 +333,4 @@ Team properties: = [!] The arena is already full!= #utils/utils.lua -You've joined team @1= \ No newline at end of file +You've joined team @1= diff --git a/src/api/core.lua b/src/api/core.lua index 0196cee..c244f95 100755 --- a/src/api/core.lua +++ b/src/api/core.lua @@ -97,6 +97,7 @@ function arena_lib.register_minigame(mod, def) mod_ref.prefix = "[" .. mod_ref.name .. "] " mod_ref.icon = def.icon mod_ref.teams = {-1} + mod_ref.variable_teams_amount = false mod_ref.teams_color_overlay = nil mod_ref.is_team_chat_default = false mod_ref.chat_all_prefix = "[" .. S("arena") .. "] " @@ -132,12 +133,16 @@ function arena_lib.register_minigame(mod, def) if def.teams and type(def.teams) == "table" then mod_ref.teams = def.teams + if def.variable_teams_amount == true then + mod_ref.variable_teams_amount = true + end + if def.teams_color_overlay then mod_ref.teams_color_overlay = def.teams_color_overlay end if def.is_team_chat_default == true then - mod_ref.is_team_chat_default = def.is_team_chat_default + mod_ref.is_team_chat_default = true end if def.chat_team_prefix then @@ -584,7 +589,7 @@ function arena_lib.change_players_amount(sender, mod, arena_name, min_players, m arena.max_players = old_max_players return end - -- se i giocatori massimi sono cambiati, svuoto i vecchi spawner per evitare problemi + -- se i giocatori massimi sono cambiati, svuoto i vecchi punti rinascita per evitare problemi if max_players and old_max_players ~= max_players then arena_lib.set_spawner(sender, mod, arena_name, nil, "deleteall", nil, in_editor) end @@ -595,7 +600,6 @@ function arena_lib.change_players_amount(sender, mod, arena_name, min_players, m end update_storage(false, mod, id, arena) - minetest.chat_send_player(sender, arena_lib.mods[mod].prefix .. S("Players amount successfully changed ( min @1 | max @2 )", arena.min_players, arena.max_players)) -- ritorno true per procedere al cambio di stack nell'editor @@ -604,6 +608,52 @@ end +function arena_lib.change_teams_amount(sender, mod, arena_name, amount, in_editor) + local id, arena = arena_lib.get_arena_by_name(mod, arena_name) + + if not in_editor then + if not ARENA_LIB_EDIT_PRECHECKS_PASSED(sender, arena) then return end + end + + -- se le squadre non sono abilitate, annullo + if not arena.teams_enabled then + minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Teams are not enabled!"))) + return end + + -- se il numero inserito è lo stesso delle squadre attuali, annullo + if #arena.teams == amount then + minetest.chat_send_player(sender, minetest.colorize("#cfc6b8", S("[!] Nothing to do here!"))) + return end + + local mod_ref = arena_lib.mods[mod] + + -- se il numero è minore di 2, o maggiore delle squadre dichiarate nella mod, annullo + if amount < 2 or amount > #mod_ref.teams then + minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Parameters don't seem right!"))) + return end + + -- svuoto i vecchi punti rinascita per evitare problemi + arena_lib.set_spawner(sender, mod, arena_name, nil, "deleteall", nil, in_editor) + + arena.teams = {} + for i = 1, amount do + arena.teams[i] = {name = mod_ref.teams[i]} + end + + -- aggiorno l'entrata, se esiste + if arena.entrance then + arena_lib.entrances[arena.entrance_type].update(mod, arena) + end + + update_storage(false, mod, id, arena) + minetest.chat_send_player(sender, arena_lib.mods[mod].prefix .. S("Teams amount successfully changed (@1)", amount)) + + -- ritorno true per procedere al cambio di stack nell'editor + return true +end + + + function arena_lib.toggle_teams_per_arena(sender, mod, arena_name, enable, in_editor) -- enable can be 0 or 1 local id, arena = arena_lib.get_arena_by_name(mod, arena_name) @@ -611,14 +661,14 @@ function arena_lib.toggle_teams_per_arena(sender, mod, arena_name, enable, in_ed if not ARENA_LIB_EDIT_PRECHECKS_PASSED(sender, arena) then return end end - -- se non ci sono team nella mod, annullo + -- se non ci sono squadre nella mod, annullo if not next(arena_lib.mods[mod].teams) then minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Teams are not enabled!"))) return end - -- se i team sono già in quello stato, annullo + -- se le squadre sono già in quello stato, annullo if enable == arena.teams_enabled then - minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Nothing to do here!"))) + minetest.chat_send_player(sender, minetest.colorize("#cfc6b8", S("[!] Nothing to do here!"))) return end -- se abilito @@ -648,7 +698,7 @@ function arena_lib.toggle_teams_per_arena(sender, mod, arena_name, enable, in_ed return end - -- svuoto i vecchi spawner per evitare problemi + -- svuoto i vecchi punti rinascita per evitare problemi arena_lib.set_spawner(sender, mod, arena_name, nil, "deleteall", nil, in_editor) -- aggiorno l'entrata, se esiste @@ -1236,11 +1286,11 @@ function init_storage(mod, mod_ref) -- gestione squadre if arena.teams_enabled and not (#mod_ref.teams > 1) then -- se avevo abilitato le squadre e ora le ho rimosse - arena.players_amount_per_team = nil arena.teams = {-1} arena.teams_enabled = false + arena.players_amount_per_team = nil arena.spectators_amount_per_team = nil - elseif #mod_ref.teams > 1 and arena.teams_enabled then -- sennò le genero per tutte le arene con teams_enabled + elseif #mod_ref.teams > 1 and not arena.teams_enabled then -- sennò le genero per tutte le arene con teams_enabled arena.players_amount_per_team = {} arena.spectators_amount_per_team = {} arena.teams = {} @@ -1250,12 +1300,11 @@ function init_storage(mod, mod_ref) arena.spectators_amount_per_team[k] = 0 arena.teams[k] = {name = t_name} end - end local arena_max_players = arena.max_players * #arena.teams - -- resetto punti rinascita se ho cambiato il numero di squadre + -- reimposto punti rinascita se ho cambiato il numero di squadre if arena_max_players ~= #arena.spawn_points then to_update = true arena.enabled = false diff --git a/src/api/in_queue.lua b/src/api/in_queue.lua index 4516293..941561a 100755 --- a/src/api/in_queue.lua +++ b/src/api/in_queue.lua @@ -252,9 +252,10 @@ function arena_lib.get_players_amount_left_to_start_queue(arena) if arena.teams_enabled then players_required = 0 - for _, amount in pairs(arena.players_amount_per_team) do - if arena.min_players - amount > 0 then - players_required = players_required + (arena.min_players - amount) + for i = 1, #arena.teams do + local p_per_team = arena.players_amount_per_team[i] + if arena.min_players - p_per_team > 0 then + players_required = players_required + (arena.min_players - p_per_team) end end else diff --git a/src/api/teams.lua b/src/api/teams.lua index 3ded688..c1f07cd 100755 --- a/src/api/teams.lua +++ b/src/api/teams.lua @@ -9,7 +9,6 @@ end function arena_lib.is_team_declared(mod_ref, team_name) - if not mod_ref.teams then return false end for _, t_name in pairs(mod_ref.teams) do @@ -52,7 +51,6 @@ end function arena_lib.get_active_teams(arena) - if #arena.teams == 1 then minetest.log("warning", "Attempt to call get_active_teams in arena " .. arena.name .. " when teams are not enabled. Aborting...") return end diff --git a/src/editor/editor_icons.lua b/src/editor/editor_icons.lua index fe7c727..2603384 100755 --- a/src/editor/editor_icons.lua +++ b/src/editor/editor_icons.lua @@ -22,7 +22,7 @@ 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)) + arena_lib.HUD_send_msg("hotbar", user:get_player_name(), S("Players | num to set: @1 (left/right click slot #4 to change)", 2)) arena_lib.give_players_tools(user:get_inventory(), mod, arena) end }) diff --git a/src/editor/tools_players.lua b/src/editor/tools_players.lua index 5036009..05f91a0 100755 --- a/src/editor/tools_players.lua +++ b/src/editor/tools_players.lua @@ -1,15 +1,15 @@ local S = minetest.get_translator("arena_lib") -local function change_players_number() end +local function change_amount() end local players_tools = { "", -- arena_lib:players_min "", -- arena_lib:players_max + "", -- arena_lib:teams_amount "arena_lib:players_change", "", "", -- arena_lib:players_teams_on/off "", - "", "arena_lib:editor_return", "arena_lib:editor_quit", } @@ -18,7 +18,7 @@ local players_tools = { minetest.register_tool("arena_lib:players_min", { - description = S("Players required: "), + description = S("Players required"), inventory_image = "arenalib_tool_players_min.png", wield_image = "arenalib_tool_players_min.png", groups = {not_in_creative_inventory = 1}, @@ -42,7 +42,7 @@ minetest.register_tool("arena_lib:players_min", { minetest.register_tool("arena_lib:players_max", { - description = S("Players supported: "), + description = S("Players supported"), inventory_image = "arenalib_tool_players_max.png", wield_image = "arenalib_tool_players_max.png", groups = {not_in_creative_inventory = 1}, @@ -50,7 +50,6 @@ minetest.register_tool("arena_lib:players_max", { on_drop = function() end, on_use = function(itemstack, user, pointed_thing) - local mod = user:get_meta():get_string("arena_lib_editor.mod") local arena_name = user:get_meta():get_string("arena_lib_editor.arena") local players_amount = user:get_meta():get_int("arena_lib_editor.players_number") @@ -62,6 +61,27 @@ minetest.register_tool("arena_lib:players_max", { end }) +minetest.register_node("arena_lib:players_teams_amount", { + + description = S("Teams amount"), + inventory_image = "arenalib_tool_players_teams_amount.png", + wield_image = "arenalib_tool_players_teams_amount.png", + groups = {not_in_creative_inventory = 1}, + on_place = function() end, + on_drop = function() end, + + on_use = function(itemstack, user, pointed_thing) + local mod = user:get_meta():get_string("arena_lib_editor.mod") + local arena_name = user:get_meta():get_string("arena_lib_editor.arena") + local teams_amount = user:get_meta():get_int("arena_lib_editor.players_number") + + if not arena_lib.change_teams_amount(user:get_player_name(), mod, arena_name, teams_amount, true) then return end + + -- aggiorno la quantità se il cambio è andato a buon fine + user:set_wielded_item("arena_lib:players_teams_amount " .. teams_amount) + end +}) + minetest.register_tool("arena_lib:players_change", { @@ -72,15 +92,15 @@ minetest.register_tool("arena_lib:players_change", { on_drop = function() end, on_use = function(itemstack, user, pointed_thing) - change_players_number(user, true) + change_amount(user, true) end, on_secondary_use = function(itemstack, placer, pointed_thing) - change_players_number(placer, false) + change_amount(placer, false) end, on_place = function(itemstack, user, pointed_thing) - change_players_number(user, false) + change_amount(user, false) end }) @@ -101,7 +121,8 @@ minetest.register_tool("arena_lib:players_teams_on", { arena_lib.toggle_teams_per_arena(user:get_player_name(), mod, arena_name, 0, true) - user:get_inventory():set_stack("main", 5, "arena_lib:players_teams_off") + user:get_inventory():set_stack("main", 3, "") + user:get_inventory():set_stack("main", 6, "arena_lib:players_teams_off") end }) @@ -122,7 +143,11 @@ minetest.register_tool("arena_lib:players_teams_off", { arena_lib.toggle_teams_per_arena(user:get_player_name(), mod, arena_name, 1, true) - user:get_inventory():set_stack("main", 5, "arena_lib:players_teams_on") + if arena_lib.mods[mod].variable_teams_amount then + local id, arena = arena_lib.get_arena_by_name(mod, arena_name) + user:get_inventory():set_stack("main", 3, "arena_lib:players_teams_amount " .. #arena.teams) + end + user:get_inventory():set_stack("main", 6, "arena_lib:players_teams_on") end }) @@ -141,9 +166,12 @@ function arena_lib.give_players_tools(inv, mod, arena) if #mod_ref.teams == 1 then return end if arena.teams_enabled then - inv:set_stack("main", 5, "arena_lib:players_teams_on") + inv:set_stack("main", 6, "arena_lib:players_teams_on") + if mod_ref.variable_teams_amount then + inv:set_stack("main", 3, "arena_lib:players_teams_amount " .. #arena.teams) + end else - inv:set_stack("main", 5, "arena_lib:players_teams_off") + inv:set_stack("main", 6, "arena_lib:players_teams_off") end end @@ -155,17 +183,17 @@ end ---------------FUNZIONI LOCALI---------------- ---------------------------------------------- -function change_players_number(player, decrease) - local players_number = player:get_meta():get_int("arena_lib_editor.players_number") +function change_amount(player, decrease) + local amount = player:get_meta():get_int("arena_lib_editor.players_number") if not decrease then - players_number = players_number +1 + amount = amount +1 else - if players_number > 1 then - players_number = players_number -1 + if amount > 1 then + amount = amount -1 else return end end - player:get_meta():set_int("arena_lib_editor.players_number", players_number) - arena_lib.HUD_send_msg("hotbar", player:get_player_name(), S("Players | num to set: @1 (left/right click slot #3 to change)", players_number)) + player:get_meta():set_int("arena_lib_editor.players_number", amount) + arena_lib.HUD_send_msg("hotbar", player:get_player_name(), S("Players | num to set: @1 (left/right click slot #4 to change)", amount)) end diff --git a/src/utils/debug.lua b/src/utils/debug.lua index a8ab17e..98b8eb6 100755 --- a/src/utils/debug.lua +++ b/src/utils/debug.lua @@ -69,6 +69,11 @@ function arena_lib.print_arena_info(sender, mod, arena_name) if arena.teams_enabled then min_players_per_team = minetest.colorize("#eea160", S("Players required per team: ")) .. minetest.colorize("#cfc6b8", arena.min_players) .. "\n" max_players_per_team = minetest.colorize("#eea160", S("Players supported per team: ")) .. minetest.colorize("#cfc6b8", arena.max_players) .. "\n" + + if mod_ref.variable_teams_amount then + teams = "(" .. #arena.teams .. ") " + end + for i = 1, #arena.teams do teams = teams .. "'" .. arena.teams[i].name .. "' " players_inside_per_team = players_inside_per_team .. "'" .. arena.teams[i].name .. "' : " .. arena.players_amount_per_team[i] .. " " @@ -76,6 +81,7 @@ function arena_lib.print_arena_info(sender, mod, arena_name) spectators_inside_per_team = spectators_inside_per_team .. "'" .. arena.teams[i].name .. "' : " .. arena.spectators_amount_per_team[i] .. " " end end + players_inside_per_team = minetest.colorize("#eea160", S("Players inside per team: ")) .. minetest.colorize("#cfc6b8", players_inside_per_team) .. "\n" if mod_ref.spectate_mode then spectators_inside_per_team = minetest.colorize("#eea160", S("Spectators inside per team: ")) .. minetest.colorize("#cfc6b8", spectators_inside_per_team) .. "\n" diff --git a/textures/arenalib_tool_players_max.png b/textures/arenalib_tool_players_max.png index f5731f02b64a988181d275cd2001ed29e633c098..0fe233a86eb946ae17e48ddebabe4b17410c8c49 100755 GIT binary patch delta 101 zcmV-r0Gj`{0k#2#v-7e`Y2po)y<{(WiUDp`7MDTGkCOb{+`$)i6H800000NkvXX Hu0mjfR8=X5 delta 101 zcmV-r0Gj`{0k#20=yADj6*q30p*47HM;9F90< zj-3pV#+wwi*RItxW{`_(+0$^IVTyy&an^{%oY6cHVQU-?s;H*VNZMqQT+Dj2@_@aH hbk9jMhHwc+hOIkzd$f1GtOYuS!PC{xWt~$(696RQKSuxn literal 0 HcmV?d00001 From f2678050f9a7530dcb6fd6fa9a514e5f580ee0f6 Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Thu, 2 Feb 2023 23:59:24 +0100 Subject: [PATCH 8/8] Bugfix (regression): arena players amount wasn't displayed in the editor tools --- src/editor/tools_players.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/editor/tools_players.lua b/src/editor/tools_players.lua index 05f91a0..a43ce05 100755 --- a/src/editor/tools_players.lua +++ b/src/editor/tools_players.lua @@ -16,7 +16,7 @@ local players_tools = { -minetest.register_tool("arena_lib:players_min", { +minetest.register_node("arena_lib:players_min", { description = S("Players required"), inventory_image = "arenalib_tool_players_min.png", @@ -40,7 +40,7 @@ minetest.register_tool("arena_lib:players_min", { -minetest.register_tool("arena_lib:players_max", { +minetest.register_node("arena_lib:players_max", { description = S("Players supported"), inventory_image = "arenalib_tool_players_max.png",