96 lines
3.1 KiB
Lua
96 lines
3.1 KiB
Lua
|
local function select_kit(pl_name, kit_items)
|
||
|
local player_inv = minetest.get_player_by_name(pl_name):get_inventory()
|
||
|
|
||
|
for i=1, #kit_items do
|
||
|
player_inv:add_item("main", ItemStack(kit_items[i]))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
local function create_formspec(arena)
|
||
|
local width = 5
|
||
|
local height = 6
|
||
|
|
||
|
local formspec = {
|
||
|
"formspec_version[3]",
|
||
|
"size[12,12]",
|
||
|
"position[0.5, 0.5]",
|
||
|
"anchor[0.5,0.5]",
|
||
|
"no_prepend[]",
|
||
|
"bgcolor[#00000000;]",
|
||
|
"background[0,0;"..skywars_settings.background_width..","..skywars_settings.background_height..";"..skywars_settings.hud__kit_background..";true]",
|
||
|
"style_type[image_button;border=false]"
|
||
|
}
|
||
|
|
||
|
local buttons_per_row = skywars_settings.buttons_per_row
|
||
|
local distance_x = skywars_settings.distance_x
|
||
|
local distance_y = skywars_settings.distance_y
|
||
|
local offset_x = 0
|
||
|
local offset_y = 0
|
||
|
local kits = skywars.load_kits()
|
||
|
|
||
|
-- generates the formspec buttons
|
||
|
for i=1, #arena.kits do
|
||
|
local name = arena.kits[i]
|
||
|
local x = skywars_settings.starting_x + offset_x
|
||
|
local y = skywars_settings.starting_y + offset_y
|
||
|
|
||
|
-- if offset_x has reached its maximum amount then reset it and increase offset_y
|
||
|
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
|
||
|
|
||
|
local kit_items = ""
|
||
|
-- generating the item description (a list of all the items in the kit)
|
||
|
if kits[name].items then
|
||
|
for j=1, #kits[name].items do
|
||
|
local item_name = kits[name].items[j].name
|
||
|
|
||
|
-- if the string is "mod:item" it becomes "item"
|
||
|
if string.match(item_name, ":") then
|
||
|
local split_name = string.split(item_name, ":")
|
||
|
item_name = split_name[1]
|
||
|
end
|
||
|
kit_items = kit_items .. "x" .. kits[name].items[j].count .. " " .. item_name .. "\n"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
table.insert(formspec, "image_button["..x..","..y..";"..skywars_settings.buttons_width..","..skywars_settings.buttons_height..";" ..kits[name].texture.. ";"..name..";]")
|
||
|
table.insert(formspec, "tooltip["..name..";"..minetest.formspec_escape(kit_items).."]")
|
||
|
end
|
||
|
|
||
|
return table.concat(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)
|
||
|
local kits = skywars.load_kits()
|
||
|
|
||
|
-- if the pressed button's name is equal to one of the kits in the arena then select it
|
||
|
for i=1, #arena.kits do
|
||
|
local name = arena.kits[i]
|
||
|
if fields[name] then
|
||
|
select_kit(pl_name, kits[name].items)
|
||
|
minetest.close_formspec(pl_name, "skywars:kit_selector")
|
||
|
end
|
||
|
end
|
||
|
end)
|