2018-06-27 09:07:46 -07:00
-- 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
2020-02-07 08:53:16 -08:00
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
2018-06-27 09:07:46 -07:00
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 )