gui update and navbot path optimize

This commit is contained in:
LightCat 2018-11-15 17:58:42 +01:00
parent b666375e4c
commit 13b680dee4
4 changed files with 38 additions and 7 deletions

View File

@ -67,7 +67,7 @@
<AutoVariable width="fill" target="navbot.enable" label="Enable Navbot"/>
<AutoVariable width="fill" target="navbot.scout-mode" label="Enable Scout Mode"/>
<AutoVariable width="fill" target="navbot.spy-mode" label="Enable Spy Mode"/>
<AutoVariable width="fill" target="navbot.heavy-mode" label="General Mode (only use if your class is not listed)"/>
<AutoVariable width="fill" target="navbot.heavy-mode" label="General Mode"/>
<AutoVariable width="fill" target="navbot.primary-only" label="Best Weapon only"/>
<AutoVariable width="fill" target="navbot.jump-distance" label="Jump Distance"/>
<AutoVariable width="fill" target="navbot.target-sentry" label="Try to target sentries"/>

View File

@ -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))

View File

@ -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;

View File

@ -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))