Pular para o conteúdo principal

OnPlayerTakeDamage

Descrição

Esta callback é chama quando algum jogador recebe dano.

NomeDescreição
playeridO ID do jogador que recebeu determinado dano.
issueridO ID do jogador que causou o dano. INVALID_PLAYER_ID se o dano for auto-infligido.
Float:amountA quantidade de dano total que o jogador recebey (vida e colete combinados).
WEAPON:weaponidO ID da arma/razão do determinado dano.
bodypartA Parte do Corpo que foi atingida.

Retornos

1 - A Callback não será chamada em outros filterscripts.

0 - Permite que esta Callback seja chamada em outro filterscript.

Sempre é chamada primeiro em filterscripts, portanto retornar 1 bloqueará que outro filterscript a veja.

Exemplos

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, WEAPON:weaponid, bodypart)
{
if (issuerid != INVALID_PLAYER_ID) // Caso não seja auto-infligido
{
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 causou %.0f de dano ao jogador %s, arma: %s, parte do corpo: %d", attackerName, amount, victimName, weaponName, bodypart);
SendClientMessageToAll(-1, infoString);
}
return 1;
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, WEAPON:weaponid, bodypart)
{
if (issuerid != INVALID_PLAYER_ID && weaponid == 34 && bodypart == 9)
{
// Um tiro na cabeça para eliminar o jogador
SetPlayerHealth(playerid, 0.0);
}
return 1;
}

Notas

dica

O ID da arma retornará 37 (Lança Chamas) para qualquer fonte que utilize fogo (EX: Molotov). O ID da arma retornará 51 para qualquer fonte que utilize explosões (EX: RPG, granada). 'playerid' é o único que pode chamar esta callback. A quantidade (amount) sempre será o valor máximo do dano que tal arma (weaponid) pode causar, mesmo quando a vida restante é menor do que o dano máximo. Então quando alguém tem 100.0 de vida e é atingido por uma Desert Eagle, que possui um dano total de 46.2, será necessário 3 tiros para matar o jogador. Todos os 3 tiros causarão 46.2 de dano, mesmo que a vida restante do jogador seja apenas de 7.6 após dois tiros.

atenção

GetPlayerHealth e GetPlayerArmour retornarão as quantidades específicas anteriores a chamada desta callback. Sempre verifique se o ID do jogador que causou o dano (issuerid) é válido antes de usá-lo como index de uma array.