218 lines
7.9 KiB
Lua
218 lines
7.9 KiB
Lua
-- Skins mod for minetest
|
|
-- Adds a skin gallery to the inventory, using inventory_plus
|
|
-- Released by Zeg9 under WTFPL
|
|
-- Have fun !
|
|
|
|
skins = {}
|
|
skins.type = { SPRITE=0, MODEL=1 }
|
|
|
|
skins.skins = {}
|
|
skins.default = function()
|
|
return "character_1"
|
|
end
|
|
|
|
skins.get_type = function(texture)
|
|
if not texture then return end
|
|
if string.sub(texture,0,string.len("character")) == "character" then
|
|
return skins.type.MODEL
|
|
end
|
|
if string.sub(texture,0,string.len("player")) == "player" then
|
|
return skins.type.SPRITE
|
|
end
|
|
end
|
|
|
|
skins.modpath = minetest.get_modpath("skins")
|
|
dofile(skins.modpath.."/skinlist.lua")
|
|
dofile(skins.modpath.."/meta.lua")
|
|
dofile(skins.modpath.."/players.lua")
|
|
|
|
skins.update_player_skin = function(player)
|
|
local name = player:get_player_name()
|
|
if skins.get_type(skins.skins[name]) == skins.type.SPRITE then
|
|
player:set_properties({
|
|
visual = "upright_sprite",
|
|
textures = {skins.skins[name]..".png",skins.skins[name].."_back.png"},
|
|
visual_size = {x=1, y=2},
|
|
})
|
|
elseif skins.get_type(skins.skins[name]) == skins.type.MODEL then
|
|
player:set_properties({
|
|
visual = "mesh",
|
|
textures = {skins.skins[name]..".png"},
|
|
visual_size = {x=1, y=1},
|
|
})
|
|
end
|
|
skins.save()
|
|
end
|
|
|
|
skins.formspec = {}
|
|
skins.formspec.main = function(name)
|
|
page = skins.pages[name]
|
|
if page == nil then page = 0 end
|
|
print (name)
|
|
local player = minetest.get_player_by_name(name)
|
|
local player_inv = player:get_inventory()
|
|
player_inv:set_size("skinskey", 1)
|
|
player_inv:set_size("skinskey2", 1)
|
|
player_inv:set_size("knightskin", 1)
|
|
local formspec = "size[8,11.75]"
|
|
.. "button[0,0;2,.5;inven;Back]"
|
|
.. "button[2,0;2,.5;main;Main]"
|
|
.."background[8,12;1,1;gui_formbg.png;true]"
|
|
.."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]"
|
|
.."bgcolor[#080808BB;true]"
|
|
.."list[current_player;skinskey;2,6;1,1;]"
|
|
.."list[current_player;skinskey2;4.5,6;1,1;]"
|
|
.."label[1.7,7;Pixeled Regnum Key]"
|
|
.."label[4.5,7;Knight Key]"
|
|
.."list[current_player;main;0,7.75;8,1;]"
|
|
.."list[current_player;main;0,9;8,3;8]"
|
|
if skins.get_type(skins.skins[name]) == skins.type.MODEL then
|
|
formspec = formspec
|
|
.. "image[0,.75;1,2;"..skins.skins[name].."_preview.png]"
|
|
.. "image[1,.75;1,2;"..skins.skins[name].."_preview_back.png]"
|
|
.. "label[6,.5;Raw texture:]"
|
|
.. "image[6,1;2,1;"..skins.skins[name]..".png]"
|
|
|
|
else
|
|
formspec = formspec
|
|
.. "image[0,.75;1,2;"..skins.skins[name]..".png]"
|
|
.. "image[1,.75;1,2;"..skins.skins[name].."_back.png]"
|
|
end
|
|
local meta = skins.meta[skins.skins[name]]
|
|
if meta then
|
|
if meta.name then
|
|
formspec = formspec .. "label[2,.5;Name: "..meta.name.."]"
|
|
end
|
|
if meta.author then
|
|
formspec = formspec .. "label[2,1;Author: "..meta.author.."]"
|
|
end
|
|
if meta.comment then
|
|
formspec = formspec .. "label[2,1.5;"..meta.comment.."]"
|
|
end
|
|
if meta.description then
|
|
formspec = formspec .. "label[2,2;"..meta.description.."]"
|
|
end
|
|
end
|
|
local index = 0
|
|
local skip = 0 -- Skip skins, used for pages
|
|
for i, skin in ipairs(skins.list) do
|
|
if skin == "character_68" then
|
|
if player:get_inventory():get_stack("skinskey",1):get_name() == "tutorial:regnum_key_pixeled" then
|
|
formspec = formspec .."button[6,5.8;2,1;skins_set_"..i..";see-through skin]"
|
|
end
|
|
elseif skin == "character_171" then
|
|
formspec = formspec .."button[0,5.8;1.5,1;skins_set_"..i..";1248]"
|
|
elseif skin == "character_172" then
|
|
formspec = formspec .."button[0,6.5;1.5,1;skins_set_"..i..";Nightmare]"
|
|
elseif skin == "character_175" or skin == "character_176" or skin == "character_177" or skin == "character_178" or skin == "character_179" then
|
|
if player:get_inventory():get_stack("skinskey2",1):get_name() == "tutorial:knight_schluessel" then
|
|
if player:get_inventory():get_stack("knightskin",1):get_count() == 0 then
|
|
formspec = formspec .."button[6,6.5;2,1;skins_set_175;Knight (red)]"
|
|
elseif player:get_inventory():get_stack("knightskin",1):get_count() == 1 then
|
|
formspec = formspec .."button[6,6.5;2,1;skins_set_176;Knight (blue)]"
|
|
elseif player:get_inventory():get_stack("knightskin",1):get_count() == 2 then
|
|
formspec = formspec .."button[6,6.5;2,1;skins_set_177;Knight (green)]"
|
|
elseif player:get_inventory():get_stack("knightskin",1):get_count() == 3 then
|
|
formspec = formspec .."button[6,6.5;2,1;skins_set_178;Knight (pink)]"
|
|
elseif player:get_inventory():get_stack("knightskin",1):get_count() == 4 then
|
|
formspec = formspec .."button[6,6.5;2,1;skins_set_179;Knight (purple)]"
|
|
end
|
|
end
|
|
|
|
else
|
|
if skip < page*8 then skip = skip + 1 else
|
|
if index < 8 then
|
|
print(skin)
|
|
formspec = formspec .. "image_button["..(index%8)..",2.7;1,2;"..skin
|
|
if skins.get_type(skin) == skins.type.MODEL then
|
|
formspec = formspec .. "_preview"
|
|
end
|
|
formspec = formspec .. ".png;skins_set_"..i..";]"
|
|
end
|
|
index = index +1
|
|
end
|
|
end
|
|
end
|
|
if page > 0 then
|
|
formspec = formspec .. "button[0,4.7;1,.5;skins_page_"..(page-1)..";<<]"
|
|
else
|
|
formspec = formspec .. "button[0,4.7;1,.5;skins_page_"..page..";<<]"
|
|
end
|
|
formspec = formspec .. "button[.75,4.7;6.5,.5;skins_page_"..page..";Page "..(page+1).."/"..math.floor(#skins.list/8).."]" -- a button is used so text is centered
|
|
if index > 8 then
|
|
formspec = formspec .. "button[7,4.7;1,.5;skins_page_"..(page+1)..";>>]"
|
|
else
|
|
formspec = formspec .. "button[7,4.7;1,.5;skins_page_"..page..";>>]"
|
|
end
|
|
return formspec
|
|
end
|
|
|
|
skins.pages = {}
|
|
|
|
|
|
minetest.register_on_joinplayer(function(player)
|
|
if not skins.skins[player:get_player_name()] then
|
|
skins.skins[player:get_player_name()] = skins.default()
|
|
end
|
|
skins.update_player_skin(player)
|
|
--inventory_plus.register_button(player,"skins","Skin")
|
|
end)
|
|
|
|
minetest.register_on_player_receive_fields(function(player,formname,fields)
|
|
if fields.skins then
|
|
inventory_plus.set_inventory_formspec(player,skins.formspec.main(player:get_player_name()))
|
|
end
|
|
if fields.skins_set_175 then
|
|
if player == nil then
|
|
return
|
|
end
|
|
local player_inv = player:get_inventory()
|
|
player_inv:set_size("knightskin", 1)
|
|
local artrew = player_inv:set_stack("knightskin", 1, "default:dirt")
|
|
end
|
|
if fields.skins_set_176 then
|
|
if player == nil then
|
|
return
|
|
end
|
|
local player_inv = player:get_inventory()
|
|
player_inv:set_size("knightskin", 1)
|
|
local artrew = player_inv:set_stack("knightskin", 1, "default:dirt 2")
|
|
end
|
|
if fields.skins_set_177 then
|
|
if player == nil then
|
|
return
|
|
end
|
|
local player_inv = player:get_inventory()
|
|
player_inv:set_size("knightskin", 1)
|
|
local artrew = player_inv:set_stack("knightskin", 1, "default:dirt 3")
|
|
end
|
|
if fields.skins_set_178 then
|
|
if player == nil then
|
|
return
|
|
end
|
|
local player_inv = player:get_inventory()
|
|
player_inv:set_size("knightskin", 1)
|
|
local artrew = player_inv:set_stack("knightskin", 1, "default:dirt 4")
|
|
end
|
|
if fields.skins_set_179 then
|
|
if player == nil then
|
|
return
|
|
end
|
|
local player_inv = player:get_inventory()
|
|
player_inv:set_size("knightskin", 1)
|
|
local artrew = player_inv:set_stack("knightskin", 1, "")
|
|
end
|
|
for field, _ in pairs(fields) do
|
|
if string.sub(field,0,string.len("skins_set_")) == "skins_set_" then
|
|
skins.skins[player:get_player_name()] = skins.list[tonumber(string.sub(field,string.len("skins_set_")+1))]
|
|
skins.update_player_skin(player)
|
|
inventory_plus.set_inventory_formspec(player,skins.formspec.main(player:get_player_name()))
|
|
end
|
|
if string.sub(field,0,string.len("skins_page_")) == "skins_page_" then
|
|
skins.pages[player:get_player_name()] = tonumber(string.sub(field,string.len("skins_page_")+1))
|
|
inventory_plus.set_inventory_formspec(player,skins.formspec.main(player:get_player_name()))
|
|
end
|
|
end
|
|
end)
|
|
|