Pawno
Guide o spiegazioni su esso.
Salve,
In questo topic, vi spiegherò prima di tutto cos'è il pawno e per cosa viene usata, dopo di che passaremo al vero e propio coding.
1) Cosa è il pawno?
Pawn(che italianizzato diventa Pawno) è il linguaggio di programmazione basato su C#(cSharp) con il quale è possibile creare script quali GameModes e FilterScripts. La sintassi che usa è molto simile a quella del c++ se non addirittura identica quando si parla di operatori algebrici e logici.
La disposizione di esecuzione si basa su eventi chiamati Callbacks all'interno dei quali è possibile usare funzioni, variabili, condizioni e cicli. L'uso dei file è quasi uguale a quello del c e le funzioni per le stringhe sono identiche a quelle della libreria string.h con qualche variazione a livello degli argomenti delle varie funzioni.
Il modo migliore per imparare a scriptare è sicuramente quello di partire dalla modifica di alcuni script. Una volta raggiunta domestichezza con frasi, posizionamento veicoli e skin si pu? passare al livello superiore cercando di creare variabili per determinare varie condizioni. Se siete già esperti programmatori di c/c++ il passaggio al Pawn sarà facilissimo.
Un consiglio che voglio dare agli aspiranti scripters è questo:
Non importa se fate un errore, quello che invece conta è che sappiate come risolverlo
2) Primi passi col pawn
Nel capitolo precedente abbiamo visto una breve descrizione del pawn e ai suoi utilizzi, ora invece iniziamo con il vero coding.. ovviamente prima con il più semplice, dopo con il più difficile.
Iniziamo il discorso con i colori,
I colori sono una definizione di un codice contrassegnata (di solito) all'inizio delle gamemode.
Vi sconsiglio vivamente di andare a cercare questi codici, invece vi consiglio di utilizzare questi codice che vi sotto elenco in questo momento:
#define COLOR_BLACK 0x2C2727AA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGHTYELLOW 0x99FF9900
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_PURPLE 0x990099AA
#define COLOR_BROWN 0x663300AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_DARKRED 0x660000AA
#define COLOR_DARKBLUE 0x000066AA
Allora, analizziamo il codice.
#define: Funzione che definisce un codice, una cifra o una scritta delimitata da un "soprannome" Es: #define numerodue 2 (Esso può essere utilizzato con i colori, o con altre definizioni tipo il livello di admin per gli admin system o addirittura per anticheat)
COLOR_BLACK: Questo è il "soprannome" di cui abbiamo parlato sopra.
0x2C2727AA: Questo è il codice, in questo caso quello del colore, che viene definito con il soprannome "COLOR_BLACK".
Ora invece passiamo alle funzioni principali di una gamemode "spoglia" ovvero senza un contenuto.
3) Public
public OnGameModeInit()
E' la parte iniziale della gamemode, utilizzata per inserire classi, veicoli, object (oggetti) e pickup.
Questa funzione viene anche utilizzata per far "startare" qualcosa allo START (apertura) del server. Es: dm = 0; (Variabile iniziale in cui definisce che allo start del server la variabile soprannominata "dm" deve essere a zero, ovvero falsa o anche detta disattiva)
public OnGameModeExit()
Stessa cosa di OnGameModeInit ma all'incontrario, ovvero che questa è la parte finale della gamemode.
Ricordo:
OnGameModeInit: Parte iniziale.
OnGameModeExit: Parte finale.
Di solito questa funzione viene utilizzata per "terminare" dei Textdraw startati all'inizio della gamemode o una fine della lettura degli scriptfiles in caso di register/login system.
public OnPlayerRequestClass(playerid, classid)
Questa funzione è utilizzata per definire qualsiasi cosa durante la scelta della classe, come le telecamere, scritte durante la selezione classe e altro.
public OnPlayerConnect(playerid)
Questa funzione ? invece utilizzata per definire qualsiasi durante la connessione di un player, di solito questa funzione è utilizzata per scrivere che un player è entrato nel server. Es: Ciccio ? entrato nel server.
Alla fine di questo topic troverete varie funzioni da me conosciute per migliorare la vostra gamemode in tutti i campi.
public OnPlayerDisconnect(playerid)
Stessa cosa di OnPlayerConnect, solo che è all'incontrario.. tutte le funzioni sotto questo public incominciano durante la disconnessione di un player, questa funzione di solito è utilizzata per scrivere che un player è uscito dal server e con le varie motivazioni (crash, disconnect, kick). Es: Ciccio ? USCITO/CRASHATO/STATO KICKATO/STATO BANNATO dal server.
public OnPlayerSpawn(playerid)
Funzione utilizzata per far iniziare qualsiasi cosa quando un player spawna.
public OnPlayerDeath(playerid, killerid, reason)
Funzione utilizzata per far iniziare qualsias cosa quando un player muore e/o uccide qualcuno, per esempio inviare un messaggio in cui dice che una persona ha ucciso un altra persona. Es: Ciccio ha ucciso mario.
public OnPlayerCommandText(playerid, cmdtext[])
Questa funzione, secondo un mio punto di vista ? la più importante in assoluto. Tutti i comandi, possibili e immaginabili devono stare SOTTO questo public.
Es:
Codice:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
4) Comandi
Bene, abbiamo visto le funzioni più importanti del Pawn.
Ora iniziamo col vero e propio coding.
Iniziamo subito da un teleport.
Allora, il comando inizier? con
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
Decidete voi il nome del comando, io per esempio metto /dm1
Per settare la posizione da mettere in quel teleport dovrete aggiungere una stringa, due se volete definire anche l'angolazione della posizione.
Andate in un qualsiasi server di SA:MP e andate nella posizione dove vorreste che il teleport portasse li, dopo di che utilizzate il comando /save (dopo il comando potete fare uno spazio e scrivere un qualcosa come appunto) che vi salver? le coordinate dentro un file chiamato savedposition dentro la cartella di GTA San Andreas. Una volta che avrete quella stringa del /save dentro quel file che vi ho sopraelencato dovrete prendere la seconda, terza e quarta cifra.. se si vuole delimitare anche l'angolazione del teleport prendete anche la quinta cifra.
Ora prendo delle coordinate di un deathmatch che ho in una mia gamemode.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
Se volete mettere anche l'angolazione, che sarebbe la quinta cifra.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
Vi consiglio resettare le armi, essendo un deathmatch dovete inserire solo le armi che si usano in quel deathmatch.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
ResetPlayerWeapons(playerid);
Ora inserite le armi, id dell'arma e munizioni. Per cercare gli ID delle armi andate in internet e le troverete in poco tempo.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 24, 9999);
In caso vorreste mettere un avviso che un player è andato in un deathmatch, completate il comando in questo modo.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 24, 9999);
new name[MAX_PLAYER_NAME], string[256];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "^^^ %s ? andato/a al DM Deagle.", name);
SendClientMessageToAll(COLOR_ORANGE, string);
new name[MAX_PLAYER_NAME], string[256];: Crea la variabile name e crea una stringa si 256 caratteri.
GetPlayerName(playerid, name, sizeof(name));: Definisce il significato della variabile name.
format(string, sizeof(string), "^ %s ? andato/a al DM Deagle.", name);: Stringa che dice che %s (player) ? andato al DM Deagle.
SendClientMessageToAll(COLOR_ORANGE, string); Invia la stringa a tutti con il messaggio di colore arancione.
5) Objects e Map Editor
Sotto richiesta di un utente aggiungo questa parte nella guida, allora.. prima di tutto per aggiungere degli object sconsiglio vivamente inserite degli object manualmente. Motivo? Operazione LUNGHISSIMA e nel 90% di probabilità che sbagli.
Per aggiungere degli object è consigliato scaricare MTA Race, dopo di che nel menu iniziale selezionare Map Editor.
Una volta che avete aggiunto i vostri object salvate il file dal game, dopo di che andate nella cartella di MTA Race e cercate il vostro file che avete fatto.
Per convertire il file di MTA Race con un codice di Pawn dovrete avere un convertitore, che trovate internet se lo cercate.
Ricordo che Pawn supporta SOLO 500 Objects (senza streamer) o farà crashare l'intera gamemode.
Con uno streamer invece, un include impedirà alla gm di andare in tilt e bloccherà il crash facendo partire la gamemode.
Fonte mia.
Guide o spiegazioni su esso.
Salve,
In questo topic, vi spiegherò prima di tutto cos'è il pawno e per cosa viene usata, dopo di che passaremo al vero e propio coding.
1) Cosa è il pawno?
Pawn(che italianizzato diventa Pawno) è il linguaggio di programmazione basato su C#(cSharp) con il quale è possibile creare script quali GameModes e FilterScripts. La sintassi che usa è molto simile a quella del c++ se non addirittura identica quando si parla di operatori algebrici e logici.
La disposizione di esecuzione si basa su eventi chiamati Callbacks all'interno dei quali è possibile usare funzioni, variabili, condizioni e cicli. L'uso dei file è quasi uguale a quello del c e le funzioni per le stringhe sono identiche a quelle della libreria string.h con qualche variazione a livello degli argomenti delle varie funzioni.
Il modo migliore per imparare a scriptare è sicuramente quello di partire dalla modifica di alcuni script. Una volta raggiunta domestichezza con frasi, posizionamento veicoli e skin si pu? passare al livello superiore cercando di creare variabili per determinare varie condizioni. Se siete già esperti programmatori di c/c++ il passaggio al Pawn sarà facilissimo.
Un consiglio che voglio dare agli aspiranti scripters è questo:
Non importa se fate un errore, quello che invece conta è che sappiate come risolverlo
2) Primi passi col pawn
Nel capitolo precedente abbiamo visto una breve descrizione del pawn e ai suoi utilizzi, ora invece iniziamo con il vero coding.. ovviamente prima con il più semplice, dopo con il più difficile.
Iniziamo il discorso con i colori,
I colori sono una definizione di un codice contrassegnata (di solito) all'inizio delle gamemode.
Vi sconsiglio vivamente di andare a cercare questi codici, invece vi consiglio di utilizzare questi codice che vi sotto elenco in questo momento:
#define COLOR_BLACK 0x2C2727AA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGHTYELLOW 0x99FF9900
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_PURPLE 0x990099AA
#define COLOR_BROWN 0x663300AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_DARKRED 0x660000AA
#define COLOR_DARKBLUE 0x000066AA
Allora, analizziamo il codice.
#define: Funzione che definisce un codice, una cifra o una scritta delimitata da un "soprannome" Es: #define numerodue 2 (Esso può essere utilizzato con i colori, o con altre definizioni tipo il livello di admin per gli admin system o addirittura per anticheat)
COLOR_BLACK: Questo è il "soprannome" di cui abbiamo parlato sopra.
0x2C2727AA: Questo è il codice, in questo caso quello del colore, che viene definito con il soprannome "COLOR_BLACK".
Ora invece passiamo alle funzioni principali di una gamemode "spoglia" ovvero senza un contenuto.
3) Public
public OnGameModeInit()
E' la parte iniziale della gamemode, utilizzata per inserire classi, veicoli, object (oggetti) e pickup.
Questa funzione viene anche utilizzata per far "startare" qualcosa allo START (apertura) del server. Es: dm = 0; (Variabile iniziale in cui definisce che allo start del server la variabile soprannominata "dm" deve essere a zero, ovvero falsa o anche detta disattiva)
public OnGameModeExit()
Stessa cosa di OnGameModeInit ma all'incontrario, ovvero che questa è la parte finale della gamemode.
Ricordo:
OnGameModeInit: Parte iniziale.
OnGameModeExit: Parte finale.
Di solito questa funzione viene utilizzata per "terminare" dei Textdraw startati all'inizio della gamemode o una fine della lettura degli scriptfiles in caso di register/login system.
public OnPlayerRequestClass(playerid, classid)
Questa funzione è utilizzata per definire qualsiasi cosa durante la scelta della classe, come le telecamere, scritte durante la selezione classe e altro.
public OnPlayerConnect(playerid)
Questa funzione ? invece utilizzata per definire qualsiasi durante la connessione di un player, di solito questa funzione è utilizzata per scrivere che un player è entrato nel server. Es: Ciccio ? entrato nel server.
Alla fine di questo topic troverete varie funzioni da me conosciute per migliorare la vostra gamemode in tutti i campi.
public OnPlayerDisconnect(playerid)
Stessa cosa di OnPlayerConnect, solo che è all'incontrario.. tutte le funzioni sotto questo public incominciano durante la disconnessione di un player, questa funzione di solito è utilizzata per scrivere che un player è uscito dal server e con le varie motivazioni (crash, disconnect, kick). Es: Ciccio ? USCITO/CRASHATO/STATO KICKATO/STATO BANNATO dal server.
public OnPlayerSpawn(playerid)
Funzione utilizzata per far iniziare qualsiasi cosa quando un player spawna.
public OnPlayerDeath(playerid, killerid, reason)
Funzione utilizzata per far iniziare qualsias cosa quando un player muore e/o uccide qualcuno, per esempio inviare un messaggio in cui dice che una persona ha ucciso un altra persona. Es: Ciccio ha ucciso mario.
public OnPlayerCommandText(playerid, cmdtext[])
Questa funzione, secondo un mio punto di vista ? la più importante in assoluto. Tutti i comandi, possibili e immaginabili devono stare SOTTO questo public.
Es:
Codice:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
4) Comandi
Bene, abbiamo visto le funzioni più importanti del Pawn.
Ora iniziamo col vero e propio coding.
Iniziamo subito da un teleport.
Allora, il comando inizier? con
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
Decidete voi il nome del comando, io per esempio metto /dm1
Per settare la posizione da mettere in quel teleport dovrete aggiungere una stringa, due se volete definire anche l'angolazione della posizione.
Andate in un qualsiasi server di SA:MP e andate nella posizione dove vorreste che il teleport portasse li, dopo di che utilizzate il comando /save (dopo il comando potete fare uno spazio e scrivere un qualcosa come appunto) che vi salver? le coordinate dentro un file chiamato savedposition dentro la cartella di GTA San Andreas. Una volta che avrete quella stringa del /save dentro quel file che vi ho sopraelencato dovrete prendere la seconda, terza e quarta cifra.. se si vuole delimitare anche l'angolazione del teleport prendete anche la quinta cifra.
Ora prendo delle coordinate di un deathmatch che ho in una mia gamemode.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
Se volete mettere anche l'angolazione, che sarebbe la quinta cifra.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
Vi consiglio resettare le armi, essendo un deathmatch dovete inserire solo le armi che si usano in quel deathmatch.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
ResetPlayerWeapons(playerid);
Ora inserite le armi, id dell'arma e munizioni. Per cercare gli ID delle armi andate in internet e le troverete in poco tempo.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 24, 9999);
In caso vorreste mettere un avviso che un player è andato in un deathmatch, completate il comando in questo modo.
Codice:
if (strcmp("/dm1", cmdtext, true, 10) == 0)
SetPlayerPos(playerid, -768.7932,1557.3037,27.1172);
SetPlayerFacingAngle(playerid, 269.4232);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 24, 9999);
new name[MAX_PLAYER_NAME], string[256];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "^^^ %s ? andato/a al DM Deagle.", name);
SendClientMessageToAll(COLOR_ORANGE, string);
new name[MAX_PLAYER_NAME], string[256];: Crea la variabile name e crea una stringa si 256 caratteri.
GetPlayerName(playerid, name, sizeof(name));: Definisce il significato della variabile name.
format(string, sizeof(string), "^ %s ? andato/a al DM Deagle.", name);: Stringa che dice che %s (player) ? andato al DM Deagle.
SendClientMessageToAll(COLOR_ORANGE, string); Invia la stringa a tutti con il messaggio di colore arancione.
5) Objects e Map Editor
Sotto richiesta di un utente aggiungo questa parte nella guida, allora.. prima di tutto per aggiungere degli object sconsiglio vivamente inserite degli object manualmente. Motivo? Operazione LUNGHISSIMA e nel 90% di probabilità che sbagli.
Per aggiungere degli object è consigliato scaricare MTA Race, dopo di che nel menu iniziale selezionare Map Editor.
Una volta che avete aggiunto i vostri object salvate il file dal game, dopo di che andate nella cartella di MTA Race e cercate il vostro file che avete fatto.
Per convertire il file di MTA Race con un codice di Pawn dovrete avere un convertitore, che trovate internet se lo cercate.
Ricordo che Pawn supporta SOLO 500 Objects (senza streamer) o farà crashare l'intera gamemode.
Con uno streamer invece, un include impedirà alla gm di andare in tilt e bloccherà il crash facendo partire la gamemode.
Fonte mia.
Ultima modifica: