smileface

Steam

Steam Profile

76561198401477303

[U:1:441211575]

STEAM_0:1:220605787

Signature

Markdown (GitHub flavored):
       ,
       \`-._           __
        \\  `-..____,.'  `.
         :`.         /    \`.
         :  )       :      : \
          ;'        '   ;  |  :
          )..      .. .:.`.;  :
         /::...  .:::...   ` ;
         ; _ '    __        /:\
         `:o>   /\o_>      ;:. `.
        `-`.__ ;   __..--- /:.   \
        === \_/   ;=====_.':.     ;
         ,/'`--'...`--....        ;
              ;                    ;
            .'                      ;
          .'                        ;
        .'     ..     ,      .       ;
       :       ::..  /      ;::.     |
      /      `.;::.  |       ;:..    ;
     :         |:.   :       ;:.    ;
     :         ::     ;:..   |.    ;
      :       :;      :::....|     |
      /\     ,/ \      ;:::::;     ;
    .:. \:..|    :     ; '.--|     ;
   ::.  :''  `-.,,;     ;'   ;     ;
.-'. _.'\      / `;      \,__:      \
`---'    `----'   ;      /    \,.,,,/
                   `----`

HTML:
<!--
    fix to the discord link for the guide video being broken by using the Youtube video instead
-->
<html class=" zwijfol idc0_343">
    <head></head>
    <body>
        <p>
            "Upload all your mods as a zip file and get a signed VPK to use on Skial servers."
        </p>
        <p>
            "The materials/models/sound folders must be at the root of the directory. VPKs are ok but must also be at the root directory."
        </p>
        <p>DO NOT just zip your custom folder. It will not work.</p>
        <img src="http://i.imgur.com/xt15AP9.png">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/gbxwNeo1of4" 
        title="YouTube video player" 
        frameborder="0" 
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" 
        allowfullscreen>
        </iframe>
        <p>
            "You can rename the output to something else as long as you rename both the files."
        </p>
        <p>
            "Please download your VPK immediately as they may be deleted to save space."
        </p>
        <p>
            "If you have any questions, visit us at "
            <a href="https://skial.com">skial.com</a>
        </p>
        <form action="upload" method="post" enctype="multipart/form-data">
            <input type="file" name="file">
            <br>
            <input type="submit">
        </form>
    </body>
</html>

C++:
// This should actually be a .h file for header
#ifndef TFCLASSDATA_SHARED_H
#define TFCLASSDATA_SHARED_H
#ifdef _WIN32
#pragma once
#endif

#include "mathlib/vector.h"

enum TFClass
{
    TFCLASS_UNDECIDED = 0,

    TFCLASS_RECON,
    TFCLASS_COMMANDO,
    TFCLASS_MEDIC,
    TFCLASS_DEFENDER,
    TFCLASS_SNIPER,
    TFCLASS_SUPPORT,
    TFCLASS_ESCORT,
    TFCLASS_SAPPER,
    TFCLASS_INFILTRATOR,
    TFCLASS_PYRO,

    TFCLASS_CLASS_COUNT,
};

#define PLAYERCLASS_HULL_STAND_MIN        Vector( -24.0f, -24.0f,  0.0f )
#define PLAYERCLASS_HULL_STAND_MAX        Vector(  24.0f,  24.0f,  72.0f )
#define PLAYERCLASS_VIEWOFFSET_STAND    Vector(   0.0f,   0.0f,  64.0f )

#define PLAYERCLASS_HULL_DUCK_MIN        Vector( -24.0f, -24.0f,  0.0f )
#define PLAYERCLASS_HULL_DUCK_MAX        Vector(  24.0f,  24.0f,  36.0f )
#define PLAYERCLASS_VIEWOFFSET_DUCK        Vector(   0.0f,   0.0f,  30.0f )

#define PLAYERCLASS_STEPSIZE            18.0f

#ifndef COMMANDO_TEST

#define COMMANDOCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define COMMANDOCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define COMMANDOCLASS_VIEWOFFSET_STAND        PLAYERCLASS_VIEWOFFSET_STAND

#define COMMANDOCLASS_HULL_DUCK_MIN            PLAYERCLASS_HULL_DUCK_MIN
#define COMMANDOCLASS_HULL_DUCK_MAX            PLAYERCLASS_HULL_DUCK_MAX
#define COMMANDOCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define COMMANDOCLASS_STEPSIZE                PLAYERCLASS_STEPSIZE

#else

#define COMMANDOCLASS_HULL_STAND_MIN        Vector( -18.0f, -18.0f,   0.0f )
#define COMMANDOCLASS_HULL_STAND_MAX        Vector(  18.0f,  18.0f,  54.0f )
#define COMMANDOCLASS_VIEWOFFSET_STAND        Vector(   0.0f,   0.0f,  51.0f )

#define COMMANDOCLASS_HULL_DUCK_MIN            Vector( -18.0f, -18.0f,   0.0f )
#define COMMANDOCLASS_HULL_DUCK_MAX            Vector(  18.0f,  18.0f,  40.0f )
#define COMMANDOCLASS_VIEWOFFSET_DUCK        Vector(   0.0f,   0.0f,  35.0f )

#define COMMANDOCLASS_STEPSIZE                18.0f

#endif

#define COMMANDO_MOVETYPE_BULLRUSH            ( MOVETYPE_LAST + 1 )

#define COMMANDO_TIME_INVALID                -9999.0f
#define COMMANDO_DOUBLETAP_TIME                300.0f
#define COMMANDO_BULLRUSH_TIME                2000.0f
#define COMMANDO_BULLRUSH_VIEWDELTA_TIME    1000.0f
#define COMMANDO_BULLRUSH_VIEWDELTA_TEST    ( COMMANDO_BULLRUSH_TIME - COMMANDO_BULLRUSH_VIEWDELTA_TIME )

struct PlayerClassCommandoData_t
{
    DECLARE_PREDICTABLE();
    DECLARE_CLASS_NOBASE( PlayerClassCommandoData_t );
    DECLARE_EMBEDDED_NETWORKVAR();

    enum { PLAYERCLASS_ID = TFCLASS_COMMANDO };

    CNetworkVar( bool, m_bCanBullRush );
    CNetworkVar( bool, m_bBullRush );
    CNetworkVector( m_vecBullRushDir );
    CNetworkQAngle( m_vecBullRushViewDir );
    CNetworkQAngle( m_vecBullRushViewGoalDir );
    CNetworkVar( float, m_flBullRushTime );
    CNetworkVar( float, m_flDoubleTapForwardTime );
};

#if 0
#define DEFENDERCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define DEFENDERCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define DEFENDERCLASS_VIEWOFFSET_STAND        PLAYERCLASS_VIEWOFFSET_STAND

#define DEFENDERCLASS_HULL_DUCK_MIN            PLAYERCLASS_HULL_DUCK_MIN
#define DEFENDERCLASS_HULL_DUCK_MAX            PLAYERCLASS_HULL_DUCK_MAX
#define DEFENDERCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define DEFENDERCLASS_STEPSIZE                PLAYERCLASS_STEPSIZE
#else
#define DEFENDERCLASS_HULL_STAND_MIN        Vector( -18.0f, -18.0f,   0.0f )
#define DEFENDERCLASS_HULL_STAND_MAX        Vector(  18.0f,  18.0f,  55.0f )
#define DEFENDERCLASS_VIEWOFFSET_STAND        Vector(   0.0f,   0.0f,  53.0f )

#define DEFENDERCLASS_HULL_DUCK_MIN            Vector( -18.0f, -18.0f,   0.0f )
#define DEFENDERCLASS_HULL_DUCK_MAX            Vector(  18.0f,  18.0f,  30.0f )
#define DEFENDERCLASS_VIEWOFFSET_DUCK        Vector(   0.0f,   0.0f,  25.0f )

#define DEFENDERCLASS_STEPSIZE                15.0f
#endif

struct PlayerClassDefenderData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_DEFENDER };

};

#if 0
#define ESCORTCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define ESCORTCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define ESCORTCLASS_VIEWOFFSET_STAND    PLAYERCLASS_VIEWOFFSET_STAND

#define ESCORTCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define ESCORTCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define ESCORTCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define ESCORTCLASS_STEPSIZE            PLAYERCLASS_STEPSIZE
#else
#define ESCORTCLASS_HULL_STAND_MIN        Vector( -24.0f, -24.0f,   0.0f )
#define ESCORTCLASS_HULL_STAND_MAX        Vector(  24.0f,  24.0f,  74.0f )
#define ESCORTCLASS_VIEWOFFSET_STAND    Vector(   0.0f,   0.0f,  67.0f )

#define ESCORTCLASS_HULL_DUCK_MIN        Vector( -24.0f, -24.0f,   0.0f )
#define ESCORTCLASS_HULL_DUCK_MAX        Vector(  24.0f,  24.0f,  72.0f )
#define ESCORTCLASS_VIEWOFFSET_DUCK        Vector(   0.0f,   0.0f,  48.0f )

#define ESCORTCLASS_STEPSIZE            18.0f
#endif

struct PlayerClassEscortData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_ESCORT };

};

#define INFILTRATORCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define INFILTRATORCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define INFILTRATORCLASS_VIEWOFFSET_STAND    PLAYERCLASS_VIEWOFFSET_STAND

#define INFILTRATORCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define INFILTRATORCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define INFILTRATORCLASS_VIEWOFFSET_DUCK    PLAYERCLASS_VIEWOFFSET_DUCK

#define INFILTRATORCLASS_STEPSIZE            PLAYERCLASS_STEPSIZE

struct PlayerClassInfiltratorData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_INFILTRATOR };

};

#define PYROCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define PYROCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define PYROCLASS_VIEWOFFSET_STAND        PLAYERCLASS_VIEWOFFSET_STAND

#define PYROCLASS_HULL_DUCK_MIN            PLAYERCLASS_HULL_DUCK_MIN
#define PYROCLASS_HULL_DUCK_MAX            PLAYERCLASS_HULL_DUCK_MAX
#define PYROCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define PYROCLASS_STEPSIZE                PLAYERCLASS_STEPSIZE

struct PlayerClassPyroData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_PYRO };

};

#define MEDICCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define MEDICCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define MEDICCLASS_VIEWOFFSET_STAND        PLAYERCLASS_VIEWOFFSET_STAND

#define MEDICCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define MEDICCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define MEDICCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define MEDICCLASS_STEPSIZE                PLAYERCLASS_STEPSIZE

struct PlayerClassMedicData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_MEDIC };

};

#define RECONCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define RECONCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define RECONCLASS_VIEWOFFSET_STAND        PLAYERCLASS_VIEWOFFSET_STAND

#define RECONCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define RECONCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define RECONCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define RECONCLASS_STEPSIZE                PLAYERCLASS_STEPSIZE

struct PlayerClassReconData_t
{
    DECLARE_PREDICTABLE();
    DECLARE_CLASS_NOBASE( PlayerClassReconData_t );
    DECLARE_EMBEDDED_NETWORKVAR();


    enum { PLAYERCLASS_ID = TFCLASS_RECON };

    CNetworkVar( int, m_nJumpCount );

    // For wall jumps
    CNetworkVar( float, m_flSuppressionJumpTime );
    CNetworkVar( float, m_flSuppressionImpactTime );
    CNetworkVar( float, m_flActiveJumpTime );
    CNetworkVar( float, m_flStickTime );
    CNetworkVector(    m_vecImpactNormal );
    CNetworkVar( float, m_flImpactDist );
    CNetworkVector( m_vecUnstickVelocity );

    CNetworkVar( bool, m_bTrailParticles );
};

#define SNIPERCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define SNIPERCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define SNIPERCLASS_VIEWOFFSET_STAND    PLAYERCLASS_VIEWOFFSET_STAND

#define SNIPERCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define SNIPERCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define SNIPERCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define SNIPERCLASS_STEPSIZE            PLAYERCLASS_STEPSIZE

struct PlayerClassSniperData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_SNIPER };

};

#if 0
#define SUPPORTCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define SUPPORTCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define SUPPORTCLASS_VIEWOFFSET_STAND    PLAYERCLASS_VIEWOFFSET_STAND

#define SUPPORTCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define SUPPORTCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define SUPPORTCLASS_VIEWOFFSET_DUCK    PLAYERCLASS_VIEWOFFSET_DUCK

#define SUPPORTCLASS_STEPSIZE            PLAYERCLASS_STEPSIZE
#else
#define SUPPORTCLASS_HULL_STAND_MIN        Vector( -30.0f, -30.0f,   0.0f )
#define SUPPORTCLASS_HULL_STAND_MAX        Vector(  30.0f,  30.0f, 106.0f )
#define SUPPORTCLASS_VIEWOFFSET_STAND    Vector(   0.0f,   0.0f,  120.0f )

#define SUPPORTCLASS_HULL_DUCK_MIN        Vector( -30.0f, -30.0f,   0.0f )
#define SUPPORTCLASS_HULL_DUCK_MAX        Vector(  30.0f,  30.0f,  72.0f )
#define SUPPORTCLASS_VIEWOFFSET_DUCK    Vector(   0.0f,   0.0f,  64.0f )

#define SUPPORTCLASS_STEPSIZE            27.0f
#endif

struct PlayerClassSupportData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_SUPPORT };

};

#define SAPPERCLASS_HULL_STAND_MIN        PLAYERCLASS_HULL_STAND_MIN
#define SAPPERCLASS_HULL_STAND_MAX        PLAYERCLASS_HULL_STAND_MAX
#define SAPPERCLASS_VIEWOFFSET_STAND    PLAYERCLASS_VIEWOFFSET_STAND

#define SAPPERCLASS_HULL_DUCK_MIN        PLAYERCLASS_HULL_DUCK_MIN
#define SAPPERCLASS_HULL_DUCK_MAX        PLAYERCLASS_HULL_DUCK_MAX
#define SAPPERCLASS_VIEWOFFSET_DUCK        PLAYERCLASS_VIEWOFFSET_DUCK

#define SAPPERCLASS_STEPSIZE            PLAYERCLASS_STEPSIZE

struct PlayerClassSapperData_t
{
    DECLARE_PREDICTABLE();

    enum { PLAYERCLASS_ID = TFCLASS_SAPPER };
};


#include "tf_shareddefs.h"


#endif
C++:
#include "cbase.h"
#include "tf_player.h"
#include "tf_class_sniper.h"
#include "in_buttons.h"
#include "tf_team.h"
#include "tf_class_support.h"
#include "order_killmortarguy.h"


bool IsEntityVisibleToTactical( int iLocalTeamNumber, int iLocalTeamPlayers,
    int iLocalTeamScanners, int iEntIndex, const char *pEntName, int pEntTeamNumber, const Vector &pEntOrigin );

ConVar    class_sniper_speed( "class_sniper_speed","200", FCVAR_NONE, "Sniper movement speed" );

#define SNIPER_MAX_HIDE_LEVEL            60
#define SNIPER_HIDE_INCREASE_PER_SEC    15
#define SNIPER_FIRE_UNHIDE_TIME            5.0

BEGIN_SEND_TABLE_NOBASE( CPlayerClassSniper, DT_PlayerClassSniperData )
END_SEND_TABLE()

const char *CPlayerClassSniper::GetClassModelString( int nTeam )
{
    static const char *string = "models/player/sniper.mdl";
    return string;
}

CPlayerClassSniper::CPlayerClassSniper( CBaseTFPlayer *pPlayer, TFClass iClass ) : CPlayerClass( pPlayer, iClass )
{
    for (int i = 0; i < MAX_TF_TEAMS; ++i)
    {
        SetClassModel( MAKE_STRING(GetClassModelString(i)), i );
    }
}

CPlayerClassSniper::~CPlayerClassSniper()
{
}

void CPlayerClassSniper::ClassActivate( void )
{
    BaseClass::ClassActivate();

    SetupMoveData();

    m_bHiding = false;
    m_flHideTransparency = 0.0f;
    m_flLastHideUpdate = 0.0f;

    m_bCanHide = false;

    memset( &m_ClassData, 0, sizeof( m_ClassData ) );
}

void CPlayerClassSniper::ClassDeactivate( void )
{
    BaseClass::ClassDeactivate();
}

void CPlayerClassSniper::RespawnClass( void )
{
    BaseClass::RespawnClass();
   
    m_bHiding = false;
    m_flHideTransparency = m_flLastHideUpdate = 0;
}

bool CPlayerClassSniper::ResupplyAmmo( float flFraction, ResupplyReason_t reason )
{
    bool bGiven = false;

    if ((reason == RESUPPLY_ALL_FROM_STATION) || (reason == RESUPPLY_AMMO_FROM_STATION))
    {
        if (ResupplyAmmoType( 100 * flFraction, "Bullets" ))
            bGiven = true;
    }

    if ( BaseClass::ResupplyAmmo(flFraction, reason) )
        bGiven = true;

    return bGiven;
}

void CPlayerClassSniper::SetupMoveData( void )
{
    m_flMaxWalkingSpeed = class_sniper_speed.GetFloat();
}

void CPlayerClassSniper::SetupSizeData( void )
{
    m_pPlayer->SetCollisionBounds( SNIPERCLASS_HULL_STAND_MIN, SNIPERCLASS_HULL_STAND_MAX );
    m_pPlayer->SetViewOffset( SNIPERCLASS_VIEWOFFSET_STAND );
    m_pPlayer->m_Local.m_flStepSize = SNIPERCLASS_STEPSIZE;   
}

float CPlayerClassSniper::GetDeployTime( void )
{
    return 2.8;
};

void CPlayerClassSniper::ClassThink( void )
{
    if ( m_bCanHide )
    {
        CheckHiding();
    }

    BaseClass::ClassThink();
}

void CPlayerClassSniper::GainedNewTechnology( CBaseTechnology *pTechnology )
{
    if ( m_pPlayer->HasNamedTechnology( "sniper_deploy_stealth" ) )
    {
        m_bCanHide = true;
    }
    else
    {
        m_bCanHide = false;
    }

    BaseClass::GainedNewTechnology( pTechnology );
}

void CPlayerClassSniper::CheckHiding( void )
{
    if ( m_pPlayer->HasPowerup(POWERUP_EMP) )
    {
        m_pPlayer->ClearCamouflage();
        return;
    }
    if ( m_pPlayer->m_afButtonReleased & IN_ATTACK )
    {
        m_pPlayer->ClearCamouflage();
    }
    else if ( !m_pPlayer->IsDeployed() )
    {
        m_pPlayer->ClearCamouflage();
    }
    else
    {
        if ( m_pPlayer->LastAttackTime() + SNIPER_FIRE_UNHIDE_TIME < gpGlobals->curtime )
        {
            m_pPlayer->SetCamouflaged( SNIPER_MAX_HIDE_LEVEL, SNIPER_HIDE_INCREASE_PER_SEC );
        }
        else
        {
            m_pPlayer->ClearCamouflage();
        }
    }
}

void CPlayerClassSniper::CreatePersonalOrder( void )
{
    if ( CreateInitialOrder() )
        return;
   
    if ( COrderKillMortarGuy::CreateOrder( this ) )
        return;

    BaseClass::CreatePersonalOrder();
}

void CPlayerClassSniper::SetPlayerHull( void )
{
    if ( m_pPlayer->GetFlags() & FL_DUCKING )
    {
        m_pPlayer->SetCollisionBounds( SNIPERCLASS_HULL_DUCK_MIN, SNIPERCLASS_HULL_DUCK_MAX );
    }
    else
    {
        m_pPlayer->SetCollisionBounds( SNIPERCLASS_HULL_STAND_MIN, SNIPERCLASS_HULL_STAND_MAX );
    }
}

void CPlayerClassSniper::ResetViewOffset( void )
{
    if ( m_pPlayer )
    {
        m_pPlayer->SetViewOffset( SNIPERCLASS_VIEWOFFSET_STAND );
    }
}
C++:
// This should actually be a .h file for header
#ifndef TF_CLASS_SNIPER_H
#define TF_CLASS_SNIPER_H
#pragma once

#include "TFClassData_Shared.h"

class CPlayerClassSniper : public CPlayerClass
{
public:
    DECLARE_CLASS( CPlayerClassSniper, CPlayerClass );

    CPlayerClassSniper( CBaseTFPlayer *pPlayer, TFClass iClass  );
    ~CPlayerClassSniper();

    virtual void    ClassActivate( void );
    virtual void    ClassDeactivate( void );

    virtual const char*    GetClassModelString( int nTeam );

    virtual void    GainedNewTechnology( CBaseTechnology *pTechnology );

    virtual void    RespawnClass( void );
    virtual bool    ResupplyAmmo( float flPercentage, ResupplyReason_t reason );
    virtual void    SetupMoveData( void );
    virtual void    SetupSizeData( void );
    virtual void    ResetViewOffset( void );

    PlayerClassSniperData_t *GetClassData( void ) { return &m_ClassData; }

    virtual float    GetDeployTime( void );

    virtual void    ClassThink();
    void            CheckHiding( void );

    virtual void        CreatePersonalOrder( void );

    virtual void    SetPlayerHull( void );

protected:
    bool    m_bHiding;
    float    m_flHideTransparency;
    float    m_flLastHideUpdate;

    PlayerClassSniperData_t    m_ClassData;

private:
    bool    m_bCanHide;
};

EXTERN_SEND_TABLE( DT_PlayerClassSniperData )

#endif
C++:
#include <windows.h>
int main(){
    MessageBox(NULL, "meow", "Popup", MB_OK | MB_ICONINFORMATION);
    return 0;
}
Metro Golden Meower

Following

Followers

Trophies

  1. 1

    200 Posts

  2. 1

    Received 10 Likes

    Your messages have been positively reacted to 25 times.
  3. 1

    100 Posts

  4. 1

    20 Posts

  5. 1

    Received First Like

    Somebody out there reacted positively to one of your messages. Keep posting like that for more!
  6. 1

    First Message

    You posted! Congrats.
  7. 1

    Thanks for donating!