in setElementData and getElementData functions you're using the "player" variable which is not defined in the code. In the for loop where you set the element data for the player's hunger you not specified the value that has to be set. Im cleaned your code a little bit. Try it, please. Hope it works.
local db = dbConnect("mysql", "dbname=test; host=127.0.0.1;charset=utf8", "root", "", "share=0")
-- This function loads the player's data from the database
function loadPlayerData(player)
-- Load the player's data from the database
local query = dbQuery(db, "SELECT * FROM players WHERE serial = ?", getPlayerSerial(player))
local result = dbPoll(query, -1)
-- If loading the data failed, use default values
if not result or #result == 0 then
setElementData(player, "money", getPlayerMoney(player))
setElementData(player, "hunger", 100)
else
setElementData(player, "money", result[1].money)
setElementData(player, "hunger", result[1].hunger)
end
end
-- This function saves the player's data to the database
function savePlayerData(player)
local money = getPlayerMoney(player)
local hunger = getElementData(player, "hunger")
-- Save the player's data to the database
local query = dbQuery(db, "REPLACE INTO players (serial, money, hunger) VALUES (?, ?, ?)", getPlayerSerial(player), money, hunger)
dbFree(query)
end
-- Function to return the player's hunger value
function getPlayerHunger(player)
return getElementData(player, "hunger")
end
-- Load the player's data when they join the server
addEventHandler("onPlayerJoin", root, function()
loadPlayerData(source)
end)
-- Save the player's data when they quit the server
addEventHandler("onPlayerQuit", root, function()
savePlayerData(source)
end)
-- Save the player's data when a parameter is changed
addEventHandler("onElementDataChange", root, function(dataName)
if dataName == "money" or dataName == "hunger" then
savePlayerData(source)
end
end)