2020-10-21 05:31:21 -07:00
|
|
|
local function select_kit() end
|
|
|
|
local function create_formspec() end
|
|
|
|
|
|
|
|
|
|
|
|
function skywars.show_kit_selector(pl_name, arena)
|
|
|
|
if #arena.kits == 0 then return end
|
|
|
|
minetest.show_formspec(pl_name, "skywars:kit_selector", create_formspec(arena))
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
|
|
if formname ~= "skywars:kit_selector" then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local pl_name = player:get_player_name()
|
|
|
|
local arena = arena_lib.get_arena_by_player(pl_name)
|
2020-10-22 15:35:26 -07:00
|
|
|
local kits = skywars.load_table("kits")
|
2020-10-21 05:31:21 -07:00
|
|
|
|
2020-11-02 09:13:45 -08:00
|
|
|
-- If the pressed button name is equal to one of the kits in the arena then select it.
|
2020-10-23 15:22:48 -07:00
|
|
|
for i = 1, #arena.kits do
|
2020-10-21 05:31:21 -07:00
|
|
|
local kit_name = arena.kits[i]
|
|
|
|
if fields[kit_name] then
|
2020-10-23 15:22:48 -07:00
|
|
|
select_kit(pl_name, kits[kit_name])
|
2020-10-21 05:31:21 -07:00
|
|
|
minetest.close_formspec(pl_name, "skywars:kit_selector")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-23 15:22:48 -07:00
|
|
|
function select_kit(pl_name, kit)
|
2020-09-13 12:47:11 -07:00
|
|
|
local player_inv = minetest.get_player_by_name(pl_name):get_inventory()
|
2020-11-05 06:28:17 -08:00
|
|
|
player_inv:set_list("main", {})
|
|
|
|
player_inv:set_list("craft", {})
|
2020-09-13 12:47:11 -07:00
|
|
|
|
2020-10-23 15:22:48 -07:00
|
|
|
for i=1, #kit.items do
|
|
|
|
player_inv:add_item("main", ItemStack(kit.items[i]))
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
2020-10-23 15:22:48 -07:00
|
|
|
minetest.sound_play("sw_kit_selector", {pos = minetest.get_player_by_name(pl_name):get_pos(), to_player = pl_name})
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-21 05:31:21 -07:00
|
|
|
function create_formspec(arena)
|
2020-10-23 15:22:48 -07:00
|
|
|
local settings = skywars_settings
|
2020-09-13 12:47:11 -07:00
|
|
|
local formspec = {
|
|
|
|
"formspec_version[3]",
|
2020-10-23 15:22:48 -07:00
|
|
|
"size["..settings.background_width..","..settings.background_height.."]",
|
2020-09-13 12:47:11 -07:00
|
|
|
"position[0.5, 0.5]",
|
|
|
|
"anchor[0.5,0.5]",
|
|
|
|
"no_prepend[]",
|
|
|
|
"bgcolor[#00000000;]",
|
2020-10-23 15:22:48 -07:00
|
|
|
"background[0,0;1,1;"..settings.hud_kit_background..";true]",
|
2020-09-13 12:47:11 -07:00
|
|
|
"style_type[image_button;border=false]"
|
|
|
|
}
|
2020-10-23 15:22:48 -07:00
|
|
|
local buttons_per_row = settings.buttons_per_row
|
|
|
|
local distance_x = settings.distance_x
|
|
|
|
local distance_y = settings.distance_y
|
2020-09-13 12:47:11 -07:00
|
|
|
local offset_x = 0
|
|
|
|
local offset_y = 0
|
2020-10-22 15:35:26 -07:00
|
|
|
local kits = skywars.load_table("kits")
|
2020-09-13 12:47:11 -07:00
|
|
|
|
2020-11-02 09:13:45 -08:00
|
|
|
-- Generates the formspec buttons.
|
2020-09-13 12:47:11 -07:00
|
|
|
for i=1, #arena.kits do
|
2020-10-23 15:22:48 -07:00
|
|
|
local kit_name = arena.kits[i]
|
|
|
|
local kit = kits[kit_name]
|
|
|
|
local x = settings.starting_x + offset_x
|
|
|
|
local y = settings.starting_y + offset_y
|
|
|
|
local kit_items = ""
|
2020-09-13 12:47:11 -07:00
|
|
|
|
2020-10-23 15:22:48 -07:00
|
|
|
if not kit then
|
|
|
|
minetest.log(
|
|
|
|
"error",
|
|
|
|
"[Skywars] The arena " .. arena.name .. " is trying to show a kit called " .. kit_name .. ", but it doesn't exist!"
|
|
|
|
)
|
2020-09-23 07:45:32 -07:00
|
|
|
goto continue
|
|
|
|
end
|
|
|
|
|
2020-10-23 15:22:48 -07:00
|
|
|
if kit.items and kit.items[1] then
|
2020-11-02 09:13:45 -08:00
|
|
|
-- If offset_x has reached its maximum amount then reset it and increase offset_y.
|
2020-10-11 06:22:54 -07:00
|
|
|
if offset_x == distance_x * (buttons_per_row-1) then
|
|
|
|
offset_y = offset_y + distance_y
|
|
|
|
offset_x = 0
|
|
|
|
else
|
|
|
|
offset_x = offset_x + distance_x
|
|
|
|
end
|
|
|
|
|
2020-11-02 09:13:45 -08:00
|
|
|
-- Generating the kit description (a list of all the items in the kit).
|
2020-10-23 15:22:48 -07:00
|
|
|
for j = 1, #kit.items do
|
|
|
|
local item_name = kit.items[j].name
|
2020-09-13 12:47:11 -07:00
|
|
|
|
2020-11-02 09:13:45 -08:00
|
|
|
-- If the string is "mod:item_name" it becomes "item name".
|
2020-09-13 12:47:11 -07:00
|
|
|
if string.match(item_name, ":") then
|
|
|
|
local split_name = string.split(item_name, ":")
|
2020-09-14 12:12:16 -07:00
|
|
|
item_name = string.gsub(split_name[2], "_", " ")
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
2020-10-23 15:22:48 -07:00
|
|
|
kit_items = kit_items.."x"..kit.items[j].count.." ".. item_name.."\n"
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
|
|
|
|
2020-10-23 15:22:48 -07:00
|
|
|
table.insert(formspec, "image_button["..x..","..y..";"..settings.buttons_width..","..settings.buttons_height..";" .. kit.texture.. ";"..kit_name..";]")
|
|
|
|
table.insert(formspec, "tooltip["..kit_name..";"..minetest.formspec_escape(kit_items).."]")
|
2020-09-15 13:16:49 -07:00
|
|
|
end
|
|
|
|
|
2020-09-23 07:45:32 -07:00
|
|
|
::continue::
|
2020-09-13 12:47:11 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
return table.concat(formspec, "")
|
2020-10-21 05:31:21 -07:00
|
|
|
end
|