Add mini-hunger mod. Correct meat drops in some mobs.
This commit is contained in:
parent
aac2db0da4
commit
36af3b1d92
4 changed files with 91 additions and 21 deletions
12
abms.lua
12
abms.lua
|
@ -68,6 +68,12 @@ minetest.register_globalstep(function(dtime)
|
||||||
return
|
return
|
||||||
end
|
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
|
-- Promote mobs based on spawn position
|
||||||
local is_fortress = fun_caves.is_fortress
|
local is_fortress = fun_caves.is_fortress
|
||||||
for _, mob in pairs(minetest.luaentities) do
|
for _, mob in pairs(minetest.luaentities) do
|
||||||
|
@ -183,11 +189,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
-- ... from hunger (even less often).
|
-- ... from hunger (even less often).
|
||||||
if dps_count % hunger_delay == 0 then
|
if dps_count % hunger_delay == 0 then
|
||||||
if hunger_mod then
|
fun_caves.hunger_change(player, -1)
|
||||||
hunger.update_hunger(player, hunger.players[player_name].lvl - 4)
|
|
||||||
else
|
|
||||||
player:set_hp(player:get_hp() - 1)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
73
init.lua
73
init.lua
|
@ -33,9 +33,17 @@ local inp = io.open(fun_caves.world..'/fun_caves_data.txt','r')
|
||||||
if inp then
|
if inp then
|
||||||
local d = inp:read('*a')
|
local d = inp:read('*a')
|
||||||
fun_caves.db = minetest.deserialize(d)
|
fun_caves.db = minetest.deserialize(d)
|
||||||
else
|
inp.close()
|
||||||
|
end
|
||||||
|
if not fun_caves.db then
|
||||||
fun_caves.db = {}
|
fun_caves.db = {}
|
||||||
end
|
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
|
-- whether to use biomes and heightmap
|
||||||
|
@ -106,3 +114,66 @@ if mobs and mobs.mod == "redo" then
|
||||||
end
|
end
|
||||||
|
|
||||||
--fun_caves.print_recipes()
|
--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
|
||||||
|
|
21
mobs.lua
21
mobs.lua
|
@ -81,15 +81,15 @@ end
|
||||||
-- Try to standardize creature stats based on (log of) mass.
|
-- Try to standardize creature stats based on (log of) mass.
|
||||||
local mob_stats = {
|
local mob_stats = {
|
||||||
|
|
||||||
{name = 'dmobs:badger', hp = 12, damage = 1, armor = 100, reach = 1},
|
{name = 'dmobs:badger', hp = 12, damage = 1, armor = 100, reach = 1, meat = true},
|
||||||
{name = 'dmobs:dragon', hp = 40, damage = 6, armor = 50, reach = 3},
|
{name = 'dmobs:dragon', hp = 40, damage = 6, armor = 50, reach = 3, meat = true},
|
||||||
{name = 'dmobs:elephant', hp = 38, damage = 5, armor = 75, reach = 3},
|
{name = 'dmobs:elephant', hp = 38, damage = 5, armor = 75, reach = 3, meat = true},
|
||||||
{name = 'dmobs:fox', hp = 8, damage = 1, armor = 100, reach = 1},
|
{name = 'dmobs:fox', hp = 8, damage = 1, armor = 100, reach = 1, meat = true},
|
||||||
{name = 'dmobs:hedgehog', hp = 2, damage = 1, armor = 100, reach = 1},
|
{name = 'dmobs:hedgehog', hp = 2, damage = 1, armor = 100, reach = 1, meat = true},
|
||||||
{name = 'dmobs:ogre', hp = 26, damage = 3, armor = 75, reach = 3},
|
{name = 'dmobs:ogre', hp = 26, damage = 3, armor = 75, reach = 3, meat = true},
|
||||||
{name = 'dmobs:orc', hp = 22, damage = 2, armor = 100, reach = 2},
|
{name = 'dmobs:orc', hp = 22, damage = 2, armor = 100, reach = 2, meat = true},
|
||||||
{name = 'dmobs:owl', hp = 6, damage = 1, armor = 100, reach = 1},
|
{name = 'dmobs:owl', hp = 6, damage = 1, armor = 100, reach = 1, meat = true},
|
||||||
{name = 'dmobs:panda', hp = 22, damage = 2, armor = 100, reach = 2},
|
{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:deer', hp = 20, damage = 2, armor = 100, reach = 2},
|
||||||
{name = 'kpgmobs:horse2', hp = 30, damage = 3, 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},
|
{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
|
if mob.reach then
|
||||||
minetest.registered_entities[mob.name].reach = mob.reach
|
minetest.registered_entities[mob.name].reach = mob.reach
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,6 @@ local function teleporter(user, area, power)
|
||||||
local name = user:get_player_name()
|
local name = user:get_player_name()
|
||||||
local pos = user:getpos()
|
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
|
if not fun_caves.db.teleport_data[name] then
|
||||||
fun_caves.db.teleport_data[name] = {}
|
fun_caves.db.teleport_data[name] = {}
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue