Am creat acest ghid pentru a ajuta oamenii care nu stiu cum se creeaza un "server" si care nu stiu notiunile de baza.Acest ghid are urmatoarele "capitole" (daca le pot numi asa):

1. Ce este PAWN?
2. Ce este PAWNO?
3. Ce este functia?
4. Ce este "callback"-ul?
5. Cum pot defini ceva?
6. Ce sunt "includerile"?
7. Cum folosesc un procesor de comenzi?
8. Cum pot rezolva erorile primite la compilare?

1) Ce este PAWN?
PAWN este un limbaj de programare facut dintr-un amestec de limbaje de programare deja cunoscute.PAWN este utilizat de mai multe jocuri, inclusiv SA:MP. El are functii si "callback"-uri ca orice alt limbaj pe programare.

2) Ce este PAWNO?
PAWNO este programul cu care editezi/creezi un script (folosind un fisier sursa).Acesta la randul lui se foloseste de pawncc.exe care functioneaza ca un compilator pentru PAWNO si il ajuta sa gaseasca greselile (erorile/avertizementele) si care creeaza fisierul .amx (scriptul compilat).Fiserul compilat este folosit de samp-server.exe (fisierul .pwn este sursa).Acum ca am spus toate astea, presupun ca te intrebi de unde poti descarca editorul.Pai, raspunsul este foarte usor, PAWNO poate fi gasit in pachetul cu "server"-ul de baza.

3) Ce este functia?
Functia face parte din "scripting" si spune scriptului ce sa faca si in ce "callback" sa faca, iar un exemplu potrivit ar fi:

SendClientMessage(playerid, /* CULOARE */, "SA-MP Sistems"); // O functie obisnuita.

Codul scris mai sus trimite un mesaj jucatorului respectiv cu o culoare aleasa de tine (mesajul este "UltraPhase").Ei bine, trebuie sa pui textul intre " ".Acele ghilimele inseamna "arie" in limbajul de programare (pe engleza se numeste "string").Sa dau un exemplu pentru a intelege mai bine acest lucru (in acest exemplu, voi adauga si "callback"-ul OnPlayerConnect) si ar trebui sa arate cam asa:

public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, -1, "Te-ai conectat pe UltraPhase."); // Asta inseamna ca atunci cand un jucator se conecteaza, ii va aparea mesajul "Te-ai conectat pe UltraPhase.", doar lui.
return 1;
}

Ca sa facem acest mesaj "public" (sa apara tuturor jucatorilor) facem in felul urmator:

public OnPlayerConnect(playerid)
{
SendClientMessageToAll(-1, "Un jucator tocmai s-a conectat pe UltraPhase RPG Server."); // Asta inseamna ca atunci cand un jucator se conecteaza, toti ceilalti jucatori vor primi un mesaj cum ca cineva sa conectat.
return 1;
}

A-ti observat ca nu am scris "playerid" la parametrii? Ghiciti de ce.Deoarece trimitem mesajul tuturor jucatorilor, nu doar unei persoane specificate.Pentru a vedea mai multe functii, accesati aceasta pagina.

4) Ce este "callback"-ul?
"Callback"-ul mai este numit si "scheletele scripting"-ului si poate fi inteles cu cateva cunostinte in limba engleza asa ca nu o sa spun prea multe despre el (cum am mai spus, sunt foarte usor de inteles deoarece numele lor contine o parte din scopul acestora).Cum ar fi

OnPlayerConnect // Un jucator se conecteaza.

OnPlayerDisconnect // Un jucator se deconecteaza.

OnPlayerSpawn // Un jucator se genereaza.

OnPlayerDeath // Un jucator moare.

// s.a.m.d

Toate aceste Spoilere De mai sus(de la 4) se pun una sub alta .. pe mine nu m-a lasat sa le pun pe toate intr-un spoiler

Pentru a citi mai multe despre "callback"-uri si despre parametrii lor, accesati aceasta pagina. Dar, revenind la subiect, mai sunt si "callback"-uri importante cum ar fi main() sau OnGameModeInit.Acestea ajuta la diferentierea scriptului ("filterscript") de modul de joc ("gamemode") iar main() are un rol foarte important, deoarece trebuie folosit neaparat la crearea unui mod de joc (ca, consola sa functioneze) iar OnGameModeIniteste pentru obiecte, "pickup"-uri, vehicule, etc.

5) Cum pot defini ceva?
Pentru a defini ceva trebuie folosit #define.Ca un exemplu, voi defini culoare COLOR_RED si va arata cam asa:

#define COLOR_RED 0xA10000AA

#define este o directiva a compilatorului (pawncc.exe) care ne ajuta la definirea lucrurilor pe care vrem sa le facem.Deci, daca vreau sa definesc COLOR_RED, scriu COLOR_RED si 0xA10000AA (codul pentru culoarea rosie, in PAWNO) iar daca as vrea sa definesc culoarea COLOR_YELLOW va arata cam asa:

#define COLOR_YELLOW 0xE0E377AA

6) Ce sunt "include-urile"?
Pai, de fiecare data (la inceputul fiecarui script) trebuie sa aveti linia asta:

#include <a_samp> // Include toate functiile si "callback"-urile de baza.

Deci, cu cat mai multe "includeri" aveti in script, cu atat de multe functii aveti de folosit dar nu includeti fisiere aiurea doar pentru a avea mai multe functii, adaugati-le doar pe cele de care aveti nevoie. Sintaxa pentru a include ceva este:

#include </* NUME */>

7) Cum folosesc un procesor de comenzi?
Librariile compilatorului dispun de o functie care compara doua arii, aceasta fiind strcmp iar o comanda facuta cu functia asta ar arata cam asa:

public OnPlayerCommandText(playerid, cmdtext[]) // "Callback"-ul folosit pentru procesarea comenzii.
{ // Acolda de deschidere.
if(strcmp("/scripting", cmdtext, true, 10) == 0) // Verifica daca un jucator a scris "/scripting".
{ // Daca jucatorul a scris asta, proceseaza urmatoarele functii:
SendClientMessage(playerid, COLOR_RED, "Functioneaza."); // Trimite mesajul respectiv.
return 1; // Reintoarce valoarea 1 ("true").
} // Acolada de inchidere.
return 0; // Reintoarce valoarea 0 ("false") deoarece am reintors deja valoarea valida.
} // Punem capat acestui "callback".

O comanda facuta cu acest procesor de comenzi ar arata cam asa:

CMD:scripting(playerid, params[]) // Comanda creata.
{ // Acolda de deschidere.
SendClientMessage(playerid, COLOR_RED, "Functioneaza."); //Trimite mesajul respectiv.
return 1; // Reintoarce valoarea 1 ("true").
}// Acolada de inchidere.

Reparare erori PAWNO ★ SA-MP Sistems