Widzenie enta
Kmf!p
11.08.2016
Siemacie, mam taki problem uzywam czegos takiego:
fm_is_ent_visible(index, entity)
sprawdza to czy ent jest widzialny przez gracza, ja chce sprawdzic czy gracz widzi innego gracza:
fm_is_ent_visible(id, idattacker)
wszystko niby dziala lecz nie wykrywa calego modelu gracza, chodzi o to ze gdy zobacze glowe gracza to nadal nie wykrywa ze go widze ;(
jak temu zaradzic ?
potrzebuje kod na ent w ktorym znajdzie sie gracz + bron (choc sam gracz wystarczy poki co)
mam nadzieje ze rozumiecie
rzeznik9871
13.08.2016
Mozesz sprobowac to sprawdzic z engin'owego
is_visible(entity, target)
choc zakladam ze dziala to na takiej samej zasadzie
Drugia opcja to trace_line tez z engine
trace_line(iIgnoreEnt, const Float:fStart[3], const Float:fEnd[3], Float:vReturn[3])
nigdy tego nie uzywalem ale z tego co wywnioskowałem z tego tematu:
https://amxx.pl/topi...fikacja-entity/
w którym GoQ napisal
robisz traceline'a jesli gosc strzela w gracza amiedzy nimi jest twoj byt to blokujesz obrazenia i tyle
to mozna wykryc czy ent jest za sciana ale tez nie wiem czy dziala to tylko na inne enty czy takze na normalne "mapowe" sciany
jezeli dziala tak jakbysmy chcieli zeby dzialalo to mozna zrobic ta traceline od targetu do glowy/broni gracza i sprawdzic czy miedzy glowa/bronia a drugim graczem jest sciana
Jest jeszcze trzecie wyjscie najmniej optymalne czyli stworzyc nowy ent i umiescic go w glowie gracza a potem
if(fm_is_ent_visible(gracz1, gracz2) && fm_is_ent_visible(gracz1, ent_wglowie_gracza2))
{
//KOD
}
rzeznik9871
13.08.2016
Nie moge edytowac wiec double post
zrobilem taka funkcje
public test(id)
{new widziane[33],numfor(new i=1;i<33;i++)if(is_user_alive(i)){new Float:fOrigin[3],Float:fOrigin2[3],Float:fOrigin3[3]entity_get_vector(id,EV_VEC_origin,fOrigin)entity_get_vector(i,EV_VEC_origin,fOrigin2)if(trace_line(id,fOrigin,fOrigin2,fOrigin3)){widziane[num]=inum++}}if(num)for(new a=0;a<num;a++){new name[30]get_user_name(widziane[a],name,29)client_print(id,3,"widzisz gracza %s",name)}}
i wszystko piknie dziala wyswietla wszystkich graczy ktorzy sa w zasiegu wzroku czyli wystarczy ze pobierzesz origin glowy gracza i sprawdzisz to tym sposobem
Kmf!p
13.08.2016
ale mi nie chodzi tylko o glowe, chodzi mi zeby pobrac taki origin ze jak za sciany bedzie widac noge, reke, glowe czy tez same nogi to zeby wykrylo czy go widze. kawalek modelu zobacze i juz ma wykonac sie jakis kod uzywac będę raczej tego jesli zadziala na tym
fm_is_ent_visible(id, ent)
za ent chce podstawic wlasnie ten model gracza. myslalem tez nad takim czyms ale jak to pobrac dla gracza
entity_set_size(ent, Float:{-16.0,-16.0, -36.0}, Float:{16.0,16.0, 40.0});
chodzi mi zeby ustalic wysokosc gracza i szerokosc to juz metoda ostateczna, ale tez mogla by przejsc o ile dalo by sie zastosowac i pobrac jako ent
Użytkownik Kmf!p edytował ten post 13.08.2016 22:53
rzeznik9871
13.08.2016
wystarczy pobrac kilka miejsc i sprawdzic czy gracz nie widzie jednego z nich
Kmf!p
13.08.2016
moze byc te traceline.
czyli jak bedzie zeby pobrac wszystkie czesci ciala i zrobic z tego jeden ent ?
zebym mogl podstawic pod to:
fm_is_ent_visible(id, ent)
rzeznik9871
14.08.2016
cos tam mi sie udalo sklecic po wstepnych testach dziala ale wiadomo najlepiej przetestowac w praktyce tak btw do czego ci to potrzebne?
edit:jezeli masz server mozemy to przetestowac dokladniej bo wiadomo jak testuje sie na botach ;f a sam jestem tego ciekaw dogłębniej
stock czy_widzi_gracza(id,target) { if(is_user_alive(target) && is_user_alive(id)) //sprawdzam czy obaj gracze zyja { new Float:fOrigin[3],Float:fOrigin2[3],Float:fOrigin3[3],Float:fOrigin4[3],Float:fOrigin5[3]//zmienna w ktore przechowywane sa originy ,Float:fOrigin6[3],Float:fOrigin7[3],line[3]; entity_get_vector(id,EV_VEC_origin,fOrigin) //Pobranie originu gracza1 do zmiennej fOrigin entity_get_vector(target,EV_VEC_origin,fOrigin2) //Pobranie originu gracza2 do zmiennej fOrigin2 entity_get_vector(target,EV_VEC_origin,fOrigin3) //Pobranie originu gracza2 do zmiennej fOrigin3 entity_get_vector(target,EV_VEC_origin,fOrigin4) //Pobranie originu gracza2 do zmiennej fOrigin4 fOrigin[2]+=25.0 //origin gracza jest pobierany od brzucha a wiec ustawiam aby plugin bral pod uwage glowe gracza nie tłów poniewaz nie patrzymy tłowiem :0 fOrigin2[2]+=25.0//robie to co wyzej ale dla targetu (gracz2) teraz ten origin symuluje glowe fOrigin3[2]-=25.0//a tu "obnizam" origin teraz to symuluje nogi a wlasciwie przestrzen miedzy nogami tak +- line[0]=trace_line(id,fOrigin,fOrigin2,fOrigin5)//sprawdzam czy symulowana glowa gracza1 widzi symulowana glowe gracza2 line[1]=trace_line(id,fOrigin,fOrigin3,fOrigin6)//sprawdzam czy symulowana glowa gracza1 widzi symulowane nogi gracza2 line[2]=trace_line(id,fOrigin,fOrigin4,fOrigin7)//sprawdzam czy symulowana glowa gracza1 widzi tłów gracza2 (standardowy origin) if(line[0]==target || line[1]==target || line[2]==target) //jezeli symulowana glowa gracza1 dostrzega nogi glowe lub tłów gracza2 wykonuje kod return true//zwracam true jezeli widzi okreslonego gracza (a wlasciwie jedna z jego czesci ciała) } return false//zwracam false jezeli nie widzi okreslonego gracza }
Użytkownik rzeznik9871 edytował ten post 14.08.2016 01:07
Kmf!p
14.08.2016
Pisze plugin antywh powinien dzialac na wh podmieniajace opengl.dll a moze i inne tez (na pewno nie wszystkie) ale dobre i to
Blokuje wysylanie informacji o graczu do momentu az przeciwnik zobaczy go czyli np. wyjdzie za sciany czy w inny sposob. uzywam tego
fm_is_ent_visible(id, ent) fm_is_ent_visible(id, idattacker)
dziala prawie dobrze, ale model przeciwnika pojawia sie samo gdy zobaczymy jego brzuch, a dokladnie punkt na srodku jego brzucha bo model spoznia sie nie tylko gdy widzimy nogi/glowe, ale tez gdy wychyla np. zza rogu. najlepszym rozwiazaniem bylo by sprawdzanie czy hitboxy graczy widza sie...
Odnosnie postu wyzej nie widze roznicy po podstawieniu twojego kodu ;(
Użytkownik Kmf!p edytował ten post 14.08.2016 22:07