Raised This Month: $ Target: $400
 0% 

[TF2] CCaptureFlag::FlagTouch reversed


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Pelipoika
Veteran Member
Join Date: May 2012
Location: Inside
Old 03-04-2017 , 15:20   [TF2] CCaptureFlag::FlagTouch reversed
Reply With Quote #1

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 *thisCBaseEntity *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(thisthis);
        
        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(pOthertrue);
            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(pOtherpOther->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(pOthertrue);
            }
        }
    }
}

bool CTFPlayer::IsAllowedToPickUpFlag(CTFPlayer *this)
{
    return 
CAttributeManager::AttribHookValue<int>(this0"cannot_pick_up_intelligence"this01) == 0;

Maybe someone will find it usefull somehow

Theres propably a cast to CTFPlayer there somewhere too but whatever
__________________

Last edited by Pelipoika; 03-11-2017 at 07:47. Reason: Solved mystery
Pelipoika is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 06:37.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode