diff --git a/commands.lua b/commands.lua index 30f9c8b..922d65b 100644 --- a/commands.lua +++ b/commands.lua @@ -1,120 +1,153 @@ -S = minetest.get_translator("quake") - -local mod = "quake" - -ChatCmdBuilder.new("quakeadmin", function(cmd) - - -- creazione arene - cmd:sub("create :arena", function(sender, arena_name) - arena_lib.create_arena(sender, mod, arena_name) - end) - - cmd:sub("create :arena :minplayers:int :maxplayers:int", function(sender, arena_name, min_players, max_players) - arena_lib.create_arena(sender, mod, arena_name, min_players, max_players) - end) - - cmd:sub("create :arena :minplayers:int :maxplayers:int :killcap:int", function(sender, arena_name, min_players, max_players, kill_cap) - arena_lib.create_arena(sender, mod, arena_name, min_players, max_players) - local id, arena = arena_lib.get_arena_by_name("quake", arena_name) - arena.kill_cap = kill_cap - end) - - -- rimozione arene - cmd:sub("remove :arena", function(sender, arena_name) - arena_lib.remove_arena(sender, mod, arena_name) - end) - - -- rinominazione arene - cmd:sub("rename :arena :newname", function(sender, arena_name, new_name) - arena_lib.rename_arena(sender, mod, arena_name, new_name) - end) - - -- - cmd:sub("properties :arena :property :newvalue:text", function(sender, arena_name, property, new_value) - arena_lib.change_arena_properties(sender, mod, arena_name, property, new_value) - end) - - -- cambio giocatori minimi/massimi - cmd:sub("setplayers :arena :minplayers:int :maxplayers:int", function(sender, arena_name, min_players, max_players) - arena_lib.change_players_amount(sender, mod, arena_name, min_players, max_players) - end) - - -- abilitazione/disabilitazione team per arena (enable 0 o 1) - cmd:sub("toggleteams :arena :enable:int", function(sender, arena_name, enable) - arena_lib.toggle_teams_per_arena(sender, mod, arena_name, enable) - end) - - -- lista arene - cmd:sub("list", function(sender) - arena_lib.print_arenas(sender, mod) - end) - - -- info su un'arena specifica - cmd:sub("info :arena", function(sender, arena_name) - arena_lib.print_arena_info(sender, mod, arena_name) - end) - - -- info su stats partita - cmd:sub("score :arena", function(sender, arena_name) - arena_lib.print_arena_stats(sender, mod, arena_name) - end) +local S = minetest.get_translator("arena_lib") - -- modifiche arena - --editor - cmd:sub("edit :arena", function(sender, arena) - arena_lib.enter_editor(sender, mod, arena) - end) - --inline - -- cartello arena - cmd:sub("setsign :arena", function(sender, arena) - arena_lib.set_sign(sender, nil, nil, mod, arena) - end) +---------------------------------------------- +-----------------ADMINS ONLY------------------ +---------------------------------------------- - -- spawner (ie. deleteall) - cmd:sub("setspawn :arena :param:word :ID:int", function(sender, arena, param, ID) - arena_lib.set_spawner(sender, mod, arena, nil, param, ID) - end) +minetest.register_chatcommand("kick", { - -- spawner (ie. deleteall) - cmd:sub("setspawn :arena :team:word :param:word :ID:int", function(sender, arena, team_name, param, ID) - arena_lib.set_spawner(sender, mod, arena, team_name, param, ID) - end) + params = "<" .. S("player") .. ">", + description = S("Kick a player from an ongoing game"), + privs = { + arenalib_admin = true, + }, - cmd:sub("setspawn :arena", function(sender, arena) - arena_lib.set_spawner(sender, mod, arena) - end) + func = function(sender, param) + local p_name = string.match(param, "^([%a%d_-]+)$") - -- teletrasporto - cmd:sub("tp :arena", function(sender, arena) - arena_lib.teleport_in_arena(sender, mod, arena) - end) + -- se non è specificato niente, annullo + if not p_name then + minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Unknown parameter!"))) + return false end - -- abilitazione e disabilitazione arene - cmd:sub("enable :arena", function(sender, arena) - arena_lib.enable_arena(sender, mod, arena) - end) + -- se il giocatore non è online, annullo + if not minetest.get_player_by_name(p_name) then + minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] This player is not online!"))) + return false end - cmd:sub("disable :arena", function(sender, arena) - arena_lib.disable_arena(sender, mod, arena) - end) + -- se il giocatore non è in partita, annullo + if not arena_lib.is_player_in_arena(p_name) then + minetest.chat_send_player(sender, minetest.colorize("#e6482e" ,S("[!] The player must be in a game to perform this action!"))) + return false end -end, { - description = S("mod management"), - privs = { quake_admin = true } + minetest.chat_send_player(sender, S("Player successfully kicked")) + arena_lib.remove_player_from_arena(p_name, 2, sender) + return true + end }) -ChatCmdBuilder.new("quake", function(cmd) +minetest.register_chatcommand("forceend", { - cmd:sub("achievements", function(sender) - quake.list_achievements(sender) - end) + params = "<" .. S("minigame") .. "> <" .. S("arena name") .. ">", + description = S("Forcibly ends an ongoing game"), + privs = { + arenalib_admin = true, + }, - cmd:sub("achievements :playername", function(sender, p_name) - quake.list_achievements(sender, p_name) - end) + func = function(sender, param) -end,{}) + local mod, arena_name = string.match(param, "^([%a%d_-]+) ([%a%d_-]+)$") + + -- se i parametri sono errati, annullo + if not mod or not arena_name then + minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Parameters don't seem right!"))) + return end + + local id, arena = arena_lib.get_arena_by_name(mod, arena_name) + + arena_lib.force_arena_ending(mod, arena, sender) + + end + +}) + + + + + +---------------------------------------------- +----------------FOR EVERYONE------------------ +---------------------------------------------- + +minetest.register_chatcommand("quit", { + + description = S("Quit an ongoing game"), + + func = function(name, param) + + if not arena_lib.is_player_in_arena(name) then + minetest.chat_send_player(name, minetest.colorize("#e6482e" , S("[!] You must be in a game to perform this action!"))) + return false end + + local arena = arena_lib.get_arena_by_player(name) + + -- se è l'ultimo giocatore rimasto, annullo + if arena.players_amount == 1 then + minetest.chat_send_player(name, minetest.colorize("#e6482e" ,S("[!] You can't perform this action if you're the only one left!"))) + return end + + local mod_ref = arena_lib.mods[arena_lib.get_mod_by_player(name)] + + -- se uso /quit e on_prequit ritorna false, annullo + if mod_ref.on_prequit then + if mod_ref.on_prequit(arena, name) == false then + return false end + end + + arena_lib.remove_player_from_arena(name, 3) + return true + end +}) + + + +minetest.register_chatcommand("all", { + + params = "<" .. S("message") .. ">", + description = S("Write a message in the arena global chat while in a game"), + + func = function(name, param) + + if not arena_lib.is_player_in_arena(name) then + minetest.chat_send_player(name, minetest.colorize("#e6482e" , S("[!] You must be in a game to perform this action!"))) + return false end + + local msg = string.match(param, ".*") + local mod_ref = arena_lib.mods[arena_lib.get_mod_by_player(name)] + local arena = arena_lib.get_arena_by_player(name) + + arena_lib.send_message_players_in_arena(arena, minetest.colorize(mod_ref.chat_all_color, mod_ref.chat_all_prefix .. minetest.format_chat_message(name, msg))) + return true + end +}) + + + +minetest.register_chatcommand("t", { + + params = "<" .. S("message") .. ">", + description = S("Write a message in the arena team chat while in a game (if teams are enabled)"), + + func = function(name, param) + + if not arena_lib.is_player_in_arena(name) then + minetest.chat_send_player(name, minetest.colorize("#e6482e" , S("[!] You must be in a game to perform this action!"))) + return false end + + local msg = string.match(param, ".*") + local mod_ref = arena_lib.mods[arena_lib.get_mod_by_player(name)] + local arena = arena_lib.get_arena_by_player(name) + local teamID = arena.players[name].teamID + + if not teamID then + minetest.chat_send_player(name, minetest.colorize("#e6482e" , S("[!] Teams are not enabled!"))) + return false end + + arena_lib.send_message_players_in_arena(arena, minetest.colorize(mod_ref.chat_team_color, mod_ref.chat_team_prefix .. minetest.format_chat_message(name, msg)), teamID) + return true + end +})