OnPlayerUpdate FR
From SA-MP Wiki
Page d'Accueil | Les Fonctions | Les Callbacks | Les bases du Scripting | Plugins de Serveur | Tutoriaux
Ne prenez pas en compte les FR dans les noms
Description:
Cette callback est appelée à chaque fois qu'un client/joueur modifie son status auprès du serveur. Elle est souvent utilisée pour créer des callbacks personnalisées qui ne sont pas présentes nativement, telle que le changement de vie, d'armure ou le changement d'arme.
(playerid)
playerid | ID du joueur ayant envoyé un paquet au serveur |
Retourne:
- 0 - La mise à jour du joueur ne sera pas appliquée aux autres joueurs.
- 1 - Indique que la mise à jour peut être traité de façon normale et envoyé aux autres joueurs.
Example: Créer votre propre callback - OnPlayerChangeWeapon(playerid, oldweapon, newweapon)
public OnPlayerUpdate(playerid) { new iCurWeap = GetPlayerWeapon(playerid); // Retourne l'arme actuelle du joueur if(iCurWeap != GetPVarInt(playerid, "iCurrentWeapon")) // S'il l'arme à changer depuis la dernière mise à jour { // Appelons une callback nommée OnPlayerChangeWeapon OnPlayerChangeWeapon(playerid, GetPVarInt(playerid, "iCurrentWeapon"), iCurWeap); SetPVarInt(playerid, "iCurrentWeapon", iCurWeap);//Met à jour la variable arme du joueur } return 1; // Envoi de la mise à jour à tous les joueurs. } stock OnPlayerChangeWeapon(playerid, oldweapon, newweapon) { new s[128], oWeapon[24], nWeapon[24]; GetWeaponName(oldweapon, oWeapon, sizeof(oWeapon)); GetWeaponName(newweapon, nWeapon, sizeof(nWeapon)); format(s, sizeof(s), "Vous avez changé votre arme de %s à %s!", oWeapon, nWeapon); SendClientMessage(playerid, 0xFFFFFFFF, s); }
L'exemple si dessus montre comment vous pouvez créer facilement vos propres callbacks. (Note: vous pourriez améliorer l'exemple en réinitialisant la variable iCurrentWeapon à la connexion du joueur (OnPlayerConnect) et ne pas oublier de déclarer OnPlayerChangeWeapon (forward))
Example: Suivre les changements de vie d'un joueur
public OnPlayerUpdate(playerid) { new Float:fHealth; GetPlayerHealth(playerid, fHealth); if(fHealth != GetPVarFloat(playerid, "faPlayerHealth")) { // La vie du joueur a changé depuis la dernière mise à jour, c'est donc bien la mise à jour qui a été envoyée. // Vérifions s'il a perdu ou gagné de la vie (anti-cheat vie ? ;)) if(fHealth > GetPVarFloat(playerid, "faPlayerHealth")) { /* Il a gagné de la vie! Triche? */ } else { /* Il a perdu de la vie! */ } SetPVarFloat(playerid, "faPlayerHealth", fHealth); } }
Le script du dessus peut être utilisé pour détecter la triche sur la vie. Stockez la vie du joueur dans une variable lorsque vous la modifiez, de façon à voir si la valeur a été modifié par un hack (car un hack ne pourra jamais modifier les variables du serveur).