Portal SAMP
[Ajuda] ANULAR DANO PLAYER - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] ANULAR DANO PLAYER (/showthread.php?tid=462)



ANULAR DANO PLAYER - Woorz - 11/12/2020

Fala rapaziada!

Queria saber como fazer para anular o dano no player que receber um tiro ou qualquer dano.

Alguém sabe família? (Meu sistema de dano está no TakeDamage e GiveDamage)


RE: ANULAR DANO PLAYER - willttoonn - 11/12/2020

A lógica pode ser feita em ambas as callbacks.

Tanto a OnPlayerTakeDamage (quando um jogador recebe dano), quanto na OnPlayerGiveDamage (quando um jogador causa dano).

A lógica é simples. Basta adicionar vida/colete (SetPlayerHealth/SetPlayerArmour) equivalente ao valor de dano que o jogador recebeu. O valor do dano fica na variável damagedid na callback OnPlayerGiveDamage, ou, amount na callback OnPlayerTakeDamage.

Ao devolver a vida/colete que foi perdido no dano, logicamente, esse dano é anulado.

Documentação:
- OnPlayerTakeDamage: https://open.mp/docs/scripting/callbacks/OnPlayerTakeDamage
- OnPlayerGiveDamage: https://open.mp/docs/scripting/callbacks/OnPlayerGiveDamage
- SetPlayerHealth: https://open.mp/docs/scripting/functions/SetPlayerHealth
- SetPlayerArmour: https://open.mp/docs/scripting/functions/SetPlayerArmour


RE: ANULAR DANO PLAYER - Woorz - 11/12/2020

(11/12/2020 21:07)João Pedro Escreveu: A lógica pode ser feita em ambas as callbacks.

Tanto a OnPlayerTakeDamage (quando um jogador recebe dano), quanto na OnPlayerGiveDamage (quando um jogador causa dano).

A lógica é simples. Basta adicionar vida/colete (SetPlayerHealth/SetPlayerArmour) equivalente ao valor de dano que o jogador recebeu. O valor do dano fica na variável damagedid na callback OnPlayerGiveDamage, ou, amount na callback OnPlayerTakeDamage.

Ao devolver a vida/colete que foi perdido no dano, logicamente, esse dano é anulado.

Documentação:
- OnPlayerTakeDamage: https://open.mp/docs/scripting/callbacks/OnPlayerTakeDamage
- OnPlayerGiveDamage: https://open.mp/docs/scripting/callbacks/OnPlayerGiveDamage
- SetPlayerHealth: https://open.mp/docs/scripting/functions/SetPlayerHealth
- SetPlayerArmour: https://open.mp/docs/scripting/functions/SetPlayerArmour

Obrigado por responder meu amigo!

Fiz dessa maneira aqui:



Código:
    if(issuerid != INVALID_PLAYER_ID)//checa se o player é real
    {
        if(HP <= 23.0) //checa se o jogador está com essa vida
        {
            if(PlayerData[playerid][pFeridoCheck] != 0) //checa se ele está ferido mesmo
            {
                SetPlayerHealth(playerid, 23.0); //devolve a vida dele (este valor é a vida do morto)
            }
        }
    }



RE: ANULAR DANO PLAYER - willttoonn - 11/12/2020

Resolvido?


RE: ANULAR DANO PLAYER - Woorz - 11/12/2020

(11/12/2020 22:19)João Pedro Escreveu: Resolvido?

Não amigo. Recebi o dano normal e nem seto o retorno da vida.

(Está no TakeDamage)


RE: ANULAR DANO PLAYER - RodrigoMSR - 12/12/2020

Sem um sistema de dano server-side, você só pode anular dano de tiros entre jogadores com a OnPlayerWeaponShot (retornando 0).

Se quiser anular dano de queda/explosão/fogo/veículos, terá que usar algo como o weapon-config.


RE: ANULAR DANO PLAYER - [NRG]Dark - 12/12/2020

Uma alternativa efetiva é retornar zero (0) na função, quando não deseja que o dano da arma seja concretizado:


Código:
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
      if(Condicional na qual nao quer que a arma cause dano) return 0;

      return 1;
}



RE: ANULAR DANO PLAYER - Woorz - 12/12/2020

Muito Obrigado meus amigos! Deu certo! +Rep