←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Nauka pisania pluginów-problem

  • +
  • -
Proziom1 - zdjęcie 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ć ?

 

Odpowiedz

  • +
  • -
Kobciu - zdjęcie Kobciu 26.12.2014

Errorow zadnych nie ma ?
Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie 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
Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 26.12.2014

dodatkowo
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
Odpowiedz

  • +
  • -
Proziom1 - zdjęcie Proziom1 26.12.2014

Czyli jak należało by to zapisać wszystko ?

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie 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.

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 26.12.2014

To nawet nie bedzie dzialalo Wielkie Jol. Zarejestrowany jest event HLTV a brak jego funkcji w kodzie.

Odpowiedz

  • +
  • -
Proziom1 - zdjęcie Proziom1 26.12.2014

No właśnie my się nie odwołujemy nigdzie do tej funkcji HLTV ?

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 26.12.2014

To nawet nie bedzie dzialalo Wielkie Jol. Zarejestrowany jest event HLTV a brak jego funkcji w kodzie.

Dlatego jako wskazówkę napisałem, że gdzieś musi ustawiać zmienną na false. Wszystkiego nie można za kogoś zrobić, niech ludzie sami poglowkuja

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
Odpowiedz

  • +
  • -
he1st - zdjęcie 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
Odpowiedz

  • +
  • -
grankee - zdjęcie 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.

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie 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?


Wielkie Jol (27.12.2014 10:26):
Wstawiłem plugin tylko z zarejestrowanym eventem na swój serwer, by mieć pewność, że jest tak jak mówię i taki jest wynik:
L 12/27/2014 - 10:23:04: Function "Event_HLTV" was not found
radim (27.12.2014 10:30):
A komendy możesz użyć?
Wielkie Jol (27.12.2014 10:51):
Tak, a niby dlaczego nie?
radim (27.12.2014 11:27):
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ł.
Wielkie Jol (27.12.2014 12:01):
Nieee, wszystko gra tak jak grać powinno, tylko problem jest właśnie z tym, że dostajemy przy każdym ładowaniu się pluginu błąd, że korzysta on z funkcji, która jest niby zarejestrowana, a tak w rzeczywistości nie ma się do czego odnieść w kodzie.
Odpowiedz

  • +
  • -
grankee - zdjęcie 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.

Odpowiedz