BlacKly Napisano 16 Lipca 2020 (edytowane) Witam. Mój kod wygląda w ten sposób: public bool IsClientColideWithWall(int client){ float pos[3]; GetClientEyePosition(client, pos); float angles[3]; float endPos[3]; float distance; Handle trace; bool nearWall = false; for(int angle = 0; angle < 360; angle+= 30){ angles[0] = 0.0; angles[1] = float(angle); angles[2] = 0.0; trace = TR_TraceRayFilterEx(pos, angles, MASK_SOLID, RayType_Infinite, TraceFilter, client); if(TR_DidHit(trace)){ TR_GetEndPosition(endPos, trace); distance = GetVectorDistance(endPos, pos, true); if(distance < 5) nearWall = true; } CloseHandle(trace); } return nearWall; } public bool TraceFilter(int entity, int mask, any data) { if(entity == data) return false; return true; } Powyższy kod cały czas zwraca FALSE. Po usunięciu TraceFilter i zmianie TR_TraceRayFilterEx na TR_TraceRayEx kod zaczął cały czas zwracać TRUE. Kod ma zwracać TRUE tylko wtedy gdy klient dotyka ściany, Edytowane 16 Lipca 2020 przez BlacKly Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
BlacKly Napisano 20 Lipca 2020 public bool IsClientColideWithWall(int client){ float pos[3]; GetClientAbsOrigin(client, pos); pos[2] += 25; float min[3]; GetClientMins(client, min); float max[3]; GetClientMaxs(client, max); min[0] -= 10; min[1] -= 10; max[0] += 10; max[1] += 10; Handle trace = TR_TraceHullFilterEx(pos, pos, min, max, MASK_SOLID, TraceFilter, client); if(TR_DidHit(trace)) return true; CloseHandle(trace); return false; } public bool TraceFilter(int entity, int mask, any data){ if(entity == data) return false; return true; } Powyższy kod działa dobrze. Do zamknięcia Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Paweł Napisano 12 Sierpnia 2020 Wiadomość wygenerowana automatycznie ✔ Problem został rozwiązany Jeżeli się z tym nie zgadzasz, raportuj ten post Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach