Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
śledzenie csgo ray
#1
TL; DR śledzenie promienia nie działa, trace_t-> m_pEnt czasami zwraca lokalnego gracza i prawie losowo działa   Ciąg interfejsu dla IEngineTrace był taki sam, ale rzuciłem vtables z binów mac, aby się upewnić.   Otworzyłem również trace_t w ReClass i upewniłem się, że przesunięcie do m_pEnt było wcześniej dobre (0x4C).   załączony jest mój kod źródłowy, a trace_flags jest właśnie tym śladem is_visible oznaczającym flagę kogoś umieszczonego na forum dawno temu .. Próbowałem już MASK_SHOT i etc ..   me (). getEyePos () po prostu dodaje m_vecViewOffset (0x104) do absOrigin mojej jednostki.   getBonePos ma po prostu średnią pozycję kości między bbminem / bbmax, a ja dzwonię z kości Głowy (11, z testów)       cpp:   bool isVisible (int bone) const { if (isDormant () || me (). isDormant ()) zwraca false; Ray_t ray; trace_t tr; ray.Init (me (). getEyePos (), getBonePos (bone)); csgo-> gTrace-> TraceRay (ray, trace_flags, 0, & tr); //log.write(log.VERB, format ("tr = 0x% X idx =% d pEnt = 0x% X% d \ n")% tr% idx% baseEnt% offsetof (trace_t, m_pEnt)); if (tr.fraction == 1,0f) zwraca true; if (tr.m_pEnt && tr.m_pEnt == baseEnt) zwraca true; return false; }     każda pomoc jest doceniana!   dzięki
Reply
#2
Może zacznij nie w głowie, ale z przodu, albo zignoruj własny ent
Reply
#3
Użyj narzędzia TraceFilter i odfiltruj własne i swoje narzędzie do śledzenia ...
Reply
#4
użyj CTraceFilterSkipTwoEntities dla filtru śledzenia hese sig to cpp: \ x55 \ x8B \ xECB \ xC1 \ x8B \ x4D \ x08 \ x89 \ x48 \ x04 \ x8B \ x4D \ x0C \ x89 \ x50 \ x08 \ xC7 \ x40 \ x00 \ x00 \ x00 \ x00 \ x00 \ xC7 \ x00 \ x00 \ x00 \ x00 \ x89 \ x48 \ x10 \ x5D \ xC2 \ x0C \ x00 xxxxxxxxxxxxxxxxxxxxxx ????? xx ???? xxxxxxx powinien zrobić lewy
Reply
#5
Miałem też ten problem, problem polega na tym, że koliduje on z lokalnym podmiotem i dlatego nie śledzi go dalej. Możesz post jak wyżej, użyć gier CTraceFilterSkipTwoEntities lub możesz po prostu powtórzyć to sam. cpp: klasa ITraceFilter { publiczny: virtual bool ShouldHitEntity (IHandleEntity * pEntity, int contentsMask) = 0; virtual TraceType_t GetTraceType () const = 0; }; klasa CTraceFilter: public ITraceFilter { publiczny: bool ShouldHitEntity (IHandleEntity * pEntityHandle, int contentsMask) { return! (pEntityHandle == pSkip); } virtual TraceType_t GetTraceType () const { return TRACE_EVERYTHING; } void * pSkip; }; cpp: Filtr CTraceFilter; filter.pSkip = pLocal; ray.Init (vMe, vEnemy); ptr :: g_pEngineTrace-> TraceRay (ray, mask, & filter, & tr); Twoje zdrowie
Reply
#6
Zacytować: Napisał m1tek sry 4 bumping ale nie miałem ochoty zrobić nowego tematu z tym samym problemem, kod poniżej (wziąłem twoją sugestię dla tracefilter CypherPresents): A co z tym? cpp: bool GetVisible (Vector i vecAbsStart, Vector i vecAbsEnd, CBaseEntity * pBaseEnt) { player_info_t pinfo; trace_t tr; Ray_t ray; Filtr CTraceFilter; filter.pSkip = GetBaseEntity (me); ray.Init (vecAbsStart, vecAbsEnd); pEnginetrace-> TraceRay (ray, MASK_NPCWORLDSTATIC
Reply
#7
Zacytować: Originally Posted by lmaobox A co z tym? cpp: bool GetVisible (Vector i vecAbsStart, Vector i vecAbsEnd, CBaseEntity * pBaseEnt) { player_info_t pinfo; trace_t tr; Ray_t ray; Filtr CTraceFilter; filter.pSkip = GetBaseEntity (me); ray.Init (vecAbsStart, vecAbsEnd); pEnginetrace-> TraceRay (ray, MASK_NPCWORLDSTATIC | CONTENTS_SOLID | CONTENTS_MOVEABLE | CONTENTS_MONSTER | CONTENTS_WINDOW | CONTENTS_DEBRIS | CONTENTS_HITBOX, & filter, & tr); return (tr.m_pEnt == pBaseEnt || tr.fraction> 0.99f); } nie robi żadnej różnicy ...
Reply
#8
to, czego używam: cpp: bool IsVisibleFromPlayer (const Vector i position) { Ray_t ray; trace_t tr; ray.Init (GetAimFromOrigin (), pozycja); TraceFilterEverything traceFilter; GetEngineTrace () -> TraceRay (ray, 0x46004003, & traceFilter, & tr); return tr.fraction> 0,97f; } GetAimFromOrigin zwraca pozycję głowy (twój vecAbsStart)
Reply
#9
Zacytować: Napisał KN4CK3R to, czego używam: cpp: bool IsVisibleFromPlayer (const Vector i position) { Ray_t ray; trace_t tr; ray.Init (GetAimFromOrigin (), pozycja); TraceFilterEverything traceFilter; GetEngineTrace () -> TraceRay (ray, 0x46004003, & traceFilter, & tr); return tr.fraction> 0,97f; } GetAimFromOrigin zwraca pozycję głowy (twój vecAbsStart) http: // [censored] /f/600/70op.jpg/ co używasz jako filtr śledzenia?
Reply
#10
Zacytować: Originally Posted by flamingoctopus Mam teraz ten problem. Czy ktoś zdążył naprawić? Mam prawie wszystko działa, ale mój ray tracing jest zepsuty. cpp: if (tr.fraction == 1,0f) zwraca true; else zwraca false; } frakcja pływająca;
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)