2020-09-07 16:37:12 -07:00
|
|
|
ChatCmdBuilder.new("skywars",
|
|
|
|
function(cmd)
|
|
|
|
cmd:sub("tutorial",
|
|
|
|
function(sender)
|
2020-09-11 11:43:04 -07:00
|
|
|
skywars.print_msg(sender, [[
|
2020-09-08 05:51:37 -07:00
|
|
|
|
|
|
|
(If you find it uncomfortable to read the tutorial from the chat
|
|
|
|
you can read it from a file in the mod folder called TUTORIAL.txt)
|
2020-09-11 11:43:04 -07:00
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
These are the steps to follow in order to create and configure an
|
|
|
|
arena:
|
2020-07-18 14:18:57 -07:00
|
|
|
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
1) Creating the arena using:
|
|
|
|
|
|
|
|
/skywars create <arena name> [min players] [max players]
|
|
|
|
where min players is equal to the minimun amount of players to make
|
|
|
|
the arena start, and max players to the maximum amount of players that
|
|
|
|
an arena can have.
|
|
|
|
|
|
|
|
|
|
|
|
2) Editing the arena using:
|
|
|
|
|
|
|
|
/skywars edit <arena name>
|
|
|
|
in this menu you can add spawn points and set up the sign to enter the
|
|
|
|
arena: the spawn points are where the players will spawn when they
|
|
|
|
enter the arena, while the sign is just the way to enter it (by
|
|
|
|
clicking it).
|
|
|
|
|
|
|
|
|
|
|
|
3) Setting the arena treasures (the items that can spawn in the
|
|
|
|
chests):
|
|
|
|
item: the item name
|
2020-09-19 06:31:25 -07:00
|
|
|
rarity: how often it will spawn in chests
|
2020-09-07 16:37:12 -07:00
|
|
|
preciousness: in which chests it can be put, for example a chest with
|
|
|
|
a preciousness range 2-4 can spawn just items with a preciousness
|
|
|
|
between 2 and 4
|
|
|
|
count: the item amount
|
|
|
|
|
2020-09-19 06:31:25 -07:00
|
|
|
/skywars addtreasure <arena name> <item> <count> <rarity (min 1.0, max
|
|
|
|
10.0)> <preciousness>
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
You can also use:
|
2020-09-19 06:31:25 -07:00
|
|
|
/skywars addtreasure hand <arena name> <rarity (min 1.0, max 10.0)>
|
2020-09-16 14:03:49 -07:00
|
|
|
<preciousness>
|
|
|
|
this will get the item name and count from the one in your hand.
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-19 06:31:25 -07:00
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
4) Setting the chests in the arena using:
|
|
|
|
|
|
|
|
/skywars addchest <arena name> <min_preciousness> <max_preciousness>
|
|
|
|
<min_treasures_amount (min. 1)> <max_treasures_amount>
|
2020-09-19 06:31:25 -07:00
|
|
|
to add a chest that will be filled with the right treasures when the match
|
|
|
|
starts, this will set the position to the node you're looking at (not over it).
|
|
|
|
|
|
|
|
You can also use:
|
|
|
|
|
|
|
|
/skywars addchest pos <arena name> <min_preciousness> <max_preciousness>
|
|
|
|
<min_treasures_amount (min. 1)> <max_treasures_amount>
|
|
|
|
this will set the position over the node you're standing on.
|
2020-09-07 16:37:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
5) Saving the map schematic using:
|
|
|
|
|
|
|
|
/skywars pos1
|
|
|
|
/skywars pos2
|
|
|
|
/skywars createschematic <arena name> <schematic_name>
|
|
|
|
in order to automatically reset the map on every match, you have to
|
|
|
|
create a schematic file; to do so, simply specify the corners of the
|
2020-09-16 09:09:06 -07:00
|
|
|
map by using /skywars pos1 and /skywars pos2.
|
|
|
|
!If you overwrite a schematic that you've already created before
|
|
|
|
or you delete an arena make sure to reload the server/delete the old
|
|
|
|
schematic, because the old one won't be deleted!
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
|
|
|
|
6) (Optional) Creating and setting the kits using:
|
|
|
|
|
|
|
|
/skywars createkit <kit name> <texture name>: texture name is the texture
|
|
|
|
that the kit button will have in the selector menu at the start of the match,
|
2020-09-16 14:03:49 -07:00
|
|
|
it must be a file name that you put in the <SKYWARS MOD FOLDER>/textures folder.
|
2020-09-13 12:47:11 -07:00
|
|
|
|
|
|
|
/skywars additem <kit name> <item> <count>: with this you can add items to it
|
2020-09-16 15:58:56 -07:00
|
|
|
or
|
|
|
|
/skywars additem hand <kit name>
|
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
/skywars arenakit add <arena name> <kit name>: each arena has a "kits" property
|
|
|
|
that contains the choosable kits, with this command you add one to it
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
|
|
|
|
7) Enabling the arena using
|
2020-09-07 16:37:12 -07:00
|
|
|
|
|
|
|
/skywars enable <arena name>
|
|
|
|
|
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
Once you've done this you can click the sign and start playing :).
|
|
|
|
You can use /help skywars to read all the commands.
|
2020-09-08 05:51:37 -07:00
|
|
|
To modify the game settings (such as the messages prefix or the
|
2020-09-16 14:03:49 -07:00
|
|
|
hub spawn point) you can edit the SETTINGS.lua file.
|
2020-09-07 16:37:12 -07:00
|
|
|
]])
|
|
|
|
end)
|
|
|
|
|
2020-09-13 15:44:55 -07:00
|
|
|
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
cmd:sub("create :arena", function(name, arena_name)
|
|
|
|
arena_lib.create_arena(name, "skywars", arena_name)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("create :arena :minplayers:int :maxplayers:int", function(name, arena_name, min_players, max_players)
|
|
|
|
arena_lib.create_arena(name, "skywars", arena_name, min_players, max_players)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("remove :arena", function(name, arena_name)
|
|
|
|
arena_lib.remove_arena(name, "skywars", arena_name)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- list of the arenas
|
|
|
|
cmd:sub("list", function(name)
|
|
|
|
arena_lib.print_arenas(name, "skywars")
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- info on a specific arena
|
|
|
|
cmd:sub("info :arena", function(name, arena_name)
|
|
|
|
arena_lib.print_arena_info(name, "skywars", arena_name)
|
|
|
|
end)
|
2020-07-18 14:18:57 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
-- this sets the spawns using the player position
|
|
|
|
cmd:sub("setspawn :arena", function(name, arena)
|
|
|
|
arena_lib.set_spawner(name, "skywars", arena)
|
2020-09-13 15:44:55 -07:00
|
|
|
end)
|
2020-07-18 14:18:57 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("setsign :arena", function(sender, arena)
|
2020-09-07 16:37:12 -07:00
|
|
|
arena_lib.set_sign(sender, nil, nil, "skywars", arena)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("edit :arena", function(sender, arena)
|
|
|
|
arena_lib.enter_editor(sender, "skywars", arena)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("enable :arena", function(name, arena)
|
|
|
|
arena_lib.enable_arena(name, "skywars", arena)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("disable :arena", function(name, arena)
|
|
|
|
arena_lib.disable_arena(name, "skywars", arena)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------
|
|
|
|
-- ! CHEST CMDS ! --
|
|
|
|
--------------------
|
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
cmd:sub("addtreasure :arena :treasure :count:int :rarity:number :preciousness:int",
|
|
|
|
function(sender, arena_name, treasure_name, count, rarity, preciousness )
|
2020-09-07 16:37:12 -07:00
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif arena.enabled == true then
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-07 16:37:12 -07:00
|
|
|
elseif count <= 0 then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Count has to be greater than 0!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
2020-09-19 06:31:25 -07:00
|
|
|
elseif rarity < 1 then
|
|
|
|
skywars.print_error(sender, skywars.T("Rarity has to be greater than 0!"))
|
2020-09-11 11:43:04 -07:00
|
|
|
return
|
2020-09-19 06:31:25 -07:00
|
|
|
elseif rarity > 10 then
|
|
|
|
skywars.print_error(sender, skywars.T("Rarity has to be smaller than 11!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif ItemStack(treasure_name):is_known() == false then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", treasure_name))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2020-09-19 09:46:17 -07:00
|
|
|
local item_id = 1
|
|
|
|
if arena.treasures[#arena.treasures] then item_id = arena.treasures[#arena.treasures].id+1 end
|
|
|
|
table.insert(arena.treasures, {
|
|
|
|
name = treasure_name,
|
|
|
|
rarity = rarity,
|
|
|
|
count = count,
|
|
|
|
preciousness = preciousness,
|
|
|
|
id = item_id
|
|
|
|
})
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false)
|
2020-09-16 14:03:49 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("x@1 @2 added to @3 with @4 rarity and @5 preciousness!",
|
|
|
|
count, treasure_name, arena_name, rarity, preciousness
|
|
|
|
))
|
|
|
|
|
|
|
|
|
2020-07-18 14:18:57 -07:00
|
|
|
end)
|
2020-09-07 16:37:12 -07:00
|
|
|
|
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
|
|
|
|
cmd:sub("addtreasure hand :arena :rarity:number :preciousness:int",
|
|
|
|
function(sender, arena_name, rarity, preciousness)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
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()
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-16 14:03:49 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
|
|
|
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
|
2020-09-19 06:31:25 -07:00
|
|
|
if rarity < 1 then
|
|
|
|
skywars.print_error(sender, skywars.T("Rarity has to be greater than 0!"))
|
2020-09-16 14:03:49 -07:00
|
|
|
return
|
2020-09-19 06:31:25 -07:00
|
|
|
elseif rarity > 10 then
|
|
|
|
skywars.print_error(sender, skywars.T("Rarity has to be smaller than 11!"))
|
2020-09-16 14:03:49 -07:00
|
|
|
return
|
|
|
|
elseif treasure_name == "" then
|
|
|
|
skywars.print_error(sender, skywars.T("Your hand is empty!"))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2020-09-19 09:46:17 -07:00
|
|
|
local item_id = 1
|
|
|
|
if arena.treasures[#arena.treasures] then item_id = arena.treasures[#arena.treasures].id+1 end
|
|
|
|
table.insert(arena.treasures, {
|
|
|
|
name = treasure_name,
|
|
|
|
rarity = rarity,
|
|
|
|
count = count,
|
|
|
|
preciousness = preciousness,
|
|
|
|
id = item_id
|
|
|
|
})
|
2020-09-16 14:03:49 -07:00
|
|
|
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false)
|
|
|
|
skywars.print_msg(sender, skywars.T("x@1 @2 added to @3 with @4 rarity and @5 preciousness!",
|
|
|
|
count, treasure_name, arena_name, rarity, preciousness
|
|
|
|
))
|
|
|
|
end)
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-16 14:06:15 -07:00
|
|
|
cmd:sub("removetreasure :arena :treasure", function(sender, arena_name, treasure_name)
|
2020-09-07 16:37:12 -07:00
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
2020-09-20 05:24:12 -07:00
|
|
|
local found = {true, false} -- the first is used to repeat the for until nothing is found
|
2020-07-18 14:18:57 -07:00
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif arena.enabled == true then
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-07 16:37:12 -07:00
|
|
|
end
|
|
|
|
|
2020-09-20 05:24:12 -07:00
|
|
|
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
|
2020-09-07 16:37:12 -07:00
|
|
|
end
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false)
|
|
|
|
|
2020-09-20 05:24:12 -07:00
|
|
|
if found[2] then skywars.print_msg(sender, skywars.T("@1 removed from @2!", treasure_name, arena_name))
|
2020-09-16 14:03:49 -07:00
|
|
|
else skywars.print_error(sender, skywars.T("Treasure not found!")) end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("removetreasure id :arena :id:int", function(sender, arena_name, treasure_id)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local treasure_name = ""
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
|
|
|
end
|
|
|
|
|
|
|
|
for i=1, #arena.treasures do
|
2020-09-19 09:46:17 -07:00
|
|
|
if arena.treasures[i].id == treasure_id then
|
2020-09-16 14:03:49 -07:00
|
|
|
treasure_name = arena.treasures[i].name
|
|
|
|
table.remove(arena.treasures, i)
|
2020-09-19 06:31:25 -07:00
|
|
|
break
|
2020-09-16 14:03:49 -07:00
|
|
|
end
|
|
|
|
end
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false)
|
|
|
|
|
|
|
|
if treasure_name ~= "" then skywars.print_msg(sender, skywars.T("@1 removed from @2!", treasure_name, arena_name))
|
2020-09-13 12:47:11 -07:00
|
|
|
else skywars.print_error(sender, skywars.T("Treasure not found!")) end
|
2020-07-18 14:18:57 -07:00
|
|
|
end)
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("copytreasures :fromarena :toarena", function(sender, from, to)
|
|
|
|
local id, from_arena = arena_lib.get_arena_by_name("skywars", from)
|
|
|
|
local id2, to_arena = arena_lib.get_arena_by_name("skywars", to)
|
|
|
|
local found = false
|
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
if from_arena == nil then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("First arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif to_arena == nil then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Second arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif from_arena == to_arena then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("The arenas must be different!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif to_arena.enabled == true then
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-07 16:37:12 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
to_arena.treasures = {}
|
|
|
|
for i=1, #from_arena.treasures do
|
|
|
|
to_arena.treasures[i] = from_arena.treasures[i]
|
|
|
|
end
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", to, "treasures", to_arena.treasures, false)
|
2020-09-13 15:44:55 -07:00
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("@1 treasures have been copied to @2!", from, to))
|
2020-07-18 14:18:57 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
cmd:sub("gettreasures :arena", function(sender, arena_name)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local found = false
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("Treasures list:"))
|
2020-09-07 16:37:12 -07:00
|
|
|
for i=1, #arena.treasures do
|
|
|
|
local treasure = arena.treasures[i]
|
2020-09-19 09:46:17 -07:00
|
|
|
skywars.print_msg(sender, "ID: " .. arena.treasures[i].id .. ".\n" ..
|
2020-09-07 16:37:12 -07:00
|
|
|
skywars.T(
|
|
|
|
"name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4",
|
|
|
|
treasure.name, treasure.rarity, treasure.preciousness, treasure.count
|
2020-09-16 14:03:49 -07:00
|
|
|
) .. "\n\n"
|
2020-09-07 16:37:12 -07:00
|
|
|
)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
cmd:sub("searchtreasure :arena :treasure", function(sender, arena_name, treasure_name)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-16 14:03:49 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("Treasures list:"))
|
|
|
|
for i=1, #arena.treasures do
|
|
|
|
local treasure = arena.treasures[i]
|
|
|
|
if treasure.name == treasure_name then
|
2020-09-19 09:46:17 -07:00
|
|
|
skywars.print_msg(sender, "ID: " .. arena.treasures[i].id .. ".\n" ..
|
2020-09-16 14:03:49 -07:00
|
|
|
skywars.T(
|
|
|
|
"name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4",
|
|
|
|
treasure.name, treasure.rarity, treasure.preciousness, treasure.count
|
|
|
|
) .. "\n\n"
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-19 06:31:25 -07:00
|
|
|
cmd:sub("addchest pos :arena :minpreciousness:int :maxpreciousness:int :tmin:int :tmax:int",
|
|
|
|
function(sender, arena_name, min_preciousness, max_preciousness, t_min, t_max)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local pos = vector.round(minetest.get_player_by_name(sender):get_pos())
|
2020-09-22 07:32:27 -07:00
|
|
|
local exists = false
|
2020-09-19 09:46:17 -07:00
|
|
|
local chest_id = 1
|
2020-09-22 07:32:27 -07:00
|
|
|
|
2020-09-19 09:46:17 -07:00
|
|
|
if arena.chests[#arena.chests] then chest_id = arena.chests[#arena.chests].id+1 end
|
2020-09-19 06:31:25 -07:00
|
|
|
local chest =
|
|
|
|
{
|
|
|
|
pos = pos,
|
|
|
|
min_preciousness = min_preciousness,
|
|
|
|
max_preciousness = max_preciousness,
|
|
|
|
min_treasures = t_min,
|
|
|
|
max_treasures = t_max,
|
2020-09-19 09:46:17 -07:00
|
|
|
id = chest_id
|
2020-09-19 06:31:25 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
end
|
2020-09-22 07:32:27 -07:00
|
|
|
for i=1, #arena.chests do
|
|
|
|
if vector.equals(arena.chests[i].pos, pos) then
|
|
|
|
exists = true
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if exists then
|
|
|
|
skywars.print_error(sender, skywars.T("The chest already exists!"))
|
|
|
|
return
|
|
|
|
end
|
2020-09-19 06:31:25 -07:00
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("Chest added!"))
|
|
|
|
table.insert(arena.chests, chest)
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "chests", arena.chests, false)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
cmd:sub("addchest :arena :minpreciousness:int :maxpreciousness:int :tmin:int :tmax:int",
|
|
|
|
function(sender, arena_name, min_preciousness, max_preciousness, t_min, t_max)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
2020-09-19 06:31:25 -07:00
|
|
|
local player = minetest.get_player_by_name(sender)
|
|
|
|
local look_dir = player:get_look_dir()
|
|
|
|
local pos_head = vector.add(player:get_pos(), {x=0, y=1.5, z=0})
|
|
|
|
local result, pos = minetest.line_of_sight(vector.add(pos_head, vector.divide(look_dir, 4)), vector.add(pos_head, vector.multiply(look_dir, 10)))
|
2020-09-22 07:32:27 -07:00
|
|
|
local exists = false
|
2020-09-19 06:31:25 -07:00
|
|
|
|
2020-09-22 07:32:27 -07:00
|
|
|
if result then
|
|
|
|
skywars.print_error(sender, skywars.T("You're not looking at anything!"))
|
|
|
|
return
|
|
|
|
end
|
2020-09-19 06:31:25 -07:00
|
|
|
|
2020-09-19 09:46:17 -07:00
|
|
|
local chest_id = 1
|
|
|
|
if arena.chests[#arena.chests] then chest_id = arena.chests[#arena.chests].id+1 end
|
2020-09-07 16:37:12 -07:00
|
|
|
local chest =
|
|
|
|
{
|
2020-09-19 06:31:25 -07:00
|
|
|
pos = pos,
|
2020-09-07 16:37:12 -07:00
|
|
|
min_preciousness = min_preciousness,
|
|
|
|
max_preciousness = max_preciousness,
|
|
|
|
min_treasures = t_min,
|
|
|
|
max_treasures = t_max,
|
2020-09-19 09:46:17 -07:00
|
|
|
id = chest_id
|
2020-09-07 16:37:12 -07:00
|
|
|
}
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("The minimum or maximum amount of treasures has to be greater than 0!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
end
|
2020-09-22 07:32:27 -07:00
|
|
|
for i=1, #arena.chests do
|
|
|
|
if vector.equals(arena.chests[i].pos, pos) then
|
|
|
|
exists = true
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if exists then
|
|
|
|
skywars.print_error(sender, skywars.T("The chest already exists!"))
|
|
|
|
return
|
|
|
|
end
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("Chest added!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
table.insert(arena.chests, chest)
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "chests", arena.chests, false)
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
2020-09-19 06:31:25 -07:00
|
|
|
|
2020-09-07 16:37:12 -07:00
|
|
|
cmd:sub("getchests :arena", function(sender, arena_name)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local found = false
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("Chest list:"))
|
2020-09-07 16:37:12 -07:00
|
|
|
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)
|
2020-09-11 11:43:04 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("ID: @1 - POSITION: @2", arena.chests[i].id, chest_pos))
|
2020-09-07 16:37:12 -07:00
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-22 07:32:27 -07:00
|
|
|
cmd:sub("removechest :arena", function(sender, arena_name)
|
2020-09-07 16:37:12 -07:00
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local found = false
|
2020-09-22 07:32:27 -07:00
|
|
|
local player = minetest.get_player_by_name(sender)
|
|
|
|
local look_dir = player:get_look_dir()
|
|
|
|
local pos_head = vector.add(player:get_pos(), {x=0, y=1.5, z=0})
|
|
|
|
local result, pos = minetest.line_of_sight(vector.add(pos_head, vector.divide(look_dir, 4)), vector.add(pos_head, vector.multiply(look_dir, 10)))
|
|
|
|
|
|
|
|
if result then
|
|
|
|
skywars.print_error(sender, skywars.T("You're not looking at anything!"))
|
|
|
|
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!"))
|
|
|
|
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
|
|
|
|
if vector.equals(arena.chests[i].pos, pos) then
|
|
|
|
table.remove(arena.chests, i)
|
|
|
|
found = true
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "chests", arena.chests, false)
|
|
|
|
|
|
|
|
if found then
|
|
|
|
skywars.print_msg(sender, skywars.T("Chest removed!"))
|
|
|
|
else
|
|
|
|
skywars.print_error(sender, skywars.T("Chest not found!"))
|
|
|
|
end
|
|
|
|
end)
|
2020-09-07 16:37:12 -07:00
|
|
|
|
2020-09-22 07:32:27 -07:00
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("removechest id :arena :id:int", function(sender, arena_name, chest_id)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local found = false
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
elseif arena.enabled == true then
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-07 16:37:12 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
for i=1, #arena.chests do
|
2020-09-22 07:32:27 -07:00
|
|
|
if arena.chests[i].id == id then
|
2020-09-07 16:37:12 -07:00
|
|
|
table.remove(arena.chests, i)
|
|
|
|
found = true
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "chests", arena.chests, false)
|
|
|
|
|
|
|
|
if found then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("Chest removed!"))
|
|
|
|
else
|
|
|
|
skywars.print_error(sender, skywars.T("Chest not found!"))
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-------------------
|
|
|
|
-- ! KITS CMDS ! --
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
cmd:sub("createkit :name :texture",
|
|
|
|
function(sender, kit_name, texture)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
|
|
|
|
if kits[kit_name] ~= nil then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 already exists!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
kits[kit_name] = {texture = texture, items={}}
|
|
|
|
skywars.overwrite_kits(kits)
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("Kit @1 created!", kit_name))
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("additem :kit :item :count:int",
|
|
|
|
function(sender, kit_name, item_name, item_count)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
local itemstack = {}
|
|
|
|
|
|
|
|
if ItemStack(item_name):is_known() == false then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", item_name))
|
|
|
|
return
|
|
|
|
elseif kits[kit_name] == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
elseif item_count <= 0 then
|
|
|
|
skywars.print_error(sender, skywars.T("Count has to be greater than 0!"))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
itemstack.name = item_name
|
|
|
|
itemstack.count = item_count
|
|
|
|
|
|
|
|
table.insert(kits[kit_name].items, itemstack)
|
|
|
|
skywars.overwrite_kits(kits)
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("@1 added to @2!", item_name, kit_name))
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-22 07:32:27 -07:00
|
|
|
cmd:sub("additem hand :kit",
|
2020-09-16 15:58:56 -07:00
|
|
|
function(sender, kit_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
local item_name = minetest.get_player_by_name(sender):get_wielded_item():get_name()
|
2020-09-22 07:32:27 -07:00
|
|
|
local item_count = minetest.get_player_by_name(sender):get_wielded_item():get_count()
|
|
|
|
local itemstack = {}
|
2020-09-16 15:58:56 -07:00
|
|
|
|
2020-09-22 07:32:27 -07:00
|
|
|
if ItemStack(item_name):is_known() == false then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", item_name))
|
|
|
|
return
|
|
|
|
elseif kits[kit_name] == nil then
|
2020-09-16 15:58:56 -07:00
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
2020-09-22 07:32:27 -07:00
|
|
|
elseif item_name == "" then
|
2020-09-16 15:58:56 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Your hand is empty!"))
|
|
|
|
return
|
|
|
|
end
|
2020-09-22 07:32:27 -07:00
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
itemstack.name = item_name
|
2020-09-22 07:32:27 -07:00
|
|
|
itemstack.count = item_count
|
2020-09-16 15:58:56 -07:00
|
|
|
|
|
|
|
table.insert(kits[kit_name].items, itemstack)
|
|
|
|
skywars.overwrite_kits(kits)
|
|
|
|
|
2020-09-23 07:45:32 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("x@1 @2 added to @3!", item_count, item_name, kit_name))
|
2020-09-16 15:58:56 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
cmd:sub("deletekit :kit",
|
|
|
|
function(sender, kit_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
|
|
|
|
if kits[kit_name] == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
kits[kit_name] = nil
|
|
|
|
skywars.overwrite_kits(kits)
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("Kit @1 deleted!", kit_name))
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("removeitem :kit :item",
|
|
|
|
function(sender, kit_name, item_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
local itemstack = {}
|
|
|
|
local found = false
|
|
|
|
|
|
|
|
if kits[kit_name] == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
itemstack.name = item_name
|
|
|
|
itemstack.count = item_count
|
|
|
|
|
|
|
|
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)
|
2020-09-23 05:55:12 -07:00
|
|
|
found = true
|
|
|
|
break
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
|
|
|
end
|
2020-09-16 16:48:54 -07:00
|
|
|
skywars.overwrite_kits(kits)
|
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
if found then
|
2020-09-23 05:55:12 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("@1 removed from @2!", item_name, kit_name))
|
2020-09-07 16:37:12 -07:00
|
|
|
else
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", item_name))
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-23 05:55:12 -07:00
|
|
|
cmd:sub("resetkit :kit",
|
|
|
|
function(sender, kit_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
|
|
|
|
if kits[kit_name] == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
kits[kit_name].items = {}
|
|
|
|
skywars.overwrite_kits(kits)
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("@1 resetted!", kit_name))
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
cmd:sub("getkits",
|
|
|
|
function(sender)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("Kits list:"))
|
|
|
|
for name in pairs(kits) do
|
|
|
|
skywars.print_msg(sender, name)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("getitems :kit",
|
|
|
|
function(sender, kit_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
|
|
|
|
if kits[kit_name] == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
skywars.print_msg(sender, skywars.T("@1 items:", kit_name))
|
|
|
|
for i=1, #kits[kit_name].items do
|
|
|
|
skywars.print_msg(sender, "x" .. kits[kit_name].items[i].count .. " " .. kits[kit_name].items[i].name)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("arenakit add :arena :kit",
|
|
|
|
function(sender, arena_name, kit_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
|
|
|
return
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
table.insert(arena.kits, kit_name)
|
|
|
|
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "kits", arena.kits, false)
|
|
|
|
skywars.print_msg(sender, skywars.T("@1 added to @2!", kit_name, arena_name))
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("arenakit remove :arena :kit",
|
|
|
|
function(sender, arena_name, kit_name)
|
|
|
|
local kits = skywars.load_kits()
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local found = false
|
|
|
|
|
2020-09-19 09:46:17 -07:00
|
|
|
if arena_lib.is_arena_in_edit_mode(arena_name) then
|
2020-09-16 15:58:56 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Nobody must be in the editor!"))
|
|
|
|
return
|
|
|
|
elseif arena == nil then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
|
|
|
return
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("@1 doesn't exist!", kit_name))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
for i=1, #arena.kits do
|
|
|
|
if arena.kits[i] == kit_name then
|
|
|
|
table.remove(arena.kits, i)
|
|
|
|
found = true
|
|
|
|
break
|
|
|
|
end
|
2020-09-07 16:37:12 -07:00
|
|
|
end
|
2020-09-13 12:47:11 -07:00
|
|
|
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", arena_name, "kits", arena.kits, false)
|
2020-09-16 14:03:49 -07:00
|
|
|
if found then skywars.print_msg(sender, skywars.T("@1 removed from @2!!", kit_name, arena_name))
|
2020-09-13 12:47:11 -07:00
|
|
|
else skywars.print_error(sender, skywars.T("Kit not found!")) end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("copykits :fromarena :toarena", function(sender, from, to)
|
|
|
|
local id, from_arena = arena_lib.get_arena_by_name("skywars", from)
|
|
|
|
local id2, to_arena = arena_lib.get_arena_by_name("skywars", to)
|
|
|
|
local found = false
|
|
|
|
|
2020-09-16 14:03:49 -07:00
|
|
|
|
2020-09-13 12:47:11 -07:00
|
|
|
if from_arena == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("First arena not found!"))
|
|
|
|
return
|
|
|
|
elseif to_arena == nil then
|
|
|
|
skywars.print_error(sender, skywars.T("Second arena not found!"))
|
|
|
|
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
|
2020-09-16 14:03:49 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
to_arena.kits = {}
|
|
|
|
for i=1, #from_arena.kits do
|
|
|
|
to_arena.kits[i] = from_arena.kits[i]
|
|
|
|
end
|
|
|
|
|
|
|
|
arena_lib.change_arena_property(sender, "skywars", to, "kits", to_arena.kits, false)
|
|
|
|
skywars.print_msg(sender, skywars.T("@1 kits have been copied to @2!", from, to))
|
2020-09-07 16:37:12 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
------------------
|
|
|
|
-- ! MAP CMDS ! --
|
|
|
|
------------------
|
|
|
|
|
|
|
|
cmd:sub("pos1", function(sender)
|
|
|
|
local player = minetest.get_player_by_name(sender)
|
|
|
|
|
|
|
|
player:get_meta():set_string("pos1", minetest.serialize(player:get_pos()))
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("Position saved!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("pos2", function(sender)
|
|
|
|
local player = minetest.get_player_by_name(sender)
|
|
|
|
|
2020-09-14 14:09:48 -07:00
|
|
|
player:get_meta():set_string("pos2", minetest.serialize(player:get_pos()))
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_msg(sender, skywars.T("Position saved!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("createschematic :arena :name",
|
|
|
|
function(sender, arena_name, name)
|
|
|
|
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
|
|
|
|
local player = minetest.get_player_by_name(sender)
|
|
|
|
local pos1 = minetest.deserialize(player:get_meta():get_string("pos1"))
|
|
|
|
local pos2 = minetest.deserialize(player:get_meta():get_string("pos2"))
|
|
|
|
|
2020-09-16 15:58:56 -07:00
|
|
|
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
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Arena not found!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
2020-09-16 14:03:49 -07:00
|
|
|
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 pos1 == "" or pos2 == "" then
|
2020-09-13 12:47:11 -07:00
|
|
|
skywars.print_error(sender, skywars.T("Pos1 or pos2 are not set!"))
|
2020-09-07 16:37:12 -07:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2020-09-21 12:48:58 -07:00
|
|
|
skywars.create_schematic(sender, {x = pos1.x, y = pos1.y, z = pos1.z}, {x = pos2.x, y = pos2.y, z = pos2.z}, name, arena)
|
2020-09-07 16:37:12 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd:sub("getpos", function(sender)
|
|
|
|
|
|
|
|
function round(num, numDecimalPlaces)
|
|
|
|
return string.format("%." .. (numDecimalPlaces or 0) .. "f", num)
|
|
|
|
end
|
|
|
|
|
|
|
|
local pos = minetest.get_player_by_name(sender):get_pos()
|
|
|
|
local readable_pos = "[X Y Z] " .. round(pos.x, 1) .. " " .. round(pos.y, 1) .. " " .. round(pos.z, 1)
|
|
|
|
|
2020-09-11 11:43:04 -07:00
|
|
|
skywars.print_msg(sender, readable_pos)
|
2020-09-07 16:37:12 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
end, {
|
|
|
|
|
|
|
|
description = [[
|
2020-09-19 06:31:25 -07:00
|
|
|
(Use /help skywars)
|
2020-09-07 16:37:12 -07:00
|
|
|
|
|
|
|
Arena_lib:
|
|
|
|
|
|
|
|
- create <arena name> [min players] [max players]
|
|
|
|
- edit <arena name>
|
|
|
|
- remove <arena name>
|
|
|
|
- info <arena name>
|
|
|
|
- list
|
|
|
|
- enable <arena name>
|
|
|
|
- disable <arena name>
|
|
|
|
|
|
|
|
|
|
|
|
Skywars commands:
|
2020-09-19 06:31:25 -07:00
|
|
|
- tutorial
|
|
|
|
- addtreasure <arena name> <item> <count> <rarity (min 1.0, max 10.0)>
|
2020-09-16 14:03:49 -07:00
|
|
|
<preciousness>
|
2020-09-19 06:31:25 -07:00
|
|
|
- addtreasure hand <arena name> <rarity (min 1.0, max 10.0)>
|
2020-09-16 14:03:49 -07:00
|
|
|
<preciousness>
|
2020-09-19 06:31:25 -07:00
|
|
|
- removetreasure <arena name> <treasure name>: remove all treasures with than name
|
2020-09-16 14:03:49 -07:00
|
|
|
- removetreasure id <arena name> <treasure id>
|
2020-09-07 16:37:12 -07:00
|
|
|
- gettreasures <arena name>
|
2020-09-16 14:03:49 -07:00
|
|
|
- searchtreasure <arena name> <treasure name>: shows all the treasures with that name
|
|
|
|
- copytreasures <(from) arena name> <(to) arena name>
|
2020-09-07 16:37:12 -07:00
|
|
|
- addchest <arena name> <min_preciousness> <max_preciousness>
|
|
|
|
<min_treasures_amount (min. 1)> <max_treasures_amount>
|
2020-09-19 06:33:27 -07:00
|
|
|
- addchest pos <arena name> <min_preciousness> <max_preciousness>
|
|
|
|
<min_treasures_amount (min. 1)> <max_treasures_amount>
|
2020-09-22 07:32:27 -07:00
|
|
|
- removechest
|
|
|
|
- removechest id <id>
|
2020-09-16 14:03:49 -07:00
|
|
|
- getchests <arena name>
|
2020-09-07 16:37:12 -07:00
|
|
|
- pos1
|
|
|
|
- pos2
|
2020-09-14 07:23:35 -07:00
|
|
|
- createschematic <arena name> <schematic_name>
|
2020-09-07 16:37:12 -07:00
|
|
|
- getpos
|
2020-09-13 12:47:11 -07:00
|
|
|
- createkit <kit name> <texture name>
|
|
|
|
- deletekit <kit name>
|
|
|
|
- additem <kit name> <item> <count>
|
2020-09-16 15:58:56 -07:00
|
|
|
- additem hand <kit name>
|
2020-09-13 12:47:11 -07:00
|
|
|
- removeitem <kit name> <item>
|
|
|
|
- arenakit add <arena> <kit name>
|
|
|
|
- arenakit remove <arena> <kit name>
|
|
|
|
- getkits
|
2020-09-23 05:55:12 -07:00
|
|
|
- resetkit <kit name>
|
2020-09-13 12:47:11 -07:00
|
|
|
- getitems <kit name>
|
|
|
|
- copykits <arena1> <arena2>
|
2020-09-07 16:37:12 -07:00
|
|
|
]],
|
|
|
|
privs = { skywars_admin = true }
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_privilege("skywars_admin", {
|
|
|
|
description = "With this you can use /skywars"
|
|
|
|
})
|
2020-09-08 05:51:37 -07:00
|
|
|
|