Bueno amigos, les traigo esta pequeña guía del código pawn, es el primer tutorial de una serie de tutoriales, esta guía es la de wiki.sa-mp pero esta traducida por mi!
1.-Si ves faltas de ortografía puedes informármelo-Te lo agradecería.
2.-Si bien ves no todo es muy entendible, esto se debe a que necesitas terminar de ver todos los tutoriales para poder entender dicho código pawn.
3.-Por favor, no tomas esto como una fuente de insultos, es solo un aporte que espero que les sirva a varias personas!
PD: Todo absolutamente todo fue traducido por mi. si tienes dudas sobre algo no dudes en preguntar!
GUIA PAWN EN ESPAÑOL
INICIO
Bueno para empezar les mostrare un codigo simple que comun mente es usado.
#include <a_samp>
main()
{
print("Hello World!");
return 1;
}
Los diferentes aspectos los veremos uno a su vez! Usaremos este codigo como base.
INCLUDE-Incluir
Bueno un include es usado para cargar el script-codigo que se encuentra en pawno/include/miinclude.inc.
El include basicamente es un script-codigo que define varias funciones, ya que en muchos casos es muy molesto definir funciones o callback en nuestro gamemode o filterscript.
#include <a_samp>
Aca podemos ver la definicion de un include.
# =Esto signo es para indicar que se definira algo.
include =Esto indica que se definira o llamara un include.
<a_samp> =Aka indica el include que se define o se llama.
< > = este signo es necesario para decir o indicar que es un archivo .inc
CALLS-Llamada
Esto es usado para llamar funciones o callback. En el primer codigo muesta a main() esta funcion es llamada para describir o interpretar textos posiblemente en la consola o en el servidor.
return 1;
return =Sirve para devolver algun valor o accion. Aka se puede devolver el codigo escrito anteriormente o devolver a otra funcion.
1 = Reprensenta la devolucion al dicho codigo anterior.
0 = Significa que no devolvera ningun valor.
DECLARACIONES
Las líneas de impresión y de retorno tienen ';' (Punto y coma) en ellos, esto sólo indica el final de un estado (un estado es un grupo de una o más funciones y operadores que en conjunto hacen algo, similar a una frase en lenguaje común). La mayoría de la gente pone declaraciones separadas en líneas separadas, pero esto no es necesario, sólo hace las cosas más claras, lo que sigue es igualmente válida:
main() { print("Hello World!"); return 1; }
Los {} s (frenos (brackets rizado), y no con paréntesis (entre paréntesis)) encierran un grupo de instrucciones que se deben ejecutar en conjunto (como un párrafo en el lenguaje común).
main() print("Hello World!"); return 1;
Usted recibirá un error porque ahora el "retorno 1"; no se agrupa por lo que no es parte de main(). Grupo de Paréntesis: un conjunto de estados en un solo estado (llamado una sentencia compuesta) y las funciones tienen un único estado con ellos. Sin la impresión de llaves y devolución son totalmente declaraciones por separado, por lo que hay dos, como una función sólo puede tener una única sentencia, la segunda no está en una función.
Pero, en general, se puede ampliar sentencias compuestas con el uso de la (,) operador coma pero esto no es sugerido, ya que no es la mejor práctica de codificación. Un ejemplo es el siguiente:
main() print("Hello World!"), return 1;
FUNCIONES
Una función es básicamente un trozo de código que hace algo y se puede decir que hacer esta cosa de otro lugar. También puede pasar datos sobre lo que hizo volver al lugar que le dijo que se ejecute (en lugar que "llame).
Llamada
print("Hello World!");
Como se describe en Inicio , esto llama a la función llamada "print" (definido en a_samp.inc, por lo que usted lo necesita para incluirlo) y le dice a El para en la consola la (plabra hola) Una función consiste en el nombre de la función (por ejemplo, print), que indica al sistema el trozo de código que desea llamar, y una lista de parámetros, encerrado en () después de que el nombre de la función, pasan de datos adicionales a la función de ayudar a que correr. Si no tiene parámetros que se necesita millones de funciones:
printa();
printaa();
printab();
printac();
etc...
Las funciones pueden tener tantos parámetros como quieras, desde 0 (puede haber un límite superior, pero es por lo menos 128):
printf("Hello World!", 1, 2, 3, 4, 5, 6);
No te preocupes por lo que hace esa función, por ahora, sólo tiene 7 parámetros, cada uno separado por una coma.
Definición
Además de ser capaz de llamar a las funciones ya existentes también se puede escribir y llamar a su propia:
#include <a_samp>
main()
{
return MyFunction();
}
MyFunction()
{
print("Hello World!");
return 1;
}
Esto sólo hace exactamente lo mismo que el código original, pero está escrito de manera diferente. main () es llamado cuando se inicia el modo (se llama automáticamente) llama a la nueva función personalizada llamada MyFunction ().Esta función imprime el mensaje en la consola del servidor entonces devuelve el número 1 a main (). main () toma el valor devuelto (1) y luego la devuelve al servidor sí mismo (es decir, el lugar que llama principal en el primer lugar). Como "volver MyFunction ();" es un estado único que podía hacer:
#include <a_samp>
main() return MyFunction();
MyFunction()
{
print ( "Hola Mundo!" ) ;
volver 1 ;
}
Pero la mayoría de las personas no lo hacen por motivos de claridad. Tampoco se puede utilizar el valor de retorno MyFunction en absoluto y hacer:
#include <a_samp>
main()
{
MyFunction();
return 1;
}
MyFunction()
{
print("Hello World!");
return 1;
}
Parámetros
Los parámetros son un tipo de variables que no es necesario declarar como vienen desde el lugar que llamó a la función:
#include <a_samp>
main()
{
return MyFunction("Hello World!");
}
MyFunction(string[])
{
print(string);
return 1;
}
Este código todavía hace lo mismo, pero ahora estamos diciendo MyFunction () lo que se vea. La llamada pasa la cadena "Hola Mundo!" a la función de donde se almacena en una cadena variable llamada (el [] significa que es una matriz tal como se explica más adelante). La función de impresión se la llama, pasa el contenido de la variable de cadena, sabemos que es una variable, ya que no tiene el ""de mas.
Variables
Una variable es básicamente un poco de memoria, es donde se almacenan los datos y se puede cambiar y leer según se requiera. Las variables son una o más células, una célula es de 32 bits (4 bytes) grandes y por defecto firmó para que puedan almacenar -2147483648-2147,483647 millones (aunque -2147483648 no está bien definido en PAWN y da resultados extraños si aparece). Una variable a partir de más de una célula se llama una matriz, las cadenas son un tipo especial de matriz donde cada célula tiene un carácter de la cadena (o 4 caracteres en cadenas envasados, pero no están cubiertos aquí).
Declaración
Para crear una nueva variable se tiene que declarar:
new
myVariable;
Esto le indica al sistema para crear una nueva variable llamada myVariable, el valor inicial de esta variable será 0.
Ajuste
new
myVariable = 7 ;
Esto declara una nueva variable y fija su valor inicial a 7, por lo que la impresión de la variable ahora dará 7. Para mostrar una variable que no es una cadena tenemos que volver a la función printf () como se mencionó anteriormente y hacer:
new
myVariable = 7;
printf("%d", myVariable);
Una vez más, por ahora todo lo que necesita saber es que esto imprimirá el valor de myVariable (es decir, 7 en este punto) en el servidor.
new
myVariable = 7;
printf("%d", myVariable);
myVariable = 8;
printf("%d", myVariable);
Ese código imprimirá 7, cambie el valor de la variable a 8 y mostrara el nuevo valor en la ventana del servidor también. Hay muchas otras cosas que usted puede hacer con variables, algunas se enumeran a continuación, la mayoría se enumeran en otra parte:
myVariable = myVariable + 4 ;
Establece el valor de myVariable al antiguo valor de myVariable plus 4, es decir, aumentar su valor por 4. Esto también se puede escribir como:
myVariable += 4 ;
Lo cual significa "aumentar myVariable por 4".
myVariable -= 4 ;
Esto disminuirá el valor por 4.
myVariable *= 4 ;
Esto multiplicará el valor por 4.
myVariable /= 4 ;
Eso dividira el valor por 4.
Arrays
Declaración
Una matriz es una variable en la que puede almacenar múltiples piezas de datos a la vez y acceder a ellos de forma dinámica. Una matriz se declara a un tamaño de conjunto en tiempo de compilación por lo que necesita saber cuántas piezas de datos necesita para almacenar de antemano, un buen ejemplo de esto es la matriz MAX_PLAYERS muy común, esto tiene una ranura para cada jugador, posiblemente conectado , para que sepa que los datos de un jugador no interferirán con los datos de otro jugador.
new
myArray[5];
Ese código será declarar una matriz de 5 ranuras grandes, así que usted puede almacenar 5 piezas de datos normales a la vez en que solo lo que no puedes hacer es algo como lo siguiente:
new
myVariable = 5,
myArray[myVariable];
Ese código parece que sería crear una matriz del tamaño de cualquier número, se almacena en myVariable (aquí 5, pero podría ser cualquier cosa), pero no se puede hacer esto. En PAWN se asigna la memoria para las variables cuando se compila el código, esto significa que las matrices son siempre un tamaño, no se puede establecer el tamaño a lo que quieras cuando quieras.
Accediendo
Para establecer un valor en una matriz tiene que decir qué en que parte de la matriz desea almacenar los datos, esto se puede hacer con otra variable:
new
myArray[5];
myArray[2] = 7;
Esto declara una matriz con 5 ranuras y dar a la tercera ranura un valor de 7, dado que las variables siempre comienzan como 0 esto hará que los valores de la matriz sean:
0, 0, 7, 0, 0
¿Por qué es que no:
0, 7, 0, 0, 0
usted se está preguntando? Es porque contando realidad comienza desde el número 0 y no por 1. Considere lo siguiente:
2, 4, 6, 8
Si usted va a través de la lista a continuación, después del número 2 que ya han tenido un número (el 2), esto significa que si usted está contando los números en el momento en que llegue al número 4 ya está en uno, no estás en uno al llegar a la 2, que está en cero. Así, el 2 es en la posición cero y el 4 es en la posición uno, y por lo tanto se deduce que la 6 está en la posición dos, que es donde el 7 en el primer ejemplo anterior es. Si etiquetamos las ranuras para el primer ejemplo tenemos:
0 1 2 3 4
0 0 7 0 0
Hay cinco ranuras,como se puede ver, y esto es muy importante, no hay ninguna ranura CINCO, haciendo lo siguiente podría estrellar su servidor:
new
myArray[5];
myArray[5] = 7;
Como se mencionó anteriormente el índice de matriz (el índice es el slot al que está escribiendo) puede ser cualquier cosa, un número, una variable, o incluso una función que devuelve un valor.
new
myArray[5],
myIndex = 2;
myArray[myIndex] = 7;
Una vez que tenga una matriz y un índice que puede utilizar ese bloque exactamente como si se tratara de cualquier otra variable:
myArray[2] = myArray[2] + 1;
myArray[2] += 1;
myArray[2]++;
Ejemplo
Como se mencionó anteriormente un tipo común de matriz es la matriz MAX_PLAYERS. MAX_PLAYERS no es una variable, esto define lo que se explica más adelante, pero por ahora aceptar que es un número constante igual al número máximo de jugadores que un servidor puede mantener (esto por defecto es 500, aunque se cambie el número en su archivo server.cfg). El siguiente código utiliza variables normales para contener datos para 4 jugadores y hacer algo con esos jugadores en una función (por simplicidad asumen MAX_PLAYERS es 4 por ahora):
new
gPlayer0,
gPlayer1,
gPlayer2,
gPlayer3;
SetPlayerValue(playerid, value)
{
switch(playerid)
{
case 0: gPlayer0 = value; // is the same as doing if(playerid == 0)
case 1: gPlayer1 = value; // is the same as doing if(playerid == 1)
case 2: gPlayer2 = value; // is the same as doing if(playerid == 2)
case 3: gPlayer3 = value; // is the same as doing if(playerid == 3)
}
}
Vea la sección sobre las estructuras de control para obtener más información sobre lo que está pasando allí, también tenga en cuenta que esto podría hacerse como un interruptor, pero eso es menos clara para el ejemplo y efectivamente el mismo código de todos modos.
Ahora compara eso con el uso de una matriz con una ranura por jugador, teniendo en cuenta un índice de matriz puede ser cualquier valor:
new
gPlayers[MAX_PLAYERS];
SetPlayerValue(playerid, value)
{
gPlayers[playerid] = value;
}
Eso creará una matriz global (véase la sección sobre el alcance) con una ranura para cada jugador, entonces la función asignará lo que está en el "valor" variable a la ranura para el jugador especificado. El primer ejemplo era grande, con sólo cuatro jugadores, con 4 líneas por jugador, eso es 2.000 líneas para 500 jugadores (si puede ser menor, pero aún así es mucho), la segunda versión es una sola línea sin importar el número de jugadores que tiene.
STRING
__________________________________________________ __________________________
Uso básico
Una cadena es un tipo especial de matriz, una que se utiliza para contener múltiples personajes para crear una palabra o frase u otro texto legible por humanos. Un carácter es un byte de largo (aunque no se extienden conjuntos donde un personaje es múltiples bytes, pero estos no están bien definidos en SA: MP) y por defecto un carácter ocupa una celda (una variable normal o una ranura de matriz). Los caracteres se codifican en un sistema llamado ASCII , el carácter "A" está representada por el número 65, diciendo que el sistema muestre un número dará 65, diciendo que el sistema muestre un personaje dará un Capital. Obviamente es un carácter único ocupa una sola célula de múltiples caracteres (es decir, de texto) se ocupará de varias celdas, colecciones de células, como se acaba de explicar, se llaman matrices.
Las cadenas en PEÓN (y otros idiomas) son lo que se llama "NULL terminado", esto significa que cuando se alcanza 0, la cadena. Esto no es lo mismo que el carácter "0", representada por el número 48, este es el carácter nulo, representado por el número 0. Esto significa que usted puede tener una matriz de cadenas 20 células grandes, pero sólo tienen una cadena de 3 caracteres Si el cuarto carácter es el carácter nulo, señalando el final de la cadena. No se puede sin embargo, tiene una cadena de 20 caracteres de longitud como el carácter NULL DEBE estar en la cadena, por lo que en una matriz de 20 células se puede tener una cadena de caracteres 19 y un carácter de terminación NULL.
new
myString[16] = "Hello World!";
Ese código declara una nueva cadena con el espacio suficiente para una cadena de 15 caracteres y lo establece inicialmente a la cadena de 5 caracteres "Hello World!", Las comillas alrededor del texto indican que se trata de una cadena.Internamente, la gama se verá así:
104 101 108 108 111 0 xxxxxxxxxx
La "x" quiere decir nada, en este ejemplo que todo será 0, pero que a ellos después de que el carácter nulo no importa lo que son, que no afectará a la cadena.
Las cadenas pueden ser manipulados como matrices normales, por ejemplo:
new
myString[16] = "Hello World!";
myString[1] = 97;
Va a cambiar el carácter en la ranura 1 a la naturaleza representada por el número 97 (a minúscula "a"), lo que resulta en la cadena de la lectura "hello". Esto se puede escribir mucho más legible y fácil de editar como:
new
myString[16] = "Hello World!";
myString[1] = 'a';
Las comillas simples alrededor de la "a" significa que es un personaje, no es una cadena, los personajes no tienen que ser terminada en nulo, ya que sólo alguna vez una célula de largo, también se pueden utilizar indistintamente con números si usted sabe lo que representan .
new
myString[16] = "Hello World!";
myString[1] = '\0';
'\ 0' es de dos personajes, sin embargo, el \ es un carácter especial que modifica el carácter siguiente, \ 0 significa NULL, ese código es lo mismo que:
new
myString[16] = "Hello World!";
myString[1] = 0;
Pero no es lo mismo que:
new
myString[16] = "Hello World!";
myString[1] = '0';
Las primera y segunda versiones resultarán en la cadena simplemente:
h
La tercera versión resultará en la cadena:
h0llo
Carácter de escape
Como se ha mencionado brevemente una barra invertida es un carácter especial, haciendo:
'\'
o:
"\"
Dará un error de compilación porque el \ modifica el siguiente carácter por lo que esas constantes no se a finalizado correctamente, esto puede ser usado para crear caracteres que normalmente no pueden ser creados, por ejemplo:
new
myString[4] = "\"";
Ese código creará una cadena que consiste en sólo una doble cita, normalmente una doble cita señala el final de una cadena escrita pero la barra invertida hace que la doble cita inmediatamente después de que una parte de la cadena, y la doble cita después de que termina la cadena en lugar . Otros caracteres especiales son:
\ 0 Carácter NULL Finaliza una cadena.
EOS Carácter NULL (Igual al anterior)
\ N Salto de línea utilizar \ n para una nueva línea en Linux (también funciona en Windows)
\ R Retorno de carro Use \ r \ n para una nueva línea en Windows
\\ Backslash Se utiliza para poner una barra invertida real en una cadena
\ ' Comilla simple Se utiliza para utilizar una comilla simple real como un carácter entre comillas simples (uso: '\' ')
\ " Las comillas dobles Se utiliza para poner una doble cita real en una cadena
\ Xnnn; Número hexadecimal Se utiliza para establecer el carácter al personaje representado por el número hexadecimal especificado en su lugar en NNN
\ NNN; Número Se utiliza para establecer el carácter al personaje representado por el número especificado en lugar de NNN (ver \ 0)
Hay otros, pero esos son los principales.
Etiquetas
Una etiqueta es una pieza adicional de información sobre una variable que define el lugar donde se puede usar, proporcionando información sobre su funcionalidad. Las etiquetas pueden ser fuertes (comenzando con una letra en mayúscula) o débil. Por ejemplo:
new
Float:a = 6.0;
La parte "float" es la etiqueta, esto define esta variable como un flotador (no enteros / número real) y determina donde se puede utilizar.
native SetGravity(Float:gravity);
Esto significa que la función setGravity toma un único parámetro que tiene que ser un flotador, por ejemplo:
SetGravity(6.0);
new
Float:fGrav = 5.0;
SetGravity(fGrav);
Que establecerá la gravedad al 6 (6.0 como un flotador) y luego 5 (5.0 como un flotador). Usando la etiqueta equivocada en el lugar equivocado con frecuencia a un desajuste de la etiqueta:
SetGravity(MyTag:7);
Que intentará establecer la gravedad a 7 con la etiqueta "MyTag", es claramente no es un "flotador", por lo que está mal. También tenga en cuenta que las etiquetas son sensibles a mayúsculas.
Las etiquetas personalizadas pueden ser definidos por los usuarios:
new myTag: variable = 0,
AppleTag: another = 1;
Esto es perfectamente válido, sin embargo, cuando la adición de estas dos variables directamente , debe utilizar '_:' a 'de-tag', de lo contrario el compilador producirá una advertencia de "etiqueta desajuste '.
Alcance
Alcance es donde se puede utilizar una variable. Hay cuatro ámbitos principales: local, estático estático, global y local global. Todas las variables sólo se pueden utilizar después de que se declaran así que esto es correcto:
new
var = 4;
printf("%d", var);
Esto está mal:
printf("%d", var);
new
var = 4;
local
Una variable local se declaró un "new" dentro de una función o parte de una función:
MyFunc()
{
new
var1 = 4;
printf("%d", var1);
{
// var1 still exists as this is a lower level
new
var2 = 8;
printf("%d %d", var1, var2);
}
// var2 no longer exists as this is a higher level
}
// var1 no longer exists
Las variables locales se restablecen cada vez, por ejemplo:
for (new i = 0; i < 3; i++)
{
new
j = 1;
printf("%d", j);
j++;
}
Imprimirá:
1
1
1
Debido a que se crea j, impreso, incrementa entonces destruido, entonces el código de bucles.
estática local
Un local de estática puede ser utilizado en el mismo lugar que un local, pero no olvida que es antiguo valor, por ejemplo:
MyFunc()
{
static
var1 = 4;
printf("%d", var1);
{
// var1 still exists as this is a lower level
static
var2 = 8;
printf("%d %d", var1, var2);
}
// var2 no longer exists as this is a higher level
}
// var1 no longer exists
Ese código se comportará exactamente el mismo que el nuevo ejemplo, sin embargo esto:
for (new i = 0; i < 3; i++)
{
static
j = 1;
printf("%d", j);
j++;
}
Imprimirá:
1
2
3
Debido a que j es estático, lo recuerda su antiguo valor.
global
Las variables globales se declaran fuera de una función y pueden ser utilizados en cualquiera de las funciones:
new
gMyVar = 4;
MyFunc()
{
printf("%d", gMyVar);
}
Ellos nunca se restablecen o pierden.
estática mundial
Variables estáticas globales son como globales normales, pero sólo se pueden utilizar en el archivo en el que se declaran:
Archivo1:
static
gsMyVar = 4;
MyFunc()
{
printf("%d", gsMyVar);
}
#include "File2"
Archivo2:
MyFunc2()
{
// This is wrong as gsMyVar doesn't exist here
printf("%d", gsMyVar);
}
estático también se puede aplicar a las funciones de la misma manera.
Creditos: http://ift.tt/1DcGsh2
Doblado al Español por: Edmundo Abraham Guerrero Morataya. http://ift.tt/1BDwEIR
PD: algunas cosas no estan bien explicadas pues eso se debe a que para entenderlas mejor deves ver los demas tutoriales.
NOTA: Este tutorial es exclusivamente a personas interesadas en aprender pawn.
Espero que todo lo anterior te allá sido útil.
1.-Si ves faltas de ortografía puedes informármelo-Te lo agradecería.
2.-Si bien ves no todo es muy entendible, esto se debe a que necesitas terminar de ver todos los tutoriales para poder entender dicho código pawn.
3.-Por favor, no tomas esto como una fuente de insultos, es solo un aporte que espero que les sirva a varias personas!
PD: Todo absolutamente todo fue traducido por mi. si tienes dudas sobre algo no dudes en preguntar!
GUIA PAWN EN ESPAÑOL
INICIO
Bueno para empezar les mostrare un codigo simple que comun mente es usado.
#include <a_samp>
main()
{
print("Hello World!");
return 1;
}
Los diferentes aspectos los veremos uno a su vez! Usaremos este codigo como base.
INCLUDE-Incluir
Bueno un include es usado para cargar el script-codigo que se encuentra en pawno/include/miinclude.inc.
El include basicamente es un script-codigo que define varias funciones, ya que en muchos casos es muy molesto definir funciones o callback en nuestro gamemode o filterscript.
#include <a_samp>
Aca podemos ver la definicion de un include.
# =Esto signo es para indicar que se definira algo.
include =Esto indica que se definira o llamara un include.
<a_samp> =Aka indica el include que se define o se llama.
< > = este signo es necesario para decir o indicar que es un archivo .inc
CALLS-Llamada
Esto es usado para llamar funciones o callback. En el primer codigo muesta a main() esta funcion es llamada para describir o interpretar textos posiblemente en la consola o en el servidor.
return 1;
return =Sirve para devolver algun valor o accion. Aka se puede devolver el codigo escrito anteriormente o devolver a otra funcion.
1 = Reprensenta la devolucion al dicho codigo anterior.
0 = Significa que no devolvera ningun valor.
DECLARACIONES
Las líneas de impresión y de retorno tienen ';' (Punto y coma) en ellos, esto sólo indica el final de un estado (un estado es un grupo de una o más funciones y operadores que en conjunto hacen algo, similar a una frase en lenguaje común). La mayoría de la gente pone declaraciones separadas en líneas separadas, pero esto no es necesario, sólo hace las cosas más claras, lo que sigue es igualmente válida:
main() { print("Hello World!"); return 1; }
Los {} s (frenos (brackets rizado), y no con paréntesis (entre paréntesis)) encierran un grupo de instrucciones que se deben ejecutar en conjunto (como un párrafo en el lenguaje común).
main() print("Hello World!"); return 1;
Usted recibirá un error porque ahora el "retorno 1"; no se agrupa por lo que no es parte de main(). Grupo de Paréntesis: un conjunto de estados en un solo estado (llamado una sentencia compuesta) y las funciones tienen un único estado con ellos. Sin la impresión de llaves y devolución son totalmente declaraciones por separado, por lo que hay dos, como una función sólo puede tener una única sentencia, la segunda no está en una función.
Pero, en general, se puede ampliar sentencias compuestas con el uso de la (,) operador coma pero esto no es sugerido, ya que no es la mejor práctica de codificación. Un ejemplo es el siguiente:
main() print("Hello World!"), return 1;
FUNCIONES
Una función es básicamente un trozo de código que hace algo y se puede decir que hacer esta cosa de otro lugar. También puede pasar datos sobre lo que hizo volver al lugar que le dijo que se ejecute (en lugar que "llame).
Llamada
print("Hello World!");
Como se describe en Inicio , esto llama a la función llamada "print" (definido en a_samp.inc, por lo que usted lo necesita para incluirlo) y le dice a El para en la consola la (plabra hola) Una función consiste en el nombre de la función (por ejemplo, print), que indica al sistema el trozo de código que desea llamar, y una lista de parámetros, encerrado en () después de que el nombre de la función, pasan de datos adicionales a la función de ayudar a que correr. Si no tiene parámetros que se necesita millones de funciones:
printa();
printaa();
printab();
printac();
etc...
Las funciones pueden tener tantos parámetros como quieras, desde 0 (puede haber un límite superior, pero es por lo menos 128):
printf("Hello World!", 1, 2, 3, 4, 5, 6);
No te preocupes por lo que hace esa función, por ahora, sólo tiene 7 parámetros, cada uno separado por una coma.
Definición
Además de ser capaz de llamar a las funciones ya existentes también se puede escribir y llamar a su propia:
#include <a_samp>
main()
{
return MyFunction();
}
MyFunction()
{
print("Hello World!");
return 1;
}
Esto sólo hace exactamente lo mismo que el código original, pero está escrito de manera diferente. main () es llamado cuando se inicia el modo (se llama automáticamente) llama a la nueva función personalizada llamada MyFunction ().Esta función imprime el mensaje en la consola del servidor entonces devuelve el número 1 a main (). main () toma el valor devuelto (1) y luego la devuelve al servidor sí mismo (es decir, el lugar que llama principal en el primer lugar). Como "volver MyFunction ();" es un estado único que podía hacer:
#include <a_samp>
main() return MyFunction();
MyFunction()
{
print ( "Hola Mundo!" ) ;
volver 1 ;
}
Pero la mayoría de las personas no lo hacen por motivos de claridad. Tampoco se puede utilizar el valor de retorno MyFunction en absoluto y hacer:
#include <a_samp>
main()
{
MyFunction();
return 1;
}
MyFunction()
{
print("Hello World!");
return 1;
}
Parámetros
Los parámetros son un tipo de variables que no es necesario declarar como vienen desde el lugar que llamó a la función:
#include <a_samp>
main()
{
return MyFunction("Hello World!");
}
MyFunction(string[])
{
print(string);
return 1;
}
Este código todavía hace lo mismo, pero ahora estamos diciendo MyFunction () lo que se vea. La llamada pasa la cadena "Hola Mundo!" a la función de donde se almacena en una cadena variable llamada (el [] significa que es una matriz tal como se explica más adelante). La función de impresión se la llama, pasa el contenido de la variable de cadena, sabemos que es una variable, ya que no tiene el ""de mas.
Variables
Una variable es básicamente un poco de memoria, es donde se almacenan los datos y se puede cambiar y leer según se requiera. Las variables son una o más células, una célula es de 32 bits (4 bytes) grandes y por defecto firmó para que puedan almacenar -2147483648-2147,483647 millones (aunque -2147483648 no está bien definido en PAWN y da resultados extraños si aparece). Una variable a partir de más de una célula se llama una matriz, las cadenas son un tipo especial de matriz donde cada célula tiene un carácter de la cadena (o 4 caracteres en cadenas envasados, pero no están cubiertos aquí).
Declaración
Para crear una nueva variable se tiene que declarar:
new
myVariable;
Esto le indica al sistema para crear una nueva variable llamada myVariable, el valor inicial de esta variable será 0.
Ajuste
new
myVariable = 7 ;
Esto declara una nueva variable y fija su valor inicial a 7, por lo que la impresión de la variable ahora dará 7. Para mostrar una variable que no es una cadena tenemos que volver a la función printf () como se mencionó anteriormente y hacer:
new
myVariable = 7;
printf("%d", myVariable);
Una vez más, por ahora todo lo que necesita saber es que esto imprimirá el valor de myVariable (es decir, 7 en este punto) en el servidor.
new
myVariable = 7;
printf("%d", myVariable);
myVariable = 8;
printf("%d", myVariable);
Ese código imprimirá 7, cambie el valor de la variable a 8 y mostrara el nuevo valor en la ventana del servidor también. Hay muchas otras cosas que usted puede hacer con variables, algunas se enumeran a continuación, la mayoría se enumeran en otra parte:
myVariable = myVariable + 4 ;
Establece el valor de myVariable al antiguo valor de myVariable plus 4, es decir, aumentar su valor por 4. Esto también se puede escribir como:
myVariable += 4 ;
Lo cual significa "aumentar myVariable por 4".
myVariable -= 4 ;
Esto disminuirá el valor por 4.
myVariable *= 4 ;
Esto multiplicará el valor por 4.
myVariable /= 4 ;
Eso dividira el valor por 4.
Arrays
Declaración
Una matriz es una variable en la que puede almacenar múltiples piezas de datos a la vez y acceder a ellos de forma dinámica. Una matriz se declara a un tamaño de conjunto en tiempo de compilación por lo que necesita saber cuántas piezas de datos necesita para almacenar de antemano, un buen ejemplo de esto es la matriz MAX_PLAYERS muy común, esto tiene una ranura para cada jugador, posiblemente conectado , para que sepa que los datos de un jugador no interferirán con los datos de otro jugador.
new
myArray[5];
Ese código será declarar una matriz de 5 ranuras grandes, así que usted puede almacenar 5 piezas de datos normales a la vez en que solo lo que no puedes hacer es algo como lo siguiente:
new
myVariable = 5,
myArray[myVariable];
Ese código parece que sería crear una matriz del tamaño de cualquier número, se almacena en myVariable (aquí 5, pero podría ser cualquier cosa), pero no se puede hacer esto. En PAWN se asigna la memoria para las variables cuando se compila el código, esto significa que las matrices son siempre un tamaño, no se puede establecer el tamaño a lo que quieras cuando quieras.
Accediendo
Para establecer un valor en una matriz tiene que decir qué en que parte de la matriz desea almacenar los datos, esto se puede hacer con otra variable:
new
myArray[5];
myArray[2] = 7;
Esto declara una matriz con 5 ranuras y dar a la tercera ranura un valor de 7, dado que las variables siempre comienzan como 0 esto hará que los valores de la matriz sean:
0, 0, 7, 0, 0
¿Por qué es que no:
0, 7, 0, 0, 0
usted se está preguntando? Es porque contando realidad comienza desde el número 0 y no por 1. Considere lo siguiente:
2, 4, 6, 8
Si usted va a través de la lista a continuación, después del número 2 que ya han tenido un número (el 2), esto significa que si usted está contando los números en el momento en que llegue al número 4 ya está en uno, no estás en uno al llegar a la 2, que está en cero. Así, el 2 es en la posición cero y el 4 es en la posición uno, y por lo tanto se deduce que la 6 está en la posición dos, que es donde el 7 en el primer ejemplo anterior es. Si etiquetamos las ranuras para el primer ejemplo tenemos:
0 1 2 3 4
0 0 7 0 0
Hay cinco ranuras,como se puede ver, y esto es muy importante, no hay ninguna ranura CINCO, haciendo lo siguiente podría estrellar su servidor:
new
myArray[5];
myArray[5] = 7;
Como se mencionó anteriormente el índice de matriz (el índice es el slot al que está escribiendo) puede ser cualquier cosa, un número, una variable, o incluso una función que devuelve un valor.
new
myArray[5],
myIndex = 2;
myArray[myIndex] = 7;
Una vez que tenga una matriz y un índice que puede utilizar ese bloque exactamente como si se tratara de cualquier otra variable:
myArray[2] = myArray[2] + 1;
myArray[2] += 1;
myArray[2]++;
Ejemplo
Como se mencionó anteriormente un tipo común de matriz es la matriz MAX_PLAYERS. MAX_PLAYERS no es una variable, esto define lo que se explica más adelante, pero por ahora aceptar que es un número constante igual al número máximo de jugadores que un servidor puede mantener (esto por defecto es 500, aunque se cambie el número en su archivo server.cfg). El siguiente código utiliza variables normales para contener datos para 4 jugadores y hacer algo con esos jugadores en una función (por simplicidad asumen MAX_PLAYERS es 4 por ahora):
new
gPlayer0,
gPlayer1,
gPlayer2,
gPlayer3;
SetPlayerValue(playerid, value)
{
switch(playerid)
{
case 0: gPlayer0 = value; // is the same as doing if(playerid == 0)
case 1: gPlayer1 = value; // is the same as doing if(playerid == 1)
case 2: gPlayer2 = value; // is the same as doing if(playerid == 2)
case 3: gPlayer3 = value; // is the same as doing if(playerid == 3)
}
}
Vea la sección sobre las estructuras de control para obtener más información sobre lo que está pasando allí, también tenga en cuenta que esto podría hacerse como un interruptor, pero eso es menos clara para el ejemplo y efectivamente el mismo código de todos modos.
Ahora compara eso con el uso de una matriz con una ranura por jugador, teniendo en cuenta un índice de matriz puede ser cualquier valor:
new
gPlayers[MAX_PLAYERS];
SetPlayerValue(playerid, value)
{
gPlayers[playerid] = value;
}
Eso creará una matriz global (véase la sección sobre el alcance) con una ranura para cada jugador, entonces la función asignará lo que está en el "valor" variable a la ranura para el jugador especificado. El primer ejemplo era grande, con sólo cuatro jugadores, con 4 líneas por jugador, eso es 2.000 líneas para 500 jugadores (si puede ser menor, pero aún así es mucho), la segunda versión es una sola línea sin importar el número de jugadores que tiene.
STRING
__________________________________________________ __________________________
Uso básico
Una cadena es un tipo especial de matriz, una que se utiliza para contener múltiples personajes para crear una palabra o frase u otro texto legible por humanos. Un carácter es un byte de largo (aunque no se extienden conjuntos donde un personaje es múltiples bytes, pero estos no están bien definidos en SA: MP) y por defecto un carácter ocupa una celda (una variable normal o una ranura de matriz). Los caracteres se codifican en un sistema llamado ASCII , el carácter "A" está representada por el número 65, diciendo que el sistema muestre un número dará 65, diciendo que el sistema muestre un personaje dará un Capital. Obviamente es un carácter único ocupa una sola célula de múltiples caracteres (es decir, de texto) se ocupará de varias celdas, colecciones de células, como se acaba de explicar, se llaman matrices.
Las cadenas en PEÓN (y otros idiomas) son lo que se llama "NULL terminado", esto significa que cuando se alcanza 0, la cadena. Esto no es lo mismo que el carácter "0", representada por el número 48, este es el carácter nulo, representado por el número 0. Esto significa que usted puede tener una matriz de cadenas 20 células grandes, pero sólo tienen una cadena de 3 caracteres Si el cuarto carácter es el carácter nulo, señalando el final de la cadena. No se puede sin embargo, tiene una cadena de 20 caracteres de longitud como el carácter NULL DEBE estar en la cadena, por lo que en una matriz de 20 células se puede tener una cadena de caracteres 19 y un carácter de terminación NULL.
new
myString[16] = "Hello World!";
Ese código declara una nueva cadena con el espacio suficiente para una cadena de 15 caracteres y lo establece inicialmente a la cadena de 5 caracteres "Hello World!", Las comillas alrededor del texto indican que se trata de una cadena.Internamente, la gama se verá así:
104 101 108 108 111 0 xxxxxxxxxx
La "x" quiere decir nada, en este ejemplo que todo será 0, pero que a ellos después de que el carácter nulo no importa lo que son, que no afectará a la cadena.
Las cadenas pueden ser manipulados como matrices normales, por ejemplo:
new
myString[16] = "Hello World!";
myString[1] = 97;
Va a cambiar el carácter en la ranura 1 a la naturaleza representada por el número 97 (a minúscula "a"), lo que resulta en la cadena de la lectura "hello". Esto se puede escribir mucho más legible y fácil de editar como:
new
myString[16] = "Hello World!";
myString[1] = 'a';
Las comillas simples alrededor de la "a" significa que es un personaje, no es una cadena, los personajes no tienen que ser terminada en nulo, ya que sólo alguna vez una célula de largo, también se pueden utilizar indistintamente con números si usted sabe lo que representan .
new
myString[16] = "Hello World!";
myString[1] = '\0';
'\ 0' es de dos personajes, sin embargo, el \ es un carácter especial que modifica el carácter siguiente, \ 0 significa NULL, ese código es lo mismo que:
new
myString[16] = "Hello World!";
myString[1] = 0;
Pero no es lo mismo que:
new
myString[16] = "Hello World!";
myString[1] = '0';
Las primera y segunda versiones resultarán en la cadena simplemente:
h
La tercera versión resultará en la cadena:
h0llo
Carácter de escape
Como se ha mencionado brevemente una barra invertida es un carácter especial, haciendo:
'\'
o:
"\"
Dará un error de compilación porque el \ modifica el siguiente carácter por lo que esas constantes no se a finalizado correctamente, esto puede ser usado para crear caracteres que normalmente no pueden ser creados, por ejemplo:
new
myString[4] = "\"";
Ese código creará una cadena que consiste en sólo una doble cita, normalmente una doble cita señala el final de una cadena escrita pero la barra invertida hace que la doble cita inmediatamente después de que una parte de la cadena, y la doble cita después de que termina la cadena en lugar . Otros caracteres especiales son:
\ 0 Carácter NULL Finaliza una cadena.
EOS Carácter NULL (Igual al anterior)
\ N Salto de línea utilizar \ n para una nueva línea en Linux (también funciona en Windows)
\ R Retorno de carro Use \ r \ n para una nueva línea en Windows
\\ Backslash Se utiliza para poner una barra invertida real en una cadena
\ ' Comilla simple Se utiliza para utilizar una comilla simple real como un carácter entre comillas simples (uso: '\' ')
\ " Las comillas dobles Se utiliza para poner una doble cita real en una cadena
\ Xnnn; Número hexadecimal Se utiliza para establecer el carácter al personaje representado por el número hexadecimal especificado en su lugar en NNN
\ NNN; Número Se utiliza para establecer el carácter al personaje representado por el número especificado en lugar de NNN (ver \ 0)
Hay otros, pero esos son los principales.
Etiquetas
Una etiqueta es una pieza adicional de información sobre una variable que define el lugar donde se puede usar, proporcionando información sobre su funcionalidad. Las etiquetas pueden ser fuertes (comenzando con una letra en mayúscula) o débil. Por ejemplo:
new
Float:a = 6.0;
La parte "float" es la etiqueta, esto define esta variable como un flotador (no enteros / número real) y determina donde se puede utilizar.
native SetGravity(Float:gravity);
Esto significa que la función setGravity toma un único parámetro que tiene que ser un flotador, por ejemplo:
SetGravity(6.0);
new
Float:fGrav = 5.0;
SetGravity(fGrav);
Que establecerá la gravedad al 6 (6.0 como un flotador) y luego 5 (5.0 como un flotador). Usando la etiqueta equivocada en el lugar equivocado con frecuencia a un desajuste de la etiqueta:
SetGravity(MyTag:7);
Que intentará establecer la gravedad a 7 con la etiqueta "MyTag", es claramente no es un "flotador", por lo que está mal. También tenga en cuenta que las etiquetas son sensibles a mayúsculas.
Las etiquetas personalizadas pueden ser definidos por los usuarios:
new myTag: variable = 0,
AppleTag: another = 1;
Esto es perfectamente válido, sin embargo, cuando la adición de estas dos variables directamente , debe utilizar '_:' a 'de-tag', de lo contrario el compilador producirá una advertencia de "etiqueta desajuste '.
Alcance
Alcance es donde se puede utilizar una variable. Hay cuatro ámbitos principales: local, estático estático, global y local global. Todas las variables sólo se pueden utilizar después de que se declaran así que esto es correcto:
new
var = 4;
printf("%d", var);
Esto está mal:
printf("%d", var);
new
var = 4;
local
Una variable local se declaró un "new" dentro de una función o parte de una función:
MyFunc()
{
new
var1 = 4;
printf("%d", var1);
{
// var1 still exists as this is a lower level
new
var2 = 8;
printf("%d %d", var1, var2);
}
// var2 no longer exists as this is a higher level
}
// var1 no longer exists
Las variables locales se restablecen cada vez, por ejemplo:
for (new i = 0; i < 3; i++)
{
new
j = 1;
printf("%d", j);
j++;
}
Imprimirá:
1
1
1
Debido a que se crea j, impreso, incrementa entonces destruido, entonces el código de bucles.
estática local
Un local de estática puede ser utilizado en el mismo lugar que un local, pero no olvida que es antiguo valor, por ejemplo:
MyFunc()
{
static
var1 = 4;
printf("%d", var1);
{
// var1 still exists as this is a lower level
static
var2 = 8;
printf("%d %d", var1, var2);
}
// var2 no longer exists as this is a higher level
}
// var1 no longer exists
Ese código se comportará exactamente el mismo que el nuevo ejemplo, sin embargo esto:
for (new i = 0; i < 3; i++)
{
static
j = 1;
printf("%d", j);
j++;
}
Imprimirá:
1
2
3
Debido a que j es estático, lo recuerda su antiguo valor.
global
Las variables globales se declaran fuera de una función y pueden ser utilizados en cualquiera de las funciones:
new
gMyVar = 4;
MyFunc()
{
printf("%d", gMyVar);
}
Ellos nunca se restablecen o pierden.
estática mundial
Variables estáticas globales son como globales normales, pero sólo se pueden utilizar en el archivo en el que se declaran:
Archivo1:
static
gsMyVar = 4;
MyFunc()
{
printf("%d", gsMyVar);
}
#include "File2"
Archivo2:
MyFunc2()
{
// This is wrong as gsMyVar doesn't exist here
printf("%d", gsMyVar);
}
estático también se puede aplicar a las funciones de la misma manera.
Creditos: http://ift.tt/1DcGsh2
Doblado al Español por: Edmundo Abraham Guerrero Morataya. http://ift.tt/1BDwEIR
PD: algunas cosas no estan bien explicadas pues eso se debe a que para entenderlas mejor deves ver los demas tutoriales.
NOTA: Este tutorial es exclusivamente a personas interesadas en aprender pawn.
Espero que todo lo anterior te allá sido útil.
Aucun commentaire:
Enregistrer un commentaire