334 lines
14 KiB
Lua
334 lines
14 KiB
Lua
--add an experience orb if player digs node from xp group
|
|
minetest.register_on_dignode(function(pos, oldnode, digger)
|
|
local namer = oldnode.name
|
|
local see_if_mineral = minetest.get_item_group(namer, "xp")
|
|
if see_if_mineral > 0 then
|
|
minetest.env:add_entity(pos, "experience:orb")
|
|
end
|
|
end)
|
|
--give a new player some xp
|
|
minetest.register_on_newplayer(function(player)
|
|
local file = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "w")
|
|
file:write("0")
|
|
file:close()
|
|
end)
|
|
--Allow people to collect orbs
|
|
minetest.register_globalstep(function(dtime)
|
|
for _,player in ipairs(minetest.get_connected_players()) do
|
|
local pos = player:getpos()
|
|
pos.y = pos.y+0.5
|
|
for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
|
|
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "experience:orb" then
|
|
--RIGHT HERE ADD IN THE CODE TO UPGRADE PLAYERS
|
|
object:setvelocity({x=0,y=0,z=0})
|
|
object:get_luaentity().name = "STOP"
|
|
minetest.sound_play("orb", {
|
|
to_player = player:get_player_name(),
|
|
})
|
|
xp = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "r")
|
|
experience = xp:read("*l")
|
|
xp:close()
|
|
if experience ~= nil then
|
|
new_xp = experience + 1
|
|
xp_write = io.open(minetest.get_worldpath().."/"..player:get_player_name().."_experience", "w")
|
|
xp_write:write(new_xp)
|
|
xp_write:close()
|
|
local player_inv = player:get_inventory()
|
|
local vv = 0
|
|
local h = 0
|
|
for i=1,100 do
|
|
local g = 0
|
|
local c = 0
|
|
if i < 6 then
|
|
g = i*1*10
|
|
elseif i < 11 then
|
|
g = 50+(i-5)*2*10
|
|
elseif i < 16 then
|
|
g = 150+(i-10)*3*10
|
|
elseif i < 21 then
|
|
g = 300+(i-15)*4*10
|
|
elseif i < 26 then
|
|
g = 500+(i-20)*5*10
|
|
elseif i < 31 then
|
|
g = 750+(i-25)*6*10
|
|
elseif i < 36 then
|
|
g = 1050+(i-30)*7*10
|
|
elseif i < 41 then
|
|
g = 1400+(i-35)*8*10
|
|
elseif i < 46 then
|
|
g = 1800+(i-40)*9*10
|
|
elseif i < 51 then
|
|
g = 2250+(i-45)*10*10
|
|
elseif i < 56 then
|
|
g = 2750+(i-50)*11*10
|
|
elseif i < 61 then
|
|
g = 3300+(i-55)*12*10
|
|
elseif i < 66 then
|
|
g = 3900+(i-60)*13*10
|
|
elseif i < 71 then
|
|
g = 4550+(i-65)*14*10
|
|
elseif i < 76 then
|
|
g = 5250+(i-70)*15*10
|
|
elseif i < 81 then
|
|
g = 6000+(i-75)*16*10
|
|
elseif i < 86 then
|
|
g = 6800+(i-80)*17*10
|
|
elseif i < 91 then
|
|
g = 7650+(i-85)*18*10
|
|
elseif i < 96 then
|
|
g = 8550+(i-90)*19*10
|
|
elseif i < 101 then
|
|
g = 9500+(i-95)*20*10
|
|
end
|
|
if i < 6 then
|
|
c = 1
|
|
elseif i < 11 then
|
|
c = 2
|
|
elseif i < 16 then
|
|
c = 3
|
|
elseif i < 21 then
|
|
c = 4
|
|
elseif i < 26 then
|
|
c = 5
|
|
elseif i < 31 then
|
|
c = 6
|
|
elseif i < 36 then
|
|
c = 7
|
|
elseif i < 41 then
|
|
c = 8
|
|
elseif i < 46 then
|
|
c = 9
|
|
elseif i < 51 then
|
|
c = 10
|
|
elseif i < 56 then
|
|
c = 11
|
|
elseif i < 61 then
|
|
c = 12
|
|
elseif i < 66 then
|
|
c = 13
|
|
elseif i < 71 then
|
|
c = 14
|
|
elseif i < 76 then
|
|
c = 15
|
|
elseif i < 81 then
|
|
c = 16
|
|
elseif i < 86 then
|
|
c = 17
|
|
elseif i < 91 then
|
|
c = 18
|
|
elseif i < 96 then
|
|
c = 19
|
|
elseif i < 101 then
|
|
c = 20
|
|
end
|
|
if (new_xp >= g) then
|
|
vv = i
|
|
end
|
|
if (new_xp >= 11950) then
|
|
vv = 101
|
|
end
|
|
if i == 100 then
|
|
local fi = 0
|
|
local se = 0
|
|
player_inv:set_size("exp", 1)
|
|
local coun = player_inv:get_stack("exp", 1):get_count()
|
|
for cou=1,coun do
|
|
if cou < 6 and cou > 0 then
|
|
fi = fi+1
|
|
elseif cou < 11 and cou > 0 then
|
|
fi = fi+2
|
|
elseif cou < 16 and cou > 0 then
|
|
fi = fi+3
|
|
elseif cou < 21 and cou > 0 then
|
|
fi = fi+4
|
|
elseif cou < 26 and cou > 0 then
|
|
fi = fi+5
|
|
elseif cou < 31 and cou > 0 then
|
|
fi = fi+6
|
|
elseif cou < 36 and cou > 0 then
|
|
fi = fi+7
|
|
elseif cou < 41 and cou > 0 then
|
|
fi = fi+8
|
|
elseif cou < 46 and cou > 0 then
|
|
fi = fi+9
|
|
elseif cou < 51 and cou > 0 then
|
|
fi = fi+10
|
|
elseif cou < 56 and cou > 0 then
|
|
fi = fi+11
|
|
elseif cou < 61 and cou > 0 then
|
|
fi = fi+12
|
|
elseif cou < 66 and cou > 0 then
|
|
fi = fi+13
|
|
elseif cou < 71 and cou > 0 then
|
|
fi = fi+14
|
|
elseif cou < 76 and cou > 0 then
|
|
fi = fi+15
|
|
elseif cou < 81 and cou > 0 then
|
|
fi = fi+16
|
|
elseif cou < 86 and cou > 0 then
|
|
fi = fi+17
|
|
elseif cou < 91 and cou > 0 then
|
|
fi = fi+18
|
|
elseif cou < 96 and cou > 0 then
|
|
fi = fi+19
|
|
elseif cou < 101 and cou > 0 then
|
|
fi = fi+20
|
|
end
|
|
end
|
|
for v=1,vv do
|
|
if v < 6 and v > 0 then
|
|
se = se+1
|
|
elseif v < 11 and v > 0 then
|
|
se = se+2
|
|
elseif v < 16 and v > 0 then
|
|
se = se+3
|
|
elseif v < 21 and v > 0 then
|
|
se = se+4
|
|
elseif v < 26 and v > 0 then
|
|
se = se+5
|
|
elseif v < 31 and v > 0 then
|
|
se = se+6
|
|
elseif v < 36 and v > 0 then
|
|
se = se+7
|
|
elseif v < 41 and v > 0 then
|
|
se = se+8
|
|
elseif v < 46 and v > 0 then
|
|
se = se+9
|
|
elseif v < 51 and v > 0 then
|
|
se = se+10
|
|
elseif v < 56 and v > 0 then
|
|
se = se+11
|
|
elseif v < 61 and v > 0 then
|
|
se = se+12
|
|
elseif v < 66 and v > 0 then
|
|
se = se+13
|
|
elseif v < 71 and v > 0 then
|
|
se = se+14
|
|
elseif v < 76 and v > 0 then
|
|
se = se+15
|
|
elseif v < 81 and v > 0 then
|
|
se = se+16
|
|
elseif v < 86 and v > 0 then
|
|
se = se+17
|
|
elseif v < 91 and v > 0 then
|
|
se = se+18
|
|
elseif v < 96 and v > 0 then
|
|
se = se+19
|
|
elseif v < 101 and v > 0 then
|
|
se = se+20
|
|
end
|
|
end
|
|
local en = se-fi
|
|
player_inv:set_size("xpi01", 15)
|
|
player_inv:add_item("xpi01", "tutorial:coin2 "..en)
|
|
if vv ~= 0 then
|
|
player_inv:set_stack("exp", 1, "default:dirt "..vv)
|
|
end
|
|
if new_xp >= 11950 and coun ~= 101 then
|
|
player_inv:set_size("xpi01", 15)
|
|
player_inv:add_item("xpi01", "tutorial:coin2 145")
|
|
minetest.sound_play("level_up", {
|
|
to_player = player:get_player_name(),
|
|
})
|
|
end
|
|
end
|
|
if new_xp == g then
|
|
player_inv:set_size("xpi01", 15)
|
|
player_inv:add_item("xpi01", "tutorial:coin "..c)
|
|
player_inv:set_size("xpi1", 100)
|
|
player_inv:set_stack("xpi1", i, "tutorial:level"..i.." 1")
|
|
minetest.sound_play("level_up", {
|
|
to_player = player:get_player_name(),
|
|
})
|
|
end
|
|
end
|
|
if new_xp == 2750 then
|
|
player_inv:set_size("xpi01", 15)
|
|
player_inv:add_item("xpi01", "tutorial:level_schluessel 1")
|
|
minetest.sound_play("level_up", {
|
|
to_player = player:get_player_name(),
|
|
})
|
|
end
|
|
if new_xp == 10500 then
|
|
player_inv:set_size("xpi01", 15)
|
|
player_inv:add_item("xpi01", "tutorial:lilabattleaxe")
|
|
minetest.sound_play("level_up", {
|
|
to_player = player:get_player_name(),
|
|
})
|
|
end
|
|
if new_xp == 11950 then
|
|
player_inv:set_size("xpi01", 15)
|
|
player_inv:add_item("xpi01", "tutorial:coin 145")
|
|
player_inv:add_item("xpi01", "tutorial:levelMAX")
|
|
minetest.sound_play("level_up", {
|
|
to_player = player:get_player_name(),
|
|
})
|
|
end
|
|
end
|
|
object:remove()
|
|
end
|
|
end
|
|
for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 3)) do
|
|
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "experience:orb" then
|
|
if object:get_luaentity().collect then
|
|
local pos1 = pos
|
|
pos1.y = pos1.y+0.2
|
|
local pos2 = object:getpos()
|
|
local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
|
|
vec.x = vec.x*3
|
|
vec.y = vec.y*3
|
|
vec.z = vec.z*3
|
|
object:setvelocity(vec)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
minetest.register_entity("experience:orb", {
|
|
physical = true,
|
|
timer = 0,
|
|
textures = {"orb.png"},
|
|
visual_size = {x=0.3, y=0.3},
|
|
collisionbox = {-0.17,-0.17,-0.17,0.17,0.17,0.17},
|
|
on_activate = function(self, staticdata)
|
|
self.object:set_armor_groups({immortal=1})
|
|
self.object:setvelocity({x=0, y=1, z=0})
|
|
self.object:setacceleration({x=0, y=-10, z=0})
|
|
end,
|
|
collect = true,
|
|
on_step = function(self, dtime)
|
|
self.timer = self.timer + dtime
|
|
if (self.timer > 300) then
|
|
self.object:remove()
|
|
end
|
|
local p = self.object:getpos()
|
|
if p == nil then
|
|
return
|
|
end
|
|
local nn = minetest.env:get_node(p).name
|
|
noder = minetest.env:get_node(p).name
|
|
p.y = p.y - 0.3
|
|
local nn = minetest.env:get_node(p).name
|
|
if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable then
|
|
if self.physical_state then
|
|
self.object:setvelocity({x=0, y=0, z=0})
|
|
self.object:setacceleration({x=0, y=0, z=0})
|
|
self.physical_state = false
|
|
self.object:set_properties({
|
|
physical = false
|
|
})
|
|
end
|
|
else
|
|
if not self.physical_state then
|
|
self.object:setvelocity({x=0,y=0,z=0})
|
|
self.object:setacceleration({x=0, y=-10, z=0})
|
|
self.physical_state = true
|
|
self.object:set_properties({
|
|
physical = true
|
|
})
|
|
end
|
|
end
|
|
end,
|
|
})
|