Added Hunger
This commit is contained in:
parent
8ec337bb2b
commit
dc7337a7aa
@ -62,6 +62,11 @@ PyuTest.DAMAGE_TYPES = {
|
||||
type = "lightning"
|
||||
}
|
||||
end,
|
||||
starvation = function ()
|
||||
return custom_damage{
|
||||
type = "starvation"
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
PyuTest.mt_damage_to_pyutest_damage = function(reason)
|
||||
@ -112,6 +117,8 @@ core.register_on_dieplayer(function(player, reason)
|
||||
message = string.format("%s froze to death", playername)
|
||||
elseif newreason.type == "lightning" then
|
||||
message = string.format("%s was struck by lightning", playername)
|
||||
elseif newreason.type == "starvation" then
|
||||
message = string.format("%s starved to death", playername)
|
||||
end
|
||||
elseif reason.type == "node_damage" then
|
||||
local desc = core.registered_nodes[reason.node].description or "a block"
|
||||
|
@ -49,15 +49,18 @@ PyuTest.make_sword = function(nsname, desc, texture, damage, durability, atkspee
|
||||
})
|
||||
end
|
||||
|
||||
PyuTest.make_food = function(nsname, desc, wield_image, health_fill, cook_into, extra_code)
|
||||
PyuTest.make_item(nsname, desc .. string.format("\nHeals %d health", health_fill), {
|
||||
PyuTest.make_food = function(nsname, desc, wield_image, hunger_fill, cook_into, extra_code)
|
||||
PyuTest.make_item(nsname, desc .. string.format("\nHeals %d health", hunger_fill), {
|
||||
food = 1
|
||||
}, wield_image, {
|
||||
on_use = function(itemstack, user, pt)
|
||||
if user == nil then return end
|
||||
core.sound_play({ name = "eat", gain = 1 }, { pos = user:get_pos(), start_time = 1.2 })
|
||||
core.do_item_eat(health_fill, "", itemstack, user, pt)
|
||||
PyuTest.hunger_add(user:get_player_name(), hunger_fill)
|
||||
if extra_code then extra_code() end
|
||||
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -1 +1,2 @@
|
||||
name = pyutest_tools
|
||||
depends = pyutest_hunger
|
||||
|
103
mods/PLAYER/pyutest_hunger/init.lua
Normal file
103
mods/PLAYER/pyutest_hunger/init.lua
Normal file
@ -0,0 +1,103 @@
|
||||
PyuTest.HUNGER_MAX = 20
|
||||
|
||||
local storage = core.get_mod_storage()
|
||||
local hungers = core.deserialize(storage:get("player_hungers")) or {}
|
||||
|
||||
PyuTest.hunger_multiplier = function(player, x)
|
||||
hungers[player].multiplier = x
|
||||
end
|
||||
|
||||
PyuTest.hunger_get = function (player)
|
||||
return hungers[player].hunger
|
||||
end
|
||||
|
||||
PyuTest.hunger_set = function (player, hunger)
|
||||
hungers[player].hunger = hunger
|
||||
end
|
||||
|
||||
PyuTest.hunger_add = function (player, points)
|
||||
if hungers[player].hunger == PyuTest.HUNGER_MAX and points >= 0 then
|
||||
return
|
||||
end
|
||||
|
||||
if hungers[player].hunger <= 0 and points < 0 then
|
||||
return
|
||||
end
|
||||
|
||||
local p = hungers[player].hunger + points
|
||||
if p > PyuTest.HUNGER_MAX then
|
||||
p = PyuTest.HUNGER_MAX
|
||||
end
|
||||
|
||||
hungers[player].hunger = p
|
||||
end
|
||||
|
||||
local timers = {}
|
||||
core.register_globalstep(function (dtime)
|
||||
for i, p in pairs(core.get_connected_players()) do
|
||||
local name = p:get_player_name()
|
||||
|
||||
if hungers[name].hunger < 0 then
|
||||
hungers[name].hunger = 0
|
||||
end
|
||||
|
||||
if timers[name] == nil then
|
||||
timers[name] = {
|
||||
hunger = 0,
|
||||
damage = 0,
|
||||
health = 0,
|
||||
}
|
||||
end
|
||||
|
||||
timers[name].hunger = timers[name].hunger + ((3 * hungers[name].multiplier) * dtime)
|
||||
timers[name].damage = timers[name].damage + 5 * dtime
|
||||
timers[name].health = timers[name].health + 8 * dtime
|
||||
|
||||
if timers[name].hunger > 50 then
|
||||
PyuTest.hunger_add(name, -2)
|
||||
timers[name].hunger = 0
|
||||
end
|
||||
|
||||
if timers[name].damage > 20 and hungers[name].hunger == 0 then
|
||||
PyuTest.deal_damage(p, 3, PyuTest.DAMAGE_TYPES.starvation())
|
||||
timers[name].damage = 0
|
||||
end
|
||||
|
||||
if timers[name].health > 30 and hungers[name].hunger == 20 then
|
||||
PyuTest.deal_damage(p, -2)
|
||||
timers[name].health = 0
|
||||
end
|
||||
|
||||
hb.change_hudbar(p, "hunger", hungers[name].hunger, PyuTest.HUNGER_MAX)
|
||||
end
|
||||
end)
|
||||
|
||||
core.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if hungers[name] == nil then
|
||||
hungers[name] = {
|
||||
hunger = PyuTest.HUNGER_MAX,
|
||||
multiplier = 1
|
||||
}
|
||||
end
|
||||
|
||||
hb.init_hudbar(player, "hunger", hungers[name].hunger, PyuTest.HUNGER_MAX)
|
||||
end)
|
||||
|
||||
core.register_on_respawnplayer(function (player)
|
||||
local name = player:get_player_name()
|
||||
hungers[name].hunger = PyuTest.HUNGER_MAX
|
||||
end)
|
||||
|
||||
local function save_data()
|
||||
storage:set_string("player_hungers", core.serialize(hungers))
|
||||
end
|
||||
|
||||
core.register_on_shutdown(save_data)
|
||||
PyuTest.register_interval(save_data, 10)
|
||||
|
||||
hb.register_hudbar("hunger", 0xFFFFFF, Translate("Hunger"), {
|
||||
icon = "pyutest-hunger.png",
|
||||
bar = "pyutest-hunger-bg.png",
|
||||
bgicon = "pyutest-hunger-bg.png"
|
||||
}, 0, PyuTest.HUNGER_MAX, false)
|
0
mods/PLAYER/pyutest_hunger/mod.conf
Normal file
0
mods/PLAYER/pyutest_hunger/mod.conf
Normal file
@ -46,11 +46,16 @@ core.register_item(":", {
|
||||
-- player effects (TODO)
|
||||
core.register_globalstep(function ()
|
||||
for _, v in pairs(core.get_connected_players()) do
|
||||
local name = v:get_player_name()
|
||||
|
||||
local speed_multiplier = 1
|
||||
local sprint_addition = 0.35
|
||||
|
||||
if v:get_player_control().aux1 then
|
||||
if v:get_player_control().aux1 and PyuTest.hunger_get(name) > 6 then
|
||||
speed_multiplier = speed_multiplier + sprint_addition
|
||||
PyuTest.hunger_multiplier(name, 4)
|
||||
else
|
||||
PyuTest.hunger_multiplier(name, 1)
|
||||
end
|
||||
|
||||
v:set_physics_override({
|
||||
|
@ -0,0 +1 @@
|
||||
depends = pyutest_hunger
|
BIN
textures/pyutest-hunger-bg.png
Normal file
BIN
textures/pyutest-hunger-bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 B |
BIN
textures/pyutest-hunger.png
Normal file
BIN
textures/pyutest-hunger.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 201 B |
Loading…
x
Reference in New Issue
Block a user