hunger
parent
389cd284e4
commit
bdac37ae7c
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
Before Width: | Height: | Size: 569 B After Width: | Height: | Size: 800 B |
|
@ -197,6 +197,7 @@ end
|
||||||
-- Check each player and apply animations
|
-- Check each player and apply animations
|
||||||
local timer = 0
|
local timer = 0
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
|
timer = timer + dtime
|
||||||
for _, player in pairs(minetest.get_connected_players()) do
|
for _, player in pairs(minetest.get_connected_players()) do
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local model_name = player_model[name]
|
local model_name = player_model[name]
|
||||||
|
@ -299,10 +300,9 @@ minetest.register_globalstep(function(dtime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if on_water and player_pos.y < 0 then
|
if on_water and player_pos.y < 0 then
|
||||||
timer = timer + dtime
|
|
||||||
if timer > 1 then
|
if timer > 1 then
|
||||||
player_pos.y = player_pos.y + 1
|
player_pos.y = player_pos.y + 1
|
||||||
minetest.add_particlespawner({
|
minetest.addadd_particlespawner({
|
||||||
amount = 6,
|
amount = 6,
|
||||||
time = 1,
|
time = 1,
|
||||||
minpos = player_pos,
|
minpos = player_pos,
|
||||||
|
@ -319,10 +319,15 @@ minetest.register_globalstep(function(dtime)
|
||||||
vertical = false,
|
vertical = false,
|
||||||
texture = "bubble.png",
|
texture = "bubble.png",
|
||||||
})
|
})
|
||||||
timer = 0
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if timer > 1 then
|
||||||
|
playerz.hunger(player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if timer > 1 then
|
||||||
|
timer = 0
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -435,6 +440,7 @@ end)
|
||||||
|
|
||||||
minetest.register_on_respawnplayer(function(player)
|
minetest.register_on_respawnplayer(function(player)
|
||||||
playerz.set_status(player, "normal")
|
playerz.set_status(player, "normal")
|
||||||
|
playerz.reset_hunger(player) --reinit hunger
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
@ -444,6 +450,7 @@ minetest.register_on_leaveplayer(function(player)
|
||||||
player_textures[name] = nil
|
player_textures[name] = nil
|
||||||
player_sneak[name] = nil
|
player_sneak[name] = nil
|
||||||
playerz.player_attached[name] = nil
|
playerz.player_attached[name] = nil
|
||||||
|
playerz.remove_hunger(player)
|
||||||
playerz.count = playerz.count - 1
|
playerz.count = playerz.count - 1
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -466,3 +473,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
playerz.set_cloths(player) --set the default clothes
|
playerz.set_cloths(player) --set the default clothes
|
||||||
playerz.set_texture(player)
|
playerz.set_texture(player)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_shutdown(function()
|
||||||
|
for _, player in ipairs(minetest.get_connected_players()) do
|
||||||
|
playerz.shutdown_hunger(player)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
local player_hunger = {}
|
||||||
|
|
||||||
|
--Time to decrease Hunger
|
||||||
|
local hunger_tick = 1500
|
||||||
|
--Time to produce health damage when starving
|
||||||
|
local hunger_tick_damage = 4
|
||||||
|
|
||||||
|
function playerz.save_hunger(player, value)
|
||||||
|
player:get_meta():set_int("hunger", value)
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
|
||||||
|
function playerz.load_hunger(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local hunger = player:get_meta():get_int("hunger")
|
||||||
|
player_hunger[name] = {
|
||||||
|
points = hunger,
|
||||||
|
hud_id = nil,
|
||||||
|
timer = 0
|
||||||
|
}
|
||||||
|
return hunger
|
||||||
|
end
|
||||||
|
|
||||||
|
--Setter/Getter
|
||||||
|
|
||||||
|
function playerz.set_hunger(player, value)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
player_hunger[name].points = value
|
||||||
|
playerz.hb_change(player, value)
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
|
||||||
|
function playerz.get_hunger(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local hunger = player_hunger[name].points
|
||||||
|
return hunger
|
||||||
|
end
|
||||||
|
|
||||||
|
function playerz.reset_hunger(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local hunger = 20
|
||||||
|
player_hunger[name].points = hunger
|
||||||
|
playerz.hb_change(player, hunger)
|
||||||
|
end
|
||||||
|
|
||||||
|
function playerz.init_hunger(player)
|
||||||
|
local hunger = playerz.save_hunger(player, 20)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
player_hunger[name] = {
|
||||||
|
points = hunger,
|
||||||
|
hud_id = nil,
|
||||||
|
timer = 0
|
||||||
|
}
|
||||||
|
return hunger
|
||||||
|
end
|
||||||
|
|
||||||
|
--Save the hunger on leave player
|
||||||
|
function playerz.remove_hunger(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
playerz.save_hunger(player, player_hunger[name].points)
|
||||||
|
player_hunger[name] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function playerz.shutdown_hunger(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
playerz.save_hunger(player, player_hunger[name].points)
|
||||||
|
end
|
||||||
|
|
||||||
|
--Hunger Hubbar
|
||||||
|
|
||||||
|
function playerz.hb_add(player, hunger)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
player_hunger[name].hud_id = player:hud_add({
|
||||||
|
hud_elem_type = "statbar",
|
||||||
|
text= "hunger.png",
|
||||||
|
number = hunger,
|
||||||
|
direction = 0,
|
||||||
|
size = {x = 24, y = 24},
|
||||||
|
position = {x = 0.5, y = 1},
|
||||||
|
offset = {x = -265, y= -116},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function playerz.hb_change(player, hunger)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
player:hud_change(player_hunger[name].hud_id, "number", hunger)
|
||||||
|
end
|
||||||
|
|
||||||
|
--Hunger Engine
|
||||||
|
|
||||||
|
function playerz.hunger(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local hunger = playerz.get_hunger(player)
|
||||||
|
if hunger <= 0 then --hunger damage
|
||||||
|
if player_hunger[name].timer >= hunger_tick_damage then
|
||||||
|
local new_hp = player:get_hp() - 1
|
||||||
|
player:set_hp(new_hp, "hunger")
|
||||||
|
player_hunger[name].timer = 0
|
||||||
|
else
|
||||||
|
player_hunger[name].timer = player_hunger[name].timer + 1
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if player_hunger[name].timer >= hunger_tick then
|
||||||
|
hunger = hunger - 1
|
||||||
|
playerz.set_hunger(player, hunger)
|
||||||
|
player_hunger[name].timer = 0
|
||||||
|
else
|
||||||
|
player_hunger[name].timer = player_hunger[name].timer + 1
|
||||||
|
end
|
||||||
|
end
|
|
@ -4,6 +4,7 @@ dofile(minetest.get_modpath("playerz") .. "/api.lua")
|
||||||
dofile(minetest.get_modpath("playerz") .. "/base_texture.lua")
|
dofile(minetest.get_modpath("playerz") .. "/base_texture.lua")
|
||||||
dofile(minetest.get_modpath("playerz") .. "/cloths.lua")
|
dofile(minetest.get_modpath("playerz") .. "/cloths.lua")
|
||||||
dofile(minetest.get_modpath("playerz") .. "/freeze.lua")
|
dofile(minetest.get_modpath("playerz") .. "/freeze.lua")
|
||||||
|
dofile(minetest.get_modpath("playerz") .. "/hunger.lua")
|
||||||
|
|
||||||
-- Default player appearance
|
-- Default player appearance
|
||||||
playerz.register_model("character.b3d", {
|
playerz.register_model("character.b3d", {
|
||||||
|
@ -40,17 +41,22 @@ minetest.register_on_joinplayer(function(player)
|
||||||
player:get_meta():set_int("ptol:level", 4)
|
player:get_meta():set_int("ptol:level", 4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if gender == "" then
|
local hunger
|
||||||
|
if gender == "" then --Initial values as gender, hunger
|
||||||
|
hunger = playerz.init_hunger(player)
|
||||||
playerz.select_gender(player_name) --select the gender
|
playerz.select_gender(player_name) --select the gender
|
||||||
else
|
else
|
||||||
|
hunger = playerz.load_hunger(player)
|
||||||
local cloth = playerz.compose_cloth(player)
|
local cloth = playerz.compose_cloth(player)
|
||||||
playerz.registered_models[playerz.get_gender_model(gender)].textures[1] = cloth
|
playerz.registered_models[playerz.get_gender_model(gender)].textures[1] = cloth
|
||||||
playerz.set_model(player, playerz.get_gender_model(gender))
|
playerz.set_model(player, playerz.get_gender_model(gender))
|
||||||
end
|
end
|
||||||
|
--Set Hunger Hudbar
|
||||||
|
playerz.hb_add(player, hunger)
|
||||||
-- Set formspec prepend
|
-- Set formspec prepend
|
||||||
local formspec = [[
|
local formspec = [[
|
||||||
bgcolor[#303030;both]
|
bgcolor[#303030;both]
|
||||||
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]
|
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]
|
||||||
]]
|
]]
|
||||||
player:set_formspec_prepend(formspec)
|
player:set_formspec_prepend(formspec)
|
||||||
-- Set hotbar textures
|
-- Set hotbar textures
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 564 B |
Loading…
Reference in New Issue