Le basi dello scripting

GTA-Expert » GTA San Andreas » Le basi dello scripting
Scripting SAMP



Introduzione


In questa guida cercheremo di spiegare al meglio le basi dello scripting, ossia i primi passi da compiere per chi è alle prime armi o per chi non sa da dove iniziare.

Per prima cosa scaricate l'ultima versione del pacchetto server, secondo il vostro Sistema operativo:



Dunque estraetelo in una cartella (ad esempio "SAMP Server") dove avremo i seguenti files:

Guida scripting


Per quanto riguarda lo scripting, ci interessereanno solamente le due cartelle Gamemodes e Pawno: gli altri files serviranno difatti per aprire un nostro proprio server ed eventualmente testare le nostre creazioni (per testarle al meglio sarà necessario ospitare anche altri giocatori).

Gamemodes


All'interno della cartella Gamemodes troveremo le vere e proprie "Modalità" con cui si potrà giocare nel server: dunque modalità di freeroaming ("cazzeggio"), gare, deathmatch (tutti contro tutti), o una sorta di "missioni" singole o a squadre, a obbiettivo e chi più ne ha più ne metta. Vi sono diversi files "preimpostati", ossia le gamemodes di "base" che il team di SA-MP ci ha fornito, e che i principianti dello scripting possono utilizzare per prendere spunto o operare su di esse, per capire meglio le funzioni principali e prendere confidenza con esse.

Guida scripting

Troveremo dunque dei file con estensione ".amx", ossia i veri e propri file che verranno caricati nel server.
Nella cartella "src" troveremo invece i files di estensione ".PWN", ossia quelli che potremo modificare a nostro piacimento: una volta finito il nostro lavoro su un file PWN, potremo, come si dice nel gergo dello scripting, "compilarlo", ossia verificare che non ci siano errori e creare automaticamente un file di estensione .amx (con lo stesso nome che abbiamo dato al file PWN) nella cartella "Gamemodes" (quella di cui ho parlato precedentemente), e che poi potremo "caricare" nel server.

Dunque, un file .amx sarà il nostro "lavoro finale", il quale poi dovrà essere caricato nel server, mentre il corrispondente file PWN sarà il nostro "lavoro di impasto e di modifica", il quale una volta compiuto, darà "vita" al file AMX corrispondente.

Nel caso in cui abbiate le idee confuse, passiamo ad un esempio pratico, che sicuramente ve le chiarirà.

Iniziare a scriptare


Per iniziare a scriptare è necessario usare un programma di scripting, ma niente paura, il team di SA-MP ce lo ha fornito: tornando alla cartella principale del server, potremo trovare dentro alla cartella "Pawno" il programma più usato per creare gamemodes, ossia il Pawno, appunto.

Guida scripting

Il file NEW, di estensione .PWN, è un file di "esempio", una sorta di "preparazione" alla gamemode e sarà quello da cui potremo capire per iniziare a capirci qualcosa.
Come altri file .PWN, sarà quello che ci permetterà di creare la gamemode (ossia la modalità), per poi "compilarlo" in un file .amx e poterlo inserire nel server.

Per comodità possiamo conservare tutti i files PWN nella cartella SRC (all'interno della cartella Gamemodes), ma potremo tenerli dove vorremo: difatti solo i file in .amx devono essere conservati nella cartella Gamemodes, per poter essere caricati.
Ma arriviamo al succo del discorso, aprendo il programma Pawno (cliccate sull'immagine per ingrandirla).

Guida scripting


Per poter caricare un file .PWN, cliccate in alto a sinsitra su file, quindi open e aprite uno dei file con estensione .PWN. Potremmo partire da quello di base, il NEW citato prima, ma possiamo cominciare con una gamemode già pronta, per poter capire a cosa corrispondano certe funzioni e certi comandi.

Vi consiglio di iniziare con la Gamemode "Monster", un freeroam, ossia una gamemodes senza particolari obbiettivi ma che consiste nel divertirsi "cazzeggiando".

Per il momento ignoriamo la colonna di destra, nella quale vi sono elencate tutte le funzioni possibili che potremo inserire nel nostro file, ma concentriamoci sulla gamemode già costruita.

Guida scripting


Analisi del codice e di alcune funzioni


Noteremo una sorta di intestazione preceduta da alcune barre come queste /////: esse sono di fondamentale importanza, in quanto il testo preceduto da due slash // non assume significato nello script, ossia non viene considerato, come se fosse una sorta di commento esterno.
Saranno dunque utili per annotare certe coordinate, oppure inserire dei commenti o ordinare script di lunghezza notevole. Non spaventati se alcune righe o frammenti di esse sono scritte con colori diversi: è semplicemente un modo per creare ordine e non "perdersi" tra le righe (il colore blu ad esempio, segnala l'inizio di una funzione, della "definizione" di un qualcosa, o altra variabili usate in programmazione).

La riga #include <a_samp> è presente in tutti gli script, dunque per il momento non ci interessa il suo significato.

La riga #define COLOR_RED 0xAA3333AA è un tipico esempio di "definizione" di un colore, con la quale possiamo "definire" (ossia far capire allo script) un colore, in questo caso il rosso. Dunque d'ora in avanti potremo scrivere semplicemente COLOR_RED per far capire allo script che un determinato testo, che potrà apparire durante lo svolgimento della gamemodes, debba avere il colore rosso.

Altri colori che potrete definire sono ad esempio questi:

#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_BLUE 0x1111AAFF
#define COLOR_PINK 0xFF66FFAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_DARKRED 0x660000AA
#define COLOR_ORANGE 0xFF9900AA

Passiamo alla riga:

//new gRoundTime = 1200000;
new gRoundTime = 0;

La prima, come detto in precedenza, non assume significato per lo script, ma è una sorta di funzione aggiuntiva non presa in considerazione.
La funzione "new gRoundTime =" avvia una sorta di timer, al termine del quale la gamemode finirà.
Dunque ci indica quanto durerà la gamemode, nell'unità di misura dei millisecondi, ossia la millesima parte del secondo: un secondo sarà pari a 1.000 millisecondi, un minuto a 60.000 millisecondi e cosi via. In questo caso, nella prima riga (non presa in considerazione dallo script) il tempo di durata è venti minuti, mentre nella riga che lo script terrà in considerazione, la gamemode non avrà mai fine (lo zero corrisponde all'infiniro).
Cambiando queste due righe invertendo i "ruoli", (oppure cancellando la riga che non ci interessa), potremo far durare la gamemode 1.200.000 di millisecondi, pari a venti minuti:

new gRoundTime = 1200000;

Arriviamo dunque al vero e proprio "corpo" della gamemode, ossia i principali eventi e funzioni. Non ci soffermeremo sulle parti più complesse per uno scripter alle prime armi, ma sulle funzioni principali.

public OnGameModeInit()
{

//...altri eventi...//

return 1 ;
}

Questo evento segnala l'inizio della gamemode, dopo il quale potremo aggiungere altri eventi come:

SetGameModeText("Monster freeroam");

il quale indicherà il nome della gamemode che apparirà quando essa sarà in corso nel server (ad un giocatore che aggiunge quel determinato server nei preferiti di SA-MP), come questo per intenderci (cliccate per ingrandire l'immagine):

Guida scripting



Aggiungere personaggi e veicoli


Due funzioni importanti sono quelle che ci permettono di aggiungere i personaggi da selezionare o i veicoli che potremo trovare nella gamemode: La prima è la "AddPlayerClass", nella seguente forma:

AddPlayerClass (id della skin, coordinata di spawn X, coordinata di spawn Y, coordinata di spawn Z, angolo di rotazione dello spawn Z, arma #1, numero munizioni arma #1, arma #2, numero munizioni arma #2, arma #3, numero munizioni arma #3 )

Lo spawn sarà il punto in cui il giocatore verrà "generato" una volta selezionato un determinato personaggio (o skin). Quindi avremo ad esempio:

AddPlayerClass (23,389.8672,2543.0046,16.5391,173.7645,0,0,0,0,0,0);

in cui 23 sarà l'ID della skin, 389.8672 sarà la coordinata X, 2543.0046 sarà la coordinata Y, e così via.


Per quanto riguarda i veicoli, avremo la funzione "AddStaticVehicle", nella seguente forma:

AddStaticVehicle (ID del modello, coordinata di spawn X, coordinata di spawn Y, coordinata di spawn Z, angolo di rotazione dello spawn Z, ID del colore #1, ID del colore #2);

Quindi avremo ad esempio:

AddStaticVehicle(513,324.7664,2546.0984,16.4876,178.8663,-1,-1)

in cui 513 sarà l'ID del veicolo. 324.7664 la coordinata di spawn X, e così via.

Ogni personaggio, ogni arma e ogni veicolo avranno un proprio ID, potete consultarli in queste pagine:


Altre funzioni


Vi sono poi altri eventi come:

public OnPlayerConnect(playerid)
{
[...]
return 1 ;
}

che eseguiranno una certa funzione al momento della connessione del player (come ad esempio un messaggio a centro schermo).
Oppure:

public OnPlayerDeath(playerid, killerid, reason)
{
[...]
return 1 ;
}

che eseguiranno una certa funzione al momento della morte del player.

Conclusione


Queste sono solamente le "basi" dello scripting, ovviamente vi sono innumerevoli eventi e funzioni, alcuni dei quali potrete consultare nella guida (ancora incompleta) sul nostro forum, comlpetamente in italiano, oppure consultando queste pagine, in inglese, molto ben strutturate.
Come tutte le cose difficili, anche lo scripting richiede molta pratica e conoscenza, e soprattutto pazienza e tempo, dunque non ponetevi obbiettivi troppo alti.

Una volta terminate tutte le modifiche al file, basterà "compilarlo", premendo il tasto a forma di freccia blu nel pannello in alto, verificando se vi sono degli errori. Se non ve ne sono, dovreste trovarvi in questa situazione:

Guida scripting


Nella stessa cartella in cui vi è il file PWN che avete modificato o creato, troverete il corrispondente file .amx, creatosi in seguito alla corretta compilazione. Dunque copiatelo nella cartella "Gamemodes", in modo da poter essere inserito nel vostro server.

Per la creazione di un server potete seguire la guida di questa pagina.

Come ultima cosa, fondamentale, dovrete inserire il nome della gamemode nel server.cfg:

echo Executing Server Config...
lanmode 0
maxplayers 20
port 7777
hostname Prova Creazione Server
gamemode0 sftdm 1
gamemode1 rivershell 1
gamemode2 area51 4
gamemode3 lvdm 1
gamemode4 monster
weburl www.gta-expert.it
mapname Testing
rcon_password ciao


Se avete delle difficoltà o non riuscite a correggere certi errori, chiedete nella sezione dedicata del nostro forum!