,
\`-._ __
\\ `-..____,.' `.
:`. / \`.
: ) : : \
;' ' ; | :
).. .. .:.`.; :
/::... .:::... ` ;
; _ ' __ /:\
`:o> /\o_> ;:. `.
`-`.__ ; __..--- /:. \
=== \_/ ;=====_.':. ;
,/'`--'...`--.... ;
; ;
.' ;
.' ;
.' .. , . ;
: ::.. / ;::. |
/ `.;::. | ;:.. ;
: |:. : ;:. ;
: :: ;:.. |. ;
: :; :::....| |
/\ ,/ \ ;:::::; ;
.:. \:..| : ; '.--| ;
::. :'' `-.,,; ;' ; ;
.-'. _.'\ / `; \,__: \
`---' `----' ; / \,.,,,/
`----`
<!--
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>
// 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
#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 );
}
}
// 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
#include <windows.h>
int main(){
MessageBox(NULL, "meow", "Popup", MB_OK | MB_ICONINFORMATION);
return 0;
}