server/main.lua
Initiallisez la faction au joueur au joueur qui ce connecte
Query :
Au début de votre fichier vous avez cette variable :
local loadPlayer = 'SELECT `accounts`, `job`, `job_grade`, `group`, `position`, `inventory`, `skin`, `loadout`'
Remplacez là par celle-ci :
local loadPlayer = 'SELECT `accounts`, `job`, `job_grade`, `faction`, `faction_grade`, `group`, `position`, `inventory`, `skin`, `loadout`'
Les boucles:
💡Savez vous que ...Vous pouvez chercher toute les boucles dans votre editeur de texte via
ctrl+f
copié :while not next(ESX.Jobs) do
et remplacer par ceci :while not next(ESX.Jobs) and not next(ESX.Factions) do
Cherchez dans le fichier toute les boucles ci-dessous :
while not next(ESX.Jobs) do
Wait(50)
endEt remplacez les par ceci :
while not next(ESX.Jobs) and not next(ESX.Factions) do
Wait(50)
end
Dans la function
function loadESXPlayer(identifier, playerId, isNew)
Table userData
Remplacez la variable
local userData = {accounts = {}, inventory = {}, job = {}, loadout = {}, playerName = GetPlayerName(playerId), weight = 0}
Par celle ci :
local userData = {accounts = {}, inventory = {}, job = {}, faction = {}, loadout = {}, playerName = GetPlayerName(playerId), weight = 0}
Variable (faction, gradef, factionObject, gradefObject)
En dessous de :
local job, grade, jobObject, gradeObject = result.job, tostring(result.job_grade)
Ajoutez ceci :
local faction, gradef, factionObject, gradefObject = result.faction, tostring(result.faction_grade)
Charger la faction object pour le player object
Au dessus de :
-- Job
if ESX.DoesJobExist(job, grade) then
jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade]
else
print(('[^3WARNING^7] Ignoring invalid job for ^5%s^7 [job: ^5%s^7, grade: ^5%s^7]'):format(identifier, job, grade))
job, grade = 'unemployed', '0'
jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade]
endAjoutez ceci :
--Faction
if ESX.DoesFactionExist(faction, gradef) then
factionObject, gradefObject = ESX.Factions[faction], ESX.Factions[faction].grades[gradef]
else
print(('[^3WARNING^7] Ignoring invalid faction for %s [faction: %s, grade: %s]'):format(identifier, faction, gradef))
faction, gradef = 'nofaction', '0'
factionObject, gradefObject = ESX.Factions[faction], ESX.Factions[faction].grades[gradef]
end
userData.faction.id = factionObject.id
userData.faction.name = factionObject.name
userData.faction.label = factionObject.label
userData.faction.grade = tonumber(gradef)
userData.faction.grade_name = gradefObject.name
userData.faction.grade_label = gradefObject.label
userData.faction.grade_salary = gradefObject.salary
userData.faction.skin_male = {}
userData.faction.skin_female = {}
if gradefObject.skin_male then
userData.faction.skin_male = json.decode(gradefObject.skin_male)
end
if gradefObject.skin_female then
userData.faction.skin_female = json.decode(gradefObject.skin_female)
end
Ajoutez l'object faction sur la création du player objet
Trouvez cette variable :
local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, userData.weight, userData.job, userData.loadout, userData.playerName, userData.coords)
Puis remplacez là par celle-ci :
local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, userData.weight, userData.job, userData.faction, userData.loadout, userData.playerName, userData.coords)
Envoyez le player objet au client (ESX.PlayerData)
Trouvez la function ci-dessous :
xPlayer.triggerEvent('esx:playerLoaded',
{
accounts = xPlayer.getAccounts(),
coords = xPlayer.getCoords(),
identifier = xPlayer.getIdentifier(),
inventory = xPlayer.getInventory(),
job = xPlayer.getJob(),
loadout = xPlayer.getLoadout(),
maxWeight = xPlayer.getMaxWeight(),
money = xPlayer.getMoney(),
sex = xPlayer.get("sex") or "m",
firstName = xPlayer.get("firstName") or "John",
lastName = xPlayer.get("lastName") or "Doe",
dateofbirth = xPlayer.get("dateofbirth") or "01/01/2000",
height = xPlayer.get("height") or 120,
dead = false
}, isNew, userData.skin)Remplacez là par celle-ci :
xPlayer.triggerEvent('esx:playerLoaded',
{
accounts = xPlayer.getAccounts(),
coords = xPlayer.getCoords(),
identifier = xPlayer.getIdentifier(),
inventory = xPlayer.getInventory(),
job = xPlayer.getJob(),
faction = xPlayer.getFaction(),
loadout = xPlayer.getLoadout(),
maxWeight = xPlayer.getMaxWeight(),
money = xPlayer.getMoney(),
sex = xPlayer.get("sex") or "m",
firstName = xPlayer.get("firstName") or "John",
lastName = xPlayer.get("lastName") or "Doe",
dateofbirth = xPlayer.get("dateofbirth") or "01/01/2000",
height = xPlayer.get("height") or 120,
dead = false
}, isNew, userData.skin)
Vous pouvez modifier la function callback par défaut
Cherchez la fonction
ESX.RegisterServerCallback('esx:getOtherPlayerData', function(source, cb, target)
et Remplacez là par celle-ciESX.RegisterServerCallback('esx:getOtherPlayerData', function(source, cb, target)
local xPlayer = ESX.GetPlayerFromId(target)
cb({identifier = xPlayer.identifier, accounts = xPlayer.getAccounts(), inventory = xPlayer.getInventory(), job = xPlayer.getJob(), faction = xPlayer.getFaction(), loadout = xPlayer.getLoadout(), money =xPlayer.getMoney(), position = xPlayer.getCoords(true)})
end)Cherchez la fonction
ESX.RegisterServerCallback('esx:getPlayerData', function(source, cb)
et Remplacez là par celle-ciESX.RegisterServerCallback('esx:getPlayerData', function(source, cb)
local xPlayer = ESX.GetPlayerFromId(target)
cb({identifier = xPlayer.identifier, accounts = xPlayer.getAccounts(), inventory = xPlayer.getInventory(), job = xPlayer.getJob(), faction = xPlayer.getFaction(), loadout = xPlayer.getLoadout(), money =xPlayer.getMoney(), position = xPlayer.getCoords(true)})
end)