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.
|
różna przezroczystość
#1
Napisano 07.06.2010 16:11
#2
Napisano 07.06.2010 18:47
zmiana renderingu, co ją wszyscy widzą może nastąpić w każdym dowolnym evencie gry, np. przy spawnie + set_rendering z <engine>
#3
Napisano 07.06.2010 20:32
public RenderingSet(es_handle, e, ent, host, hostflags, player, pSet) { if(nick_gracza[host] == stmn){ new iEnt = find_ent_by_class(-1, "Przedmiot"); while(iEnt > 0) { set_es(iEnt, ES_RenderAmt, 50); // tu sie wywala iEnt = find_ent_by_class(iEnt, "Przedmiot"); } } return FMRES_IGNORED; }
W momencie spełnienia warunku serwer łapie zawieszkę i się crashuje bez wpisów. Mogę prosić o opis zmiennych przekazywanych tej funkcji?
#4
Napisano 07.06.2010 22:43
while(iEnt > 0)
->
if (iEnt >0)
W twoim przypadku przy znalezieniu pętla wykonuje się w nieskończoność
@Down
Wybacz już poprawiłem ;d a dałby se łeb uciąć że 0 ;x
#5
Napisano 07.06.2010 22:58
No chyba nie bo find_ent_by_class zwraca chyba -1 w przypadku nie znalezienia kolejnego obiektu.while(iEnt > 0)
->if (iEnt)
W twoim przypadku przy znalezieniu pętla wykonuje się w nieskończoność
#6
Napisano 08.06.2010 09:17
Skoro upierasz się przy AddToFullPack (es_handle) to musisz wiedzieć, że jest to wykonywane ILE_GRACZY*ILE_BYTÓW razy na ramkę, a ramka jest aktualizowana kilkadziesiąt razy na sekundę. Wrzucanie takiego while`a do tego forwardu jest delikatnie mówiąc nieoptymalne.
Jeśli powiesz do czego chcesz użyć tej metody będzie łatwiej. Raczej pewne, że nie trzeba takiej częstotliwości wykonania zmiany renderingu.
Jeśli nick gracza jest liczbą (?) a stmn stałą/makrem/polem enuma to warunek jest ok, ale nie sądzę
nick_gracza[host] == stmn
do porównania stringów używa się equal
#7
Napisano 08.06.2010 10:54
HLSDK DLLAPI Notes
Skoro upierasz się przy AddToFullPack (es_handle) to musisz wiedzieć, że jest to wykonywane ILE_GRACZY*ILE_BYTÓW razy na ramkę, a ramka jest aktualizowana kilkadziesiąt razy na sekundę. Wrzucanie takiego while`a do tego forwardu jest delikatnie mówiąc nieoptymalne.
Jeśli powiesz do czego chcesz użyć tej metody będzie łatwiej. Raczej pewne, że nie trzeba takiej częstotliwości wykonania zmiany renderingu.
Jeśli nick gracza jest liczbą (?) a stmn stałą/makrem/polem enuma to warunek jest ok, ale nie sądzęnick_gracza[host] == stmn
do porównania stringów używa się equal
Ten warunek to tylko przykład.
Upieram się przy AddToFullPack, bo nic innego nie znalazłem.
A chciałem to wykorzystać do widzenia min w modzie coda przez np. klase czy posiadany item.
#8
Napisano 08.06.2010 11:05
najlepsze wyjście to tablica bool:ents[512] i wpisywać tam true (gdy byt jest miną) i false (gdy nie jest miną), w funkcji tworzenia minu ustaw na true, a przy eksplozji czy na końcu rundy (nie wiem kiedy tam sprzątają) false
i wtedy
new bool:isMine[512]; // czy jest miną new hasItem[33]; // czy gracz ma item/klasę public RenderingSet(es_handle, e, ent, host, hostflags, player, pSet) { if(!player){ if(hasItem[host] && isMine[ent]){ set_es(es_handle, ES_RenderAmt, 50); } } }
Edit.
Crashowało bo podałeś zamiast uchwytu es_handle id bytu
#9
Napisano 08.06.2010 12:37
@edit
Auć. Brakowało: set_es(es_handle,ES_RenderMode,kRenderTransTexture);
Wygląda na to, że teraz działa.
Użytkownik stmn edytował ten post 08.06.2010 13:33
Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych