[Tutorial] Tutorial basico para los mas nuevos
#1

Bueno he visto varios usuarios nuevos que intentan iniciarse en este lenguaje llamado pawn, asi que decidi hacer un tutorial basico sobre: includes, callbacks, funciones, operadores, variables, arrays y controladores.


Includes

Los includes son archivos que contienen clmandos, generalmente funciones, que nos permiten realizar acciones, que sin los includes no podriamos.
para poder utilizar las funciones de un include debemos hacer 2 cosas:
1є copiar el include a la carpeta de los includes de nuestro pawno.
2є dentro de nuestro script, al inicio del mismo ponemos el siguiente codigo:
pawn Код:
#include <nuestroinclude>  //donde nuestroinclude sera el nombre del include que queramos.
una vez hecho esto ya podemos utilizar libremente las funciones que trae nuestro include.

Nota: si alguna vez al compilar obtenemos un error similar al que muestro acontunuacion, significa que o no emos copiado el include a la carpeta de nuestro pawno, o bien que emos introducido mal su nombre en nuestro scrip
Код:
fatal error 100: cannot read from file: "include"
Callbacks

Los Callbacks son como los eventos, cuando algo pasa aparece se llama al callback. Para explicarlo mejor aca les doy un ejemplo. Cuando un jugador se conecta, "aparece" el callback OnPlayerConnect(playerid), el cual indica que el jugador se conecta.
Los callbacks pueden ser las que vienen con el script o sea las prediseсadas o bien podemos crear nuestros propios callbacks, para cosas especiales.
Dentro de los callbacks se usan funciones para realizar cosas especificas, ya sea leer un archivo o enviarle un mensaje a un jugador.

Nota: Si en nuestro script a un callback le ponemos return 0, y un script carga posteriormente, este callback no sera cargado.
Callbacks


Funciones

Las funciones, como su nombre nos lo indica son utilizadas para realizar acciones. Estas generalmente realizar una accion que afecta a un jugador.
Al igual que los callbacks, las funciones pueden ser bien las que nos brinda el servidor de samp por defecto, o bien podemos crear nuestras propias funciones, para facilitarnos una tarea.
Generalmente las funciones poseen parametros, los cuales definen por ejemplo al jugador que se le aplicara esa funcion. Por ejemplo: SendClientMessage(playerid, 0xFF0000AA, "Mensaje al jugador");
en este caso los parametros serian (playerid, color, mensaje) , donde playerid representa la id del jugador, y el resto se entiende.

Funciones


Operadores

Los operadores se utilizar para comprar,sumar,restar,multiplicar,etc.
= (para definir que una variable por ej. es igual a 3)
- resta
+ suma
/= divide
* = multiplica
== igual (para una comparacion)
!= distinto
< menor
> mayou
<= menor o igual
>= mayor o igual
-= decrece el valo en
+= incrementa el valor en
-- decrece el valor en 1
++ incrementa el valor en 1


Variables

Las variables se utilizan para almasenar datos, que como su nombre lo indica no son constantes.
Pare definir una variable se utiliza la sentencia:
pawn Код:
new mivariable;
Estas variables pueden ser muy utiles a la hora de enviar mensajes, guardar informacion, o en la aplicacion de comandos. Por defecto el valor de una variable es 0.
Cuando queremos definir varias variables, no es necesario poner un new por cada nueva variable, simplemente podemos hacer algo asi:
pawn Код:
new variable1, variable2, variable3;
una funcion muy util es format, esta nos permite ingresar datos en una variable. Sus parametros son:
Код:
format(output[], len, const format[], Float...)
donde output[] representa la variable donde ingresaremos los datos, len representa el tamaсo de la misma, const format[] representa el formato de la variable, y por ultimo Float... representa los datos que ingresaremos.
Aqui un ejemplo muy basico:
pawn Код:
public OnPlayerConnect(playerid)
{
  new variable[32];
  format(variable, 32, "Hola, tu id de jugador es: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, variable);
}
para usar el format debemos conocer que tipo de dato vamos a ingresar.
y para ello se usan:
%b para ingresar un numero binario
%c para ingresar un unico caracter
%d para ingresar un numero entero
%f para ingresar un numero con coma
%i para ingresar un numero entero
%s para ingresar una cadena, como por ejemplo un texto
%x para ingresar un numero hexadecimal
%% para ingresar literalmente el signo %

Nota: Si al definir una variable, lo hacemos dentro de un callback o funcion, entonces solo dicho callback/funcion podra utilizar esta variable, de lo contrario la variable sera global y podra ser utilizada por todo el script.


Arrays

Un array es una variable que contiene un valor para cada solt x asi decirlo.
por ejemplo:
pawn Код:
new array[2];
  array[0] = 3;
  array[1] = 10;
En este simple ejemplo creamos un array con 2 solts, e introducimos al solt 0 el valor 3 y al segundo el valor 10.
Los arrays son muy utiles a la hora de almacenar un dato para cada jugador. (se suele utilizar miarray[MAX_PLAYERS]);

Nota: Al igual que las variables, tambien hay arrays globales y no globales.


Controladores

Se utilizan para comprar, y realizar una accion si determinada condicion se cumple. Dentro de estos podemos encontrar:

IF
La sentencia if se utiliza para comprarar datos, ya sea fijos o variables, y si la condicion impuesta se cumple entonces realizar una accion.
Ejemplo:
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
  new interior;
  interior = GetPlayerInterior(killerid);
  if(interior != 0)
  {
    SendClientMessage(killerid, 0xFF0000AA, "Advertencia: No mates en interiores o seras kickeado");
  }
  return 1;
}
En este sensillo ejemplo si el jugador que mata, se encuentra en un interior, entonces le envia un mensaje de advertencia.

ELSE
La sentencia else se utiliza para la opcion restante.
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
  new interior;
  interior = GetPlayerInterior(killerid);
  if(interior != 0)
  {
    SendClientMessage(killerid, 0xFF0000AA, "Advertencia: No mates en interiores o seras kickeado");
  }
  else
  {
    SendClientMessage(killerid, 0xF6F600F6, "Server: Gracias por no matar en interiores");
  }
  return 1;
}
en este ejemplo, muy similar al del if, agregamos la sentencia else, de modo que si el jugador no se encuenta en ningun interior le mande un mensaje.

Nota: La sentencia else puede convinarse con la sentencia if.

FOR
Esta sentencia se utiliza para realizar un bucle, o ciclo.
Veamoslo mejor con un ejemplo:
pawn Код:
for(new i=0; i<10, i++)
{
  printf("%d", i);  
}
Lo que este ejemplo hace es escribir en la consola de comandos el valor de i.
resultado:
Код:
0
1
2
3
4
5
6
7
8
9
CASE
Esta sentencia se utiliza para seleccionar un caso entre varios, para evitar el uso repetitivo de "else if".
Veamos un ejemplo:
pawn Код:
new var = 25;
switch(var)
{
  case 0: print("la variable var es igual a 0");
  case 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24: print("la variable var es par");
  case 1 .. 5: print("la variable esta entre 1 y 6");
}
Este simple codigo se explica por si solo.

estos son los "Controladores" mas usados.
Si quieres ver todos puedes ir aqui

Para mas informacion acerca de pawn puedes ver SAMP Wiki



Algunos comandos basicos

Los comandos que los jugadores tipean van en el callback OnPlayerCommandText.
Para la creacion de comandos se pueden usar varios metodos, pero en este caso utilizaremos strcmp.

aqui un ejemplo de como crear un comando de informacion:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  if(strcmp("/micomando", cmdtext, true) == 0){
    SendClientMessage(playerid, 0xF6F600F6, "Este es el mensaje de informacion 1");
    SendClientMessage(playerid, 0xF6F600F6, "Este es el mensaje de informacion 2");
    SendClientMessage(playerid, 0xF6F600F6, "Este es el mensaje de informacion 3");
    return 1;  //es muy importante dentro de nuestro comando escribir return 1 ya que si retorna el valor 0, no solo realizara lo que especifiquemos en el comando, si no que tambien enviara "Unknown Command" o el mensaje que hayamos modificado.
  }
  return 0;  //el return 0 indica que el comando no existe, y por defecto enviara al jugador un mensaje diciendo "Unknown Command", para cambiarlo solo deben poner SendClientMessage(playerid, color, "mensaje");
}
aqui un ejemplo de un teleport:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  if(strcmp("/miteleport", cmdtext, true) == 0){
    SetPlayerPos(playerid, 2023.5839, 1545.2329, 10.8205);
    SendClientMessage(playerid, 0xF6F600F6, "Has sido teleportado a lv");
    return 1;
  }
  return 0;
}
y por ultimo un ejemplo de como darle armas a un jugador:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  if(strcmp("/pistolas", cmdtext, true) == 0){
    GivePlayerWeapon(playerid, 22, 1000);
    SendClientMessage(playerid, COLOR_AMARILLO, "Has obtenido un par de pistolas.");
    return 1;
  }
  return 0;
}
Espero que les sirva el tutorial, cualquier duda que tengan avisen y tratare de ayudarlos.

PD: Disculpen mis errores de ortografia, pero no soy bueno en eso xD
Reply
#2

Bien ahн !
Reply
#3

muy bueno, facil, simple y entendible 5/5
Reply
#4

Muy bueno para los nuevos! :P
Reply
#5

Muy bueno, pero hay una cosa que estб mal :P

Quote:
Originally Posted by the_chaoz
pawn Код:
public OnPlayerConnect(playerid)
{
  new variable;
  format(variable, sizeof(variable), "Hola, tu id de jugador es: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, variable);
}
variable deberнa ser una array. Tambiйn a partir de eso se puede explicar que las strings siempre tienen que ser arrays para almacenar un caracter en cada slot. Por lo demбs, muy bien
Reply
#6

Quote:
Originally Posted by Zamaroht
Muy bueno, pero hay una cosa que estб mal :P

Quote:
Originally Posted by the_chaoz
pawn Код:
public OnPlayerConnect(playerid)
{
  new variable;
  format(variable, sizeof(variable), "Hola, tu id de jugador es: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, variable);
}
variable deberнa ser una array. Tambiйn a partir de eso se puede explicar que las strings siempre tienen que ser arrays para almacenar un caracter en cada slot. Por lo demбs, muy bien
si se me paso
tendria que ser
pawn Код:
new variable[128]
Reply
#7

Quote:
Originally Posted by the_chaoz
Quote:
Originally Posted by Zamaroht
Muy bueno, pero hay una cosa que estб mal :P

Quote:
Originally Posted by the_chaoz
pawn Код:
public OnPlayerConnect(playerid)
{
  new variable;
  format(variable, sizeof(variable), "Hola, tu id de jugador es: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, variable);
}
variable deberнa ser una array. Tambiйn a partir de eso se puede explicar que las strings siempre tienen que ser arrays para almacenar un caracter en cada slot. Por lo demбs, muy bien
si se me paso
tendria que ser
pawn Код:
new variable[128]
generalmente es poner un array[caracteres exactos] se ahorrarian mucho en el rendimiento.
Reply
#8

Por ejemplo, si tenemos una variable/array con 10 slots, se puede leer asi:
pawn Код:
new variable[10];
// las "x" representaran los slots vacios y un espacio al final sera el inutilizado pero necesario
"xxxxxxxxx " // por ahora esta vacia pero... le podemos dar valor a cada uno de esos slots
// la primera x es el slot 0, la segunda el 1, y asi en adelante.
variable[3] = 3; // esto nos dara como resultado "xxx3xxxxx " (recordando que las equis no tienen nada)
// en el caso de un array tenemos slots, tanto horizontalmente como verticalmente:
variable[10][10]; // 10 x 10 = 100 (son cien slots)

>>>>>>>>> horizontalmente(>)
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v verticalmente (v)

// por lo que si:
variable[5][6] = 7; // la linea 6 de la columna 5 serб 7

>>>>>>>>> // horizontalmente(>)
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v
xxxxxx7xx v // <<<<<<<<<<<<<<<<<< ALLI!!!!!!!!!
xxxxxxxxx v
xxxxxxxxx v
xxxxxxxxx v // verticalmente (v)
Solo hay que recordar que los ceros cuentan y que el ultimo nъmero o slot siempre es vacio y necesario.
Reply
#9

Yo sigo sin entender lo que es un array.
Reply
#10

Quote:
Originally Posted by CristianTdj
Yo sigo sin entender lo que es un array.
un arreglo donde se guardan los datos.Que luego se toman
Reply
#11

debes crear el comando en tu gm o un fs y compilar el mismo, una vez hecho esto cargas el gm/fs en tu servidor y ya podras usar el comando.
Reply
#12

Chaoz, muy bueno tu tutorial, pero hay un pequeсo error en la explicaciуn de las callbacks:

Code:
public OnPlayerConnect(playerid)
{
  new variable;
  format(variable, sizeof(variable), "Hola, tu id de jugador es: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, variable);
}
La new variable; deberнa ser new variable[64];
Reply
#13

Quote:
Originally Posted by iDarkRain
View Post
Chaoz, muy bueno tu tutorial, pero hay un pequeсo error en la explicaciуn de las callbacks:

Code:
public OnPlayerConnect(playerid)
{
  new variable;
  format(variable, sizeof(variable), "Hola, tu id de jugador es: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, variable);
}
La new variable; deberнa ser new variable[64];
no necesariamente 64, pero si debe ser un array, lo hice cuando empezaba y nunca lo revise, deberia haberlo hecho. disculpas
Reply
#14

Exelente tuto +rep
Reply
#15

Muy bueno el tutorial, le irб muy bien a los principiantes. Una cosa, vi un par de errores de ortografнa que no son de demasiada importancia, pero vi que llamaste al lenguaje "pawno", pawno es el editor que viene por defecto en el paque de servidor de SA-MP no el lenguaje el lenguaje se llama Pawn. Simplemente era eso, todo lo demбs estб bien para mi.
Reply
#16

Quote:
Originally Posted by Kurama
View Post
Muy bueno el tutorial, le irб muy bien a los principiantes. Una cosa, vi un par de errores de ortografнa que no son de demasiada importancia, pero vi que llamaste al lenguaje "pawno", pawno es el editor que viene por defecto en el paque de servidor de SA-MP no el lenguaje el lenguaje se llama Pawn. Simplemente era eso, todo lo demбs estб bien para mi.
Gracias por la correcciуn, cuando lo escribi era bastante nuevo y nunca lo revise.
Reply
#17

gracias me ayudo mucho
Reply
#18

Gracias me ayudo a mucho conocer algunas de esas cosas pero que es

cut,String,strcm

que son esas cosas que uso tienen y que pasarнa su no las uso
Reply
#19

Quote:
Originally Posted by Samuel6
View Post
Gracias me ayudo a mucho conocer algunas de esas cosas pero que es

cut,String,strcm

que son esas cosas que uso tienen y que pasarнa su no las uso
  • cut es cortar en ingles (No conozco ninguna funciуn llamada cut nativa de SA-MP).
  • string significa cadena y hace referencia a un texto o palabra (tambiйn conocido como array unidimencional).
  • strcmp es una funciуn que se utiliza para comparar arrays unidimencionales (strings).
Reply
#20

Muy bueno y entendible the_chaoz +REP
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)