Aller au contenu principal

OnPlayerTakeDamage

Paramètres

Cette callback est appelée lorsqu'un joueur prends des degats..

NomDescription
int playeridL'ID du joueur qui prends les dégats.
int issueridL'ID du joueur qui cause les dégats. Si il vaut INVALID_PLAYER_ID, le joueur les a infligés lui même.
float Float:amountLe montant des dégats reçus (vie et armure combinés).
int WEAPON:weaponidL'ID de l'arme/la raison qui a causé les dégats.
int bodypartLa partie du corps qui s'est faite touchée.

Valeur de retour

1 - Autorise la callback à être utilisée dans un autre script

0 - La callback ne sera pas appelée dans les autres scripts

Elle est toujours appelée en premier dans le gamemode donc retourner 0 dans le gamemode bloquera la callback dans les filterscripts.

Exemples

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, WEAPON:weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID) // Si il ne se les inflige pas lui même
{
new
infoString[128],
weaponName[24],
victimName[MAX_PLAYER_NAME],
attackerName[MAX_PLAYER_NAME];

GetPlayerName(playerid, victimName, sizeof (victimName));
GetPlayerName(issuerid, attackerName, sizeof (attackerName));

GetWeaponName(weaponid, weaponName, sizeof (weaponName));

format(infoString, sizeof(infoString), "%s a proféré %.0f dégats à %s, arme: %s", attackerName, amount, victimName, weaponName);
SendClientMessageToAll(-1, infoString);
}
return 1;
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, WEAPON:weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID && weaponid == 34 && bodypart == 9)
{
//Tirez une fois dans la tête au sniper tue instantanément
SetPlayerHealth(playerid, 0.0);
}
return 1;
}

Astuces

astuce

Le weaponid retournera la raison 37 (lance-flammes) de n'importe quelle source de feu (par exemple molotov, 18).

Le weaponid retournera la raison 51 de n'importe quelle arme qui crée une explosion (par exemple RPG, grenade).

Le montant est toujours le maximum de dégâts que l'arme peut faire, même si la santé restante est inférieure à ce maximum de dégâts. Ainsi, lorsqu'un joueur a 100,0 points de vie et se fait tirer dessus avec un Desert Eagle qui a une valeur de dégâts de 46,2, il faut 3 coups pour tuer ce joueur. Les 3 tirs montreront au final un montant de 46,2, même si lorsque le dernier coup frappe, le joueur n'a plus que 7,6 points de vie.

attention

GetPlayerHealth et GetPlayerArmour renverront les anciens montants du joueur avant cette callback.

Vérifiez toujours si issuerid est valide avant de l'utiliser comme index de tableau.