mirror of
https://github.com/rei-2/Amalgam
synced 2026-10-10 12:53:10 +08:00
non lethal warning
handle can attack better fix oversight and infinite loop with streamer mode
This commit is contained in:
@@ -16,6 +16,7 @@ bool CAimbot::ShouldRun(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
|| !pLocal->IsAlive()
|
||||
|| pLocal->IsAGhost()
|
||||
|| pLocal->IsTaunting()
|
||||
|| pLocal->InCond(TF_COND_STUNNED) && pLocal->m_iStunFlags() & (TF_STUN_CONTROLS | TF_STUN_LOSER_STATE)
|
||||
|| pLocal->m_bFeignDeathReady()
|
||||
|| pLocal->InCond(TF_COND_PHASE)
|
||||
|| pLocal->InCond(TF_COND_STEALTHED)
|
||||
|
||||
@@ -133,7 +133,6 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
else if (Vars::Misc::Movement::AutoRocketJump.Value || Vars::Misc::Movement::AutoCTap.Value)
|
||||
pCmd->buttons &= ~IN_ATTACK2; // fix for retarded issue
|
||||
|
||||
|
||||
if (m_iFrame == -1 && (pWeapon->m_iItemDefinitionIndex() == Soldier_m_TheBeggarsBazooka ? G::Attacking == 1 : G::CanPrimaryAttack || G::Reloading)
|
||||
&& SetAngles(pLocal, pWeapon, pCmd))
|
||||
{
|
||||
|
||||
@@ -852,6 +852,13 @@ void CMenu::MenuVisuals()
|
||||
FSlider("Thirdperson right", Vars::Visuals::ThirdPerson::Right, -500.f, 500.f, 5.f, "%g", FSlider_Precision);
|
||||
FSlider("Thirdperson up", Vars::Visuals::ThirdPerson::Up, -500.f, 500.f, 5.f, "%g", FSlider_Precision);
|
||||
} EndSection();
|
||||
if (Vars::Debug::Info.Value)
|
||||
{
|
||||
if (Section("debug"))
|
||||
{
|
||||
FToggle("thirdperson scales", Vars::Visuals::ThirdPerson::Scale);
|
||||
} EndSection();
|
||||
}
|
||||
if (Section("Out of FOV arrows"))
|
||||
{
|
||||
FToggle("Enabled", Vars::Visuals::FOVArrows::Enabled);
|
||||
|
||||
@@ -12,6 +12,7 @@ bool CNoSpread::ShouldRun(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
|| !pLocal->IsAlive()
|
||||
|| pLocal->IsAGhost()
|
||||
|| pLocal->IsTaunting()
|
||||
|| pLocal->InCond(TF_COND_STUNNED) && pLocal->m_iStunFlags() & (TF_STUN_CONTROLS | TF_STUN_LOSER_STATE)
|
||||
|| pLocal->m_bFeignDeathReady()
|
||||
|| pLocal->InCond(TF_COND_PHASE)
|
||||
|| pLocal->InCond(TF_COND_STEALTHED)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "PlayerConditions.h"
|
||||
|
||||
std::vector<std::wstring> CPlayerConditions::Get(CTFPlayer* pEntity)
|
||||
std::vector<std::string> CPlayerConditions::Get(CTFPlayer* pEntity)
|
||||
{
|
||||
std::vector<std::wstring> vConditions = {};
|
||||
std::vector<std::string> vConditions = {};
|
||||
|
||||
{
|
||||
if (pEntity->InCond(TF_COND_CRITBOOSTED) ||
|
||||
@@ -16,337 +16,339 @@ std::vector<std::wstring> CPlayerConditions::Get(CTFPlayer* pEntity)
|
||||
pEntity->InCond(TF_COND_CRITBOOSTED_RAGE_BUFF) ||
|
||||
pEntity->InCond(TF_COND_CRITBOOSTED_CARD_EFFECT) ||
|
||||
pEntity->InCond(TF_COND_CRITBOOSTED_RUNE_TEMP))
|
||||
vConditions.emplace_back(L"CRITS");
|
||||
vConditions.emplace_back("CRITS");
|
||||
|
||||
if (pEntity->InCond(TF_COND_ENERGY_BUFF) ||
|
||||
pEntity->InCond(TF_COND_NOHEALINGDAMAGEBUFF))
|
||||
vConditions.emplace_back(L"MINI CRITS");
|
||||
vConditions.emplace_back("MINI CRITS");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MINICRITBOOSTED_ON_KILL))
|
||||
vConditions.emplace_back(L"MINI CRITS ON KILL");
|
||||
vConditions.emplace_back("MINI CRITS ON KILL");
|
||||
|
||||
if (pEntity->InCond(TF_COND_OFFENSEBUFF))
|
||||
vConditions.emplace_back(L"OFFENSE BUFF");
|
||||
vConditions.emplace_back("OFFENSE BUFF");
|
||||
|
||||
if (pEntity->InCond(TF_COND_TMPDAMAGEBONUS))
|
||||
vConditions.emplace_back(L"DAMAGE BONUS");
|
||||
vConditions.emplace_back("DAMAGE BONUS");
|
||||
|
||||
if (pEntity->InCond(TF_COND_INVULNERABLE) ||
|
||||
pEntity->InCond(TF_COND_INVULNERABLE_HIDE_UNLESS_DAMAGED) ||
|
||||
pEntity->InCond(TF_COND_INVULNERABLE_USER_BUFF) ||
|
||||
pEntity->InCond(TF_COND_INVULNERABLE_CARD_EFFECT))
|
||||
vConditions.emplace_back(L"INVULNERABLE");
|
||||
vConditions.emplace_back("INVULNERABLE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_INVULNERABLE_WEARINGOFF))
|
||||
vConditions.emplace_back(L"INVULNERABLE-");
|
||||
vConditions.emplace_back("INVULNERABLE-");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DEFENSEBUFF))
|
||||
vConditions.emplace_back(L"DEFENSE BUFF");
|
||||
vConditions.emplace_back("DEFENSE BUFF");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DEFENSEBUFF_HIGH))
|
||||
vConditions.emplace_back(L"DEFENSE BUFF+");
|
||||
vConditions.emplace_back("DEFENSE BUFF+");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DEFENSEBUFF_NO_CRIT_BLOCK))
|
||||
vConditions.emplace_back(L"DEFENSE BUFF-");
|
||||
vConditions.emplace_back("DEFENSE BUFF-");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RADIUSHEAL) ||
|
||||
pEntity->InCond(TF_COND_HEALTH_BUFF) ||
|
||||
pEntity->InCond(TF_COND_RADIUSHEAL_ON_DAMAGE) ||
|
||||
pEntity->InCond(TF_COND_HALLOWEEN_HELL_HEAL))
|
||||
vConditions.emplace_back(L"HEAL");
|
||||
vConditions.emplace_back("HEAL");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MEGAHEAL) ||
|
||||
pEntity->InCond(TF_COND_HALLOWEEN_QUICK_HEAL))
|
||||
vConditions.emplace_back(L"HEAL+");
|
||||
vConditions.emplace_back("HEAL+");
|
||||
|
||||
if (pEntity->InCond(TF_COND_REGENONDAMAGEBUFF))
|
||||
vConditions.emplace_back(L"HEALTH ON DAMAGE");
|
||||
vConditions.emplace_back("HEALTH ON DAMAGE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HEALTH_OVERHEALED))
|
||||
vConditions.emplace_back(L"OVERHEAL");
|
||||
vConditions.emplace_back("OVERHEAL");
|
||||
|
||||
|
||||
|
||||
if (pEntity->InCond(TF_COND_MEDIGUN_UBER_BULLET_RESIST) ||
|
||||
pEntity->InCond(TF_COND_MEDIGUN_SMALL_BULLET_RESIST) ||
|
||||
pEntity->InCond(TF_COND_BULLET_IMMUNE))
|
||||
vConditions.emplace_back(L"BULLET");
|
||||
vConditions.emplace_back("BULLET");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MEDIGUN_UBER_BLAST_RESIST) ||
|
||||
pEntity->InCond(TF_COND_MEDIGUN_SMALL_BLAST_RESIST) ||
|
||||
pEntity->InCond(TF_COND_BLAST_IMMUNE))
|
||||
vConditions.emplace_back(L"BLAST");
|
||||
vConditions.emplace_back("BLAST");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MEDIGUN_UBER_FIRE_RESIST) ||
|
||||
pEntity->InCond(TF_COND_MEDIGUN_SMALL_FIRE_RESIST) ||
|
||||
pEntity->InCond(TF_COND_FIRE_IMMUNE))
|
||||
vConditions.emplace_back(L"FIRE");
|
||||
vConditions.emplace_back("FIRE");
|
||||
|
||||
|
||||
|
||||
if (pEntity->m_bFeignDeathReady())
|
||||
vConditions.emplace_back(L"DR");
|
||||
vConditions.emplace_back("DR");
|
||||
|
||||
if (pEntity->InCond(TF_COND_FEIGN_DEATH))
|
||||
vConditions.emplace_back(L"FEIGN");
|
||||
vConditions.emplace_back("FEIGN");
|
||||
|
||||
if (pEntity->InCond(TF_COND_STEALTHED))
|
||||
vConditions.emplace_back(L"CLOAK");
|
||||
vConditions.emplace_back("CLOAK");
|
||||
|
||||
if (pEntity->InCond(TF_COND_STEALTHED_USER_BUFF))
|
||||
vConditions.emplace_back(L"STEALTH");
|
||||
vConditions.emplace_back("STEALTH");
|
||||
|
||||
if (pEntity->InCond(TF_COND_STEALTHED_USER_BUFF_FADING))
|
||||
vConditions.emplace_back(L"STEALTH+");
|
||||
vConditions.emplace_back("STEALTH+");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DISGUISED))
|
||||
vConditions.emplace_back(L"DISGUISE");
|
||||
vConditions.emplace_back("DISGUISE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DISGUISING))
|
||||
vConditions.emplace_back(L"DISGUISING");
|
||||
vConditions.emplace_back("DISGUISING");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DISGUISE_WEARINGOFF))
|
||||
vConditions.emplace_back(L"UNDISGUISING");
|
||||
vConditions.emplace_back("UNDISGUISING");
|
||||
|
||||
if (pEntity->InCond(TF_COND_STEALTHED_BLINK))
|
||||
vConditions.emplace_back(L"BLINK");
|
||||
vConditions.emplace_back("BLINK");
|
||||
|
||||
|
||||
|
||||
if (pEntity->InCond(TF_COND_SPEED_BOOST) ||
|
||||
pEntity->InCond(TF_COND_HALLOWEEN_SPEED_BOOST))
|
||||
vConditions.emplace_back(L"SPEED BOOST");
|
||||
vConditions.emplace_back("SPEED BOOST");
|
||||
|
||||
if (pEntity->InCond(TF_COND_SODAPOPPER_HYPE))
|
||||
vConditions.emplace_back(L"HYPE");
|
||||
vConditions.emplace_back("HYPE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_SNIPERCHARGE_RAGE_BUFF))
|
||||
vConditions.emplace_back(L"FOCUS");
|
||||
vConditions.emplace_back("FOCUS");
|
||||
|
||||
if (pEntity->InCond(TF_COND_AIMING))
|
||||
vConditions.emplace_back(L"SLOWED");
|
||||
vConditions.emplace_back("SLOWED");
|
||||
|
||||
if (pEntity->InCond(TF_COND_ZOOMED))
|
||||
vConditions.emplace_back(L"ZOOM");
|
||||
vConditions.emplace_back("ZOOM");
|
||||
|
||||
if (pEntity->InCond(TF_COND_SHIELD_CHARGE))
|
||||
vConditions.emplace_back(L"CHARGING");
|
||||
vConditions.emplace_back("CHARGING");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DEMO_BUFF))
|
||||
vConditions.emplace_back(L"EYELANDER");
|
||||
vConditions.emplace_back("EYELANDER");
|
||||
|
||||
if (pEntity->InCond(TF_COND_PHASE))
|
||||
vConditions.emplace_back(L"BONK");
|
||||
vConditions.emplace_back("BONK");
|
||||
|
||||
if (pEntity->InCond(TF_COND_AFTERBURN_IMMUNE))
|
||||
vConditions.emplace_back(L"NO AFTERBURN");
|
||||
vConditions.emplace_back("NO AFTERBURN");
|
||||
|
||||
if (pEntity->InCond(TF_COND_BLASTJUMPING))
|
||||
vConditions.emplace_back(L"BLASTJUMP");
|
||||
vConditions.emplace_back("BLASTJUMP");
|
||||
|
||||
if (pEntity->InCond(TF_COND_ROCKETPACK))
|
||||
vConditions.emplace_back(L"ROCKETPACK");
|
||||
vConditions.emplace_back("ROCKETPACK");
|
||||
|
||||
if (pEntity->InCond(TF_COND_PARACHUTE_ACTIVE) ||
|
||||
pEntity->InCond(TF_COND_PARACHUTE_DEPLOYED))
|
||||
vConditions.emplace_back(L"PARACHUTE");
|
||||
vConditions.emplace_back("PARACHUTE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_OBSCURED_SMOKE))
|
||||
vConditions.emplace_back(L"DODGE");
|
||||
vConditions.emplace_back("DODGE");
|
||||
|
||||
|
||||
|
||||
if (pEntity->InCond(TF_COND_STUNNED) ||
|
||||
if (pEntity->InCond(TF_COND_STUNNED) && !(pEntity->m_iStunFlags() & (TF_STUN_CONTROLS | TF_STUN_LOSER_STATE)))
|
||||
vConditions.emplace_back("SLOWED");
|
||||
else if (pEntity->InCond(TF_COND_STUNNED) ||
|
||||
pEntity->InCond(TF_COND_MVM_BOT_STUN_RADIOWAVE))
|
||||
vConditions.emplace_back(L"STUN");
|
||||
vConditions.emplace_back("STUN");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MARKEDFORDEATH) ||
|
||||
pEntity->InCond(TF_COND_MARKEDFORDEATH_SILENT) ||
|
||||
pEntity->InCond(TF_COND_PASSTIME_PENALTY_DEBUFF))
|
||||
vConditions.emplace_back(L"MARKED FOR DEATH");
|
||||
vConditions.emplace_back("MARKED FOR DEATH");
|
||||
|
||||
if (pEntity->InCond(TF_COND_URINE))
|
||||
vConditions.emplace_back(L"JARATE");
|
||||
vConditions.emplace_back("JARATE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MAD_MILK))
|
||||
vConditions.emplace_back(L"MILK");
|
||||
vConditions.emplace_back("MILK");
|
||||
|
||||
if (pEntity->InCond(TF_COND_GAS))
|
||||
vConditions.emplace_back(L"GAS");
|
||||
vConditions.emplace_back("GAS");
|
||||
|
||||
if (pEntity->InCond(TF_COND_BURNING) ||
|
||||
pEntity->InCond(TF_COND_BURNING_PYRO))
|
||||
vConditions.emplace_back(L"BURN");
|
||||
vConditions.emplace_back("BURN");
|
||||
|
||||
if (pEntity->InCond(TF_COND_BLEEDING) ||
|
||||
pEntity->InCond(TF_COND_GRAPPLINGHOOK_BLEEDING))
|
||||
vConditions.emplace_back(L"BLEED");
|
||||
vConditions.emplace_back("BLEED");
|
||||
|
||||
if (pEntity->InCond(TF_COND_KNOCKED_INTO_AIR))
|
||||
vConditions.emplace_back(L"AIRBLAST");
|
||||
vConditions.emplace_back("AIRBLAST");
|
||||
|
||||
if (pEntity->InCond(TF_COND_AIR_CURRENT))
|
||||
vConditions.emplace_back(L"AIR");
|
||||
vConditions.emplace_back("AIR");
|
||||
|
||||
if (pEntity->InCond(TF_COND_LOST_FOOTING))
|
||||
vConditions.emplace_back(L"SLIDE");
|
||||
vConditions.emplace_back("SLIDE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HEALING_DEBUFF))
|
||||
vConditions.emplace_back(L"HEAL DEBUFF");
|
||||
vConditions.emplace_back("HEAL DEBUFF");
|
||||
|
||||
if (pEntity->InCond(TF_COND_CANNOT_SWITCH_FROM_MELEE) ||
|
||||
pEntity->InCond(TF_COND_MELEE_ONLY))
|
||||
vConditions.emplace_back(L"ONLY MELEE");
|
||||
vConditions.emplace_back("ONLY MELEE");
|
||||
|
||||
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_GIANT))
|
||||
vConditions.emplace_back(L"GIANT");
|
||||
vConditions.emplace_back("GIANT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_TINY))
|
||||
vConditions.emplace_back(L"TINY");
|
||||
vConditions.emplace_back("TINY");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_BOMB_HEAD))
|
||||
vConditions.emplace_back(L"BOMB");
|
||||
vConditions.emplace_back("BOMB");
|
||||
|
||||
if (pEntity->InCond(TF_COND_BALLOON_HEAD))
|
||||
vConditions.emplace_back(L"BALLOON");
|
||||
vConditions.emplace_back("BALLOON");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_GHOST_MODE))
|
||||
vConditions.emplace_back(L"GHOST");
|
||||
vConditions.emplace_back("GHOST");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_KART))
|
||||
vConditions.emplace_back(L"KART");
|
||||
vConditions.emplace_back("KART");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_KART_DASH))
|
||||
vConditions.emplace_back(L"DASH");
|
||||
vConditions.emplace_back("DASH");
|
||||
|
||||
if (pEntity->InCond(TF_COND_SWIMMING_CURSE) ||
|
||||
pEntity->InCond(TF_COND_SWIMMING_NO_EFFECTS))
|
||||
vConditions.emplace_back(L"SWIM");
|
||||
vConditions.emplace_back("SWIM");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_KART_CAGE))
|
||||
vConditions.emplace_back(L"CAGE");
|
||||
vConditions.emplace_back("CAGE");
|
||||
|
||||
|
||||
|
||||
// if (pEntity->InCond(TF_COND_HASRUNE))
|
||||
// vConditions.emplace_back(L"RUNE");
|
||||
// vConditions.emplace_back("RUNE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_POWERUPMODE_DOMINANT))
|
||||
vConditions.emplace_back(L"DOMINANT");
|
||||
vConditions.emplace_back("DOMINANT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_STRENGTH))
|
||||
vConditions.emplace_back(L"STRENGTH");
|
||||
vConditions.emplace_back("STRENGTH");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_HASTE))
|
||||
vConditions.emplace_back(L"HASTE");
|
||||
vConditions.emplace_back("HASTE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_REGEN))
|
||||
vConditions.emplace_back(L"REGEN");
|
||||
vConditions.emplace_back("REGEN");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_RESIST))
|
||||
vConditions.emplace_back(L"RESIST");
|
||||
vConditions.emplace_back("RESIST");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_VAMPIRE))
|
||||
vConditions.emplace_back(L"VAMPIRE");
|
||||
vConditions.emplace_back("VAMPIRE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_REFLECT))
|
||||
vConditions.emplace_back(L"REFLECT");
|
||||
vConditions.emplace_back("REFLECT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_PRECISION))
|
||||
vConditions.emplace_back(L"PRECISION");
|
||||
vConditions.emplace_back("PRECISION");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_AGILITY))
|
||||
vConditions.emplace_back(L"AGILITY");
|
||||
vConditions.emplace_back("AGILITY");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_KNOCKOUT))
|
||||
vConditions.emplace_back(L"KNOCKOUT");
|
||||
vConditions.emplace_back("KNOCKOUT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_IMBALANCE))
|
||||
vConditions.emplace_back(L"IMBALANCE");
|
||||
vConditions.emplace_back("IMBALANCE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_KING))
|
||||
vConditions.emplace_back(L"KING");
|
||||
vConditions.emplace_back("KING");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_PLAGUE))
|
||||
vConditions.emplace_back(L"PLAGUE");
|
||||
vConditions.emplace_back("PLAGUE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_RUNE_SUPERNOVA))
|
||||
vConditions.emplace_back(L"SUPERNOVA");
|
||||
vConditions.emplace_back("SUPERNOVA");
|
||||
|
||||
if (pEntity->InCond(TF_COND_PLAGUE))
|
||||
vConditions.emplace_back(L"PLAGUED");
|
||||
vConditions.emplace_back("PLAGUED");
|
||||
|
||||
if (pEntity->InCond(TF_COND_KING_BUFFED))
|
||||
vConditions.emplace_back(L"KING BUFF");
|
||||
vConditions.emplace_back("KING BUFF");
|
||||
|
||||
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_IN_HELL))
|
||||
vConditions.emplace_back(L"HELL");
|
||||
vConditions.emplace_back("HELL");
|
||||
|
||||
if (pEntity->InCond(TF_COND_PURGATORY))
|
||||
vConditions.emplace_back(L"PURGATORY");
|
||||
vConditions.emplace_back("PURGATORY");
|
||||
|
||||
if (pEntity->InCond(TF_COND_PASSTIME_INTERCEPTION))
|
||||
vConditions.emplace_back(L"INTERCEPTION");
|
||||
vConditions.emplace_back("INTERCEPTION");
|
||||
|
||||
if (pEntity->InCond(TF_COND_TEAM_GLOWS))
|
||||
vConditions.emplace_back(L"TEAM GLOWS");
|
||||
vConditions.emplace_back("TEAM GLOWS");
|
||||
|
||||
|
||||
|
||||
if (pEntity->InCond(TF_COND_PREVENT_DEATH))
|
||||
vConditions.emplace_back(L"PREVENT DEATH");
|
||||
vConditions.emplace_back("PREVENT DEATH");
|
||||
|
||||
if (pEntity->InCond(TF_COND_GRAPPLINGHOOK))
|
||||
vConditions.emplace_back(L"GRAPPLE");
|
||||
vConditions.emplace_back("GRAPPLE");
|
||||
|
||||
if (pEntity->InCond(TF_COND_GRAPPLINGHOOK_SAFEFALL))
|
||||
vConditions.emplace_back(L"SAFEFALL");
|
||||
vConditions.emplace_back("SAFEFALL");
|
||||
|
||||
if (pEntity->InCond(TF_COND_GRAPPLINGHOOK_LATCHED))
|
||||
vConditions.emplace_back(L"LATCHED");
|
||||
vConditions.emplace_back("LATCHED");
|
||||
|
||||
if (pEntity->InCond(TF_COND_GRAPPLED_TO_PLAYER))
|
||||
vConditions.emplace_back(L"TO PLAYER");
|
||||
vConditions.emplace_back("TO PLAYER");
|
||||
|
||||
if (pEntity->InCond(TF_COND_GRAPPLED_BY_PLAYER))
|
||||
vConditions.emplace_back(L"BY PLAYER");
|
||||
vConditions.emplace_back("BY PLAYER");
|
||||
|
||||
if (pEntity->InCond(TF_COND_TELEPORTED))
|
||||
vConditions.emplace_back(L"TELEPORT");
|
||||
vConditions.emplace_back("TELEPORT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_SELECTED_TO_TELEPORT))
|
||||
vConditions.emplace_back(L"TELEPORTING");
|
||||
vConditions.emplace_back("TELEPORTING");
|
||||
|
||||
if (pEntity->InCond(TF_COND_MEDIGUN_DEBUFF))
|
||||
vConditions.emplace_back(L"MEDIGUN DEBUFF");
|
||||
vConditions.emplace_back("MEDIGUN DEBUFF");
|
||||
|
||||
if (pEntity->InCond(TF_COND_SAPPED))
|
||||
vConditions.emplace_back(L"SAPPED");
|
||||
vConditions.emplace_back("SAPPED");
|
||||
|
||||
if (pEntity->InCond(TF_COND_DISGUISED_AS_DISPENSER))
|
||||
vConditions.emplace_back(L"DISPENSER");
|
||||
vConditions.emplace_back("DISPENSER");
|
||||
|
||||
if (pEntity->InCond(TF_COND_TAUNTING))
|
||||
vConditions.emplace_back(L"TAUNT");
|
||||
vConditions.emplace_back("TAUNT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_HALLOWEEN_THRILLER))
|
||||
vConditions.emplace_back(L"THRILLER");
|
||||
vConditions.emplace_back("THRILLER");
|
||||
|
||||
if (pEntity->InCond(TF_COND_FREEZE_INPUT))
|
||||
vConditions.emplace_back(L"FREEZE INPUT");
|
||||
vConditions.emplace_back("FREEZE INPUT");
|
||||
|
||||
if (pEntity->InCond(TF_COND_REPROGRAMMED))
|
||||
vConditions.emplace_back(L"REPROGRAMMED");
|
||||
vConditions.emplace_back("REPROGRAMMED");
|
||||
|
||||
// if (pEntity->InCond(TF_COND_COMPETITIVE_WINNER))
|
||||
// vConditions.emplace_back(L"WIN");
|
||||
//if (pEntity->InCond(TF_COND_COMPETITIVE_WINNER))
|
||||
// vConditions.emplace_back("WIN");
|
||||
|
||||
// if (pEntity->InCond(TF_COND_COMPETITIVE_LOSER))
|
||||
// vConditions.emplace_back(L"LOSS");
|
||||
//if (pEntity->InCond(TF_COND_COMPETITIVE_LOSER))
|
||||
// vConditions.emplace_back("LOSS");
|
||||
}
|
||||
|
||||
return vConditions;
|
||||
@@ -384,10 +386,10 @@ void CPlayerConditions::Draw(CTFPlayer* pLocal)
|
||||
align = ALIGN_TOPRIGHT;
|
||||
}
|
||||
|
||||
std::vector<std::wstring> vConditions = Get(pTarget);
|
||||
std::vector<std::string> vConditions = Get(pTarget);
|
||||
|
||||
int iOffset = 0;
|
||||
for (const std::wstring& sCondition : vConditions)
|
||||
for (const std::string& sCondition : vConditions)
|
||||
{
|
||||
H::Draw.StringOutlined(fFont, x, y + iOffset, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, align, sCondition.c_str());
|
||||
iOffset += nTall;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
class CPlayerConditions
|
||||
{
|
||||
public:
|
||||
std::vector<std::wstring> Get(CTFPlayer* pEntity);
|
||||
std::vector<std::string> Get(CTFPlayer* pEntity);
|
||||
void Draw(CTFPlayer* pLocal);
|
||||
};
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ MAKE_SIGNATURE(CWeaponMedigun_ManageChargeEffect, "client.dll", "48 89 5C 24 ? 4
|
||||
|
||||
void CVisuals::DrawFOV(CTFPlayer* pLocal)
|
||||
{
|
||||
if (!Vars::Aimbot::General::FOVCircle.Value || !Vars::Colors::FOVCircle.Value.a || !pLocal->IsAlive() || pLocal->IsAGhost() || pLocal->IsTaunting() || pLocal->InCond(TF_COND_STUNNED) || pLocal->InCond(TF_COND_HALLOWEEN_KART))
|
||||
if (!Vars::Aimbot::General::FOVCircle.Value || !Vars::Colors::FOVCircle.Value.a || !pLocal->IsAlive() || pLocal->IsAGhost() || pLocal->IsTaunting() || pLocal->InCond(TF_COND_STUNNED) && pLocal->m_iStunFlags() & (TF_STUN_CONTROLS | TF_STUN_LOSER_STATE) || pLocal->InCond(TF_COND_HALLOWEEN_KART))
|
||||
return;
|
||||
|
||||
if (Vars::Aimbot::General::AimFOV.Value >= 90.f)
|
||||
@@ -160,7 +160,6 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
|
||||
return;
|
||||
|
||||
pWeapon = pPlayer->m_hActiveWeapon().Get()->As<CTFWeaponBase>();
|
||||
if (!pWeapon)
|
||||
if (!pWeapon || pWeapon->GetWeaponID() == TF_WEAPON_FLAMETHROWER)
|
||||
return;
|
||||
|
||||
@@ -520,26 +519,26 @@ void CVisuals::DrawDebugInfo(CTFPlayer* pLocal)
|
||||
}
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Choke: {}, {}", G::Choking, I::ClientState->chokedcommands).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Ticks: {}, {}", F::Ticks.m_iShiftedTicks, F::Ticks.m_iShiftedGoal).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Round state: {}, {}", SDK::GetRoundState(), I::EngineClient->IsPlayingDemo()).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Round state: {}, {}, {}", SDK::GetRoundState(), SDK::GetWinningTeam(), I::EngineClient->IsPlayingDemo()).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Tickcount: {}", pLocal->m_nTickBase()).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Entities: {} ({}, {})", I::ClientEntityList->GetMaxEntities(), I::ClientEntityList->GetHighestEntityIndex(), I::ClientEntityList->NumberOfEntities(false)).c_str());
|
||||
|
||||
if (pWeapon)
|
||||
{
|
||||
|
||||
float flTime = TICKS_TO_TIME(pLocal->m_nTickBase());
|
||||
float flPrimaryAttack = pWeapon->m_flNextPrimaryAttack();
|
||||
float flSecondaryAttack = pWeapon->m_flNextSecondaryAttack();
|
||||
float flAttack = pLocal->m_flNextAttack();
|
||||
float flTime = TICKS_TO_TIME(pLocal->m_nTickBase());
|
||||
float flPrimaryAttack = pWeapon->m_flNextPrimaryAttack();
|
||||
float flSecondaryAttack = pWeapon->m_flNextSecondaryAttack();
|
||||
float flAttack = pLocal->m_flNextAttack();
|
||||
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall * 2, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Attacking: {}", G::Attacking).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("CanPrimaryAttack: {} ([{:.3f} | {:.3f}] <= {:.3f})", G::CanPrimaryAttack, flPrimaryAttack, flAttack, flTime).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("CanSecondaryAttack: {} ([{:.3f} | {:.3f}] <= {:.3f})", G::CanSecondaryAttack, flSecondaryAttack, flAttack, flTime).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Attack: {:.3f}, {:.3f}; {:.3f}", flTime - flPrimaryAttack, flTime - flSecondaryAttack, flTime - flAttack).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Reload: {} ({} || {} != 0)", G::Reloading, pWeapon->m_bInReload(), pWeapon->m_iReloadMode()).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall * 2, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Attacking: {}", G::Attacking).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("CanPrimaryAttack: {} ([{:.3f} | {:.3f}] <= {:.3f})", G::CanPrimaryAttack, flPrimaryAttack, flAttack, flTime).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("CanSecondaryAttack: {} ([{:.3f} | {:.3f}] <= {:.3f})", G::CanSecondaryAttack, flSecondaryAttack, flAttack, flTime).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Attack: {:.3f}, {:.3f}; {:.3f}", flTime - flPrimaryAttack, flTime - flSecondaryAttack, flTime - flAttack).c_str());
|
||||
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Reload: {} ({} || {} != 0)", G::Reloading, pWeapon->m_bInReload(), pWeapon->m_iReloadMode()).c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#undef PAIR
|
||||
|
||||
|
||||
@@ -780,17 +779,20 @@ void CVisuals::ThirdPerson(CTFPlayer* pLocal, CViewSetup* pView)
|
||||
{ // Thirdperson offset
|
||||
Vec3 vForward, vRight, vUp; Math::AngleVectors(pView->angles, &vForward, &vRight, &vUp);
|
||||
|
||||
Vec3 offset;
|
||||
offset += vRight * Vars::Visuals::ThirdPerson::Right.Value;
|
||||
offset += vUp * Vars::Visuals::ThirdPerson::Up.Value;
|
||||
offset -= vForward * Vars::Visuals::ThirdPerson::Distance.Value;
|
||||
Vec3 vOffset;
|
||||
float flScale = Vars::Visuals::ThirdPerson::Scale.Value ? pLocal->m_flModelScale() : 1.f;
|
||||
vOffset += vRight * Vars::Visuals::ThirdPerson::Right.Value * flScale;
|
||||
vOffset += vUp * Vars::Visuals::ThirdPerson::Up.Value * flScale;
|
||||
vOffset -= vForward * Vars::Visuals::ThirdPerson::Distance.Value * flScale;
|
||||
float flHull = 9.f * flScale;
|
||||
Vec3 vMins = { -flHull, -flHull, -flHull }, vMaxs = { flHull, flHull, flHull };
|
||||
Vec3 vDiff = pView->origin - pLocal->GetEyePosition();
|
||||
|
||||
const Vec3 viewDiff = pView->origin - pLocal->GetEyePosition();
|
||||
CGameTrace trace = {};
|
||||
CTraceFilterWorldAndPropsOnly filter = {};
|
||||
SDK::TraceHull(pView->origin - viewDiff, pView->origin + offset - viewDiff, { -9.f, -9.f, -9.f }, { 9.f, 9.f, 9.f }, MASK_SOLID, &filter, &trace);
|
||||
SDK::TraceHull(pView->origin - vDiff, pView->origin + vOffset - vDiff, vMins, vMaxs, MASK_SOLID, &filter, &trace);
|
||||
|
||||
pView->origin += offset * trace.fraction - viewDiff;
|
||||
pView->origin += vOffset * trace.fraction - vDiff;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,14 @@ MAKE_HOOK(CBaseHudChatLine_InsertAndColorizeText, S::CBaseHudChatLine_InsertAndC
|
||||
}
|
||||
for (auto& [sFind, sReplace] : vReplace)
|
||||
{
|
||||
std::transform(sFind.begin(), sFind.end(), sFind.begin(), ::tolower);
|
||||
{
|
||||
std::string sReplace2 = sReplace;
|
||||
std::transform(sFind.begin(), sFind.end(), sFind.begin(), ::tolower);
|
||||
std::transform(sReplace2.begin(), sReplace2.end(), sReplace2.begin(), ::tolower);
|
||||
if (FNV1A::Hash32(sFind.c_str()) == FNV1A::Hash32(sReplace2.c_str()))
|
||||
continue;
|
||||
}
|
||||
|
||||
while (true)
|
||||
{
|
||||
std::string sMessage2 = sMessage;
|
||||
|
||||
@@ -54,10 +54,21 @@ MAKE_HOOK(CClientModeShared_CreateMove, U::Memory.GetVFunc(I::ClientModeShared,
|
||||
bool bCanAttack = pLocal->CanAttack();
|
||||
switch (SDK::GetRoundState())
|
||||
{
|
||||
case GR_STATE_TEAM_WIN:
|
||||
if (pLocal->m_iTeamNum() != SDK::GetWinningTeam())
|
||||
bCanAttack = false;
|
||||
break;
|
||||
case GR_STATE_BETWEEN_RNDS:
|
||||
if (pLocal->m_fFlags() & FL_FROZEN)
|
||||
bCanAttack = false;
|
||||
break;
|
||||
case GR_STATE_GAME_OVER:
|
||||
bCanAttack = bCanAttack && !(pLocal->m_fFlags() & FL_FROZEN);
|
||||
if (pLocal->m_fFlags() & FL_FROZEN || pLocal->m_iTeamNum() != SDK::GetWinningTeam())
|
||||
bCanAttack = false;
|
||||
break;
|
||||
}
|
||||
if (pLocal->InCond(TF_COND_STUNNED) && pLocal->m_iStunFlags() & (TF_STUN_CONTROLS | TF_STUN_LOSER_STATE))
|
||||
bCanAttack = false;
|
||||
if (bCanAttack)
|
||||
{
|
||||
G::CanPrimaryAttack = pWeapon->CanPrimaryAttack();
|
||||
|
||||
@@ -2,10 +2,15 @@
|
||||
|
||||
#include "../Features/Players/PlayerUtils.h"
|
||||
|
||||
MAKE_SIGNATURE(GetPlayerNameForSteamID_GetFriendPersonaName_Call, "client.dll", "41 B9 ? ? ? ? 44 8B C3 48 8B C8", 0x0);
|
||||
|
||||
MAKE_HOOK(ISteamFriends_GetFriendPersonaName, U::Memory.GetVFunc(I::SteamFriends, 7), const char*,
|
||||
void* rcx, CSteamID steamIDFriend)
|
||||
{
|
||||
if (Vars::Visuals::UI::StreamerMode.Value)
|
||||
static const auto dwDesired = S::GetPlayerNameForSteamID_GetFriendPersonaName_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
if (Vars::Visuals::UI::StreamerMode.Value && dwRetAddr == dwDesired)
|
||||
{
|
||||
if (I::SteamUser->GetSteamID() == steamIDFriend)
|
||||
{
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
#include "../../Core/Core.h"
|
||||
#include "../../Utils/Assert/Assert.h"
|
||||
|
||||
#define Validate(x) if (!x) { U::Core.AppendFailText(std::format("CNullInterfaces::Initialize() failed to initialize {}", #x).c_str()); m_bFailed = true; }
|
||||
#define Validate(x) if (!x) { U::Core.AppendFailText("CNullInterfaces::Initialize() failed to initialize "#x); m_bFailed = true; }
|
||||
#define ValidateNonLethal(x) if (!x) { const char* sMessage = "CNullInterfaces::Initialize() failed to initialize "#x; MessageBox(nullptr, sMessage, "Warning", MB_OK | MB_ICONERROR); U::Core.AppendFailText(sMessage); }
|
||||
|
||||
MAKE_SIGNATURE(Get_TFPartyClient, "client.dll", "48 8B 05 ? ? ? ? C3 CC CC CC CC CC CC CC CC 48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56", 0x0);
|
||||
MAKE_SIGNATURE(Get_SteamNetworkingUtils, "client.dll", "40 53 48 83 EC ? 48 8B D9 48 8D 15 ? ? ? ? 33 C9 FF 15 ? ? ? ? 33 C9", 0x0);
|
||||
@@ -26,7 +27,7 @@ bool CNullInterfaces::Initialize()
|
||||
Validate(I::SteamUtils);
|
||||
|
||||
I::SteamApps = I::SteamClient->GetISteamApps(hsNewUser, hsNewPipe, STEAMAPPS_INTERFACE_VERSION);
|
||||
Validate(I::SteamApps);
|
||||
ValidateNonLethal(I::SteamApps);
|
||||
|
||||
I::SteamUserStats = I::SteamClient->GetISteamUserStats(hsNewUser, hsNewPipe, STEAMUSERSTATS_INTERFACE_VERSION);
|
||||
Validate(I::SteamUserStats);
|
||||
|
||||
+11
-5
@@ -23,7 +23,7 @@ BOOL CALLBACK TeamFortressWindow(HWND hwnd, LPARAM lParam)
|
||||
|
||||
|
||||
|
||||
void SDK::Output(const char* cFunction, const char* cLog, Color_t cColor, bool bConsole, bool bChat, bool bToast, bool bDebug, int bMessageBox)
|
||||
void SDK::Output(const char* cFunction, const char* cLog, Color_t cColor, bool bConsole, bool bChat, bool bToast, bool bDebug, int iMessageBox)
|
||||
{
|
||||
if (cLog)
|
||||
{
|
||||
@@ -38,8 +38,8 @@ void SDK::Output(const char* cFunction, const char* cLog, Color_t cColor, bool b
|
||||
F::Notifications.Add(std::format("[{}] {}", cFunction, cLog));
|
||||
if (bDebug)
|
||||
OutputDebugString(std::format("[{}] {}\n", cFunction, cLog).c_str());
|
||||
if (bMessageBox != -1)
|
||||
MessageBox(nullptr, cLog, cFunction, bMessageBox);
|
||||
if (iMessageBox != -1)
|
||||
MessageBox(nullptr, cLog, cFunction, iMessageBox);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -51,8 +51,8 @@ void SDK::Output(const char* cFunction, const char* cLog, Color_t cColor, bool b
|
||||
F::Notifications.Add(std::format("{}", cFunction));
|
||||
if (bDebug)
|
||||
OutputDebugString(std::format("{}\n", cFunction).c_str());
|
||||
if (bMessageBox != -1)
|
||||
MessageBox(nullptr, "", cFunction, bMessageBox);
|
||||
if (iMessageBox != -1)
|
||||
MessageBox(nullptr, "", cFunction, iMessageBox);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,6 +323,12 @@ int SDK::GetRoundState()
|
||||
return pGameRules->m_iRoundState();
|
||||
return 0;
|
||||
}
|
||||
int SDK::GetWinningTeam()
|
||||
{
|
||||
if (auto pGameRules = I::TFGameRules->Get())
|
||||
return pGameRules->m_iWinningTeam();
|
||||
return 0;
|
||||
}
|
||||
|
||||
EWeaponType SDK::GetWeaponType(CTFWeaponBase* pWeapon, EWeaponType* pSecondaryType)
|
||||
{
|
||||
|
||||
@@ -65,7 +65,7 @@ template <typename T> int sign(T val)
|
||||
|
||||
namespace SDK
|
||||
{
|
||||
void Output(const char* cFunction, const char* cLog = nullptr, Color_t cColor = { 255, 255, 255, 255 }, bool bConsole = true, bool bChat = false, bool bToast = false, bool bDebug = false, int bMessageBox = -1);
|
||||
void Output(const char* cFunction, const char* cLog = nullptr, Color_t cColor = { 255, 255, 255, 255 }, bool bConsole = true, bool bChat = false, bool bToast = false, bool bDebug = false, int iMessageBox = -1);
|
||||
|
||||
HWND GetTeamFortressWindow();
|
||||
bool IsGameWindowInFocus();
|
||||
@@ -98,6 +98,7 @@ namespace SDK
|
||||
bool VisPosWorld(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& from, const Vec3& to, unsigned int nMask = MASK_SHOT | CONTENTS_GRATE);
|
||||
|
||||
int GetRoundState();
|
||||
int GetWinningTeam();
|
||||
EWeaponType GetWeaponType(CTFWeaponBase* pWeapon, EWeaponType* pSecondaryType = nullptr);
|
||||
const char* GetClassByIndex(const int nClass);
|
||||
|
||||
|
||||
@@ -589,6 +589,7 @@ namespace Vars
|
||||
CVar(Right, 0.f, VISUAL)
|
||||
CVar(Up, 0.f, VISUAL)
|
||||
CVar(Crosshair, false, VISUAL)
|
||||
CVar(Scale, true, DEBUGVAR)
|
||||
SUBNAMESPACE_END(ThirdPerson)
|
||||
|
||||
SUBNAMESPACE_BEGIN(FOVArrows)
|
||||
|
||||
Reference in New Issue
Block a user