Comunidad De Diversion Latina Y Diversion Sa-mp
¡Wow! Que Onda Colega!, Soy Zhelox! (:! Que esperas a Iniciar Sesión D: ! Así podrás ver los Nuevos Mensajes del Foro y sus Actualizaciones ;D !.... Ohm... Espera!, ¿Eres Nuevo?, ¿Necesitas Saber Algo? ¿Preguntar Alguna Duda? ¿Necesitas Ayuda en tu server?, o: ! Pues que esperas a Registrarte en Nuestra Comunidad De SA: MP de Diversión Latinoamericana Y a Resolver Todas Tus Dudas y Problemas Referidos Al Juego ;D ! Y desde Luego Actuar Con Nosotros y Nuestra Comunidad Si es que lo Deseas... Suerte! Very Happy

Unirse al foro, es rápido y fácil

Comunidad De Diversion Latina Y Diversion Sa-mp
¡Wow! Que Onda Colega!, Soy Zhelox! (:! Que esperas a Iniciar Sesión D: ! Así podrás ver los Nuevos Mensajes del Foro y sus Actualizaciones ;D !.... Ohm... Espera!, ¿Eres Nuevo?, ¿Necesitas Saber Algo? ¿Preguntar Alguna Duda? ¿Necesitas Ayuda en tu server?, o: ! Pues que esperas a Registrarte en Nuestra Comunidad De SA: MP de Diversión Latinoamericana Y a Resolver Todas Tus Dudas y Problemas Referidos Al Juego ;D ! Y desde Luego Actuar Con Nosotros y Nuestra Comunidad Si es que lo Deseas... Suerte! Very Happy
Comunidad De Diversion Latina Y Diversion Sa-mp
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

[Guia] ARRAYS[playerid]

Ir abajo

[Guia] ARRAYS[playerid] Empty [Guia] ARRAYS[playerid]

Mensaje por Ronald Dom Sep 14, 2008 8:01 pm

Primero que nada, ARRAY viene del ingles array (obvio no?) significa "arreglo", pero no arreglo de arreglar algo roto, osea no es "fix" (en ingles) es arreglo de "ordenado" (no me digan a mi, yo no invente la palabra)

Introduccion histo-teoria
Los arreglos se usan comunmente como "vectores", para los que no saben lo que son, son pares de numeros ordenados y separados por una coma, en donde el ORDEN (refiriendose al orden como la posicion) importa muchisimo, por ejemplo, si hablamos de un espacio tridimensional, (ya saben , X Y Z) podemos usar un vector asi ( X, Y, Z) en el cual el primer lugar (llamado lugar 0) corresponde a las "X", el segundo lugar (llamado lugar 1) corresponde a las "Y" y el tercer lugar (creo que ya se avivaron, si llamado 2, osea, si queres el lugar 45, tenes que llamar al 44, si, una porqueria, pero yo no lo invente) corresponde a las "Z".
Entonces si yo digo que estoy parado en el (0, 0, 0) y que hay un piano en el (5, 0, 0) (usemos metros por ejemplo, quiere decir que a 5 metros al lado mio hay un piano, pero si digo que esta en el (0, 0, 5) quiere decir que esta arriba mio y me tengo que correr :S, ven como la posicion importa?
Introduccion hablando de pawno
En programacion (nuestro caso) se los utiliza para almacenar informacion, como si fueran una tabla, por ejemplo, si queremos guardar en una variable la plata de los jugadores, podemos crear una variable para cada jugador y guardarla ahi no? por ejemplo:
Código:

new DineroPlayer1;
new DineroPlayer2;
new DineroPlayer3;
new DineroPlayer4;


Y para guardarla, por ejemplo cuando el jugador se muere podriamos hacer:
Código:

OnPlayerDeath(playerid,killerid,reason)
{
new money;
GetPlayerMoney(playerid,
switch(playerid)
{
case 1: DineroPlayer1=money;
case 2: DineroPlayer2=money;
case 3: DineroPlayer3=money;
case 4: DineroPlayer4=money;
ETC
}
return 1;
}


Y que tal? una porqueria no? imaginense hacer esto con 200 jugadores, y despues se nos ocurre, guardar la vida, el chaleco, las balas... se dan cuenta? ES UNA PORQUERIA! (pero igualmente muchos idiotas lo hacen...)

Les voy a dar un ejemplo mas facil, imaginense si queremos saber quien es o no policia, usamos una variable y guardamos true y false... para cada policia! miren
Código:

new EsUnPolicia1;
new EsUnPolicia2;
new EsUnPolicia3;
new EsUnPolicia4;

MakeCop(playerid)
{
switch(playerid)
{
case 1: EsUnPolicia1=true;
case 2: EsUnPolicia2=true;
case 3: EsUnPolicia3=true;
case 4: EsUnPolicia4=true;
}
}

EsUnPoliciaEljugador(playerid)
{
switch(playerid)
{
case 1: return EsUnPolicia1;
case 2: return EsUnPolicia2;
case 3: return EsUnPolicia3;
case 4: return EsUnPolicia4;
}
}



Otra vez, piensen que son 200 jugadores, y aca estamos haciendo pavaditas...

Bueno la solucion a esto son los ARRAYs.

Un array se crea asi:
Código:

new Nombre_Del_Array[ TAMAÑO DEL ARRAY ];


Como nombre puede ser cualquier cosa que empieze con una letra.
Como tamaño debe ser UN NUMERO o UNA CONSTANTE, JAMAS una variable.
ejemplo
Código:

new EsUnPolicia[200];
new DineroPlayer[200];



Si como en estos ejemplos usaremos a los jugadores, podemos usar la constante del servidor:
MAX_PLAYERS
para los vehiculos
MAX_VEHICLES
para los nombres(despues lo explico)
MAX_PLAYER_NAME

Pero, muy lindo, tenemos nuestro array creado, y ahora?
Se usa como una variable cualquiera, salvo por un detalle, hay que decirle en que posicion queremos trabajar.
Por ejemplo, ya que usamos jugadores, y cada jugador tiene un ID que es un NUMERO y ademas es UNICO, podemos usar el ID como "INDICE".
El indice, es lo que indica en que lugar del vector estamos trabajando, por ejemplo
Código:

DineroPlayer[5]=500;


Eso hara lo siguiente
(0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ETC ETC)
Ahora si cuentan, veran que el 500 es el sexto valor... pero yo puse un 5!, eso es por que el primer valor es un 0, O CASUALIDAD! el id mas bajo es un cero tambien!(casualidad?)
COmo tenemos la suerte que los ID no se repiten, el dinero nunca se mezclara, entanto y en cuanto usemos el ID del jugador, ejemplo:
Código:

new EsUnPolicia[MAX_PLAYERS];

MakeCop(playerid)
{
EsUnPolicia[playerid]=true;
}

EsUnPoliciaEljugador(playerid)
{
return EsUnPolicia[playerid];
}


Esto funciona, y miren! no es mucho mas facil? se entiende lo que ocurre?
Supongamos que queremos hacer al jugador "[DBZ]Ricardo(id:13)" policia, entonces, llamamos a la funcion "MakeCop" y le pasamos el ID de "[DBZ]Ricardo", "13".
La funcion agarra(podria haber usado una mejor palabra no?) al array y en el casillero 14 (o 13 depende como lo miren) pone un TRUE.
Ahora despues queremos saber si "[EX]Falcon(id:5)" es policia (en nuestro caso no lo es) entoces llamamos a "EsUnPoliciaEljugador( 5 )" (recuerden 5 es el ID de "[EX]Falcon"
y la funcion nos devuelve el valor de la posicion "playerid" que nosotros isimos valer 5, y como ahi hay un false, nos devuelve false.

El unico problema que tendriamos es que cuando la gente se desconectay se conecta otra persona, le puede tocar el ID repetido, digamos se desconecta "[DBZ]Ricardo" y entra "pocas_pulgas" pero como el ID 13 estaba libre, de casualidad le da el server el ID 13.
Ahora si hacemos "EsUnPoliciaEljugador( 13 )" nos va a decir, que cosa? TRUE, por que antes en ese lugar habiamos puesto un TRUE. La solucion es hacer
Código:

OnPlayerConnect(playerid)
{
EsUnPolicia[playerid]=false;
return 1;
}


Entonces no nos importa con que ID se conecte el que se conecte, seguro que va a tener un false en su lugar.

Ahora supongamos que de golpe queremos que TODO el server sea policia, como hacemos, asi?:
Código:

EsUnPolicia[ 1]=true;
EsUnPolicia[ 2]=true;
EsUnPolicia[ 3]=true;
EsUnPolicia[ 4]=true;
EsUnPolicia[ 5]=true;
EsUnPolicia[ 6]=true;
EsUnPolicia[ 7]=true;
EsUnPolicia[ 8]=true;
etc etc etc



NO! para acceder al array podemos usar: VARIABLES, NUMERO Y CONSTANTES, tonces hacemos:
Código:

for (new i=0;i<MAX_PLAYERS;i++)
{
EsUnPolicia[i]=true;
}



Imaginense si lo queriamos hacer a esto con el metodo antiguo... UNA LOCURA!

Lo que hicimos recien se llama "recorrer el vector", osea ir posicion por posicion y hacer algo (chequear, cambiar, copiar etc)
se hace por lo general con un ciclo for asi
Para adelante
Código:

for (new i=0;i< COCOCOCO;i++)


Para atras
Código:

for (new i=COCOCOCO;i> 0 ;i--)


Hay que reemplazar "COCOCOCO" por el numero o constante que usamos cuando creamos el ARRAY, fijense que en el ejemplo anterior yo use "MAX_PLAYERS"

Cuando trabajemos con vectores siempre hay que estar atentos a 2 cositas,

1) el primer elemento es el elemento "0" y no el "1"
2) JAMAS DE LOS JAMASES se debe usar un INDICE mayor que el tamaño del array, ejemplo
Código:

new Array[5];
array[7]=true;


ESTO FALLA!!! Y NO SIEMPRE LES AVISA!(si les avisa les dice algo sobre "out of bounds")

Otro ejemplo que esta mal es:
Código:

new Array[5];
array[5]=true;



Recuerden, tiene 5 lugares, pero el quinto lugar es el array[4]...

Con esto cubro lo basico de arrays, lo de los nombres y usar los arrays para guardar texto, lo explico otro dia OKIS?

Si no entienden algo (garantizado, por que explico para el OGT) pregunten sin miedo, total capaz que ni les respondo... No mentira, pregunten pregunten que voy a ponerle ganas.
Listo por hoy...

Hasta luego!
Ronald
Ronald
Root Admin
Root Admin

Cantidad de envíos : 1393
Puntos diversión latina. : -8
Fecha de inscripción : 10/09/2008

https://diversionlatina.forosactivos.net

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.