SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Español/Spanish > Lanzamientos/Releases

 
 
Thread Tools Display Modes
Old 16/04/2013, 12:23 AM   #1
Dreyfuz
Huge Clucker
 
Dreyfuz's Avatar
 
Join Date: Jan 2013
Location: Planeta Tierra - Argentina - Buenos Aires.
Posts: 444
Reputation: 19
Default Callback's

Callback's compatibles con Samp en Español

Este tutorial contiene una lista de todos los callbacks disponibles en SA:MP. Los callbacks se activan, o mejor dicho son llamados cuando ocurre un evento, el cual está relacionado con el nombre del Callback (por ejemplo OnPlayerSpawn es llamado cuando un jugador spawnea). Los Callbacks también tienen valores relevantes como parámetros, por ejemplo, muchos callback tienen el parametro "playerid" que indica al jugador que causo el evento.

NOTA: Para ciertas callbacks, el valor devuelto por el callback ('return x;') determina si seguirá siendo llamado en otros scripts. Por ejemplo, OnPlayerCommandText requiere retornar 0 para comprobar que un comando exista o para saber si un comando no funciona, de modo que el callback buscará, a través de los scripts cargados, un comando existente. Devolviendo 1 indica que el comando se ha encontrado y el callback no requiere llamar a otros scripts. Esto es diferente para los callback tales como OnPlayerConnect, de los cuales debe devolver 1 para que sea llamado en otros scripts.

Callbacks:
  • OnDialogResponse
  • OnEnterExitModShop
  • OnFilterScriptExit
  • OnFilterScriptInit
  • OnGameModeExit
  • OnGameModeInit
  • OnObjectMoved
  • OnPlayerClickMap
  • OnPlayerClickPlayer
  • OnPlayerClickPlayerTextDraw
  • OnPlayerClickTextDraw
  • OnPlayerCommandText
  • OnPlayerConnect
  • OnPlayerDeath
  • OnPlayerDisconnect
  • OnPlayerEditAttachedObject
  • OnPlayerEditObject
  • OnPlayerEnterCheckpoint
  • OnPlayerEnterRaceCheckpoint
  • OnPlayerEnterVehicle
  • OnPlayerExitVehicle
  • OnPlayerExitedMenu
  • OnPlayerGiveDamage
  • OnPlayerInteriorChange
  • OnPlayerKeyStateChange
  • OnPlayerLeaveCheckpoint
  • OnPlayerLeaveRaceCheckpoint
  • OnPlayerObjectMoved
  • OnPlayerPickUpPickup
  • OnPlayerPrivmsg
  • OnPlayerRequestClass
  • OnPlayerRequestSpawn
  • OnPlayerSelectObject
  • OnPlayerSelectedMenuRow
  • OnPlayerSpawn
  • OnPlayerStateChange
  • OnPlayerTakeDamage
  • OnPlayerText
  • OnPlayerUpdate
  • OnRconCommand
  • OnRconLoginAttempt
  • OnVehicleDeath
  • OnVehicleMod
  • OnVehiclePaintjob
  • OnVehicleRespray
  • OnVehicleSpawn

Sus funciones y parámetros:


Callback: OnDialogResponse
Este callback es llamado cuando un jugador responde a un diálogo que se muestra con ShowPlayerDialog haciendo clic en un botón, al pulsar ENTER/ESC o haciendo doble clic en un elemento de la lista (si se utiliza un cuadro de diálogo estilo lista).
Parametros:
(playerid, dialogid, response, listitem, inputtext[])

playerid El ID del jugador que respondió al dialogo
dialogid El ID del diálogo que el jugador respondió, asignado en ShowPlayerDialog.
response 1 para el botón de la izquierda y 0 para el botón de la derecha (si se muestra un sólo botón, siempre sera 1)
listitem La identificación del elemento de la lista seleccionada por el jugador (comienza en 0) (sólo si se utiliza un cuadro de diálogo estilo de lista).
inputtext El texto introducido, en el cuadro de entrada de texto, por el jugador o el texto del elemento de lista seleccionado.

Return Devolviendo 0 en este callback pasará el diálogo a otro script en caso de que no se adapte al código que se encuentra en el callback de tu gamemode.
Ejemplo:
DIALOG_STYLE_MSGBOX
pawn Code:
// Definimos el ID del diálogo para que podamos manejar las respuestas
#define DIALOG_NORMAS 1
 
// En algun comando
ShowPlayerDialog(playerid, DIALOG_NORMAS, DIALOG_STYLE_MSGBOX, "Normas del Servidor", "- Nada de Cheats\n- Nada de Spam\n- Respeta a los Admins\n\nAceptas las Normas?", "Si", "No");
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_NORMAS)
    {
        if(response) // Si hace clic en "Si" o presiona Enter
        {
            SendClientMessage(playerid, COLOR_VERDE, "Gracias por aceptar las reglas del servidor!");
        }
        else // Presiono Esc o hiso clic en No
        {
            SendClientMessage(playerid, COLOR_RED, "Usted debe estar de acuerdo con las reglas de servidor para jugar aquí.");
            Kick(playerid);
        }
        return 1; // Hemos manejado un diálogo, por lo que devolverá 1. Como OnPlayerCommandText.
    }
 
    return 0; // Usted debe devolver 0 aquí! Al igual que OnPlayerCommandText.
}

DIALOG_STYLE_INPUT/DIALOG_STYLE_PASSWORD
pawn Code:
#define DIALOG_LOGIN 2
 
// En algun comando
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor introdusca su contraseña:", "Login", "Cancelar");
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_LOGIN)
    {
        if(!response) // Si hace clic en 'Cancelar' o presiono Esc
        {
            SendClientMessage(playerid, COLOR_RED, "Debes iniciar sesión para jugar aquí. Por favor, cambie su nombre.");
            Kick(playerid);
        }
        else // Presiono ENTER o hizo clic en el boton 'Login'
        {
            if(ChekearClave(playerid, inputtext))
            {
                SendClientMessage(playerid, COLOR_ROJO, "Te has Logeado correctamente!");
            }
            else
            {
                SendClientMessage(playerid, COLOR_ROJO, "Fallo el logeo.");
 
                // Vuelve a mostrar el ShowPlayerDialog para que vuelva a introducir su clave
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor introdusca su contraseña:", "Login", "Cancel");
            }
        }
        return 1; // Hemos manejado un diálogo, por lo que devolverá 1. Como OnPlayerCommandText.
    }
 
    return 0; // Usted debe devolver 0 aquí! Al igual que OnPlayerCommandText.
}

DIALOG_STYLE_LIST
pawn Code:
#define DIALOG_ARMAS 3
 
// En algun comando
ShowPlayerDialog(playerid, DIALOG_ARMAS, DIALOG_STYLE_LIST, "Armas", "Desert Eagle\nAK-47\nCombat Shotgun", "Seleccionar", "Cerrar");
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_ARMAS)
    {
        if(response) // Si hace clic en 'Seleccionar' o hizo doble clic en alguna arma
        {
            // Le da el arma
            if(listitem == 0) // Si selecciono el primer elemento(item) - Desert Eagle
            {
                GivePlayerWeapon(playerid, WEAPON_DEAGLE, 14); // Le da un desert eagle
            }
            if(listitem == 1) // Si selecciono el segundo elemento(item) - AK-47
            {
                GivePlayerWeapon(playerid, WEAPON_AK47, 120); // Le da un AK-47
            }
            if(listitem == 2) // Si selecciono el tercer elemento(item) - Desert Eagle
            {
                GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28); // Le da un Combat Shotgun
            }
        }
        return 1; // Hemos manejado un diálogo, por lo que devolverá 1. Como OnPlayerCommandText.
    }
 
    return 0; // Usted debe devolver 0 aquí! Al igual que OnPlayerCommandText.
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnEnterExitModShop
Este callback es llamado cuando un jugador entra o sale de un mod shop.
Parametros:
(playerid,enterexit,interiorid)

playerid El ID del jugador que entró o salió del modshop
enterexit 1 si el jugador entro, o 0 si el jugador salio
interiorid El ID de interior del modshop que el jugador está entrando/saliendo

Este Callback no maneja devoluciones.
Ejemplo:
pawn Code:
public OnEnterExitModShop(playerid, enterexit, interiorid)
{
    if(enterexit == 0) // Si enterexit es 0 significa que esta saliendo
    {
        SendClientMessage(playerid, COLOR_WHITE, "Bonito Auto! Se te ha cobreado $100.");
        GivePlayerMoney(playerid, -100);
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnFilterScriptExit
Este callback es llamado cuando un filterscript está descargada(unload). Sólo se llama dentro del filterscript que se descarga(unloaded).
Parametros:
Este callback no maneja parámetros

Return Este callback no devuelve un valor especifico
Ejemplo:
pawn Code:
public OnFilterScriptExit()
{
    print("\n--------------------------------------");
    print(" Mi FS ha sido Descargado");
    print("--------------------------------------\n");
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnFilterScriptInit
Este callback es llamado cuando un filterscript se carga, sólo es llamado desde interior de la filterscript que está siendo iniciado.
Parametros:
Este callback no maneja parámetros

Return Este callback no devuelve un valor especifico
Ejemplo:
pawn Code:
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Mi FS ha sido cargado");
    print("--------------------------------------\n");
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnGameModeExit
Este callback es llamado cuando un gamemode termina.
Parametros:
Este callback no maneja parámetros
Ejemplo:
pawn Code:
public OnGameModeExit()
{
    print("Termino el Gamemode.");
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnGameModeInit
Este callback es llamado cuando el gamemode comienza.
Parametros:
This callback has no parameters

Return Este callback no devuelve un valor especifico
Ejemplo:
pawn Code:
public OnGameModeInit()
{
    print("Iniciando el Gamemode!");
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnObjectMoved
Este callback es llamado cuando un objeto se mueve después de usar la función MoveObject.
Parametros:
(objectid)

objectid El ID del objeto que se ha movido

Return Este callback no devuelve un valor especifico
Ejemplo:
pawn Code:
public OnObjectMoved(objectid)
{
    printf("Se ha terminado de mover el objeto %d.",objectid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerClickMap
Este callback es llamado cuando un jugador pone un punto de referencia en el mapa del menu - en modo pausa(haciendo doble clic).
Parametros:
(playerid, Float:fX, Float:fY, Float:fZ)

playerid El ID del jugador que marco un punto de referencia en su mapa
Float:fX La coordenada X donde el jugador hizo clic
Float:fY La coordenada Y donde el jugador hizo clic
Float:fZ La coordenada Z donde el jugador hizo clic(Inexacta - Ver nota abajo)

Return Este callback no devuelve un valor especifico
Quote:
Originally Posted by Nota
El valor Z siempre es sólo una estimación, puede que le resulte útil usar un plugin como el plugin MapAndreas para obtener una visión más precisa de la coordenada Z (o para el teletransporte, el uso SetPlayerPosFindZ).
Ejemplo:
pawn Code:
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
    SetPlayerPosFindZ(playerid, fX, fY, fZ);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerClickPlayer

Se llama cuando un jugador hace doble clic en un jugador en el marcador(cuando presiona Tab).
Parametros:
(playerid, clickedplayerid, source)

playerid El ID del jugador que hizo clic en el nombre
clickedplayerid El ID del jugador cuyo nombre se ha hecho clic
source La fuente de donde el jugador hizo clic en el nombre del otro jugador

Quote:
Originally Posted by Nota
Actualmente sólo hay una 'source' (0 - CLICK_SOURCE_SCOREBOARD). La existencia de este argumento sugiere que un mayor número de fuentes se admita en el futuro.
Ejemplo:
pawn Code:
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{  
    new mensaje[32];
    format(mensaje, sizeof(mensaje), "Has echo clic en el jugador %d", clickedplayerid);
    SendClientMessage(playerid, 0xFFFFFFFF, mensaje);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerClickPlayerTextDraw
Este callback es llamado cuando un jugador hace clic en un player-TextDraw. No se llama cuando el jugador se cancela el modo de selección (ESC) - eso es en OnPlayerClickTextDraw.
Parametros:
(playerid, PlayerText: playertextid)

playerid El ID del jugador que seleccionó un TextDraw
PlayerText: playertextid El ID del Player-TextDraw que el jugador ha seleccionado.

Return Devolviendo 1/true en este callback impides que se llamen otros scripts. Esto se debe utilizar para indicar que el TextDraw en que se hizo clic se "encontro" y no necesita mas procesamiento(llamadas). Usted debe regresar 0/false si el TextDraw en el que se hizo clic y no se encontro, busque en otros script, igual que en OnPlayerCommandText
Ejemplo:
pawn Code:
new PlayerText:gPlayerTextDraw[MAX_PLAYERS];
 
public OnPlayerConnect(playerid)
{
    // Crea el TextDraw
    gPlayerTextDraw[playerid] = CreatePlayerTextDraw(playerid, 10.000000, 141.000000, "MiTextDraw");
    PlayerTextDrawTextSize(playerid, gPlayerTextDraw[playerid], 60.000000, 20.000000);
    PlayerTextDrawAlignment(playerid, gPlayerTextDraw[playerid],0);
    PlayerTextDrawBackgroundColor(playerid, gPlayerTextDraw[playerid],0x000000ff);
    PlayerTextDrawFont(playerid, gPlayerTextDraw[playerid], 1);
    PlayerTextDrawLetterSize(playerid, gPlayerTextDraw[playerid], 0.250000, 1.000000);
    PlayerTextDrawColor(playerid, gPlayerTextDraw[playerid], 0xffffffff);
    PlayerTextDrawSetProportional(playerid, gPlayerTextDraw[playerid], 1);
    PlayerTextDrawSetShadow(playerid, gPlayerTextDraw[playerid], 1);
 
    // Lo hacemos seleccionable
    PlayerTextDrawSetSelectable(playerid, gPlayerTextDraw[playerid], 1);  
 
    // Lo mostramos al jugador
    PlayerTextDrawShow(playerid, gPlayerTextDraw[playerid]);
    return 1;
}
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys == KEY_SUBMISSION)
    {
        SelectTextDraw(playerid, 0xFF4040AA);
    }
    return 1;
}
 
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
    if(playertextid == gPlayerTextDraw[playerid])
    {
         SendClientMessage(playerid, 0xFFFFFFAA, "Has echo clic en un TextDraw.");
         CancelSelectTextDraw(playerid);
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerClickTextDraw
Este callback es llamado cuando un jugador hace clic en un TextDraw o cancelado el modo de selección (ESC).
Parametros:
(playerid, Text:clickedid,)

playerid El ID del jugador que hizo clic en un TextDraw
Text:clickedid El ID del TextDraw en el que se hizo clic

Return Devolviendo 1/true en este callback impides que se llamen otros scripts. Esto se debe utilizar para indicar que el TextDraw en que se hizo clic se "encontro" y no necesita mas procesamiento(llamadas). Usted debe regresar 0/false si el TextDraw en el que se hizo clic y no se encontro, busque en otros script, igual que en OnPlayerCommandText
Quote:
Originally Posted by Nota
Importante: El área seleccionable se define por TextDrawTextSize. Los parámetros X y Y se pasan a la función que no debe ser cero o negativo.
Ejemplo:
pawn Code:
new Text:gTextDraw;
 
public OnGameModeInit()
{
    gTextDraw = TextDrawCreate(10.000000, 141.000000, "MiTextDraw");      
    TextDrawTextSize(gTextDraw,60.000000, 20.000000);
    TextDrawAlignment(gTextDraw,0);
    TextDrawBackgroundColor(gTextDraw,0x000000ff);
    TextDrawFont(gTextDraw,1);
    TextDrawLetterSize(gTextDraw,0.250000, 1.000000);
    TextDrawColor(gTextDraw,0xffffffff);
    TextDrawSetProportional(gTextDraw,1);
    TextDrawSetShadow(gTextDraw,1);
    TextDrawSetSelectable(gTextDraw, 1);
    return 1;
}
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys == KEY_SUBMISSION)
    {
        TextDrawShowForPlayer(playerid, gTextDraw);
        SelectTextDraw(playerid, 0xFF4040AA);
    }
    return 1;
}
 
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
    if(clickedid == gTextDraw)
    {
         SendClientMessage(playerid, 0xFFFFFFAA, "Has hecho clic en un TextDraw.");
         CancelSelectTextDraw(playerid);
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerCommandText
Este callback es llamado cuando un jugador introduce un comando en la ventana del chat del cliente, por ejemplo, /ayuda.
Parametros:
(playerid, cmdtext[])

playerid El ID del jugador que ejecuto el comando
cmdtext[] El comando que se ejecuta (incluyendo la barra).

Return 0 si el comando no se ha procesado, de lo contrario 1.
Ejemplo:
pawn Code:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp(cmdtext, "/ayuda", true))
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "Servidor: Este es el comando /ayuda !");
        return 1;
        // Retornando 1 informa al servidor de que el comando ha sido procesado
        // OnPlayerCommandText no se llamará en otros scripts.
    }
    return 0;
    // Retornando 0 informa al servidor de que el comando no ha sido procesada por este script.
    // OnPlayerCommandText será llamado en otros scripts hasta que uno devuelva(retorne) 1.
    // Si el script no devuelve 1, el siguiente mensaje sera mostrado "SERVER: Unknown Command".
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerConnect
Este callback es llamado cuando un jugador se conecta al servidor.
Parametros:
(playeri)

playerid El ID del jugador que se ha conectado

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerConnect(playerid)
{
    new string[64], pNombre[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pNombre,MAX_PLAYER_NAME);
    format(string,sizeof string,"%s se ha conectado al servidor. Bienvenido!",pNombre);
    SendClientMessageToAll(0xFFFFFFAA,string);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerDeath
Este Callback es llamado cuando un jugador muere.
Parametros:
(playerid, killerid, reason)

playerid El ID del jugador que murio
killerid El ID del jugador que lo mató al jugador que murió, o INVALID_PLAYER_ID si no fue nadie.
reason La razon por la cual murió el jugador.

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason); // Muestra el asesinato en la ventana killfeed/deathlog/death.
 
    if(killerid != INVALID_PLAYER_ID) // Si el asesino es valido, le dara mas Score y Dinero.
    {
        pScore[killerid]++;
        SetPlayerScore(killerid, pScore[killerid]);
 
        pDinerokillerid] += 100;
        GivePlayerMoney(killerid, 100);
    }
 
    // Fuera del chekeo se manejan cosas para el jugador que murio(playerid)
    // Si killerid es INVALID_PLAYER_ID el jugador(playerid) se quito la vida solo (por ejemplo: cayendo).
 
    pMuertes[playerid]++;
    pDinero[playerid] -= 100;
    pScore[playerid]--;
    SetPlayerScore(playerid, pScore[playerid]);
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, pDinero[playerid]);
    return 1;
}
Quote:
Originally Posted by Nota
Importante:Usted debe comprobar si killerid es igual a INVALID_PLAYER_ID antes de usarlo en un array, ya que hará que el script se detenga. Véase el ejemplo anterior.
Quote:
Originally Posted by Nota
No es necesario comprobar si killerid es igual a INVALID_PLAYER_ID antes de utilizarlo en SendDeathMessage, ya que INVALID_PLAYER_ID es un parámetro válido(ID killerid) para esta función.
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerDisconnect
Este callback es llamado cuando un jugador se desconecta del servidor.
Parametros:
(playerid, reason)

playerid El ID del jugador que se desconecto.
reason El ID de la razón por la cual se desconecto el jugador.

Return Este callback no devuelve un valor especifico.
Ejemplo:

Ejemplo del envio de mensaje a todos los jugadores, explicandoles la razon por la cual el jugador se desconectad(ya que los mensajes nativos fueron sacados en la version 0.2).
pawn Code:
public OnPlayerDisconnect(playerid, reason)
{
    new
        string[64],
        nombre[MAX_PLAYER_NAME];
    GetPlayerName(playerid,nombre,MAX_PLAYER_NAME);
    switch(reason)
    {
        case 0: format(string,sizeof string,"%s salio del servidor. (Tiempo de espera agotado)",nombre);
        case 1: format(string,sizeof string,"%s salio del servidor. (Por su propia voluntad)", nombre);
        case 2: format(string,sizeof string,"%s salio del servidor. (Kickeado/Baneado)",nombre);
    }
    SendClientMessageToAll(0xFFFFFFAA,string);
    return 1;
}
Razones:
  • 1 Tiempo de espera agotado
  • 2 Voluntad propia (salio mediante: /q o mediante Esc - Menu - Salir
  • 3 Fue Kickeado o Baneado

<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerEditAttachedObject
Este callback es llamado cuando un jugador termina el modo de edición de objetos adjuntos(attached).
Parametros:
(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)

playerid El ID del jugador que termino el modo de edición
response 0 si fue cancelado (Esc) o 1 si se hizo clic en el icono guardar
modelid El modelo del objeto adjunto que fue editado
boneid El hueso(bone) del objeto adjunto que fue editado
Float:fOffsetX El desplazamiento X para el objeto adjunto que fue editado
Float:fOffsetY El desplazamiento Y para el objeto adjunto que fue editado
Float:fOffsetZ El desplazamiento Z para el objeto adjunto que fue editado
Float:fRotX La rotación X para el objeto adjunto que fue editado
Float:fRotY La rotación Y para el objeto adjunto que fue editado
Float:fRotZ La rotación Z para el objeto adjunto que fue editado
Float:fScaleX La escala de X para el objeto adjunto que fue editado
Float:fScaleY La escala de Y para el objeto adjunto que fue editado
Float:fScaleZ La escala de Z para el objeto adjunto que fue editado

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
enum attached_object_data
{
ao_model,
ao_bone,
Float:ao_x,
Float:ao_y,
Float:ao_z,
Float:ao_rx,
Float:ao_ry,
Float:ao_rz,
Float:ao_sx,
Float:ao_sy,
Float:ao_sz
}
 
new ao[MAX_PLAYERS][MAX_PLAYER_ATTACHED_OBJECTS][attached_object_data];
 
// The data should be stored in the above array when attached objects are attached.
 
public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
{
    if(response)
    {
        SendClientMessage(playeird, COLOR_GREEN, "Se ha guardado el objeto adjunto editado.");
 
        ao[playerid][index][ao_x] = fOffsetX;
        ao[playerid][index][ao_y] = fOffsetY;
        ao[playerid][index][ao_z] = fOffsetZ;
        ao[playerid][index][ao_rx] = fRotX;
        ao[playerid][index][ao_ry] = fRotY;
        ao[playerid][index][ao_rz] = fRotZ;
        ao[playerid][index][ao_sx] = fScaleX;
        ao[playerid][index][ao_sy] = fScaleY;
        ao[playerid][index][ao_sz] = fScaleZ;
    }
    else
    {
        SendClientMessage(playeird, COLOR_RED, "No se ha guardado el objeto adjunto editado.");
 
        new i = index;
        SetPlayerAttachedObject(playerid, index, modelid, boneid, ao[playerid][i][ao_x], ao[playerid][i][ao_y], ao[playerid][i][ao_z], ao[playerid][i][ao_rx], ao[playerid][i][ao_ry], ao[playerid][i][ao_rz], ao[playerid][i][ao_sx], ao[playerid][i][ao_sy], ao[playerid][i][ao_sz]);
    }
    return 1;
}
Quote:
Originally Posted by Nota
Importante:Las ediciones deben ser desechados si la respuesta es '0 '(cancelado). Esto debe hacerse mediante el almacenamiento de los desplazamientos(Offset), etc en una matriz ANTES de usar EditAttachedObject.
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerEditObject

(Porfavor de agregar un código para restablecer el objeto para el jugador, si él sale del modo de edición pulsando ESC (otra cláusula sin código))
Este callback es llamado cuando un jugador termina el modo de edición de objetos.
Parametros:
(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)

playerid El ID del jugador que editó un objeto
playerobject 0 si es un objeto global o 1 si es un playerobject.
objectid El ID del objeto editado
response El tipo de respuesta
Float:fX El desplazamiento X para el objeto que se ha editado
Float:fY El desplazamiento Y para el objeto que se ha editado
Float:fZ El desplazamiento Z para el objeto que se ha editado
Float:fRotX La rotación X para el objeto que fue editado
Float:fRotY La rotación Y para el objeto que fue editado
Float:fRotZ La rotación Z para el objeto que fue editado

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
    new Float:oldX, Float:oldY, Float:oldZ,
        Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetObjectPos(objectid, oldX, oldY, oldZ);
    GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    if(!playerobject) // Si se trata de un objeto global, muévalo para otros jugadores
    {
        if(!IsValidObject(objectid)) return;
        MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }
 
    if(response == EDIT_RESPONSE_FINAL)
    {
        // El jugador hace clic en el icono guardar
        // Hacer cualquier cosa para guardar  la posición del objeto actualizado (y rotación)
    }
 
    if(response == EDIT_RESPONSE_CANCEL)
    {
        //El jugador cancelado, así que ponga el objeto de nuevo a su antigua posición
        if(!playerobject) //El objeto no es un playerobject
        {
            SetObjectPos(objectid, oldX, oldY, oldZ);
            SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
        }
        else
        {
            SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
            SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
        }
    }
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerEnterCheckpoint
Este callback es llamado cuando un jugador entra en el juego de punto de control para que el jugador
Parametros:
(playerid)

playerid El ID del jugador que entro al checkpoint

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
//En este ejemplo, un checkpoint se crea para el jugador cuando el spawnea,
//luego al entrar al checkpoint, crea un vehículo y desactiva el checkpoint.
public OnPlayerSpawn(playerid)
{
    SetPlayerCheckpoint(playerid, 1982.6150, -220.6680, -0.2432, 3.0);
    return 1;
}
 
public OnPlayerEnterCheckpoint(playerid)
{
    CreateVehicle(520, 1982.6150, -221.0145, -0.2432, 82.2873, -1, -1, 60000);
    DisablePlayerCheckpoint(playerid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerEnterRaceCheckpoint
Este callback es llamado cuando un jugador entra en un checkpoint de carrera.
Parametros:
(playerid)

playerid El ID del jugador que entra al checkpoint de carrera

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerEnterRaceCheckpoint(playerid)
{
    printf("Jugador  %d entro en un checkpoint de carrera!",playerid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerEnterVehicle
Este callback es llamado cuando un jugador comienza a entrar en un vehículo, esto significa que el jugador no se encuentra en el vehículo pero a la vez se llama a este callback.
Parametros:
(playerid, vehicleid, ispassenger)

playerid El ID del jugador que intenta entrar en un vehículo.
vehicleid El ID del vehículo del jugador que está intentando entrar.
ispassenger 0 si entra como conductor. 1 si entra como pasajero.

Return Este callback no devuelve un valor especifico.
Ejemplo:

He aquí un ejemplo que imprime el modelo de vehículo, que usted está entrando, en el chatbox
pawn Code:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    new string[128];
    format(string, sizeof(string), "Estas entrando al Vehiculo ID: %i",vehicleid);
    SendClientMessage(playerid, 0xFFFFFFFF, string);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerExitVehicle
Este callback es llamado cuando un jugador sale de un vehículo.
Parametros:
(playerid, vehicleid)

playerid El ID del jugador que sale del vehiculo
vehicleid El ID del vehiculo del cual es jugador esta saliendo

Return Este callback no devuelve un valor especifico.
Quote:
Originally Posted by Nota
Importante:No se llama a este callback si el jugador se cae de una bicicleta o se retira de un vehículo por otros medios tales como el uso de SetPlayerPos.
Debe utilizar OnPlayerStateChange y comprobar si su antiguo estado es PLAYER_STATE_DRIVER o PLAYER_STATE_PASSENGER.
Ejemplo:
pawn Code:
public OnPlayerExitVehicle(playerid, vehicleid)
{
    new string[35];
    format(string, sizeof(string), "INFO: Estas saliendo del Vehiculo ID: %i", vehicleid);
    SendClientMessage(playerid, 0xFFFFFFFF, string);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerExitedMenu
Se llama cuando un jugador sale de un menú.
Parametros:
(playerid)

playerid El ID del jugador que salio del menu

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerExitedMenu(playerid)
{
    TogglePlayerControllable(playerid,1); // descongelar el jugador cuando sale de un menú
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerGiveDamage
Este callback es llamado cuando un jugador hace un daño a otro jugador.
Parametros:
(playerid, damagedid, Float:amount, weaponid)

playerid El ID del jugador que provoca daño
damagedid El ID del jugador que recive el daño
Float:amount La cantidad de salud/armadura que damagedid ha perdido (combinado).
weaponid La razón que causo el daño.

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
    new string[128], victima[MAX_PLAYER_NAME], atacante[MAX_PLAYER_NAME];
    new nombrearma[24];
    GetPlayerName(playerid, attacker, sizeof (atacante));
    GetPlayerName(damagedid, victim, sizeof (victima));
 
    GetWeaponName(weaponid, nombrearma, sizeof (nombrearma));
    format(string, sizeof(string), "%s ha echo %.0f de daño a %s, con el arma: %s", atacante, amount, victima, nombrearma);
    SendClientMessageToAll(0xFFFFFFFF, string);
    return 1;
}
Quote:
Originally Posted by Nota
TakeDamage y GiveDamage no se corresponden perfectamente en compensación de retardo hasta que se hace en el tiroteo. E incluso entonces habrá algunas diferencias (debido a la zaga).
Una cosa que puedes hacer con GiveDamage es detectar cuando otros jugadores informan que han dañado a un determinado jugador, y ese jugador no ha tenido ninguna pérdida de salud. Puedes marcar a los jugadores como sospechoso.

Usted podría tener un servidor en el que los jugadores tienen un nivel de búsqueda si atacan a jugadores Cop (o alguna clase específica). En ese caso, usted puede confiar en GiveDamage sobre TakeDamage.

No debe haber muchas cosas que puedes hacer con él. Sólo hay que tener en cuenta los niveles de confianza entre los clientes. En la mayoría de los casos es mejor confiar en el cliente que se está dañando a informar sobre su salud/blindaje (TakeDamage). SA-MP normalmente lo hace. GiveDamage proporciona información adicional que puede ser útil en caso de requerir un nivel de confianza diferente.
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerInteriorChange
Se le llama cuando un jugador cambia de interior.
Parametros:
(playerid, newinteriorid, oldinteriorid)

playerid El ID del jugador que cambio de interior
newinteriorid El ID del interior a la cual se cambio
oldinteriorid El ID del interior anterior al nuevo(newinterior)

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerInteriorChange(playerid,newinteriorid,oldinteriorid)
{
    new string[48];
    format(string, sizeof(string), "Pasaste del interior %d al interior %d!",oldinteriorid,newinteriorid);
    SendClientMessage(playerid, COLOR_NARANJA, string);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerKeyStateChange
Este callback es llamado cuando el estado de cualquier tecla, excepto las teclas de movimiento (arriba, abajo, izquierda, derecha) cambian (es decir, se presionan o se sueltan).
Parametros:
(playerid, newkeys, oldkeys)

playerid El ID del jugador que presiono la tecla
newkeys Un mapa de las claves actualmente en cartera - ver aquí.
oldkeys Un mapa de las teclas presionada con anterioridad al cambio actual - ver aquí.

Return 1 - Permite que este callback llame a otros scripts. Siempre es llamado por primera vez en gamemodes para resintonizar 0 habria que ver los otros filterscript.
La detección de la tecla que se esta presionando
pawn Code:
//La definición:

// HOLDING(Tecla)
#define HOLDING(%0) \
    ((newkeys & (%0)) == (%0))

//Presionando una tecla:
if (HOLDING( KEY_FIRE ))

//Presionando varias teclas:
if (HOLDING( KEY_FIRE | KEY_CROUCH ))
Detectando la primera tecla
pawn Code:
//La definición
// PRESSED(Tecla)
#define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

//Presionado una tecla:
if (PRESSED( KEY_FIRE ))

//Presionado varias teclas:
if (PRESSED( KEY_FIRE | KEY_CROUCH ))
Detectando la liberación de una tecla
pawn Code:
//La definición
// RELEASED(keys)
#define RELEASED(%0) \
    (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))

//Soltando una letras:
if (RELEASED( KEY_FIRE ))

//Soltando varias letras:
if (RELEASED( KEY_FIRE | KEY_CROUCH ))
Ejemplos:
Adjunta NOS cuando el jugador presiona la tecla de disparo

pawn Code:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_FIRE))
    {
        if (IsPlayerInAnyVehicle(playerid))
        {
            AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
        }
    }
    return 1;
}
Super salto

pawn Code:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_JUMP))
    {
        new
            Float:x,
            Float:y,
            Float:z;
        GetPlayerPos(playerid, x, y, z);
        SetPlayerPos(playerid, x, y, z + 10.0);
    }
    return 1;
}
Modo Dios mientras se mantiene presionada la tecla

pawn Code:
new
    Float:gPlayerHealth[MAX_PLAYERS];
 
#if !defined INFINITY
    #define INFINITY (Float:0x7F800000)
#endif
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_ACTION))
    {
        // Simplemente presiona la tecla de accion, guardando su
        // vida(healt) antes del modo dios. para luego restaurar su vida
        GetPlayerHealth(playerid, gPlayerHealth[playerid]);
        SetPlayerHealth(playerid, INFINITY);
    }
    else if (RELEASED(KEY_ACTION))
    {
        // Cuando se deja de presionar la tecla de accion - Restaura la vida
        // Le devuelve la salud que tenia antes del modo dios
        SetPlayerHealth(playerid, gPlayerHealth[playerid]);
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerLeaveCheckpoint
Este callback es llamado cuando un jugador sale de dentro de un checkpoint.
Parametros:
(playerid)

playerid El ID del jugador que salio del checkpoint

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerLeaveCheckpoint(playerid)
{
    printf("El jugador %i salio de un checkpoint!",playerid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerLeaveRaceCheckpoint
Este callback es llamado cuando un jugador sale de dentro de un checkpoint de carrera.
Parametros:
(playerid)

playerid El ID del jugador que salio del checkpoint de carrera

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerLeaveRaceCheckpoint(playerid)
{
    printf("El jugador %i salio de un checkpoint de carrera!",playerid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerObjectMoved
Este callback es llamado cuando el objeto de un jugador se mueve, después de usar MovePlayerObject (cuando deja de moverse).
Parametros:
(playerid,objectid)

playerid El ID del jugador que se le asigno el objeto
bjectid El ID del objeto que se ha movido

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerObjectMoved(playerid,objectid)
{
    printf("Objeto del jugador movido: id del objeto: %d jugador: %d",objectid,playerid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerPickUpPickup
Se llama cuando un jugador toma un pickup creada con CreatePickup.
Parametros:
(playerid, pickupid)

playerid El ID del jugador que tomo el pickup
pickupid El ID del pickup creado por con CreatePickup

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
new pickup_Dinero;
new pickup_Salud;
 
public OnGameModeInit()
{
    pickup_Dinero = CreatePickup(1274, 2, 0.0, 0.0, 9.0);
    pickup_Salud = CreatePickup(1240, 2, 0.0, 0.0, 9.0);
    return 1;
}
 
public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(pickupid == pickup_Dinero)
    {
        GivePlayerMoney(playerid, 1000);
    }
    else if(pickupid == pickup_Salud)
    {
        SetPlayerHealth(playerid, 100);
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerPrivmsg


Quote:
Originally Posted by Nota
Warning: Este callback fue removido en la version 0.3. vea a continuación un ejemplo de /pm
Este callback es llamado cuando un jugador envía un mensaje privado a través del sistema de PM nativo /pm.
Parametros:
(playerid, recieverid, text[])

playerid El ID del jugador que envio el mensaje
recieverid El ID del jugador que resivio el mensaje
text[] El mensaje

Return Este callback no devuelve un valor especifico.

Quote:
Originally Posted by Nota
Importante:No se puede devolver 0 y bloquear los mensajes privados en un filterscript, debe ser usado en un gamemode
Ejemplo:
pawn Code:
public OnPlayerPrivmsg(playerid, recieverid, text[])
{
    if(muted[playerid]) return 0;
    return 1;
}

pawn Code:
if(!strcmp("/pm", cmdtext, true))
{
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"USE: /PM (id) (mensaje)");
    new id = strval(tmp);
    gMensaje = strrest(cmdtext,idx);
    if(!strlen(gMessage)) return SendClientMessage(playerid,0xFF0000FF,"USE: /pm (id) (mensaje)");     
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,0xFF0000FF,"/pm : ID Invalido");  
    GetPlayerName(id,iName,sizeof(iNombre));
    GetPlayerName(playerid,pName,sizeof(pNombre));
    format(Mensaje,sizeof(Mensaje),">> %s(%i): %s",iNombre,id,gMensaje);
    SendClientMessage(playerid,0xFFD720FF,Mensaje);
    format(Mensaje,sizeof(Mensaje),"** %s(%i): %s",pNombre,playerid,gMensaje);
    SendClientMessage(id,0xFFD720FF,Mensaje);
    PlayerPlaySound(id,1085,0.0,0.0,0.0);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerRequestClass
Se le llama cuando un jugador cambia de clase a la selección de la clase.(en castellano(xD) es cuando se selleciona el personaje)
Parametros:
(playerid, classid)

playerid El ID del jugador que cambio de clase
classid El ID de la clase actual que se esta viendo

Return Devolviendo 0 en este callback evitará que el jugador spawnee. El jugador puede ser obligado a spawnear cuando SpawnPlayer es utilizado sin embargo el jugador volverá a entrar en la selección de clases la próxima vez que muera.

Quote:
Originally Posted by Nota
Las ID de clase se asignan cuando se usa la función AddPlayerClass.
Quote:
Originally Posted by Nota
Esta callback también es llamado cuando un jugador presiona F4.
Ejemplo:
pawn Code:
public OnPlayerRequestClass(playerid,classid)
{
    if(classid == 3 && !IsPlayerAdmin(playerid))
    {
        SendClientMessage(playerid,COLOR_VERDE,"Este skin es solo para admins!");
        return 0;
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerRequestSpawn
Es llamado cuando un jugador intenta spawnear mediante la selección de clases.
Parametros:
(playerid)

playerid El ID del jugador que intenta spawnear

Return Retornando 0 en este callback evitará que el jugador de spawnee.
Ejemplo:
pawn Code:
public OnPlayerRequestSpawn(playerid)
{
    if(!IsPlayerAdmin(playerid))
    {
        SendClientMessage(playerid,COLOR_GREEN,"Usted no puede spawnear.");
        return 0;
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerSelectObject
Este callback se llama cuando un jugador selecciona un objeto después de ser utilizado SelectObject.
Parametros:
(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)

playerid El ID del jugador que selecciono un objeto
type El tipo de selección
objectid El ID del objeto seleccionado
Float:fX La posición X del objeto seleccionado
Float:fY La posición Y del objeto seleccionado
Float:fZ La posición Z del objeto seleccionado

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
    printf("El jugador %d selecciono el objeto %d", playerid, objectid);
    if(type == SELECT_OBJECT_GLOBAL_OBJECT)
    {
        EditObject(playerid, objectid);
    }
    else
    {
        EditPlayerObject(playerid, objectid);
    }
    SendClientMessage(playerid, 0xFFFFFFFF, "Ahora eres capas de modificar tu propio objeto!");
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerSelectedMenuRow
Este callback es llamado cuando un jugador selecciona un elemento(item) de un menú.
Parametros:
(playerid, row)

playerid El ID del jugador que selecciono el item del menu
row La fila que selecciono

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
new Menu:miMenu;
 
public OnGameModeInit()
{
    miMenu= CreateMenu("Ejemplo de Menu", 1, 50.0, 180.0, 200.0, 200.0);
    AddMenuItem(miMenu, 0, "Fila 1");
    AddMenuItem(miMenu, 0, "Fila 2");
    return 1;
}
 
public OnPlayerSelectedMenuRow(playerid, row)
{
    if(GetPlayerMenu(playerid) == miMenu)
    {
        switch(row)
        {
            case 0: print("Fila 1");
            case 1: print("Fila 2");
        }
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerSpawn
Este callback es llamado cuando un jugador spawnea.
Parametros:
(playerid)

playerid El ID del jugador que spawnea

Return Devolviendo 0 en este callback obliga al jugador a volver a la selección clase cuando vuelva a respawnear.
Ejemplo:
pawn Code:
public OnPlayerSpawn(playerid)
{
    new NombreJugador[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(playerid, NombreJugador, sizeof(NombreJugador));
    format(string, sizeof(string), "%s ha spawnedo.", NombreJugador);
    SendClientMessageToAll(0xFFFFFFFF, string);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerStateChange
Este callback es llamado cuando un jugador cambia de estado.
Parametros:
(playerid, newstate, oldstate)

playerid El ID del jugador que ha cambiado de estado
newstate El nuevo estado
oldstate El estado anterior

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) // El jugador entra a un vehiculo como conductor
    {
        new vehiculoid = GetPlayerVehicleID(playerid);
        AddVehicleComponent(vehiculoid, 1010); // Añade NOS al vehiculo
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerTakeDamage
Este callback es llamado cuando un jugador recibe daño
Parametros:
(playerid, issuerid, Float:amount, weaponid)

playerid El ID del jugador que resivio el daño
issuerid El ID del jugador que causo el daño. si nadie causo el daño: INVALID_PLAYER_ID
Float:amount La cantidad de salud/armadura que le quito a playerid
weaponid La ID de la razon por la cual playerid recivio el daño

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
    if(issuerid != INVALID_PLAYER_ID)
    {
        new string[128], victima[MAX_PLAYER_NAME], atacante[MAX_PLAYER_NAME];
        new nombrearma[24];
        GetPlayerName(playerid, victima, sizeof (victim));
        GetPlayerName(issuerid, atacante, sizeof (attacker));
 
        GetWeaponName(weaponid, nombrearma, sizeof (nombrearma));
        format(string, sizeof(string), "%s ha hecho %.0f de daño a %s, con el arma: %s", atacante, amount, victima, nombrearma);
        SendClientMessageToAll(0xFFFFFFFF, string);
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerText
Se llama cuando un jugador envía un mensaje por el chat.
Parametros:
(playerid, text)

playerid El ID del jugador que envio el mensaje
text El mensaje que el jugador ha escrito

Return Retornando 0 en este callback se detendrá el envio de texto
Ejemplo:
pawn Code:
public OnPlayerText(playerid, text[])
{
    new textv2[128], nombre[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nombre, sizeof (name));
    format(textv2, sizeof (textv2), "%d >> %s: %s", playerid, nombre, text);
    SendPlayerMessageToAll(playerid, textv2);
    return 0; // ignorar el texto y enviarlo al cahtbox
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnPlayerUpdate
Este callback es llamado siempre que haya coneccion entre el servidor y el cliente.
Parametros:
(playerid)

playerid El ID del jugador enviando paquetes al servidor

Return 0 - La actualización de este jugador no se replicarán a otros clientes. 1 - Indica que esta actualización se pueden procesar normalmente y se envían a los otros jugadores.
Ejemplo:
Ejemplo: Hacer tu propio Callback - UnJugadorCambioDeArma(playerid, armaanterior, nuevaarma)

pawn Code:
public OnPlayerUpdate(playerid)
{
    new ArmaActual = GetPlayerWeapon(playerid); // Obtenemos el arma actual del jugador    
    if(ArmaActual != GetPVarInt(playerid, "MiArmaActual")) // Si hubo un cambio de arma desde la ultima actualización
    {
        // Lamamos al Callback UnJugadorCambioDeArma
        UnJugadorCambioDeArma(playerid, GetPVarInt(playerid, "MiArmaActual"), ArmaActual);
        SetPVarInt(playerid, "MiArmaActual", ArmaActual);//Actualiza la variable del arma
    }
    return 1; // Envia esta actualización a todos los jugadores.
}
 
stock UnJugadorCambioDeArma(playerid, armaanterior, nuevaarma)
{
    new     s[128],
        aArma[24],
        nArma[24];
 
    GetWeaponName(armaanterior, aArma, sizeof(aArma));
    GetWeaponName(nuevaarma, nArma, sizeof(nArma));
 
    format(s, sizeof(s), "Has cambiado el arma %s por %s!", aArma, nArma);
 
    SendClientMessage(playerid, 0xFFFFFFFF, s);
}

El ejemplo anterior muestra lo fácil que es crear una Callback, el ejemplo muestra UnJugadorCambioDeArma, con parámetros playerid, armaanterior/nuevaarma, pero usted, también, puede hacer toneladas de otros parametros!
<----------------------------------------------------------------------------------------------------------------->

Callback: OnRconCommand
Este callback es llamado cuando se envía un comando a través de la consola del servidor RCON, o mediante el comando en el juego / rcon.
Parametros:
(cmd[])

cmd[] Una cadena que contiene el comando que se ha escrito, así como los parámetros pasados.

Return 0 si el comando no se procesa, este se pasará a otros scripts. o 1 si el comando se proceso, no serán cedidos a otros scripts.

Quote:
Originally Posted by Nota
Importante:Usted tendrá que incluir este callback en un filterscript cargado para que funcione en el gamemode!
Quote:
Originally Posted by Nota
"/rcon" no se incluye en el "cmd" cuando un jugador escribe un comando.
Si utiliza la función "orint" aquí, se enviará un mensaje al jugador que escribió el comando, así como en el log(server_log.txt).
Ejemplo:
pawn Code:
// Ejemplo 1
public OnRconCommand(cmd[])
{
    printf("[RCON]: Has introducido el siguiente comando Rcon '/rcon %s'!",cmd);
    return 0;
}

// Ejemplo 2
public OnRconCommand(cmd[])
{
    if(!strcmp(cmd,"Hola",true))
    {
        SendClientMessageToAll(0xFFFFFFAA,"Hola Mundo!");
        print("Has dicho Hola a todo el mundo.");// Esto aparecerá al jugador que escribió el comando rcon, en el chat en color blanco
        return 1;
    }
    return 0;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnRconLoginAttempt
Este callback es llamado cuando alguien intenta acceder a la RCON, exitoso o no.
Parametros:
(ip[], password[], success)

ip[] La IP del jugador que intento acceder a la Rcon
password[] La contraseña utilizada para iniciar sesión.
success 0 si no pudo ingresar correctamente. 1 si tuvo exito.

Return Este callback no devuelve un valor especifico.

Quote:
Originally Posted by Nota
Este Callback es llamado solamente cuando /rcon login es usado
Ejemplo:
pawn Code:
public OnRconLoginAttempt(ip[], password[], success)
{
    if(!success) //Si la contraseña es incorrecta
    {
        printf("Fallo la identeificación Rcon. IP: %s intento acceder a la Rcon con la siguiente clave %s",ip, password);
        new pip[16];
        for(new i=0; i<MAX_PLAYERS; i++) // Bucle que recorrera a todos los jugadores
        {
            GetPlayerIp(i, pip, sizeof(pip));
            if(!strcmp(ip, pip, true)) // Si la IP del jugador es igual al del que intento introdujo mal la clave Rcon
            {
                SendClientMessage(i, 0xFFFFFFFF, "Clave Incorrecta. Chau,. Chau, Adios.!"); // Envia el mensaje
                Ban(i); //Banea al jugador
            }
        }
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnVehicleDeath
Este callback es llamado cuando un vehículo "muere" ya sea al entrar en el agua o al estallar.
Parametros:
(vehicleid, killerid)

vehicleid El ID del vehiculo que "murio"
killerid El ID del jugador que informó (sincronizadamente) la destrucción del vehículo (nombre engañoso).

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnVehicleDeath(vehicleid, killerid)
{
    new string[40];
    format(string, sizeof(string), "ID Vehiculo: %i por el jugador ID: %i.", vehicleid, killerid);
    SendClientMessageToAll(0xFFFFFFFF, string);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnVehicleMod
Este callback es llamado cuando un vehículo está siendo modificado.
Parametros:
(playerid, vehicleid, componentid)

playerid El ID del conductor del vehiculo
vehicleid La ID del vehiculo que esta siendo modificado
componentid El ID del componente que se añadió al vehículo.

Return Devuelver 0 para que la desincronización del mod (o un mod no válido) se propague y/o se estrelle con los jugadores.
Ejemplo:
pawn Code:
public OnVehicleMod(playerid,vehicleid,componentid)
{
    printf("El vehiculo %d ha sido modificado por %d con el componente %d",vehicleid,playerid,componentid);
    if(GetPlayerInterior(playerid) == 0)
    {
        BanEx(playerid, "Tuning Hacks"); // Script Anti-tuning hacks
        //Probado y funciona incluso en servidores cual le permite modificar tu vehículo mediante comandos, menús, cuadros de diálogo, etc.
    }
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

Callback: OnVehiclePaintjob
Se le llama cuando un jugador cambia el paintjob de su vehículo (en un modshop).
Parametros:
(playerid, vehicleid, paintjobid)

playerid El ID del jugador que esta modificando el vehiculo
vehicleid El ID del vehiculo que cambio de paintjob
paintjobid El ID del paintjob

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    new string[128];
    format(string, sizeof(string), "has cambiado el paintjob de tu vehiculo, al paintjob %d!", paintjobid);
    SendClientMessage(playerid, 0x33AA33AA, string);
    return 1;
}

Quote:
Originally Posted by Nota
Esto se llama cuando un paintjob se ve en modshops! Además, sólo funciona en modshops.
<----------------------------------------------------------------------------------------------------------------->

Callback: OnVehicleRespray
El callback es engañoso, este callback se llama cuando un jugador sale de las tiendas modernas, sin importar si el color fue cambiado, y nunca es llamado para tiendas pay'n'spray.
Parametros:
(playerid, vehicleid, color1, color2)

playerid El ID del jugador que esta conduciendo el vehiculo
vehicleid El ID del vehiculo que se pinto
color1 El color primario del vehiculo que se va a cambiar
color2 El color secundario del vehiculo que se va a cambiar

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    new string[48];
    format(string, sizeof(string), "Su vehiculo(%d) ha sido pintado con los siguiente colores: Primario %d, Secundario: %d!", vehicleid, color1, color2);
    SendClientMessage(playerid, COLOR_VERDE, string);
    return 1;
}

Una pequeña solución

Este Callback no es llamado cuando sale de un pay 'n' spray, solamente en modshop.

La solucion para esto:

pawn Code:
#include <YSI\y_hooks>
 
Hook:paynspray_OnPlayerUpdate(playerid)
{
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {
                new Float:vHealth;
                GetVehicleHealth(GetPlayerVehicleID(playerid), vHealth);
                if(vHealth == 1000)
                {
                        SetVehicleHealth(GetPlayerVehicleID(playerid), 999);
                       
                new const Float:paynspray[][] = {
                {1025.05, -1024.23, 32.1}, // LS Temple
                {487.68, -1740.87, 11.13}, // LS Santa Maria
                        {-1420.73, 2583.37, 55.56}, // El Quebrados
                        {-1904.39, 284.97, 40.75}, // Wang Cars
                        {-2425.91, 1022.33, 50.10}, // Juniper Hill
                        {1975.60, 2162.16, 10.77}, // LV Redsands
                        {2065.38, -1831.51, 13.25}, // Idlewood
                        {-99.55, 1118.36, 19.44}, // Fort Carson
                        {721.07, -455.94, 16.04}, // Dillimore
                        {2393.74, 1493.01, 10.52} // LV Unused (Pyramid)
                };
                for(new i=0; i<sizeof(paynspray); i++)
                {
                    if(IsPlayerInRangeOfPoint(playerid, 10, paynspray[i][0], paynspray[i][1], paynspray[i][2]))
                                {
                                        CallRemoteFunction("OnVehicleRespray", "iiii", playerid, GetPlayerVehicleID(playerid), -1, -1);
                                        return 1;
                                }
                        }
                }
        }
        return 1;
}
 
stock paynspray_CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay)
{
        new vid = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
        SetVehicleHealth(vid, 999);
        return vid;
}
 
#if defined _ALS_CreateVehicle
        #undef CreateVehicle
#else
        #define _ALS_CreateVehicle
#endif
#define CreateVehicle paynspray_CreateVehicle
 
stock paynspray_AddStaticVehicleEx(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay)
{
        new vid = AddStaticVehicleEx(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
        SetVehicleHealth(vid, 999);
        return vid;
}
 
#if defined _ALS_AddStaticVehicleEx
        #undef AddStaticVehicleEx
#else
        #define _ALS_AddStaticVehicleEx
#endif
#define AddStaticVehicleEx paynspray_AddStaticVehicleEx
 
stock paynspray_AddStaticVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2)
{
        new vid = AddStaticVehicle(vehicletype, x, y, z, rotation, color1, color2);
        SetVehicleHealth(vid, 999);
        return vid;
}
 
#if defined _ALS_AddStaticVehicle
        #undef AddStaticVehicle
#else
        #define _ALS_AddStaticVehicle
#endif
#define AddStaticVehicle paynspray_AddStaticVehicle
<----------------------------------------------------------------------------------------------------------------->

Callback: OnVehicleSpawn
Este callback es llamado cuando un vehículo spawnea.
Parametros:
(vehicleid)

vehicleid El ID del vehiculo que spawneo

Return Este callback no devuelve un valor especifico.
Ejemplo:
pawn Code:
public OnVehicleSpawn(vehicleid)
{
    printf("El Vehiculo %i spawneo!",vehicleid);
    return 1;
}
<----------------------------------------------------------------------------------------------------------------->

¿Que cojones es esto?

Bueno,.. esto es un pequeño(digo pequeño porque algunos me faltaron de incluir) tutorial, o para ser sincero, esto mas que un tutorial es una traducción de las funciones de los callbacks que se encuentran en la wiki de samp. y como dije: che y si lo tradusco al español(por que vi que esta en varios idiomas pero no esta en español), y puse en en la pestañita edit, pero me salio de que tengo que estar registrado y logeado y no me pude registrar y por ende tampoco logearme... y aunque me logre logear se necesitan los permisos de los admins de la wiki que son los beta tester de samp, y yo no me hablo con ninguno de ellos como para decirles: che loco haceme admin de la wiki así lo traduzco al español... Así que como no pude hay, si puedo aquí... Espero que lo aprovechen para aprender si no lo conocían o si no lo entendían a algunos callbacks.. aunque me faltan las callbacks de los NPC y otros, que no le vi mucho uso ni aun dentro del archivo new.pwn, así que los deje..

PD: Si tengo tiempo traducire los que me faltaron, algunos días de estos...
PD2: Cuando se agreguen mas Callback(Talves en futuras versiones de samp) lo traduciré y lo agregare al post.

<----------------------------------------------------------------------------------------------------------------->
__________________
Traducciones del Ingles al Español
[Tutorial] Cómo crear un plugin
[Tool/Web/Other] Callback's
[Include] [0.3X] mSelection 1.1 R3
Dreyfuz is offline  
Old 16/04/2013, 12:33 AM   #2
OTACON
Banned
 
Join Date: Dec 2010
Location: mongolia
Posts: 4,930
Reputation: 569
Default Respuesta: Callback's

Buen Aporte, les servira para los nuevos que no sepan ingles .

Saludos.
OTACON is offline  
Old 16/04/2013, 12:33 AM   #3
Matyaas
Huge Clucker
 
Matyaas's Avatar
 
Join Date: Mar 2012
Posts: 383
Reputation: 9
Default Respuesta: Callback's

Wow que explicación xD no la leí completa pero lo haré, se agradecen tus conceptos sobre cada callback :P
__________________
Matyaas is offline  
Old 16/04/2013, 12:34 AM   #4
JustBored
High-roller
 
JustBored's Avatar
 
Join Date: Jan 2013
Location: Buenos Aires - Argentina
Posts: 1,151
Reputation: 134
Default Respuesta: Callback's

Genial che, yo estaba a punto de armar uno de estos.
__________________
"Compiler - A program designed to tell you how wrong you are. It's a great way to induce stress and frustration."

JustBored is offline  
Old 16/04/2013, 12:37 AM   #5
Dreyfuz
Huge Clucker
 
Dreyfuz's Avatar
 
Join Date: Jan 2013
Location: Planeta Tierra - Argentina - Buenos Aires.
Posts: 444
Reputation: 19
Default Respuesta: Callback's

Quote:
Originally Posted by OTACON View Post
Buen Aporte, les servira para los nuevos que no sepan ingles .

Saludos.
Quote:
Originally Posted by Matyaas View Post
Wow que explicación xD no la leí completa pero lo haré, se agradecen tus conceptos sobre cada callback :P
Quote:
Originally Posted by JustBored View Post
Genial che, yo estaba a punto de armar uno de estos.
Gracias...

y si traduje hasta las variables, en español, para que se entienda mas...
__________________
Traducciones del Ingles al Español
[Tutorial] Cómo crear un plugin
[Tool/Web/Other] Callback's
[Include] [0.3X] mSelection 1.1 R3
Dreyfuz is offline  
Old 16/04/2013, 01:13 AM   #6
Onfroi
Banned
 
Join Date: Jan 2012
Location: Dallas, Texas
Posts: 1,510
Reputation: 226
Default Re: Callback's

Buenisimo para los que no saben ingles, o no entienden las callbacks.

PD: cuanto tiempo te demoraste en hacer esto? ._.
Onfroi is offline  
Old 16/04/2013, 01:13 AM   #7
xSDx
Gangsta
 
Join Date: Oct 2012
Posts: 746
Reputation: 2
Default Respuesta: Callback's

Exelente tuto, pero deberias ponerle el prefijo tutorial.

Saludos.
__________________
Quote:
Skype: shinydavidvaldez
xSDx is offline  
Old 16/04/2013, 01:20 AM   #8
Dreyfuz
Huge Clucker
 
Dreyfuz's Avatar
 
Join Date: Jan 2013
Location: Planeta Tierra - Argentina - Buenos Aires.
Posts: 444
Reputation: 19
Default Respuesta: Callback's

Quote:
Originally Posted by Onfroi View Post
Buenisimo para los que no saben ingles, o no entienden las callbacks.

PD: cuanto tiempo te demoraste en hacer esto? ._.
Pues la idea se me ocurrio hayer por la mañana pero lo empese a hacer por la tarde(masomenos)...

Quote:
Originally Posted by xSDx View Post
Exelente tuto, pero deberias ponerle el prefijo tutorial.

Saludos.
Tienes razón.. Pero hora no le puedo cambiar el tag... pero no importa lo que vale es el contenido..
__________________
Traducciones del Ingles al Español
[Tutorial] Cómo crear un plugin
[Tool/Web/Other] Callback's
[Include] [0.3X] mSelection 1.1 R3
Dreyfuz is offline  
Old 16/04/2013, 01:25 AM   #9
xSDx
Gangsta
 
Join Date: Oct 2012
Posts: 746
Reputation: 2
Default Respuesta: Callback's

Solo un consejo la traduccion de ****** es mala intenta traducir las partes malas.
__________________
Quote:
Skype: shinydavidvaldez
xSDx is offline  
Old 16/04/2013, 01:28 AM   #10
Dreyfuz
Huge Clucker
 
Dreyfuz's Avatar
 
Join Date: Jan 2013
Location: Planeta Tierra - Argentina - Buenos Aires.
Posts: 444
Reputation: 19
Default Respuesta: Callback's

Quote:
Originally Posted by xSDx View Post
Solo un consejo la traduccion de ****** es mala intenta traducir las partes malas.
Si lo se.. algunas están media chinas pero cuando tenga tiempo las arreglo ahora ya es de noche y lusiana salazar me espera en la cama...(ojala xD)

PD: Pronto otra traducción, que de seguro les van a gustar mas que esta...

Quote:
Originally Posted by Propaganda
Muy pronto.. por forum samp
__________________
Traducciones del Ingles al Español
[Tutorial] Cómo crear un plugin
[Tool/Web/Other] Callback's
[Include] [0.3X] mSelection 1.1 R3
Dreyfuz is offline  
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tutorial] Hooking CallBack(s) - How to Hook any callback Swimor Tutorials 6 19/10/2012 09:32 PM
[Ajuda] Callback DreyPT Português/Portuguese 7 02/08/2012 01:37 PM
Callback. BetaLaxx Scripting Help 5 07/04/2012 03:43 PM
Callback Bomber Help Archive 4 04/03/2010 08:08 PM
Is there such callback as JoeDaDude Help Archive 12 21/01/2010 05:29 PM


All times are GMT. The time now is 06:03 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.