W tym tutorialu zajmiemy się operacjami na graczu poprzez komendy admina w konsoli. Jeżeli pierwszy raz na oczy widzisz kod w języku PAWN, to dalej nie czytaj, bo nie zrozumiesz. Plugin pisany w celach edukacyjnych dla początkujących.
Najpierw opiszę plugin, wręcz książkowy, "Daj HP". Jest on wytłumaczony po angielsku na AMX Mod X Documentation w zakładce Basic Plugin.
Aby admin mógł dać hp jakiemuś graczowi, musimy zdefiniować komendę... Tutaj trzeba sobie przypomnieć budowę rejestracji komendy.
register_clcmd("komenda","nazwa_funkcji",FLAGA,"komentarz")No to zaczynamy!
Najpierw piszemy potrzebne moduły
#include <amxmodx>
#include <amxmisc>
#include <fun>
Następnie rozpoczynamy plugin_init i rejestrujemy komendę.
public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>") //("komenda","funkcja",FLAGA,"komentarz")
}
Teraz zaczniemy główną część kodu. Rozpoczynamy od "give_hp" i sprawdzenia czy komenda została wpisana przez admina. Warunek brzmi: Jeśli gracz wpisujący komendę nie jest adminem, to zatrzymaj plugin:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
}
Pora na zadeklarowanie zmiennych używanych w naszym kodzie, czyli argumentów <nick> i <hp>:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED // Sprawdza czy gracz uzywajacy komende ma admina
new arg1[32]
new arg2[4]
}
Zapytacie dlaczego 32 i 4... Otóż 32, bo 32-1 może mieć znaków nick. A w <hp> użyłem 4, bo 4-1 to liczba 3, czyli hp dodawane maxymalnie może być liczbą 3-cyfrową.
Teraz czas na odczytanie tych danych (<nick> i <hp>):
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
new arg1[32]
new arg2[4]
read_argv(1,arg1,31)
read_argv(2,arg2,3)
}
Teraz zadeklarujemy gracza (player), o indexsie arg1 i zadeklarujemy zmienną "bonus", czyli ile hp dostanie gracz:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
new arg1[32]
new arg2[4]
read_argv(1,arg1,31)
read_argv(2,arg2,3)
new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)
}
Nadszedł czas na wielki finał, czyli ofiarowanie graczowi podaną ilość hp. Najpierw trzeba postawić warunek: Jeśli podany gracz nie istnieje, to wyświetl informację w konsoli, lecz jeśli istnieje to do jego dotychczasowego życia dodaj bonus.
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
new arg1[32]
new arg2[4]
read_argv(1,arg1,31)
read_argv(2,arg2,3)
new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)
if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new hp=get_user_health(player) //definiujemy zmienną życia gracza
set_user_health(player,hp+bonus) // dodajemy bonus do życia gracza
}
return PLUGIN_HANDLED
}
No i proszę bardzo! Gracz o nicku "arg1" dostał "bonus" hp od admina!
1.Działanie: amx_give_hp "nick" "ilosc_hp"
2.Teraz przedstawię cały ten kod:
#include <amxmodx>
#include <amxmisc>
#include <fun>
public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>")
}
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
new arg1[32]
new arg2[4]
read_argv(1,arg1,31)
read_argv(2,arg2,3)
new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)
if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new hp=get_user_health(player)
set_user_health(player,hp+bonus)
}
return PLUGIN_HANDLED
}
Zróbmy teraz z pieniędzmi! Różnica polega na tym, że już nie będziemy korzystać z modułu <fun>, tylko z modułu <cstrike>.
Lecz to nie wszystko. Ile gracz może mieć maxymalnie pieniędzy w cs'ie? Aaaa? Tak! 16000$. Czyli w zmiennej arg2 musimy podać większą wartość. 16000$ to 5 cyfr, czyli 5+1=6. Zamieniemy arg2[4], na arg2[6]. Oto cały kod nowego pluginu:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>")
}
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
new arg1[32]
new arg2[6]
read_argv(1,arg1,31)
read_argv(2,arg2,5)
new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)
if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new money=cs_get_user_money(player)
cs_set_user_money(player,money+bonus)
}
return PLUGIN_HANDLED
}
Mam nadzieję, że komuś się ten poradnik przyda. Za wszelkie błędy,literówki,złe nazewnictwo funkcji,komend etc. BARDZO PRZEPRASZAM
Pozdrawiam wszystkich skrypterów, sbstn.