Portal SAMP
[Ajuda] liberar dano com a mesma classe - 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] liberar dano com a mesma classe (/showthread.php?tid=1930)



liberar dano com a mesma classe - fear - 13/12/2021

boa noite. estou procurando a função dentro da include(eu paguei ela não fiz)

tem três classes no servidor policial,ladrão e motovlog

no momento a classe policial não pode matar outro policial oque é o certo..
porém.. eu queria que a classe ladrão pudesse se matar entre si e a classe motovlog não se matasse entre si.. mas não consegui achar a função pra modificar isso.. outro porém o hs pega se policial da hs em policial mata ele mas conta como suicidio teria como bloquear isso no sistema de hs tb??

ONPLAYERGIVEDAMAGE
Código PHP:
public OnPlayerGiveDamage(playeriddamagedidFloat:amountweaponidbodypart)
{
    if(!
IsPlayerPaused(damagedid)) //verifica se o jogador que levou dano não está de esc
    
{
    if(
bodypart == 9)
    {
    if(
hasHS[damagedid] == 0)
    {
    if(
weaponid >= && weaponid <= 18) return 0;
    new 
string[128];
    
format(stringsizeof(string), "** ~> {FFF000}%s{A9A9A9} Você deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
    
SendClientMessage(playerid0xb9eec0AAstring);
    
SetPlayerHealth(damagedid0.0);
    
SetPlayerArmour(damagedid0);
    
hasHS[damagedid] = true;
    }
    }
    }
    if(
IsPlayerPaused(damagedid)) return 0;
    if(!
IsPlayerAutorized_(playerid))
        return 
0;
    
    if(
GetPlayerTeam(playerid) == TEAM_JAIL && GetPlayerTeam(damagedid) == TEAM_JAIL)
        return 
0;
    
    
#if defined police_OnPlayerGiveDamage
        
police_OnPlayerGiveDamage(playeridgamagedidamountweaponidbodypart);
    
#else
    
    
if(damagedid != INVALID_PLAYER_ID && !playerDeath[playerid] && !IsPlayerPaused(damagedid))
    {
        if(!((
IsPlayerPolice(playerid) && IsPlayerPCC(damagedid)) || (IsPlayerPolice(damagedid) && IsPlayerPCC(playerid))))
        {
            new 
team random(NO_TEAM);

            while(
team == TEAM_POLICE || team == TEAM_PCC || team == TEAM_JAIL)
            {
                
team random(NO_TEAM);
            }

            
playerTakedDamage[damagedid] = playerid;

            
playerTeam[damagedid] = GetPlayerTeam(damagedid);
            
playerTeam[playerid] = GetPlayerTeam(playerid);

            
SetPlayerTeam(playeridteam);
            
SetPlayerTeam(damagedidteam);
        }
    }
    return 
1;


ONPLAYERTAKEDAMAGE
Código PHP:
public OnPlayerTakeDamage(playeridissueridFloat:amountweaponid,bodypart)
{
    
/*if( GetTeamOfPlayer(playerid) != TEAM_PCC || GetTeamOfPlayer(playerid) != TEAM_POLICE )
        return 0;
    */
    


    
if(!IsPlayerAutorized_(playerid))
        return 
0;
    
    if(
GetPlayerTeam(playerid) == TEAM_JAIL && GetPlayerTeam(issuerid) == TEAM_JAIL)
        return 
0;
    
    
#if defined police_OnPlayerTakeDamage
        
police_OnPlayerTakeDamage(playeridissueridamountweaponid);
    
#endif

    /// <summary>
    /// Nesta callback:
    ///        * se o emissor do damage não é um jogador inválido e o jogador
    ///          atingido não está morto, então: 
    ///            - faz validação se o damage não é maior que a vida do jogador;
    ///            - mata o jogador caso esteja gravemente ferído;
    ///            - registra damage do emissor.
    /// </summary>

    
if(issuerid != INVALID_PLAYER_ID && !playerDeath[playerid])
    {
        if(
playerTakedDamage[playerid] == issuerid)
        {
            if(
GetPlayerVirtualWorld(playerid) != VIRTUAL_WORLD_ALLOWED && GetPlayerVirtualWorld(issuerid) != VIRTUAL_WORLD_ALLOWED)
                goto 
set;

            if(!
PlayersClassAutorizedForKill(playeridissuerid))
                goto 
end;

            
set:
            
            new 
Float:healthFloat:armour;

            
GetPlayerHealth(playeridhealth);
            
GetPlayerArmour(playeridarmour);

            if(
armour >= amount)
            {
                print(
"OnPlayerTakeDamage condição");
                
SetPlayerArmour(playeridarmour amount);
                goto 
end;
            }
            else
            {
                
SetPlayerArmour(playerid0.0);
                
amount amount-armour;
            }

            if(
amount >= health)
            {
                if(!
playerDeathByPoliceSystem[playerid])
                {
                    
playerDeathByPoliceSystem[playerid] = true;
                    
SendDeathMessage(issueridplayeridweaponid);
                }
            }
            else
                
SetPlayerHealth(playeridhealth amount);

            
end:

            
playerTakedDamage[playerid] = INVALID_PLAYER_ID;
            
playerTakedDamage[issuerid] = INVALID_PLAYER_ID;

            
SetPlayerTeam(playeridplayerTeam[playerid]);
            
SetPlayerTeam(issueridplayerTeam[issuerid]);
        }
    }

    return 
1;




RE: liberar dano com a mesma classe - fear - 13/12/2021

Alguem pode ajudar ai???


RE: liberar dano com a mesma classe - hey - 14/12/2021

é so copiar a parte dos policiais e trocar a variavel dos policiais para os motovlogers pelo q eu entendi a classe motovloger esta podendo se matar entao copie a parte dos motovlogers e altere a variavel dos motovlogers e altere para a classe dos ladroes

me corija se eu entendi errado