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

View File

@ -1,4 +1,5 @@
hunger = {}
hunger.players = {}
hunger.food = {}
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)
local name = player:get_player_name()
hunger[name] = {}
hunger[name].lvl = hunger.read(player)
hunger[name].exhaus = 0
local lvl = hunger[name].lvl
hunger.players[name] = {}
hunger.players[name].lvl = hunger.read(player)
hunger.players[name].exhaus = 0
local lvl = hunger.players[name].lvl
if lvl > 20 then
lvl = 20
end