master
root 2022-03-17 19:52:00 +01:00
parent 389cd284e4
commit bdac37ae7c
7 changed files with 137 additions and 6 deletions

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

View File

@ -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)

111
mods/playerz/hunger.lua Normal file
View File

@ -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

View File

@ -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