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



Problema com textdraw - Levi.M - 11/06/2021

Olá, estou tendo um problema bem irritante com textdraws, eu fiz um sistema para mostrar a textdraw em uma área, mas só está mostrando uma.

Código PHP:
forward ShowTextDraws(playerid);
public 
ShowTextDraws(playerid)
{
    
SetTimerEx("ShowTextDraws"segundos(1), false"i"playerid);
    if(
PlayerToPoint(35.0,playerid,-1003.4734,-1620.8268,76.3672))
    {
        
Area[playerid]=1;
        
PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],"Plantacao_de_~r~Maconha");
        
PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(
Area[playerid] == 1)
        {
            
PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            
Area[playerid]=0;
        }
    }
    if(
PlayerToPoint(15.0,playerid,-2022.6522157.793230.5547))
    {
        new 
string[128];
        
Area[playerid]=1;
        
GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        
Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        
format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        
PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],string);
        
PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(
Area[playerid] == 1)
        {
            
PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            
Area[playerid]=0;
        }
    }

 
No caso só está mostrando em uma posição, e na outra não mostra, não sei oque pode ser, até coloquei verificação pra não floodar mas infelizmente não aparece, se alguém puder ajudar, agradeço.
Código PHP:
if(PlayerToPoint(15.0,playerid,-2022.6522157.793230.5547)) 



RE: Problema com textdraw - LeleziiN - 11/06/2021

(11/06/2021 10:15)Levi.M Escreveu: Olá, estou tendo um problema bem irritante com textdraws, eu fiz um sistema para mostrar a textdraw em uma área, mas só está mostrando uma.

Código PHP:
forward ShowTextDraws(playerid);
public 
ShowTextDraws(playerid)
{
    
SetTimerEx("ShowTextDraws"segundos(1), false"i"playerid);
    if(
PlayerToPoint(35.0,playerid,-1003.4734,-1620.8268,76.3672))
    {
        
Area[playerid]=1;
        
PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],"Plantacao_de_~r~Maconha");
        
PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(
Area[playerid] == 1)
        {
            
PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            
Area[playerid]=0;
        }
    }
    if(
PlayerToPoint(15.0,playerid,-2022.6522157.793230.5547))
    {
        new 
string[128];
        
Area[playerid]=1;
        
GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        
Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        
format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        
PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],string);
        
PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(
Area[playerid] == 1)
        {
            
PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            
Area[playerid]=0;
        }
    }

 
No caso só está mostrando em uma posição, e na outra não mostra, não sei oque pode ser, até coloquei verificação pra não floodar mas infelizmente não aparece, se alguém puder ajudar, agradeço.
Código PHP:
if(PlayerToPoint(15.0,playerid,-2022.6522157.793230.5547)) 

Mano não sei se vai ta certo, mais vc poderia fazer de outra formar.

Testa assim
Código PHP:
forward ShowTextDraws(playerid);
public 
ShowTextDraws(playerid)
{
    SetTimerEx("ShowTextDraws"segundos(1), false"i"playerid);
    if(PlayerToPoint(35.0,playerid,-1003.4734,-1620.8268,76.3672))
    {
        Area[playerid]=1;
        PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],"Plantacao_de_~r~Maconha");
        PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(Area[playerid] == 1)
        {
            PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            Area[playerid]=0;
        }
    }
    else if(PlayerToPoint(15.0,playerid,-2022.6522157.793230.5547))
    {
        new string[128];
        Area[playerid]=1;
        GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],string);
        PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(Area[playerid] == 1)
        {
            PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            Area[playerid]=0;
        }
    }


No meu uso dessa forma aqui

Código PHP:
if(>= 349.9816 && >= -2089.4988 && <= 409.1110 && <= -2049.2551//Perto da roda gigante de LS
{
    
TextDrawSetString(TextdrawPostos[I], "~n~~y~~h~Area ~w~~h~de ~b~~h~~h~~h~Pesca ~w~~h~- ~g~~h~~h~~h~/Pescar");
    
TextDrawShowForPlayer(ITextdrawPostos[I]);
    
AreaPesca[I] = 1;
}
else
{
    
AreaPesca[I] = 0;
    if(
PescaInProgress[I] == 1)
  
  {
        
SendClientMessage(Ibranco"~ Você abandonou sua rede de pesca...");
    
PescaInProgress[I] = 0;
    
TempoPescaAtivado[I] = 0;
    
KillTimer(TempoPesca[I]);
    }
}
//Postos
if(PlayerToPoint(9.0I2201.2949,2475.2471,10.8203))
{
    
AreaPosto[I] = 0;
    
format(Ssizeof(S), "~y~~h~Posto ~w~~h~de ~b~~h~~h~~h~%s ~w~~h~- ~g~~h~~h~~h~/Abastecer~n~~p~~h~Total de Litros disponiveis: ~w~~h~%d"NomesDPostos[AreaPosto[I]][0], GasolinaDisponivel[AreaPosto[I] - 0]);
    
TextDrawSetString(TextdrawPostos[I], S);
    
TextDrawShowForPlayer(ITextdrawPostos[I]);
    format(Asizeof(A), "%d", ((dini_Int(PostosFile(AreaPosto[I]),"Litros")), GasolinaDisponivel[AreaPosto[I] - 0]));
    
dini_Set(PostosFile(AreaPosto[I]), "Litros"A);




RE: Problema com textdraw - Levi.M - 11/06/2021

Fiz bem parecido com oque você falou e deu certo, muito obrigado. Pra quem tiver problema com isso:
Código PHP:
forward ShowTextDraws(playerid);
public 
ShowTextDraws(playerid)
{
    
SetTimerEx("ShowTextDraws"segundos(1), false"i"playerid);
    if(
IsPlayerInRangeOfPoint(playerid,35.0,-1003.4734,-1620.8268,76.3672))
    {
        
Area[playerid]=1;
        
PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],"Plantacao_de_~r~Maconha");
        
PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }
    else if(
IsPlayerInRangeOfPoint(playerid,15.0,-2022.6522157.793230.5547))
    {
        new 
string[128];
        
Area[playerid]=1;
        
GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        
Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        
format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        
PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],string);
        
PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(
Area[playerid] == 1)
        {
            
PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            
Area[playerid]=0;
        }
    }




RE: Problema com textdraw - LeleziiN - 11/06/2021

(11/06/2021 10:48)Levi.M Escreveu: Fiz bem parecido com oque você falou e deu certo, muito obrigado. Pra quem tiver problema com isso:
Código PHP:
forward ShowTextDraws(playerid);
public 
ShowTextDraws(playerid)
{
    SetTimerEx("ShowTextDraws"segundos(1), false"i"playerid);
    if(IsPlayerInRangeOfPoint(playerid,35.0,-1003.4734,-1620.8268,76.3672))
    {
        Area[playerid]=1;
        PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],"Plantacao_de_~r~Maconha");
        PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }
    else if(IsPlayerInRangeOfPoint(playerid,15.0,-2022.6522157.793230.5547))
    {
        new string[128];
        Area[playerid]=1;
        GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        PlayerTextDrawSetString(playerid,ABASTECENDO[playerid],string);
        PlayerTextDrawShow(playerid,ABASTECENDO[playerid]);
    }else{
        if(Area[playerid] == 1)
        {
            PlayerTextDrawHide(playerid,ABASTECENDO[playerid]);
            Area[playerid]=0;
        }
    }


É nós manin, pq é bem parecido com que desenvolvi para os postos do meu servidor


RE: Problema com textdraw - xbruno1000x - 11/06/2021

Dá pra fazer com IsPlayerInDynamicArea. Você cria na OnGameModeInit um DynamicRectangle ou qualquer outro tipo de formato que a streamer permite e depois verifica quando ele entrar na área.


RE: Problema com textdraw - Levi.M - 13/06/2021

(11/06/2021 16:56)xbruno1000x Escreveu: Dá pra fazer com IsPlayerInDynamicArea. Você cria na OnGameModeInit um DynamicRectangle ou qualquer outro tipo de formato que a streamer permite e depois verifica quando ele entrar na área.
Isso sem o uso de Timer?


RE: Problema com textdraw - xbruno1000x - 13/06/2021

(13/06/2021 01:12)Levi.M Escreveu:
(11/06/2021 16:56)xbruno1000x Escreveu: Dá pra fazer com IsPlayerInDynamicArea. Você cria na OnGameModeInit um DynamicRectangle ou qualquer outro tipo de formato que a streamer permite e depois verifica quando ele entrar na área.
Isso sem o uso de Timer?

Isso aí, muito mais otimizado.

Basta usar a public nativa da streamer.
Código:
Public OnPlayerEnterDynamicArea(playerid, areaid)



RE: Problema com textdraw - Levi.M - 14/06/2021

(13/06/2021 14:34)xbruno1000x Escreveu:
(13/06/2021 01:12)Levi.M Escreveu:
(11/06/2021 16:56)xbruno1000x Escreveu: Dá pra fazer com IsPlayerInDynamicArea. Você cria na OnGameModeInit um DynamicRectangle ou qualquer outro tipo de formato que a streamer permite e depois verifica quando ele entrar na área.
Isso sem o uso de Timer?

Isso aí, muito mais otimizado.

Basta usar a public nativa da streamer.
Código:
Public OnPlayerEnterDynamicArea(playerid, areaid)
Aproveitando esse tópico, eu fiz assim:
Código PHP:
new PostosQ;

public OnGameModeInit()
{
      PostosQ = CreateDynamicCircle(-2029.1404,157.4444, 50,-1,-1,-1);
      return 1;
}


public OnPlayerEnterDynamicArea(playerid, areaid)
{
    if(PostosQ)
    {
        new string[128];
        GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        PlayerTextDrawSetString(playerid,ABASTECENDO[playerid][1],string);
        PlayerTextDrawShow(playerid,ABASTECENDO[playerid][1]);
    }else{
        PlayerTextDrawHide(playerid,ABASTECENDO[playerid][1]);
        Area[playerid]=0;
    }
    return 1;


Eu quero que quando o jogador sair da área o textdraw sumir, essa parte eu não consegui fazer, tentei usando o else mas não deu certo.


RE: Problema com textdraw - xbruno1000x - 14/06/2021

(14/06/2021 11:22)Levi.M Escreveu:
(13/06/2021 14:34)xbruno1000x Escreveu:
(13/06/2021 01:12)Levi.M Escreveu:
(11/06/2021 16:56)xbruno1000x Escreveu: Dá pra fazer com IsPlayerInDynamicArea. Você cria na OnGameModeInit um DynamicRectangle ou qualquer outro tipo de formato que a streamer permite e depois verifica quando ele entrar na área.
Isso sem o uso de Timer?

Isso aí, muito mais otimizado.

Basta usar a public nativa da streamer.
Código:
Public OnPlayerEnterDynamicArea(playerid, areaid)
Aproveitando esse tópico, eu fiz assim:
Código PHP:
new PostosQ;

public OnGameModeInit()
{
      PostosQ = CreateDynamicCircle(-2029.1404,157.4444, 50,-1,-1,-1);
      return 1;
}


public OnPlayerEnterDynamicArea(playerid, areaid)
{
    if(PostosQ)
    {
        new string[128];
        GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
        Get2DZoneName(Location,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY]);
        format(string,sizeof(string),"Auto_Posto_~r~%s__~b~/Abastecer",Location);
        PlayerTextDrawSetString(playerid,ABASTECENDO[playerid][1],string);
        PlayerTextDrawShow(playerid,ABASTECENDO[playerid][1]);
    }else{
        PlayerTextDrawHide(playerid,ABASTECENDO[playerid][1]);
        Area[playerid]=0;
    }
    return 1;


Eu quero que quando o jogador sair da área o textdraw sumir, essa parte eu não consegui fazer, tentei usando o else mas não deu certo.

use a public OnPlayerLeaveDynamicArea(playerid, areaid)...

Em caso de mais dúvidas consulte a streamer wiki:
https://github.com/samp-incognito/samp-streamer-plugin/wiki/Callbacks


RE: Problema com textdraw - Levi.M - 14/06/2021

Obrigado, resolvido.