| Pelipoika |
03-04-2017 15:20 |
[TF2] CCaptureFlag::FlagTouch reversed
Spent quite a lot of time on this because i had an issue where sometimes players couldn't pickup the flag in MvM due to them having FL_FAKECLIENT
This is babbys 2nd reversed function.
PHP Code:
enum ETFCond { TF_COND_INVALID = -1, TF_COND_AIMING = 0, TF_COND_ZOOMED = 1, TF_COND_DISGUISING = 2, TF_COND_DISGUISED = 3, TF_COND_STEALTHED = 4, TF_COND_INVULNERABLE = 5, TF_COND_TELEPORTED = 6, TF_COND_TAUNTING = 7, TF_COND_INVULNERABLE_WEARINGOFF = 8, TF_COND_STEALTHED_BLINK = 9, TF_COND_SELECTED_TO_TELEPORT = 10, TF_COND_CRITBOOSTED = 11, TF_COND_TMPDAMAGEBONUS = 12, TF_COND_FEIGN_DEATH = 13, TF_COND_PHASE = 14, TF_COND_STUNNED = 15, TF_COND_OFFENSEBUFF = 16, TF_COND_SHIELD_CHARGE = 17, TF_COND_DEMO_BUFF = 18, TF_COND_ENERGY_BUFF = 19, TF_COND_RADIUSHEAL = 20, TF_COND_HEALTH_BUFF = 21, TF_COND_BURNING = 22, TF_COND_HEALTH_OVERHEALED = 23, TF_COND_URINE = 24, TF_COND_BLEEDING = 25, TF_COND_DEFENSEBUFF = 26, TF_COND_MAD_MILK = 27, TF_COND_MEGAHEAL = 28, TF_COND_REGENONDAMAGEBUFF = 29, TF_COND_MARKEDFORDEATH = 30, TF_COND_NOHEALINGDAMAGEBUFF = 31, TF_COND_SPEED_BOOST = 32, TF_COND_CRITBOOSTED_PUMPKIN = 33, TF_COND_CRITBOOSTED_USER_BUFF = 34, TF_COND_CRITBOOSTED_DEMO_CHARGE = 35, TF_COND_SODAPOPPER_HYPE = 36, TF_COND_CRITBOOSTED_FIRST_BLOOD = 37, TF_COND_CRITBOOSTED_BONUS_TIME = 38, TF_COND_CRITBOOSTED_CTF_CAPTURE = 39, TF_COND_CRITBOOSTED_ON_KILL = 40, TF_COND_CANNOT_SWITCH_FROM_MELEE = 41, TF_COND_DEFENSEBUFF_NO_CRIT_BLOCK = 42, TF_COND_REPROGRAMMED = 43, TF_COND_CRITBOOSTED_RAGE_BUFF = 44, TF_COND_DEFENSEBUFF_HIGH = 45, TF_COND_SNIPERCHARGE_RAGE_BUFF = 46, TF_COND_DISGUISE_WEARINGOFF = 47, TF_COND_MARKEDFORDEATH_SILENT = 48, TF_COND_DISGUISED_AS_DISPENSER = 49, TF_COND_SAPPED = 50, TF_COND_INVULNERABLE_HIDE_UNLESS_DAMAGED = 51, TF_COND_INVULNERABLE_USER_BUFF = 52, TF_COND_HALLOWEEN_BOMB_HEAD = 53, TF_COND_HALLOWEEN_THRILLER = 54, TF_COND_RADIUSHEAL_ON_DAMAGE = 55, TF_COND_CRITBOOSTED_CARD_EFFECT = 56, TF_COND_INVULNERABLE_CARD_EFFECT = 57, TF_COND_MEDIGUN_UBER_BULLET_RESIST = 58, TF_COND_MEDIGUN_UBER_BLAST_RESIST = 59, TF_COND_MEDIGUN_UBER_FIRE_RESIST = 60, TF_COND_MEDIGUN_SMALL_BULLET_RESIST = 61, TF_COND_MEDIGUN_SMALL_BLAST_RESIST = 62, TF_COND_MEDIGUN_SMALL_FIRE_RESIST = 63, TF_COND_STEALTHED_USER_BUFF = 64, TF_COND_MEDIGUN_DEBUFF = 65, TF_COND_STEALTHED_USER_BUFF_FADING = 66, TF_COND_BULLET_IMMUNE = 67, TF_COND_BLAST_IMMUNE = 68, TF_COND_FIRE_IMMUNE = 69, TF_COND_PREVENT_DEATH = 70, TF_COND_MVM_BOT_STUN_RADIOWAVE = 71, TF_COND_HALLOWEEN_SPEED_BOOST = 72, TF_COND_HALLOWEEN_QUICK_HEAL = 73, TF_COND_HALLOWEEN_GIANT = 74, TF_COND_HALLOWEEN_TINY = 75, TF_COND_HALLOWEEN_IN_HELL = 76, TF_COND_HALLOWEEN_GHOST_MODE = 77, TF_COND_MINICRITBOOSTED_ON_KILL = 78, TF_COND_OBSCURED_SMOKE = 79, TF_COND_PARACHUTE_DEPLOYED = 80, TF_COND_BLASTJUMPING = 81, TF_COND_HALLOWEEN_KART = 82, TF_COND_HALLOWEEN_KART_DASH = 83, TF_COND_BALLOON_HEAD = 84, TF_COND_MELEE_ONLY = 85, TF_COND_SWIMMING_CURSE = 86, TF_COND_FREEZE_INPUT = 87, TF_COND_HALLOWEEN_KART_CAGE = 88, TF_COND_DONOTUSE_0 = 89, TF_COND_RUNE_STRENGTH = 90, TF_COND_RUNE_HASTE = 91, TF_COND_RUNE_REGEN = 92, TF_COND_RUNE_RESIST = 93, TF_COND_RUNE_VAMPIRE = 94, TF_COND_RUNE_REFLECT = 95, TF_COND_RUNE_PRECISION = 96, TF_COND_RUNE_AGILITY = 97, TF_COND_GRAPPLINGHOOK = 98, TF_COND_GRAPPLINGHOOK_SAFEFALL = 99, TF_COND_GRAPPLINGHOOK_LATCHED = 100, TF_COND_GRAPPLINGHOOK_BLEEDING = 101, TF_COND_AFTERBURN_IMMUNE = 102, TF_COND_RUNE_KNOCKOUT = 103, TF_COND_RUNE_IMBALANCE = 104, TF_COND_CRITBOOSTED_RUNE_TEMP = 105, TF_COND_PASSTIME_INTERCEPTION = 106, TF_COND_SWIMMING_NO_EFFECTS = 107, TF_COND_PURGATORY = 108, TF_COND_RUNE_KING = 109, TF_COND_RUNE_PLAGUE = 110, TF_COND_RUNE_SUPERNOVA = 111, TF_COND_PLAGUE = 112, TF_COND_KING_BUFFED = 113, TF_COND_TEAM_GLOWS = 114, TF_COND_KNOCKED_INTO_AIR = 115, TF_COND_COMPETITIVE_WINNER = 116, TF_COND_COMPETITIVE_LOSER = 117, TF_COND_HEALING_DEBUFF = 118, TF_COND_PASSTIME_PENALTY_DEBUFF = 119, TF_COND_COUNT, };
//----------------------------------------------------------------------------- // TF FlagInfo State. //----------------------------------------------------------------------------- #define TF_FLAGINFO_NONE 0 #define TF_FLAGINFO_STOLEN (1 << 0) #define TF_FLAGINFO_DROPPED (1 << 1)
//----------------------------------------------------------------------------- // For entity_capture_flags to use when placed in the world //----------------------------------------------------------------------------- enum { TF_FLAGTYPE_CTF = 0, //ctf_ TF_FLAGTYPE_ATTACK_DEFEND, //mvm_ TF_FLAGTYPE_TERRITORY_CONTROL, TF_FLAGTYPE_INVADE, TF_FLAGTYPE_SPECIAL_DELIVERY, //sd_ TF_FLAGTYPE_ROBOT_DESTRUCTION, //rd_ and pd_ TF_FLAGTYPE_PLAYER_DESTRUCTION //pd_ };
//----- (007908E0) -------------------------------------------------------- void CCaptureFlag::FlagTouch(CCaptureFlag *this, CBaseEntity *pOther) { if (m_bDisabled) return;
if (m_nFlagStatus == TF_FLAGINFO_STOLEN) return;
if (!pOther->IsPlayer())) return;
if (!pOther->IsAlive()) return;
if(m_hPrevOwner.Get() && m_hPrevOwner.Get() == pOther && m_bAllowOwnerPickup == false) return;
if (pOther->GetTeamNumber() == this->GetTeamNumber()) { m_outputOnTouchSameTeam.FireOutput(this, this); if (m_nType != TF_FLAGTYPE_CTF || m_nType == TF_FLAGTYPE_ROBOT_DESTRUCTION) { if ( !tf_flag_return_on_touch.GetBool() ) return; if (m_nFlagStatus != TF_FLAGINFO_NONE || m_nFlagStatus == TF_FLAGINFO_STOLEN) return; } } if (m_nType == TF_FLAGTYPE_ATTACK_DEFEND || m_nType == TF_FLAGTYPE_TERRITORY_CONTROL) { if(pOther->GetTeamNumber() != this->GetTeamNumber()) { return; } } if (m_nType == TF_FLAGTYPE_INVADE || m_nType == TF_FLAGTYPE_SPECIAL_DELIVERY && this->GetTeamNumber() != TEAM_UNASSIGNED) { if(pOther->GetTeamNumber() != this->GetTeamNumber()) { return; } } if (!TFGameRules()->m_bInWaitingForPlayers && pOther->IsPlayer() && pOther->IsAllowedToPickUpFlag()) { if (TFGameRules()->m_bPlayingMannVsMachine) { PickUp(pOther, true); return; } // Is the touching player about to teleport? if (pOther->m_Shared.InCond(TF_COND_SELECTED_TO_TELEPORT)) return; // Can't pickup flag while invulnerable if not playing player destruction if(pOther->m_Shared.IsInvulnerable() && m_nType != TF_FLAGTYPE_PLAYER_DESTRUCTION) return; // Can't pickup flag while invisible if(pOther->m_Shared.IsStealthed()) return; // If the player isnt 25% visible don't let them pickup flag if (pOther->m_Shared.InCond(TF_COND_STEALTHED_BLINK) && pOther->m_Shared.GetPercentInvisible() > 0.25)) return; // Don't let bonked players pickup the flag if(pOther->m_Shared.InCond(TF_COND_PHASE)) return; // Do not allow the player to pick up multiple flags unless the gamemode is player destruction if (!pOther->HasTheFlag() || m_nType == TF_FLAGTYPE_ROBOT_DESTRUCTION || m_nType == TF_FLAGTYPE_PLAYER_DESTRUCTION || tf_flag_return_on_touch.GetBool()) { if (!PointInRespawnRoom(pOther, pOther->WorldSpaceCenter(), false) { if (m_nFlagStatus == TF_FLAGINFO_DROPPED) { if (pOther->GetTeamNumber() == this->GetTeamNumber() && m_nType != TF_FLAGTYPE_CTF && tf_flag_return_on_touch.GetBool()) { this->Reset(); this->ResetMessage(); CTF_GameStats.Event_PlayerReturnedFlag(pOther); return; } } PickUp(pOther, true); } } } }
bool CTFPlayer::IsAllowedToPickUpFlag(CTFPlayer *this) { return CAttributeManager::AttribHookValue<int>(this, 0, "cannot_pick_up_intelligence", this, 0, 1) == 0; }
Maybe someone will find it usefull somehow
Theres propably a cast to CTFPlayer there somewhere too but whatever
|