←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

różna przezroczystość

Zablokowany

  • +
  • -
stmn - zdjęcie stmn 07.06.2010

Z tego co znalazłem, to można przykładowo dla CT ustawić przezroczystość postaci mniejszą niż dla T korzystając z AddToFullPack. A czy to samo jest możliwe dla utworzonych obiektów/przedmiotów/podmiotów (entities)? Próbowałem znajdować obiekty za pomocą find_ent_by_class i za pomocą set_es ustawić przezroczystość ale albo się nie da albo nie umiem.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 07.06.2010

AddToFullPack jest konieczny, gdy chcesz by jakieś zmiany były widoczne dla wybranych graczy

zmiana renderingu, co ją wszyscy widzą może nastąpić w każdym dowolnym evencie gry, np. przy spawnie + set_rendering z <engine>
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 07.06.2010

Czyli mogę zmienić rendering dowolnej rzeczy? W takim razie, jak mogę zmienić rendering obiektu 'Przedmiot', mam takie coś:

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

  • +
  • -
Vertricus - zdjęcie Vertricus 07.06.2010

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
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 07.06.2010

while(iEnt > 0) 

->
if (iEnt)

W twoim przypadku przy znalezieniu pętla wykonuje się w nieskończoność ;>

No chyba nie bo find_ent_by_class zwraca chyba -1 w przypadku nie znalezienia kolejnego obiektu.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 08.06.2010

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
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 08.06.2010

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

  • +
  • -
R3X - zdjęcie R3X 08.06.2010

aha spoko, czyli dobrze wybrałeś metodę :) tylko ten while...

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
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 08.06.2010

Wystarczy dodać isMine[ent] = true; przy tworzeniu? :P Tak zrobiłem, i wynik jest niemal pozytywny - gdy jest na mapie mina i mam odpowiednią klasę to printuje mi wiadomość więc ten etap chyba działa poprawnie, jednak rendering min się nie zmienia. :D

@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
Odpowiedz
Zablokowany