Add player stats, remove lifetimer from some NPCs
parent
f5a4b3e935
commit
997843977c
|
@ -29,6 +29,7 @@ local function adventuretest_die_player(player)
|
||||||
mg_villages.spawnplayer(player)
|
mg_villages.spawnplayer(player)
|
||||||
end
|
end
|
||||||
energy.respawnplayer(player)
|
energy.respawnplayer(player)
|
||||||
|
stats.increment(player:get_player_name(),STAT_DIED,1)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -56,8 +57,21 @@ local function adventuretest_dignode(pos, node, digger)
|
||||||
if digger ~= nil and digger ~= "" then
|
if digger ~= nil and digger ~= "" then
|
||||||
local name= digger:get_player_name()
|
local name= digger:get_player_name()
|
||||||
if player_energy[name] ~= nil then
|
if player_energy[name] ~= nil then
|
||||||
player_energy[name] = player_energy[name] - 0.08
|
player_energy[name] = player_energy[name] - 0.05
|
||||||
end
|
end
|
||||||
|
|
||||||
|
stats.increment(name,STAT_DUG,1)
|
||||||
|
local dug = stats.get(name,STAT_DUG)
|
||||||
|
if dug % 100 == 0 then
|
||||||
|
local ppos = digger:getpos()
|
||||||
|
-- every 100 give them some experience
|
||||||
|
local multiplier = dug / 100
|
||||||
|
local exp = 5 * multiplier
|
||||||
|
local e = experience.exp_to_items(exp)
|
||||||
|
for _,item in pairs(e) do
|
||||||
|
default.drop_item(ppos,item)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
hunger.handle_node_actions(pos, node, digger)
|
hunger.handle_node_actions(pos, node, digger)
|
||||||
|
@ -66,6 +80,22 @@ minetest.register_on_dignode(adventuretest_dignode)
|
||||||
|
|
||||||
local function adventuretest_placenode(pos, node, placer)
|
local function adventuretest_placenode(pos, node, placer)
|
||||||
hunger.handle_node_actions(pos,node,placer)
|
hunger.handle_node_actions(pos,node,placer)
|
||||||
|
if placer:is_player() then
|
||||||
|
local name = placer:get_player_name()
|
||||||
|
stats.increment(name,STAT_PLACED,1)
|
||||||
|
|
||||||
|
local placed = stats.get(name,STAT_PLACED)
|
||||||
|
if placed % 100 == 0 then
|
||||||
|
local ppos = placer:getpos()
|
||||||
|
-- every 100 give them some experience
|
||||||
|
local multiplier = placed / 100
|
||||||
|
local exp = 5 * multiplier
|
||||||
|
local e = experience.exp_to_items(exp)
|
||||||
|
for _,item in pairs(e) do
|
||||||
|
default.drop_item(ppos,item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
minetest.register_on_placenode(adventuretest_placenode)
|
minetest.register_on_placenode(adventuretest_placenode)
|
||||||
|
|
||||||
|
@ -75,3 +105,20 @@ local function on_generated(minp,maxp,seed)
|
||||||
end
|
end
|
||||||
minetest.register_on_generated(on_generated)
|
minetest.register_on_generated(on_generated)
|
||||||
|
|
||||||
|
local function on_join(player)
|
||||||
|
stats.load(player:get_player_name())
|
||||||
|
end
|
||||||
|
minetest.register_on_joinplayer(on_join)
|
||||||
|
|
||||||
|
local function on_leave(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
stats.save(name)
|
||||||
|
stats.unload(name)
|
||||||
|
end
|
||||||
|
minetest.register_on_leaveplayer(on_leave)
|
||||||
|
|
||||||
|
local function on_shutdown()
|
||||||
|
stats.save_all()
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_on_shutdown(on_shutdown)
|
||||||
|
|
|
@ -40,6 +40,8 @@ function energy.update_energy(p,name)
|
||||||
|
|
||||||
local hdiff = math.sqrt(math.pow(pos.x-player_lastpos[name].x, 2) + math.pow(pos.z-player_lastpos[name].z, 2))
|
local hdiff = math.sqrt(math.pow(pos.x-player_lastpos[name].x, 2) + math.pow(pos.z-player_lastpos[name].z, 2))
|
||||||
|
|
||||||
|
stats.increment(name,STAT_TRAVEL,math.floor(hdiff))
|
||||||
|
|
||||||
adj = adj - ( hdiff * 0.03 )
|
adj = adj - ( hdiff * 0.03 )
|
||||||
--print("Energy Adjustments")
|
--print("Energy Adjustments")
|
||||||
--print(tostring(adj))
|
--print(tostring(adj))
|
||||||
|
|
|
@ -479,6 +479,7 @@ function mobs:register_mob(name, def)
|
||||||
|
|
||||||
if self.state == "stand" then
|
if self.state == "stand" then
|
||||||
-- randomly turn
|
-- randomly turn
|
||||||
|
math.randomseed(os.clock())
|
||||||
if math.random(1, 100) < self.activity_level then
|
if math.random(1, 100) < self.activity_level then
|
||||||
-- if there is a player nearby look at them
|
-- if there is a player nearby look at them
|
||||||
local lp = nil
|
local lp = nil
|
||||||
|
|
|
@ -57,7 +57,9 @@ mobs:register_mob("mobs:blacksmith",{
|
||||||
group_attack = false,
|
group_attack = false,
|
||||||
blood_amount = 35,
|
blood_amount = 35,
|
||||||
blood_offset = 0.25,
|
blood_offset = 0.25,
|
||||||
activity_level = 15,
|
activity_level = 1,
|
||||||
|
lifetimer = false,
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
-- list of active blacksmiths... I'm not sure how this is going to work when an entity is unloaded
|
-- list of active blacksmiths... I'm not sure how this is going to work when an entity is unloaded
|
||||||
|
|
|
@ -58,4 +58,6 @@ mobs:register_mob("mobs:explorer",{
|
||||||
{chance=60, item="experience:6_exp"},
|
{chance=60, item="experience:6_exp"},
|
||||||
{chance=50, item="potions:magic_replenish1"},
|
{chance=50, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
|
lifetimer = false,
|
||||||
|
activity_level = 2,
|
||||||
})
|
})
|
||||||
|
|
|
@ -55,7 +55,8 @@ mobs:register_mob("mobs:male1_npc",{
|
||||||
{chance=60, item="experience:6_exp"},
|
{chance=60, item="experience:6_exp"},
|
||||||
{chance=50, item="potions:magic_replenish1"},
|
{chance=50, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
walk_chance = 10,
|
walk_chance = 5,
|
||||||
|
lifetimer = false,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:register_mob("mobs:male2_npc",{
|
mobs:register_mob("mobs:male2_npc",{
|
||||||
|
@ -115,7 +116,8 @@ mobs:register_mob("mobs:male2_npc",{
|
||||||
{chance=60, item="experience:6_exp"},
|
{chance=60, item="experience:6_exp"},
|
||||||
{chance=50, item="potions:magic_replenish1"},
|
{chance=50, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
walk_chance = 10,
|
walk_chance = 5,
|
||||||
|
lifetimer = false,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:register_mob("mobs:male3_npc",{
|
mobs:register_mob("mobs:male3_npc",{
|
||||||
|
@ -175,5 +177,6 @@ mobs:register_mob("mobs:male3_npc",{
|
||||||
{chance=60, item="experience:6_exp"},
|
{chance=60, item="experience:6_exp"},
|
||||||
{chance=50, item="potions:magic_replenish1"},
|
{chance=50, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
walk_chance = 10,
|
walk_chance = 2,
|
||||||
|
lifetimer = false,
|
||||||
})
|
})
|
||||||
|
|
|
@ -52,6 +52,7 @@ type = "npc",
|
||||||
{chance=40, item="experience:6_exp"},
|
{chance=40, item="experience:6_exp"},
|
||||||
{chance=60, item="potions:magic_replenish1"},
|
{chance=60, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
|
lifetimer = false,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:register_mob("mobs:female2_npc", {
|
mobs:register_mob("mobs:female2_npc", {
|
||||||
|
@ -108,7 +109,8 @@ type = "npc",
|
||||||
{chance=40, item="experience:6_exp"},
|
{chance=40, item="experience:6_exp"},
|
||||||
{chance=60, item="potions:magic_replenish1"},
|
{chance=60, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
walk_chance = 10,
|
walk_chance = 3,
|
||||||
|
lifetimer = false,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:register_mob("mobs:female3_npc", {
|
mobs:register_mob("mobs:female3_npc", {
|
||||||
|
@ -167,4 +169,5 @@ type = "npc",
|
||||||
{chance=40, item="potions:magic_replenish1"},
|
{chance=40, item="potions:magic_replenish1"},
|
||||||
},
|
},
|
||||||
walk_chance = 4,
|
walk_chance = 4,
|
||||||
|
lifetimer = false,
|
||||||
})
|
})
|
||||||
|
|
|
@ -115,6 +115,12 @@ function getformspec(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mobs.spawn_npc_and_spawner(pos,barbarian_village)
|
function mobs.spawn_npc_and_spawner(pos,barbarian_village)
|
||||||
|
|
||||||
|
if randomChance(30) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
math.randomseed(os.clock())
|
||||||
local numNPCs = math.random(0,1)
|
local numNPCs = math.random(0,1)
|
||||||
--print("Spawning "..tostring(numNPCs).." NPCs")
|
--print("Spawning "..tostring(numNPCs).." NPCs")
|
||||||
if numNPCs > 0 then
|
if numNPCs > 0 then
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
STAT_DUG = 1
|
||||||
|
STAT_PLACED = 2
|
||||||
|
STAT_DIED = 3
|
||||||
|
STAT_TRAVEL = 4
|
||||||
|
STAT_PK = 5
|
||||||
|
STAT_KILLS = 6
|
||||||
|
|
||||||
|
strStat = {"Nodes Dug","Nodes Placed","Died","Distance Traveled","Players Killed","Mobs Killed"}
|
|
@ -0,0 +1,58 @@
|
||||||
|
stats = {}
|
||||||
|
local player_stats = {}
|
||||||
|
|
||||||
|
dofile(minetest.get_modpath("player_stats").."/const.lua")
|
||||||
|
|
||||||
|
stats.load = function ( name )
|
||||||
|
player_stats[name] = default.deserialize_from_file(minetest.get_worldpath() .. "/players/" .. name ..".stats")
|
||||||
|
end
|
||||||
|
|
||||||
|
stats.save = function (name)
|
||||||
|
default.serialize_to_file(minetest.get_worldpath() .. "/players/" .. name .. ".stats",player_stats[name])
|
||||||
|
end
|
||||||
|
|
||||||
|
stats.save_all = function()
|
||||||
|
for name,s in pairs(player_stats) do
|
||||||
|
if s ~= nil then
|
||||||
|
stats.save(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.after(600,stats.save_all)
|
||||||
|
end
|
||||||
|
|
||||||
|
stats.unload = function(name)
|
||||||
|
player_stats[name] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
stats.set = function (name, stat, value)
|
||||||
|
if player_stats[name] ~= nil then
|
||||||
|
player_stats[name][stat] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
stats.get = function (name, stat)
|
||||||
|
return player_stats[name][stat]
|
||||||
|
end
|
||||||
|
|
||||||
|
stats.increment = function (name, stat, amount)
|
||||||
|
print("increment stat "..tostring(stat).." by "..tostring(amount))
|
||||||
|
if player_stats[name] ~= nil then
|
||||||
|
if tonumber(player_stats[name][stat]) ~= nil then
|
||||||
|
player_stats[name][stat] = player_stats[name][stat] + amount
|
||||||
|
else
|
||||||
|
player_stats[name][stat] = amount -- stat wasn't set or was invalid so reset it
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.after(600,stats.save_all)
|
||||||
|
|
||||||
|
minetest.register_chatcommand("stats",{
|
||||||
|
params = "",
|
||||||
|
description = "Shows players stats",
|
||||||
|
func = function(name, param)
|
||||||
|
for i,d in pairs(strStat) do
|
||||||
|
minetest.chat_send_player(name, d..": "..tostring(player_stats[name][i]))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
Loading…
Reference in New Issue