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



textdraw zones - tuco - 29/09/2022

Olá, gostaria que alguém pudesse me ajudar. Estou criando um texdraw de texto que mostra ao jogador a área em que ele está em TEMPO REAL. Mas o tempo real não funciona, pois a string de textdraw permanece estática, ou seja, NÃO ATUALIZA à medida que o jogador se move.

Gostaria de saber como posso atualizá-lo sempre que o jogador mudar de posição.
NOTA Exclamation : Estou usando a biblioteca kristoisberg
https://github.com/kristoisberg/samp-map-zones


Código:
stock Lugares(playerid)
{
    new MapZone:zone = GetPlayerMapZone(playerid);

    if (zone == INVALID_MAP_ZONE_ID) {
        return PlayerTextDrawSetString(playerid, Lugares[playerid][0], "San Andreas");
    }

    new name[MAX_MAP_ZONE_NAME];
    GetMapZoneName(zone, name);
    
      PlayerTextDrawSetString(playerid, Lugares[playerid][0], name);
      PlayerTextDrawShow(playerid, Lugares[playerid][0]);
      return 1;
}



RE: textdraw zones - RosaScripter - 29/09/2022

(29/09/2022 00:25)tuco Escreveu: Olá, gostaria que alguém pudesse me ajudar. Estou criando um texdraw de texto que mostra ao jogador a área em que ele está em TEMPO REAL. Mas o tempo real não funciona, pois a string de textdraw permanece estática, ou seja, NÃO ATUALIZA à medida que o jogador se move.

Gostaria de saber como posso atualizá-lo sempre que o jogador mudar de posição.
NOTA Exclamation : Estou usando a biblioteca kristoisberg
https://github.com/kristoisberg/samp-map-zones


Código:
stock Lugares(playerid)
{
    new MapZone:zone = GetPlayerMapZone(playerid);

    if (zone == INVALID_MAP_ZONE_ID) {
        return PlayerTextDrawSetString(playerid, Lugares[playerid][0], "San Andreas");
    }

    new name[MAX_MAP_ZONE_NAME];
    GetMapZoneName(zone, name);
    
      PlayerTextDrawSetString(playerid, Lugares[playerid][0], name);
      PlayerTextDrawShow(playerid, Lugares[playerid][0]);
      return 1;
}

Usa um SetTimer Big Grin


RE: textdraw zones - xbruno1000x - 29/09/2022

Como essa stock está sendo chamada? pode ser que ela esteja sendo chamada apenas uma vez, e por isso não atualiza.


RE: textdraw zones - tuco - 30/09/2022

(29/09/2022 01:35)RosaScripter Escreveu: Usa um SetTimer Big Grin

Eu adicionei isso depois de "PlayerTextdraw Show", mas ainda não funciona.
Código:
  LugaresTimer[playerid] = SetTimerEx("lugaresupd", 1000, true, "i", playerid);


(29/09/2022 02:28)xbruno1000x Escreveu: Como essa stock está sendo chamada? pode ser que ela esteja sendo chamada apenas uma vez, e por isso não atualiza.

Eu chamei isso em uma função de "LoadCharacter", que é quando o jogador faz login, seleciona seu personagem e spawn


RE: textdraw zones - xbruno1000x - 30/09/2022

(30/09/2022 12:31)tuco Escreveu: Eu adicionei isso depois de "PlayerTextdraw Show", mas ainda não funciona.
Código:
  LugaresTimer[playerid] = SetTimerEx("lugaresupd", 1000, true, "i", playerid);

A função que você postou tem o nome de "Lugares". No timer você inseriu "lugaresupd". Para funcionar ambos os nomes devem ser iguais. Use na callback OnPlayerConnect o timer também.


Citar:Eu chamei isso em uma função de "LoadCharacter", que é quando o jogador faz login, seleciona seu personagem e spawn
Perceba que o player só seleciona o personagem uma vez. Logo a função só será chamada uma vez.


RE: textdraw zones - tuco - 30/09/2022

(30/09/2022 12:59)xbruno1000x Escreveu: A função que você postou tem o nome de "Lugares". No timer você inseriu "lugaresupd". Para funcionar ambos os nomes devem ser iguais. Use na callback OnPlayerConnect o timer também.

Perceba que o player só seleciona o personagem uma vez. Logo a função só será chamada uma vez.


Muito obrigado, fiz tudo e deu certo. Agora eu tenho uma pergunta, usar um Timer no futuro não pode ser uma má prática de otimização? não há outra maneira de atualizar o stock quando o jogador muda de zona?


RE: textdraw zones - White_Blue - 30/09/2022

(30/09/2022 22:08)tuco Escreveu:
(30/09/2022 12:59)xbruno1000x Escreveu: A função que você postou tem o nome de "Lugares". No timer você inseriu "lugaresupd". Para funcionar ambos os nomes devem ser iguais. Use na callback OnPlayerConnect o timer também.

Perceba que o player só seleciona o personagem uma vez. Logo a função só será chamada uma vez.


Muito obrigado, fiz tudo e deu certo. Agora eu tenho uma pergunta, usar um Timer no futuro não pode ser uma má prática de otimização? não há outra maneira de atualizar o stock quando o jogador muda de zona?

Citar:Esses tempos atrás eu havia visto um teste de benchmark sobre timer's feito pelo Southclaws, um dos grandes contribuidores da comunidade SA-MP.

A conclusão foi que os timers em si são irrisórios, o que afeta o servidor mesmo é a callback chamada pelo timer. No teste foi constatado que você pode chamar de 20k a 30k de timer's sem ter um prejuízo relevante no desempenho. Então acredito, como o CoelhaO_LokaO disse acima, que vários timers seja o ideal.

Resposta de: xbruno1000x no tópico: https://portalsamp.com/showthread.php?tid=2489