Witam.
Mam taki kawałek kodu:
set_speak(id, SPEAK_NORMAL) entity_get_vector(i, EV_VEC_origin, my_origin)
Nie chcę używać engine (funa tez nie).
Czy można to zrobić jakoś inaczej? Np przez fakemete?
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.
|
Napisano 19.05.2014 18:56
Witam.
Mam taki kawałek kodu:
set_speak(id, SPEAK_NORMAL) entity_get_vector(i, EV_VEC_origin, my_origin)
Nie chcę używać engine (funa tez nie).
Czy można to zrobić jakoś inaczej? Np przez fakemete?
Napisano 19.05.2014 19:14
To:
set_speak(id, SPEAK_NORMAL)
Można zastąpić tym:
public plugin_init() { register_forward(FM_Voice_SetClientListening, "Voice") } public Voice(odbiorca, nadawca, listen) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, /* tu dajesz czy ma slyszec*/ true); return FMRES_SUPERCEDE //odbiorca może == nadawca }
A to:
entity_get_vector(i, EV_VEC_origin, my_origin)
Można tym:
public GetEntOrign(id,orign[]) { new Float:orignf pev(id,pev_orign,orignf) FVecIVec(orignf, orign) }
Napisano 19.05.2014 19:21
Co do entity_get_vector to dzięki. Przetestuje
A co do set_speak to nie rozumiem.
Chcę ustawić SPEAK_NORMAL i SPEAK_LISTENALL
Jak to wykonać bo nie bardzo czaje ten sposób.
Napisano 19.05.2014 19:34
A co do set_speak to nie rozumiem.
Chcę ustawić SPEAK_NORMAL i SPEAK_LISTENALL
Jak to wykonać bo nie bardzo czaje ten sposób.
To co ci pokazałem daje duże większe możliwości bo możesz zrobić by gracz a słyszał gracza b ale gracz c juz go może nie słyszeć
Jak dać graczu SPEAK_NORMAL i SPEAK_LISTENALL ?? To zależy od cvaru serwera (chyba nwm nie pamiętam nie używam engine nigdy prawie) ale załóżmy iż tylko żywi słyszą tylko żywych a martwi słyszą wszystkich i chcemy to dać graczu o id 17.
public plugin_init() { register_forward(FM_Voice_SetClientListening, "Voice") } public Voice(odbiorca, nadawca, listen) { if(odbiorca == nadawca) return FMRES_IGNORED; if(nadawca == 17) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } return FMRES_IGNORED; }
To jest: SPEAK_LISTENALL
A to jest SPEAK_NORMAL :
public plugin_init() { register_forward(FM_Voice_SetClientListening, "Voice") } public Voice(odbiorca, nadawca, listen) { if(odbiorca == nadawca) return FMRES_IGNORED; if(nadawca == 17) { if(!is_user_alive(nadawca)) { if(!is_user_alive(odbiorca)) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } } else { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } } return FMRES_IGNORED;
Napisano 19.05.2014 19:36
A jak to zrobić dla wszystkich?
Pętla?
I dalej nie rozumiem. Tu mamy tylko true/false
A w engine są 4 tryby.
Napisano 19.05.2014 20:03
A jak to zrobić dla wszystkich?
Pętla?
To samo w sobie jest pewnym rodzajem pętli.
I dalej nie rozumiem. Tu mamy tylko true/false
A w engine są 4 tryby.
Dobra to zrób za pomocą engine aby gracz o id 1 słyszał gracza o id 2 ale gracz o id 3 go nie słyszał gracza o id 2 (wszyscy żywi i w tym samym team'ie)
Wytłumaczę ci coś:
Dajmy na to że gracz z id == 7 mowi coś
register_forward(FM_Voice_SetClientListening, "Voice") // Rejestruje kiedy gracz mówi coś
public Voice(odbiorca, nadawca, listen) //Nadawca == 7 czyli id gracza ktory mowi // Odbiorca to kolejni gracze (takze nadawca) // listen - czy słyszy // Wykonuje się kolejno u każdego gracza za każdym razem jak ktoś coś powie
Napisano 19.05.2014 20:42
Napisano 19.05.2014 21:07
public plugin_init() { register_forward(FM_Voice_SetClientListening, "Voice") } public Voice(odbiorca, nadawca, listen) { if(odbiorca == nadawca) return FMRES_IGNORED; if(!is_user_alive(nadawca)) { if(!is_user_alive(odbiorca)) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } } else { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } return FMRES_IGNORED;
Żywi słyszą tylko żywych a nieżywi wszystkich
Pasuje?
Napisano 20.05.2014 00:19
to wyzej nie bedzie dzialac tak jak to opisales
Napisano 20.05.2014 06:37
Dlaczego?
@BlackPerfum
Czy nie powinno być:
public Voice(odbiorca, nadawca, listen) { if(odbiorca == nadawca) return FMRES_IGNORED; if(!is_user_alive(nadawca)) { if(!is_user_alive(odbiorca)) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } } else { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, false); //////////// return FMRES_SUPERCEDE } return FMRES_IGNORED; }
Napisano 20.05.2014 07:27
to wyzej nie bedzie dzialac tak jak to opisales
A dlaczego by to? Pamiętajmy o tym:
załóżmy iż tylko żywi słyszą tylko żywych a martwi słyszą wszystkich
Bo to się cvarem/komendą (nwm czy to od pluginy czy serwera) ustawia
Czy nie powinno być:
Jesli chcesz żeby nikt nie słyszał gracza który żyje to możesz sobie tak ustawić.
Napisano 20.05.2014 07:50
Jedyny cvar jaki znam na głos to sv_alltalk - ustawia czy wszyscy słyszą wszystkich (martwi itd. CHYBA)
Napisano 20.05.2014 08:26
Można tym sposobem co przedstawiłem zanegowac wszystko i sprawić by się mówiło jak się chce dlatego ja uważam że ten sposób jest jednym z najlepszych na zarządzanie rozmową między graczami
Napisano 20.05.2014 15:31
jak zywi maja slyszec tylko zywych a martwi wszystkich to kod powinien wygladac tak
public Voice(odbiorca, nadawca) { if(odbiorca == nadawca) return FMRES_IGNORED; if(is_user_alive(odbiorca)) { if(is_user_alive(nadawca)) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } engfunc(EngFunc_SetClientListening, odbiorca, nadawca, false); return FMRES_SUPERCEDE } return FMRES_IGNORED; }
oraz oczywiscie musi byc wlaczony cvar sv_alltalk
Napisano 20.05.2014 15:36
Zadam takie pytanie, dochodzące do tego tematu, czym można zroibć tak by mówiący słyszał siebie ?
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
Napisano 20.05.2014 16:00
Skoro każdy daje:
if(odbiorca == nadawca) return FMRES_IGNORED;
to bez tego to chyba raczej może siebie słyszeć
Napisano 20.05.2014 16:02
Ta
jak zywi maja slyszec tylko zywych a martwi wszystkich to kod powinien wygladac tak
Ależ oczywiście że tak. Zgadzam się z toba sposób który przedstawiłaś zadziała jeśli
wlaczony cvar sv_alltalk
A mój gdy on będzie wyłączony (nwm ile w nim jest opcji)
Kod uniwersalny (ignoruje cvary wszelkiej maści ):
public Voice(odbiorca, nadawca, listen) { if(odbiorca == nadawca) return FMRES_IGNORED; if(!is_user_alive(nadawca)) { if(!is_user_alive(odbiorca)) { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } engfunc(EngFunc_SetClientListening, odbiorca, nadawca, false); return FMRES_SUPERCEDE } else { engfunc(EngFunc_SetClientListening, odbiorca, nadawca, true); return FMRES_SUPERCEDE } return FMRES_IGNORED; }
Zadam takie pytanie, dochodzące do tego tematu, czym można zroibć tak by mówiący słyszał siebie ?
Do tego jest:
voice_loopback "x" // x - 1 słyszy siebie | 0 nie slyszy
ale jeśli skasujesz pierwszą linijkę kodu w mojej funkcji to podziała dokładnie tak samo
Napisano 20.05.2014 17:37
Skoro każdy daje:
if(odbiorca == nadawca) return FMRES_IGNORED;to bez tego to chyba raczej może siebie słyszeć
Własnie zadałem pytanie ze względu na ten kod, wydawało mi się to surrealistyczne ;}
Dobrze, że chociąz stary hl engine na to pozwala Pozdrawiam
Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości
Napisano 20.05.2014 18:04
Napisano 27.05.2014 14:03
0 użytkowników, 0 gości, 0 anonimowych