[Tutorial]Explicaciуn de Callbacks usados comunmente
#1

Bueno, aquн les traigo mi primer aporte util para el foro, quizбs algunos ya sepan todo esto, pero no olvidemos que hay gente que apenas empieza, y les quiero dar un pequeсo apoyo n___n'!

Empecemos, antes que nada si eres nuevo en el foro te recomiendo que te leas las reglas para no tener ningъn conflicto en el foro.
NOTA: Explicarй sуlo los callbacks que comunmente son usados en GM'S Oh FilterScripts

Como primer punto.
  • їQuй es un "Callback"?
Quote:

Un callback es en simple palabras, en donde tu cуdigo script se ejecuta, un ejemplo enseguida.

Ejemplo sencillo de un callback con una funciуn/script

pawn Код:
public OnPlayerConnect(playerid)
{
   SendClientMessage(playerid, COLOR, "Bienvenido al servidor!")
   return 1;
}
Empecemos con las definiciones predeterminadas de pawno, que al apretar el botуn "New" donde aparece un iconon de una hoja en blanco apareceran todos los callbacks siguientes.

pawn Код:
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
}

#endif
Esto es para si es un FilterScript para tu server, aparecerб en la ventana de comandos (Windows) al encender tu server.

El siguiente callback es.

pawn Код:
public OnGameModeInit()
{  
    SetGameModeText("Blank Script");//Nombre del modo de juego, este aparecerб en el cliente SA-MP
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);//Skins
    return 1;
}
Este Callback puede servir para distintas funciones, las principales para los que yo la uso es, para los skins, el nombre del "Modo", a este mismo se le pueden agregar mapas/autos a un GM, ya sea creado por ti, o terceros.

El siguiente callback.

pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);//Posiciуn del skin/jugador
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);//posiciуn de camara
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);//posiciуn de camara
    return 1;
}
Este callback funciona de la siguiente manera, al elejir algъn skin, al empezar en algъn servidor, ajusta la forma de vista en dicho skin.

Los siguientes 2 Callbacks xD:

pawn Код:
public OnPlayerConnect(playerid)
{
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{

    format(string, sizeof(string), "%s ha salido del servidor! (Salio)", sendername);
    SendClientMessageToAll(0xBBBBBBAA, string);
        return 1;
}
Este callback, funciona para cuando un jugador/usuario entre al servidor, como puse el ejemplo al principio, y el segundo sirve para cuando usuario sale del servidor, tambiйn su funciуn es setear variables a "0", al usar arrays para el guardo de informaciуn

Un ejemplo.

pawn Код:
public OnPlayerDisconnect(playerid)
{
 Conectado = 0;
}
Los siguientes callbacks O:!

pawn Код:
public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}
Estos callbacks primordialmente es para uso de "spawn" y "death" pueden usar usadas de la siguiente forma.

pawn Код:
public OnPlayerSpawn(playerid)
{
        SetPlayerPos(playerid,272.6040,1989.7307,17.6406);//la posiciуn de spawn de jugador
        GivePlayerMoney(playerid, 1000);//cantidad de dinero con la que el jugador iniciara
        GivePlayerWeapon(playerid,WEAPON_MP5,500);//El arma que se le otorgara por default en tu servidor
    GivePlayerWeapon(playerid, WEAPON_M4,500);//la misma que el de arriba
    return 1;
    }
//----------------------------------------------------------
public OnPlayerDeath(playerid, killerid, reason)
{
     SendDeathMessage(killerid,playerid,reason); // para q se muestre como tu quieres
     SetPlayerScore(killerid, GetPlayerScore(killerid) + 1); // esto le suma score cada jugador q mate
     GivePlayerMoney(killerid,1000); // y esto le da 1000 $ cada vez q mata a un jugador
     GameTextForPlayer(playerid,"~r~P~b~W~g~N~y~T!!!",4000,3);
     return 1;
}
El siguiente callback:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/micomando", cmdtext, true, 10) == 0)
    {
        // La funciуn/acciуn del comando
        return 1;
    }
    return 0;//OJO AQUН, SI USAS RETURN 0; ES PARA FINALIZAR EL CALLBACK, EN CASO DE PONER COMANDOS SUCESIVOS USA RETURN 1;
}
Un ejemplo fбcil extraнdo de la wiki.

pawn Код:
if(!strcmp(cmdtext, "/me", true, 3))
    {
        if(!cmdtext[3])return SendClientMessage(playerid, 0xFF0000FF, "Usa /me [accion]");
        new str[128];
        GetPlayerName(playerid, str, sizeof(str));
        format(str, sizeof(str), "* %s %s", str, cmdtext[4]);//Todo apartir de /me hacia abajo es la funciуn que harб el comando
        SendClientMessageToAll(0x9955DEEE, str);
        return 1;//termina la funciуn
    }
Un cita por the_chaoz citando lo siguiente, leer bien ¬¬'!

Quote:
Originally Posted by the_chaoz
їCуmo cambio el "Unknown Command" que aparece cuando el comando no existe?
Muy sensillo, buscamos el callback: "OnPlayerCommandText", luego dentro del mismo y en el final fuera de los comandos encontraremos un:
pawn Код:
return 0;
Lo unico que hay que hacer es cambiarlo por:
pawn Код:
"return SendClientMessage(playerid, color, "mensaje");
y ahora en vez de salir "Unknown Command" saldra nuesto mensaje.
El siguiente callback es:

pawn Код:
public OnPlayerUpdate(playerid)
{
        // No Armas en interiores
        if(GetPlayerInterior(playerid) != 0 && GetPlayerWeapon(playerid) != 0) {
            SetPlayerArmedWeapon(playerid,0); // fists
            return 0; // no syncing until they change their weapon
        }

        // No El uso de Minigun
        if(GetPlayerWeapon(playerid) == WEAPON_MINIGUN) {
            Kick(playerid);
            return 0;
        }
       //No JetPacks
        if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK) {
            Kick(playerid);
            return 0;
        }
Si mal no estoy, esta funciуn actualiza/chequea al jugador a cada movimiento, en el ejemplo chequea que el jugador no este usando JetPack, Minigun, y no use arma en interiores, estбn testeados y funcionan, acб una cita por MrDeath

Quote:

OnPlayerUpdate, йste es llamado cada vez que el jugador se actualiza, lo que hace que sea llamado aproximadamente 20 veces por segundo, pero si el jugador no estб haciendo nada йste se actualiza casi 2 veces por segundo.


NOTA IMPORTANTE PARA LOS NUEVOS: Para empezar si no saben, hay que definir colores, eh includes (En caso de que usen)


pawn Код:
#include <a_samp> //predeterminado de pawn
Quote:

este include, nos permite usar funciones relacionadas con SA-MP pero podemos crear scripts en Pawn para usarlos para otras cosas, por ejemplo, crear un sistema de un semбforo con un hardware apropiado.

FUente: Libro de tecnologia 4є ESO XD

Citado por: SuperMario (':

Hasta aquн la pequeсa explicaciуn de callbacks comъnmente usados. (':!

Saludos a todos! Si tuve algъn error hбganme saberlo, soy humano y cometo errores o_O Comъnmente fatales pero no para tanto :P
Reply
#2

NO estб mal...pero podrias ponerlo en su sitio.

HAy un fallo en el final, lo de predeterminado de pawn (no pawno como dijiste) no es tйcnicamente asн, ya que ese include, nos permite usar funciones relacionadas con SA-MP pero podemos crear scripts en PAwn para usarlos para otras cosas, por ejemplo, crear un sistema de un semбforo con un hardware apropiado.

FUente: Libro de tecnologia 4є ESO XD
Reply
#3

Pues la puse porquй lуgicamente hablamos de la programaciуn de pawn en SA-MP

Igual anotarй tu dato (':

EDIT: Citado al final (': haha
Reply
#4

Buena Lunna!!! Muy bueno! Me va a ayudar mucho :P
Reply
#5

Quote:
Originally Posted by murdoxix
Посмотреть сообщение
Buena Lunna!!! Muy bueno! Me va a ayudar mucho :P
Gracias (H) (': Cualquier duda no te dudes a ti mismo si preguntarme o no

Saludos!
Reply
#6

Buen tutorial.

Acerca de OnPlayerUpdate, йste es llamado cada vez que el jugador se actualiza, lo que hace que sea llamado aproximadamente 20 veces por segundo, pero si el jugador no estб haciendo nada йste se actualiza casi 2 veces por segundo.
Reply
#7

Quote:
Originally Posted by MrDeath537
Посмотреть сообщение
Buen tutorial.

Acerca de OnPlayerUpdate, йste es llamado cada vez que el jugador se actualiza, lo que hace que sea llamado aproximadamente 20 veces por segundo, pero si el jugador no estб haciendo nada йste se actualiza casi 2 veces por segundo.
Gracias por el dato, ya actualizo
Reply
#8

Aportazooo !! Se agradece, segui con los tutos :P
Reply
#9

Quote:
Originally Posted by DragonMu
Посмотреть сообщение
Aportazooo !! Se agradece, segui con los tutos :P
Gracias :'D
Reply
#10

Muy lindo tuto, yo lo hubiera hecho de otra forma, pero te quedo muy bien. estaria bueno q mas adelante sigas con los demas callbacks o que expliques cada parametro

Nota: en OnPlayerCommandText, si el return 0 lo reemplazas x return 1, nunca devolvera "Unknown Command". tambien se lo puede reemplazar x un mensaje.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)