PDA

View Full Version : Pawn Tutorial



NastarzZz
15-11-2014, 07:52 PM
Introducere:
Pawn este un limbaj de scripting usor de utilizat. AMX Mod X foloseste Pawn in funcții sale de scripting pentru engine-ul Half-Life, folosind masina virtuala Pawn și Metamod (Pawn este scris in C, iar Metamod este scris in C ++). Script-urile pot fi scrise in orice editor de text, sau chiar in mediul Pawn, prin compilarea lor de catre un compilator rezulta fisier(e) binar(e) pentru AMX Mod X. Echipa AMX Mod X distribuie un compilator Pawn modificat special.
Crearea script-urilor in Pawn este relativ usoara, si nu are concepte īn alte limbi care nu sunt necesare pentru uz general, cum ar fi pointeri, vectori, structuri, clase, alocari etc.


Language Paradigms
Pawn a fost inițial numit "Small" pentru a sublinia dimensiunea bazei de sarcini lingvistice.Sacrificiile lingvistice pentru multe caracteristici se găsesc īn limbile moderne pentru a realiza simplitate și viteză, care sunt necesare pentru utilizări integrate.

No typing

Pawn are doar un singur tip de date - "celula". Este de mărimea indicatorului integral al procesorului (4 bytes pentru procesor pe 32 de biți, 8 biți pentru procesoare pe 64 de biți). Acest lucru are două implicații majore - Pawn bytecode este un procesor specific, iar indiciile se pot potrivi in interiorul unei celule.

Tagging

Pawn vă permite să creați "etichete" slab tastate static, care pot fi asociate cu variabilele de supraīncărcarea a operatorului primitiv. De exemplu: Pawn nu are nici un concept de numere cu puncte (numai numere īntregi). Īn schimb, operatorii sunt supraīncărcati cu Float: eticheta pentru a redirecționa calcul la noi funcții. Tag-checking este pus īn aplicare doar ca un avertisment. Dacă utilizați SourcePawn (pentru SourceMod), este de fapt un al doilea tip: String. Īntr-un String, scrisori sunt stocate ca bytes separate, ... avānd īn esență 4 caractere stocate īn fiecare celulă.
Din moment ce Pawn are un singur tip de date, aceasta nu are suport pentru structs, īnregistrări, obiecte, sau orice altceva.
Pawn face tablouri de sprijin celule, ceea ce conduce la matrice C- stil pentru siruri de caractere

No garbage collection

Pawn nu are nici o "grămadă" de alocare built-in. Toate variabilele sunt stocate pe stivă sau īn secțiunea de date. Prin urmare,nu este necesar nici o colectare a gunoiului iar pierderile de memorie nu sunt posibile

Procedural

Pawn este format īn īntregime din, subrutine non-imbricate unice. Nu există funcții lambda, funcțiile de membru, constructori, etc. Funcțiile pot fi interne (īn cadrul script-ul) sau publice (expuse la VM după nume, cum ar fi C-ului "extern").



Implementation Features
Cross-platform compilator compatibil, care emite informații bytecode și depanare navigare .
Cross-platform este compatibil cu Virtual Machine (VM),si cu suport pentru debug navigare , oprire executie , si interactiunea cu script-uri de la biblioteca C / C ++.
IA32 JIT Compiler pentru creșterea cu mai mult timp de executie script.
Pentru ca urmele de VM și JIT sunt atat de mici, Pawn Este ideal dacă īn interiorul jocurilor care au nevoie de un sistem simplu și foarte rapid , dispozitive sau aplicații embedded, și sisteme de timp real.

Variables
Variabile sunt structuri simple pentru efectuarea de date de-a lungul unei perioade de timp īn script.

Types
Pawn are doar trei tipuri de date pentru a declara variabile. Tipul variabil implicit este un număr īntreg regulat, sau īntreg. Un nume de variabilă, pentru backwards compatibility , ar trebui să fie de 19 caractere sau mai puțin, și trebuie să īnceapă cu o literă. Acesta poate conține simbolurile A-Z, a-z, 0-9, și subliniere ("_"). Este important să rețineți că numele de variabile sunt sensitive - "myvar", "MyVaR", si "MYVAR" sunt trei simboluri diferite.

Integers(numere intregi)
Cel mai simplu tip de date īntr-un Pawn este un "Integer".Integers sunt numere īntregi. Pentru a declara o nouă variabilă īntreaga, folositi "new" operatorul astfel:

new a //Declara variabil gol
new b=5 //Declara variabilul "b" si il seteaza pe 5
new c=5.0 //Aceasta este invalid,din punct de vedere tehnic nu este număr īntreg!
new d="hello" //Acesta nu este un numar deci este invalid
// Puteți declara, de asemenea, mai multe variabile pe o singură linie:
new e,f,g,h
new x=7, y=3
new z = 1_000_000 // Pawn acceptă numerele de genul asta. Deci, valorile mari sunt mai ușor de citit.

Floats

Puteți declara, de asemenea, o variabilă ca un "float", ceea ce īnseamnă că poate stoca numere cu zecimale. Acestea sunt numite numere "virgulă mobilă":

new Float:a //Declara float point gol!
new Float:b=5.3 //Aceasta va declara o nouă variabilă "b" și atributul 5.3 la ea.
new Float:c=5 //Acest lucru este valabil, dar compilatorul vă va oferi un avertisment

Puteți face, de asemenea, următoarele:

// float (n) este o funcție care are o serie n și face a
// floating point number
new Float:var = float(5)
new Float:var2 = 5.0
new Float:var3 = 1.0*5
new var4 = floatround(5.0).
// Nota: floatround (n) este o funcție care are o serie n și rundele la un număr īntreg.
// Acest lucru face īncadrarea īntr-o variabilă īntreg regulat valabil.

Booleans
Ultimul tip de variabilă este "boolean". Este foarte simplu - aceasta este fie "adevărat", sau "fals". Atāt "adevărat" și "fals" sunt structuri de date predefinite.

new bool:IsItOn // Declară o nouă variabilă "IsItOn", care este fals automat
new bool:xyz=true // Declară o nouă variabilă "xyz" setat la true

Arrays
Caracteristica de baza a Pawn "Arrays". O matrice este un tip simplu de date agregate. Aceasta īnseamnă că puteți stoca valori multiple īntr-o singură variabilă! O matrice urmează aceleași reguli ca o variabilă regulat, iar aceasta are aceleași tipuri. Care pur și simplu poate conține mai multe valori. Puteți defini o matrice cu paranteze, și cāt de multe valori se poate ține. De exemplu:

// Aceasta va declara o variabilă numită "Jucători", care deține 32 de numere.
new Players[32]
// Puteți stoca valori īn oricare dintre cele 32 de "sloturi".
// Fantele sunt numerotate de la 0 la n-1, sau īn acest caz, 0-31.
// Fiecare fantă īncepe prin a fi 0.

//Set slot 0 to 5
Players[0] = 5
// Set Slot 1 la tot ce este īn slotul 0, īn acest caz, numărul 5
Players[1] = Players[0]

// Acest lucru este invalid!
// Deși există 32 de sloturi, ele sunt numerotate 0-31.
// Facand acest lucru duce la AMX Native Error 4 - AMX_ERR_BOUNDS
// Sau, pur și simplu nu va compila!
Players[32] = 15

// Acest lucru este, de asemenea, total invalid
Players[-1] = 6
// Deci, acest lucru este valabil:
const b = 3
new GoodArray[b]

Arrays pot fi, de asemenea, declarate cu grupuri de date default,cum ar fi:

//Array of floating points:
new Numbers[4] = {0,1,2,3}
// Array de boolean. Notă acest setari trebuie sa fie la fiecare slot adevarat (true).
new bool:playerHasGun[33] = {true, ...}

Tiger
15-11-2014, 09:46 PM
99% Google Translate + 1% modificare :| ... Ori il faci calumea, ori las-o balta...

NastarzZz
15-11-2014, 10:09 PM
Am luat fiecare propozitie,am trecut-o prin google translate apoi am rearanjato si modificato ca sa inteleaga lumea ceva...
Concluzie:GOOGLE TRANSLATE e panarama rau mi-a luat 5 ore numa pentru ce am facut aici si nu e nici macar jumate,dar tot nu ma las si reusesc eu sa termin.Daca am *****/gresit/nemodificat ceva ,rog reply!