Player Module¶
The Player module manages player instances, character data, and account-related operations. It provides both class methods (Player instance methods) and module-level utility functions.
Player Class¶
Instance Properties¶
| Property | Type | Description |
|---|---|---|
source |
number | Player server ID |
accountId |
number | Player account database ID |
charId |
number|nil | Current character database ID |
citizenId |
string|nil | Current character citizen ID |
firstname |
string|nil | Character first name |
lastname |
string|nil | Character last name |
birthdate |
string|nil | Character birthdate |
nationality |
string|nil | Character nationality |
gender |
string|nil | Character gender model |
height |
number | Character height (default: 175) |
phone |
string|nil | Character phone number |
email |
string|nil | Character email address |
faction |
string | Current faction name (default: "unemployed") |
factionRank |
number | Faction rank (0-12) |
money |
number | Character cash money |
bank |
number | Character bank money |
appearance |
string|nil | Character appearance JSON |
position |
string|nil | Character last position JSON |
ownedCompany |
string|nil | Owned company data JSON |
secondCompany |
string|nil | Second company data JSON |
createdAt |
number | Character creation timestamp |
lastLogin |
number | Last login timestamp |
health |
number | Character health |
armor |
number | Character armor |
hunger |
number | Character hunger level (0-100) |
thirst |
number | Character thirst level (0-100) |
inventory |
table|nil | Reference to InventoryCache[charId] |
metadata |
string|nil | Character metadata JSON |
identifiers |
table | Player identifiers (discord, steam, license, ip) |
groups |
table | Player ACE groups |
Player Instance Methods¶
Character Data Management¶
player:loadCharacter(characterData)¶
Loads character data into player instance from database.
Parameters:
- characterData (table): Character data from database
Returns: none
Example:
player:unloadCharacter()¶
Unloads current character and resets all character-related data.
Returns: none
Example:
player:saveCharacter()¶
Saves current character data to database (money, position, health, etc).
Returns: boolean success
Example:
player:getName()¶
Gets player's full name.
Returns: string (format: "FirstName LastName" or "Unknown")
Example:
player:getData()¶
Gets all player data as a table.
Returns: table with all player properties
Example:
Money Management¶
player:addMoney(amount, moneyType)¶
Adds money to player.
Parameters:
- amount (number): Amount to add
- moneyType (string, optional): "cash", "money", or "bank" (default: "cash")
Returns: boolean success
Example:
player:removeMoney(amount, moneyType)¶
Removes money from player (checks if sufficient funds exist).
Parameters:
- amount (number): Amount to remove
- moneyType (string, optional): "cash", "money", or "bank" (default: "cash")
Returns: boolean success
Example:
if player:removeMoney(100, "cash") then
print("Payment successful")
else
print("Insufficient funds")
end
player:getMoney(moneyType)¶
Gets money amount.
Parameters:
- moneyType (string, optional): "cash", "money", or "bank" (default: "cash")
Returns: number amount
Example:
player:setMoney(amount, moneyType)¶
Sets money amount.
Parameters:
- amount (number): Amount to set (negative values clamped to 0)
- moneyType (string, optional): "cash", "money", or "bank" (default: "cash")
Returns: boolean success
Example:
player:saveMoney()¶
Persists money/bank immediately to database.
Returns: none
Example:
Inventory Management¶
player:addInventoryItem(itemName, quantity, metadata)¶
Adds item to player inventory.
Parameters:
- itemName (string): Item name
- quantity (number): Item quantity
- metadata (table, optional): Item metadata
Returns: boolean success
Example:
player:removeInventoryItem(itemName, quantity)¶
Removes item from player inventory.
Parameters:
- itemName (string): Item name
- quantity (number): Item quantity
Returns: boolean success
Example:
player:getInventoryItemCount(itemName)¶
Gets item count in inventory.
Parameters:
- itemName (string): Item name
Returns: number count
Example:
player:getInventoryWeight()¶
Gets player's inventory weight.
Returns: number weight
Example:
player:getInventory()¶
Gets player's full inventory.
Returns: table inventory
Example:
local inventory = player:getInventory()
for itemName, itemData in pairs(inventory) do
print(itemName, itemData.quantity)
end
Weapon Management¶
player:addWeapon(weaponHash, ammo, customName, metadata)¶
Adds weapon to player.
Parameters:
- weaponHash (string): Weapon hash
- ammo (number): Ammo count
- customName (string, optional): Custom weapon name
- metadata (table, optional): Weapon metadata
Returns: boolean success
Example:
player:removeWeapon(weaponHash)¶
Removes weapon from player.
Parameters:
- weaponHash (string): Weapon hash
Returns: boolean success
Example:
player:getWeapons()¶
Gets all weapons.
Returns: table weapons
Example:
local weapons = player:getWeapons()
for _, weapon in ipairs(weapons) do
print(weapon.hash, weapon.ammo)
end
player:equipWeapon(weaponHash)¶
Equips weapon.
Parameters:
- weaponHash (string): Weapon hash
Returns: boolean success
Example:
Character State Management¶
player:setHealth(health)¶
Updates player health.
Parameters:
- health (number): Health value
Returns: none
Example:
player:setArmor(armor)¶
Updates player armor.
Parameters:
- armor (number): Armor value
Returns: none
Example:
player:setHunger(hunger)¶
Updates hunger level (clamped 0-100).
Parameters:
- hunger (number): Hunger value
Returns: none
Example:
player:setThirst(thirst)¶
Updates thirst level (clamped 0-100).
Parameters:
- thirst (number): Thirst value
Returns: none
Example:
player:setJob(jobName)¶
Sets player job.
Parameters:
- jobName (string): Job name
Returns: boolean success
Example:
player:updatePosition(coords, heading)¶
Updates player position.
Parameters:
- coords (table): Player coordinates {x, y, z}
- heading (number, optional): Player heading
Returns: none
Example:
player:fetchAndUpdatePosition()¶
Fetches current position from server and updates player data.
Returns: none
Example:
Group & Permission Management¶
player:addGroup(groupName)¶
Adds player to a group and persists to database.
Parameters:
- groupName (string): Group name (without 'group.' prefix)
Returns: boolean success
Example:
player:removeGroup(groupName)¶
Removes player from a group and persists to database.
Parameters:
- groupName (string): Group name (without 'group.' prefix)
Returns: boolean success
Example:
player:hasGroup(groupName)¶
Checks if player is in a group.
Parameters:
- groupName (string): Group name (without 'group.' prefix)
Returns: boolean hasGroup
Example:
player:saveGroups()¶
Saves groups to database.
Returns: none
Example:
player:loadGroups(accountData)¶
Loads player groups from database and applies ACE permissions.
Parameters:
- accountData (table): Player account data with groups
Returns: none
Example:
Utility Methods¶
player:hasCharacter()¶
Checks if player has a character loaded.
Returns: boolean
Example:
player:kick(reason)¶
Kicks player from server.
Parameters:
- reason (string, optional): Kick reason
Returns: none
Example:
player:remove()¶
Removes player from active players (called on disconnect).
Returns: none
Example:
Module Functions (cv.player namespace)¶
Player Retrieval¶
cv.player.getPlayer(source)¶
Gets player by source.
Parameters:
- source (number): Player server ID
Returns: Player|nil
Example:
local player = cv.player.getPlayer(source)
if player and player:hasCharacter() then
print(player:getName())
end
cv.player.getPlayerByCharId(charId)¶
Gets player by character ID.
Parameters:
- charId (number): Character database ID
Returns: Player|nil
Example:
cv.player.getPlayerByIdentifier(identifierType, identifier)¶
Gets player by identifier.
Parameters:
- identifierType (string): Type ("discord", "steam", "license")
- identifier (string): Identifier value
Returns: Player|nil
Example:
cv.player.getAllPlayers()¶
Gets all active players.
Returns: table
Example:
local players = cv.player.getAllPlayers()
for source, player in pairs(players) do
print(source, player:getName())
end
cv.player.getPlayerCount()¶
Gets count of active players.
Returns: number
Example:
Player Creation & Management¶
cv.player.createPlayer(source, accountData)¶
Creates new player instance (internal use).
Parameters:
- source (number): Player server ID
- accountData (table): Player account data
Returns: Player
Example:
Money Utility Functions¶
cv.player.getMoney(source, moneyType)¶
Gets player money (utility function).
Parameters:
- source (number): Player server ID
- moneyType (string, optional): "cash" or "bank" (default: "cash")
Returns: number
Example:
cv.player.addMoney(source, amount, moneyType)¶
Adds money to player (utility function).
Parameters:
- source (number): Player server ID
- amount (number): Amount to add
- moneyType (string, optional): "cash" or "bank" (default: "cash")
Returns: boolean success
Example:
cv.player.removeMoney(source, amount, moneyType)¶
Removes money from player (utility function).
Parameters:
- source (number): Player server ID
- amount (number): Amount to remove
- moneyType (string, optional): "cash" or "bank" (default: "cash")
Returns: boolean success
Example:
Events¶
playerDropped¶
Triggered when a player disconnects.
Example:
AddEventHandler('playerDropped', function(reason)
local src = source
local player = cv.player.getPlayer(src)
if player then
print(player:getName() .. " disconnected")
end
end)
cv_framework:server:Shutdown¶
Triggered during server shutdown to save all player data.
Auto-Save¶
Players are automatically saved every 5 minutes with position updates, and when the server shuts down or the resource stops.
Usage Example¶
-- Get player
local player = cv.player.getPlayer(source)
if not player or not player:hasCharacter() then
return print("No character loaded")
end
-- Money operations
print("Cash:", player:getMoney("cash"))
player:addMoney(100, "cash")
player:removeMoney(50, "bank")
-- Inventory operations
player:addInventoryItem("water", 1)
local count = player:getInventoryItemCount("water")
print("Water bottles:", count)
-- Character state
player:setHealth(100)
player:setHunger(80)
player:setThirst(70)
-- Save player data
player:saveCharacter()
Using cvPlayer in external resources¶
This page shows how to get and use the cvPlayer object with:
Get cv object¶
Get cvPlayer object¶
Get by source (most common)¶
local src = source
local player = cv.player.getPlayer(src)
if not player or not player.charId then
return
end
Get by character id¶
Get by identifier¶
local player = cv.player.getPlayerByIdentifier("license", licenseIdentifier)
-- supported keys in identifiers table are usually: discord, steam, license, ip
Important check¶
Always validate character context before using character data:
cvPlayer attributes¶
These are available on player (server-side):
player.source(number) - server idplayer.accountId(number) - account row id (players.id)player.charId(number|nil) - active character id (characters.id)player.citizenId(string|nil)player.firstname(string|nil)player.lastname(string|nil)player.birthdate(string|nil)player.nationality(string|nil)player.gender(string|nil)player.height(number)player.phone(string|nil)player.email(string|nil)player.faction(string)player.factionRank(number)player.money(number) - cashplayer.bank(number) - bank balanceplayer.appearance(string|nil)player.position(string|nil JSON)player.ownedCompany(string|nil)player.secondCompany(string|nil)player.createdAt(string|nil)player.lastLogin(string|nil)player.health(number)player.armor(number)player.hunger(number)player.thirst(number)player.inventory(table|nil)player.metadata(string|nil)player.identifiers(table)player.groups(table)
cvPlayer methods¶
Identity / state¶
player:getName()player:hasCharacter()player:getData()player:loadCharacter(characterData)player:unloadCharacter()player:saveCharacter()
Money (cash/bank)¶
player:getMoney(moneyType)wheremoneyTypeis"cash"/"money"or"bank"player:addMoney(amount, moneyType)player:removeMoney(amount, moneyType)player:setMoney(amount, moneyType)player:saveMoney()
Examples:
local cash = player:getMoney("cash")
local bank = player:getMoney("bank")
player:addMoney(500, "cash")
player:addMoney(1000, "bank")
local ok = player:removeMoney(250, "bank")
if not ok then
-- not enough bank balance
end
Direct fields are also readable:
Character vitals¶
player:setHealth(health)player:setArmor(armor)player:setHunger(hunger)player:setThirst(thirst)
Position¶
player:updatePosition(coords, heading)player:fetchAndUpdatePosition()
Inventory¶
player:addInventoryItem(itemName, quantity, metadata)player:removeInventoryItem(itemName, quantity)player:getInventoryItemCount(itemName)player:getInventoryWeight()player:getInventory()
Weapons¶
player:addWeapon(weaponHash, ammo, customName, metadata)player:removeWeapon(weaponHash)player:getWeapons()player:equipWeapon(weaponHash)
Groups / permissions¶
player:loadGroups(accountData)player:addGroup(groupName)player:removeGroup(groupName)player:hasGroup(groupName)player:saveGroups()
Other¶
player:setJob(jobName)player:kick(reason)player:remove()
cv.player namespace helpers¶
These are called from cv.player directly:
cv.player.getPlayer(source)cv.player.getPlayerByCharId(charId)cv.player.getPlayerByIdentifier(identifierType, identifier)cv.player.getAllPlayers()cv.player.getPlayerCount()cv.player.getMoney(source, moneyType)cv.player.getMoneyByType(playerOrSource, moneyType)cv.player.addMoney(source, amount, moneyType)cv.player.addMoneyByType(playerOrSource, amount, moneyType)cv.player.removeMoney(source, amount, moneyType)cv.player.removeMoneyByType(playerOrSource, amount, moneyType)
Example helpers:
local bank = cv.player.getMoney(source, "bank")
local ok = cv.player.removeMoney(source, 500, "cash")
Minimal full example¶
local cv = exports["cv_framework"]:loadModule()
RegisterNetEvent("example:payFee", function(amount)
local src = source
local player = cv.player.getPlayer(src)
if not player or not player.charId then return end
amount = math.floor(tonumber(amount) or 0)
if amount <= 0 then return end
local success = player:removeMoney(amount, "bank")
if success then
cv.notify(src, "Bank", ("$%d wurden abgebucht"):format(amount), "success")
else
cv.notify(src, "Bank", "Nicht genug Guthaben", "error")
end
end)