From 13b680dee4a08b9473aa4cbbd7171901dfac4962 Mon Sep 17 00:00:00 2001 From: LightCat Date: Thu, 15 Nov 2018 17:58:42 +0100 Subject: [PATCH] gui update and navbot path optimize --- data/menu/nullifiedcat/catbot.xml | 2 +- src/hacks/NavBot.cpp | 13 +++++++++---- src/helpers.cpp | 12 ++++++++++-- src/hooks/CreateMove.cpp | 18 ++++++++++++++++++ 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/data/menu/nullifiedcat/catbot.xml b/data/menu/nullifiedcat/catbot.xml index 6944f8ee..f170cb2b 100755 --- a/data/menu/nullifiedcat/catbot.xml +++ b/data/menu/nullifiedcat/catbot.xml @@ -67,7 +67,7 @@ - + diff --git a/src/hacks/NavBot.cpp b/src/hacks/NavBot.cpp index 7cebf32b..40b66eb1 100644 --- a/src/hacks/NavBot.cpp +++ b/src/hacks/NavBot.cpp @@ -453,14 +453,16 @@ int GetClosestTeleporter() } return BestBuilding; } + bool NavToSentry(int priority) { + static CNavArea *last_area = nullptr; CachedEntity *Sentry = nearestSentry(); if (CE_BAD(Sentry)) return false; CNavArea *area = FindNearestValidByDist(GetBuildingPosition(Sentry), 1100.0f, 2000.0f, false); - if (!area) + if (!area || (area == last_area && !nav::ReadyForCommands)) return false; if (nav::navTo(area->m_center, priority, true, false)) return true; @@ -471,6 +473,7 @@ int lastent = -1; bool NavToEnemy() { + static CNavArea *last_area = nullptr; if (*stay_near) { if (lastent != -1) @@ -495,10 +498,11 @@ bool NavToEnemy() else area = FindNearestValidByDist(ent->m_vecOrigin(), 200, 1000, true); - if (area) + if (area && (area == last_area && nav::ReadyForCommands)) { nav::navTo(area->m_center, 1337, true, false); lastgoal = area->m_center; + last_area = area; lastent = ent->m_IDX; return true; } @@ -527,11 +531,12 @@ bool NavToEnemy() else area = FindNearestValidByDist(ent->m_vecOrigin(), 200, 1000, true); - if (area) + if (area && (area == last_area && nav::ReadyForCommands)) { nav::navTo(area->m_center, 1337, true, false); lastgoal = area->m_center; lastent = ent->m_IDX; + last_area = area; return true; } else if ((lastgoal.x > 1.0f || lastgoal.x < -1.0f) && @@ -799,7 +804,7 @@ static HookedFunction }); if (!sorted_ticks[5].tickcount || - nav::navTo(sorted_ticks[5].entorigin, false, + !nav::navTo(sorted_ticks[5].entorigin, false, false)) if (!nav::navTo(tar->m_vecOrigin(), 5, true, false)) diff --git a/src/helpers.cpp b/src/helpers.cpp index 174a56a5..063c0cb2 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -877,7 +877,7 @@ float DistToSqr(CachedEntity *entity) void Patch(void *address, void *patch, size_t length) { - void *page = (void *) ((uintptr_t) address & ~0xFFF); + void *page = (void *) ((uint64_t) address & ~0xFFF); logging::Info("mprotect: %d", mprotect(page, 0xFFF, PROT_READ | PROT_WRITE | PROT_EXEC)); memcpy(address, patch, length); @@ -932,11 +932,18 @@ bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity) rspeed = 1980.0f; break; } + case CL_CLASS(CTFParticleCannon): + case CL_CLASS(CTFRocketLauncher_AirStrike): case CL_CLASS(CTFRocketLauncher): { rspeed = 1100.0f; break; } + case CL_CLASS(CTFCannon): + { + rspeed = 1400.0f; + break; + } case CL_CLASS(CTFGrenadeLauncher): { IF_GAME(IsTF2()) @@ -953,7 +960,7 @@ bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity) } case CL_CLASS(CTFPipebombLauncher): { - float chargebegin = *((float *) ((unsigned) RAW_ENT(LOCAL_W) + 3152)); + float chargebegin = *((float *) ((uint64_t) RAW_ENT(LOCAL_W) + 3152)); float chargetime = g_GlobalVars->curtime - chargebegin; rspeed = (fminf(fmaxf(chargetime / 4.0f, 0.0f), 1.0f) * 1500.0f) + 900.0f; @@ -972,6 +979,7 @@ bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity) 0.5); break; } + case CL_CLASS(CTFBat_Giftwrap): case CL_CLASS(CTFBat_Wood): { rspeed = 3000.0f; diff --git a/src/hooks/CreateMove.cpp b/src/hooks/CreateMove.cpp index d14ac150..368b8b0a 100644 --- a/src/hooks/CreateMove.cpp +++ b/src/hooks/CreateMove.cpp @@ -223,23 +223,41 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, } hooked_methods::CreateMove(); + static bool firstcall = false; + static float interp_f = 0.0f; + static int min_interp = 0; + static float ratio = 0; if (nolerp) { // current_user_cmd->tick_count += 1; + if (!firstcall) + min_interp = sv_client_min_interp_ratio->GetInt(); if (sv_client_min_interp_ratio->GetInt() != -1) { // sv_client_min_interp_ratio->m_nFlags = 0; sv_client_min_interp_ratio->SetValue(-1); } + if (!firstcall) + interp_f = cl_interp->m_fValue; if (cl_interp->m_fValue != 0) { cl_interp->SetValue(0); cl_interp->m_fValue = 0.0f; cl_interp->m_nValue = 0; } + if (!firstcall) + ratio = cl_interp_ratio->GetInt(); if (cl_interp_ratio->GetInt() != 0) cl_interp_ratio->SetValue(0); // if (cl_interpolate->GetInt() != 0) cl_interpolate->SetValue(0); + firstcall = true; + } + else if (!firstcall && !*nolerp) + { + sv_client_min_interp_ratio->SetValue(min_interp); + cl_interp->SetValue(interp_f); + cl_interp_ratio->SetValue(ratio); + firstcall = true; } if (!g_Settings.bInvalid && CE_GOOD(g_pLocalPlayer->entity))