[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
#2

Muy weno para los novatos como yo xd

P.D Deberнas agregar los valores de 'returns' en los comandos, ya que suele poner 'return 0;'
Reply
#3

Quote:
Originally Posted by Lunnatiicz
Посмотреть сообщение
Muy weno para los novatos como yo xd

P.D Deberнas agregar los valores de 'returns' en los comandos, ya que suele poner 'return 0;'
Tienes razуn, lo olvide, agregado.
Reply
#4

Muy buen tutorial, hasta para mi es una buena ayuda.
Reply
#5

ya existe esto https://sampforum.blast.hk/showthread.php?tid=129653 y encima del moderador es, ¬¬

PD: Aca No viene The Chaoz ? ¬¬
Reply
#6

Quote:
Originally Posted by bytytus
Посмотреть сообщение
ya existe esto https://sampforum.blast.hk/showthread.php?tid=129653 y encima del moderador es, ¬¬

PD: Aca No viene The Chaoz ? ¬¬
Quote:
Originally Posted by Jovanny
Посмотреть сообщение
Basado en el tutorial de The_Chaoz pero ordenado y un poco mas explicado
Creo que esto tiene bastante fundamento.
Reply
#7

Quote:
Originally Posted by bytytus
Посмотреть сообщение
ya existe esto https://sampforum.blast.hk/showthread.php?tid=129653 y encima del moderador es, ¬¬

PD: Aca No viene The Chaoz ? ¬¬
Quote:

Basado en el tutorial de The_Chaoz pero ordenado y un poco mas explicado

Al final del post lo dice
Reply
#8

Quote:
Originally Posted by davidxxx
Посмотреть сообщение
Creo que esto tiene bastante fundamento.
pero es lo ke me critica the chaoz, no kiere ke se repitan los tutoriales ¬¬ aunque tenga algo mejor explicado.
Reply
#9

Quote:
Originally Posted by bytytus
Посмотреть сообщение
pero es lo ke me critica the chaoz, no kiere ke se repitan los tutoriales ¬¬ aunque tenga algo mejor explicado.
no nada mas es "algo", este tiene preguntas y respuestas que chaoz no hizo en su tutorial, adema, si no es critica constructiva no comentes ya que esta contra las reglas, ha esto se le llama SPAM por que no esta aportando contenido util, y si crees que estoy rompiendo las reglas deves reportarlo dando click al boton reportar y no decirlo por el mismo post, por sierto
Quote:
Originally Posted by Zamaroth
Si alguien postea algo que piensas que estб infringiendo alguna regla, repуrtalo, y no respondas al topic solo para decirlo.
Quote:
Originally Posted by Zamaroth
No se permite el SPAM. Si no estбs agregando contenido ъtil a un tema, se considera spam.
Tube que romper una REGLA para intentar hacerte entendertelas, y si no las cumples te veras en un gran problema, muuchos han sido baneados nomas x estar rompiendo y rompiendo reglas
Reply
#10

Quote:
Originally Posted by bytytus
Посмотреть сообщение
pero es lo ke me critica the chaoz, no kiere ke se repitan los tutoriales ¬¬ aunque tenga algo mejor explicado.
Si hicieras una comparaciуn muy detallada, veras que no tiene nada repetido, una cosa es repetir la explicaciуn tal y como esta, otra cosa, es mostrar tu punto de vista frente a los demбs, y enseсando de manera muy explicita lo que significa cada cosa.

Edit: Sin mas rodeos, tu punto de vista es respetable, pero no desviemos el tema.

Bueno tuto
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)