[ESX SNIPPET] Suppression puissante de véhicule blacklist

De retour !

Je vous partage la un petit snippet à rajouter dans vos AntiCheat pour une suppression puissante et rapide de véhicule blacklist.

Pour commencer, je crée se poste car les AntiCheat déjà existant qui son sensé supprimé les véhicule que l’on BlackList son fonctionnel à 50%, je m’explique:

Tout ceux que j’ai vue utilise la Native GetClosestVehicle() qui est en théorie sensé donné le véhicule le plus proche pour pouvoir ensuite faire une vérification dessus pour savoir si oui, ou non le véhicule est blacklist.
Le problème avec cette Native est qu’elle n’est pas puissante du tout, pour commencer il est bien écrit dans la docs de la Native qu’elle ne prends pas en compte les véhicules de service ( EMS / LSPD ) ainsi que les hélico. Ensuite suivant le flag utiliser, la plus part du temps les avions ne seront pas pris en compte non plus … et forcement qu’es que les moddeurs utilise le plus … des avions.

Informations de la Native tiré de la Docs Native FiveM

**> modelHash: Limit to vehicles with this model. 0 for any. **
**> flags: The bitwise flags altering the function’s behaviour. **
**> Does not return police cars or helicopters. **
**> It seems to return police cars for me, does not seem to return helicopters, planes or boats for some reason **
**> Only returns non police cars and motorbikes with the flag set to 70 and modelHash to 0. ModelHash seems to always be 0 when not a modelHash in the scripts, as stated above. **
**> These flags were found in the b617d scripts: 0,2,4,6,7,23,127,260,2146,2175,12294,16384,16386,20503,32768,67590,67711,98309,100359. **
**> Converted to binary, each bit probably represents a flag as explained regarding another native here: gtaforums.com/topic/822314-guide-driving-styles **
**> Conversion of found flags to binary: pastebin.com/kghNFkRi **
**> At exactly 16384 which is 0100000000000000 in binary and 4000 in hexadecimal only planes are returned. **
**> It’s probably more convenient to use worldGetAllVehicles(int *arr, int arrSize) and check the shortest distance yourself and sort if you want by checking the vehicle type with for example VEHICLE::IS_THIS_MODEL_A_BOAT **
**> ------------------------------------------------------------------------- **
> Conclusion: This native is not worth trying to use. Use something like this instead: pastebin.com/xiFdXa7h

Cependant en utilisant ESX une alternative s’offre à nous !
ESX.Game.GetVehiclesInArea(coords, radius)

Cette fonction d’ESX nous donne une table de véhicule dans le radius ( Rayon d’action ) qu’on aura configurer, et cette fonction prends bien en compte TOUT les véhicules !

ATTENTION CEPENDANT !
L’utilisation de cette variable dans une boucle prends beaucoup de ressource suivant le nombre de véhicule qu’il y aura autour de votre position, je ne commanderais pas cette utilisation sur un serveur avec PNJ !

Création de notre liste de véhicule à blacklist :
( à vous de mettre les véhicules que vous voulez )

ListeBlackList= {
	"RHINO",
	"BLIMP",
	"BLIMP2",
	"CARGOPLANE",
	"DODO",
	"JET",
	"MILJET",
	"CARGOBOB",
	"TITAN"
}

Création de la boucle qui vas vérifier les véhicules



Citizen.CreateThread(function()

	while true do
		Wait(1000) -- 1000 Tick = une vérification chaque seconde

		playerPed = GetPlayerPed(-1)
		if playerPed then
			VerifVehicule(GetVehiclePedIsIn(playerPed, false)) -- Vérification du véhicule dans le quels le joueurs se trouve, assez inutile en soit vous pouvez la retirer

			coords = GetEntityCoords(playerPed, true)
			for _, blacklistedCar in pairs(ListeBlackList) do -- On fait donc une vérification sur nos véhicule blacklist
				local voiture = ESX.Game.GetVehiclesInArea(coords, 350) -- On utilise la variable ESX, 350 est le rayon d'action, plus gros risque de causer de trop grosse monté en MS du script, faite vos test !
				for _, voiture in pairs(voiture) do -- Et enfin vérification de la table !
					VerifVehicule(voiture)
				end
			end
		end
	end
end)

Création de la function de vérification des véhicules :

function VerifVehicule(voiture)
	if voiture then -- Vérif que la fonction de soit pas trigger sans argument
		ModeleVoiture = GetEntityModel(voiture) 

		if isListeBlackListed(ModeleVoiture ) then -- On vérifie si le véhicule est blacklist
			_DeleteEntity(voiture) -- Si oui, on le delete
		end
	end
end

Voila !
Bien prends en compte que la méthode est très puissante MAIS rapidement gourmand en performance si le nombre de véhicule est important, donc à vous de l’adapter pour votre serveur, faite des test avant !

~ Ruby

2 J'aimes