Totul incepe printr-un "include"
In cazul nostru vom facem un plugin pentru amxmodx.Deci vom scrie asa:
#include <amxmodx>
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 folosi 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 lumea are acces la comanda
Acest lucru 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 deoarece 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 feluri 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>
#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
}