Raga in questa guida vi spiegherò l'uso di ogni singolo Callback del Pawno.
Prima di tutto dovete sapere che i Callback sono quelle funzioni che regolano la GM, esempio il "OnPlayerConnect" si avvia quando un player si connette o il "OnPlayerSpawn" si avvia quando un player spawn, ecc...
Per avviare un Callback si deve aggiungere public prima del nome del Callback, in ogni Callback troveremo degli argomenti, il più importante è il playerid che indica la persona che sta compiendo l'azione nel Callback.
P.S. Ogni Callback si può avviare una sola volta !
Iniziamo:
1° "OnGameModeInit()"Il OnGameModeInit si avvia quando aprite il dos del server
Nel OnGameModeInit si devono aggiungere Veicoli, Skins, Pickups o Timer che avviano altre funzioni, queste funzioni le trovate qua:
viewtopic.php?f=40&t=219Uso:
Codice:
public OnGameModeInit()
{
AddStaticVechicle(..);
//Altre funzioni
}
Come potete notare questo Callback tra le parentesi non ha argomenti, questo perchè quando si avvierà la GM non ci saranno ID, Skin, Veicoli, Oggetti, Timer ecc... essi si avvieranno dopo l'avvio della GM
2° "OnGameModeExit()"Il OnGameModeExit si avvia quando la GM verra "Riavviato" o verrà "Chiusa", qua potrete mettere le funzioni per distruggere tutti i veicoli o tutti gli oggetti ecc..
Uso:
Codice:
public OnGameModeExit()
{
for(new v = 1; v < MAX_VEHICLES; v++) DestroyVehicle(v);
}
In questo modo alla chiusura della Gamemode tutti i veicoli verrano distrutti
3° "OnFilterScriptInit()"Il OnFilterScriptInit è perfettamente uguale al OnGameModeInit, l'unica differenza è che il OnFilterScriptInit viene avviato negli FS e non ha bisogno del "main()" in cima
4° "OnFilterScriptExit()"Il OnFilterScriptExit è perfettamente uguale al OnGameModeExit, l'unica differenza è che il OnFilterScriptExit viene avviato negli FS
5° "OnPlayerConnect(playerid)"Il OnPlayerConnect si avvia quando un player si connette, qua possiamo trovare l'argomento "playerid" cioè l'id del player che si connette
Uso:
Codice:
public OnPlayerConnect(playerid)
{
new nome[24];
new string[128];
GetPlayerName(playerid, nome, 24);
format(string, 128, "Il Player %s si è connesso", nome);
SendClientMessageToAll(COLOR_GREEN, string);
return 1;
}
Qua prima verranno creati i due array "nome e string" dopo col GetPlayerName nome assume il nome del playerid e infine con un
format viene formattato il messaggio aggiungendo il nome e inviato con SendClientMessageToAll
6° "OnPlayerDisconnect(playerid)"Il OnPlayerDisconnect viene richiamato quando il playerid si disconnette
Uso:
Codice:
public OnPlayerDisconnect(playerid)
{
new nome[24];
new string[128];
GetPlayerName(playerid, nome, 24);
format(string, 128, "Il Player %s si è disconnesso", nome);
SendClientMessageToAll(COLOR_GREEN, string);
return 1;
}
7° "OnPlayerSpawn(playerid)"Il OnPlayerSpawn viene richiamato quando il playerid spawna
Uso:
Codice:
public OnPlayerSpawn(playerid)
{
SendClientMessage(playerid, COLOR_GREEN, "Sei spawnato");
return 1;
}
8° "OnPlayerDeath(playerid, killerid, reason)"Il OnPlayerDeath viene richiamato quando il killerid uccide il playerid con l'arma "reason"
Uso:
Codice:
public OnPlayerDeath(playerid, killerid, reason)
{
SendDeathMessage(killerid, playerid, reason);
return 1;
}
Quando un player muore viene mandato un messaggio di morte in basso a destra dicendo che il killerid ha ucciso il playerid con l'arma mostrata nella reason
9° "OnVehicleSpawn(vehicleid)"Il OnVehicleSpawn viene richiamato quando il vehicleid spawna
Uso:
Codice:
public OnVehicleSpawn(vehicleid)
{
printf("il veicolo con id %d è spawnato", vehicleid);
return 1;
}
Qua possiamo trovare la variabile vehicleid che indica l'id del veicolo
10° "OnVehicleDeath(vehicleid, killerid)"Il OnVehicleDeath viene richiamato quando un veicolo viene distrutto
Uso:
Codice:
public OnVehicleDeath(vehicleid, killerid)
{
printf("il veicolo con id %d è morto per mano del player con id %d", vehicleid, playerid);
return 1;
}
11° "OnPlayerText(playerid, text[])"Il OnPlayerText viene richiamato quando un player invia un messaggio in chat
Uso:
Codice:
public OnPlayerText(playerid, text[])
{
if(pMutato[playerid]) return 0;
return 1;
}
Questa funzione dice che se il player è mutato allora il callback returna 0
Quando il callback OnPlayerText returna 0 il messaggio non viene inviato
Qua possiamo trovare l'argomento "text[]" molto utile perchè text[] è il messaggio inviato dal playerid e può essere usato
per creare Team chat o Admin chat ecc...
12° "OnPlayerCommandText(playerid, cmdtext[])"Il OnPlayerCommandText è simile al OnPlayerText, solo che esso viene chiamato quando mettete davanti ad una parola "/"
Uso:
Codice:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/god", true)==0)
{
return SetPlayerHealth(playerid, 1000000.0);
}
return 0;
}
Il strcmp dice che se cmdtext è uguale a /god allora avviene la funzione
Il OnPlayerCommandText returna 0 cosicchè quando viene inviato il comando ed è sbagliato invece di inviare il messaggio a tutti
manda il messaggio "Unknow Command"
Qua troviamo l'argomento cmdtext che corrisponde alla stringa del comando
13° "OnPlayerRequestClass(playerid, classid)"Il OnPlayerRequestClass viene avviato quando un player sta scegliendo il personaggio
Uso:
Codice:
public OnPlayerRequestClass(playerid, classid)
{
GameTextForPlayer(playerid, "Scegli un personaggio", 2000, 1);
return 1;
}
Questo script invia il messaggio "Scegli un personaggio" quando il playerid sta scegliendo la skin
Qua possiamo trovare l'argomento "classid" che corrisponde all'id della Classe che stai visualizzando
Il classid 0 è uguale al primo AddPlayerClass che si trova nella vostra GM e così il classid 1 è uguale al secondo AddPlayerClass ecc...
14° "OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)"Il OnPlayerEnterVehicle viene avviato quando il playerid entra nel veicolo vehicleid
Uso:
Codice:
punlic OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
printf("Il Player con id %d è entrato nel veicolo con id %d come guidatore", playerid, vehicleid);
return 1;
}
Qua possiamo trovare l'argomento "ispassenger" il quale indica che un player entra come passeggero o guidatore, esempio:
Codice:
if(ispassenger) RemovePlayerFromVehicle(playerid);
15° "OnPlayerExitVehicle(playerid, vehicleid)"Il OnPlayerExitVehicle viene richiamato quando un player esce da un veicolo
Uso:
Codice:
public OnPlayerExitVehicle(playerid, vehicleid)
{
printf("Il Player con id %d è uscito dal veicolo con id %d", playerid, vehicleid);
return 1;
}
16° "OnPlayerStateChange(playerid, newstate, oldstate)"Il OnPlayerStateChange viene richiamato quando un player cambia il suo stato
Gli stati di un player indicano l'azione che sta compiendo il player e sono questi:
In questo Callback troviamo newstate e oldstate
newstate corrisponde al nuovo stato, cioè ciò che sta facendo il player ora
oldstate corrisponde al vecchio stato, cioè ciò che stava facendo il player prima del newstate
Uso:
Codice:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_ONFOOT)
{
printf("Il player con id %d è entrato in un veicolo");
}
return 1;
}
17° "OnPlayerEnterCheckpoint(playerid)"Il OnPlayerEnterCheckpoint viene avviato quando un player entra in qualsiasi checkpoint, l'unico bug di questa funzione è
che dovrebbe esserci un argomento per segnalare il checkpoint in cui stai entrando, ma possiamo usa il IsPlayerInRangeOfPoint
Uso:
Codice:
public OnPlayerEnterCheckpoint(playerid)
{
printf("Il player con id %d è entrato in un checkpoint", playerid);
return 1;
}
18° "OnPlayerLeaveCheckpoint(playerid)"Il OnPlayerLeaveCheckpoint viene richiamato quando un player esce da un checkpoint
19° "OnPlayerEnterRaceCheckpoint(playerid)"Il OnPlayerEnterRaceCheckpoint viene richiamato quando un player entra in un Race-Checkpoint
20° "OnPlayerLeaveRaceCheckpoint(playerid)"Il OnPlayerLeaveRaceCheckpoint viene richiamato quando un player esce da un Race-Checkpoint
21° "OnRconCommand(cmd[])"Il OnRconCommand viene richiamato quando viene inviato un comando Rcon con "SendRconCommand"
Uso:
Codice:
public OnRconCommand(cmd[])
{
if(strcmp(cmd, "gmx", true)==0) print("La GM è stata riavviata");
return 1;
}
Qua troviamo l'argomento "cmd[]" che corrisponde al comando Rcon inviato con SendRconCommand
22° "OnPlayerRequestSpawn(playerid)"Il OnPlayerRequestSpawn viene richiamato quando un player preme il tasto "Shift" per spawnare
Uso:
Codice:
public OnPlayerRequestSpawn(playerid)
{
SendClientMessage(playerid, COLOR_RED, "Non puoi spawnare");
return 0;
}
Se nel OnPlayerRequestSpawn mettete return 0 allora il player non potrà mai spawnare
23° "OnObjectMoved(objectid)"Il OnObjectMoved viene richiamato quando un oggetto inizia a muoversi con la funzione "MoveObject"
Uso:
Codice:
public OnObjectMoved(objectid)
{
printf("L'oggetto con id %d si sta muovendo", objectid);
return 1;
}
Qua troviamo l'argomento objectid che corrisponde all'id dell'oggetto in movimento
24° "OnPlayerObjectMoved(playerid, objectid)"Il OnPlayerObjectMoved viene richiamato quando un Player-Object inizia a muoversi con la funzione "MovePlayerObject"
Uso:
Codice:
public OnPlayerObjectMoved(playerid, objectid)
{
printf("Il PlayerObject con id %d si sta muovendo", objectid);
return 1;
}
25° "OnPlayerPickUpPickup(playerid, pickupid)"Il OnPlayerPickUpPickup viene richiamato quando un player entra in un Pickup
Uso:
Codice:
public OnPlayerPickUpPickup(playerid, pickupid)
{
printf("Il player %d è entrato nel pickup con id %d", playerid, pickupid);
return 1;
}
Qua troviamo l'argomentro pickupid che corrisponde all'id del pickup
26° "OnVehicleMod(playerid, vehicleid, componentid)"Il OnVehicleMod viene richiamato quando un player aggiunge ad'un veicolo un componente come il nos o un alettone ecc...
Uso:
Codice:
public OnVehicleMod(playerid, vehicleid, componentid)
{
printf("Il player %d ha aggiunto al veicolo %d il componente %d", playerid, vehicleid, componentid);
return 1;
}
Qua troviamo l'argomento componentid che corrisponde all'id del componente montato sul veicolo
27° "OnEnterExitModShop(playerid, enterexit, interiorid)"Questa funzione viene richiamata quando un player entra o esce da un transfender
Possiamo trovare la variabile "enterexit" che indica se sta entrando o uscendo e la variabile "interiorid" che indica l'interior del transfender
28° "OnVehiclePaintjob(playerid, vehicleid, paintjobid)"Il OnVehiclePaintjob viene richiamato quando un player vernicia la sua auto con una paintjob
Possiamo trovare la variabile "paintjobid" che corrisponde all'id della paintjob applicata
29° "OnVehicleRespray(playerid, vehicleid, color1, color2)"Il OnVehicleRespray viene richiamato quando un veicolo viene riverniciato al Pay'n'Spray
Possiamo trovare gli argomenti "color1 e color2" che corrispondo agli id dei colori applicati
30° "OnVehicleDamageStatusUpdate(vehicleid, playerid)"Il OnVehicleDamageStatusUpdate viene richiamato quando un veicolo perde vita o viene ammaccato
31° "OnPlayerSelectedMenuRow(playerid, row)"Il OnPlayerSelectedMenu viene richiamato quando il player visualizza un menù
Possiamo trovare l'argomento "row" che corrisponde al menu visualizzato
32° "OnPlayerExitedMenu(playerid)"Il OnPlayerExitedMenu viene richiamato quando un player abbandona un menu
33° "OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)"Il OnPlayerInteriorChange viene richiamato quando un player cambia il suo interior
Uso:
Codice:
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
printf("Il player con id %d ha cambiato il suo interior da %d a %d" playerid, oldinterior, newinterior);
return 1;
}
Possiamo trovare gli argomenti "newinterior e oldinterior"
newinterior = interior attuale del player
oldinterior = interior precedente al newinterior
34° "OnPlayerKeyStateChange(playerid, newkeys, oldkeys)"Il OnPlayerKeyStateChange viene richiamato quando un player scaccia uno dei tasti(elencati qua sotto) della tastiera
Uso:
Codice:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_JUMP && IsPlayerInAnyVehicle(playerid))
{
new Float:Vel[3];
GetVehicleVelocity(GetPlayerVehicleID(playerid), Vel[0], Vel[1], Vel[2]);
SetVehicleVelocity(GetPlayerVehicleID(playerid), Vel[0], Vel[1], Vel[2]+0.3);
}
return 1;
}
Questo script si avvia appena premete il tasto per saltare, e aumenta la velocità nell'asse Z dell'auto di 0.3 metri
Possiamo trovare gli argomenti
newkeys = Tasto appena premuto
oldkeys = Tasto premuto prima del newkeys
35° "OnRconLoginAttempt(ip[], password[], success)"Il OnRconLoginAttempt viene richiamato quando un player sbaglia il Rcon-login
Possiamo trovare tre argomenti:
ip = ip del player che ha sbagliato il Rcon login
password = password usata dal player
success (se 1 vuol dire che ha azzeccato la password, altrimenti se è 0 vuol dire che non l'ha azzeccata)
Uso:
Codice:
public OnRconLoginAttempt( ip[], password[], success )
{
if(!success) printf("L'ip %s ha sbagliato il Rcon login", ip)
return 1;
}
36° "OnPlayerUpdate(playerid)"Il OnPlayerUpdate è un Callback che viene richiamato ogni 20 ms registrando ciò che fa il player
Uso:
Codice:
public OnPlayerUpdate(playerid)
{
if(GetPlayerScore(playerid) > 0) SetPlayerScore(playerid, 0);
return 1;
}
Semplice script che se trova nel player più di 0 score le resetta
37° "OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])"Il OnDialogResponse è un Callback aggiunto nella versione 0.3 che permette l'utilizzo dei nuovi menu con dialogo e che
viene richiamato quando un player sta visualizzando un Dialogo
Possiamo trovare moltissimi argomenti:
dialogid = Id del dialog che si sta visualizzando
response (se 1 vuol dire che ha accettato il dialog, se 0 vuol dire che non ha accettato il dialog)
listitem = numero colonna del dialog
inputtext (Solo se si sta visualizzando un dialog dove bisogna scrivere) = corrisponde al testo che viene scitto nel dialog
Per avviare un dialog bisogna usare il ShowPlayerDialog, ma esso non fa parte dei Callback.
Guida finita, Tempo di lavorazione: 2h
Spero vi sia piaciuta, ho tralasciato
OnPlayerStreamIn(playerid, forplayerid)
OnPlayerStreamOut(playerid, forplayerid)
OnVehicleStreamIn(vehicleid, forplayerid)
OnVehicleStreamOut(vehicleid, forplayerid)
Perchè non so usarli xD
E con questa finisco di spiegare il a_samp.inc alla prossima guida