xaenvironment/mods/player_style/skins.lua

371 lines
16 KiB
Lua

player_style.skins = {
skins={
{name="ASDASD",skin="character.png",cost=0,info="Default character, random made npc from aliveai",origin="Aliveai"},
{name="Dacy",skin="player_style_dacy.png",cost=0,info="Another default character, random made npc from aliveai",origin="Aliveai"},
{name="Villager",skin="examobs_villager.png",cost=100,info="Just another fool",origin="XaEnvironment"},
{name="Spacesuit",skin="spacestuff_spacesuit2.png",cost=200,info="Suit used to protect against non breathable areas",origin="Marssurvive"},
{name="Jamie",skin="player_style_jamie.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Rainybowie",skin="player_style_rainybowie.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Hej",skin="player_style_hej.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="James",skin="player_style_james.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Danny",skin="player_style_danny.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Jack",skin="player_style_jack.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Bugy",skin="player_style_bugy.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Litle boy",skin="player_style_litleboy.png",cost=200,info="Litle boy npc from aliveai",origin="Aliveai"},
{name="Litle girl",skin="player_style_litlegirl.png",cost=200,info="Litle girl npc from aliveai",origin="Aliveai"},
{name="Military",skin="player_style_military.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Sneaky",skin="player_style_sneaky.png",cost=200,info="Light shade stealing npc from aliveai",origin="Aliveai"},
{name="Stubborn",skin="player_style_stubborn.png",cost=200,info="Stubborn half npc from aliveai",origin="Aliveai"},
{name="Admin",skin="player_style_admin.png",cost=200,info="Admin npc from aliveai",origin="Aliveai"},
{name="Old Dan",skin="player_style_old_dan.png",cost=200,info="Random npc from aliveai",origin="Aliveai"},
{name="Trader",skin="player_style_trader.png",cost=200,info="Trader npc from aliveai",origin="Aliveai"},
{name="Clown",skin="player_style_clown.png",cost=200,info="The juggling clown npc from aliveai",origin="Aliveai"},
{name="Sporty",skin="player_style_sporty.png",cost=200,info="",origin="Aliveai"},
{name="Dum",skin="player_style_dum.png",cost=200,info="Alone survival npc",origin="Aliveai"},
{name="Jezy",skin="player_style_jezy.png",cost=200,info="Alone survival npc",origin="Aliveai"},
{name="Tomato NPC",skin="examobs_tomato_npc.png",cost=500,info="Tomato farmer that is farming its own family",origin="XaEnvironment"},
{name="Underground npc",skin="examobs_underground_npc.png",cost=300,info="An underground living thing",origin="XaEnvironment"},
{name="Diplazer bot",skin="player_style_diplazerbot.png",cost=200,info="The diplazer service bot",origin="diplazer"},
{name="Terminator",skin="examobs_terminator.png",cost=2000,info="Destruction machine",origin="Aliveai"},
{name="Bronze terminator",skin="player_style_terminator_bronze.png",cost=200,info="Murder machine",origin="Aliveai"},
{name="Eletric terminator",skin="player_style_eletric_terminator.png",cost=200,info="War machine",origin="Aliveai"},
{name="Fast eleltric Terminator",skin="player_style_eletric_terminator.png^[colorize:#00ff0033",cost=200,info="War machine",origin="Aliveai"},
{name="Lightning terminator",skin="player_style_eletric_terminator.png^[colorize:#fa7fff44",cost=200,info="War machine",origin="Aliveai"},
{name="Gassman",skin="examobs_gassman.png",cost=500,info="High explosive machine",origin="Pollution"},
{name="Acid axov",skin="examobs_gassman.png^[colorize:#00dd00cc",cost=500,info="Acid machine",origin="Pollution"},
{name="Uranium axov",skin="examobs_gassman.png^[colorize:#aaff00aa",cost=500,info="Uranium machine",origin="Pollution"},
{name="Crystal axov",skin="player_style_pollutioncrystal.png",cost=500,info="Crystal machine",origin="Pollution"},
{name="Ice axov",skin="player_style_pollutionice.png",cost=500,info="Nitrogen machine",origin="Pollution"},
{name="Acidman",skin="player_style_acidman.png",cost=200,info="Acid machine",origin="Aliveai"},
{name="Negative gassman",skin="player_style_negativegassman.png",cost=200,info="Came to life through a dream",origin="Aliveai"},
{name="Uranium",skin="player_style_uranium.png",cost=1000,info="Massdestruction machine",origin="Aliveai"},
{name="Nuker",skin="player_style_nuker.png",cost=200,info="Massdestruction machine",origin="Aliveai"},
{name="Blackhole bot",skin="player_style_blackholebot.png",cost=200,info="Massdestruction machine",origin="Aliveai"},
{name="Nitrogen bomb",skin="player_style_nitrogenbomb.png",cost=200,info="Nitrogen bomb",origin="Aliveai"},
{name="Nitrogen",skin="player_style_nitrogen.png",cost=200,info="Nitrogen monster",origin="Aliveai"},
{name="Air monster",skin="examobs_airmonster.png",cost=2000,info="Odd phenomenon",origin="XaEnvironment"},
{name="Mummy",skin="pyramids_mummy.png",cost=1000,info="Living in ancient pyramids civilizations",origin="Aliveai"},
{name="Slime",skin="player_style_slime.png",cost=400,info="Slime monster",origin="Aliveai"},
{name="Pull",skin="player_style_pull.png",cost=400,info="Pull monster",origin="Aliveai"},
{name="Storm",skin="player_style_storm.png",cost=500,info="Storm",origin="Aliveai"},
{name="Ninja",skin="player_style_ninja.png",cost=500,info="Invisible ninja",origin="Aliveai"},
{name="UjE",skin="player_style_uje.png",cost=1000,info="AiTechEye's first skin for minetest"},
{name="Quantum",skin="player_style_quantum_monster.png",cost=1000,info="Teleporting monster\nRight click to random teleport yourself",origin="Aliveai",
on_step=function(self,player,dtime)
self.timer = self.timer + dtime
if self.timer > 0.1 then
self.timer = 0
local p=apos(player:get_pos(),0,1)
minetest.add_particlespawner({
amount = 20,
time =1,
minpos = {x=p.x+1,y=p.y+1,z=p.z+1},
maxpos = {x=p.x-1,y=p.y-1,z=p.z-1},
minvel = {x=0, y=0, z=0},
maxvel = {x=0, y=0, z=0},
minacc = {x=0, y=0, z=0},
maxacc = {x=0, y=0, z=0},
minexptime = 0.5,
maxexptime = 1,
minsize = 0.4,
maxsize = 0.8,
glow=13,
texture = "player_style_quantum_monster_lights.png",
})
end
end,
on_stop_using=function(self,player)
default.hand_on_secondary_use[player:get_player_name().."-Quantum-skin"] = nil
end,
on_use_join=function(self,player)
self.timer = 0
default.hand_on_secondary_use[player:get_player_name().."-Quantum-skin"] = function(itemstack,user,pointed_thing)
local pos = vector.round(user:get_pos())
local name = user:get_player_name()
local a = {}
for i=0,100 do
local pos2 = apos(pos,math.random(-15,15),math.random(-15,15),math.random(-15,15))
if (default.defpos(pos2,"walkable") or ((default.defpos(pos2,"liquid_viscosity") or 0)) > 0) and not default.defpos(apos(pos2,0,1),"walkable") and not default.defpos(apos(pos2,0,2),"walkable") and not minetest.is_protected(pos2,name) then
user:set_pos(apos(pos2,0,1))
player_style.hunger(player,-1)
return
end
end
end
end,
},
{name="Snowman",skin="player_style_snowman.png",cost=1000,info="Just a snowman\nIt thrive in snow\nRight click to throw snowballs",origin="XaEnvironment",
on_stop_using=function(self,player)
default.hand_on_secondary_use[player:get_player_name().."-Snowman-skin"] = nil
if self.hat and self.hat:get_luaentity() then
self.hat:remove()
end
end,
on_use_join=function(self,player)
self.timer = 0
minetest.after(0,function(self,player)
self.hat = minetest.add_entity(player:get_pos(),"default:wielditem")
self.hat:set_attach(player, "head",{x=0, y=7, z=0}, {x=0, y=0,z=0})
self.hat:set_properties({textures={"examobs:hat"},visual_size = {x=0.5,y=0.5,z=0.5}})
end,self,player)
default.hand_on_secondary_use[player:get_player_name().."-Snowman-skin"] = function(itemstack,user,pointed_thing)
local item = ItemStack({
name="default:bow_wood_loaded",
metadata=minetest.serialize({arrow="examobs:arrow_snowball",shots=1})
})
bows.shoot(item, user,nil,function(item)
item:remove()
end)
player_style.thirst(user,-0.1)
end
end,
on_step=function(self,player,dtime)
self.timer = self.timer + dtime
if self.timer > 1 then
self.timer = 0
local pos = player:get_pos()
if minetest.get_item_group(minetest.get_node(apos(pos,0,-1)).name,"snowy") > 0 then
player_style.hunger(player,1)
player_style.thirst(player,1)
player:set_hp(player:get_hp()+1)
else
player_style.hunger(player,-0,1)
player_style.thirst(player,-0.1)
end
end
end,
},
{name="Slimy",skin="player_style_alienslimy.png",cost=200,info="Alien from mars",origin="Marssurvive"},
{name="Glitch",skin="player_style_alienglitch.png",cost=200,info="Alien from mars",origin="Marssurvive",
on_step=function(self,player,dtime)
self.timer = self.timer + dtime
if self.timer > 0.5 then
self.timer = math.random(0,10)*0.05
local rgb = math.random(0,10)
player_style.update_player_skin(player,"player_style_alienglitch.png^[transform"..self.t[math.random(1,8)]..(rgb > 0 and "^[invert:"..self.r[rgb] or ""))
end
end,
on_use_join=function(self,player)
self.timer = 0
self.t = {"I","R90","R180","R270","FX","FXR90","FY","FYR90"}
self.r = {"r","g","b","a","rb","gr","gb","br","bg","rgb"}
end,
},
{name="Alien1",skin="player_style_alien1.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien2",skin="player_style_alien2.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien3",skin="player_style_alien3.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien4",skin="player_style_alien4.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien5",skin="player_style_alien5.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien6",skin="player_style_alien6.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien7",skin="player_style_alien7.png",cost=200,info="Alien from space",origin="Aliveai"},
{name="Alien8",skin="player_style_alien8.png",cost=200,info="Alien from space",origin="Aliveai"},
},
}
player_style.register_button({
name="Skins",
image="character.png",
type="image",
info="Change or buy skins",
action=function(player)
player_style.skins.store(player)
end
})
player_style.register_skin=function(def)
if not def.name then
minetest.log("warning","Register skin is unamed")
return
elseif not def.skin then
minetest.log("warning","Register skin"..def.name.." skin is missing skin texture")
return
end
def.cost = def.cost or 0
def.info = def.info or ""
def.origin = def.origin or minetest.get_current_modname()
table.insert(player_style.skins.skins,def)
end
player_style.get_player_skin=function(player)
local skin = player:get_meta():get_string("skin")
return skin ~= "" and skin or "charcacter.png"
end
player_style.get_current_player_skin=function(player)
return player:get_properties().textures[1]
end
player_style.add_player_skin=function(player,texture,level)
if texture == "" then
return
end
local skin = player:get_meta():get_string("skin")
local p = player_style.players[player:get_player_name()].skin
p[level] = p[level] or {}
table.insert(p[level],texture)
for i,v in pairs(p) do
for i2,v2 in ipairs(v) do
skin = skin .."^"..v2
end
end
local textures = player:get_properties().textures
textures[1] = skin
player:set_properties({textures=textures})
player_style.inventory(player)
end
player_style.remove_player_skin=function(player,texture,level)
if texture == "" then
return
end
local skin = player:get_meta():get_string("skin")
local p = player_style.players[player:get_player_name()].skin
if p[level] then
for i,v in pairs(p) do
for i2,v2 in pairs(v) do
if v2 == texture then
p[level][i2] = nil
else
skin = skin .."^"..v2
end
end
end
end
local textures = player:get_properties().textures
textures[1] = skin
player:set_properties({textures=textures})
player_style.inventory(player)
end
player_style.update_player_skin=function(player,newskin)
local skin = newskin or player:get_meta():get_string("skin")
local p = player_style.players[player:get_player_name()].skin
for i,v in pairs(p) do
for i2,v2 in ipairs(v) do
skin = skin .."^"..v2
end
end
local textures = player:get_properties().textures
textures[1] = skin
player:set_properties({textures=textures})
player_style.inventory(player)
end
player_style.skins.store=function(player,scroll)
local text = ""
local m = player:get_meta()
local skin = m:get_string("skin")
local own = minetest.deserialize(m:get_string("skins")) or {}
local y = 0
local achskins = m:get_int("exaachievements_artist")
if achskins == 0 then
for i,v in pairs(own) do
achskins = achskins +1
end
m:set_int("exaachievements_artist",achskins-1)
exaachievements.customize(player,"artist")
end
for i,v in ipairs(player_style.skins.skins) do
local functional = (v.on_step or v.on_use or v.on_join or v.on_stop_using or v.on_use_join)
text = text
.."label[2,"..y..";"..v.name..(v.origin and (" - " ..v.origin) or "").."]"
.."label[2,"..y..";"..v.name..(v.origin and (" - " ..v.origin) or "").."]"
..(functional and "box[2,"..(y+0.5)..";2.1,0.5;#222]label[2,"..(y+0.5)..";"..minetest.colorize("#0f0","Functional skin").."]" or "")
..(functional and "textarea[2.3,"..(y+1)..";5.7,2.3;;;"..v.info.."]" or "textarea[2.3,"..(y+0.5)..";5.7,2.5;;;"..v.info.."]")
.."model[-0.5,"..y..";2,3;preskin;character.b3d;"..v.skin..";0,180;false;true;1,31]"
.."box[2,"..(y+2.8)..";5.5,0.2;#222]"
if skin == v.skin then
elseif own[v.name] then
text = text .."button[1.2,"..y..";1,1;skinuse="..i..";Use]"
else
text = text .."image_button[1.2,"..y..";1,1;player_style_coin.png;skinbuy="..i..";"..(v.cost > 0 and v.cost or "Free").."]"
end
y = y +3
end
return minetest.show_formspec(player:get_player_name(), "player_style_skins",
"size[8,8]"
.."listcolors[#77777777;#777777aa;#000000ff]"
.."label[6,-0.35;"..minetest.colorize("#FFFF00",Getcoin(player)).."]"
.."scrollbaroptions[max="..((#player_style.skins.skins-3)*36)..";]"
.."scrollbar[7.5,0;0.5,8;vertical;scrollbar;"..(scroll or 0).."]"
.."scroll_container[0,0;9.7,10;scrollbar;vertical]"
..text
.."scroll_container_end[scrollbar]"
)
end
minetest.register_on_player_receive_fields(function(player, form, pressed)
if form == "player_style_skins" then
local name = player:get_player_name()
if pressed.quit then
return
end
for i,v in pairs(pressed) do
local index = i:sub(1,8)
if index == "skinbuy=" then
local m = player:get_meta()
local v = player_style.skins.skins[tonumber(i:sub(9,-1))]
if Getcoin(player) >= v.cost then
local own = minetest.deserialize(m:get_string("skins")) or {}
own[v.name] = true
m:set_string("skins", minetest.serialize(own))
Coin(player,-v.cost)
index = "skinuse="
exaachievements.customize(player,"artist")
end
end
if index == "skinuse=" then
local m = player:get_meta()
local textures = player:get_properties().textures
local skin = m:get_string("skin")
local v = player_style.skins.skins[tonumber(i:sub(9,-1))]
textures[1] = v.skin
player:set_properties({textures=textures})
m:set_string("skin",v.skin)
local scbv = minetest.explode_scrollbar_event(pressed.scrollbar).value or 0
player_style.update_player_skin(player)
player_style.skins.store(player,scbv)
local p = player_style.players[name]
for i,v in ipairs(player_style.skins.skins) do
if v.skin == skin then
if v.on_stop_using then
v.on_stop_using(p.skin_self,player)
end
break
end
end
p.skin_self = {}
if v.on_use then
v.on_use(p.skin_self,player)
end
if v.on_use_join then
v.on_use_join(p.skin_self,player)
end
if v.on_step then
p.on_step_skin=v.on_step
else
p.on_step_skin = nil
end
break
end
end
end
end)
minetest.register_on_newplayer(function(player)
player:get_meta():set_string("skin","character.png")
end)