Nauka pisania pluginów-problem
Proziom1
26.12.2014
Witam chciałem napisać taki plugin że gracz po wpisaniu w sayu /dodaj zostanie mu ustawione 130hp oraz 100 kamizelki.Jednak muszą być spełnione dwa warunki gracz musi być żywy oraz może wykorzystać to tylko raz na rundę.Napisałem coś takiego jednak kod nawet się nie kompiluje:
#include <amxmodx> #include <fun> #define PLUGIN "nauka" #define VERSION "1.0" #define AUTHOR "IntelCom" new uzyl[33] public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /ustaw","dane") register_event("HLTV", "NowaRunda", "a", "1=0", "2=0") } public client_connect(id){ uzyl[id] = false } public dane (id) { if(is_user_alive(id) && uzyl(id)) { set_user_health(id,130) set_user_armor(id, 100) client_print(id,print_chat, "Ustawiono Ci 130hp i 100armorra!") uzyl[id]= true } else client_print(id,print_chat, "Niestety ale jestes niezywy albo wykorzystales juz ta komende w tej rundzie!") }
Jakie więc błędy popełniłem i jak należało by to zapisać ?
Wielkie Jol
26.12.2014
Jeżeli korzystasz ze zmiennej tablicowej, to używasz nawiasów kwadratowych
->
uzyl (id) ----> uzyl[id]
Po drugie, gracz nigdy nie dostanie bonusów, przestudiuj jeszcze raz swój kod
Użytkownik Wielkie Jol edytował ten post 26.12.2014 15:35
xenos
26.12.2014
if(is_user_alive(id) && (uzyl[id]==false))w przypadku gdzy dałeś samo uzyl[id] jest sprawdzane czy ma wartosc 1 == true;
Czyli reasumując wykonało by się to wtedy gdy już wcześniej to było wykonane.
Użytkownik xenos edytował ten post 26.12.2014 15:40
Wielkie Jol
26.12.2014
#include <amxmodx> #include <fun> #define PLUGIN "nauka" #define VERSION "1.0" #define AUTHOR "IntelCom" new uzyl[33]; public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /ustaw","dane") register_event("HLTV", "NowaRunda", "a", "1=0", "2=0") } public client_connect(id){ uzyl[id] = false } public dane (id){ if(is_user_alive(id) && !uzyl[id]){ set_user_health(id,130) set_user_armor(id, 100) client_print(id,print_chat, "Ustawiono Ci 130hp i 100armorra!") uzyl[id]= true } else client_print(id,print_chat, "Niestety ale jestes niezywy albo wykorzystales juz ta komende w tej rundzie!") }
+ oczywiście musisz gdzieś ustawiać uzyl[id] na false podczas gry.
grankee
26.12.2014
To nawet nie bedzie dzialalo Wielkie Jol. Zarejestrowany jest event HLTV a brak jego funkcji w kodzie.
Wielkie Jol
26.12.2014
Dlatego jako wskazówkę napisałem, że gdzieś musi ustawiać zmienną na false. Wszystkiego nie można za kogoś zrobić, niech ludzie sami poglowkujaTo nawet nie bedzie dzialalo Wielkie Jol. Zarejestrowany jest event HLTV a brak jego funkcji w kodzie.
Proziok właśnie musisz się odwołać, inaczej nie dość, że będziesz miał errory bo nigdzie nie korzystasz z funkcji hltv, to jeszcze gracz będzie mógł użyć komendy raz - po połączeniu się z serwerem ( bo tylko wtedy zmienna będzie ustawiona na false )
Użytkownik Wielkie Jol edytował ten post 26.12.2014 16:15
he1st
26.12.2014
No właśnie my się nie odwołujemy nigdzie do tej funkcji HLTV ?
Nigdzie się nie odwołujemy, ale jednak w kodzie dałeś event HLTV
register_event("HLTV", "NowaRunda", "a", "1=0", "2=0")
Ogólnie tak jak Wielkie Jol napisał. Ten Kod nie zadziała poprawnie
Użytkownik MS.Zer0. edytował ten post 26.12.2014 16:45
grankee
27.12.2014
że będziesz miał errory bo nigdzie nie korzystasz z funkcji hltv, to jeszcze gracz będzie mógł użyć komendy raz - po połączeniu się z serwerem ( bo tylko wtedy zmienna będzie ustawiona na false )
A ja twierdzę, że żadnych errorów nie zobaczysz oraz że przy odrobinie niefarta nawet raz nie użyjesz.
Wielkie Jol
27.12.2014
że będziesz miał errory bo nigdzie nie korzystasz z funkcji hltv, to jeszcze gracz będzie mógł użyć komendy raz - po połączeniu się z serwerem ( bo tylko wtedy zmienna będzie ustawiona na false )
A ja twierdzę, że żadnych errorów nie zobaczysz oraz że przy odrobinie niefarta nawet raz nie użyjesz.
Errory będą, bo zarejestrowałeś event, który co rundę odnosi się do funkcji, której nigdzie nie ma.
A dlaczego twierdzisz, że przy odrobinie niefarta nawet raz nie użyje tego bonusu?
grankee
27.12.2014
Tak pytam bo wydawało mi się że jak rejestruje się funkcje która nie jest 'użyta' to kolidowało to z całym pluginem w wyniku czego cały plugin nie działał.
Dokładnie to miałem na myśli, pewnie by tak było, gdyby najpierw był zarejestrowany event(do którego nie ma funkcji) a potem komenda.
L 12/27/2014 - 10:23:04: Function "Event_HLTV" was not found
Faktycznie jest taki zapis w error logach, miałem na myśli, że ani podczas eventu ani już tym bardziej kompilacji nie ma żadnych errorów, ale nie napisałem dość szczegółowo.