Espanol Pawno

[New] Ciudad Mágica RP -Tu segunda vida- [24/7] [0.3z]

- REGISTRO MEDIANTE LA WEB
Si quieres ingresar al servidor, deberas registrarte en nuestro sitio web y ahi configurar tu cuenta, es facil y nuestros certificadores te aprobraron enseguida. Recuerda que debes responder mas de 15 preguntas correctas para pasar la certificacion. En el servidor ahi puro rol, de momento no ahi anti rol, tenemos un staff serio.

¿PROBLEMAS CON EL REGISTRO?
Si tienes problemas para registrarte en el servidor, puedes pedir soporte en nuestro grupo de SAMP, ahi te intentaremos ayudar para que logres pasar la certificacion y si tienes dudas, tambien puedes publicarlas ahi.
En la imagen que esta abajo se puede notar que asi se vera tu personaje una vez registrado y certificado..
NOTA:
Puedes contactarnos y pedirnos soporte, si tienes problemas con la certificacion.
https://www.facebook.com/federeck.darwin
-
https://www.facebook.com/fabianlamas33

GRUPO FACEBOOK:
* www.facebook.com/groups/CMRPG/

ADEMAS!!
Cuando te estas registrando en la web, podras elegir de que roleare.
LSPD, entre otros, tu elegiras que faccion o como sera tu personaje, tu le daras VIDA A TU PERSONAJE!!!

PANEL DE LA WEB
Dentro de la web, podras comprobrar que esta pasando con tu usuario, saber los ultimos comandos que uso y es facil.

- Ciudad Mágica RP -

Es un server Role Play en el cual podrás encontrar diversión y conocer gente de distindos lugares, tanto Europa como América Latina. En Ciudad Mágica además contamos con un sistema de usuarios Premium los cuales proporcionando una donación reciben grandes beneficios dependiendo de la donacion.

DATOS DEL SERVIDOR ( IMPORTANTE )
IP DE SAMP:
* samp.gosuplayer.com:7777
IP DE TS3:
* ts.gosuplayer.com
WEB SERVIDOR:
* www.gosuplayer.com
GRUPO FACEBOOK:
* www.facebook.com/groups/CMRPG/

DATOS IMPORTANTES 2 ( SISTEMAS )

Alguna vez quisiste saber que se siente ser policía?, ladrón?, mafioso?, pandillero?, político?, terrorista?

Esta es tu oportunidad, en Ciudad Mágica RolePlay tenemos un monton de sistemas únicos, Sistemas de Gobierno, Sistemas de CarToys, podés tunear tus vehículos y lucirlos por Los Santos.
Podes invitar a tus amigos para que la diversión sea mayor y obtener beneficios si se registran como tus referidos.
- Además contamos con sistema Premium, en el cuál si te haces premium obtenes gran cantidad de beneficios.

Estamos implementando gran cantidad de sistemas todo el tiempo aca tenes algunos de los sistemas:

- Liquidos de vehiculos (Gasolina, aceite, agua)

- Sistema de Headshots (Las armas mas potentes pueden llegar a matarte de un disparo en la cabeza)

- Graffitis (Si sos pandillero, podés hacer graffitis y conquistar los barrios)

- Radiación (Podes ser de terrorista y plantar una bomba nuclear, entonces si explota la radiación aumentara y si los usuarios no compraron vacunas, los afectara.)

- Motores (Además de tunear tu auto, podés mejorarlo comprandole motores en un taller)

- Temperatura (Si usaste mucho tu vehiculo y el nivel de agua es bajo la temperatura aumenta)

- Evento Zombie (Cada tanto, para salir de rol, convertimos la ciudad en un entorno post-apocaliptico y comenzamos la guerra contra los zombies)

Y muchos mas, asi que entra ya y comenzá a divertirte!

Todas las facciones del servidor.

En total tenemos 20 facciones activas, se activaran mas cuando hallan mas usuarios. Tambien podran crear sus familias.
El gamemode fue creado totalmente desde 0 y tiene cosas unicas!

PD: En el caso que este post sea considerado SPAM por los administradores, disculpen y por favor eliminen el post. La comunidad no se hara responsable de nada

Comunidad en Español dedicada a la creación de servidores San Andreas Multiplayer mediante PAWN (PAWNO), también llamado PawnoScripting.


    [Tutorial] Aprende el lenguaje pwn. (Completo)

    Comparte
    avatar
    Aldys



    Mensajes : 125
    Fecha de inscripción : 09/08/2013
    Edad : 21
    Localización : Argentina

    Opera

    Femenino

    [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Aldys el Mar Sep 03, 2013 4:16 pm

    Buenos dias-tardes-noches. Hoy les tengo un tutorial de entender al lenguaje pawn. Este tutorial esta dividido por niveles de dificultad (basico, medio, avanzado). Bueno pawn es un lenguaje muy amplio, pero vamos a ir conociéndolo paso a paso. Bueno empezemos:

    Nivel: Basico.

    Variables y Arrays:

    ¿Qué es una variable?
    La respuesta es muy simple:
    Una variable es un pedacito de memoria que se reserva para el programa durante la ejecución del mismo, para almacenar información, que luego usara.

    Para definir una variable en pawn, la forma más simple es utilizar "new" y se utiliza de la siguiente forma.

    Código:
    new MiVariable;


    Esa sentencia define "MiVariable" como una variable de tipo entero (en ingles integer).

    ¿Qué es un tag, y cuáles de variables existen?
    Un tag es un pedacito de código, que asignación la hora de compilar, brinda información extra sobre la variable que definimos.

    Tags:

    Float => almacena números enteros y números con coma.
    File => almacena el handle de un archivo abierto. (no se preocupen de que es un handle, luego lo explicare).
    Bool => almacena true o false, verdadero o falso.
    Integer => almacena números enteros.

    ¿Cómo definimos una variable con un tag?

    Para definir una variable de tag float o file, lo vamos a hacer de la siguiente forma:


    Código:
    new tag:Nombre;


    Ejemplos:

    •float:

    Código:
    new Float:MiFloat;


    •file:

    Código:
    new File:MiFile;


    •bool:

    Código:
    new bool:MyBool;


    •integer:

    Código:
    new MiInteger;


    Tipos de variables:

    Integers: Sirven para almacenar numeros SIN decimales, Ejemplo:

    Código:
    new year = 2012;

    Flotantes: Sirven para almacenar numeros con decimales, Ejemplo:

    Código:
    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:

    Código:
    new cadena[5] = "Hola"; // Contiene espacio para 4 caracteres y el caracter nulo " \0 " que marca el fin de la cadena


    Ahora, posiblemente se estén preguntando "¿Por qué no se utiliza integer:nombre?", esto es porque pawn por defecto, si no se le especifica, define las variables como integers.

    ¿Qué es un array?
    Para simplificarlo, un array es lo mismo que una variable, pero puede contener una mayor cantidad de datos, en vez de solo 1.

    ¿Cuales son los tags de los arrays?
    Los mismos tags que tienen las variables, y se los especifica de igual forma. "tag:nombre".

    ¿Cómo defino un array?
    La forma de definir un array es muy sencilla, de hecho es = que definir una variable, excepto que tiene una diferencia.


    Código:
    new MiArray[4];


    Como pueden ver, solo varia [n]; en este caso, n=4.¿Qué representa "n"? n representa el tamaño de ese array.

    !Importante: A la hora de definir un array, debemos tener en cuenta, que este nunca puede tomar el valor de la definición.
    Ejemplo:

    Código:
    new Array[5];
    Array[5] = 4;//esto causara un error, dado que el índex máximo de Array es 4.


    Ahora que más o menos tenemos idea de cómo se declara una variable y un array, veremos otras formas de declararlos.

    Tipos de variables/arrays:
    Estos métodos se aplican tanto para variables como para arrays, así q los mezclare para variar un poco.
    Existen 4 tipos, de los cuales ahora veremos los dos más fáciles de aprender.


    Local
    Definición:
    Solo puede ser utilizada dentro del entorno en el cual es declarada(ej.: Callbacks, funciones, etc.). Para declarar una variable/array de este tipo, la declaración debe ser realizada dentro del entorno en el que se desea usar la variable/array.

    Ejemplificación:


    Código:
    publica OnPlayerConnect(playerid)
    {
        new str[36+MAX_PLAYER_NAME], name[MAX_PLAYER_NAME];//declaración del array local
        GetPlayerName(playerid, name, sizeof(name));
        format(str, sizeof(str), ">>%s(%i) ha ingresado en el servidor", name, playerid);
        SendClientMessageToAll(0xFFFF00FF, str);
        return 1;
    }


    Global
    Definición:
    Puede ser utilizada en todo el proyecto. Para declarar una variable/array de este tipo, debe declararse fuera de cualquier función o callback.

    Ejemplificación:

    Código:
    new Connected[MAX_PLAYERS];

    publica OnPlayerConnect(playerid)
    {
        Connected[playerid] = true;
        return 1;
    }

    publica OnPlayerDisconnect(playerid, reason)
    {
        Connected[playerid] = false;
        return 1;
    }


    !Importante: Tenemos que tener en cuenta, que cuando declaramos una variable/array tanto local, la variable existe dentro de los espacios inferiores, pero no en los superiores.


    Código:
    MyFuncion()
    {
        new var1;
        for(new i; i<5; i++){
            //var1 todavía existe.
            new var2;
            printf("%i", var2);
            var2++;
            //var2 todavía existe
        }
        //var1, todavía existe, pero var2 no existe
    }
    //var1 no existe.



    Operadores:


    ¿Qué es un operador?
    Un operador es un símbolo que se utiliza en expresiones, o bien para realizar una acción.

    ¿Cuáles son los Operadores?

    Aritméticos:
    •A + B => Retorna la suma de A y B.
    •A - B => Retorna la resta de A y B.
    •A * B => Retorna la multiplicación de A y B.
    •A / B => Retorna la división de A y B.
    •A % B => Retorna el resto de la división de A y B.

    Asignación:
    •A = B => Asigna a A el valor de B.
    •A ++ => Asigna a A el resultado de A+1.
    •A -- => Asigna a A el resultado de A-1.
    •A += B => Asigna a A el resultado de A+B.
    •A -= B => Asigna a A el resultado de A-B.
    •A *= B => Asigna a A el resultado de A*B.
    •A /= B => Asigna a A el resultado de A/B.
    •A %= B => Asigna a A el resto de A/B.

    Racionales(numéricos):
    •A == B => Retorna "true" si A=B, de lo contrario retorna "false".
    •A != B => Retorna "false" si A=B, de lo contrario retorna "true".
    •A < B => Retorna "true" si A<B, de lo contrario retorna "false".
    •A > B => Retorna "true" si A>B, de lo contrario retorna "false".
    •A <= B => Retorna "true" si A<=B, de lo contrario retorna "false".
    •A >= B => Retorna "true" si A>=B, de lo contrario retorna "false".

    Racionales(booleanas):
    •!B => Retorna "true" si B=false, de lo contrario retorna "false".
    •A || B => Retorna "true" si A=true o B=true, de lo contrario retorna "false".
    •A && B => Retorna "true" si A=true y B=true, de lo contrario retorna "false".

    Misceláneos:
    •([]) => Se utiliza para la declaración de arrays.

    Expresiones:

    ¿Qué es una expresión?
    Una expresión es una combinación de variables/arrays, funciones, que son evaluadas según los parámetros indicados. (si no entienden, no se preocupen, luego entenderán)

    ¿Cuáles son las expresiones que existen y cómo se utilizan?
    Existen 16 expresiones, pero ahora solo veremos algunas. Más adelante veremos las demás.

    if
    Es una de las expresiones más importantes, se utiliza para comparar, y según el resultado de la comparación, se realiza o no una determinada acción.

    Ejemplo:

    Código:
    public OnPlayerConnect(playerid){
        new rnd = random(2);
        if(rnd = 0)SendClientMessage(playerid, 0x00FF00FF, "Bienvenido al servidor");
        return 1;
    }


    !Importante: Cuando el código a ejecutar si la comparación es verdadera es de 1 línea o 1 sentencia (ejemplo1), no es necesario usar brackets, de lo contrario estos se deben colocar(ejemplo2).

    else
    Es al igual que if una de las expresiones más importantes, y también una de las más utilizadas. Su uso consiste en el opuesto de
    Ejemplo:

    Código:
    Estado(playerid)
    {
        if(IsPlayerConnected(playerid)){
            printf("El jugador %i está conectado", playerid);
            return 1;
        }
        else{
            printf("El jugador %i esta desconectado", playerid);
            return 0;
        }
    }


    assert
    Es similar a if, pero si es falso, entonces retorna(fin del callback/función)

    Ejemplo:

    Código:
    public OnFilterScriptInit()
    {
        new num = 5;
        assert(num>0);
        printf("%i", num);
        return 1;
    }


    En el ejemplo dado, si la variable num es > 0 entonces escribirá el valor de num en la consola, de lo contrario retornan.

    return
    Se utiliza para retornar un valor de una función/callback, o bien para salir (de la)/(del) misma/o

    Ejemplo:


    Código:
    IsValidPlayer(playerid)
    {
        if(playerid==INVALID_PLAYER_ID || !IsPlayerConnected(playerid))return false;
        return true;
    }


    Caracteres Especiales

    •( \ ) => Indica que la línea actual, sigue en la de abajo.
    •( ; ) => Fin de sentencia.

    Nivel: Medio.

    Inicializadores:
    Bueno ahora vamos a avanzar un poco más allá de las clásicas definiciones y vamos a comprender un poco más sobre este lenguaje de programación de scripts.
    Ahora vamos a aprender un poco sobre:
    new, enum, forward y publica.

    new

    ¿Cómo se usa new?
    bueno esto no lo vamos a ver, ya que es realmente algo muy básico, y lo explique anteriormente.
    Lo que realmente vamos a ver es porque usar new y no otros, es decir vamos a ver el correcto uso de esta sentencia.

    La verdad es que no es muy complicado el uso de esta sentencia.
    Cuando usar new
    •Si necesitamos declarar una variable/array a nivel local, cuyo contenido pueda cambiar.
    •Si necesitamos declarar una variable/array a nivel global, cuyo contenido pueda cambiar.

    Cuando no usar new
    •Para declarar una función.
    •Para declarar un callback.
    •Para declarar un array que no cambiara su contenido.

    Enums

    ¿Qué es un enum?
    Básicamente un enum, consiste en una lista.

    ¿Cómo se define un enum?
    Un enum como tal, se define de la siguiente forma:


    Código:
    enum MiEnum{elemento_0, elemento_1, elemento_N};

    llevado a la práctica y para más fácil lectura, podemos crear algo así:

    Código:
    enum Lista{
        elemento_0,
        elemento_1,
        elemento_2,
        elemento_n
    };


    ¿Qué utilidad tienen los enums?
    Generalmente los enums se suelen utilizar para listar datos. El más usado de ellos similar al anterior, para luego obtener los datos y asignarlos en un array

    Ejemplo:

    Código:
    enum PD{
        Dinero,
        Vida,
        Armadura,
        Advertencias
    };
    new PlayerInfo[MAX_PLAYERS][PD];


    public

    ¿Qué es y para qué sirve public?
    Sirve para la declaración de funciones/callbacks o bien variables.

    ¿Cuándo usar publica?
    •Se utiliza para la declaración de funciones/callbacks que deben ser accesibles desde todos los documentos.
    •También se puede utilizar para la declaración de variables que necesitamos que el host pueda modificar, ya que el host no puede modificar variables declaradas con new.(siempre variables globales)


    forward

    ¿Qué es y para qué sirve forward?
    forward le "dice" de cierta forma que la función que se declara luego del mismo, "viene después". Esto es así ya que las funciones estándar declaradas en pawn, no son declaradas hasta su uso.
    pero las funciones declaradas como publica, no son estándar y pawn exige la declaración de las mismas antes de su uso. Por eso se usa "forward función(parámetros);"

    ¿Cuándo usar forward?
    Siempre que se declare una función/callback del tipo public.

    Definiciones


    Dimensiones de un array

    Código:
    new Array[5]


    Ese array es unidimensional, ¿Qué quiere decir eso? Que solo tiene una dimensión.

    ¿Puede un array tener más de una dimensión?
    Si, puede y pawn soporta hasta tres dimensiones.

    Acá les dejo unos "gráficos" simples para que lo puedan entender mejor.

    Unidimensional:


    Código:
    new ArrayUnidimencional[5];
    Código:
    X
    X
    X
    X
    X

    Cada una de esas x, puede contener un valor diferente.

    Bidimensional:


    Código:
    new ArrayBidimencional[5][2];
    Código:
    X X
    X X
    X X
    X X
    X X

    Cada una de esas x, puede tener un valor diferente, que a su vez contiene otro valor. (Si no lo entienden no se preocupen. luego lo explicare de otra forma)

    Tridimensional:


    Código:
    new ArrayTridimencional[5][2][2];


    Ahora bien, supongamos que tengo declarado un array así:


    Código:
    new Array[4];


    y luego le agrego un valor.


    Código:
    Array[2] = 6;


    Gráficamente:


    Código:
    X
    X
    6
    X


    Ahora, posiblemente, se estén preguntando por qué en la 3 posición? cuando en el índex del array(numero q indica la posición del array a utilizar) es "2".
    eso es porque todos los arrays empiezan con el índex 0 y no con el 1.
    Gráficamente:

    Código:
    índex  0 1 2 3
    valor  X X 6 X


    Otro ejemplo.


    Código:

    new Array[5][2];
    Array[2][1] = 5;


    Gráficamente:


    Código:
    X X
    5 X
    X X
    X X
    X X


    Del mismo modo con un array tridimensional. dado que no se puede representar en un plano, les dejo el link a un grafico. para los 3 tipos de arrays (principalmente miren la estructura del tridimensional). Link


    Inicialización
    El concepto de inicialización hace referencia al valor que se le da a una variable/array al crearlo.
    por defecto en una variable su valor es "", mientras q en un array cada uno de los valores q puede contener es 0.

    ¿Cómo inicializar una variable?
    La inicialización de una variable es realmente muy simple, consiste en setear el valor correspondiente.


    Código:
    new Variable = 5;


    La variable se inicia en 5.

    ¿Cómo inicializar un array?
    Es un poco más complicado que una variable, pero aun así sigue siendo algo simple.


    Código:
    new Array[10] = {1, 5, 5, 9, 10, 6, 7, 3, 0, 10};
    Código:
    new Array[2][3] = {{1, 5, 6}, {4, 2, 7}};


    En los ejemplos dados anteriormente se inicializan los arrays definidos ya con los valores seteados.

    Código:
    new Array[10] = {1, 2, ...};

    Esta forma de inicializar un array es = que hacer:

    Código:
    new Array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};


    Es decir que ... llena los espacios en blanco con el valor de la sucesión que sigue.


    Código:
    new Array[10] = {15, 30, ...};


    en el ejemplo anterior el Array sería igual a


    Código:
    {15, 30, 45, 50, 75, 90, 105, 120, 135, 150}


    Operadores

    Operadores misceláneos:
    •({}) => Se utiliza para la declaración del contenido de arrays.
    •defined => Retorna "true" si la variable indicada fue definida mediante "#define".
    •sizeof() => Retorna el tamaño de un array.
    •tagof() => Retorna el tag de una variable/array.
    •char => Retorna el numero de cells que se necesitan para contener un string compactado.

    Expresiones

    switch, case(simple) y default:
    Estas expresiones, van siempre juntas y se utilizan para realizar comparaciones en las cuales se quiere que según el valor, se realice una acción. Puede ser reemplazada por if, else if, else if, else, pero usando if sería más lenta y menos efectiva.

    Ejemplo:

    Código:
    switch(variable){
        case 0:
            print("0");
        case 1:
            print("1");
        case 2:{
            print("0");
            print("1");
            print("2");
        }
        case 3 .. 10:
            print("3-10");
        default:
            print("variable no es ni 0, ni 1, ni 2, ni 3, ni 4, variable=otro valor");
    }


    !Importante: cuando luego de la expresión "case" sigue una sola línea, o un if(sin else/else if) la expresión puede ir libre de brakets, de lo contrario es necesario colocarlos.


    for
    Es un loop o bucle que consiste en tres pasos. El 1º consiste en la iniciación, el 2º es la comparación y el 3º es la renovación. Cada paso se separa por ";".


    Código:
    new playerid;
    for(playerid; playerid<GetMaxPlayers(); playerid++){
        if(IsPlayerConnected(playerid)){
            printf("El jugador con el id %i está conectado", playerid);
            print("--------------------------------------");
        }
    }


    En el código anterior, creamos un bucle que recorre la id de todos los jugadores. luego chequea si estos están conectados, y finalmente si lo están, lo escribe en la consola.

    !Importante: Funciona = que el if, respeto de los brackets y las sentencias.


    do
    Es otro tipo de bucle, pero a diferencia del for, solo consta de 1 paso. El chequeo.

    Ejemplo:

    Código:

    new id;
    do{
        if(IsPlayerConnected(playerid)){
            printf("El jugador con el id %i está conectado", playerid);
            print("--------------------------------------");
        }
        id++;
    }while(id<GetMaxPlayers());


    Este ejemplo es = al ejemplo dado con el for, pero con la sentencia do.


    while
    Esta expresión, también es utilizada para realizar un bucle, y la forma es muy similar a la de la expresión "do".


    Código:
    new id;
    while(id<GetMaxPlayers()){
            if(IsPlayerConnected(playerid)){
            printf("El jugador con el id %i está conectado", playerid);
            print("--------------------------------------");
        }
        id++;
    }


    Loops(infinitos)
    Bueno, en esta pequeña parte de este tutorial, explicare como crear loops infinitos de diferentes formas.

    Método 1:


    Código:
    for(;;)print("Esto es un texto que saldrá repetidamente en la consola");


    Método 2:(tira 1 warning, pero funciona perfecto)


    Código:
    while(true)print("Esto es un texto que saldrá repetidamente en la consola");


    Método 3:(tira 1 warning, pero funciona perfecto)


    Código:
    do{
        print("Esto es un texto que saldrá repetidamente en la consola");
    }while(true);


    Esas son 3 formas de hacer un loop infinito. Hay mas formas pero son todas similares, así que decidí poner solo esas.

    Directivas
    #if, #elseif, #else, #endif
    Definición:
    Se utiliza para comparar una sentencia.

    Ejemplo:


    Código:
    #if USE_MENU = 1
        print("Menús: Habilitados");
    #elseif USE_MENU = 0
        print("Menús: Deshabilitados");
    #else
        print("Menús: Error");  
    #endif


    #error
    Definición:
    Se utiliza para enviar un error durante la compilación.

    Ejemplo:


    Código:
    #if defined ERROR
        #error Mensaje de error.
    #endif


    #assert
    Definición:
    Chequea si una comparación devuelve true o false. En caso de ser false, detiene la compilación.

    Ejemplo:


    Código:
    #define PP 6
    #assert PP<4


    Ese ejemplo enviara un error fatal con el texto "assertion failed: 6<4"

    #include
    Definición:
    Inserta el texto del archivo a incluir en la línea en la que se ubica.

    Ejemplo:

    Código:
    #include <a_samp>//carpeta de includes
    #include "../include/gl_common"//otra carpeta


    #tryinclude
    Definición:
    Funciona igual que #include, con la diferencia de que si no puede incluir el archivo, no envía un error.

    Ejemplo:


    Código:
    #tryinclude <a_samp>


    #define
    Definición:
    Crea una macro.

    Ejemplo:

    Código:

    #define COLOR_RED 0xFF0000FF


    Caracteres Especiales (Strings)

    •( \a ) => Beep
    •( \b ) => Backspace
    •( \e ) => Escape
    •( \n ) => Nueva Línea
    •( \r ) => Retorno de Carro (se utiliza en Windows para una línea nueva "/r/n")
    •( \t ) => Tabulación Horizontal
    •( \v ) => Tabulación Vertical
    •( \\ ) => Inserta literalmente el símbolo '\'
    •( \’’ ) => Inserta literalmente el símbolo "'"
    •( \" ) => Inserta literalmente el símbolo '"'
    •( \% ) => Inserta literalmente el símbolo '%'
    •( \ddd; ) => código de caracteres, con el código en decimal "ddd"
    •( \xhhh; ) => código de caracteres, con el código en hexadecimal "hhh"



    Creación de funciones

    ¿Qué es una función?
    Podemos definir a una función como un conjunto de acciones que se realizan cuando llamamos a la función.

    ¿Cómo crear una función?
    por ahora veremos solo estas 3 formas de definir una función:
    Forma 1:

    Código:
    MiFuncion(parámetros)
    {
        //acciones
    }


    Pero esta función si no se utiliza, nos dará 1 advertencia diciendo que no estamos usando ese símbolo

    Forma 2:


    Código:
    forward MiFuncion(parámetros);
    publica MiFuncion(parámetros)
    {
        //acciones
    }


    Forma 3:


    Código:
    stock MiFuncion(parámetros)
    {
        //acciones
    }


    Funciones sin parámetros
    Estas son las funciones más simples de hacer, dado que solo ejecutan el código dado. Generalmente se crean funciones así para cargar configuraciones de un sistema, o para realizar varias cosas.

    Ejemplo:


    Código:
    stock KickAll()
    {
        for(new i; i<GetMaxPlayers(); i++)if(IsPlayerConnected(i))Kick(i);
    }


    Esa es una función muy simple que solo kickea a todos los jugadores conectados.

    Funciones con parámetros
    Estas funciones aun son simples de hacer, pero le agregamos una complicación más. Los parámetros de una función funcionan = que variables/arrays, y hay veces que se les debe asignar un tag en su declaración

    Ejemplo:


    Código:
    stock SetPlayerHealthEx(playerid, Float:vida, color, const mensaje[])
    {
        SetPlayerHealth(playerid, vida);
        SendClientMessage(playerid, color, message[]);
    }


    Funciones con retorno de valores
    Las funciones pueden retornar valores, pero el tipo de valor retornado debe ser siempre igual.

    Existen dos formas de retornar valores:


    Código:
    stock GetConnectedPlayers()
    {
        new count;
        for(new i; i<GetMaxPlayers(); i++)if(IsPlayerConnected(i))count++;
        return count;
    }
    Código:
    stock GetConnectedPlayers()
    {
        new count;
        for(new i; i<GetMaxPlayers(); i++)if(IsPlayerConnected(i))count++;
        GetConnectedPlayers = count;
    }


    Ahora voy a mostrar una forma errónea de retornar valores.


    Código:
    stock Suma(valor1, valor2)
    {
        new str[128];
        if(!IsNumeric(valor1) || !IsNumeric(valor2)){
            str = "ERROR: Los valores deben ser numéricos";
            return str;
        }
        return valor1+valor2;
    }


    La función Suma, va a generar un error a la hora de compilar, dado que el primer valor que retorna es un string o array, mientras que el segundo es un numero entero.

    Nivel: Avanzado.

    Inicializadores (avanzado)
    Ahora ya con un mayor conocimiento, vamos a ver stock, static, const y operator.

    stock

    Vamos a ir directo al grano, dado que entender stock es lo más fácil de esta sección.

    ¿Cómo se utiliza?
    stock se utiliza para la declaración de variables o funciones que no estamos seguros si vamos a utilizar o no. Utilizando stock, el compilador si no se utiliza, no la define.


    static
    Se puede declarar una variable/array local estática o global estática.

    Local estática
    Definición:
    Tiene la misma función que la variable/array local, pero a diferencia de la anterior, esta guarda la información.

    Ejemplificación:

    Código:
    public OnFilterScriptInit()
    {
        MyFunction();
        print("!");
        MyFunction();
        return 1;
    }

    MyFunction()
    {
        for(new i; i<3; i++){
            static j;
            printf("%i", j);
            j++;
        }
    }


    Ese código va a escribir en la consola:

    Código:
    0
    1
    2
    !
    3
    4
    5


    Mientras que si la variable no fuera local estática, escribiría en la consola:

    Código:
    0
    0
    0
    !
    0
    0
    0


    Global estática
    Definición:
    Tiene la misma función que la variable/array global, pero solo puede utilizarse en el archivo que se declara.

    Ejemplificación:

    Código:
    static MyVariableEstaticaGlobal;


    const

    Cuando declaramos una variable como constante, significa que la misma no podrá ser modificada.

    ¿Cómo se declara una variable const?
    eso es muy sencillo:

    Código:
    new const Nombre = contenido
    Código:
    new const Nombre[] = "contenido"


    ¿Cuándo se declara una variable const?
    Existen 3 opciones comunes:
    •Para crear un array constante.
    •Para una variable pública(publica) que debe ser seteada obligatoriamente por el host y solo por el host.
    •En los parámetros de una función.

    operator
    Se utiliza para declarar un tag propio.

    ¿Cómo se utiliza?
    Es un poco complejo.
    ejemplo:


    Código:
    stock NewTag:operator=(a)
    {
        return NewTag:(a*5);
    }

    main()
    {
        new NewTag:BB = 5;
        printf("%i", _:BB);
        return 1;
    }


    Este ejemplo es realmente simple y no justificaría crear un nuevo tag. Pero es para que sea más fácil de entender.

    Operadores (operadores misceláneos)

    •(A) ? (B) : (C) => Es muy similar a if. Si A="true" retorna B, de lo contrario retorna C.

    ejemplo:


    Código:
    printf("Admin: %s", (Sinfo[Admin])?("ON"):("OFF"));


    Si Sinfo[Admin] = true, entonces en la consola aparecerá "Admin: ON", de lo contrario aparecerá "Admin: OFF".

    Operadores de Bits(manipulación)

    •~A => Retorna el complemento de A.
    •A >> B => Retorna el shift aritmético de B (hacia la izquierda) sobe A.
    •A >>> B => Retorna el shift lógico de B (hacia la izquierda) sobre A.
    •A << B => Retorna el shift de B (hacia la derecha) sobre A.
    •A & B => Retorna A "and" B.
    •A | B => Retorna A "or" B.
    •A ^ B => Retorna A "exclusive or" B.

    Operadores de Bits(Asignación)
    Esos operadores son iguales a los de asignación común, y a estos se les suman los de manipulación de bits (siempre con el signo = después del signo de manipulación).

    Expresiones(Loops(avanzado), saltos, sleep y state)



    break
    Se utiliza para terminar con un bucle.

    Ejemplo:


    Código:
    for(new i; i<10; i++)if(Array_N[i] == true)break;


    continue
    Se utiliza para saltar un valor en un bucle.


    Código:
    for(new i; i<10; i++){
        if(i==5)continue;
        printf("%i", i);
    }


    Este ejemplo dará como resultado en la consola:

    Código:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9


    goto
    Esta expresión se utiliza para realizar un sato, para ir a x lugar del código, previamente definido.

    Ejemplo:

    Código:
    función()
    {
        new bool:ThisBool;
        principio:
        do{
            if(random(2) == 0)ThisBool = false;
            else ThisBool = true;
            if(ThisBool == true){
                print("SI");
                goto TEnd;
            }
            else{
                print("No");
                ThisBool = false;
                goto principio;
            }
        }while(ThisBool == false);
        TEnd:
        return;
    }


    El ejemplo por ahí no sea muy claro, pero lo que ese código hace es:
    1º definir la variable(tipo boolean).
    2º empieza con el bucle, y asigna un valor a la variable según sea 0 o 1 el número obtenido en el if.
    3º compara el contenido de la variable y si es false, vuelve a empezar, de lo contrario termina.


    sleep
    Se utiliza para parar la aplicación durante x milisegundos. Aun que esta expresión figura en el manual de pawn, dudo que funcione.

    Ejemplo:


    Código:
    sleep(1000);


    En este caso, la consola quedaría detenida durante 1 segundo.

    Si la función no funciona, acá dejo una para aquellos a los que les interese:

    Código:
    stock SleepEx(time)
    {
        time += GetTickCount();
        while(time>GetTickCount()){}
    }


    state
    Se utiliza para cambiar el estado de un autómata. Su uso es:


    Código:
    state nombredelautomata



    Directivas

    #define
    Definición:
    Crea una macro. puede ser una función o solo una constante.

    Ejemplo:
    Constante:


    Código:
    #define COLOR_RED 0xFF0000FF


    Función:

    Código:
    #define Minutes(%0) (%0)*60*1000


    Dado que el tema de las macros es muy amplio, y ya ha sido explicado por Y_Less les dejo el Link


    #endinput
    Definición:
    Deja de incluir el archivo que estaba siendo leído.

    Ejemplo:


    Código:
    #include <nombre>
    #if defined _NOMBRE_INC
        #endinput
    #endif
    #define _NOMBRE_INC


    #pragma
    Definición:
    Esta directiva, puede tomar muchos valores:

    amxlimit (valor):
    Setea el valor máximo del tamaño que puede alcanzar el archivo .amx del script.

    amxram (valor):
    Setea el valor máximo de memoria ram que puede utilizar el archivo .amx del script.

    codepage (nombre/valor):
    Setea el formato en el que deben codificarse los strings.

    ctrlchar (carácter):
    Setea el símbolo que indica la continuación una nueva línea (por defecto"\").

    deprecated (valor):
    Setea un símbolo que no se puede usar. Si el compilado lo encuentra en el script, sale un warning.

    dynamic (valor):
    Setea el tamaño en cells de la memoria asignada para los datos dinámicos.

    Library (nombre):
    Especifica el archivo (.dll o .so) del cual obtener las funciones nativas.

    pack (0/1):
    Cambia el modo de uso de los strings comprimidos y descomprimidos.

    tabsize (value):
    Setea el valor asignado a cada tabulación. (defecto: .

    unused (symbol):
    Especifica que no se usara ese símbolo.

    #undef
    Definición:
    Elimina una macro declarada o una variable/array declarada con const.

    Ejemplo:


    Código:
    #define COLOR_X 0xFFA4B6F9
    printf("%d", COLOR_X);
    #undef COLOR_X


    Si luego de ese código, intentáramos usar COLOR_X, tendríamos que definirlo nuevamente, o el compilador, no compilaría.

    Creación de funciones


    Pasar parámetros como opcionales
    ¿Cómo hacer esto? muy sencillo.
    Debemos agregar =valordefault a la variable q queramos que sea opcional y listo.

    Ejemplo:


    Código:
    stock Func(playerid, hora, minutos=0)
    {
        SetPlayerTime(playerid, hora, minutos);
        printf("Un admin seteo la hora de %i a %i:%i", playerid, hora, minutos);
    }


    Pasar parámetros como valor y como referencia

    Bueno ustedes por el momento con este tutorial solo sabían pasar archivos por valor. Ahora bien, ¿Qué significa que pasamos un archivo por valor?
    Significa, que aun que nosotros editemos ese valor, el valor pasado no cambiara.

    Ejemplo:


    Código:
    main()
    {
        new val, val1, val2, val3;
        val = 1;
        val1 = 3;
        val2 = 5;
        val3 = Func(val1, val2, val);
        printf("%i", val3);
        printf("%i %i %i", val, val1, val2);
    }

    stock Func(valor_I, valor_D, valor_M)
    {
        valor_I /= Valor_D*valor_M;
        return valor_M += Valor_I-Valor_D;
    }


    Como pueden observar Func edita los valores que se le asignan, pero los valores iniciales (val, val2, val3), siguen siendo los mismos.

    Ahora bien, existe una forma de editar los valores que se le asignan a una función. Esto es lo que se conoce como "por referencia".
    ¿Cómo hacer eso?
    muy sencillo, solo es necesario agregar el carácter '&' delante de la variable que queremos pasar como referencia, de lo contrario (si no lo ponemos), esta variable será pasada por valor.

    !Importante: por defecto, los arrays no pueden ser pasados por valor, ¿Qué quiere decir esto? que si en un archivo especificamos uno de los parámetros como array, será pasado automáticamente por referencia y no por valor.

    Crear funciones con parámetros variables
    Para crear una función con parámetros indefinidos, debemos hacerlo utilizando '...'.
    Ejemplo:

    Código:
    main()
    {
        printf("%i", SumaTodo(5, 6, 1, 100, 8));
        printf("%i", SumaTodo(1, 9, 6, 169, 17, 65, 243, 213));
    }

    stock SumaTodo(...)
    {
        new res;
        for(new i; i<numargs(); i++)res += getarg(i);
        return res;
    }


    Este tutorial se encuentra en forum-samp. Creditos por el tutorial: No recuerdo el nombre del autor. http://forum.sa-mp.com/showthread.php?t=225796

    Espero que les sirva, muchas gracias.


    Última edición por Aldys el Jue Sep 05, 2013 1:18 pm, editado 2 veces
    avatar
    yancarlos5400



    Mensajes : 3
    Fecha de inscripción : 26/06/2013
    Edad : 27
    Firefox

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por yancarlos5400 el Miér Sep 04, 2013 1:09 am

    Buen post
    avatar
    Aldys



    Mensajes : 125
    Fecha de inscripción : 09/08/2013
    Edad : 21
    Localización : Argentina

    Opera

    Femenino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Aldys el Miér Sep 04, 2013 7:16 am

    yancarlos5400 escribió:Buen post
    Gracias.
    avatar
    EnzoMetlc
    Baneado
    Baneado

    Mensajes : 7
    Fecha de inscripción : 03/09/2013
    Edad : 20
    Chorme

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por EnzoMetlc el Miér Sep 04, 2013 9:49 am

    Código:
    forward OnPlayerRegisterEspanolPawno(playerid, registrered); // Prototipo como cabezara.
    public OnPlayerRegisterEspanolPawno(playerid, registrered) // Función del prototipo.
    {
    SendClientMessage(playerid, -1, "[INFO] Bienvenido al foro, leete las Reglas para evitar se Baneado");
    return playerid;
    }
    Decime cual y por que es un error. :P
    avatar
    Aldys



    Mensajes : 125
    Fecha de inscripción : 09/08/2013
    Edad : 21
    Localización : Argentina

    Opera

    Femenino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Aldys el Miér Sep 04, 2013 9:54 am

    EnzoMetlc escribió:
    Código:
    forward OnPlayerRegisterEspanolPawno(playerid, registrered); // Prototipo como cabezara.
    public OnPlayerRegisterEspanolPawno(playerid, registrered) // Función del prototipo.
    {
    SendClientMessage(playerid, -1, "[INFO] Bienvenido al foro, leete las Reglas para evitar se Baneado");
    return playerid;
    }
    Decime cual y por que es un error. :P
    El error sos vos, y el porque es porque sos un bobo. Bad 
    avatar
    lPared



    Mensajes : 8
    Fecha de inscripción : 26/01/2012
    Edad : 27
    Chorme

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por lPared el Miér Sep 04, 2013 8:10 pm

    Jajajaja me encanta ver el Copy&Paste de este increíble pendejo, digo digo, pendeja**. Enserio que dais lastima: http://forum.sa-mp.com/showthread.php?t=225796
    avatar
    Aldys



    Mensajes : 125
    Fecha de inscripción : 09/08/2013
    Edad : 21
    Localización : Argentina

    Opera

    Femenino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Aldys el Jue Sep 05, 2013 12:32 pm

    lPared escribió:Jajajaja me encanta ver el Copy&Paste de este increíble pendejo, digo digo, pendeja**. Enserio que dais lastima: http://forum.sa-mp.com/showthread.php?t=225796
    Sip lo saque de ahí para aportarlo aquí para los que necesitaban. Gracias
    avatar
    4L3X



    Mensajes : 1068
    Fecha de inscripción : 15/01/2011
    Edad : 21
    Localización : Cuenca, España

    Opera

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por 4L3X el Jue Sep 05, 2013 1:12 pm

    Aldys coloca al final del post, el enlace del post original okey?

    avatar
    Aldys



    Mensajes : 125
    Fecha de inscripción : 09/08/2013
    Edad : 21
    Localización : Argentina

    Opera

    Femenino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Aldys el Jue Sep 05, 2013 1:18 pm

    4L3X escribió:Aldys coloca al final del post, el enlace del post original okey?
    Listo. Cryed 
    avatar
    -EnzoMetlc-



    Mensajes : 30
    Fecha de inscripción : 27/09/2013
    Edad : 20
    Chorme

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por -EnzoMetlc- el Vie Sep 27, 2013 3:09 pm

    Che, si quieres robarte todos los créditos, sólo dilo. No conoces a the_choaz? Por Dios! niña! Es la persona más reconocida de forum en la sección española. Pusiste: Este tutorial se encuentra en forum-samp. Creditos por el tutorial: No recuerdo el nombre del autor. http://forum.sa-mp.com/showthread.php?t=225796 además en minúscula sólo para que casi nadie pueda verla o entenderla.

    Además, pusiste: '
    (Completo)'; o sea, WTF? Si fuera completo, el tutorial sería infinito ya que cada día se aprende más sobre pawn.


    Qué post más... ...no sé, me pareces muy niña.


    LEE:
    'PWN' es la extención del archivo genia! Good 

    EDIT: Hola a todos! :P
    avatar
    Pancho_Perez



    Mensajes : 552
    Fecha de inscripción : 12/10/2011
    Edad : 27
    Firefox

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Pancho_Perez el Dom Sep 29, 2013 9:59 am

    -EnzoMetlc- escribió:Che, si quieres robarte todos los créditos, sólo dilo. No conoces a the_choaz? Por Dios! niña! Es la persona más reconocida de forum en la sección española. Pusiste: Este tutorial se encuentra en forum-samp. Creditos por el tutorial: No recuerdo el nombre del autor. http://forum.sa-mp.com/showthread.php?t=225796 además en minúscula sólo para que casi nadie pueda verla o entenderla.

    Además, pusiste: '
    (Completo)'; o sea, WTF? Si fuera completo, el tutorial sería infinito ya que cada día se aprende más sobre pawn.


    Qué post más... ...no sé, me pareces muy niña.


    LEE:
    'PWN' es la extención del archivo genia! Good 

    EDIT: Hola a todos! :P
    Se robara los creditos si colocara los suyos pero no esta colocando a nadie, solo dice que no recuerda de quien son, y eso de la persona mas reconocida, estas equibocado, ese es zume.
    Y lo de las minusculas, nose si tu estas mal de la vista y no las ves pero yo y cualquier otra persona que lea el post creo que las ve.
    Y si cualquiera coloca "Completo" en sus post, porque ella no puede ?
    Y no entiendo que carajos tiene que ver el post conque te paresca muy niña D:
    Y si vienes a criticar(Que eso parece) hazlo de buena manera no asi como lo haces, sino da media buelta y adios.
    avatar
    -EnzoMetlc-



    Mensajes : 30
    Fecha de inscripción : 27/09/2013
    Edad : 20
    Chorme

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por -EnzoMetlc- el Dom Sep 29, 2013 8:43 pm

    Pancho_Perez escribió:
    -EnzoMetlc- escribió:Che, si quieres robarte todos los créditos, sólo dilo. No conoces a the_choaz? Por Dios! niña! Es la persona más reconocida de forum en la sección española. Pusiste: Este tutorial se encuentra en forum-samp. Creditos por el tutorial: No recuerdo el nombre del autor. http://forum.sa-mp.com/showthread.php?t=225796 además en minúscula sólo para que casi nadie pueda verla o entenderla.

    Además, pusiste: '
    (Completo)'; o sea, WTF? Si fuera completo, el tutorial sería infinito ya que cada día se aprende más sobre pawn.


    Qué post más... ...no sé, me pareces muy niña.


    LEE:
    'PWN' es la extención del archivo genia! Good 

    EDIT: Hola a todos! :P
    Se robara los creditos si colocara los suyos pero no esta colocando a nadie, solo dice que no recuerda de quien son, y eso de la persona mas reconocida, estas equibocado, ese es zume.
    Y lo de las minusculas, nose si tu estas mal de la vista y no las ves pero yo y cualquier otra persona que lea el post creo que las ve.
    Y si cualquiera coloca "Completo" en sus post, porque ella no puede ?
    Y no entiendo que carajos tiene que ver el post conque te paresca muy niña D:
    Y si vienes a criticar(Que eso parece) hazlo de buena manera no asi como lo haces, sino da media buelta y adios.
    Capo jaja, si la defiendes por que es mujer, hacelo, pero quién no conoce a chaoz? Es una manera de decir lo que escribí yo.

    Y Zume, dejó forum por otra mierda "INMENSA". Aunque Zume, no sabe tanto, pero admito que es mejor que yo...
    avatar
    Pancho_Perez



    Mensajes : 552
    Fecha de inscripción : 12/10/2011
    Edad : 27
    Firefox

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Pancho_Perez el Lun Sep 30, 2013 4:13 pm

    -EnzoMetlc- escribió:
    Pancho_Perez escribió:
    -EnzoMetlc- escribió:Che, si quieres robarte todos los créditos, sólo dilo. No conoces a the_choaz? Por Dios! niña! Es la persona más reconocida de forum en la sección española. Pusiste: Este tutorial se encuentra en forum-samp. Creditos por el tutorial: No recuerdo el nombre del autor. http://forum.sa-mp.com/showthread.php?t=225796 además en minúscula sólo para que casi nadie pueda verla o entenderla.

    Además, pusiste: '
    (Completo)'; o sea, WTF? Si fuera completo, el tutorial sería infinito ya que cada día se aprende más sobre pawn.


    Qué post más... ...no sé, me pareces muy niña.


    LEE:
    'PWN' es la extención del archivo genia! Good 

    EDIT: Hola a todos! :P
    Se robara los creditos si colocara los suyos pero no esta colocando a nadie, solo dice que no recuerda de quien son, y eso de la persona mas reconocida, estas equibocado, ese es zume.
    Y lo de las minusculas, nose si tu estas mal de la vista y no las ves pero yo y cualquier otra persona que lea el post creo que las ve.
    Y si cualquiera coloca "Completo" en sus post, porque ella no puede ?
    Y no entiendo que carajos tiene que ver el post conque te paresca muy niña D:
    Y si vienes a criticar(Que eso parece) hazlo de buena manera no asi como lo haces, sino da media buelta y adios.
    Capo jaja, si la defiendes por que es mujer, hacelo, pero quién no conoce a chaoz? Es una manera de decir lo que escribí yo.

    Y Zume, dejó forum por otra mierda "INMENSA". Aunque Zume, no sabe tanto, pero admito que es mejor que yo...
    No la defiendo por ello, y talvez ella no lo conosca.
    Y nadie esta hablando de saber, sino de o reconocido, lee lo que escribi y luego comenta.


    PD: Aldys, gracias por traer el tuto a la comunidad Good 
    avatar
    -EnzoMetlc-



    Mensajes : 30
    Fecha de inscripción : 27/09/2013
    Edad : 20
    Chorme

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por -EnzoMetlc- el Lun Sep 30, 2013 5:34 pm

    Pancho_Perez escribió:
    -EnzoMetlc- escribió:
    Pancho_Perez escribió:
    -EnzoMetlc- escribió:Che, si quieres robarte todos los créditos, sólo dilo. No conoces a the_choaz? Por Dios! niña! Es la persona más reconocida de forum en la sección española. Pusiste: Este tutorial se encuentra en forum-samp. Creditos por el tutorial: No recuerdo el nombre del autor. http://forum.sa-mp.com/showthread.php?t=225796 además en minúscula sólo para que casi nadie pueda verla o entenderla.

    Además, pusiste: '
    (Completo)'; o sea, WTF? Si fuera completo, el tutorial sería infinito ya que cada día se aprende más sobre pawn.


    Qué post más... ...no sé, me pareces muy niña.


    LEE:
    'PWN' es la extención del archivo genia! Good 

    EDIT: Hola a todos! :P
    Se robara los creditos si colocara los suyos pero no esta colocando a nadie, solo dice que no recuerda de quien son, y eso de la persona mas reconocida, estas equibocado, ese es zume.
    Y lo de las minusculas, nose si tu estas mal de la vista y no las ves pero yo y cualquier otra persona que lea el post creo que las ve.
    Y si cualquiera coloca "Completo" en sus post, porque ella no puede ?
    Y no entiendo que carajos tiene que ver el post conque te paresca muy niña D:
    Y si vienes a criticar(Que eso parece) hazlo de buena manera no asi como lo haces, sino da media buelta y adios.
    Capo jaja, si la defiendes por que es mujer, hacelo, pero quién no conoce a chaoz? Es una manera de decir lo que escribí yo.

    Y Zume, dejó forum por otra mierda "INMENSA". Aunque Zume, no sabe tanto, pero admito que es mejor que yo...
    No la defiendo por ello, y talvez ella no lo conosca.
    Y nadie esta hablando de saber, sino de o reconocido, lee lo que escribi y luego comenta.


    PD: Aldys, gracias por traer el tuto a la comunidad Good 
    Lee:
    Lo que yo dije, sólo lo entiende la gente que sabe.
    Si ves los otros tutoriales de él/ella, verás que son puros Copy&Paste & Credits deleted.

    No haré polémica intentando explicar a alguien una verdad. No te contestaré más, si quieres seguir, hacelo...
    avatar
    TheDiegoRP



    Mensajes : 57
    Fecha de inscripción : 07/01/2014
    Edad : 22
    Chorme

    Masculino

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por TheDiegoRP el Miér Ene 22, 2014 10:34 pm

    Me ayudas mucho con esto,gracias Very Happy

    Contenido patrocinado

    Re: [Tutorial] Aprende el lenguaje pwn. (Completo)

    Mensaje por Contenido patrocinado


      Fecha y hora actual: Miér Ene 24, 2018 4:37 am