Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Początek rundy
#1
Posted 12.05.2009 15:16
Jak powiedzieć komputerowi żeby wykonywał funkcję po starcie pierwszej rundy
I drugi kod, po każdej nowej rundzie?
Najlepiej prosiłbym o link do AMXX doc
#2
Posted 13.05.2009 19:18
jest jeszcze różnica pomiędzy nową rundą a początkiem rundy - pierwsze to chwila przed spawnem graczy, drugie to moment upłynięcia mp_freezetimeregister_event()
Jeśli chodzi o nową rundę to
#include <amxmodx> #include <amxmisc> #define PLUGIN "New Plugin" #define VERSION "1.0" #define AUTHOR "" new bool:gFirst=false; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); //każda nowa runda register_event("HLTV", "eventNewRound", "a", "1=0", "2=0"); //inicjacja rozgrywki - przynajmniej po 1 graczu w każdej drużynie register_event("TextMsg", "GameCommencing", "a", "2Game_C"); } public GameCommencing() gFirst=true;//zaraz będzie pierwsza runda! public eventNewRound(){ if(gFirst){//jest pierwsza onFirstRound(); gFirst=false;//następna nie będzie pierwsza } onNewRound();//każda nowa runda } onFirstRound(){ client_print(0, print_chat, "Pierwsza Runda!"); } onNewRound(){ client_print(0, print_chat, "Poczatek Rundy!"); }
jeśli chcesz na początku rundy to zamień
register_event("HLTV", "eventNewRound", "a", "1=0", "2=0");na
register_logevent("eventNewRound", 2, "1=Round_Start")
więcej zdarzeń (eventów) w tym temacie opisał Miczu
#3
Posted 13.05.2009 19:45
Chciałem zrobić że jeśli gracz nie żyje to nie wykonuje się funkcja, dałem tak:
public wies(id) { if(is_user_alive(id)) return PLUGIN_HANDLED server_cmd(id, "sv_airaccelerate 100") set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0) //set_hudmessage(0, 100, 0, 0.8, 0.1, 0, 6.0, 7.0) show_hudmessage(id, "Gotowe") }I wywala mi że powinno wywalić wartość jakąś, jak ją "pozyskać" i zrobić, żeby było HANDLED?
Wiem, że wyświetlanie graczom o zmianie ustawień serwera to nie dobry pomysł, ale chcę tylko zobaczyć jak to działa
#4
Posted 13.05.2009 19:53
Gdy uzywasz return PLUGIN_... gdzies w srodku funkcji to musisz uzyc jakiegos return PLUGIN_... na jego koncu tez (nie moze byc w petli lub w if'ie).
#5
Posted 13.05.2009 19:55
server_cmd(id, "sv_airaccelerate 100")
przeczytaj dokumentacje dt. tej komendy
#6
Posted 13.05.2009 20:02
public wies(id) { if(is_user_alive(id)) return PLUGIN_CONTINUE server_cmd(id, "sv_airaccelerate 100") set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0) //set_hudmessage(0, 100, 0, 0.8, 0.1, 0, 6.0, 7.0) show_hudmessage(id, "Gotowe") return PLUGIN_CONTINUE //tutaj też? }Tak? Gdy gracz żyje wykona się reszta linii?
Darkman, nie chodzi tu o komendy, to był przykład wymyślony na szybko. Id zostało mi bo miałem client_cmd
#7
Posted 13.05.2009 20:05
#8
Posted 13.05.2009 20:09
eh...jaki ma sens sprawdzanie czy gracz jest zywy jak i tak komenda zadziala na caly serwer? pomyśl nad tym
public interp(id) { if(is_user_alive(id)) return PLUGIN_CONTINUE client_cmd(id, "rate 25000") client_cmd(id, "cl_updaterate 101") client_cmd(id, "cl_cmdrate 101") client_cmd(id, "cl_cmdbackup 2") client_cmd(id, "mp_decals 300") client_cmd(id, "cl_rate 20000") client_cmd(id, "ex_interp 0.01") set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0) //set_hudmessage(0, 100, 0, 0.8, 0.1, 0, 6.0, 7.0) show_hudmessage(id, "ex_interp wymuszony na 0.01") return PLUGIN_CONTINUE }
#9
Posted 13.05.2009 20:19
Mowiac inaczej, u ciebie jest tak:
jesli gracz jest zywy-> przerwij funkcje
reszta kodu
Czyli jak gracz jest martwy to wykona wszystko za returnem.
#10
Posted 13.05.2009 20:24
P.S. zauważ że zmieniłem z handled na continue, bo chodzi mi o wykonywanie funkcji, tylko, gdy gracz żyje
#11
Posted 13.05.2009 20:31
if(is_user_alive(id)) return PLUGIN_CONTINUEteraz od razu wiadomo, że return zależy od warunku w if
wartość PLUGIN_HANDLED czy CONTINUE ma znaczenie tylko w funkcjach przypisanych do eventu czy komendy
samo użycie return kończy wywołania funkcji, niezależnie od wartości zwracanej
#12
Posted 13.05.2009 20:35
Aby lepiej widzieć co robi kod trzeba odpowiednio stosować taby
if(is_user_alive(id)) return PLUGIN_CONTINUEteraz od razu wiadomo, że return zależy od warunku w if
wartość PLUGIN_HANDLED czy CONTINUE ma znaczenie tylko w funkcjach przypisanych do eventu czy komendy
samo użycie return kończy wywołania funkcji, niezależnie od wartości zwracanej
Czyli, że nie zrobię tego w ten sposób, czy już się tak zgubiłem, że nic nie czaję?
#13
Posted 13.05.2009 20:41
if(!is_user_alive(id)) return;
#14
Posted 13.05.2009 20:42
if(!is_user_alive(id)) return PLUGIN_CONTINUE;
jeżeli nieżywy
if(is_user_alive(id)) return PLUGIN_CONTINUE;
lub też sam if
#15
Posted 13.05.2009 20:43
if(warunek) return
jest stowowane do przerwania funkcji jesli warunek jest spelniony.
Jest taki magiczny znaczek dla warunkow jak " ! " co oznacza negacje, czyli:
if(!(warunek)) return
oznacza ze funkcja zostanie przerwana jesli warunek nie jest spelniony.
PS. twoj warunek to czy gracz jest zywy...
UP: Damm you all!
#16
Posted 19.05.2009 16:30
jeżeli chcesz aby funkcja wykonała się kiedy gracz jest żywy dajesz
if(!is_user_alive(id)) return PLUGIN_CONTINUE;
jeżeli nieżywy
dałem tak:
if(is_user_alive(id)) return PLUGIN_HANDLED; client_cmd(id, "rate 25000") client_cmd(id, "cl_updaterate 101") client_cmd(id, "cl_cmdrate 101") client_cmd(id, "cl_cmdbackup 2") client_cmd(id, "mp_decals 300") client_cmd(id, "cl_rate 20000") client_cmd(id, "ex_interp 0.01") client_print(id, print_chat, "testy")
Nie działa... Mimo iż gracz nie żyje nadal wykonuje się funkcja
gdy daje
if(!is_user_alive(id)) return PLUGIN_HANDLED;
w ogóle nie działa
#17
Posted 19.05.2009 16:32
public interp() { new Players[32], playerCount; get_players(Players, playerCount); for (new i=0; i<playerCount; i++){ new id = Players[i]; if(is_user_alive(id)) continue; client_cmd(id, "rate 25000") client_cmd(id, "cl_updaterate 101") client_cmd(id, "cl_cmdrate 101") client_cmd(id, "cl_cmdbackup 2") client_cmd(id, "mp_decals 300") client_cmd(id, "cl_rate 20000") client_cmd(id, "ex_interp 0.01") client_print(id, print_chat, "testy") set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0) show_hudmessage(id, "ex_interp wymuszony na 0.01") } }
#18
Posted 19.05.2009 16:51
#19
Posted 19.05.2009 16:52
#20
Posted 19.05.2009 17:23