From a8b9a3784283dc0829b233e0ac0e8383a3436e56 Mon Sep 17 00:00:00 2001 From: Zeg9 Date: Mon, 17 Dec 2012 19:21:20 +0100 Subject: [PATCH] Initial commit --- modpack.txt | 0 skins/depends.txt | 1 + skins/init.lua | 112 +++++++++++++++++++++++++++++++ skins/skinlist.lua | 22 ++++++ skins/textures/character_1.png | Bin 0 -> 2055 bytes skins/textures/character_2.png | Bin 0 -> 2648 bytes skins/textures/player_1.png | Bin 0 -> 212 bytes skins/textures/player_1_back.png | Bin 0 -> 201 bytes skins/textures/player_2.png | Bin 0 -> 471 bytes skins/textures/player_2_back.png | Bin 0 -> 416 bytes 10 files changed, 135 insertions(+) create mode 100644 modpack.txt create mode 100644 skins/depends.txt create mode 100644 skins/init.lua create mode 100644 skins/skinlist.lua create mode 100644 skins/textures/character_1.png create mode 100644 skins/textures/character_2.png create mode 100644 skins/textures/player_1.png create mode 100644 skins/textures/player_1_back.png create mode 100644 skins/textures/player_2.png create mode 100644 skins/textures/player_2_back.png diff --git a/modpack.txt b/modpack.txt new file mode 100644 index 0000000..e69de29 diff --git a/skins/depends.txt b/skins/depends.txt new file mode 100644 index 0000000..eb98431 --- /dev/null +++ b/skins/depends.txt @@ -0,0 +1 @@ +inventory_plus diff --git a/skins/init.lua b/skins/init.lua new file mode 100644 index 0000000..d09083a --- /dev/null +++ b/skins/init.lua @@ -0,0 +1,112 @@ +-- 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" +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 + +dofile(minetest.get_modpath("skins").."/skinlist.lua") + +skins.update_player_skin = function(player) + 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 +end + +skins.formspec = {} +skins.formspec.main = function(name, page) + if page == nil then page = 0 end + local formspec = "size[8,7.5]" + .. "button[0,0;2,.5;main;Back]" + .. "label[0,.5;Your current skin:]" + .. "label[0,1.5;Choose a skin below:]" + if skins.get_type(skins.skins[name]) == skins.type.MODEL then + formspec = formspec .. "image[3,.5;2,1;"..skins.skins[name]..".png]" + elseif skins.get_type(skins.skins[name]) == skins.type.SPRITE then + formspec = formspec .. "image[3,0;1,2;"..skins.skins[name]..".png]" + formspec = formspec .. "image[4,0;1,2;"..skins.skins[name].."_back.png]" + end + local imodel = 0 + local isprite = 0 + local smodel = 0 -- Skip models, used for pages + local ssprite = 0 -- Skip sprites, used for pages (page handling needs cleanup) + for i, skin in ipairs(skins.list) do + if skins.get_type(skin) == skins.type.MODEL and imodel < 8 then + if smodel < page then smodel = smodel + 1 else + if imodel < 4 then + formspec = formspec .. "image_button["..(imodel*2)..",2;2,1;"..skin..".png;skins_set_"..i..";]" + else + formspec = formspec .. "image_button["..((imodel-4)*2)..",3;2,1;"..skin..".png;skins_set_"..i..";]" + end + imodel = imodel +1 + end + end + if skins.get_type(skin) == skins.type.SPRITE and isprite < 8 then + if ssprite < page then ssprite = ssprite + 1 else + formspec = formspec .. "image_button["..(isprite)..",4.5;1,2;"..skin..".png;skins_set_"..i..";]" + isprite = isprite +1 + end + end + end + if page > 0 then + formspec = formspec .. "button[0,7;1,.5;skins_page_"..(page-1)..";<<]" + end + formspec = formspec .. "label[3,6.5;Page "..page.."]" + if imodel > 8 or isprite > 8 then + formspec = formspec .. "button[7,7;1,.5;skins_page_"..(page+1)..";>>]" + end + return formspec +end + + +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 + 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 + inventory_plus.set_inventory_formspec(player,skins.formspec.main(player:get_player_name(),tonumber(string.sub(field,string.len("skins_page_")+1)))) + end + end +end) + diff --git a/skins/skinlist.lua b/skins/skinlist.lua new file mode 100644 index 0000000..4d1f7a6 --- /dev/null +++ b/skins/skinlist.lua @@ -0,0 +1,22 @@ +-- Skins mod for minetest +-- Adds a skin gallery to the inventory, using inventory_plus +-- Released by Zeg9 under WTFPL +-- Have fun ! + +skins.list = {} +skins.add = function(skin) + table.insert(skins.list,skin) +end + +id = 1 +while io.open(minetest.get_modpath("skins").."/textures/player_"..id..".png") do + skins.add("player_"..id) + id = id +1 +end + +id = 1 +while io.open(minetest.get_modpath("skins").."/textures/character_"..id..".png") do + skins.add("character_"..id) + id = id +1 +end + diff --git a/skins/textures/character_1.png b/skins/textures/character_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0dd9915193a88b7203098ef30231a163db0ef2 GIT binary patch literal 2055 zcmV+i2>ADjP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBU(VM#eFBqF03Htj3oBQ+n z%|P_;dS8DqDR*qpce6jpibR5IeK&)=abtqxy?@=>zqsp0l3vO4aW3VaFxFeJ=Wut=I1z#RTvp{h8$cc+2#;kvA3w5Pg+`WzGS{@(=-N{N4q_at(-%80MquDrAY8qCD#%ij3jz5jTnoa%`Tp zG{1>5yaHe5Met{W8w3#Pd0A2%z{&9d<>iaD5ep!P=a`2qde#vy7?UP(9dj2Yff|Bm zYRd{Nee!+W%P>6u_PiV~j`aZq0Dxm9$Y2gdKnj+1wE!gW93V_7dd+hHM={(-DUbjm zG*rQUWE9jyt>Ayd46ootcqyzOn;Zh>#hfLb8#wv)9BemV$AV5BJcm0#5<~))!s#I; zk$oWss{@>S%)5Y^VR-)S3ssuP6U#Yk0tRdG@wl31ZjG@>F+> z`JC6(2T-1Y0LFkbiK~?XPTT-Iv8J*xS01UEqT^gs0rP$nWq1V=Cy1Hl67nUj0rvd9 zR=J`n4Hb~ndyjO=IVFI~5Afal+pKpk#Nj9e9cGjeWav(iLqqy5E{qBVAayM70u==f z)!jw4JOvE|^c-l{+`d~*f3V)#B_#kCfDG19@)8eF0qOyy1MUhbTm_||5Z1X2l41M$ zw|9k5VUr$=-VK6i)mDjB?~rKKCW*y&N_~C3EM2-(8X6j8)v8su9c|MUQInq!goZk3 zs0BA_IFL1@HdtW>8urmOwio>wHP%;~R?8`^M!(*?+WUT~``>XIj8$(}@LQ!M-eUcN z1q)=^vSqSj#R?1JEMK)v z!Ee#FS?0}~X9O%+vPA0Y>bzgz2nf#yZDxJ4$Vd^8s(_Q*pEWo9Lcvpp`wZkIAXeR^ z1iUTLN+m*F!2!n&7A{=q{Q^e-mcc5$iA*w51SHF!J-^@fw5j0p#wRQ;4V!>yCHkDT!tz(u_gfP|P~$*NyO9viH7CX`;eAyI^H`y7R~X=u`-j&>tY*L!9{)Z4 znsm<&wBOy%dkFw^!L&!MF~;vp;%ycH0Z&l;Cos0#J&3Vhv&3K)D>)npZ8%mP&e{=C z06q_J8bA%aS{EY1Y!F&Mw7ROHrXz99T+@IGa289aj=`*Xx0W90Ij;f?sK$Y)20o&{ zv$*Ra#KvlE)-oPo5fLRp_llE*38DR#% z%2b5bTi|1yTq$n;KPUj}x=61+ZgBt-RPu>pC=7f}iJ+*d(E{Wa3z$Bi{I?1ql~PmC zQ|VFc@Y@7u0OmQoUHEu|bbs`g^z3PrQ}3_4^*;$J(ILcu9hT0B_Rh~;76=2N%3fV0 zbOCJ^3?VIahfK$SbgzFHm7~b7^*EFGzK5VQ$;(T^NUusZRg^ literal 0 HcmV?d00001 diff --git a/skins/textures/character_2.png b/skins/textures/character_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5b69ab0e3634eea2e8cad6d5f0db57e1de63ba GIT binary patch literal 2648 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 JWt~$(698}dQLF#} literal 0 HcmV?d00001 diff --git a/skins/textures/player_1_back.png b/skins/textures/player_1_back.png new file mode 100644 index 0000000000000000000000000000000000000000..530aa7519b95a650ce4fea2612b2dced58becdbc GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qd`Cc-ajG_-G*GbG z)5S5wqx0?5yL=4_9IgE4*q@($xy+Q?CCN0mJK9pdzU#p1V*&<8iZv4hj=z}Jv2{Q1 zhfDh$R#+Bfzdh&`wZ_O|@?q5@%O2dQaj4^}*4I$YQ}|r{f%zJ7 x;mg(Eu-fW+wwqS6JGO6UQ3g7L!PC{xWt~$(698t?OI!c| literal 0 HcmV?d00001 diff --git a/skins/textures/player_2.png b/skins/textures/player_2.png new file mode 100644 index 0000000000000000000000000000000000000000..845ca18d7daf38b99093f28d3583fa5000e27933 GIT binary patch literal 471 zcmV;|0Vw{7P)5;0W42IBw#0c1%; zK~zY`%~U;0#6S>z6AmpbP6J}AKR_f32ijg0tt_nk0Tyys=GwHT6$^iWHWpSIQ0xRf z!P~+g;2%&?1iND_@?mx}A<4z!rrNx`_jYz>c7cXL5_q&tEa8J|&hf1xvDX`=Sh6lM z&KYp1*uI}-4wbf+46Guf_wPq>U0ee{lf{#qs@EGW($IO!YFegPJNN5D^s%yu;CLMX zW}0=O!(?t|6%matj0YX2(mCKzF|Hh7N68h7|B>rZE&~n~YeY#baH*0w8=36Lb;xRZ z7j%Oche{O&r*;PPQ*o3hJ3`IiQ2loXtE#p^%bd#P^XC-UKezw@oSp9dvHBYcmrVm+ zaBrz?cT+$U8pn?ZDKem8)Z2Lk8td!hjsT!-cRBk8kT2W?DL#F#Vh#KWTj1+8s3n|^ zNt_M??QREKz}ynjo*%A(f*S+7)HP`rPIkdnc1(DQkrjib?GlUt0Kavce!FD+*rEUc N002ovPDHLkV1h^4z0?2z literal 0 HcmV?d00001 diff --git a/skins/textures/player_2_back.png b/skins/textures/player_2_back.png new file mode 100644 index 0000000000000000000000000000000000000000..4abc788d17e72b9f2d7ddb8393c88e7bdc1654d0 GIT binary patch literal 416 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9F5M?jcysy3fAP>{XE)7O>#4mT5zDEHkS&uI({jJlpKjv*e$lM@yQ7$gb5`I7Xf z-*->V?RvK+wg;DbP7A1c?LFYK*C4~;(=p9A_cTu1s-LR3^nrJioLb3Q76$2E4BTPN zdkQSRFL`KOvNhuHf;(^QlOx|*rY!%jYySJZhk@*$`*r{94~IE(9RF>z%1fot&EMIL zhxuQ={eO8^MLh;ni8K!3t~4PAAO5Mrmr|YGnyfBdnec|`Sbm7#DG|vJ^}j2#b~}8x zImxzR!E&$G)bx+9PZ+nYJnF&zpVhWp_-$=QR?Citk18s8tP;BdLTYQaPoLNb1o0<+ z+80S4xY6LjUBUd(*;#U8;su8^5t9XMN}f{e{wr-}ykcczYtz$aW6LXKtC*Ai+Ss7% zt&?zc|0;Gl?qFug4y|hmuM*e{9a%Zu#KoE=K!Bm8EF`AQQI;JTmJFV*elF{r5}E)L C{h4e4 literal 0 HcmV?d00001