| Autor |
Mesaj |
Lapa
Administrator


Data inscrierii: 20/Mar/2008 Mesaje: 32 Localitate: Bucuresti |
|
Cum facem un plugin pentru amxmodx! |
|
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 |
|
 |
^El*C00l~MaGniFiKo!
Jucator


Data inscrierii: 22/Mar/2008 Mesaje: 17 Localitate: sper vest,spre apus...zZz |
|
|
|
Tare bun tutorial!
GJ e extraordinar de complex !
|
|
| 22/03/2008 23:02 |
|
 |
Lapa
Administrator


Data inscrierii: 20/Mar/2008 Mesaje: 32 Localitate: Bucuresti |
|
|
|
Si asta este cel mai simplu plugin ca daca vezi unu complex iti pica fata 
|
|
| 23/03/2008 10:38 |
|
 |
|
|
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
|
|