[TUT] Ansamblu AMX MOD X.

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

23 Jan 2016, 11:22

Buna ziua, in acest tutorial as vrea sa va invat cum sa intelegeti mai usor limbajul pawn, am sa va dau cateva explicatii + exemple.

Important: Acesta este un tutorial mai vechi facut de mine pe alta comunitate, s-ar putea s-am cateva greseli de Gramatica sau de cod,v-as ruga sa ma intelege-ti, am sa-i fac update cand am sa am timp, acum doar l-am postat ca sa fie, o sa-i fac update si-o sa-i mai adaug o gramada de chestii, multumesc pentru intelegere.

Ce n-ati inteles sau daca vreti sa mai adaug ceva, va rog sa lasati reply.


Ce o sa contina tutorialul:
  • Comentariii ( comentariile sunt pentru a ajuta scripterii sa inteleaga ce face acea parte a codului )
  • Variabile (variabilele sunt pentru a stocka informatii )
  • Functii ( functii fac ce le faci tu sa faca )
  • Native ( creiezi functii care foloseste pentru pluginul tau, ex: set_user_xp )
  • Structuri ( cum sati faci propriul tau plugin )
  • Trucuri pentru a incepe programarea ( niste informatii mici care te vor ajuta sa incep programarea in pawn )
  • linkul-uri ( linkuri cu alte tutoriale folositoare )
Comentarii
Ce este un comentariu ?
Un comentariu este o linie care nu este citita de compilerul amxmodx
Este creata pentru ai da o informatie anume celu care deschide sursa
exemple:

Code: Select all

 // Aceasta linie e un comment 
adaugam "//" aceste 2 bare in fatza pentru a crea un comment

Un comentariu bun:

Code: Select all

// Acesta e un comment
Un comentariu rau:

Code: Select all

 / Acesta nu e un comment 
Trebuie sa puneti "//" la inceputul linie.

A 2a metoda de a crea comentarii, vomo folosi "/*

Aceasta metoda deschide un com
/*
Iar aceasta o inchide:
*/

Exemplu:

Code: Select all

/*

Tot ce citesti inauntrul acestui
code, este un comentariu
Nu va fi citit de compiler
Este pentru a da o informatie, celui care a deschis sursa

*/ 
Variabile
Deci tehnic, gandestete ca o variabila este o cutie goala unde tu poti stoca orice informatie vrei.
Image

Pentru a crea o variabila vom folosi urmatorul cod:

Code: Select all

 new NumeleVariabilei;
Unde "NumeleVariabilei" este .... ati ghicit ,numele variabilei !

Daca creiem o variabila cu valuarea 3, exemplu:

Code: Select all

new Flanco = 3;
Atunci "cutia" (variabila) va contine valuarea(numarul) "3":
Image

Nota: cand faci o variabila noua , daca nu o definesti, valuarea ei default este "0".
poti sai schimbi valuarea default( adica 0 ) in urmatoarele moduri:


1) La creiere:

Code: Select all

 new Andrei = 5;
2) Dupa creiere:

Code: Select all

 new Andrei;
Andrei = 5;
3) Si asa:

Code: Select all

 new Andrei; Andrei = 5;
facem 3 variabile si le inmultim:

Code: Select all

new Andrei;
new Alex = 3;
new Alin = 1;
Andrei = Alex + Alin;
 
Acum Andrei este egal cu 4.

Float
Alte tipuri de variabile (care folosesc numere) ar mai putea fi "float", aceasta variabila este exact ca si variabila normala integer ( adica cea normala cu new numevar.. etc)
Exista doar 2 diferente

- Float-urile sunt ca si variabilele normale de tip integer, doar ca sa sunt numere cu punct intre ele( ca cele de la matematica 2.5 )
Exemple:
100.3
999.0
2.45
56.942
Cum le creiem:

Code: Select all

new float:NumeVariabila = 5.0; 
Unde "NumeVariabile" este .... ati ghicit, numele variabilei !!!

Deci, e ca si atunci cand facem o variabila normala doar ca punem "float:" in fata ->

Code: Select all

new float:Andrei = 99.99;"
Nota: valuarea default este 0.0
Ex. creare variabila cu valuare default:

Code: Select all

new float:Andrei;
Asta are valuarea default 0.0


Boolean
boolean este tot un tip de variabila doar ca mai special, acest tip de variabila nu este definit cu numere, este definit cu 2 valuori, adica "True" ( adevarat ) sau "False" ( fals ).

Cum o creiem ?

Code: Select all

 new bool:Variabile; 
Cum o definim ?

Code: Select all

 Variabile = true
Nota: Cand facem o variabila daca nu am definito inca va fi automat setata pe "false"
false / ture:

Code: Select all

new bool:Andrei;
new bool:Alin;

Andrei = false;
Andrei = true;
 

String
Sa ne amintim despre variabile, string este tot un tip de variabila doar ca nu puate retine decat cuvinte.
exemplu :

Code: Select all

 new szAndrei = "Numele meu e Andrei";
Sau :

Code: Select all

new Andre[ 3 ];
Andrei [ 0 ] = "a";
Andrei [ 1 ] = "b";
Andrei [ 2 ] = "c";
Ati inteles voi.

Functii
gandeste ca ai in casa niste masinarii, trebuie sa le activezi ca sa faca ceva.
Image

Pentru a activa o functie:

Code: Select all

NumeleFunctiei()
;

Unele functii nu sunt goale au parametrii:

Code: Select all

NumeleFunctiei ( id )
id = id-ul userului.

Unele functii returneaza o valuare
Unele nu

public NumeFunctie( id ) - face legatura intre comenzi, cvar-uri, eventuri, etc
stock NumeFunctie ( id ) - NumeFunctie( id ) va face ceva( ce iai zi tu sa faca )
NumeFunctie( id ) - Este o functie privata, care poate fi folosita inauntrul publicurilor.
native NumeFunctie ( id ) - exact ca stock doar ca face legatura intre un plugin exterior
forward NumeFunctie ( id ) - un fel de event-fals care face legatura cu pluginuri exterioare

Native
Nativele sunt masinarii care nu sunt in casa ta, gandeste ca sunt din casa vecinului si le folosesti ( in timp ce functiile sunt in casa ta ).
Nativele pot avea mai multi parametrii

NumeleNativei( parametru1, parametru2, parametru3, etc... )
parametru 1 de exemplu poate fi ID-ul.
  • Pot avea parametrii
  • Pot returna valuori
  • Nu pot sa le faci si sa le folosesti in acelasi cod ( trebuie creat din alt plugin si folosit in alt plugin ).
Forwad-uri
Deci, tehnic forwad-ul e un EVENT, creat din pluginuri exterioare.
sa va dau ca exemplu plugin_init() , este un event creat care este chemat atunci cand serverul se deschide.

O sa va dau un tutorial de creare a forwad-ului in Linkuri.

Structuri
Toate pluginurile au o structura pentru a fi creat, nu poti pune pur si simplu coduri la intamplare si sa speri sati iasa ceva, trebuie sa iei totul logic.
De exemplu intro casa nu poti pune usor sub pat si sa te astepti ca lumea sa iasa/intre de acolo.

Orindea creierii structurilor:
  • Facem comentariile
  • Includem librarile necesare
  • Definim informatii, etc
  • Facem variabilele globale(daca avem nevoie de ele)
  • Inregistram informatiile( plugin_init)
  • Functii si Eventuri
  • Aranjarea codurilor
  • Optimizarea daca gasim
  • Compilare
  • Testare
  • Optimizare iar
  • Etc.
a) Prima data cand facem un plugin vom face comentarii
Inauntru vom pune o descriere a pluginui, cvar,credite, etc
momentan nu vreau sa fac un plugin doar va dau niste exemple

Code: Select all

/*
    Aceste este pluginul meu

        ChangeLog:

        Credite:

        Cvar-uri:

        Comenzi:

        Instalare
*/
Ati inteles voi ...

b) Librarile noastre pot contine o larga gama de functii, eventuri si multe altele , e ca o bilbioteca de functii, exemple 2 librarii la intamplare:

Code: Select all

#include <amxmodx> 
#include <amxmisc>            


c) definim informatiile, adica vom folosi define

Code: Select all

#define NUME_PROIECT "Numele proiectului"
#define VERSIUNE_PROIECT "1.0"
#define AUTHOR_PROIECT "Swapped`s"
Acestea sunt doar defineurile de baza noi putem sa le folosim la o gama larga de lucruri

c) Cateodata in pluginuri ne trebuie sa facem variabile in afara functiilor, asta inseamna o variabila globala, o variabila in afara functiei.
variabilele globale sunt speciale pentru ca poti sa adaugi informatii noi dintro functie si sa le afisezi in alta.

d) In plugin_init( eventul care este chemat cand deschizi serverul ) este cel mai bun loc pentru a inregistra cvar-uri, comenzi, eventuri si multe altele

Code: Select all

public plugin_init( )
{
    register_plugin( NUME_PROIECT, VERSIUNE_PROIECT, AUTHOR_PROIECT );

    // Facem la intaimplare o comanda in chat ( /test )    
    // NumePublic va fi chemat de fiecare data cand jucatorul tasteaza /test.
    register_clcmd( "say /test", "NumePublic" );
}
e) Facem functia NumePublic

Code: Select all

public NumePublic( id )
{
    // afisam un mesaj la intaimplare:
    client_print(id,print_chat,"Salut");
}
f) Aranjam codul:

Code: Select all

public NumePublic( id )
{
    // cod urat:
    client_print(id,print_chat,"Salut");
}
  • =>

Code: Select all

public NumePublic( id )
{
    // Tocmai am lasat spatiu intre parametrii .
    client_print( id, print_chat, "Salut" );
}
Pentru ceva asa simplu nu am gasit nicio optimizare dar la pluginuri mai mari poti gasi o multime de optimizari.


COMPILARE aici: www.amxmodx.org/webcompiler.cgi
il testati si optimizati sa vedeti daca nu mere, etc.

Trucuri
Voi vorbi putin despre eficienta si altele, dar puteti gasi mult mai multe lucruri explicate in alte tutoriale asta am scris asa sa vada incepatorii

Code: Select all

if( !is_user_alive( id ) )
Decat sa scanezi de fiecare data daca jucatorul nu este in viata, ai putea face asta cu o variabila:

Code: Select all

new alive = is_user_alive( id )

if( !alive )
{
    // do something
}
Ca sa "curatam" un string:

Code: Select all

string_name[0] = '^0'
Niste "native" pentru a printa message si pentru a formata:
  • format
  • formatex
  • log_amx
  • client_print
  • %d si %i - Pentru a afisa un integer ( %d - Decimal, %i - Integer )
    %f - Pentru a afisa un Float ( %f - Float )
    %s - Pentru a afisa un String ( %s - String )
Exemplu:

Code: Select all

new numar = 5;
client_print( id, print_chat, " Numarul meu favorit este %i ", numar );
Ati inteles voi ..

Link-uri:


[CREDIT's: Emp, Hawk, Connor, Hamlet, mie ca l-am tradus si-am mai adaugat :P si altii care se simt ].
Last edited by Fuffy on 23 Jan 2016, 12:18, edited 9 times in total.
AMXX Blue e acum doar pe github.
RoyalServer
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

23 Jan 2016, 11:33

[eBook] Pawn Language Guide.

Descarcare

Credit's: ConnorMcLeod.

Contine format .pdf, .mobi si .epub

Este o carte electronica despre limbajul Pawn.

Este atat recomandata pentru incepatori cat si pentru avansati, este in limbja engleza si-am postat-o aici pentru c-am crezut ca va fi utila.
AMXX Blue e acum doar pe github.
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

23 Jan 2016, 12:04

Intelegere parametrilor dintr-o nativa:

Ati observat ca anumite functii au niste parametrii in paranteze, hai sa luam ca exemplu:

Code: Select all

cs_set_user_model(index, const model[])
Acesta functie "cs_set_user_model" contine 2 parametrii, parametrii se alfa in PARANTEZE, si puteti sa-i numarati ca se despart prin virgula:

cs_set_user_model(index, const model[])

Mereu cand vedeti parametrul index inseamna ca acest parametru e INDEX-ul jucatorului, id-ul jucatorului sau cum zic eu: "Cui sa-i execute acea comanda"

Al doilea parametru e model si observati acele paranteze patrate dupa cuvantul model?:
model[] ?

Daca acel parametru contine paranteze patrate inseamna ca e un STRING, adica vom folosi ghilimele:

Code: Select all

public fwdRespawn( id )
{
      cs_set_user_model( id, "models/frostry.mdl");
}
Sa luam alta de exemplu:

Code: Select all

cs_set_user_lastactivity(index, Float:value);
Index - Id-ul jucatorului
Float:value - Valuarea, daca nu contineaza prefixul "Float" asta insemna ca al doilea parametru era un Integer(numar fara virgula), cum contine, ne indica faptul ca al doilea parametru trebuie sa fie neaparat un float.

Mai avem si native scrise gen:

Code: Select all

native Float:cs_get_c4_explode_time(index);
vedeti Float in fata dar doar index in paranteze, ce-nseamna asta?

Ca aceasta native returneaza index-ului -> timpul pana la explozie, DAR IN FLOAT, exemplu folosire:

Code: Select all

client_print( id, print_chat, " C4 time: %f", cs_get_c4_explode_time(id ) );

Alte exemple

Code: Select all

 stock abcd( id, a = 5, float:b = 3.0 , c[] )
ID - index-ul jucatorului
a = 5 - Integer, dar am pus si " = 5 " deci are valuarea default "5"
float:b = 3.0 - Float, dar am pus si " = 3.0" deci are valuarea default "3.0"
c[] - String.

Asta ca sa intelegeti mai bine parametrii din interiorul unor functii.
AMXX Blue e acum doar pe github.
User avatar
Nubo
Fost moderator
Fost moderator
Posts: 2734
Joined: 11 Jul 2012, 18:45
Detinator Steam: Da
CS Status: [əˈnɒn.ɪ.məs]
Reputatie: Fost scripter eXtreamCS
Fost eXtream Mod
Has thanked: 8 times
Been thanked: 27 times

23 Jan 2016, 18:07

Mda.... "valuarea", "creiere" si altele.
Daca era scris asa o singura data intelegeam ca e simpla greseala, dar e scris gresit de fiecare data.
La ce am ajuns, o persoana care nu stie gramatica limbii materne ne invata programare/scripting....
Poti sa te superi, nu-mi pasa, dar asta e adevarul despre tine.

Aporpo, tutorialul lui Emp poate oricine sa-l traduca: https://forums.alliedmods.net/showthread.php?t=94381
Cand nu merge acest forum sunt online aici:
  • * Skype: nubo_cs
    * Y!M ID: nubo_cs
User avatar
Fuffy
Membru, skill +1
Membru, skill +1
Posts: 299
Joined: 07 Jan 2016, 08:34
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Contact:

24 Jan 2016, 07:19

Nubo wrote:Mda.... "valuarea", "creiere" si altele.
Daca era scris asa o singura data intelegeam ca e simpla greseala, dar e scris gresit de fiecare data.
La ce am ajuns, o persoana care nu stie gramatica limbii materne ne invata programare/scripting....
Poti sa te superi, nu-mi pasa, dar asta e adevarul despre tine.

Aporpo, tutorialul lui Emp poate oricine sa-l traduca: https://forums.alliedmods.net/showthread.php?t=94381
No problem, n-o sa argumentez de ce-am scris asa.
AMXX Blue e acum doar pe github.
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 18 guests