Incident avec Double Job sur es_extended

Bonjour !

J’ai un problème avec mon es_extended !

J’ai pris le partis risqué de modifier moi même mon ESX afin d’ajouter des fonctionnalités non disponible de base, et étonnamment après avoir terminer tout ce qu’il fallait faire pour que le double job marche j’ai cette erreur qui apparaît uniquement à la première sauvegarde du joueur :thinking:

[MySQL:8.0.24] [ERROR] [es_extended] An error happens for query "UPDATE users SET accounts = ?, job = ?, job_grade = ?, org = ?, org_grade = @org_grade, `group` = ?, loadout = ?, position = ?, inventory = ? WHERE identifier = ? : ["{\"money\":605,\"bank\":989856500,\"black_money\":0}","police",0,"cartel","superadmin","{\"WEAPON_SMG\":{\"ammo\":14},\"WEAPON_PISTOL\":{\"ammo\":211}}","{\"y\":1144.3,\"z\":113.7,\"heading\":70.2,\"x\":1358.8}","{\"lighter\":1,\"phone\":1}","ca4eaa8cb5cfef33081b1603e0922097017491ad"]": ER_BAD_NULL_ERROR: Column 'org_grade' cannot be null

J’ai vérifier un peux partout d’où cela pourrais venir mais je ne trouve vraiment pas :frowning:

Je vous laisse un extrait de mon es_extended/server/function.lua ainsi que es_extended/server/classes/player.lua

es_extended/server/function.lua

function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, weight, job, org, loadout, name, coords)

-- ...

self.org = org

-- ...

self.getOrg = function()
	return self.org
end

-- ...

self.setOrg = function(org, org_grade)
	org_grade = tostring(org_grade)
	local lastOrg = json.decode(json.encode(self.org))

	if ESX.DoesOrgExist(org, org_grade) then
		local orgObject, orgGradeObject = ESX.Orgs[org], ESX.Orgs[org].grades[org_grade]

		self.org.id    = orgObject.id
		self.org.name  = orgObject.name
		self.org.label = orgObject.label

		self.org.grade        = tonumber(org_grade)
		self.org.grade_name   = orgGradeObject.name
		self.org.grade_label  = orgGradeObject.label
		self.org.grade_salary = orgGradeObject.salary

		if orgGradeObject.skin_male then
			self.org.skin_male = json.decode(orgGradeObject.skin_male)
		else
			self.org.skin_male = {}
		end

		if orgGradeObject.skin_female then
			self.org.skin_female = json.decode(orgGradeObject.skin_female)
		else
			self.org.skin_female = {}
		end

		TriggerEvent('esx:setOrg', self.source, self.org, lastOrg)
		self.triggerEvent('esx:setOrg', self.org)
	else
		print(('[es_extended] [^3WARNING^7] Ignoring invalid .setOrg() usage for "%s"'):format(self.identifier))
	end
end

es_extended/server/classes/player.lua

-- ...

ESX.SavePlayer = function(xPlayer, cb)
	local asyncTasks = {}

	table.insert(asyncTasks, function(cb2)
		MySQL.Async.execute('UPDATE users SET accounts = @accounts, job = @job, job_grade = @job_grade, org = @org, org_grade = @org_grade, `group` = @group, loadout = @loadout, position = @position, inventory = @inventory WHERE identifier = @identifier', {
			['@accounts'] = json.encode(xPlayer.getAccounts(true)),
			['@job'] = xPlayer.job.name,
			['@job_grade'] = xPlayer.job.grade,
			['@org'] = xPlayer.org.name,
			['@org_grade'] = xPlayer.org.grade,
			['@group'] = xPlayer.getGroup(),
			['@loadout'] = json.encode(xPlayer.getLoadout(true)),
			['@position'] = json.encode(xPlayer.getCoords()),
			['@identifier'] = xPlayer.getIdentifier(),
			['@inventory'] = json.encode(xPlayer.getInventory(true))
		}, function(rowsChanged)
			cb2()
		end)
	end)

	Async.parallel(asyncTasks, function(results)
		print(('[es_extended] [^2INFO^7] Saved player "%s^7"'):format(xPlayer.getName()))

		if cb then
			cb()
		end
	end)
end


ESX.SavePlayers = function(cb)
	local xPlayers, asyncTasks = ESX.GetPlayers(), {}

	for i=1, #xPlayers, 1 do
		table.insert(asyncTasks, function(cb2)
			local xPlayer = ESX.GetPlayerFromId(xPlayers[i])
			ESX.SavePlayer(xPlayer, cb2)
		end)
	end

	Async.parallelLimit(asyncTasks, 8, function(results)
		print(('[es_extended] [^2INFO^7] Saved %s player(s)'):format(#xPlayers))
		if cb then
			cb()
		end
	end)
end

Bonsoir,

Dans votre base de donné, dans users et dans la structure il faut mettre une valeur a org_grades. La valeur ne peux pas être nul = vide

Merci, Cordialement

Bonjour, Es-tu sous extended v1 final? Si oui, veux-tu bien me donner quelques conseils pour ajouter le double job car étant débutant… modifier l’es_extended est quelque chose qui me fait un peu peur à vrai dire… Merci d’avance! Cordialement.

Bonjour !

Oui j’ai pus réglé le soucis que je rencontrais :slight_smile: je suis revenus en arrière sur quelques modification et ai remarqué que je m’était complètement trompé sur toute la ligne à un endroit :sweat_smile:

Quelques conseil serait :

Toujours faire des sauvegarde de ton travail et essayer sur (si possible) un serveur de développement

→ Faire attention à TOUT les détails quel qu’ils soit

→ Ne jamais partir du principe que tout est OK, tu aura toujours une erreur quelque part :sweat_smile:

→ Et bien lire le code et le comprendre, il faut vraiment savoir comme une ressource marche avant de s’inventer bidouilleur sur ce dernier !

1 J'aime

Re!

Tout d’abord merci pour tous ces précieux conseils!

Je ne pense être loin de réussir à faire passer mon extended v1 final en double job (org) mais je bloque sur quelque chose que j’ai du mâl à maitriser, il s’agit du SQL.

La seule erreur que tu avais était en rapport avec ta base de données, rien d’autres à tout hasard?

Je m’excuse de te demander cela, mais voudrais-tu bien me partager le tien par hasard? Etant donné que toi aussi tu l’as fais en org, je me dis que qui ne tente rien n’a rien donc…

Je te remercie d’avance!

Une agréable soirée à toi.

Cordialment.

Salut !

Ouais si bien-sûr voilà ci-dessous :smiley:

CREATE TABLE IF NOT EXISTS `org` (
  `name` varchar(50) NOT NULL,
  `label` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40000 ALTER TABLE `org` DISABLE KEYS */;
INSERT INTO `org` (`name`, `label`) VALUES
	('vagos', 'Vagos'),
	('ballas', 'Ballas'),
	('cartel', 'Cartel'),
	('mafia', 'Mafia'),
	('none', 'Civil');
/*!40000 ALTER TABLE `org` ENABLE KEYS */;

CREATE TABLE IF NOT EXISTS `org_grades` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `org_name` varchar(255) DEFAULT NULL,
  `grade` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `label` varchar(255) NOT NULL,
  `skin_male` longtext NOT NULL DEFAULT '{}',
  `skin_female` longtext NOT NULL DEFAULT '{}',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4;

/*!40000 ALTER TABLE `org_grades` DISABLE KEYS */;
INSERT INTO `org_grades` (`id`, `org_name`, `grade`, `name`, `label`, `skin_male`, `skin_female`) VALUES
	(1, 'none', 0, 'none', 'Sans activité', '{}', '{}'),
	(2, 'ballas', 0, 'recruit', 'Recrue', '{}', '{}'),
	(3, 'ballas', 1, 'novice', 'Membre', '{}', '{}'),
	(4, 'ballas', 2, 'confirmed', 'Bras droit', '{}', '{}'),
	(5, 'ballas', 3, 'boss', 'Boss', '{}', '{}'),
	(6, 'vagos', 0, 'recruit', 'Recrue', '{}', '{}'),
	(7, 'vagos', 1, 'novice', 'Membre', '{}', '{}'),
	(8, 'vagos', 2, 'confirmed', 'Bras droit', '{}', '{}'),
	(9, 'vagos', 3, 'boss', 'Boss', '{}', '{}'),
	(20, 'mafia', 0, 'recruit', 'Recrue', '{}', '{}'),
	(21, 'mafia', 1, 'novice', 'Membre', '{}', '{}'),
	(22, 'mafia', 2, 'confirmed', 'Concigliere', '{}', '{}'),
	(23, 'mafia', 3, 'officer', 'Capo', '{}', '{}'),
	(24, 'mafia', 4, 'sergeant', 'Sergent', '{}', '{}'),
	(25, 'mafia', 5, 'lieutenant', 'Lieutenant', '{}', '{}'),
	(26, 'mafia', 6, 'boss', 'Don', '{}', '{}'),
	(27, 'cartel', 0, 'recruit', 'Recrue', '{}', '{}'),
	(28, 'cartel', 1, 'novice', 'Homme de main', '{}', '{}'),
	(29, 'cartel', 2, 'confirmed', 'Membre', '{}', '{}'),
	(30, 'cartel', 3, 'officer', 'Capo', '{}', '{}'),
	(31, 'cartel', 4, 'sergeant', 'Sergent', '{}', '{}'),
	(32, 'cartel', 5, 'lieutenant', 'Lieutenant', '{}', '{}'),
	(33, 'cartel', 6, 'boss', 'El Patron', '{}', '{}');
/*!40000 ALTER TABLE `org_grades` ENABLE KEYS */;

Et pour finir dans ta table users ajoute deux colonnes la première :

→ org

et la deuxièle

→ org_grade

Et

Voilà

Monsieur

Bone courage :smiley:

1 J'aime

Je n’étais vraiment pas loin, nice!

Merci beaucoup pour ton aide.

Bon courage à toi aussi!

1 J'aime

Franchement pas de soucis :smiley:

1 J'aime