scripting amxmodx

Started by AdvanceD, March 11, 2013, 08:18:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

March 11, 2013, 08:18:41 PM Last Edit: April 10, 2013, 11:33:18 PM by -=[Vyorel]=-
Salut!Mi-a venit ideea de a face un tutorial pentru a ii invata pe cei dornici sa "scripteze".Probabil nu sunt in masura sa fac acest tutorial pentru ca pe acest forum exista scripteri foarte buni dar totusi o sa incerc.

1. INCLUDEREA FISIERELOR
Includerea fisierelor se realizeaza prin 2 cai:
Cod:
[pawn]#include <fisierul>[/pawn]

Cod:
[pawn]#include "fisierul"[/pawn]

Folosind prima cale , fisierul este cautat in directoarele standard(In cazul AMXX directorul standard este include).
Folosind a doua cale , fisierul este cautat in directorul curent , apoi in cele standard(In cazul AMXX directorul curent este scripting).Aceasta forma
Atunci cand facem un plugin AMXX , va trebui sa includem mereu amxmodx:
Cod:
[pawn]#include <amxmodx>[/pawn]

Daca pluginul contine si comenzi care pot fi folosite de admini , atunci va trebui sa includem si amxmisc:
Cod:
[pawn]#include <amxmisc>[/pawn]


2. CONSTANTE SIMBOLICE
Definirea constantelor simbolice se face astfel:
Cod:
[pawn]#define NUMELE_CONSTANTEI VALOAREA_CONSTANTEI[/pawn]

Acest lucru face ca in toata sursa , NUMELE_CONSTANTEI sa fie inlocuit cu VALOAREA_CONSTANTEI(exceptie comentariile).
Scopul acestora este de a usura editarea surselor.
Exemplu:
Cod:
[pawn]#define COMUNITATE eXtreamCS[/pawn]


3. PRINTAREA MESAJELOR
Exista patru tipuri de mesaje: mesaje hud , mesaje in chat , mesaje in consola si mesaje centrate.

3.1. MESAJE HUD
Printarea mesajelor hud se face prin intermediul:
Cod:
[pawn]set_hudmessage(...)
shoe_hudmessage[/pawn]

Vom vorbi acum despre set_hudmessage.Este alcatuit din:
Cod:
[pawn]set_hudmessage ( red, green, blue, Float:x, Float:y, effects, Float:fxtime, Float:holdtime, Float:fadeintime, Float:fadeouttime, channel )[/pawn]

red , green , blue reprezinta culoarea mesajului.
Float:x , Float:y reprezinta pozitia mesajului.
effects reprezinta efectele mesajului:
Cod:
0 = fade in/fade out
1 = flickery credits
2 = write out (training room)

Float:fxtime , Float:fadeintime , Float:fadeouttime reprezinta timpii la care efectele se schimba
Float:holdtime reprezinta cat timp apare mesajul pe ecran.
channel reprezinta canalul pe care este trimis mesajul.Exista 4 canale per jucator.
Uitati aici un exemplu:
Cod:
[pawn]set_hudmessage ( 200, 100, 0, -1.0, 0.35, 0, 6.0, 12.0, 0.1, 0.2, 4 )[/pawn]

Dupa ce am stabilit setarile mesajului , este timpul sa il printam cu show_hudmessage:
Cod:
[pawn]show_hudmessage ( index, message[], ... )[/pawn]

index reprezinta jucatorul cui i se va afisa mesajul [ 0 - tuturor ] [ id - doar acelui jucator care a actionat comanda]
message[] reprezinta mesajul ce va fi afisat
Exemplu:
Cod:
[pawn]set_hudmessage(200, 255, 0, 0.04, 0.48, 0, 6.0, 12.0)
show_hudmessage(id, "www.Xerom-Zone.com)[/pawn]


4. FOLOSIREA CONSTANTELOR SIMBOLICE
Pentru ca NUMELE_CONSTANTEI sa ia valoarea VALOAREA_CONSTANTEI trebuie sa efectuam niste modificari in sursa.
Am definit mai sus o constanta numita COMUNITATE cu valoarea Xerom Zone.
Mai jos avem o linie de cod ce printeaza un mesaj in chat:
Cod:
[pawn]client_print(0, print_chat, "Tutorial facut pentru comunitatea Xerom Zone!")[/pawn]

Acum vom face o modificare pentru a citi valoarea constantei:
Cod:
[pawn]client_print(0, print_chat, "Tutorial facut pentru comunitatea %s!", COMUNITATE)[/pawn]


5. COMPILAREA CU CONDITII
Compilarea cu conditii permite includerea/excluderea unor portiuni din sursa in functie de conditiile puse.
Aceasta se face astfel:
Cod:
[pawn]#if CONDITIE
SECTIUNE
#endif[/pawn]

Pentru ca aceasta parte de cod sa fie valida , conditia trebuie definita.Uitati mai jos un exemplu:
Cod:
[pawn]#define ARATA_COMUNITATEA 1
#define COMUNITATE Xerom Zone[/pawn]

[pawn]#if ARATA_COMUNITATEA
client_print(0, print_chat, "Tutorial facut pentru comunitatea %s!", COMUNITATE)
#else
client_print(0, print_chat, "Tutorial facut de KronoS")
#endif[/pawn]


6. COMENTARII IN SURSA
Comentariile din sursa sunt foarte folositoare deoarece putem explica ce am facut prin niste linii de cod.Exista doua moduri prin care puteam sa facem comentarii:
Cod:
[pawn]//Tutorial facut pentru comunitatea Xerom Zone[/pawn]

Cod:
[pawn]/*Tutorial facut pentru comunitatea Xerom Zone*/[/pawn]

Daca doriti sa folositi prima forma , iar comentariul se intinde pe mai multe randuri , trebuie sa adaugati // in fata fiecarui rand de comentariu.
A doua forma este recomandata deoarece la inceputul comentariului se pune /* iar la sfarsit se pune */
Avantajul este ca nu mai trebuie sa puneti simbolurile in fata fiecarui rand!
ATENTIE: Comentariile din sursa nu sunt compilate

7. INREGISTRAREA PLUGINULUI
Inregistrarea pluginului se foloseste pentru a printa informatii despre plugin(Numele pluginului , Versiune , Autor).
Se face astfel:
Cod:
[pawn]register_plugin("Numele pluginului", "Versiunea", "Autorul")[/pawn]

Acest cod poate fi folosit in:
Cod:
[pawn]public plugin_init[/pawn]

Cod:
[pawn]public plugin_precache[/pawn]

De asemenea pot fi folosite si constantele simbolice:
Cod:
[pawn]#define PLUGIN "Plugin Xerom Zone"
#define VERSIUNE "1.0"
#define AUTOR "Xerom"

public plugin_init()
{
register_plugin( PLUGIN, VERSIUNE, AUTOR)
}
[/pawn]

8. INREGISTRAREA COMENZILOR
Inregistrarea comenzilor se foloseste pentru a executa anumite linii de cod pe jucatorii care folosesc acele comenzi.
De exemplu:
Cod:
[pawn]public plugin_init()
{
register_clcmd("say comanda", "executa_comanda")
register_clcmd("say_team comanda", "executa_comanda")
register_clcmd("comanda", "executa_comanda")
}[/pawn]

[pawn]public executa_comanda(id)
{
client_print(id, print_chat, "Tutorial facut de Xerom")
}[/pawn]

Cand un jucator tasteaza in chat , team_chat sau consola comanda , in chat va aparea mesajul:
Cod:
[pawn]Tutorial facut de Xerom[/pawn]


9. INREGISTRAREA COMENZILOR DE ADMIN
Inregistrarea comenzilor de admin se foloseste pentru a executa anumite linii de cod pe jucatorii pe care au fost folosite acele comenzi.Vom inregistra comanda amx_kill care omoara jucatorul pe care este folosita comanda.
In public plugin_init adaugam:
Cod:
[pawn]register_concmd("amx_kill","kill_player",ADMIN_KICK,"-<nume> Omori jucatorul respectiv")[/pawn]

Acum facem un nou public numit kill_player:
Cod:
[pawn]public kill_player(id,level,cid)
{
}[/pawn]

In publicul kill_player , verificam daca jucatorul este admin.Daca nu este , comanda nu este executata si apare un mesaj:
Cod:
[pawn]if(!cmd_access(id,level,cid,2))
{
client_print(id, console_print, "Nu ai acces la aceasta comanda")
return PLUGIN_HANDLED
}[/pawn]

Dupa aceste linii , adaugam:
Cod:
[pawn]new arg[32]
read_argv(1,arg,31)

new player = cmd_target(id,arg,7)
if(!is_user_alive(id)) /*Verifica daca jucatorul este in viata*/
return PLUGIN_HANDLED
client_cmd(player,"kill") /*Omoara jucatorul*/
return PLUGIN_HANDLED[/pawn]

In final va arata asa:
Cod:
[pawn]#include <amxmodx>
#include <amxmisc>

public_plugin_init()
{
register_concmd("amx_kill","kill_player",ADMIN_KICK,"-<nume> Omori jucatorul respectiv")
}

public kill_player(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
client_print(id, console_print, "Nu ai acces la aceasta comanda")
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)

new player = cmd_target(id,arg,7)
if(!is_user_alive(id)) /*Verifica daca jucatorul este in viata*/
return PLUGIN_HANDLED
client_cmd(player,"kill") /*Omoara jucatorul*/
return PLUGIN_HANDLED[/pawn]
  •  

Tu poti sa scrii normal sa inteleaga lumea , ce sunt cu culorile aste ?

Si ai auzit de Pawno BBcode ?

  •  

Quote from: The Matrix on April 10, 2013, 11:06:28 PM
Tu poti sa scrii normal sa inteleaga lumea , ce sunt cu culorile aste ?

Si ai auzit de Pawno BBcode ?
Poti sa dai si singur edit in caz de ceva.

Am modificat eu, cu ocazia asta am vazut si bugul de la Pawno BBCode. O sa-l repar cat de curand!
  •  

QuotePoti sa dai si singur edit in caz de ceva.

Am dat edit si am schimbat culoarea , sa se poata citi normal. Dar despre bbcode nu o sa fac eu totul pentru el

  •  

Frumos tutorial
E mai bine sa taci si sa fii luat drept prost, decat sa vorbesti si sa inlaturi orice dubii
  •