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
|
||||
local timer = 0
|
||||
minetest.register_globalstep(function(dtime)
|
||||
timer = timer + dtime
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
local model_name = player_model[name]
|
||||
|
@ -299,10 +300,9 @@ minetest.register_globalstep(function(dtime)
|
|||
end
|
||||
end
|
||||
if on_water and player_pos.y < 0 then
|
||||
timer = timer + dtime
|
||||
if timer > 1 then
|
||||
player_pos.y = player_pos.y + 1
|
||||
minetest.add_particlespawner({
|
||||
minetest.addadd_particlespawner({
|
||||
amount = 6,
|
||||
time = 1,
|
||||
minpos = player_pos,
|
||||
|
@ -319,10 +319,15 @@ minetest.register_globalstep(function(dtime)
|
|||
vertical = false,
|
||||
texture = "bubble.png",
|
||||
})
|
||||
timer = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
if timer > 1 then
|
||||
playerz.hunger(player)
|
||||
end
|
||||
end
|
||||
if timer > 1 then
|
||||
timer = 0
|
||||
end
|
||||
end)
|
||||
|
||||
|
@ -435,6 +440,7 @@ end)
|
|||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
playerz.set_status(player, "normal")
|
||||
playerz.reset_hunger(player) --reinit hunger
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
|
@ -444,6 +450,7 @@ minetest.register_on_leaveplayer(function(player)
|
|||
player_textures[name] = nil
|
||||
player_sneak[name] = nil
|
||||
playerz.player_attached[name] = nil
|
||||
playerz.remove_hunger(player)
|
||||
playerz.count = playerz.count - 1
|
||||
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_texture(player)
|
||||
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") .. "/cloths.lua")
|
||||
dofile(minetest.get_modpath("playerz") .. "/freeze.lua")
|
||||
dofile(minetest.get_modpath("playerz") .. "/hunger.lua")
|
||||
|
||||
-- Default player appearance
|
||||
playerz.register_model("character.b3d", {
|
||||
|
@ -40,17 +41,22 @@ minetest.register_on_joinplayer(function(player)
|
|||
player:get_meta():set_int("ptol:level", 4)
|
||||
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
|
||||
else
|
||||
hunger = playerz.load_hunger(player)
|
||||
local cloth = playerz.compose_cloth(player)
|
||||
playerz.registered_models[playerz.get_gender_model(gender)].textures[1] = cloth
|
||||
playerz.set_model(player, playerz.get_gender_model(gender))
|
||||
end
|
||||
--Set Hunger Hudbar
|
||||
playerz.hb_add(player, hunger)
|
||||
-- Set formspec prepend
|
||||
local formspec = [[
|
||||
bgcolor[#303030;both]
|
||||
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]
|
||||
bgcolor[#303030;both]
|
||||
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]
|
||||
]]
|
||||
player:set_formspec_prepend(formspec)
|
||||
-- Set hotbar textures
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 564 B |
Loading…
Reference in New Issue