Pentru inceput, este important sa stiti cum sa creati o comanda, accesibila doar adminilor/doar playerilor.
Nativele cu care lucram sunt:
register_clcmd //comenzi in consola/chatul playerilor register_concmd //comenzi din orice consola
1.Comenzi pentru playeri:
Pentru comenzi in chat, cel mai des se foloseste register_clcmd.
register_clcmd(const client_cmd[],const function[],flags=-1, const info[]="", FlagManager=-1);
- client_cmd este comanda
- function este funtia apelata
- flags sunt flagurile de acces pentru comanda
- info este descrierea comenzii
- ultimul parametru este neimportant
O sa iau ca exemplu un plugin care printeaza in chat cata viata si armura aveti.
#include < amxmodx > public plugin_init ( ) { register_plugin("Health & Armor in chat", "0.1", "Artick"); register_clcmd("say /info", "ClCmdHealth"); register_clcmd("say_team /info", "ClCmdHealth"); } public ClCmdHealth( id ) { if(!is_user_alive(id)) { return 1; } new iHealth = get_user_health( id ); new iArmor = get_user_armor( id ); client_print(id, print_chat, "Ai [ HP: %i ] [ AP: %i ]", iHealth, iArmor); return 0; }
Explicatiile:
register_clcmd("say /info", "ClCmdHealth"); register_clcmd("say_team /info", "ClCmdHealth");
- inregistram comanda /info in chat
- ClCmdHealth este publicul ce va fi chemat.
- daca nu am pune say/ say_team comanda ar fi pentru consola si nu pentru chat.
- say este chatul normal
- say_team este team chat
if(!is_user_alive(id)) { return 1; }
- if verifica daca conditia dintre ( ) este adevarata
- daca este adevarata trece la instructiunile dintre { }
- ! neaga conditia
- iful nostru se traduce asa: daca userul nu este in viata
- return 1 este acelasu lucru cu return PLUGIN_HANDLED si opreste functia noastra
- daca nu este in viata nu poate avea hp si ap,deci trebuie sa oprim functia
new iHealth = get_user_health( id ); new iArmor = get_user_armor( id );
- facem 2 variabile iHealth si iArmor
- ele vor retine hpul si apul jucatorului
- get_user_health( index ) returneaza valoarea hpului
- get_user_armor( index ) returneaza valoarea apului
client_print(id, print_chat, "Ai [ HP: %i ] [ AP: %i ]", iHealth, iArmor); return 0;
- printam valorile de mai sus.
- return 0 inseamna return PLUGIN_CONTINUE si lasa functia sa continue
Pentru a seta aceasta comanda in consola stergem din register_clcmd say si say_team.
Nu este necesar sa faceti variabilele, puteti pune direct in client_print functiile de get_*
client_print(id, print_chat, "Ai [ HP: %i ] [ AP: %i ]", get_user_health(id), get_user_armor(id));
2.Comenzi pentru admini
native register_concmd(const cmd[],const function[],flags=-1, const info[]="", FlagManager=-1);
- client_cmd este comanda
- function este funtia apelata
- flags sunt flagurile de acces pentru comanda
- info este descrierea comenzii
- ultimul parametru este neimportant
O sa aleg un exemplu care seteaza x hp unui player printr-o comanda in consola. Explicatiile le gasiti in cod,e mai simplu.
#include <amxmodx> #include <amxmisc> //util pentru verificarea accesului la comenzi de admin si gasirea pathurile catre foldere #include <fun> // chestii fun, setare hp/ap/speed/gravity/godmod etc public plugin_init() { //inregistreaza comanda amx_set_health cu publicul CmdHealth //accesul este setat pe ADMIN_KICK //intre "" este descrierea comenzii register_concmd("amx_set_health", "CmdHealth", ADMIN_KICK, "<player> <health>") } public CmdHealth(id, level, cid) { //verifica daca playerul nu are acces la comanda //3 este numarul de argumente: primul este comanda(1)+ al doilea este numele playerului(2)+al treilea este valoarea hpului(3). 1+1+1=3 if (!cmd_access(id, level, cid, 3)) { return 1//oprim functia,nu are acces. eventul ii puteti printa un mesaj cu console_print } new szArg1[24]//primul argument citit adica numele playerului new szArg2[4]//al doilea argument citit,valoarea hpului //read_argv citeste argumentele. citim primul argument in string arrayul szArg1 si pe al doilea in szArg2 //charsmax afla numarul de celule in care se poate stoca informatie //in cazul nostru 24,de la 0 la 24-1. //se poate utiliza si sizeof -1 read_argv(1, szArg1, charsmax(szArg1)) read_argv(2, szArg2, charsmax(szArg2)) //cand citim argumentul el este string,nu numar //in transformam in integer prin functia str_to_num new HpToGive = str_to_num(szArg2) new Target = cmd_target(id, szArg1, 1)//aflam idul playerului(cel caruia vrem sa ii dam p). set_user_health(Target, HpToGive)//set_user_health(index, valoare), va seta hpul playerului. ii puteti printa un mesaj ca sa stie ca a primit hp. return 0 }
Edited by Artick ;, 01 August 2014 - 09:34 AM.