Portal SAMP
[Ajuda] Problema com Tag's - 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] Problema com Tag's (/showthread.php?tid=1978)



Problema com Tag's - tileos - 24/12/2021

Olá estou com um problema nas tag's exemplo de nick: [TAG]JoaoRoberto

Tenho um comando de /Presente:
Código PHP:
CMD:presente(playeridparams[])
{
    new
    
   ID_P 50 ],
    
   pPresente 50 ]
    ;
    if(sscanf(params"s"ID_P))return MensagemDupla(playerid"{FF0000}[ > ] Use: /Presente [ Código ]""{FF0000}[ > ] Use o comando para receber uma giftcard do sevidor.");
    format(pPresentesizeof pPresentePresentesID_P);
    if(!DOF2_FileExists(pPresente)) return Msg(playeridVERMELHO"[ x ] Não existe nenhum giftcard com esse código!");
    if(
DOF2_GetInt(pPresenteNome(playerid)) == 1)
    {
       SendClientMessage(playeridVERMELHO"[ x ] Você já utilizou esta giftcard !");
       PlayerPlaySound(playerid,1054,0.0,0.0,0.0);
       return 1;
    }
    if( DOF2_GetIntpPresente"Item" ) == )//Dinheiro
    
{
    
   SetarGRANA_Presente(playeridDOF2_GetInt(pPresente"Presente"));// VALOR
       DOF2_SetString(pPresenteNome(playerid), "1");
       PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
    }
    else if( 
DOF2_GetIntpPresente"Item" ) == )//Set
    
{
    
   SetarSET_Presente(playeridDOF2_GetIntpPresente"Presente" ));// MODELO
    
   DOF2_SetString(pPresenteNome(playerid), "1");
       PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
    }
    else if( 
DOF2_GetIntpPresente"Item" ) == )//Moedas
    
{
       SetarMoedas_Presente(playeridDOF2_GetInt(pPresente"Presente"));// VALOR
       DOF2_SetString(pPresenteNome(playerid), "1");
       PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
    }
    return 
1;


Problema esta nisso aqui: só funciona quando player não possui uma tag
Código PHP:
    if(DOF2_GetInt(pPresenteNome(playerid)) == 1)
    {
       SendClientMessage(playeridVERMELHO"[ x ] Você já utilizou esta giftcard !");
       PlayerPlaySound(playerid,1054,0.0,0.0,0.0);
       return 1;
    


Nesse comandos quando um player utiliza a tag [TAG] do lado do nick do jogador, quando o player digita o /Presente ele pode pegar varios presente que é somente pode pegar uma vez, quando um player não possui uma tag ele só pega uma vez, quando ele tem a tag ele consegue pegar varias vezes o presente, alguem pode me ajudar?


RE: Problema com Tag's - SrBlue - 25/12/2021

opa!

tente formatar o nome do jogador, como assim formatar? remova a tag
para isso vamos utilizara include strlib, já que o pawn não possui função nativa de "string.find" assim como o C++/C.

exemplo de uso ( documentação )

Código:
new output[10][10], count;

count = strexplode(output, "I, like, jolly, ranchers", ",");

for (new i = 0; i < count; i++)
print(output[i]);

/* Output:
    I
    like
    jolly
    ranchers
*/


já que nosso objetivo é separar a TAG, vamos aderir a uma stock:

Código:
stock spliter(nameplayer[]){
    new count;
    new parse[64][1];
    count = strexplode(parse, nameplayer, "]");
    return parse;
}

fazendo assim, no trecho do seu code, o qual faz checar se o jogador utilizou o código iremos botar o tal spliter:

Código:
 if(DOF2_GetInt(pPresente, spliter(Nome(playerid))[1]) == 1)

porque spliter(G...)[1]?
devido o elemento PARSE receber o texto de ANTES do ] e depois do mesmo.
ficando assim nesse exemplo:

spliter("[A]SemNaME")[0] // [A
spliter("[A]SemNaME")[1] // SemNaME

mesmo fazendo essa verificação, tens que ver setar a mesma verificação aonde escrever no arquivo o nome de quem pegou, já que vai escrever com o nome do jogador + a TAG.

ou seja, devemos passar todos os nome do jogador para SEM tag

onde tens
Código:
Nome(playerid)

use
Código:
spliter(Nome(playerid))[1]



RE: Problema com Tag's - SrBlue - 25/12/2021

lembrando, se o jogador Y utilizar e o jogador Z utilizar depois, o jogador Y poderá utilizar novamente!