Harden traffic edge scorer hook

This commit is contained in:
2026-06-22 21:10:17 -05:00
parent 8a0f23dee8
commit a14811d99f
+6 -15
View File
@@ -3827,35 +3827,26 @@ float DetourGpsTrafficEdgeScore(void* aSearchContext, void* aCandidate, void* aR
baseScore = gOriginalGpsTrafficEdgeScore(aSearchContext, aCandidate, aReferencePoint);
}
void* query = nullptr;
void* lane = nullptr;
auto* query = ReadPointerField(aSearchContext, 0x10);
auto* lane = ReadPointerField(aCandidate, 0x00);
uint8_t queryMode = 0xFF;
uint16_t laneFlags = 0;
if (aSearchContext)
{
query = *reinterpret_cast<void**>(reinterpret_cast<uintptr_t>(aSearchContext) + 0x10);
}
if (query)
{
queryMode = *reinterpret_cast<uint8_t*>(reinterpret_cast<uintptr_t>(query) + 0x41);
}
if (aCandidate)
{
lane = *reinterpret_cast<void**>(aCandidate);
TryReadMemory(reinterpret_cast<const void*>(reinterpret_cast<uintptr_t>(query) + 0x41), queryMode);
}
if (lane)
{
laneFlags = *reinterpret_cast<uint16_t*>(reinterpret_cast<uintptr_t>(lane) + 0x88);
TryReadMemory(reinterpret_cast<const void*>(reinterpret_cast<uintptr_t>(lane) + 0x88), laneFlags);
}
const auto driving = queryMode == 0;
const auto multiplier = TrafficEdgeScoreMultiplier(laneFlags, driving);
const auto patchedScore = baseScore * multiplier;
constexpr LONG kMaxLoggedCalls = 256;
constexpr LONG kMaxLoggedCalls = 64;
LONG callCount = -1;
if (gGpsTrafficEdgeScoreLogCount < kMaxLoggedCalls)
if (InterlockedCompareExchange(&gGpsTrafficEdgeScoreLogCount, 0, 0) < kMaxLoggedCalls)
{
callCount = InterlockedIncrement(&gGpsTrafficEdgeScoreLogCount) - 1;
}