Add mini-hunger mod. Correct meat drops in some mobs.

This commit is contained in:
Duane 2016-06-25 01:38:54 -05:00
parent aac2db0da4
commit 36af3b1d92
4 changed files with 91 additions and 21 deletions

View file

@ -68,6 +68,12 @@ minetest.register_globalstep(function(dtime)
return
end
local out = io.open(fun_caves.world..'/fun_caves_data.txt','w')
if out then
out:write(minetest.serialize(fun_caves.db))
out.close()
end
-- Promote mobs based on spawn position
local is_fortress = fun_caves.is_fortress
for _, mob in pairs(minetest.luaentities) do
@ -183,11 +189,7 @@ minetest.register_globalstep(function(dtime)
-- ... from hunger (even less often).
if dps_count % hunger_delay == 0 then
if hunger_mod then
hunger.update_hunger(player, hunger.players[player_name].lvl - 4)
else
player:set_hp(player:get_hp() - 1)
end
fun_caves.hunger_change(player, -1)
end
end
end

View file

@ -33,9 +33,17 @@ local inp = io.open(fun_caves.world..'/fun_caves_data.txt','r')
if inp then
local d = inp:read('*a')
fun_caves.db = minetest.deserialize(d)
else
inp.close()
end
if not fun_caves.db then
fun_caves.db = {}
end
if not fun_caves.db.teleport_data then
fun_caves.db.teleport_data = {}
end
if not fun_caves.db.hunger then
fun_caves.db.hunger = {}
end
-- whether to use biomes and heightmap
@ -106,3 +114,66 @@ if mobs and mobs.mod == "redo" then
end
--fun_caves.print_recipes()
local hunger_mod = minetest.get_modpath("hunger")
fun_caves.hunger_id = {}
function fun_caves.hunger_change(player, change)
local name = player:get_player_name()
if hunger_mod then
if change < 0 then
hunger.update_hunger(player, hunger.players[name].lvl + change * 4)
end
return
end
local hp = player:get_hp()
if change < 0 or hp >= 20 then
fun_caves.db.hunger[name] = math.min(20, math.max(0, fun_caves.db.hunger[name] + change))
player:hud_change(fun_caves.hunger_id[name], 'number', fun_caves.db.hunger[name])
if fun_caves.db.hunger[name] == 0 then
player:set_hp(player:get_hp() - 1)
end
end
end
if not hunger_mod then
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
if not fun_caves.db.hunger[name] then
fun_caves.db.hunger[name] = 20
end
local hunger_bar = {
hud_elem_type = 'statbar',
position = {x=0.52, y=0.883},
name = "hunger",
text = "farming_bread.png",
number = fun_caves.db.hunger[name],
direction = 0,
size = { x=24, y=24 },
}
fun_caves.hunger_id[name] = player:hud_add(hunger_bar)
end)
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
if hp_change > 0 then
fun_caves.hunger_change(user, hp_change)
end
end)
minetest.register_on_dieplayer(function(player)
local name = player:get_player_name()
local pos = vector.round(player:getpos())
if not hunger_mod then
fun_caves.db.hunger[name] = 20
player:hud_change(fun_caves.hunger_id[name], 'number', 20)
end
minetest.chat_send_player(name, 'Your bones will lie at ('..pos.x..','..pos.y..','..pos.z..'), in ignominy, unless you collect them.')
end)
end

View file

@ -81,15 +81,15 @@ end
-- Try to standardize creature stats based on (log of) mass.
local mob_stats = {
{name = 'dmobs:badger', hp = 12, damage = 1, armor = 100, reach = 1},
{name = 'dmobs:dragon', hp = 40, damage = 6, armor = 50, reach = 3},
{name = 'dmobs:elephant', hp = 38, damage = 5, armor = 75, reach = 3},
{name = 'dmobs:fox', hp = 8, damage = 1, armor = 100, reach = 1},
{name = 'dmobs:hedgehog', hp = 2, damage = 1, armor = 100, reach = 1},
{name = 'dmobs:ogre', hp = 26, damage = 3, armor = 75, reach = 3},
{name = 'dmobs:orc', hp = 22, damage = 2, armor = 100, reach = 2},
{name = 'dmobs:owl', hp = 6, damage = 1, armor = 100, reach = 1},
{name = 'dmobs:panda', hp = 22, damage = 2, armor = 100, reach = 2},
{name = 'dmobs:badger', hp = 12, damage = 1, armor = 100, reach = 1, meat = true},
{name = 'dmobs:dragon', hp = 40, damage = 6, armor = 50, reach = 3, meat = true},
{name = 'dmobs:elephant', hp = 38, damage = 5, armor = 75, reach = 3, meat = true},
{name = 'dmobs:fox', hp = 8, damage = 1, armor = 100, reach = 1, meat = true},
{name = 'dmobs:hedgehog', hp = 2, damage = 1, armor = 100, reach = 1, meat = true},
{name = 'dmobs:ogre', hp = 26, damage = 3, armor = 75, reach = 3, meat = true},
{name = 'dmobs:orc', hp = 22, damage = 2, armor = 100, reach = 2, meat = true},
{name = 'dmobs:owl', hp = 6, damage = 1, armor = 100, reach = 1, meat = true},
{name = 'dmobs:panda', hp = 22, damage = 2, armor = 100, reach = 2, meat = true},
{name = 'kpgmobs:deer', hp = 20, damage = 2, armor = 100, reach = 2},
{name = 'kpgmobs:horse2', hp = 30, damage = 3, armor = 100, reach = 2},
{name = 'kpgmobs:horse3', hp = 30, damage = 3, armor = 100, reach = 2},
@ -161,6 +161,9 @@ for _, mob in pairs(mob_stats) do
if mob.reach then
minetest.registered_entities[mob.name].reach = mob.reach
end
if mob.meat then
minetest.registered_entities[mob.name].drops[#minetest.registered_entities[mob.name].drops+1] = {name = "mobs:meat_raw", chance = 1, min = 1, max = mob.damage ^ 2}
end
end
end

View file

@ -8,12 +8,6 @@ local function teleporter(user, area, power)
local name = user:get_player_name()
local pos = user:getpos()
if not fun_caves.db then
fun_caves.db = {}
end
if not fun_caves.db.teleport_data then
fun_caves.db.teleport_data = {}
end
if not fun_caves.db.teleport_data[name] then
fun_caves.db.teleport_data[name] = {}
end