[ROZWIĄZANE] Problem z hudem (co robie źle)?
Kosa :D
19.06.2012
otóż pisałem sobie taki plugin jak poniżej tak dla nauki pisania ogólnie i mam pytanie dlaczego nie działa hud po wpisaniu /stop i czy mógłby ktoś dodać albo powiedziec jak żeby tylko admin mógł wpisać tą komende? bo ja sie dopiero ucze i chce wiedzieć co i jak za pomoc daje+++ z góry Pozdrawiam Kosa
Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /super", "Start")
register_clcmd("say /stop", "Stop")
}
public Start(id)
{
set_user_noclip( id, 1 )
}
public Stop(id)
{
set_user_noclip( id )
set_hudmessage( 80, 0, 255, 0.03, 0.76, 2, 0.02, 1.0, 0.01 )
show_hudmessage( id, "%s Nie ma Juz supermana!")
}
Gość_21977_* 19.06.2012
show_hudmessage( id, "%s Nie ma Juz supermana!")
%s oznacza zmienną typu string, którą należy podać jako kolejny parametr, nie podajesz jej.
Przykład:
new id, godnosc[32]="Clark Kent";
set_hudmessage(80, 0, 255, 0.03, 0.76, 2, 0.02, 1.0, 0.01);
show_hudmessage(id, "%s Nie ma Juz supermana!", godnosc);
Kosa :D
19.06.2012
A to będzie tak, że Każdego nick będzie? że np wpisuje 3 graczy /stop i pisze np M3sQ nie ma juz super mana itp. jak sie nie da w Hud to może da się w client_print ?
Gość_21977_* 19.06.2012
show_hudmessage(id, "%s Nie ma Juz supermana!", godnosc);
Jeśli pierwszym parametrem show_hudmessage jest numer id, to wiadomość na HUD zostanie wysłana tylko do gracza o tym określonym id.
Jeśli za pierwszy parametr dasz 0 (zero), to wiadomość na HUD zostanie wysłana do wszystkich.
Kosa :D
19.06.2012
a co zrobić żeby tylko było dla Admina, żeby tylko admin mogł wpisać /start i stop na Flage Kick
Gość_21977_* 19.06.2012
To jest 3. parametr funkcji register_clcmd.
register_clcmd("say /super", "Start", ADMIN_KICK);
register_clcmd("say /stop", "Stop", ADMIN_KICK);
grzesiu131
19.06.2012
if(!cmd_acces(id, level, cid))
{
return PLUGIN_HANDLED;
}
Dopisz do Start na samej górze
Edited by grzesiu131, 19.06.2012 17:10.
GwynBleidD
19.06.2012
Nie tylko dopisz to, ale i też zmień deklarację funkcji z
na
public Start(id)
na
public Start(id, level, cid)
Kosa :D
19.06.2012
dalej nie działa teraz sma wygląda tak, co robie źle?
//Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /super", "Start", ADMIN_LEVEL_H)
register_clcmd("say /stop", "Stop", ADMIN_LEVEL_H)
}
public Start(id, level, cid)
{
if(!cmd_acces(id, level, cid))
{
return PLUGIN_HANDLED;
}
set_user_noclip( id, 1 )
}
public Stop(id)
{
set_user_noclip( id )
}
Kosa :D
19.06.2012
błędy w kompilatorze
super.sma(22) : error 017: undefined symbol "cmd_acces"
super.sma(28) : warning 209: function "Start" should return a value
super.sma(22) : error 017: undefined symbol "cmd_acces"
super.sma(28) : warning 209: function "Start" should return a value
Gość_21977_* 19.06.2012
tak samo dla funkcji Stop()if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
Na końcu dodaj return PLUGIN_CONTINUE;
Kosa :D
19.06.2012
dalej nie działa może coś źle dodaje niech ktoś pokaże cały Kod jak powinien wyglądać
GwynBleidD
19.06.2012
SpeedKill, tak NIGDY nie sprawdzamy, czy ktoś ma daną flagę... Tym bardziej w przypadku determinowania czy może użyć danej komendy. Po pierwsze, przy client_connect flagi nie są jeszcze odczytywane, po drugie jeśli nawet by były to mogą się zmienić, bo ktoś np użyje amx_reloadadmins, albo inny plugin doda/ujmie komuś flagę, a po trzecie: nie da się wtedy zmienić szybko flag dostępu do danej funkcji poprzez cmdaccess.ini
Do autora, cmd_access ma 2 s na końcu!
Do autora, cmd_access ma 2 s na końcu!
Gość_21977_* 20.06.2012
Odnośnie 2s w cmd_access, to już cytowałem własną wypowiedź w moim poprzednim poście, mając nadzieję, że zwrócę na to uwagę.
Jak widać, czasem trzeba prosto z mostu
Jeśli chodzi zaś o
Wadą tego rozwiązania będzie to, że flagi zostaną pobrane tylko raz, w związku z tym, jakiekolwiek modyfikacje sumy flag w czasie rzeczywistym nie będą uwzględniane. Tego rozwiązania nie polecam.
Aczkolwiek zaletą jest, że flagi nie będą pobierane od gracza każdorazowo. Użycie client_connect() jest, masz rację, niepoprawne, gdyż kolejność, w jakiej się wykonają client_connect() oraz client_authorized() jest nieokreślona.
Jak widać, czasem trzeba prosto z mostu
Jeśli chodzi zaś o
public client_connect(id)to wystarczy zamiast client_connect(), użyć client_authorized().
g_Have[id] = (get_user_flags(id) & read_flags("t")) > 0
Wadą tego rozwiązania będzie to, że flagi zostaną pobrane tylko raz, w związku z tym, jakiekolwiek modyfikacje sumy flag w czasie rzeczywistym nie będą uwzględniane. Tego rozwiązania nie polecam.
Aczkolwiek zaletą jest, że flagi nie będą pobierane od gracza każdorazowo. Użycie client_connect() jest, masz rację, niepoprawne, gdyż kolejność, w jakiej się wykonają client_connect() oraz client_authorized() jest nieokreślona.
naXe 20.06.2012
Kombinujecie
PS: Nie wiem czemu się robią polskie znaki w znaczniku sma wyłącz
Można tez tak i jest krótszy kod:
#include <amxmodx>
#include <fun>
public plugin_init() {
register_plugin("New Plug-In", "1.0", "Administrator")
register_clcmd("say /super", "wlacz")
register_clcmd("say /stop", "wyłącz")
}
public wlacz(id) {
if(!is_user_alive(id) || !(get_user_flags(id) & ADMIN_KICK))
return PLUGIN_HANDLED
set_user_noclip(id, 1)
return PLUGIN_HANDLED
}
public wyłącz(id) {
if(!is_user_alive(id) || !(get_user_flags(id) & ADMIN_KICK))
return PLUGIN_HANDLED
new nick[32]
get_user_name(id, nick, 31)
set_user_noclip(id)
set_hudmessage(80, 0, 255, 0.03, 0.76, 2, 0.02, 1.0, 0.01)
show_hudmessage(0, "%s nie ma juz supermana!", nick)
return PLUGIN_HANDLED
}
PS: Nie wiem czemu się robią polskie znaki w znaczniku sma wyłącz
Można tez tak i jest krótszy kod:
#include <amxmodx>
#include <fun>
new bool: nc[33]
public plugin_init() {
register_plugin("New Plug-In", "1.0", "Administrator")
register_clcmd("say /super", "wlacz")
}
public wlacz(id) {
if(!is_user_alive(id) || !(get_user_flags(id) & ADMIN_KICK))
return PLUGIN_HANDLED
new nick[32]
get_user_name(id, nick, 31)
if(nc[id]) {
nc[id] = false
set_user_noclip(id)
} else {
nc[id] = true
set_user_noclip(id, 1)
}
set_hudmessage(80, 0, 255, 0.03, 0.76, 2, 0.02, 1.0, 0.01)
show_hudmessage(0, "%s %s supermana!", nick, nc[id]? "ma" : "nie ma juz")
return PLUGIN_HANDLED
}
GwynBleidD
20.06.2012
naXe, czy ja wiem czy krótszy? Po odliczeniu pustych, wychodzi dokładnie tyle samo linii Co prawda ma trochę mniej znaków, ale nie to się liczy. Rejestrujemy o jedną komendę mniej, więc jest niejako "prościej", ale i to jest w tym przypadku względne. Twoje rozwiązanie jednak nie uwzględnia 3ciego aspektu z mojego poprzedniego postu, dalej nie będzie można edytować flagi poprzez cmdaccess.ini
benio, dzięki za przyznanie racji Tyle, że Twój post nie wniósł nic, czego mój poprzedni nie zrobił (może prócz ładnych linków do dokumentacji)
Edited by GwynBleidD, 20.06.2012 01:18.
benio, dzięki za przyznanie racji Tyle, że Twój post nie wniósł nic, czego mój poprzedni nie zrobił (może prócz ładnych linków do dokumentacji)
Edited by GwynBleidD, 20.06.2012 01:18.
Kosa :D
20.06.2012
Dziękuje wszystkim za pomoc + beniowi dam, ale jutro bo wykorzystałem limit wszyscy inni dostali od góry do dołu