Prevent server from crashing when player logs in using specific name

master
Marcin 2015-10-18 00:17:52 +02:00
parent af0267b9f5
commit c1e604c140
2 changed files with 18 additions and 17 deletions

View File

@ -20,7 +20,7 @@ end
function hunger.save(player) function hunger.save(player)
local inv = player:get_inventory() local inv = player:get_inventory()
local name = player:get_player_name() local name = player:get_player_name()
local value = hunger[name].lvl local value = hunger.players[name].lvl
if not inv or not value then if not inv or not value then
return nil return nil
end end
@ -40,17 +40,17 @@ function hunger.update_hunger(player, new_lvl)
return false return false
end end
if minetest.setting_getbool("enable_damage") == false then if minetest.setting_getbool("enable_damage") == false then
hunger[name] = 20 hunger.players[name] = 20
return return
end end
local lvl = hunger[name].lvl local lvl = hunger.players[name].lvl
if new_lvl then if new_lvl then
lvl = new_lvl lvl = new_lvl
end end
if lvl > HUNGER_MAX then if lvl > HUNGER_MAX then
lvl = HUNGER_MAX lvl = HUNGER_MAX
end end
hunger[name].lvl = lvl hunger.players[name].lvl = lvl
if lvl > 20 then if lvl > 20 then
lvl = 20 lvl = 20
end end
@ -65,13 +65,13 @@ function hunger.handle_node_actions(pos, oldnode, player, ext)
return return
end end
local name = player:get_player_name() local name = player:get_player_name()
if not name or not hunger[name] then if not name or not hunger.players[name] then
return return
end end
local exhaus = hunger[name].exhaus local exhaus = hunger.players[name].exhaus
if not exhaus then if not exhaus then
hunger[name].exhaus = 0 hunger.players[name].exhaus = 0
--return --return
end end
@ -91,13 +91,13 @@ function hunger.handle_node_actions(pos, oldnode, player, ext)
if exhaus > HUNGER_EXHAUST_LVL then if exhaus > HUNGER_EXHAUST_LVL then
exhaus = 0 exhaus = 0
local h = tonumber(hunger[name].lvl) local h = tonumber(hunger.players[name].lvl)
if h > 0 then if h > 0 then
update_hunger(player, h - 1) update_hunger(player, h - 1)
end end
end end
hunger[name].exhaus = exhaus hunger.players[name].exhaus = exhaus
end end
@ -126,7 +126,7 @@ local function hunger_globaltimer(dtime)
if hunger_timer > HUNGER_TICK then if hunger_timer > HUNGER_TICK then
for _,player in ipairs(minetest.get_connected_players()) do for _,player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name() local name = player:get_player_name()
local tab = hunger[name] local tab = hunger.players[name]
if tab then if tab then
local hunger = tab.lvl local hunger = tab.lvl
if hunger > 0 then if hunger > 0 then
@ -141,7 +141,7 @@ local function hunger_globaltimer(dtime)
if health_timer > HUNGER_HEALTH_TICK then if health_timer > HUNGER_HEALTH_TICK then
for _,player in ipairs(minetest.get_connected_players()) do for _,player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name() local name = player:get_player_name()
local tab = hunger[name] local tab = hunger.players[name]
if tab then if tab then
local air = player:get_breath() or 0 local air = player:get_breath() or 0
local hp = player:get_hp() local hp = player:get_hp()
@ -227,10 +227,10 @@ function hunger.item_eat(hunger_change, replace_with_item, poisen, heal, sound)
return function(itemstack, user, pointed_thing) return function(itemstack, user, pointed_thing)
if itemstack:take_item() ~= nil and user ~= nil then if itemstack:take_item() ~= nil and user ~= nil then
local name = user:get_player_name() local name = user:get_player_name()
if not hunger[name] then if not hunger.players[name] then
return itemstack return itemstack
end end
local sat = tonumber(hunger[name].lvl or 0) local sat = tonumber(hunger.players[name].lvl or 0)
local hp = user:get_hp() local hp = user:get_hp()
-- Saturation -- Saturation
if sat < HUNGER_MAX and hunger_change then if sat < HUNGER_MAX and hunger_change then

View File

@ -1,4 +1,5 @@
hunger = {} hunger = {}
hunger.players = {}
hunger.food = {} hunger.food = {}
HUNGER_TICK = 800 -- time in seconds after that 1 hunger point is taken HUNGER_TICK = 800 -- time in seconds after that 1 hunger point is taken
@ -31,10 +32,10 @@ if minetest.setting_getbool("enable_damage") then
inv:set_size("hunger", 1) inv:set_size("hunger", 1)
local name = player:get_player_name() local name = player:get_player_name()
hunger[name] = {} hunger.players[name] = {}
hunger[name].lvl = hunger.read(player) hunger.players[name].lvl = hunger.read(player)
hunger[name].exhaus = 0 hunger.players[name].exhaus = 0
local lvl = hunger[name].lvl local lvl = hunger.players[name].lvl
if lvl > 20 then if lvl > 20 then
lvl = 20 lvl = 20
end end