Pagina de start a forumului ex-tream.MyForum.ro
Inregistrare • Cautare • FAQ • Membri • Grupuri • Autentificare
Cum facem un plugin pentru amxmodx!

 
Raspunde la subiect    Pagina de start a forumului ex-tream.MyForum.ro » Tutoriale Subiectul anterior
Subiectul urmator
Cum facem un plugin pentru amxmodx!
Autor Mesaj
Lapa
Administrator
Administrator
Lapa

Data inscrierii: 20/Mar/2008
Mesaje: 32
Localitate: Bucuresti

Mesaj Cum facem un plugin pentru amxmodx! Raspunde cu citat (quote)
Totul incepe printr-un "include".
In cazul nostru vom face un plugin pentru amxmodx.Deci vom scrie asa:

#include <amxmodx>
#include <amxmisc> <- acest include este pus pentru a nu da eroare la compilare :-)

Mai sunt si alte includuri pentru pluginuri mai complexe.Deocamdata lasam asa.

Urmatorul pas este optional. Este "define",prin care definesti ceva.Deci ca sa definim pluginul,versionuea acestuia si autorul vom scrie asa:

#define PLUGIN "numele pluginului"
#define VERSION "versiunea"
#define AUTHOR "autorul"

Apoi urmeaza faza de inregistrare a pluginului. Aceastea se face in felul urmator:

a).prima varianta

public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
}

b). a doua varianta(in cazul in care nu ati pus #define)

public plugin_init()
{
register_plugin("nume","versiune","autor")
}

Urmatoarea faza este contruirea comenzilor(de exemplu vreti sa faceti o comanda amx_ss si sa faca snapshot playerului).
Vom scrie asa in register plugin_init() mai jos de register_plugin("nume","versiune","autor")

a). register_concmd -> comanda in consola
b). register_clcmd -> comanda folosita de playeri

Deci noi vom scrie asa :

register_concmd("comanda","public",accesul,"comentariu ce va fi afisat in consola")

comanda -> comanda voastra : amx_ss
public -> puneti "ce vreti",este un public(pote fi scris orice,care va fi folosit mai jos)
accessul -> un admin trebuie sa aiba accesul specificat pentru a putea utiliza comanda
comenatariu -> este clar (va aparea in consola cand dati amx_help)

In cazul nostru va arata asa :

register_concmd("amx_ss","snapshot",ADMIN_LEVEL_C,"Face snapshot playerului specificat !")

Urmatorul pas este publicul(cel care lati pus la register_concmd:
In cazul nostru va fi asa(se incepe cu "public"):

public snapshot(id)

In continuare vom scrie in public unele chesti elementare :
De exemplu daca un admin/player incearca sa foloseasca comanda trebuia sa blocheze operatia altfel toata omenirea are acces la comanda
Acest fapt se face mai usor prin : "if(!(get_user_flags(id) & ADMIN_LEVEL_C)), asta in cazul de fata deoarece am specificat un acces necesar
Vom avea:

public snapshot(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_C))
return PLUGIN_HANDLED


return PLUGIN_HANDLED -> blocheaza operatia.
Puteti adauga se arete ceva celui care incearca sa foloseasca comanda si nu are accesul necesar.
Exemplu:

public snapshot(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_C))
{
client_print(id,print_console,"NU ai access !")
return PLUGIN_HANDLED
}

Ati observat ca am adaugat { } intre return si client_print,asta căci daca la "if" sunt 2 sau mai multe argumente trebuie obligatoriu puse {} altfel va da eroare

id -> a). aceasta inseamna ca mesajul va fi afisat numa unui singur player,difera de context,in cazul de fata numai celui care foloseste comanda
b). 0 -> aceasta inseamna ca mesajul va fi afisat tututor playerilor de pe server.exemplu : client_print(0,print_chat,"Cineva a folosit comanda fara acces !")


client_print -> exista 4 moduri de print-uri:

print_chat -> mesajul este afisat in chat
print_console -> mesajul este afisat in consola
print_center -> mesajul este afisat in centru ecranului
print_notify -> mesajul este afisat in consola putin diferit

Urmatorul pas este citirea argumentului de dupa comanda pentru a putea fi identificat playerul asupra caruia se executa o comanda
Aceasta se face asa :

new arg[32] -> in loc de arg puneti ce vreti,dar de preferat mai bine il lasati asa

Argumentul se citeste prin comanda :

read_argv(1,arg,31)

Urmatorul pas este :

new player = cmd_target(id,arg,9) -> deci "player" este comanda asupra caruia se executa(puteti pune jucator,etc...)

In urmatorul pas se verifica daca playerul specificat exista
Aceasta se face asa :

if (!player)
return PLUGIN_HANDLED

-> deci daca playerul specificat nu exista comanda se blocheaza si nu are efect
-> din nou puteti trimite un mesaj


Urmatorul pas :

new name[32]
get_user_name(player,name, 31) -> obseravati din nou "player" -> acesta este pus din nou deoarece este pus cmd_target(id,arg,9) -> new player = cmd_target(id,arg,9)

Urmeaza comanda suportata de player,in cazul nostru snapshot

client_cmd(player,"snapshot") -> din nou player(argumentul citit)

Iar public se incheie cu return PLUGIN_HANDLED(ca in majoritatea publicurilor) si cu }

Deci,in final pluginul complet arata asa:


#include <amxmodx>
#include <amxmisc>

#define PLUGIN "amx_ss"
#define VERSION "1.0"
#define AUTHOR "Anakin"

public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
register_concmd("amx_ss","snapshot",ADMIN_LEVEL_C,"Face snapshot playerului pecificat")
}

public snapshot(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_C))
{
client_print(id,print_chat,"Nu ai acces !")
return PLUGIN_HANDLED
}

new arg[32]
read_argv(1,arg,31)
new player = cmd_target(id,arg,9)

if(!player)
{
client_print(id,print_chat,"Playerul specificat nu exista !")
return PLUGIN_HANDLED
}

new name[32]
get_user_name(player,name, 31)
client_cmd(player,"snapshot")

return PLUGIN_HANDLED
}


Sper ca vam fost de ajuto :-)
22/03/2008 21:29 Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj
^El*C00l~MaGniFiKo!
Jucator
Jucator
^El*C00l~MaGniFiKo!

Data inscrierii: 22/Mar/2008
Mesaje: 17
Localitate: sper vest,spre apus...zZz

Mesaj Raspunde cu citat (quote)
Tare bun tutorial!
GJ e extraordinar de complex !
22/03/2008 23:02 Vezi profilul utilizatorului Trimite mesaj privat
Lapa
Administrator
Administrator
Lapa

Data inscrierii: 20/Mar/2008
Mesaje: 32
Localitate: Bucuresti

Mesaj Raspunde cu citat (quote)
Si asta este cel mai simplu plugin ca daca vezi unu complex iti pica fata :-|
23/03/2008 10:38 Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj
Afiseaza mesajele pentru a le previzualiza:    
Raspunde la subiect    Pagina de start a forumului ex-tream.MyForum.ro » Tutoriale Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la: 
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum


Powered by phpBB © 2001, 2005 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro