[Tutorial] PAWN Nivel: basico
#1

PAWN





Librerнas
P: ї Quй es una librerнa ?
R: Es un archivo donde se definen las funciones a usarse en el script, si no ponemos una libreria en nuestro script serб imposible programar algo

P: ї Cуmo se usa ?
R: Mirar el siguiente ejemplo
  • pawn Код:
    #include <a_samp>



Callbacks
P: ї Quй es un callback ?
R: Es un evento y este es llamado cuando sucede algun suceso importante en el servidor, por ejemplo cuando un jugador se conecta, muere, aparece o se va del servidor, entre otras, al decir este es llamado quiero decir que todo lo que estй adentro de los { } del callback se ejecutara cuando el jugador haga lo que el evento indique

P: ї Cуmo se usa ?
R: Mirar el siguiente ejemplo
  • pawn Код:
    #include <a_samp>

    public OnPlayerConnect(playerid)
    {
        SendClientMessageToAll(-1, "Un jugador se ha conectado al servidor");
        return 1;
    }
P: ї Cuбntos callbacks existen ?
R: Existe una gran multitud de callbacks, aquн podrбs encontrar una lista con sus respectivos ejemplos https://sampwiki.blast.hk/wiki/Category:Scripting_Callbacks

P: ї Quй significa "playerid" ?
R: playerid es un parametro, esto es una especie de variable que contiene el id del jugador que provocу que el evento sea llamado, con "playerid" podrбs identificar que usuario provoco la ejecucion del evento, con playerid podrбs realizar acciones sobre el jugador como enviarle un mensaje, quitarle/darle vida, ponerle una animacion, obtener y/o cambiarle el nombre, expulsarlo, prohibir su entrada entre otras





Funciones
P: ї Quй es una funciуn ?
R: La misma pregunta lo responde, es una accion realizada x script y esta hace cambios tanto al servidor como al jugar, como cambiar el nombre de un jugador, matarlo/quitarle/darle vida, darle/quitarle/resetearle el dinero ( plata ), enviarle mensajes mendiante el chat y cambios al servidor como cerrarlo, reiniciarlo, cambiar el "hostname" ( titulo del servidor que aparece en la ventana de SA-MP ), ponerle contraseсa entre otras..

P: ї Cуmo sй cuantas funciones existen y como las uso ?
R: Hay una GRAN cantidad de funciones, podrбs encontrar una lista aquн con sus respectivos ejemplos https://sampwiki.blast.hk/wiki/Category:Scripting_Functions





Variables
P: ї Quй son las variables y como las uso ?
R: Las variables es un espacio reservado en la memoria cuyo espacio es nombrado por ti mismo para poder acceder a ella facilmente y sirve para guardar valores como numericos

P: ї Cуmo creo una variable ?
R: Para crear una nueva variable es necesario poner "new" y luego el nombre que le deseas otorgar


Ejemplo:
  • pawn Код:
    new variable;
No es necesario poner new antes de cada variable, puedes crear multiples variables poniendo , al final en vez de ; y en la ultima variable es necesario poner el ;

Ejemplo:
  • pawn Код:
    new variable, variable2, variable3;
Tipos de variables
  • Integers: Sirven para almacenar numeros SIN decimales, Ejemplo:
    pawn Код:
    new year = 2012;
  • Flotantes: Sirven para almacenar numeros con decimales, Ejemplo:
    pawn Код:
    new Float:PI = 3.141592653589;
  • String: Mбs bien dicho son "arrays" pero se les llaman string por que string proviene del ingles y en espaсol significa cadena, les llaman string por que se estan refiriendo a que almanecaran una "cadena de texto" Ejemplo:
    pawn Код:
    new cadena[5] = "Hola"; // Contiene espacio para 4 caracteres y el caracter nulo " \0 " que marca el fin de la cadena
    • Formateando cadenas de texto ( uso de format )
      • pawn Код:
        new string[128]; // Tiene como limite 128 caracteres ya que SendClientMessage no admite mбs de 128, usar mas es inecesario y perdida de espacio, tenemos que acostumbrarnos a usar 128
        new name[24]; // Tiene limite de 24 ya que es largo maximo de un nombre en SA-MP
        GetPlayerName(playerid, name, 24); // Almacenar el nombre de "playerid" en "name"
        format(string, 128, "Hola %s, bienvenido al tutorial",name); // Usamos %s para integrar una cadena de texto
        SendClientMessage(playerid, 0xFFFFFFFF, string); // Enviar al playerid el mensaje contenido en "string" con el color "0xFFFFFFFF"
      • Aquн estб una lista de los especificadores usados en format
        EspicificadorRemplazado porEjemplo
        %sCadena de textoJovanny
        %d / %iNumero2012
        %xHexadecimal0xFF00FFFF
        %fNumero Flotante3.141592653589
        %cCaractere'e'
        %%Inserta el signo %%
        %bNumero Binario11111011100
      • Otro ejemplo de format
        pawn Код:
        new string[128];
        new name[24];
        GetPlayerName(playerid, name, 24);
        format(string, 128, "Hola %s, tu id es %d",name, playerid);
        SendClientMessage(playerid, 0xFFFFFFFF, string);




    Operadores
    • Los operadores se usan principalmente en variables y en sentencias "if", "while", "for", aquн esta una lista y unos ejemplos
      OperadorAccion
      = Para darle un nuevo valor a una variable
      - Restar
      + Sumar
      / Divide
      * Multiplica
      ++ Aumenta el valor de la variable en 1
      -- Disminuye el valor de la variable en 1
      -= Disminuye el valor especificado a una variable
      += Aumenta el valor especificado a una variable
      == Usado para comparar si 2 variables son iguales
      != Usado para comprobar si 2 variables son distintas
      < Usado para comprobar si una variable es menor que otra
      > Usado para comprobar si una variable es mayor que otra
      <= Comprueba para comprobar si una variable es menor o igual que otra
      >= Comprueba si una variable es mayor o igual que otra

    • Operador ' = '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' = '
          new var1; // Iniciamos la variable con valor de 0, no esta escrito pero esta implicito, significa que toda variable SIEMPRE se inicia con el valor de 0
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1 = 14; // Le seteamos el nuevo valor, ahora tiene un valor de 14
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' - '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' - '
          new var1 = 4, var2 = 2; // Iniciamos la variable 'var1' con valor de 4 y 'var2' con valor de 2
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1 = var1-var2; // var1 es igual a var1 menos var2
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' / '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' / '
          new var1 = 4, var2 = 2; // Iniciamos la variable 'var1' con valor de 4 y 'var2' con valor de 2
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1 = var1/var2; // var1 es igual a var1 entre var2
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' * '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' * '
          new var1 = 4, var2 = 2; // Iniciamos la variable 'var1' con valor de 4 y 'var2' con valor de 2
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1 = var1*var2; // var1 es igual a var1 por var2
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' ++ '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' ++ '
          new var1 = 4; // Iniciamos la variable 'var1' con valor de 4
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1++; // incrementamos el valor de var1 en uno, ahora var1 tiene un valor de 5
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' -- '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' -- '
          new var1 = 4; // Iniciamos la variable 'var1' con valor de 4
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1--; // decrecemos el valor de var1 en uno, ahora var1 tiene un valor de 3
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' -= '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' -= '
          new var1 = 4; // Iniciamos la variable 'var1' con valor de 4
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1 -= 2; // decrecemos el valor de var1 en dos, ahora var1 tiene un valor de 2
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' += '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' += '
          new var1 = 4; // Iniciamos la variable 'var1' con valor de 4
          printf(" var1: %d", var1); // Imprimimos en la consola el valor de var1
          var1 += 2; // incrementamos el valor de var1 en dos, ahora var1 tiene un valor de 6
          printf(" var1: %d", var1); // Imprimimos el nuevo valor de var1
      }

    • Operador ' == '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' == '
          new var1 = 4, var2 = 4; // Iniciamos la variable 'var1' con valor de 4 y var2 con valor de 4
          if(var1 == var2) // Si var1 es igual a var2 entonces..
          {
              print("var1 ES IGUAL a var2!!");
          }
      }

    • Operador ' != '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' != '
          new var1 = 4, var2 = 8; // Iniciamos la variable 'var1' con valor de 4 y var2 con valor de 8
          if(var1 != var2) // Si var1 es igual a var2 entonces..
          {
              print("var1 NO ES IGUAL a var2!!");
          }
      }

    • Operador ' < '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' < '
          new var1 = 4, var2 = 8; // Iniciamos la variable 'var1' con valor de 4 y var2 con valor de 8
          if(var1 < var2) // Si var1 es menor a var2 entonces..
          {
              print("var1 ES MENOR que var2!!");
          }
      }

    • Operador ' > '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' > '
          new var1 = 8, var2 = 4; // Iniciamos la variable 'var1' con valor de 8 y var2 con valor de 4
          if(var1 > var2) // Si var1 es menor a var2 entonces..
          {
              print("var1 ES MAYOR que var2!!");
          }
      }

    • Operador ' <= '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' <= '
          new var1 = 4, var2 = 4; // Iniciamos la variable 'var1' con valor de 4 y var2 con valor de 4
          if(var1 <= var2) // Si var1 es menor a var2 entonces..
          {
              print("var1 ES MENOR O IGUAL que var2!!");
          }
      }

    • Operador ' >= '
      pawn Код:
      public OnFilterScriptInit()
      {
          // Operador ' >=  '
          new var1 = 4, var2 = 4; // Iniciamos la variable 'var1' con valor de 4 y var2 con valor de 4
          if(var1 >= var2) // Si var1 es menor a var2 entonces..
          {
              print("var1 ES MAYOR O IGUAL que var2!!");
          }
      }



      Controladores
    • IF, Ejemplo:
      pawn Код:
      if(var1 == var2)print("var1 es igual a var2!");
    • switch, case, Ejemplo:
      pawn Код:
      switch(var)
      {
          case 1: print("La variable es 1");
          case 2..7: print("la variable esta entre 2 y 7");
          case 8, 10, 34, 99: print("La variable es 8 o 10 o 34 o 99");
          default: print("La variable no es ni 1, ni del 2 al 7, ni 8, 10, 34, 99, es un valor no aceptado en este switch");

      }
    • for, Ejemplo:
      pawn Код:
      for( new i; i<22; i++)
      {
          printf("I = %d", i);
      }
    • else, Ejemplo:
      pawn Код:
      if(var1 == 32)
      {

      }
      else
      {
          print("var1 no es igual a 32");
      }
    • while Ejemplo:
      while significa "mientras" este se usa empleando los especificadores que usamos para "IF", anteriormente los puse en una tabla
      pawn Код:
      new var1;
      print("Mientras var1 no sea igual a 22 este while no se detendrб");
      while(var1 != 22)
      {
          var1++; // Incrementando el valor de var1 para que este while se detenga
      }
      print("Var1 llego a 22 y el while se detuvo");
      Otro ejemplo con while, este es un codigo para dormir el script por el tiempo especificado, hay que tener cuidado donde usemos este script ya que detiene la ejecucion total del script, un while malformado tambiйn puede detener la ejecucion del script, uno malformado es poner una sentencia que nunca se va a cumplir
      pawn Код:
      public OnFilterScriptInit()
      {
          print("Cargando script..");
          new d = GetTickCount(),
              tiempo = 6000;
          while(GetTickCount()-d < tiempo){}
          print("He dormido 6 segundos");
      }





    Comandos basicos
    • pawn Код:
      public OnPlayerCommandText(playerid, cmdtext[])
      {
          if(strcmp(cmdtext, "/tele",true) == 0)
          {
               SetPlayerPos(playerid, x, y, z);
               SendClientMessage(playerid, -1, "Te has teletransportado ah ");
               return 1;
          }
          if(strcmp(cmdtext, "/morir",true) == 0)
          {
               SetPlayerHealth(playerid, 0.0);
               SendClientMessage(playerid, -1, "Te has matado ");
               return 1;
          }
          if(strcmp(cmdtext, "/vida",true) == 0)
          {
               SetPlayerHealth(playerid, 100.0);
               SendClientMessage(playerid, -1, "Te has curado ");
               return 1;
          }
          if(strcmp(cmdtext, "/chaleco",true) == 0)
          {
               SetPlayerArmour(playerid, 100.0);
               SendClientMessage(playerid, -1, "Te has dado chaleco ");
               return 1;
          }
          if(strcmp(cmdtext, "/armas",true) == 0)
          {
               GivePlayerWeapon(playerid, WEAPON_AK47, 9999);
               GivePlayerWeapon(playerid, WEAPON_MINIGUN, 9999);
               GivePlayerWeapon(playerid, WEAPON_GRENADE, 9999);
               SendClientMessage(playerid, -1, "Has obtenido un pack de armas");
               return 1;
          }
      return 0;
      }




    Creando nuestras propias funciones
    En este caso, no nada mбs podemos usar funciones que previamente vienen declarados por el server, si no que nosotros tambiйn podemos crearlas.

    P: ї Cуmo ?
    R: Primero empezamos declarando que parametros va a utilizar
    Ejemplo:
    En este caso esta funciуn NO TIENE PARAMETROS, ya que no es algo necesario en este caso
    pawn Код:
    stock GetPlayersOnline()
    {
        new Online; // Iniciamos una variable tipo integer en 0
        for(new i; i < GetMaxPlayers(); i++) // Recorremos los slots que tiene nuestro server
        {
            if(IsPlayerConnected(i)) // Si el player esta conectado..
            {
                Online++;// Aumentamos 1 a la variable "Online"
            }
        }
        return Online; // Retornamos el valor de "Online"
    }

  • Esta es una un poco mбs avanzada
    pawn Код:
    stock CreateObjectOnPlayerPos(playerid, modelid) // Aquн estamos pidiendo que pongan el playerid del usuario al que quieren crearle un objeto en su posiciуn y el modelo del objeto que quiere que se le cree
    {
        new Float: X, Float: Y, Float: Z; // Creamos 3 variables con almacenamiento tipo Flotante
        GetPlayerPos(playerid, X, Y, Z); // Almacenamos las coordenadas de "playerid" en las variables flotantes X, Y, Z
        CreateObject(modelid, X, Y, Z, 0.0, 0.0, 0.0); // Creamos el objeto en las coordenadas de "playerid"
    }
  • Otro ejemplo
    En este caso significa que estamos pidiendo el playerid del usuario al que no le vamos enviar el mensaje, el color del mensaje y ovbiamente el mensaje a enviarles, si se dan cuenta he puesto [] despues de "mensaje" esto significa que estoy pidiendo una variable tipo string o mбs bien dicho, que estoy pidiendo un array..
    pawn Код:
    stock EnviarMensajeATodosExcepto(playerid, color, mensaje[])
    {
        for( new i; i<GetMaxPlayers(); i++) // Recorremos los slots que tiene nuestro server
        {
            if( i != playerid && IsPlayerConnected(i)) // Si i no es igual a playerid y si esta conectado entonces..
            {
                SendClientMessage(i, color, mensaje); // Entonces le enviamos el mensaje
            }
        }
    }
Basado en el tutorial de The_Chaoz pero ordenado y un poco mas explicado
Reply


Messages In This Thread
PAWN Nivel: basico - by Jovanny - 22.04.2012, 03:30
Respuesta: PAWN Nivel: basico - by Lunnatiicz - 22.04.2012, 05:07
Respuesta: PAWN Nivel: basico - by Jovanny - 22.04.2012, 05:08
Respuesta: PAWN Nivel: basico - by davidxxx - 22.04.2012, 05:20
Respuesta: PAWN Nivel: basico - by OTACON - 22.04.2012, 05:24
Respuesta: PAWN Nivel: basico - by davidxxx - 22.04.2012, 05:29
Respuesta: PAWN Nivel: basico - by Lunnatiicz - 22.04.2012, 05:34
Respuesta: PAWN Nivel: basico - by OTACON - 22.04.2012, 05:34
Respuesta: PAWN Nivel: basico - by Jovanny - 22.04.2012, 05:41
Respuesta: PAWN Nivel: basico - by davidxxx - 22.04.2012, 05:41

Forum Jump:


Users browsing this thread: 1 Guest(s)