Portal SAMP
[Ajuda] Aparecendo o nome Tag para o player que não é Administrador - 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] Aparecendo o nome Tag para o player que não é Administrador (/showthread.php?tid=3470)



Aparecendo o nome Tag para o player que não é Administrador - hiago01 - 25/03/2023

Boa noite a todos preciso de uma ajuda , eu criei 3DTextLabel dynamic para player e admin , eu coloco para abrir ambos para os jogadores setados conforme mais quando entra mais de 2 jogadores ele buga aparece o texto do Admin para o jogador que não está setado oque pode ser todo o sistema da verificação está em OnPlayerupgate?


RE: Aparecendo o nome Tag para o player que não é Administrador - Vel - 25/03/2023

Poste seu código para que possamos ajudar.


RE: Aparecendo o nome Tag para o player que não é Administrador - hiago01 - 26/03/2023

Aqui está e que não sei lidar muito com forum mais ai está obrigado pela resposta

Código:
if(PlayerData[playerid][pAdmin] >= 1)
                  {
                  
                    if (!IsValidDynamic3DTextLabel(PlayerSpawnLabel[playerid]))
                    {
                        format(strsave, sizeof(strsave), "{00FF00} ID: {FFFFFF}%i  {00FF00}({FFFFFF}%s{00FF00})\n Nome: {FFFFFF}%s\n", i, PlayerName(i), GetName(i));
                          PlayerSpawnLabel[i] = CreateDynamic3DTextLabel(strsave, 0xFFFFFFFF, 0.0, 0.0, 0.1, NT_DISTANCE, .attachedplayer = i, .testlos = 1);
                      }
                    Attach3DTextLabelToPlayer(PlayerSpawnLabel[i], i, 0.0, 0.0, 0.27);
                 }
                  if(PlayerData[playerid][pAdmin] < 1)
                  {
                    if (IsValidDynamic3DTextLabel(PlayerSpawnLabel[i]))
                    {
                        Delete3DTextLabel(PlayerSpawnLabel[i]);
                        PlayerSpawnLabel[i] = Text3D:INVALID_3DTEXT_ID;
                        KillTimer(SpawnLabelDespawnTimer[i]);
                    }
                 }

if(PlayerData[playerid][pAdmin] >= 1) // TODOS QUE SÃO ADMINS

if(PlayerData[playerid][pAdmin] < 1)// TODOS PLAYERS

Eu coloco mensagem para testa funciona mais quando loga mais de 2 Jogadores ele aparece o do Admin sem o jogador ser Admin


RE: Aparecendo o nome Tag para o player que não é Administrador - hiago01 - 26/03/2023

Está tudo no Onplayerupdate


RE: Aparecendo o nome Tag para o player que não é Administrador - White_Blue - 26/03/2023

(26/03/2023 00:07)hiago01 Escreveu: Aqui está e que não sei lidar muito com forum mais ai está obrigado pela resposta

Código:
if(PlayerData[playerid][pAdmin] >= 1)
                  {
                 
                    if (!IsValidDynamic3DTextLabel(PlayerSpawnLabel[playerid]))
                    {
                        format(strsave, sizeof(strsave), "{00FF00} ID: {FFFFFF}%i  {00FF00}({FFFFFF}%s{00FF00})\n Nome: {FFFFFF}%s\n", i, PlayerName(i), GetName(i));
                          PlayerSpawnLabel[i] = CreateDynamic3DTextLabel(strsave, 0xFFFFFFFF, 0.0, 0.0, 0.1, NT_DISTANCE, .attachedplayer = i, .testlos = 1);
                      }
                    Attach3DTextLabelToPlayer(PlayerSpawnLabel[i], i, 0.0, 0.0, 0.27);
                 }
                  if(PlayerData[playerid][pAdmin] < 1)
                  {
                    if (IsValidDynamic3DTextLabel(PlayerSpawnLabel[i]))
                    {
                        Delete3DTextLabel(PlayerSpawnLabel[i]);
                        PlayerSpawnLabel[i] = Text3D:INVALID_3DTEXT_ID;
                        KillTimer(SpawnLabelDespawnTimer[i]);
                    }
                 }

if(PlayerData[playerid][pAdmin] >= 1) // TODOS QUE SÃO ADMINS

if(PlayerData[playerid][pAdmin] < 1)// TODOS PLAYERS

Eu coloco mensagem para testa funciona mais quando loga mais de 2 Jogadores ele aparece o do Admin sem o jogador ser Admin
Tem muita coisa confusa/desnecessária nesse código.

Fora que não é recomendado que você coloque isso na callback OnPlayerUpdate, a callback OnPlayerUpdate é chamada milhares de vezes durante a execução do programa, causando problemas de desempenho.

Simplesmente crie uma função que carregue as Textlabels na OnPlayerConnect e depois crie a textlabel na ou na OnPlayerSpawn.
Código PHP:
new Text3D:PlayerLabel[MAX_PLAYERS];
new 
Text3D:AdminLabel[MAX_PLAYERS];

public 
OnPlayerSpawn(playerid) {
   
  PlayerLabel[playerid] = CreateDynamic3DTextLabel(" ", -10.00.00.320.0playeridINVALID_VEHICLE_ID1, -1, -1, -1200.0);
 
AdminLabel[playerid] = CreateDynamic3DTextLabel(" ", -10.00.00.520.0playeridINVALID_VEHICLE_ID0, -1, -1, -1200.0);
   return 
1;
}

public 
OnPlayerConnect(playerid) {
   
Load3DTextLabels(playerid);
   return 
1;
}

stock Load3DTextLabels(playerid) {
     new 
str[128];
     switch(
PlayerData[playerid][pAdmin]) {
      case 
1UpdateDynamic3DTextLabelText(AdminLabel[playerid], 0xFFFFFFAA"[Estagiário]");
      
// Crie aqui a tag que você quiser basta usar o case em ordem númerica.
     
}
      
format(stringsizeof(string), "%s (%d)"GetPlayerNameEx(playerid), playerid);
      UpdateDynamic3DTextLabelText(PlayerLabel[playerid], 0xFFFFFFAAstr);
     return 
1;




RE: Aparecendo o nome Tag para o player que não é Administrador - hiago01 - 26/03/2023

(26/03/2023 02:16)hiago01 Escreveu: Está tudo no Onplayerupdate
Obrigado desse jeito foi mais não e como estou querendo fazer, quando update name vai ele atualiza para todos
refiz em cima do seu contigo mais em vez de só dar update em  cima dos administrador ele faz para todos jogadores

Código:
switch(PlayerData[i][pAdmin]) { // foreach em todos administrador
    case 0,1,2,3,4,5,6,7: // case teste de 0,7 admins no caso todos
    {
        if(PlayerData[playerid][pAdmin] == 0) // CASO O JOGADOR NÃO SEGA ADMIN ELE NÃO RECEBE TEXT LABEL
       {
            [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]UpdateDynamic3DTextLabelText(AdminLabel[i], 0xFFFFFFAA," [JOGADOR]");[/font][/size][/color]

       }

       if(PlayerData[playerid][pAdmin] == 7) // CASO JOGADOR NA LOAD SEJA ADMIN APARECE TODOS TEXTO LABEL
       {
           format(str, sizeof(str), "[TEXTO PARA ADMIN] NOME ID",GetName(i), i);
           UpdateDynamic3DTextLabelText(AdminLabel[i], 0xFFFFFFAA,str);
          
((((((( OBSERVAÇÃO AQUI QUE DEVERIA APARECE SÓ PARA ADMIN APARECE PARA TODOS O TEXTO ADMIN TEM COMO FAZER SÓ PARA SO ADMINS VER ESSE TEXTO ))))))))))) ??

        }
    }
[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]
[code/][/font][/size][/color]


RE: Aparecendo o nome Tag para o player que não é Administrador - White_Blue - 26/03/2023

(26/03/2023 10:39)hiago01 Escreveu:
(26/03/2023 02:16)hiago01 Escreveu: Está tudo no Onplayerupdate
Obrigado desse jeito foi mais não e como estou querendo fazer, quando update name vai ele atualiza para todos
refiz em cima do seu contigo mais em vez de só dar update em  cima dos administrador ele faz para todos jogadores

Código:
switch(PlayerData[i][pAdmin]) { // foreach em todos administrador
    case 0,1,2,3,4,5,6,7: // case teste de 0,7 admins no caso todos
    {
        if(PlayerData[playerid][pAdmin] == 0) // CASO O JOGADOR NÃO SEGA ADMIN ELE NÃO RECEBE TEXT LABEL
       {
            [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]UpdateDynamic3DTextLabelText(AdminLabel[i], 0xFFFFFFAA," [JOGADOR]");[/font][/size][/color]

       }

       if(PlayerData[playerid][pAdmin] == 7) // CASO JOGADOR NA LOAD SEJA ADMIN APARECE TODOS TEXTO LABEL
       {
           format(str, sizeof(str), "[TEXTO PARA ADMIN] NOME ID",GetName(i), i);
           UpdateDynamic3DTextLabelText(AdminLabel[i], 0xFFFFFFAA,str);
          
((((((( OBSERVAÇÃO AQUI QUE DEVERIA APARECE SÓ PARA ADMIN APARECE PARA TODOS O TEXTO ADMIN TEM COMO FAZER SÓ PARA SO ADMINS VER ESSE TEXTO ))))))))))) ??

        }
    }
[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]
[code/][/font][/size][/color]

Não estou entendendo bem o que você quer, se possível me chamar no Discord para podermos resolver isso mais rapidamente.