SA-MP Forums Archive
[Tutorial] El lнmite de los TextDraws - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+----- Forum: Lanzamientos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=59)
+----- Thread: [Tutorial] El lнmite de los TextDraws (/showthread.php?tid=408824)



El lнmite de los TextDraws - [DOG]irinel1996 - 19.01.2013

El lнmite de los TextDraws
[*] Introducciуn
Buenas chavales, decidн hacer este pequeсo tutorial sobre el lнmite de los TextDraws porque veo un montуn de filterscripts usбndolos de mala manera.
Y sin mencionar todas las dudas que tienen sobre ellos los usuarios mбs nuevos en PAWN.

Aclaro que no explicarй sus funciones, sino cуmo se alcanza el lнmite y quй tipo de TextDraw usar en diferentes situaciones.

No se preocupen si no entienden ciertas cosas a primera vista, porque al final de todo explico todo de forma mбs detallada.
Tambiйn menciono que si no sabes como funcionan las matrices, es posible que se te complique un poquito mбs, aunque yo lo explicarй lo mejor que pueda.


[*] Tipos
En la versiуn actual del SA-MP hay dos tipos de TextDraws, vamos a ver cуmo era antes y cуmo es ahora.
[*] Cuando usarlos [*] Consejos de optimizaciуn
Algunas cosas que me han servido a la hora de usar TextDraws:
[*] Lнmites actuales

GlobalesPor Jugador
2048256 (Como dije, cada jugador puede tener 256 de este tipo)

[*] Fin
Es esto seсores.
Menciono que toda la informaciуn estб basada en mis propias experiencias y la wiki.

Una pequeсa cosa del lнmite del nuevo tipo de TextDraw de la 0.3e, me la confirmу ****** porque tenнa una duda.

Tambiйn doy las gracias a MrDeath537 (que al parecer ya no estб en el foro), que me lo explicу a mi cuando yo no lo entendнa.

Cualquier duda, aporte de informaciуn, algъn fallo que haya cometido en el tutorial, si quieren que explique mejor una cosa especifica, o quieren algъn tutorial de alguna otra cosa, etc. comenten.

ЎSaludos, y lo siento si hay faltas de ortografнa!


Respuesta: El lнmite de los TextDraws - Fluid016 - 19.01.2013

Pequeсo tutorial >.< xDD
Muy bueno irinel.


Respuesta: El lнmite de los TextDraws - enigma513 - 19.01.2013

Buena explicaciуn
En el sistema de velocнmetro que publique trate de implementar un sistema de slots para los TD, normalmente yo tengo definido MAX_JUGADORES (los que necesito), para disminuir la variable que se crea, si de igual manera no los usare, pero decidн no ponerlo en la primera versiуn para hacerlo mas fбcil de entender.
Lo que no he probado es si funcione por ejemplo:
Код:
#define MAX_JUGADORES  GetMaxPlayers()



Respuesta: El lнmite de los TextDraws - CrossOv3r - 19.01.2013

Ja, esta de 10 no sabia eso que se creaban 500 Text de Golpe o.O, Muy bueno. Una consulta, eso quiere decir que es preferentemente mejor, crearlos en "OnPlayerConnect"?

Segun lo que entendi.


Respuesta: El lнmite de los TextDraws - Parka - 19.01.2013

Quote:
Originally Posted by CrossOv3r
Посмотреть сообщение
Ja, esta de 10 no sabia eso que se creaban 500 Text de Golpe o.O, Muy bueno. Una consulta, eso quiere decir que es preferentemente mejor, crearlos en "OnPlayerConnect"?

Segun lo que entendi.
MAX_PLAYERS esta valorado en 500 en a_samp

lo que quiere decir que al crear una variable con [MAX_PLAYERS] lo que en realidad estas haciendo es
crear una variable [500] celdas eso quiere decir que se crearan 500 textdraw.

osea si tienes un server de 50 slot y creaste 500 textdraw estarнas inutilizando 450 textdraw(celdas) que lo ъnico que te crearan es lag y acaparamiento en la memoria.


Respuesta: El lнmite de los TextDraws - CaptainMactavish - 19.01.2013

Los PlayerTextDraws no necesitan array, ya lo comprobe y si no me crees, podйs comprobarlo con un amigo tuyo.


Respuesta: El lнmite de los TextDraws - adri1 - 19.01.2013

Quote:
Originally Posted by CaptainMactavish
Посмотреть сообщение
Los PlayerTextDraws no necesitan array, ya lo comprobe y si no me crees, podйs comprobarlo con un amigo tuyo.
Raro, ya que en la SA:MP wiki aparecen con array... pero probarй a ver..


Respuesta: El lнmite de los TextDraws - enigma513 - 19.01.2013

y si no necesitan array como lo eliminas?
Perdona mi ignorancia


Respuesta: El lнmite de los TextDraws - [DOG]irinel1996 - 19.01.2013

Quote:
Originally Posted by enigma513
Посмотреть сообщение
y si no necesitan array como lo eliminas?
Perdona mi ignorancia
Se eliminan solos cuando un jugador se desconecta, pero si lo quieres destruir por tu cuenta: PlayerTextDrawDestroy(playerid, PlayerText:text);
No hay problema man, me imagino que para eso es un tutorial.

EDIT: Oh, justo ahora entendн tu comentario. Sн, esa es otra de las preguntas que indica que hay que usar una matriz.
__________________________________________________ __
Quote:
Originally Posted by enigma513
Посмотреть сообщение
Buena explicaciуn
En el sistema de velocнmetro que publique trate de implementar un sistema de slots para los TD, normalmente yo tengo definido MAX_JUGADORES (los que necesito), para disminuir la variable que se crea, si de igual manera no los usare, pero decidн no ponerlo en la primera versiуn para hacerlo mas fбcil de entender.
Lo que no he probado es si funcione por ejemplo:
Код:
#define MAX_JUGADORES  GetMaxPlayers()
Podrнa funcionar pero yo no lo recomiendo para usar en un GM.
Harнa mбs lentos los bucles que usen MAX_PLAYERS, ya que GetMaxPlayers serб llamado en el bucle tantas veces como el valor que devuelve. Desde luego es mejor un valor constante.
__________________________________________________ __
Quote:
Originally Posted by CaptainMactavish
Посмотреть сообщение
Los PlayerTextDraws no necesitan array, ya lo comprobe y si no me crees, podйs comprobarlo con un amigo tuyo.
Sн que se necesitan, y te voy a decir por quй.
Al crear un TextDraw por jugador con las nuevas funciones de la 0.3e, el TextDraw recibe una ID para cada jugador.
Y sн se pueden mezclar cuando haya mбs jugadores, aunque a veces parezca que funcione, llegarб un momento en el que se buggearan si no usas la matriz.

Tomemos el siguiente script como ejemplo:
pawn Код:
#include <a_samp>

new
    PlayerText:A,
    PlayerText:B,
    PlayerText:C
;

public OnPlayerConnect(playerid) {
    if (playerid == 0) {
        A = CreatePlayerTextDraw(playerid, 0.0, 0.0, "A"); //A - ID 0
        B = CreatePlayerTextDraw(playerid, 0.0, 0.0, "B"); //B - ID 1
        C = CreatePlayerTextDraw(playerid, 0.0, 0.0, "C"); //C - ID 2
    } else if (playerid == 1) {
        C = CreatePlayerTextDraw(playerid, 0.0, 0.0, "C"); //C - ID 0
        A = CreatePlayerTextDraw(playerid, 0.0, 0.0, "A"); //A - ID 1
        B = CreatePlayerTextDraw(playerid, 0.0, 0.0, "B"); //B - ID 2
    }
    return 1;
}
Bien, se conectan dos jugadores, el primer jugador tiene los TextDraws en el siguiente orden: A B C, y el segundo en este: C A B. Hasta ahн todo bien. Ahora el TextDraw A tiene la ID 0 para el jugador ID 0, pero para el jugador ID 1 es la ID 1. Y lуgicamente no se pueden almacenar diferentes IDs en una sola variable, se necesita una matriz. Mбs claro que el agua.

Yб se que en el ejemplo el TextDraw C lo puse en primer lugar para el jugador ID 1 pero es solo un ejemplo para que entiendas lo que sucede cuando hay mбs jugadores en el servidor entrando y saliendo.


Respuesta: El lнmite de los TextDraws - TheChaoz - 19.01.2013

Muy buen tutorial explica bastante bien cuando deberian utilizarse los textdraws.

OFF-TOPIC:
Quote:
Originally Posted by enigma513
Посмотреть сообщение
Buena explicaciуn
En el sistema de velocнmetro que publique trate de implementar un sistema de slots para los TD, normalmente yo tengo definido MAX_JUGADORES (los que necesito), para disminuir la variable que se crea, si de igual manera no los usare, pero decidн no ponerlo en la primera versiуn para hacerlo mas fбcil de entender.
Lo que no he probado es si funcione por ejemplo:
Код:
#define MAX_JUGADORES  GetMaxPlayers()
En general cuando se crea un tutorial, se tiende a utilizar todo lo mas estandarizado posible. Lo mejor para realizar un bucle entre los jugadores es foreach, pero si no lo quieres utilizar y deseas utilizar GetMaxPlayers para hacerlo mas rapido, lo mejor es que lo realizes asi:
pawn Код:
for(new i, j=GetMaxPlayers(); i<j; i++)
{
    if(!IsPlayerConnected(i))
        continue;
    //Aqui tu codigo
}