minetest-game-adventuretest/mods/adventuretest/register_functions.lua

162 lines
4.4 KiB
Lua

-- Only register one global step for this game and just call the respective globalstep functions
-- from within this function, preliminary testing shows that registering one globalstep and calling
-- all of your global step functions from there could slightly improve performance
-- having all dig node code in one function seemed to have the most improvement over calling several dignode
-- functions
local function adventuretest_globalstep(dtime)
adventuretest.player_loop(dtime)
default.leaf_globalstep(dtime)
if blacksmith_globalstep ~= nil then
blacksmith_globalstep(dtime)
end
if mobs ~= nil then
mobs.global_step(dtime)
end
abm_globalstep(dtime)
--ambience_globalstep(dtime)
end
minetest.register_globalstep(adventuretest_globalstep)
local function adventuretest_die_player(player)
local name = player:get_player_name()
if default.attached_to_player[name] ~= nil then
local a = default.attached_to_player[name]
a.object:set_detach()
default.attached_to_player[name] = nil
if a.name == "npc:kid_lost" then
a.random_freq = 15
end
end
bones_on_dieplayer(player)
skills_on_dieplayer(player)
hunger.update_hunger(player, 20)
affects.player_died(player)
player:set_hp(20)
if sethome_respawnplayer(player) == false then
mg_villages.spawnplayer(player)
end
energy.respawnplayer(player)
pd.increment(name,STAT_DIED,1)
return true
end
minetest.register_on_dieplayer(adventuretest_die_player)
local function adventuretest_dignode(pos, node, digger)
--print("on_dignode")
-- going to try to consolidate all on_dignode calls here so there is only one function call
-- ON DIG NODE FOR MONEY MOD
for k,v in pairs(money.convert_items) do
if ( node.name == money.convert_items[k].dig_block ) then
money.stats[k].running_dug = money.stats[k].running_dug + 1
end
end
-- EXPERIENCE
if minetest.registered_nodes[node.name] ~= nil then
if minetest.registered_nodes[node.name]["skill"] ~= nil then
default.drop_item(pos,"experience:1_exp")
end
end
-- ENERGY
if digger ~= nil and digger ~= "" then
local name= digger:get_player_name()
pd.increment(name,"energy",-0.05)
pd.increment(name,STAT_DUG,1)
local dug = pd.get(name,STAT_DUG)
if dug % 100 == 0 then
local ppos = digger:getpos()
-- every 100 give them some experience
local base = 1
local bonus = dug / 1800
local decelerator = 2500
local exp = base + bonus - math.floor(dug / decelerator)
local e = experience.exp_to_items(exp)
for _,item in pairs(e) do
default.drop_item(ppos,item)
end
end
end
hunger.handle_node_actions(pos, node, digger)
end
minetest.register_on_dignode(adventuretest_dignode)
local function adventuretest_placenode(pos, node, placer)
hunger.handle_node_actions(pos,node,placer)
if placer:is_player() then
local name = placer:get_player_name()
pd.increment(name,STAT_PLACED,1)
local placed = pd.get(name,STAT_PLACED)
if placed % 100 == 0 then
local ppos = placer:getpos()
-- every 100 give them some experience
local base = 1
local bonus = placed / 1800
local decelerator = 2500
local exp = base + bonus - math.floor(placed / decelerator)
local e = experience.exp_to_items(exp)
for _,item in pairs(e) do
default.drop_item(ppos,item)
end
end
end
end
minetest.register_on_placenode(adventuretest_placenode)
local function on_generated(minp,maxp,seed)
mg_villages.on_generated(minp,maxp,seed)
quests.treasure.on_generated(minp,maxp)
end
minetest.register_on_generated(on_generated)
local function on_join(player)
pd.load_player(player:get_player_name())
if minetest.setting_getbool("enable_damage") then
hunger_join_player(player)
end
end
minetest.register_on_joinplayer(on_join)
local function on_leave(player)
local name = player:get_player_name()
pd.unload_player(name)
end
minetest.register_on_leaveplayer(on_leave)
local function on_new(player)
local name = player:get_player_name()
pd.load_player(name)
-- set some defaults
pd.set(name,"energy",20)
pd.set(name,"stamina",0)
pd.set(name,"mana",20)
pd.set(name,"hunger_lvl",20)
pd.set(name,"hunger_exhaus",0)
pd.set(name,"speed",1)
pd.set(name,"jump",1)
pd.set(name,"gravity",1)
pd.set(name,"level", {level=1,exp=0})
skills.set_default_skills(name)
pd.save_player(name)
mg_villages.on_newplayer(player)
end
minetest.register_on_newplayer(on_new)
local function on_shutdown()
pd.save_all()
end
minetest.register_on_shutdown(on_shutdown)