←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Dana ramka sprites

  • +
  • -
zasepa's Photo zasepa 07.06.2016

Witam

Mam pewien problem. Aktualnie wyświetlam sprite'sa .spr nad głową gracza. Wszystko działa dobrze.

Pytanie brzmi jak wyświetlić daną ramkę sprite nad głową gracza?

Ważne aby ten sprites był widoczny tylko dla gracza(id)

Aktualnie używam:

Proszę o pomoc

stock Create_Spr_head_Ranga(id, ent, vOffset, iSprite, life)
{
	message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id);
	write_byte(TE_PLAYERATTACHMENT);
	write_byte(ent);	   	
	write_coord(vOffset);	
	write_short(iSprite);		
	write_short(life);		  
	message_end();
}
Quote

  • +
  • -
Robiin's Photo Robiin 07.06.2016

https://amxx.pl/topi...nad-głową-enta/

 

id to id, nie rozumiem w czym problem. Jak ustawisz na 0 to powinni wszyscy mieć, jeżeli o to Ci chodzi.

Quote

  • +
  • -
zasepa's Photo zasepa 08.06.2016

Chodzi o to że chcę zrobić spritera z kilkoma ramkami.

Podobnie jak posiada ten plugin: https://amxx.pl/topi...4-sprite-timer/

Zawiera w 1 spriterze 10 ramek. W każdej kolejna cyfra. Do odliczania czasu

Byłby on dobry ALE ALE tego spritera będą widzieć wszyscy!

A ja chcę aby tylko osoba(id) widziała tego spritera na graczu(ent) oraz abym mógł ustawić którą ramkę ma zobaczyć.

Mam nadzieje ze teraz dobrze wyjaśniłem :)

Proszę o pomoc

 

 

Quote

  • +
  • -
Linux''s Photo Linux' 10.06.2016

Przed wyswietleniem spritesa, dodajesz sprawdzanie czy gracz posiada okreslony warunek.

Quote

  • +
  • -
zasepa's Photo zasepa 10.06.2016

Przed wyswietleniem spritesa, dodajesz sprawdzanie czy gracz posiada okreslony warunek.

 

...Mi chodzi jak wyświetlić dana ramkę spritesa. Bo sprites może zawierać animacje a więc kilka ramek w sobie. I czy właśnie da się wyświetlić dana ramkę i w jaki sposób?

Bo po co mam tworzyć 10 osobnych spritesów, skoro mogę utworzyć 1 sprites z 10 ramkami.

Jest taka możliwość?

Pozdrawiam

Quote

  • +
  • -
Linux''s Photo Linux' 13.06.2016

Chyba już rozumiem. Wydaje mi sie, że jako tako metody takiej nie znajdziesz chociaż glowy sobie uciąć nie dam. Natomiast mozesz ustawic render modelu u wszystkich graczy którzy nie posiadają określonego warunku na 0 co sprawi, że nie będą widzieć bytu.

Quote

  • +
  • -
zasepa's Photo zasepa 14.06.2016


Natomiast mozesz ustawic render modelu u wszystkich graczy którzy nie posiadają określonego warunku na 0 co sprawi, że nie będą widzieć bytu.

 

To mi odpowiada. Lecz nie bardzo wiem jak to zrobić. Za pewne to będzie pętla przelatujaca przez graczy i ustawiajaca im ten model na 0 hmm ale w jaki sposób?

Pozdrawiam

Quote

  • +
  • -
Linux''s Photo Linux' 14.06.2016

Po stworzeniu bytu, ustawiasz mu render na 0 a wiec:

set_rendering(ent, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 0);

Nastepnie rejestrujesz

register_forward(FM_AddToFullPack, "AddToFullPack", 1);

i dodajesz

public AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet)
{
	if(!is_user_connected(host) || !pev_valid(ent))
		return FMRES_IGNORED;

	if(warunek_spelniony)
		set_es(es_handle, ES_RenderAmt, 255.0); // 255 pelna widocznosc

	return FMRES_IGNORED;
}

Podejrzewam tylko, ze takie dzialanie moze miec i swoje bledy. Widziec bedziesz wszystkie stworzone byty w pelnej widocznosci ale i to mozna naprawic. Po stworzeniu enta dodajesz jego id do zmiennej globalnej a nastepnie w AddToFullPack sprawdzasz czy ent to id stworzonej zmiennej.

Quote

  • +
  • -
zasepa's Photo zasepa 14.06.2016

:o niezły pomysł z tym. Nie wiedziałem że tak można :D

Hmm rozumiem że 

set_es(es_handle, ES_RenderAmt, 255.0); // 255 pelna widocznosc 

ustawi widoczność tego enta graczowi "host"??

 

Oraz czy wykonanie tego:

public AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet)
{
    if(!is_user_connected(host) || !pev_valid(ent))
        return FMRES_IGNORED;

    if(warunek_spelniony)
        set_es(es_handle, ES_RenderAmt, 255.0); // 255 pelna widocznosc

    return FMRES_IGNORED;
}

będzie wtedy gdy byt zostanie utworzony?

Czy jak?

Bo byty będą tworzone podczas gry.

 

Bardzo dziękuje za pomoc :D


Edited by zasepa, 14.06.2016 22:59.
Quote

  • +
  • -
Linux''s Photo Linux' 15.06.2016

Tak, "host" to id osoby obserwujacej byt. AddToFullPack wykonywany jest za kazdym razem (cos jak FM_Think). Mozesz poczytac o nim wiecej np na alliedmod.

Quote

  • +
  • -
zasepa's Photo zasepa 15.06.2016

Bardzo dziękuje za pomoc.

Jeszcze nie testowałem, ale w najbliższych dniach po testuje i dam znać czy działa.

Quote