Portal SAMP
[Ajuda] HS floodando com ID 31 - 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] HS floodando com ID 31 (/showthread.php?tid=1916)

Páginas: 1 2 3


RE: HS floodando com ID 31 - fear - 10/12/2021

(10/12/2021 22:07)xbruno1000x Escreveu: Faça da seguinte forma:

(10/12/2021 19:26)xBruno1000x Escreveu: //RESPOSTAS DE OUTRAS PESSOAS

//SUAS RESPOSTAS AQUI, SEMPRE ABAIXO.

eu tinha editado mas como tu não viu kkk segue a mesma resposta que coloquei la..

segue o print do chat quando eu uso ex: arma id 28 como e duas akimbo conta como dois hs.. sera que teria como burlar armas akimbo contar como um hs ou ta normal isso?


RE: HS floodando com ID 31 - xbruno1000x - 11/12/2021

Agora eu vi que corrigiu.

Tente dessa forma:
Código:
new bool:hasHS[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    hasHS[playerid] = 0;
}

if(bodypart == 9)
{
    if(!hasHS[damagedid])
    {
        hasHS[damagedid] = true;
        SetTimerEx("HeadshotSys", 1200, false, "ii", playerid, damagedid);
    }
}

forward HeadshotSys(playerid, damagedid);
public HeadshotSys(playerid, damagedid)
{
    if(hasHS[damagedid])
    {
       new string[128];
       format(string, sizeof(string), "** ~> {FFF000}%s{A9A9A9} Deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
       SendClientMessageToAll(0xb9eec0AA, string);
       SetPlayerHealth(damagedid, 0.0);
       SetPlayerArmour(damagedid, 0);
       hasHS[damagedid] = false;
    }
}

O player ainda chamará a public duas vezes. Porém, na segunda vez, a if irá barra o texto de ser enviado novamente em função da hasHS ter se tornado falsa.


RE: HS floodando com ID 31 - fear - 11/12/2021

(11/12/2021 01:21)xbruno1000x Escreveu: Agora eu vi que corrigiu.

Tente dessa forma:
Código:
new bool:hasHS[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    hasHS[playerid] = 0;
}

if(bodypart == 9)
{
    if(!hasHS[damagedid])
    {
        hasHS[damagedid] = true;
        SetTimerEx("HeadshotSys", 1200, false, "ii", playerid, damagedid);
    }
}

forward HeadshotSys(playerid, damagedid);
public HeadshotSys(playerid, damagedid)
{
    if(hasHS[damagedid])
    {
       new string[128];
       format(string, sizeof(string), "** ~> {FFF000}%s{A9A9A9} Deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
       SendClientMessageToAll(0xb9eec0AA, string);
       SetPlayerHealth(damagedid, 0.0);
       SetPlayerArmour(damagedid, 0);
       hasHS[damagedid] = false;
    }
}

O player ainda chamará a public duas vezes. Porém, na segunda vez, a if irá barra o texto de ser enviado novamente em função da hasHS ter se tornado falsa.

warning:

Código PHP:
warning 213tag mismatch 

linha no onplayerconnect:
Código PHP:
hasHS[playerid] = 0



RE: HS floodando com ID 31 - MarcosBrazz - 11/12/2021

(11/12/2021 10:54)fear Escreveu:
(11/12/2021 01:21)xbruno1000x Escreveu: Agora eu vi que corrigiu.

Tente dessa forma:
Código:
new bool:hasHS[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    hasHS[playerid] = 0;
}

if(bodypart == 9)
{
    if(!hasHS[damagedid])
    {
        hasHS[damagedid] = true;
        SetTimerEx("HeadshotSys", 1200, false, "ii", playerid, damagedid);
    }
}

forward HeadshotSys(playerid, damagedid);
public HeadshotSys(playerid, damagedid)
{
    if(hasHS[damagedid])
    {
       new string[128];
       format(string, sizeof(string), "** ~> {FFF000}%s{A9A9A9} Deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
       SendClientMessageToAll(0xb9eec0AA, string);
       SetPlayerHealth(damagedid, 0.0);
       SetPlayerArmour(damagedid, 0);
       hasHS[damagedid] = false;
    }
}

O player ainda chamará a public duas vezes. Porém, na segunda vez, a if irá barra o texto de ser enviado novamente em função da hasHS ter se tornado falsa.

warning:

Código PHP:
warning 213tag mismatch 

linha no onplayerconnect:
Código PHP:
hasHS[playerid] = 0
Troque por:
Código:
hasHS[playerid] = false;



RE: HS floodando com ID 31 - SrBlue - 11/12/2021

remova a public HeadshotSys, e deixe somente o sistema de HS na public nativa OnPlayerGiveDamage...


RE: HS floodando com ID 31 - fear - 11/12/2021

(11/12/2021 15:17)SrBlue Escreveu: remova a public HeadshotSys, e deixe somente o sistema de HS na public nativa OnPlayerGiveDamage...

fiz assim:

INICIO DO GAMEMODE:
Código PHP:
new bool:hasHS[MAX_PLAYERS]; 

ONPLAYERCONNECT

Código PHP:
hasHS[playerid] = false

REMOVI O HEADSHOTSYS COMO TU FALO E PASSEI PRA GIVEDAMAGE NOVAMENTE E AGORA NEM O HS PEGA MAIS..

ONPLAYERGIVEDAMAGE
Código PHP:
if(!IsPlayerPaused(damagedid)) //verifica se o jogador que levou dano não está de esc
{
if(
hasHS[damagedid])
{
new 
string[128];
format(stringsizeof(string), "** ~> {FFF000}%s{A9A9A9} Deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
SendClientMessageToAll(0xb9eec0AAstring);
SetPlayerHealth(damagedid0.0);
SetPlayerArmour(damagedid0);
hasHS[damagedid] = false;
}




RE: HS floodando com ID 31 - SrBlue - 11/12/2021

zzzz, a variavel ta ficando nula...

no onplayerconnect ela deve-se vim false..

no onplyaergivdamage

no hasHS[damagedid]

bota if(hasHS[damagedid]==0)
você ta verificando se ela é true.

e no final ta passando pra false,
passa para hasHS[damagedid] = true

no onplayerspawn

passa a variavel hasHS[damagedid] = false.




RESUMIDAMENTE PRA VOSSA SENHORIA:

ONPLAYERGIVEDAMAGE:

Código:
if(!IsPlayerPaused(damagedid)) //verifica se o jogador que levou dano não está de esc
{
if(hasHS[damagedid] == 0)
{
new string[128];
format(string, sizeof(string), "** ~> {FFF000}%s{A9A9A9} Deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
SendClientMessageToAll(0xb9eec0AA, string);
SetPlayerHealth(damagedid, 0.0);
SetPlayerArmour(damagedid, 0);
hasHS[damagedid] = true;
}


ONPLAYERSPAWN:

Código:
public OnPlayerSpawn(playerid){
hasHS[playerid] = false;
}



RE: HS floodando com ID 31 - xbruno1000x - 11/12/2021

(11/12/2021 15:17)SrBlue Escreveu: remova a public HeadshotSys, e deixe somente o sistema de HS na public nativa OnPlayerGiveDamage...

A public HeadshotSys impede que a mensagem seja enviada no chat duas vezes seguidas, então ela é essencial.


RE: HS floodando com ID 31 - fear - 11/12/2021

(11/12/2021 17:58)SrBlue Escreveu: zzzz, a variavel ta ficando nula...

no onplayerconnect ela deve-se vim false..

no onplyaergivdamage

no hasHS[damagedid]

bota if(hasHS[damagedid]==0)
você ta verificando se ela é true.

e no final ta passando pra false,
passa para hasHS[damagedid] = true

no onplayerspawn

passa a variavel hasHS[damagedid] = false.




RESUMIDAMENTE PRA VOSSA SENHORIA:

ONPLAYERGIVEDAMAGE:

Código:
if(!IsPlayerPaused(damagedid)) //verifica se o jogador que levou dano não está de esc
{
if(hasHS[damagedid] == 0)
{
new string[128];
format(string, sizeof(string), "** ~> {FFF000}%s{A9A9A9} Deu um {FF0000}headshot {A9A9A9}no jogador {FFF000}%s{A9A9A9}.",  Nome(playerid), Nome(damagedid), playerid);
SendClientMessageToAll(0xb9eec0AA, string);
SetPlayerHealth(damagedid, 0.0);
SetPlayerArmour(damagedid, 0);
hasHS[damagedid] = true;
}


ONPLAYERSPAWN:

Código:
public OnPlayerSpawn(playerid){
hasHS[playerid] = false;
}

Resolveu pelo teste que fiz não ta floodando mais... porém ta matando com soco... tu da um soco e mata o player como se fosse hs e tb tem kill que tu mata e conta no chat kill como se a pessoa tivesse dado /kill


RE: HS floodando com ID 31 - SrBlue - 11/12/2021

pela logica está certa, faz uma verificação se o weaponid for igual a do soco ( 0 ) ou de qual quer armas de corpo-corpo ( bastao/socoingles/pá espadas etc ) ignorar o efeito dar um retorno 0,
utilize aqui essa tabela! _> https://open.mp/docs/scripting/resources/weaponids

exemplo:


if(hasHS[damagedid] == 0){
if(weaponid >= 0 && weaponid <= 18) return 0;
..
..
..
..
}