diff --git a/SETTINGS.lua b/SETTINGS.lua index a4182e0..0ba5c22 100644 --- a/SETTINGS.lua +++ b/SETTINGS.lua @@ -1,6 +1,6 @@ --[[ ! WARNING ! -Don't change the variables' names if you don't know what you're doing +Don't change the variables' names if you don't know what you're doing! (skywars_settings.variable_name = value) ]] @@ -20,7 +20,8 @@ skywars_settings.hub_spawn_point = {x = -177, y = 8.5, z = 247} -- The time between the loading state and the start of the match. skywars_settings.loading_time = 10 --- The time to wait before the loading phase starts. It gets triggered when the minimium amount of players has been reached to start the queue. +-- The time to wait before the loading phase starts. +-- It gets triggered when the minimium amount of players has been reached to start the queue. skywars_settings.queue_waiting_time = 10 -- The time between the end of the match and the respawn at the hub. @@ -29,15 +30,19 @@ skywars_settings.celebration_time = 5 -- What's going to appear in most of the lines printed by murder. skywars_settings.prefix = "Skywars > " --- The players walking speed when ther're playing a match +-- The players walking speed when ther're playing a match. skywars_settings.player_speed = 1.5 --- The match duration in seconds +-- The match duration in seconds. skywars_settings.timer = 600 --- true = on/false = off (case sensitive) +-- true = on/false = off (case sensitive). skywars_settings.fall_damage_disabled = true +-- The name of the permission to allow players to break blocks +-- (if there's none just set it to ""). +skywars_settings.build_permission = "build" + @@ -53,30 +58,30 @@ For X and Y, 0.0 and 1.0 represent opposite edges of the game window, for exampl --- The texture background for the kit menu +-- The texture background for the kit menu. skywars_settings.hud__kit_background = "Kits.png" --- The x position of the first buttons row +-- The x position of the first buttons row. skywars_settings.starting_x = 1.7 --- The y position of the first buttons row +-- The y position of the first buttons row. skywars_settings.starting_y = 6.9 --- The horizontal distance betweek buttons in real coordinates +-- The horizontal distance betweek buttons in real coordinates. skywars_settings.distance_x = 3.4 --- The vertical distance betweek buttons in real coordinates +-- The vertical distance betweek buttons in real coordinates. skywars_settings.distance_y = 3 --- The amount of buttons in a row +-- The amount of buttons in a row. skywars_settings.buttons_per_row = 3 -- The buttons width in real coordinates, -- a unit of measurement which is roughly around 64 pixels, but --- varies based on the screen density and scaling settings of the client +-- varies based on the screen density and scaling settings of the client. skywars_settings.buttons_width = 2 --- The buttons height in real coordinates +-- The buttons height in real coordinates. skywars_settings.buttons_height = 1.8 diff --git a/_arena_lib/arena_callbacks.lua b/_arena_lib/arena_callbacks.lua index d331a72..a3b1a3e 100644 --- a/_arena_lib/arena_callbacks.lua +++ b/_arena_lib/arena_callbacks.lua @@ -1,3 +1,45 @@ +local function add_privs(pl_name) + local privs = minetest.get_player_privs(pl_name) + local player = minetest.get_player_by_name(pl_name) + + -- preventing players with noclip to fall when placing blocks + if privs.noclip then + player:get_meta():set_int("noclip", 2) + privs.noclip = nil + else + player:get_meta():set_int("noclip", 0) + end + + if skywars_settings.build_permission ~= "" then + if privs[skywars_settings.build_permission] then + player:get_meta():set_int("build", 2) + else + player:get_meta():set_int("build", 0) + end + privs[skywars_settings.build_permission] = true + end + + minetest.set_player_privs(pl_name, privs) +end + + + +local function remove_privs(pl_name) + local privs = minetest.get_player_privs(pl_name) + local player = minetest.get_player_by_name(pl_name) + + if player:get_meta():get_int("noclip") == 2 then + privs.noclip = true + end + if player:get_meta():get_int("build") ~= 2 then + privs[skywars_settings.build_permission] = nil + end + + minetest.set_player_privs(pl_name, privs) +end + + + arena_lib.on_load("skywars", function(arena) skywars.reset_map(arena) minetest.after(skywars_settings.loading_time, function() @@ -12,14 +54,6 @@ arena_lib.on_load("skywars", function(arena) local player = minetest.get_player_by_name(pl_name) local pl_pos = player:get_pos() - -- preventing players with noclip to fall when placing blocks - if minetest.check_player_privs(pl_name, {noclip=true}) then - local privs = minetest.get_player_privs(pl_name) - player:get_meta():set_int("noclip", 2) - privs.noclip = nil - minetest.set_player_privs(pl_name, privs) - end - local function set_glass(relative_pos) local node_pos = vector.round(vector.add(player:get_pos(), relative_pos)) @@ -32,6 +66,8 @@ arena_lib.on_load("skywars", function(arena) end end + add_privs(pl_name) + skywars.show_kit_selector(pl_name, arena) minetest.after(0.1, function() player:set_physics_override({gravity=0, jump=0}) @@ -75,12 +111,7 @@ arena_lib.on_celebration("skywars", function(arena, winner_name) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) - if player:get_meta():get_int("noclip") == 2 then - local privs = minetest.get_player_privs(pl_name) - privs.noclip = true - minetest.set_player_privs(pl_name, privs) - end - + remove_privs(pl_name) skywars.remove_HUD(arena, pl_name) skywars.remove_armor(player) end @@ -92,12 +123,7 @@ arena_lib.on_end("skywars", function(arena, players) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) - if player:get_meta():get_int("noclip") == 2 then - local privs = minetest.get_player_privs(pl_name) - privs.noclip = true - minetest.set_player_privs(pl_name, privs) - end - + remove_privs(pl_name) skywars.remove_armor(player) -- restore player's original speed player:set_physics_override({speed=arena.players[pl_name].speed}) @@ -121,11 +147,7 @@ arena_lib.on_death("skywars", function(arena, pl_name, reason) end end - if player:get_meta():get_int("noclip") == 2 then - local privs = minetest.get_player_privs(pl_name) - privs.noclip = true - minetest.set_player_privs(pl_name, privs) - end + remove_privs(pl_name) skywars.remove_armor(player) arena_lib.remove_player_from_arena(pl_name, 1) @@ -137,11 +159,7 @@ end) arena_lib.on_quit("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) - if player:get_meta():get_int("noclip") == 2 then - local privs = minetest.get_player_privs(pl_name) - privs.noclip = true - minetest.set_player_privs(pl_name, privs) - end + remove_privs(pl_name) skywars.update_players_counter(arena, false) skywars.remove_HUD(arena, pl_name) @@ -154,11 +172,7 @@ end) arena_lib.on_disconnect("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) - if player:get_meta():get_int("noclip") == 2 then - local privs = minetest.get_player_privs(pl_name) - privs.noclip = true - minetest.set_player_privs(pl_name, privs) - end + remove_privs(pl_name) skywars.update_players_counter(arena, false) skywars.remove_armor(player) @@ -169,11 +183,7 @@ end) arena_lib.on_kick("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) - if player:get_meta():get_int("noclip") == 2 then - local privs = minetest.get_player_privs(pl_name) - privs.noclip = true - minetest.set_player_privs(pl_name, privs) - end + remove_privs(pl_name) skywars.update_players_counter(arena, false) skywars.remove_HUD(arena, pl_name) diff --git a/_map_handler/map_manager.lua b/_map_handler/map_manager.lua index dfda063..bf49155 100644 --- a/_map_handler/map_manager.lua +++ b/_map_handler/map_manager.lua @@ -1,3 +1,31 @@ +-- reordering the corner's position so that pos1 is smaller than pos2 +local function reorder_positions(pos1, pos2) + local temp + + if pos1.z > pos2.z then + temp = pos1.z + pos1.z = pos2.z + pos2.z = temp + end + + if pos1.y > pos2.y then + temp = pos1.y + pos1.y = pos2.y + pos2.y = temp + end + + if pos1.x > pos2.x then + temp = pos1.x + pos1.x = pos2.x + pos2.x = temp + end + + return pos1, pos2 + +end + + + local function get_arena_by_pos(pos) for i, arena in pairs(arena_lib.mods["skywars"].arenas) do if arena.pos1.x == nil or arena.pos2.x == nil then goto continue end @@ -19,9 +47,14 @@ local function save_block(arena, pos, node) local maps = skywars.load_maps() local serialized_pos = minetest.serialize(pos) - -- if the arena exists and this block has not been changed yet - if arena and maps[serialized_pos] == nil then - maps[serialized_pos] = node + if not arena then return end + if not maps then maps = {} end + if not maps[arena.name] then maps[arena.name] = {} end + if not maps[arena.name].blocks then maps[arena.name].blocks = {} end + + -- if this block has not been changed yet + if maps[arena.name].blocks[serialized_pos] == nil then + maps[arena.name].blocks[serialized_pos] = node skywars.overwrite_maps(maps) end end @@ -30,13 +63,29 @@ end function skywars.reset_map(arena) local maps = skywars.load_maps() + local pos1, pos2 = reorder_positions(arena.pos1, arena.pos2) + local distance_from_center = vector.distance(pos1, pos2) / 2 + local map_center = {x = (pos1.x+pos2.x)/2, y = (pos1.y+pos2.y)/2, z = (pos1.z+pos2.z)/2} - if not maps or maps == "" then return end - for serialized_pos, node in pairs(maps) do + -- deleting drops + for i, obj in pairs(minetest.get_objects_inside_radius(map_center, distance_from_center)) do + if not obj:is_player() then + local prop = obj:get_properties() + if prop.automatic_rotate > 0 and ItemStack(prop.textures[1]):is_known() then + obj:remove() + end + end + end + + if not maps or maps == "" or not maps[arena.name] or not maps[arena.name].blocks then + return + end + + for serialized_pos, node in pairs(maps[arena.name].blocks) do local pos = minetest.deserialize(serialized_pos) minetest.add_node(pos, node) end - maps = {} + maps[arena.name].blocks = {} skywars.overwrite_maps(maps) end @@ -96,7 +145,6 @@ function minetest.set_node(pos, node) end - function minetest.add_node(pos, node) minetest.set_node(pos, node) end diff --git a/commands.lua b/commands.lua index dbf8031..4c116f2 100644 --- a/commands.lua +++ b/commands.lua @@ -1,3 +1,25 @@ +local function arena_valid(arena_name, sender, is_property_changing) + local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) + + if arena_lib.is_arena_in_edit_mode(arena_name) and is_property_changing then + skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) + return false + elseif arena == nil then + skywars.print_error(sender, skywars.T("@1 doesn't exist!", arena_name)) + return false + elseif arena.enabled == true and is_property_changing then + arena_lib.disable_arena(sender, "skywars", arena_name) + if arena.enabled == true then + skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) + return false + end + end + + return true +end + + + ChatCmdBuilder.new("skywars", function(cmd) cmd:sub("tutorial", @@ -176,18 +198,8 @@ function(cmd) function(sender, arena_name, treasure_name, count, rarity, preciousness ) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) - return - elseif arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end + if not arena_valid(arena_name, sender, true) then + return elseif count <= 0 then skywars.print_error(sender, skywars.T("Count has to be greater than 0!")) return @@ -228,20 +240,9 @@ function(cmd) local treasure_name = minetest.get_player_by_name(sender):get_wielded_item():get_name() local count = minetest.get_player_by_name(sender):get_wielded_item():get_count() - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return end - if arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end - end if rarity < 1 then skywars.print_error(sender, skywars.T("Rarity has to be greater than 0!")) return @@ -269,23 +270,45 @@ function(cmd) )) end) + + + cmd:sub("removetreasure hand :arena", function(sender, arena_name) + local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) + local found = {true, false} -- the first is used to repeat the for until nothing is found + local treasure_name = minetest.get_player_by_name(sender):get_wielded_item():get_name() + + if treasure_name == "" then + skywars.print_error(sender, skywars.T("Your hand is empty!")) + return + elseif not arena_valid(arena_name, sender, true) then + return + end + + while found[1] do + found[1] = false + for i, treasure in pairs(arena.treasures) do + if treasure.name == treasure_name then + table.remove(arena.treasures, i) + i = i-1 + found[1] = true + found[2] = true + end + end + end + arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false) + + if found[2] then skywars.print_msg(sender, skywars.T("@1 removed from @2!", treasure_name, arena_name)) + else skywars.print_error(sender, skywars.T("Treasure not found!")) end + end) + + cmd:sub("removetreasure :arena :treasure", function(sender, arena_name, treasure_name) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) local found = {true, false} -- the first is used to repeat the for until nothing is found - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return - elseif arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end end while found[1] do @@ -311,18 +334,8 @@ function(cmd) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) local treasure_name = "" - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return - elseif arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end end for i=1, #arena.treasures do @@ -345,22 +358,13 @@ function(cmd) local id2, to_arena = arena_lib.get_arena_by_name("skywars", to) local found = false - - if from_arena == nil then - skywars.print_error(sender, skywars.T("First arena not found!")) + if not arena_valid(from, sender) then return - elseif to_arena == nil then - skywars.print_error(sender, skywars.T("Second arena not found!")) + elseif not arena_valid(to_arena, sender, true) then return elseif from_arena == to_arena then skywars.print_error(sender, skywars.T("The arenas must be different!")) return - elseif to_arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if to_arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", to)) - return - end end to_arena.treasures = {} @@ -378,20 +382,15 @@ function(cmd) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) local found = false - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender) then return end - skywars.print_msg(sender, skywars.T("Treasures list:")) for i=1, #arena.treasures do local treasure = arena.treasures[i] skywars.print_msg(sender, "ID: " .. arena.treasures[i].id .. ".\n" .. skywars.T( - "name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4", + "name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4", treasure.name, treasure.rarity, treasure.preciousness, treasure.count ) .. "\n\n" ) @@ -403,11 +402,7 @@ function(cmd) cmd:sub("searchtreasure :arena :treasure", function(sender, arena_name, treasure_name) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender) then return end @@ -445,20 +440,9 @@ function(cmd) id = chest_id } - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return end - if arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end - end if t_min <= 0 or t_max <= 0 then skywars.print_error(sender, skywars.T("The minimum or maximum amount of treasures has to be greater than 0!")) return @@ -474,7 +458,10 @@ function(cmd) return end - skywars.print_msg(sender, skywars.T("Chest added!")) + skywars.print_msg(sender, + skywars.T("Chest added with @1-@2 preciousness and @3-@4 treasures amount!", + min_preciousness, max_preciousness, min_treasures_amount, max_treasures_amount) + ) table.insert(arena.chests, chest) arena_lib.change_arena_property(sender, "skywars", arena_name, "chests", arena.chests, false) end) @@ -507,20 +494,9 @@ function(cmd) id = chest_id } - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return end - if arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end - end if t_min <= 0 or t_max <= 0 then skywars.print_error(sender, skywars.T("The minimum or maximum amount of treasures has to be greater than 0!")) return @@ -536,7 +512,10 @@ function(cmd) return end - skywars.print_msg(sender, skywars.T("Chest added!")) + skywars.print_msg(sender, + skywars.T("Chest added with @1-@2 preciousness and @3-@4 treasures amount!", + min_preciousness, max_preciousness, t_min, t_max) + ) table.insert(arena.chests, chest) arena_lib.change_arena_property(sender, "skywars", arena_name, "chests", arena.chests, false) end) @@ -547,18 +526,22 @@ function(cmd) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) local found = false - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender) then return end skywars.print_msg(sender, skywars.T("Chest list:")) for i=1, #arena.chests do - local chest_pos = tostring(arena.chests[i].pos.x) .. " " .. tostring(arena.chests[i].pos.y) .. " " .. tostring(arena.chests[i].pos.z) - skywars.print_msg(sender, skywars.T("ID: @1 - POSITION: @2", arena.chests[i].id, chest_pos)) + local chest = arena.chests[i] + local chest_pos = minetest.pos_to_string(chest.pos, 0) + + skywars.print_msg(sender, + skywars.T( + "ID: @1 - Position: @2 @npreciousness: @3-@4 @ntreasures amount: @5-@6", + chest.id, chest_pos, chest.min_preciousness, chest.max_preciousness, + chest.min_treasures, chest.max_treasures + ) .. "\n\n" + ) end end) @@ -577,18 +560,8 @@ function(cmd) return end - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return - elseif arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end end for i=1, #arena.chests do @@ -613,18 +586,8 @@ function(cmd) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) local found = false - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return - elseif arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end end for i=1, #arena.chests do @@ -739,6 +702,41 @@ function(cmd) + cmd:sub("removeitem hand :kit", + function(sender, kit_name) + local kits = skywars.load_kits() + local item_name = minetest.get_player_by_name(sender):get_wielded_item():get_name() + local found = false + + if kits[kit_name] == nil then + skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name)) + return + elseif ItemStack(item_name):is_known() == false then + skywars.print_error(sender, skywars.T("@1 doesn't exist!", item_name)) + return + elseif item_name == "" then + skywars.print_error(sender, skywars.T("Your hand is empty!")) + return + end + + for i=1, #kits[kit_name].items do + if kits[kit_name].items[i].name == item_name then + table.remove(kits[kit_name].items, i) + found = true + break + end + end + skywars.overwrite_kits(kits) + + if found then + skywars.print_msg(sender, skywars.T("@1 removed from @2!", item_name, kit_name)) + else + skywars.print_error(sender, skywars.T("@1 doesn't exist!", item_name)) + end + end) + + + cmd:sub("removeitem :kit :item", function(sender, kit_name, item_name) local kits = skywars.load_kits() @@ -822,20 +820,9 @@ function(cmd) local kits = skywars.load_kits() local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return end - if arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end - end if kits[kit_name] == nil then skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name)) return @@ -855,21 +842,9 @@ function(cmd) local id, arena = arena_lib.get_arena_by_name("skywars", arena_name) local found = false - if arena_lib.is_arena_in_edit_mode(arena_name) then - skywars.print_error(sender, skywars.T("Nobody must be in the editor!")) - return - elseif arena == nil then - skywars.print_error(sender, skywars.T("Arena not found!")) + if not arena_valid(arena_name, sender, true) then return - end - if arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - if arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", arena_name)) - return - end - end - if kits[kit_name] == nil then + elseif kits[kit_name] == nil then skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name)) return end @@ -895,22 +870,13 @@ function(cmd) local found = false - if from_arena == nil then - skywars.print_error(sender, skywars.T("First arena not found!")) + if not arena_valid(from, sender) then return - elseif to_arena == nil then - skywars.print_error(sender, skywars.T("Second arena not found!")) + elseif not arena_valid(to, sender, true) then return elseif from_arena == to_arena then skywars.print_error(sender, skywars.T("The arenas must be different!")) return - elseif to_arena.enabled == true then - arena_lib.disable_arena(sender, "skywars", arena_name) - - if to_arena.enabled == true then - skywars.print_error(sender, skywars.T("@1 must be disabled!", to)) - return - end end to_arena.kits = {} @@ -981,15 +947,20 @@ function(cmd) return end - skywars.reset_map(arena) - if arena.enabled then + skywars.reset_map(arena) skywars.print_msg(sender, skywars.T("@1 reset!", arena.name)) else skywars.print_error(sender, skywars.T("@1 must be enabled!", arena_name)) end end) + + + cmd:sub("clearmapstable", function(sender) + skywars.overwrite_maps({}) + skywars.print_msg(sender, skywars.T("Maps table reset!")) + end) end, { description = [[ @@ -1005,13 +976,15 @@ end, { - disable - Skywars commands: + Skywars: + - tutorial - addtreasure - addtreasure hand - removetreasure : remove all treasures with than name + - removetreasure hand - removetreasure id - gettreasures - searchtreasure : shows all the treasures with that name @@ -1032,12 +1005,18 @@ end, { - additem - additem hand - removeitem + - removeitem hand - arenakit add - arenakit remove - getkits - resetkit - getitems - copykits + + + Debug: + + - clearmapstable: clears the changed blocks table of each map without resetting them ]], privs = { skywars_admin = true } }) diff --git a/locale/skywars.it.tr b/locale/skywars.it.tr index 24a13ae..440b3e9 100644 --- a/locale/skywars.it.tr +++ b/locale/skywars.it.tr @@ -2,13 +2,14 @@ # author(s): Giov4 # reviewer(s): # textdomain: skywars +# @n means "newline" +# @ (@1, @2, ecc) is a value that the mod will pass at runtime -Arena not found!=Arena non trovata! Count has to be greater than 0!=La quantità deve essere maggiore di 0 Rarity has to be greater than 0!=La rarità deve essere maggiore di 0! Rarity has to be smaller than 11!=La rarità deve essere minore di 11! @1 doesn't exist!=@1 non esiste! -Your hand is empty!=La tua mano è vuota +Your hand is empty!=La tua mano è vuota! Treasure not found!=Tesoro non trovato! The minimum or maximum amount of treasures has to be greater than 0!=Il numero minimo o massimo di tesori deve essere maggiore di 0! Treasures list:=Lista dei tesori: @@ -16,28 +17,26 @@ First arena not found!=Prima arena non trovata/o! Second arena not found!=Seconda arena non trovata/p! @1 treasures have been copied to @2!=I tesori di @1 sono stati copiati in @2! The arenas must be different!=Le arene devono essere diverse! -# @n means "newline" name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4=nome: @1 @nrarità: @2 @npreziosità: @3 @nquantità: @4 -Chest added!=Cassa aggiunta! +Chest added with @1-@2 preciousness and @3-@4 treasures amount!=Cassa aggiunta con @1-@2 di preziosità e @3-@4 quantità di tesori Chest removed!=Cassa rimossa! Chest not found!=Cassa non trovata! The chest already exists!=La cassa già esiste! Chest list:=Lista delle casse: You're not looking at anything!=Non stai guardando nulla! -ID: @1 - POSITION: @2=ID: @1 - POSIZIONE: @2 +ID: @1 - Position: @2 @npreciousness: @3-@4 @ntreasures amount: @5-@6=ID: @1 - Posizione: @2 @npreziosità: @3-@4 @nquantità dei tesori: @5-@6 Position saved!=Posizione salvata You didn't set the treasures!=Non hai impostato i tesori! You didn't set the chests!=Non hai impostato le chest! You didn't set the map corners!=Non hai impostato gli angoli della mappa! @1 must be disabled!=@1 deve essere disabilitata! @1 must be enabled!=@1 deve essere abilitata! -Pos1 or pos2 are not set!=Pos1 o pos2 non sono impostate +Pos1 or pos2 are not set!=Pos1 o pos2 non sono impostate! @1 was killed by @2=@1 è stato ucciso da @2 @1 already exists!=@1 esiste già! @1 added to @2!=@1 aggiunto a @2 x@1 @2 added to @3 with @4 rarity and @5 preciousness!=x@1 @2 aggiunto a @3 con rarità @4 e preziosità @5 @1 removed from @2!=@1 rimosso da @2! -Choose a kit=Scegli un kit Kit @1 created!=Kit @1 creato! Kit @1 deleted!=Kit @1 eliminato! Kits list:=Lista dei kit: @@ -48,4 +47,5 @@ x@1 @2 added to @3!=x@1 @2 aggiunto a @3! @1 kits have been copied to @2!=I kit di @1 sono stati copiati in @2! Time is out, the match is over!=Tempo terminato, la partita è finita! Nobody=Nessuno -Nobody must be in the editor!=Nessuno deve essere nell'editor \ No newline at end of file +Nobody must be in the editor!=Nessuno deve essere nell'editor! +Maps table reset!=Tabella mappe resettata! \ No newline at end of file diff --git a/locale/template.txt b/locale/template.txt index da061db..722963f 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -2,8 +2,9 @@ # author(s): # reviewer(s): # textdomain: skywars +# @n means "newline" +# @ (@1, @2, ecc) is a value that the mod will pass at runtime -Arena not found!= Count has to be greater than 0!= Rarity has to be greater than 0!= Rarity has to be smaller than 11!= @@ -19,14 +20,13 @@ First arena not found!= Second arena not found!= @1 treasures have been copied to @2!= The arenas must be different!= -# @n means "newline" -name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4= -Chest added!= +name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4= +Chest added with @1-@2 preciousness and @3-@4 treasures amount!= Chest removed!= Chest not found!= Chest list:= The chest already exists!= -ID: @1 - POSITION: @2= +ID: @1 - Position: @2 @npreciousness: @3-@4 @ntreasures amount: @5-@6= Position saved!= You didn't set the treasures!= You didn't set the chests!= @@ -39,7 +39,6 @@ Pos1 or pos2 are not set!= @1 added to @2!= x@1 @2 added to @3 with @4 rarity and @5 preciousness!= @1 removed from @2!= -Choose a kit= Kit @1 created!= Kit @1 deleted!= Kits list:= @@ -50,4 +49,5 @@ x@1 @2 added to @3!= @1 kits have been copied to @2!= Time is out, the match is over!= Nobody= -Nobody must be in the editor!= \ No newline at end of file +Nobody must be in the editor!= +Maps table reset!= \ No newline at end of file