1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
hud = {}
local health_hud = {}
hud.hunger = {}
local hunger_hud = {}
hud.air = {}
local air_hud = {}
local SAVE_INTERVAL = 0.5*60--currently useless
local ENABLE_HUNGER = minetest.setting_getbool("enable_damage") -- set to false if no hunger wanted
local NO_HUNGER_TIME = 300 --=5min (so 1h playing == hunger)
--minetest.after(SAVE_INTERVAL, timer, SAVE_INTERVAL)
local function hide_builtin(player)
player:hud_set_flags({crosshair = false, hotbar = true, healthbar = false, wielditem = true, breathbar = false})
end
local function costum_hud(player)
--crosshair
player:hud_add({
hud_elem_type = "image",
text = "hud_cross.png",
position = {x=0.5, y=0.5},
scale = {x=1, y=1},
})
if minetest.setting_getbool("enable_damage") then
--hunger
player:hud_add({
hud_elem_type = "statbar",
position = {x=0.5,y=1},
scale = {x=1, y=1},
text = "hud_hunger_bg.png",
number = 20,
alignment = {x=-1,y=-1},
offset = {x=15,y=-60},
})
hunger_hud[player:get_player_name()] = player:hud_add({
hud_elem_type = "statbar",
position = {x=0.5,y=1},
scale = {x=1, y=1},
text = "hud_hunger_fg.png",
number = 20,
alignment = {x=-1,y=-1},
offset = {x=15,y=-60},
})
--health
player:hud_add({
hud_elem_type = "statbar",
position = {x=0.5,y=1},
scale = {x=1, y=1},
text = "hud_heart_bg.png",
number = 20,
alignment = {x=-1,y=-1},
offset = {x=-175,y=-60},
})
health_hud[player:get_player_name()] = player:hud_add({
hud_elem_type = "statbar",
position = {x=0.5,y=1},
scale = {x=1, y=1},
text = "hud_heart_fg.png",
number = player:get_hp(),
alignment = {x=-1,y=-1},
offset = {x=-175,y=-60},
})
end
end
local function update_hud(player)
--health
player:hud_change(health_hud[player:get_player_name()], "number", player:get_hp())
--hunger
player:hud_change(hunger_hud[player:get_player_name()], "number", hud.hunger[player:get_player_name()])
end
local function save_hunger(player)
local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "w+")
if file then
file:write(hud.hunger[player:get_player_name()])
file:close()
end
end
local function timer(interval, player)
if interval > 0 then
save_hunger(player)
minetest.after(interval, timer, interval, player)
end
end
local function load_hunger(player)
local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "r")
if file then
hud.hunger[player:get_player_name()] = file:read("*all")
file:close()
return hud.hunger[player:get_player_name()]
else
return
end
end
minetest.register_on_joinplayer(function(player)
hud.hunger[player:get_player_name()] = load_hunger(player)
if hud.hunger[player:get_player_name()] == nil then
hud.hunger[player:get_player_name()] = 20
end
minetest.after(0.5, function()
save_hunger(player)
hide_builtin(player)
costum_hud(player)
end)
end)
local timer = 0
local timer2 = 0
minetest.after(2.5, function()
if minetest.setting_getbool("enable_damage") then
minetest.register_globalstep(function(dtime)
timer = timer + dtime
timer2 = timer2 + dtime
for _,player in ipairs(minetest.get_connected_players()) do
local h = tonumber(hud.hunger[player:get_player_name()])
if ENABLE_HUNGER and timer > 4 then
if h>=18 then
player:set_hp(player:get_hp()+1)
elseif h==1 and minetest.setting_getbool("enable_damage") then
if player:get_hp()-1 >= 1 then player:set_hp(player:get_hp()-1) end
end
end
if ENABLE_HUNGER and timer2>NO_HUNGER_TIME then
--local h = tonumber(hunger[player:get_player_name()])
if h>1 then
h=h-1
hud.hunger[player:get_player_name()]=h
save_hunger(player)
end
end
update_hud(player)
end
if timer>4 then timer=0 end
if timer2>NO_HUNGER_TIME then timer2=0 end
end)
end
end)
if ENABLE_HUNGER then dofile(minetest.get_modpath("hud").."/hunger.lua") end
dofile(minetest.get_modpath("hud").."/no_drowning.lua")
|