←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Jak wrócić do poprzedniej opc...


Najlepsza odpowiedź BlackPerfum 08.07.2014 20:16

Chyba najlepiej użyć funkcji wbudowanej tzn. spectator mode. Trochę pokombinowałem i tak mozna się do niej dostać:
public WejdzWCialo(id)
{
	CreateSpec(id,1)
	set_task(20.0, "KoniecPodgladu",id)
}

CreateSpec(id,vid)
{
	engfunc(EngFunc_SetView, id, 1)
	new x = pev(id,pev_effects)
	if(~x & 128)	set_pev(id,pev_effects,x + 128)
	set_pev(id,pev_sequence,107)
	set_pev(id,pev_gaitsequence,6)
	set_pev(id,pev_iuser1,2)
	set_pev(id,pev_iuser2,vid)
	set_pev(id,pev_frame,255.0)
	set_pev(id,pev_framerate,1.0)
}

DeleteSpec(id)
{
	engfunc(EngFunc_SetView, id, id)
	new x = pev(id,pev_effects)
	if(x & 128)	set_pev(id,pev_effects,x - 128)
	set_pev(id,pev_sequence,75)
	set_pev(id,pev_gaitsequence,1)
	set_pev(id,pev_iuser1,0)
	set_pev(id,pev_iuser2,0)
	set_pev(id,pev_frame,float(random(35)+110))
	set_pev(id,pev_framerate,1.0)
}

public KoniecPodgladu(id)
{
	DeleteSpec(id)
}
Nie zmieniaj renderingu graczu gdyż to nie potrzebne i nic nie da gdyż gracz nie jest pokazany na mapie. Jak ci nie odpowiada to pokombinuj z tym a na pewno coś z tego wyjdzie Przejdź do postu

  • +
  • -
Drago36 - zdjęcie Drago36 28.06.2014

Witam.

 

Zrobiłem sobie pewny kod. Polega na tym, że tworzy model na wybranym graczu, a potem "ja" przechodzę na ten model i widzę, gdzie ten wybrany gracz jest, czy też idzie.

public WejdzWCialo(id)
{	
	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	set_pev(iEnt, pev_classname, "player_hat")
	engfunc(EngFunc_SetModel, iEnt, "models/QTM_CodMod/mine.mdl")
	
	set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
	set_pev(iEnt, pev_aiment, gracz_id[id])
	set_pev(iEnt, pev_owner, gracz_id[id])
	fm_set_rendering(iEnt,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
	
	engfunc(EngFunc_SetView, id, iEnt)
	set_task(5.0, "KoniecPodgladu")
}

public KoniecPodgladu(id)
{
	ColorChat(id, RED, "Ofiara jest oznaczona przez minute na radarze!")
}

I moje pytanie jak zrobić, aby po 5 sekundach wrócić do swojego modelu?

Odpowiedz

Niedostateczny - zdjęcie Niedostateczny 28.06.2014

engfunc(EngFunc_SetView, id, id)

sprawdzałeś?

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 28.06.2014

I moje pytanie jak zrobić, aby po 5 sekundach wrócić do swojego modelu?

engfunc(EngFunc_SetView, id, id)
Odpowiedz

Niedostateczny - zdjęcie Niedostateczny 28.06.2014

 

I moje pytanie jak zrobić, aby po 5 sekundach wrócić do swojego modelu?

engfunc(EngFunc_SetView, id, id)

 

Już udzieliłem wystarczającej odpowiedzi, kolego ^^

 

///

 

 

nie zapomij usunąć potem tego enta, którego stworzysz :)


Użytkownik Niedostateczny edytował ten post 28.06.2014 21:13
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 28.06.2014


Już udzieliłem wystarczającej odpowiedzi, kolego
Patrz na czas dodania naszych wiadomości :D Jak zacząłem pisac to twojej jeszcze nie było i nwm czemu się nie pokazało okienko z info o nowym poście ;D
Odpowiedz

Niedostateczny - zdjęcie Niedostateczny 28.06.2014


Patrz na czas dodania naszych wiadomości :D Jak zacząłem pisac to twojej jeszcze nie było i nwm czemu się nie pokazało okienko z info o nowym poście ;D

Oczywiście istnieje Forum-> Propozycje, jednak ten dział to chyba lotto z warnami po tym co widzę :P

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 28.06.2014

Oczywiście istnieje Forum-> Propozycje, jednak ten dział to chyba lotto z warnami po tym co widzę

Cii...
 
Działa ci to:
set_pev(iEnt, pev_aiment, gracz_id[id])
z tym:
set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
?? Nie powinno być
MOVETYPE_FOLLOW
aby to działało??
Odpowiedz

Niedostateczny - zdjęcie Niedostateczny 28.06.2014

@@T_Author

A tak z domysłu po co używasz engine do tworzenia entity, a potem fakemety ? Mniejszy dialog między modułami to mniejsze obciążenie serwera.

 

@BlackPerfum

A  Domyślnie solid jest ustawiany na SOLID_NOT ?
Przydało by się ustawić gdy jest domyślnie na SOLID_BBOX, jednak nie znamy do końca intencji autora.

 

//edit

 

Szkoda, że nie działa @@T_Author ;/


Użytkownik Niedostateczny edytował ten post 28.06.2014 21:42
Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 29.06.2014

engfunc(EngFunc_SetView, id, id)

Akurat tak zrobiłem i to nie działa.

Chyba, że źle stosuje:

public WejdzWCialo(id)
{
	fm_set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
	
	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	set_pev(iEnt, pev_classname, "player_hat")
	engfunc(EngFunc_SetModel, iEnt, "models/QTM_CodMod/mine.mdl")
	
	set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW) // poprawilem
	set_pev(iEnt, pev_aiment, gracz_id[id])
	set_pev(iEnt, pev_owner, gracz_id[id])
	fm_set_rendering(iEnt,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
	
	engfunc(EngFunc_SetView, id, iEnt)
	set_task(5.0, "KoniecPodgladu")
}

public KoniecPodgladu(id)
{
	engfunc(EngFunc_SetView, id, id)
	new iEnt = fm_find_ent_by_owner(-1, "player_hat", gracz_id[id])
	engfunc(EngFunc_RemoveEntity, iEnt)
	ColorChat(id, RED, "Ofiara jest oznaczona przez minute na radarze!")
}

Niestety dodatkowo wyskakuje taki błąd, nie wiem czym jest spowodowany, dorzucam że testuje na botach.

Host_Error: PF_setview_I: not a client
Compressing & saving Experience Data...this may take a while!
Experience Data saved

@@

 

@@T_Author

A tak z domysłu po co używasz engine do tworzenia entity, a potem fakemety ? Mniejszy dialog między modułami to mniejsze obciążenie serwera.

 

@BlackPerfum

A  Domyślnie solid jest ustawiany na SOLID_NOT ?

Przydało by się ustawić gdy jest domyślnie na SOLID_BBOX, jednak nie znamy do końca intencji autora.

Nigdzie nie jest użyty engine wraz z fakemat'ą..

 

Trzeba ustawiać tryb bryły obowiązkowo?

Ustawiałem wcześniej, ale nie wiem czy to potrzebne.

Napisałem, chcę stworzyć model  na  wybranym graczu i "ja" mogę przeskoczyć na ten model aby oglądać gdzie chodzi itp. A po 5 sekundach wrócić do swojego modelu

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

pierwsza linijka bledu. Chodzi Ci o takie jakby obserwowanie z tego punktu?
Nastepne to logi z podbotow. Nie masz sie czym martwic
Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 29.06.2014


Chodzi Ci o takie jakby obserwowanie z tego punktu?

Dokładnie. Tworzy się model na wybranym graczu i ja obserwuje ten widok z punktu modelu, który został utworzony na nim.

Po 5 sekundach chcę  wrócić do swojego modelu gracza, żeby nie być już tym obiektem utworzonym na wybranym graczu.

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

Hmmm.

Ale co sie dzieje z twoim modelem (tobą) gdy obserwujesz?
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Ale co sie dzieje z twoim modelem (tobą) gdy obserwujesz?

fm_set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
Prawie że znika

Tak nie można?
 
public WejdzWCialo(id)
{
	fm_set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
	engfunc(EngFunc_SetView, id, gracz_id[id])
	set_task(5.0, "KoniecPodgladu",id+32894749)//Zapomniales id przesłać i dawałeś by id==0 patrzyło z punkyu o id == 0 xD
}

public KoniecPodgladu(id)
{
	id-=32894749
	engfunc(EngFunc_SetView, id, id)
	fm_set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
	ColorChat(id, RED, "Ofiara jest oznaczona przez minute na radarze!")
}
Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 29.06.2014

Nie sądziłem że przesłanie danych tu coś da ( :wstyd: ;> ).

Dobra, dzięki wielkie. Działa pięknie.

 

Hmmm.

Ale co sie dzieje z twoim modelem (tobą) gdy obserwujesz?

Obserwowało się normalnie, tylko po 5 sekundach wyrzucało mnie do menu Cs i drukował ten error co podałem wcześniej w konsoli.

To dlatego, że kazałem id==0 (czyli serwerowi?) przechodzić z modelu na model.

Teraz już tego nie ma. ;)

 

P.S

Mam jeszcze dwa pytania, które mnie gnębią.

1. Jest sobie task:

set_task(60.0, "AktywacjaMocy",id+KAC_TASK)

Jest koniec rundy i chcę ten task usunąć. Robię to dobrze w ten sposób?:

remove_task(KAC_TASK, 0)

2. Działa jak powinno, a chciałbym (jak tylko to możliwe) zmienić, aby ten model może nad nim był tworzony.

Spoiler

Nie wygląda to jakoś ciekawie, wolałbym wyżej, za nim, z boku, cokolwiek aby nie było w modelu gracza.

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

remove_task(KAC_TASK+id)

chyba tak :)
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Jest koniec rundy i chcę ten task usunąć. Robię to dobrze w ten sposób?:

Nie, musisz zrobić tak:
remove_task(KAC_TASK+id)

2. Działa jak powinno, a chciałbym (jak tylko to możliwe) zmienić, aby ten model może nad nim był tworzony.

Dlatego sie spytałem:

Tak nie można?

haha.gif Trzeba by było w thinku zmieniać pozycję/kierunek enta bo wątpie by się dało na odległość od tak enta przyczepić. Jeśli nie chcesz aby ent był za graczem to zawsze możesz go przyczepić w miejscu ustalonym przez pev_body. Możesz próbowac oddalić minimalnie za pomocą SetFOV ale to chyba nic nieda
Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 30.06.2014

Dobra, ale jakie są rodzaje pev_body i jak się dokładniej stosuje?

set_pev(index enta, pev_body, rodzaj) // Rodzaj od 0 do 16. Dobrze? Na alienmods tak jakoś pisało.
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 30.06.2014

Nigdy nie bawiłem się pev_body (ale go używałem) dlatego raczej tak ale pewności nie mam ;D

Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 06.07.2014

pev_body jednak nie pomaga, nadal model jest tworzony w graczu.

 


Możesz próbowac oddalić minimalnie za pomocą SetFOV ale to chyba nic nieda

Pierwsze słysze. Jak to zastosować?

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 06.07.2014

Użyj:
SetUserFov(id,fov)
{
	static SetFovId
	
	if(!SetFovId)	SetFovId = get_user_msgid("SetFOV")
	set_pdata_int(id, 363, fov)
	set_pev(id,pev_fov,float(fov))
	message_begin(MSG_ALL,SetFovId,.player=id)
	write_byte(fov)
	message_end()
}
Jak wchodzisz na gracza to dajesz 50.0 (z mniejszymi wartościami widać celownik) lub 255.0 (50.0 przyblizy 255.0 oddali) a jak schodzisz to ustawiasz 90.0 bo to standardowa wartość haha.gif
Użytkownik BlackPerfum edytował ten post 06.07.2014 12:52
Odpowiedz