Files
source-sdk-2013/sp/src/game/shared/mapbase/weapon_custom_scripted.h
samisalreadytaken bf182e1c5d vscript additions and fixes:
baseentity_shared.cpp
baseentity.cpp
c_baseentity.h
c_baseentity.cpp
c_world.h
   - Fixed critical ScriptSetContextThink bugs
   - Added C_BaseEntity::SetContextThink (ScriptSetContextThink)
   - Added C_BaseEntity::SetSize
   - Added C_BaseEntity::SetModel
   - Added C_BaseEntity::Destroy

baseentity.h
baseentity.cpp
   - Removed duplicate functions ScriptSetSize and ScriptUtilRemove

player.cpp
   - Moved player script instance registration before player_spawn event

vscript_server.cpp
   - Added CEntities::FindByClassNearestFacing

vscript_funcs_shared.cpp
   - Added GetFrameCount
   - Added IntervalPerTick

vscript_singletons.cpp
   - Better game event descriptors for CScriptGameEventListener
   - Added ::effects (CEffectsScriptHelper)
   - Added ::Convars (CScriptConvarAccessor)

vscript_shared.cpp
   - Fixed clientside entity printing in script VM

mapbase_con_groups.h
mapbase_con_groups.cpp
   - Improved performance by changing string comparisons to direct array access

vscript_bindings_base.h
vscript_bindings_base.cpp
   - Added CScriptKeyValues::SubKeysToTable

vscript_bindings_math.cpp
   - Added ::SimpleSplineRemapVal
   - Added ::SimpleSplineRemapValClamped
   - Added ::Bias
   - Added ::Gain
   - Added ::SmoothCurve
   - Added ::SmoothCurve_Tweak
   - Added ::ExponentialDecay

vscript_squirrel.nut
   - Added ::Lerp
   - Added ::FLerp
   - Added ::SimpleSpline

vscript_squirrel.cpp
   - Added Vector::_unm
   - Added Vector::Set
   - Added Vector::Add
   - Added Vector::Subtract
   - Added Vector::Multiply
   - Added Vector::Divide
   - Added Vector::DistTo
   - Added Vector::DistToSqr
   - Added Vector::IsEqualTo
   - Added Vector::WithinAABox
   - Added Vector::FromKVString
   - Changed vector print syntax
2021-03-06 02:04:55 +02:00

203 lines
6.1 KiB
C++

//========= Mapbase - https://github.com/mapbase-source/source-sdk-2013 =================
//
// Purpose: VScript-driven custom weapon class.
//
// $NoKeywords: $
//=============================================================================
#ifndef WEAPON_CUSTOM_SCRIPTED_H
#define WEAPON_CUSTOM_SCRIPTED_H
#ifdef _WIN32
#pragma once
#endif
#include "basecombatweapon_shared.h"
#ifdef CLIENT_DLL
#include "vscript_client.h"
#endif
// The base class of the scripted weapon is game-specific.
#if defined(HL2_DLL) || defined(HL2_CLIENT_DLL)
#include "basehlcombatweapon_shared.h"
#define SCRIPTED_WEAPON_DERIVED_FROM CBaseHLCombatWeapon
#else
#define SCRIPTED_WEAPON_DERIVED_FROM CBaseCombatWeapon
#endif
#ifdef CLIENT_DLL
#define CWeaponCustomScripted C_WeaponCustomScripted
#endif
#define DECLARE_CACHED_HOOK(name) static ScriptHook_t g_Hook_##name; \
HSCRIPT m_Func_##name;
class CWeaponCustomScripted : public SCRIPTED_WEAPON_DERIVED_FROM
{
public:
DECLARE_CLASS( CWeaponCustomScripted, SCRIPTED_WEAPON_DERIVED_FROM );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
CWeaponCustomScripted();
bool RunWeaponHook( ScriptHook_t &hook, HSCRIPT &cached, ScriptVariant_t *retVal = NULL, ScriptVariant_t *pArgs = NULL );
bool KeyValue( const char *szKeyName, const char *szValue );
bool GetKeyValue( const char *szKeyName, char *szValue, int iMaxLen );
// Base script has a function for this
//void Precache( void );
void Spawn( void );
bool IsPredicted( void ) const { return m_iszClientScripts[0] != '\0'; }
const char* GetWeaponScriptName() { return m_iszWeaponScriptName[0] != '\0' ? m_iszWeaponScriptName : BaseClass::GetWeaponScriptName(); }
// Weapon selection
bool HasAnyAmmo( void ); // Returns true is weapon has ammo
bool HasPrimaryAmmo( void ); // Returns true is weapon has ammo
bool HasSecondaryAmmo( void ); // Returns true is weapon has ammo
bool CanHolster( void ); // returns true if the weapon can be holstered
bool CanDeploy( void ); // return true if the weapon's allowed to deploy
bool Deploy( void ); // returns true is deploy was successful
bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
// Weapon behaviour
void ItemPreFrame( void ); // called each frame by the player PreThink
void ItemPostFrame( void ); // called each frame by the player PostThink
void ItemBusyFrame( void ); // called each frame by the player PostThink, if the player's not ready to attack yet
void ItemHolsterFrame( void ); // called each frame by the player PreThink, if the weapon is holstered
void WeaponIdle( void ); // called when no buttons pressed
void HandleFireOnEmpty(); // Called when they have the attack button down
// Reloading
void CheckReload( void );
void FinishReload( void );
void AbortReload( void );
bool Reload( void );
void Reload_NPC( void );
// Weapon firing
void PrimaryAttack( void ); // do "+ATTACK"
void SecondaryAttack( void ); // do "+ATTACK2"
// Firing animations
Activity GetPrimaryAttackActivity( void );
Activity GetSecondaryAttackActivity( void );
Activity GetDrawActivity( void );
float GetDefaultAnimSpeed( void );
// Bullet launch information
const Vector& GetBulletSpread( void );
Vector GetBulletSpread( WeaponProficiency_t proficiency );
float GetFireRate( void );
int GetMinBurst();
int GetMaxBurst();
float GetMinRestTime();
float GetMaxRestTime();
void AddViewKick( void );
#ifndef CLIENT_DLL
bool WeaponLOSCondition( const Vector &ownerPos, const Vector &targetPos, bool bSetConditions );
int WeaponRangeAttack1Condition( float flDot, float flDist );
int WeaponRangeAttack2Condition( float flDot, float flDist );
int WeaponMeleeAttack1Condition( float flDot, float flDist );
int WeaponMeleeAttack2Condition( float flDot, float flDist );
#endif
ALLOW_SCRIPT_ACCESS();
private:
// Weapon selection
DECLARE_CACHED_HOOK( HasAnyAmmo );
DECLARE_CACHED_HOOK( HasPrimaryAmmo );
DECLARE_CACHED_HOOK( HasSecondaryAmmo );
DECLARE_CACHED_HOOK( CanHolster );
DECLARE_CACHED_HOOK( CanDeploy );
DECLARE_CACHED_HOOK( Deploy );
DECLARE_CACHED_HOOK( Holster );
// Weapon behaviour
DECLARE_CACHED_HOOK( ItemPreFrame );
DECLARE_CACHED_HOOK( ItemPostFrame );
DECLARE_CACHED_HOOK( ItemBusyFrame );
DECLARE_CACHED_HOOK( ItemHolsterFrame );
DECLARE_CACHED_HOOK( WeaponIdle );
DECLARE_CACHED_HOOK( HandleFireOnEmpty );
// Reloading
DECLARE_CACHED_HOOK( CheckReload );
DECLARE_CACHED_HOOK( FinishReload );
DECLARE_CACHED_HOOK( AbortReload );
DECLARE_CACHED_HOOK( Reload );
DECLARE_CACHED_HOOK( Reload_NPC );
// Weapon firing
DECLARE_CACHED_HOOK( PrimaryAttack );
DECLARE_CACHED_HOOK( SecondaryAttack );
// Firing animations
DECLARE_CACHED_HOOK( GetPrimaryAttackActivity );
DECLARE_CACHED_HOOK( GetSecondaryAttackActivity );
DECLARE_CACHED_HOOK( GetDrawActivity );
DECLARE_CACHED_HOOK( GetDefaultAnimSpeed );
// Bullet launch information
DECLARE_CACHED_HOOK( GetBulletSpread );
DECLARE_CACHED_HOOK( GetBulletSpreadForProficiency );
DECLARE_CACHED_HOOK( GetFireRate );
DECLARE_CACHED_HOOK( GetMinBurst );
DECLARE_CACHED_HOOK( GetMaxBurst );
DECLARE_CACHED_HOOK( GetMinRestTime );
DECLARE_CACHED_HOOK( GetMaxRestTime );
DECLARE_CACHED_HOOK( AddViewKick );
#ifndef CLIENT_DLL
DECLARE_CACHED_HOOK( WeaponLOSCondition );
DECLARE_CACHED_HOOK( WeaponRangeAttack1Condition );
DECLARE_CACHED_HOOK( WeaponRangeAttack2Condition );
DECLARE_CACHED_HOOK( WeaponMeleeAttack1Condition );
DECLARE_CACHED_HOOK( WeaponMeleeAttack2Condition );
#endif
DECLARE_CACHED_HOOK( ActivityList );
DECLARE_CACHED_HOOK( ActivityListCount );
private:
CNetworkString( m_iszClientScripts, 256 );
CNetworkString( m_iszWeaponScriptName, 256 );
protected:
DECLARE_ACTTABLE();
DECLARE_DATADESC();
DECLARE_ENT_SCRIPTDESC();
};
/*
class CWeaponCustomScripted1 : public CWeaponCustomScripted
{
DECLARE_PREDICTABLE();
};
class CWeaponCustomScripted2 : public CWeaponCustomScripted
{
DECLARE_PREDICTABLE();
};
class CWeaponCustomScripted3 : public CWeaponCustomScripted
{
DECLARE_PREDICTABLE();
};
class CWeaponCustomScripted4 : public CWeaponCustomScripted
{
DECLARE_PREDICTABLE();
};
*/
#endif