Bonsoir 4L3X76 ( alex76 c'est ça ? :D )
L'idée est intéressante, et en regardant un peut tous les events, j'ai trouvé cette event:
onClientPlayerWeaponFirePour l'instant, je ne vois que cette event comme solution car dans les arguments qu'elle envoie, il y a ceci:
hitElement: an element which was hit by a shot.
C'est du client-side par contre donc le plus simple c'est de vérifier si
hitElement est un véhicule, et si la source de cette event est le joueur local ( getLocalPlayer() ) et si c'est le cas, il faut faire un
triggerServerEvent( maFonction, getLocalPlayer(), hitElement).
/!\ Voir EDIT à la fin de ce post /!\INFO: j'ai mit getLocalPlayer() en tant que source de cette event car getLocalPlayer() permet de récupérer le joueur
Si je résume, pour chaque joueur qui va tirer sur un véhicule, il ( le joueur ) va dire à la fonction côté serveur:
"Ah tiens, je viens d’endommager ce véhicule"
Maintenant, il faut que la fonction côté serveur dise quelquechose du genre:
"Ok, je te mets en tant que dernier joueur ayant endommager ce véhicule."
Et que plus tard, dès qu'un véhicule explose, une fonction qui reçoit le "
onVehicleExplode", aille vérifier quel était le dernier joueur à avoir endommager ce véhicule.
"Ok une voiture vient d'exploser, je vérifie qui était le dernier joueur à avoir endommager le véhicule, je vérifie si c’était un véhicule allié ou ennemi et je lui donne ou enlève des points en conséquences"
donc dans ta fonction maFonction( vehicleHited ), tu peux faire un
setElementData(vehicleHited, "lastAttacker", source)
Info: la variable source est une variable créer par ton triggerServerEvent qui contient le joueur ( car on l'a mit en source de ce triggerServerEvent )
Là, on vient de faire:
"Ok, je te mets en tant que dernier joueur ayant endommagé ce véhicule."
ensuite:
fonction monAutreFonction()
local theVehicle = source
local lastAttacker = getElementData( theVehicle, "lastAttacker" )
if ( getElementType( lastAttacker ) == "player" ) then
if ( )then -- verifier si c'est un ennemie ou un allié par rapport à l’attaqueur
-- lui donner ses points
else
-- lui en enlever
end
end
addEventHandler( "onVehicleExplode", getRootElement(), monAutreFonction )
Et la on vient de faire:
"Ok une voiture vient d'exploser, je vérifie qui était le dernier joueur à avoir endommager le véhicule, je vérifie si c’était un véhicule allié ou ennemi et je lui donne ou enlève des points en conséquences"
Voilà je peux pas plus détaillé pour ce soir, je te laisse tester tout ça et si tu as des problèmes n'hésite pas.
A plus !
Citizen
EDIT: En réfléchissant un peu plus ce matin, on peut y apporter un légère modification qui va nous permettre de supprimer notre notre
triggerServerEvent et la fonction
maFonction()Au lieu que ce soit le serveur qui dit qui à touché le véhicule en dernier, ça va être le joueur lui-même ( donc en client-side ) qui va dire au véhicule:
Je t'ai touché en dernier
Pour cela, il suffit de remplacer le
triggerServerEvent( maFonction, getLocalPlayer(), hitElement)
par
setElementData(hitElement, "lastAttacker", source)
car le
setElementData est synchronisé entre le serveur et le client donc notre
getElementData dans
monAutreFonction fonctionnera très bien ;)
NOTE: ce code ne marchera que pour les armes à balles, ça ne marchera pas avec lances roquettes et autres armes explosifs :(
Il faudra un autre bout de code pour cela.
Bon codage !