Autoheal fixes

Fixes #723
This commit is contained in:
TotallyNotElite 2019-03-24 13:18:37 +01:00
parent c248da74da
commit acb8e9e210
3 changed files with 29 additions and 13 deletions

View File

@ -123,32 +123,44 @@ int FireDangerValue(CachedEntity *patient)
// Find nearby pyros // Find nearby pyros
if (!auto_vacc_fire_checking) if (!auto_vacc_fire_checking)
return 0; return 0;
uint8_t should_switch = 0;
if (auto_vacc_pop_if_pyro) if (auto_vacc_pop_if_pyro)
{ {
for (int i = 1; i < 32 && i < HIGHEST_ENTITY; i++) for (int i = 1; i < g_IEngine->GetMaxClients(); i++)
{ {
CachedEntity *ent = ENTITY(i); CachedEntity *ent = ENTITY(i);
if (CE_BAD(ent)) if (CE_BAD(ent))
continue; continue;
if (!ent->m_bEnemy()) if (!ent->m_bEnemy())
continue; continue;
if (g_pPlayerResource->GetClass(ent) != tf_pyro) if (!ent->m_bAlivePlayer())
continue; continue;
if (CE_BYTE(ent, netvar.iLifeState)) if (!player_tools::shouldTarget(ent))
continue;
if (g_pPlayerResource->GetClass(ent) != tf_pyro)
continue; continue;
if (patient->m_vecOrigin().DistTo(ent->m_vecOrigin()) > (int) auto_vacc_pyro_range) if (patient->m_vecOrigin().DistTo(ent->m_vecOrigin()) > (int) auto_vacc_pyro_range)
continue; continue;
if ((int) auto_vacc_pop_if_pyro == 2) if (*auto_vacc_pop_if_pyro == 2)
return 2; return 2;
IClientEntity *pyro_weapon = g_IEntityList->GetClientEntity(CE_INT(ent, netvar.hActiveWeapon) & 0xFFF); CachedEntity *weapon = ENTITY(HandleToIDX(CE_INT(ent, netvar.hActiveWeapon)));
return (pyro_weapon && pyro_weapon->GetClientClass()->m_ClassID == CL_CLASS(CTFFlameThrower)) ? 2 : 0; if (CE_GOOD(weapon) && weapon->m_iClassID() == CL_CLASS(CTFFlameThrower))
{
if (HasCondition<TFCond_OnFire>(patient))
return 2;
else
should_switch = 1;
}
} }
} }
if (HasCondition<TFCond_OnFire>(patient)) if (*auto_vacc_check_on_fire && HasCondition<TFCond_OnFire>(patient))
{ {
return (bool) auto_vacc_check_on_fire; if (patient->m_iHealth() < 35)
return 2;
else
should_switch = 1;
} }
return 0; return should_switch;
} }
int BlastDangerValue(CachedEntity *patient) int BlastDangerValue(CachedEntity *patient)
@ -186,7 +198,7 @@ int BlastDangerValue(CachedEntity *patient)
} }
return 1; return 1;
} }
// Find crit rockets/pipes nearby // Find rockets/pipes nearby
for (int i = 32; i < HIGHEST_ENTITY; i++) for (int i = 32; i < HIGHEST_ENTITY; i++)
{ {
CachedEntity *ent = ENTITY(i); CachedEntity *ent = ENTITY(i);
@ -196,6 +208,8 @@ int BlastDangerValue(CachedEntity *patient)
continue; continue;
if (ent->m_Type() != ENTITY_PROJECTILE) if (ent->m_Type() != ENTITY_PROJECTILE)
continue; continue;
if (ent->m_iClassID() == CL_CLASS(CTFProjectile_Flare))
continue;
if (patient->m_vecOrigin().DistTo(ent->m_vecOrigin()) > (int) auto_vacc_proj_danger_range) if (patient->m_vecOrigin().DistTo(ent->m_vecOrigin()) > (int) auto_vacc_proj_danger_range)
continue; continue;
proj_data_array.push_back(proj_data_s{ i, ent->m_vecOrigin() }); proj_data_array.push_back(proj_data_s{ i, ent->m_vecOrigin() });
@ -280,10 +294,12 @@ void DoResistSwitching()
{ {
if (vaccinator_change_timer == 1 && *default_resistance) if (vaccinator_change_timer == 1 && *default_resistance)
{ {
SetResistance(*default_resistance + 1); SetResistance(*default_resistance - 1);
} }
vaccinator_change_timer--; vaccinator_change_timer--;
} }
else
vaccinator_change_timer = *change_timer;
if (!vaccinator_change_stage) if (!vaccinator_change_stage)
return; return;
if (CurrentResistance() == vaccinator_ideal_resist) if (CurrentResistance() == vaccinator_ideal_resist)

View File

@ -956,7 +956,7 @@ bool IsBuildingVisible(CachedEntity *ent)
int HandleToIDX(int handle) int HandleToIDX(int handle)
{ {
return handle & 0x777; return handle & 0xFFF;
} }
void fClampAngle(Vector &qaAng) void fClampAngle(Vector &qaAng)

View File

@ -19,7 +19,7 @@ static settings::Int port("irc.port", "8080");
static settings::String commandandcontrol_channel("irc.cc.channel", ""); static settings::String commandandcontrol_channel("irc.cc.channel", "");
static settings::String commandandcontrol_password("irc.cc.password", ""); static settings::String commandandcontrol_password("irc.cc.password", "");
static settings::Bool transfer_leader_on_kick("irc.cc.leader-transfer", "true"); static settings::Bool transfer_leader_on_kick("irc.cc.leader-transfer", "false");
static settings::Bool botonly("irc.cc.command-bot-only", "true"); static settings::Bool botonly("irc.cc.command-bot-only", "true");
static settings::Bool irc_party{ "irc.cc.party", "false" }; static settings::Bool irc_party{ "irc.cc.party", "false" };
static settings::Bool answer_steam{ "irc.cc.respondparty", "false" }; static settings::Bool answer_steam{ "irc.cc.respondparty", "false" };