add hurt conds to player and bulding conditions, add crit and minicrit conds to projectile conditions

This commit is contained in:
rei-2
2025-10-12 17:04:49 -04:00
parent 085068c25a
commit 2ac70d082a
3 changed files with 114 additions and 46 deletions
+3 -3
View File
@@ -606,17 +606,17 @@ void CMenu::MenuVisuals(int iTab)
Divider(H::Draw.Scale(), H::Draw.Scale(8), -H::Draw.Scale());
PushTransparent(!(tGroup.m_iTargets & TargetsEnum::Players));
{
FDropdown("Players", &tGroup.m_iPlayers, { "Scout", "Soldier", "Pyro", "Demoman", "Heavy", "Engineer", "Medic", "Sniper", "Spy", "##Divider", "Invulnerable", "Crits", "Invisible", "Disguise" }, {}, FDropdownEnum::Multi, 0, "All");
FDropdown("Players", &tGroup.m_iPlayers, { "Scout", "Soldier", "Pyro", "Demoman", "Heavy", "Engineer", "Medic", "Sniper", "Spy", "##Divider", "Invulnerable", "Crits", "Invisible", "Disguise", "Hurt" }, {}, FDropdownEnum::Multi, 0, "All");
}
PopTransparent();
PushTransparent(!(tGroup.m_iTargets & TargetsEnum::Buildings));
{
FDropdown("Buildings", &tGroup.m_iBuildings, { "Sentry", "Dispenser", "Teleporter" }, {}, FDropdownEnum::Multi, 0, "All");
FDropdown("Buildings", &tGroup.m_iBuildings, { "Sentry", "Dispenser", "Teleporter", "##Divider", "Hurt" }, {}, FDropdownEnum::Multi, 0, "All");
}
PopTransparent();
PushTransparent(!(tGroup.m_iTargets & TargetsEnum::Projectiles));
{
FDropdown("Projectiles", &tGroup.m_iProjectiles, { "Rocket", "Sticky", "Pipe", "Arrow", "Heal", "Flare", "Fire", "Repair", "Cleaver", "Milk", "Jarate", "Gas", "Bauble", "Baseball", "Energy", "Short circuit", "Meteor shower", "Lightning", "Fireball", "Bomb", "Bats", "Pumpkin", "Monoculus", "Skeleton", "Misc" }, {}, FDropdownEnum::Multi, 0, "All");
FDropdown("Projectiles", &tGroup.m_iProjectiles, { "Rocket", "Sticky", "Pipe", "Arrow", "Heal", "Flare", "Fire", "Repair", "Cleaver", "Milk", "Jarate", "Gas", "Bauble", "Baseball", "Energy", "Short circuit", "Meteor shower", "Lightning", "Fireball", "Bomb", "Bats", "Pumpkin", "Monoculus", "Skeleton", "Misc", "##Divider", "Crit", "Minicrit" }, {}, FDropdownEnum::Multi, 0, "All");
}
PopTransparent();
} EndSection();
+108 -40
View File
@@ -71,7 +71,8 @@ static inline bool ShouldTargetPlayer(Group_t& tGroup, int iBit, CBaseEntity* pE
if (tGroup.m_iPlayers & PlayerEnum::Invulnerable && !pPlayer->IsInvulnerable()
|| tGroup.m_iPlayers & PlayerEnum::Crits && !pPlayer->IsCritBoosted()
|| tGroup.m_iPlayers & PlayerEnum::Invisible && !pPlayer->IsInvisible()
|| tGroup.m_iPlayers & PlayerEnum::Disguise && !pPlayer->InCond(TF_COND_DISGUISED))
|| tGroup.m_iPlayers & PlayerEnum::Disguise && !pPlayer->InCond(TF_COND_DISGUISED)
|| tGroup.m_iPlayers & PlayerEnum::Hurt && pPlayer->m_iHealth() >= pPlayer->GetMaxHealth())
return false;
}
}
@@ -84,17 +85,29 @@ static inline bool ShouldTargetBuilding(Group_t& tGroup, int iBit, CBaseEntity*
if (!(tGroup.m_iTargets & iBit))
return false;
auto pBuilding = pEntity->As<CBaseObject>();
if (!pBuilding->m_iHealth() || pBuilding->m_bCarried())
return false;
if (tGroup.m_iBuildings)
{
int iFlag = 0;
switch (pEntity->GetClassID())
if (tGroup.m_iBuildings & BuildingEnum::Classes)
{
case ETFClassID::CObjectSentrygun: iFlag = BuildingEnum::Sentry; break;
case ETFClassID::CObjectDispenser: iFlag = BuildingEnum::Dispenser; break;
case ETFClassID::CObjectTeleporter: iFlag = BuildingEnum::Teleporter; break;
int iFlag = 0;
switch (pBuilding->GetClassID())
{
case ETFClassID::CObjectSentrygun: iFlag = BuildingEnum::Sentry; break;
case ETFClassID::CObjectDispenser: iFlag = BuildingEnum::Dispenser; break;
case ETFClassID::CObjectTeleporter: iFlag = BuildingEnum::Teleporter; break;
}
if (!(tGroup.m_iBuildings & iFlag))
return false;
}
if (tGroup.m_iBuildings & BuildingEnum::Conds)
{
if (tGroup.m_iBuildings & BuildingEnum::Hurt && pBuilding->m_iHealth() >= pBuilding->m_iMaxHealth())
return false;
}
if (!(tGroup.m_iBuildings & iFlag))
return false;
}
return ShouldTargetOwner(tGroup, iBit, pOwner, pEntity, pLocal);
@@ -107,40 +120,95 @@ static inline bool ShouldTargetProjectile(Group_t& tGroup, int iBit, CBaseEntity
if (tGroup.m_iProjectiles)
{
int iFlag = ProjectileEnum::Misc;
switch (pEntity->GetClassID())
if (tGroup.m_iProjectiles & ProjectileEnum::Classes)
{
case ETFClassID::CTFProjectile_Rocket:
case ETFClassID::CTFProjectile_EnergyBall:
case ETFClassID::CTFProjectile_SentryRocket: iFlag = ProjectileEnum::Rocket; break;
case ETFClassID::CTFGrenadePipebombProjectile: iFlag = pEntity->As<CTFGrenadePipebombProjectile>()->HasStickyEffects() ? ProjectileEnum::Sticky : ProjectileEnum::Pipe; break;
case ETFClassID::CTFProjectile_Arrow: iFlag = pEntity->As<CTFProjectile_Arrow>()->m_iProjectileType() == TF_PROJECTILE_BUILDING_REPAIR_BOLT ? ProjectileEnum::Repair : ProjectileEnum::Arrow; break;
case ETFClassID::CTFProjectile_HealingBolt: iFlag = ProjectileEnum::Heal; break;
case ETFClassID::CTFProjectile_Flare: iFlag = ProjectileEnum::Flare; break;
case ETFClassID::CTFProjectile_BallOfFire: iFlag = ProjectileEnum::Fire; break;
case ETFClassID::CTFProjectile_Cleaver: iFlag = ProjectileEnum::Cleaver; break;
case ETFClassID::CTFProjectile_JarMilk:
case ETFClassID::CTFProjectile_ThrowableBreadMonster: iFlag = ProjectileEnum::Milk; break;
case ETFClassID::CTFProjectile_Jar: iFlag = ProjectileEnum::Jarate; break;
case ETFClassID::CTFProjectile_JarGas: iFlag = ProjectileEnum::Gas; break;
case ETFClassID::CTFBall_Ornament: iFlag = ProjectileEnum::Bauble; break;
case ETFClassID::CTFStunBall: iFlag = ProjectileEnum::Baseball; break;
case ETFClassID::CTFProjectile_EnergyRing: iFlag = ProjectileEnum::Energy; break;
case ETFClassID::CTFProjectile_MechanicalArmOrb: iFlag = ProjectileEnum::ShortCircuit; break;
case ETFClassID::CTFProjectile_SpellMeteorShower: iFlag = ProjectileEnum::MeteorShower; break;
case ETFClassID::CTFProjectile_SpellLightningOrb: iFlag = ProjectileEnum::Lightning; break;
case ETFClassID::CTFProjectile_SpellFireball: iFlag = ProjectileEnum::Fireball; break;
case ETFClassID::CTFWeaponBaseMerasmusGrenade: iFlag = ProjectileEnum::Bomb; break;
case ETFClassID::CTFProjectile_SpellBats:
case ETFClassID::CTFProjectile_SpellKartBats: iFlag = ProjectileEnum::Bats; break;
case ETFClassID::CTFProjectile_SpellMirv:
case ETFClassID::CTFProjectile_SpellPumpkin: iFlag = ProjectileEnum::Pumpkin; break;
case ETFClassID::CTFProjectile_SpellSpawnBoss: iFlag = ProjectileEnum::Monoculus; break;
case ETFClassID::CTFProjectile_SpellSpawnHorde:
case ETFClassID::CTFProjectile_SpellSpawnZombie: iFlag = ProjectileEnum::Skeleton; break;
int iFlag = ProjectileEnum::Misc;
switch (pEntity->GetClassID())
{
case ETFClassID::CTFProjectile_Rocket:
case ETFClassID::CTFProjectile_EnergyBall:
case ETFClassID::CTFProjectile_SentryRocket: iFlag = ProjectileEnum::Rocket; break;
case ETFClassID::CTFGrenadePipebombProjectile: iFlag = pEntity->As<CTFGrenadePipebombProjectile>()->HasStickyEffects() ? ProjectileEnum::Sticky : ProjectileEnum::Pipe; break;
case ETFClassID::CTFProjectile_Arrow: iFlag = pEntity->As<CTFProjectile_Arrow>()->m_iProjectileType() == TF_PROJECTILE_BUILDING_REPAIR_BOLT ? ProjectileEnum::Repair : ProjectileEnum::Arrow; break;
case ETFClassID::CTFProjectile_HealingBolt: iFlag = ProjectileEnum::Heal; break;
case ETFClassID::CTFProjectile_Flare: iFlag = ProjectileEnum::Flare; break;
case ETFClassID::CTFProjectile_BallOfFire: iFlag = ProjectileEnum::Fire; break;
case ETFClassID::CTFProjectile_Cleaver: iFlag = ProjectileEnum::Cleaver; break;
case ETFClassID::CTFProjectile_JarMilk:
case ETFClassID::CTFProjectile_ThrowableBreadMonster: iFlag = ProjectileEnum::Milk; break;
case ETFClassID::CTFProjectile_Jar: iFlag = ProjectileEnum::Jarate; break;
case ETFClassID::CTFProjectile_JarGas: iFlag = ProjectileEnum::Gas; break;
case ETFClassID::CTFBall_Ornament: iFlag = ProjectileEnum::Bauble; break;
case ETFClassID::CTFStunBall: iFlag = ProjectileEnum::Baseball; break;
case ETFClassID::CTFProjectile_EnergyRing: iFlag = ProjectileEnum::Energy; break;
case ETFClassID::CTFProjectile_MechanicalArmOrb: iFlag = ProjectileEnum::ShortCircuit; break;
case ETFClassID::CTFProjectile_SpellMeteorShower: iFlag = ProjectileEnum::MeteorShower; break;
case ETFClassID::CTFProjectile_SpellLightningOrb: iFlag = ProjectileEnum::Lightning; break;
case ETFClassID::CTFProjectile_SpellFireball: iFlag = ProjectileEnum::Fireball; break;
case ETFClassID::CTFWeaponBaseMerasmusGrenade: iFlag = ProjectileEnum::Bomb; break;
case ETFClassID::CTFProjectile_SpellBats:
case ETFClassID::CTFProjectile_SpellKartBats: iFlag = ProjectileEnum::Bats; break;
case ETFClassID::CTFProjectile_SpellMirv:
case ETFClassID::CTFProjectile_SpellPumpkin: iFlag = ProjectileEnum::Pumpkin; break;
case ETFClassID::CTFProjectile_SpellSpawnBoss: iFlag = ProjectileEnum::Monoculus; break;
case ETFClassID::CTFProjectile_SpellSpawnHorde:
case ETFClassID::CTFProjectile_SpellSpawnZombie: iFlag = ProjectileEnum::Skeleton; break;
}
if (!(tGroup.m_iProjectiles & iFlag))
return false;
}
if (tGroup.m_iProjectiles & ProjectileEnum::Conds)
{
bool bCrit = false, bMinicrit = false;
switch (pEntity->GetClassID())
{
case ETFClassID::CTFWeaponBaseMerasmusGrenade:
case ETFClassID::CTFGrenadePipebombProjectile:
case ETFClassID::CTFStunBall:
case ETFClassID::CTFBall_Ornament:
case ETFClassID::CTFProjectile_Jar:
case ETFClassID::CTFProjectile_Cleaver:
case ETFClassID::CTFProjectile_JarGas:
case ETFClassID::CTFProjectile_JarMilk:
case ETFClassID::CTFProjectile_SpellBats:
case ETFClassID::CTFProjectile_SpellKartBats:
case ETFClassID::CTFProjectile_SpellMeteorShower:
case ETFClassID::CTFProjectile_SpellMirv:
case ETFClassID::CTFProjectile_SpellPumpkin:
case ETFClassID::CTFProjectile_SpellSpawnBoss:
case ETFClassID::CTFProjectile_SpellSpawnHorde:
case ETFClassID::CTFProjectile_SpellSpawnZombie:
bCrit = pEntity->As<CTFWeaponBaseGrenadeProj>()->m_bCritical();
bMinicrit = pEntity->As<CTFWeaponBaseGrenadeProj>()->m_iDeflected() && (pEntity->GetClassID() != ETFClassID::CTFGrenadePipebombProjectile || !pEntity->GetAbsVelocity().IsZero());
break;
case ETFClassID::CTFProjectile_Arrow:
case ETFClassID::CTFProjectile_HealingBolt:
bCrit = pEntity->As<CTFProjectile_Arrow>()->m_bCritical();
bMinicrit = pEntity->As<CTFBaseRocket>()->m_iDeflected();
break;
case ETFClassID::CTFProjectile_Rocket:
case ETFClassID::CTFProjectile_BallOfFire:
case ETFClassID::CTFProjectile_MechanicalArmOrb:
case ETFClassID::CTFProjectile_SentryRocket:
case ETFClassID::CTFProjectile_SpellFireball:
case ETFClassID::CTFProjectile_SpellLightningOrb:
bCrit = pEntity->As<CTFProjectile_Rocket>()->m_bCritical();
bMinicrit = pEntity->As<CTFBaseRocket>()->m_iDeflected();
break;
case ETFClassID::CTFProjectile_EnergyBall:
bMinicrit = pEntity->As<CTFProjectile_EnergyBall>()->m_bChargedShot() || pEntity->As<CTFBaseRocket>()->m_iDeflected();
break;
case ETFClassID::CTFProjectile_Flare:
bCrit = pEntity->As<CTFProjectile_Flare>()->m_bCritical();
bMinicrit = pEntity->As<CTFBaseRocket>()->m_iDeflected();
break;
}
if (/*tGroup.m_iProjectiles & (ProjectileEnum::Crit | ProjectileEnum::Minicrit)
&&*/ !(tGroup.m_iProjectiles & ProjectileEnum::Crit && bCrit)
&& !(tGroup.m_iProjectiles & ProjectileEnum::Minicrit && bMinicrit))
return false;
}
if (!(tGroup.m_iProjectiles & iFlag))
return false;
}
return ShouldTargetOwner(tGroup, iBit, pOwner, pEntity, pLocal);
+3 -3
View File
@@ -3,9 +3,9 @@
Enum(Targets, Players = 1 << 0, Buildings = 1 << 1, Projectiles = 1 << 2, Ragdolls = 1 << 3, Objective = 1 << 4, NPCs = 1 << 5, Health = 1 << 6, Ammo = 1 << 7, Money = 1 << 8, Powerups = 1 << 9, Spellbook = 1 << 10, Bombs = 1 << 11, Gargoyle = 1 << 12, FakeAngle = 1 << 13, ViewmodelWeapon = 1 << 14, ViewmodelHands = 1 << 15, ESP = ~(Ragdolls | FakeAngle | ViewmodelWeapon | ViewmodelHands), Occluded = ~(FakeAngle | ViewmodelWeapon | ViewmodelHands))
Enum(Conditions, Enemy = 1 << 0, Team = 1 << 1, BLU = 1 << 2, RED = 1 << 3, Local = 1 << 4, Friends = 1 << 5, Party = 1 << 6, Priority = 1 << 7, Target = 1 << 8, Dormant = 1 << 9)
Enum(Player, Scout = 1 << 0, Soldier = 1 << 1, Pyro = 1 << 2, Demoman = 1 << 3, Heavy = 1 << 4, Engineer = 1 << 5, Medic = 1 << 6, Sniper = 1 << 7, Spy = 1 << 8, Invulnerable = 1 << 9, Crits = 1 << 10, Invisible = 1 << 11, Disguise = 1 << 12, Classes = Scout | Soldier | Pyro | Demoman | Heavy | Engineer | Medic | Sniper | Spy, Conds = Invulnerable | Crits | Invisible | Disguise)
Enum(Building, Sentry = 1 << 0, Dispenser = 1 << 1, Teleporter = 1 << 2)
Enum(Projectile, Rocket = 1 << 0, Sticky = 1 << 1, Pipe = 1 << 2, Arrow = 1 << 3, Heal = 1 << 4, Flare = 1 << 5, Fire = 1 << 6, Repair = 1 << 7, Cleaver = 1 << 8, Milk = 1 << 9, Jarate = 1 << 10, Gas = 1 << 11, Bauble = 1 << 12, Baseball = 1 << 13, Energy = 1 << 14, ShortCircuit = 1 << 15, MeteorShower = 1 << 16, Lightning = 1 << 17, Fireball = 1 << 18, Bomb = 1 << 19, Bats = 1 << 20, Pumpkin = 1 << 21, Monoculus = 1 << 22, Skeleton = 1 << 23, Misc = 1 << 24)
Enum(Player, Scout = 1 << 0, Soldier = 1 << 1, Pyro = 1 << 2, Demoman = 1 << 3, Heavy = 1 << 4, Engineer = 1 << 5, Medic = 1 << 6, Sniper = 1 << 7, Spy = 1 << 8, Invulnerable = 1 << 9, Crits = 1 << 10, Invisible = 1 << 11, Disguise = 1 << 12, Hurt = 1 << 13, Classes = Scout | Soldier | Pyro | Demoman | Heavy | Engineer | Medic | Sniper | Spy, Conds = Invulnerable | Crits | Invisible | Disguise | Hurt)
Enum(Building, Sentry = 1 << 0, Dispenser = 1 << 1, Teleporter = 1 << 2, Hurt = 1 << 3, Classes = Sentry | Dispenser | Teleporter, Conds = Hurt)
Enum(Projectile, Rocket = 1 << 0, Sticky = 1 << 1, Pipe = 1 << 2, Arrow = 1 << 3, Heal = 1 << 4, Flare = 1 << 5, Fire = 1 << 6, Repair = 1 << 7, Cleaver = 1 << 8, Milk = 1 << 9, Jarate = 1 << 10, Gas = 1 << 11, Bauble = 1 << 12, Baseball = 1 << 13, Energy = 1 << 14, ShortCircuit = 1 << 15, MeteorShower = 1 << 16, Lightning = 1 << 17, Fireball = 1 << 18, Bomb = 1 << 19, Bats = 1 << 20, Pumpkin = 1 << 21, Monoculus = 1 << 22, Skeleton = 1 << 23, Misc = 1 << 24, Crit = 1 << 25, Minicrit = 1 << 26, Classes = Rocket | Sticky | Pipe | Arrow | Heal | Flare | Fire | Repair | Cleaver | Milk | Jarate | Gas | Bauble | Baseball | Energy | ShortCircuit | MeteorShower | Lightning | Fireball | Bomb | Bats | Pumpkin | Monoculus | Skeleton | Misc, Conds = Crit | Minicrit)
Enum(ESP, Name = 1 << 0, Box = 1 << 1, Distance = 1 << 2, Bones = 1 << 3, HealthBar = 1 << 4, HealthText = 1 << 5, UberBar = 1 << 6, UberText = 1 << 7, ClassIcon = 1 << 8, ClassText = 1 << 9, WeaponIcon = 1 << 10, WeaponText = 1 << 11, Priority = 1 << 12, Labels = 1 << 13, Buffs = 1 << 14, Debuffs = 1 << 15, Flags = 1 << 16, LagCompensation = 1 << 17, Ping = 1 << 18, KDR = 1 << 19, Owner = 1 << 20, Level = 1 << 21, AmmoBars = 1 << 22, AmmoText = 1 << 23, IntelReturnTime = 1 << 24)
Enum(Backtrack, Last = 1 << 0, First = 1 << 1, Always = 1 << 2, IgnoreZ = 1 << 3)