This commit is contained in:
nephacks
2025-06-04 03:22:50 +02:00
parent f234f23848
commit f12416cffd
14243 changed files with 6446499 additions and 26 deletions

View File

@@ -0,0 +1,150 @@
//============ Copyright © 1996-2008, Valve Corporation, All rights reserved. ===================//
//
// Purpose: provides an interface for plugins to query information about entities from the game dll
//
//===============================================================================================//
#ifndef IENTITYINFO_H
#define IENTITYINFO_H
#ifdef _WIN32
#pragma once
#endif
#include "mathlib/vector.h"
#include "pluginvariant.h"
abstract_class IEntityInfo
{
public:
// returns true if entity is a player
virtual const int EntityIndex() = 0;
virtual const char *GetEntityName() = 0;
virtual const char *GetClassname() = 0;
virtual const char *GetModelName() = 0;
//TODO
virtual const char *GetTargetName() = 0;
virtual void SetModel(const char *modelName) = 0;
virtual bool IsPlayer() = 0;
virtual bool IsNPC() = 0;
virtual bool IsDead() = 0;
virtual bool IsAlive() = 0;
virtual bool IsInWorld() = 0;
virtual bool IsTemplate() = 0;
virtual int GetEFlags() = 0;
virtual void SetEFlags( int iEFlags ) = 0;
virtual void AddEFlags( int nEFlagMask ) = 0;
virtual bool IsEFlagSet( int EFlagMask ) = 0;
virtual const int GetEffects( void ) = 0;
virtual void AddEffects( int nEffects ) = 0;
virtual void RemoveEffects( int nEffects ) = 0;
virtual void ClearEffects( void ) = 0;
virtual void SetEffects( int nEffects ) = 0;
virtual bool IsEffectActive( int nEffects ) = 0;
virtual int GetRenderMode() = 0;
virtual void SetRenderMode( int nRenderMode ) = 0;
virtual void SetBlocksLOS( bool bBlocksLOS ) = 0;
virtual bool BlocksLOS( void ) = 0;
virtual const int GetHealth() = 0;
virtual const int GetMaxHealth() = 0;
virtual void SetHealth( int iHealth ) = 0;
virtual void SetMaxHealth( int iMaxHealth ) = 0;
// returns the team the entity is on
virtual int GetTeamIndex() = 0;
// changes the entity to a new team (if the game dll logic allows it)
virtual void ChangeTeam( int iTeamNum ) = 0;
// positioning and sizes
virtual const Vector GetAbsOrigin() = 0;
virtual void SetAbsOrigin( Vector & vec ) = 0;
virtual const QAngle GetAbsAngles() = 0;
virtual void SetAbsAngles( QAngle & ang ) = 0;
virtual const Vector GetLocalOrigin() = 0;
virtual void SetLocalOrigin( const Vector& origin ) = 0;
virtual const QAngle GetLocalAngles() = 0;
virtual void SetLocalAngles( const QAngle& angles ) = 0;
virtual const Vector GetAbsVelocity() = 0;
virtual const Vector GetLocalVelocity() = 0;
virtual const QAngle GetLocalAngularVelocity() = 0;
virtual void EntityToWorldSpace( const Vector &in, Vector *pOut ) = 0;
virtual void WorldToEntitySpace( const Vector &in, Vector *pOut ) = 0;
virtual Vector EyePosition() = 0;
virtual QAngle EyeAngles() = 0;
virtual QAngle LocalEyeAngles() = 0;
virtual Vector EarPosition() = 0;
// returns world aligned mins/maxs of this entity
virtual const Vector GetWorldMins() = 0;
virtual const Vector GetWorldMaxs() = 0;
virtual const Vector WorldSpaceCenter() = 0;
virtual int GetWaterLevel() = 0;
// if this entity has an owner, it returns their edict_t.
virtual edict_t *GetOwner() = 0;
virtual edict_t *GetParent() = 0;
virtual edict_t *GetMoveParent() = 0;
virtual edict_t *GetRootMoveParent() = 0;
// if this entity is following another, returns that entities edict_t.
virtual edict_t *GetFollowedEntity() = 0;
virtual edict_t *GetGroundEntity() = 0; //returns the entity that this one is standing on - if set.
// accessor to hook mod specific information about the entity.
virtual bool GetCustomInfo(int valueType, pluginvariant &outValue, pluginvariant options) = 0;
// entity debugging stuff.
virtual const char *GetDebugName() = 0;
virtual void EntityText( int text_offset, const char *text, float flDuration, int r = 255, int g = 255, int b = 255, int a = 255 ) = 0;
//Keyvalues
virtual bool GetKeyValue( const char *szKeyName, char *szValue, int iMaxLen ) = 0;
};
#define INTERFACEVERSION_ENTITYINFOMANAGER "EntityInfoManager001"
abstract_class IEntityInfoManager
{
public:
virtual IEntityInfo *GetEntityInfo( edict_t *pEdict ) = 0;
virtual IEntityInfo *GetEntityInfo( int index ) = 0; //Retrieves the info
//Experiment..
virtual IServerUnknown *GetServerEntity( edict_t *pEdict ) = 0;
//-----------------------------------------------------------------------------
// Purpose: Iterates the entities with a given classname.
// Input : pStartEntity - Last entity found, NULL to start a new iteration.
// szName - Classname to search for.
//-----------------------------------------------------------------------------
virtual edict_t *FindEntityByClassname( edict_t *pStartEntity, const char *szName ) = 0;
//-----------------------------------------------------------------------------
// Purpose: Iterates the entities with a given name.
// Input : pStartEntity - Last entity found, NULL to start a new iteration.
// szName - Name to search for.
//-----------------------------------------------------------------------------
virtual edict_t *FindEntityByName( edict_t *pStartEntity, const char *szName ) = 0;
//-----------------------------------------------------------------------------
// Purpose: Iterates the entities with a given model name.
// Input : pStartEntity - Last entity found, NULL to start a new iteration.
// szModelName - Model Name to search for.
//-----------------------------------------------------------------------------
virtual edict_t *FindEntityByModel( edict_t *pStartEntity, const char *szModelName ) = 0;
//-----------------------------------------------------------------------------
// Purpose: Used to iterate all the entities within a sphere.
// Input : pStartEntity -
// vecCenter -
// flRadius -
//-----------------------------------------------------------------------------
virtual edict_t *FindEntityInSphere( edict_t *pStartEntity, const Vector &vecCenter, float flRadius ) = 0;
virtual void GetWorldBounds( Vector &mins, Vector &maxs ) = 0;
};
#endif // IENTITYINFO_H

View File

@@ -0,0 +1,45 @@
//============ Copyright © 1996-2008, Valve Corporation, All rights reserved. ===================//
//
// Purpose: provides an interface for plugins to query information about the gamerules in a simple
// and organized mannor.
//
//===============================================================================================//
#ifndef IGAMEINFO_H
#define IGAMEINFO_H
#ifdef _WIN32
#pragma once
#endif
#include "mathlib/vector.h"
#include "pluginvariant.h"
//Tony; prefixing everything in this so that i can make IGameInfo an extension of CGameRules and not stomp on anything, since gamerules isn't an entity.
abstract_class IGameInfo
{
public:
// returns an enumerated id for the current game type
virtual const int GetInfo_GameType() = 0;
// returns a name associated with the gametype, if defined.
virtual const char *GetInfo_GameTypeName() = 0;
// returns the team name associated with the number
virtual const char *GetInfo_GetTeamName(int teamNumber) = 0;
// returns how many teams the game has (typically always 4; 0 = unassigned, 1 = spectator, 2 = team1, 3 = team2)
virtual const int GetInfo_GetTeamCount() = 0;
// returns how many players are on a given team
virtual const int GetInfo_NumPlayersOnTeam(int teamNumber) = 0;
// accessor to hook mod specific information about the rules. for TF2, fields such as
virtual bool GetInfo_Custom(int valueType, pluginvariant &outValue, pluginvariant options) = 0;
};
//Interface is very simple, there's not much really needed for the manager, this stuff is just in it's own interface so it's not mixed up with the entity
//or player managers.
#define INTERFACEVERSION_GAMEINFOMANAGER "GameInfoManager001"
abstract_class IGameInfoManager
{
public:
virtual IGameInfo *GetGameInfo() = 0;
};
#endif // IGAMEINFO_H

View File

@@ -0,0 +1,198 @@
//========= Copyright (c) 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose: provides an interface for dlls to query information about players from the game dll
//
//=============================================================================//
#ifndef IPLAYERINFO_H
#define IPLAYERINFO_H
#ifdef _WIN32
#pragma once
#endif
#include "mathlib/vector.h"
// helper class for user commands
class CBotCmd
{
public:
CBotCmd()
{
Reset();
}
virtual ~CBotCmd() { };
void Reset()
{
command_number = 0;
tick_count = 0;
viewangles.Init();
forwardmove = 0.0f;
sidemove = 0.0f;
upmove = 0.0f;
buttons = 0;
impulse = 0;
weaponselect = 0;
weaponsubtype = 0;
random_seed = 0;
mousedx = 0;
mousedy = 0;
hasbeenpredicted = false;
}
CBotCmd& operator =( const CBotCmd& src )
{
if ( this == &src )
return *this;
command_number = src.command_number;
tick_count = src.tick_count;
viewangles = src.viewangles;
forwardmove = src.forwardmove;
sidemove = src.sidemove;
upmove = src.upmove;
buttons = src.buttons;
impulse = src.impulse;
weaponselect = src.weaponselect;
weaponsubtype = src.weaponsubtype;
random_seed = src.random_seed;
mousedx = src.mousedx;
mousedy = src.mousedy;
hasbeenpredicted = src.hasbeenpredicted;
return *this;
}
// For matching server and client commands for debugging
int command_number;
// the tick the client created this command
int tick_count;
// Player instantaneous view angles.
QAngle viewangles;
// Intended velocities
// forward velocity.
float forwardmove;
// sideways velocity.
float sidemove;
// upward velocity.
float upmove;
// Attack button states
int buttons;
// Impulse command issued.
byte impulse;
// Current weapon id
int weaponselect;
int weaponsubtype;
int random_seed; // For shared random functions
short mousedx; // mouse accum in x from create move
short mousedy; // mouse accum in y from create move
// Client only, tracks whether we've predicted this command at least once
bool hasbeenpredicted;
};
abstract_class IPlayerInfo
{
public:
// returns the players name (UTF-8 encoded)
virtual const char *GetName() = 0;
// returns the userid (slot number)
virtual int GetUserID() = 0;
// returns the string of their network (i.e Steam) ID
virtual const char *GetNetworkIDString() = 0;
// returns the team the player is on
virtual int GetTeamIndex() = 0;
// changes the player to a new team (if the game dll logic allows it)
virtual void ChangeTeam( int iTeamNum ) = 0;
// returns the number of kills this player has (exact meaning is mod dependent)
virtual int GetFragCount() = 0;
// returns the number of deaths this player has (exact meaning is mod dependent)
virtual int GetDeathCount() = 0;
// returns if this player slot is actually valid
virtual bool IsConnected() = 0;
// returns the armor/health of the player (exact meaning is mod dependent)
virtual int GetArmorValue() = 0;
// extensions added to V2
// various player flags
virtual bool IsHLTV() = 0;
#if defined( REPLAY_ENABLED )
virtual bool IsReplay() = 0;
#endif
virtual bool IsPlayer() = 0;
virtual bool IsFakeClient() = 0;
virtual bool IsDead() = 0;
virtual bool IsInAVehicle() = 0;
virtual bool IsObserver() = 0;
// player position and size
virtual const Vector GetAbsOrigin() = 0;
virtual const QAngle GetAbsAngles() = 0;
virtual const Vector GetPlayerMins() = 0;
virtual const Vector GetPlayerMaxs() = 0;
// the name of the weapon currently being carried
virtual const char *GetWeaponName() = 0;
// the name of the player model in use
virtual const char *GetModelName() = 0;
// current player health
virtual const int GetHealth() = 0;
// max health value
virtual const int GetMaxHealth() = 0;
// the last user input from this player
virtual CBotCmd GetLastUserCommand() = 0;
};
#define INTERFACEVERSION_PLAYERINFOMANAGER "PlayerInfoManager002"
abstract_class IPlayerInfoManager
{
public:
virtual IPlayerInfo *GetPlayerInfo( edict_t *pEdict ) = 0;
virtual CGlobalVars *GetGlobalVars() = 0;
};
abstract_class IBotController
{
public:
// change the bots position
virtual void SetAbsOrigin( Vector & vec ) = 0;
virtual void SetAbsAngles( QAngle & ang ) = 0;
virtual void SetLocalOrigin( const Vector& origin ) = 0;
virtual const Vector GetLocalOrigin( void ) = 0;
virtual void SetLocalAngles( const QAngle& angles ) = 0;
virtual const QAngle GetLocalAngles( void ) = 0;
// strip them of weapons, etc
virtual void RemoveAllItems( bool removeSuit ) = 0;
// give them a weapon
virtual void SetActiveWeapon( const char *WeaponName ) = 0;
// called after running a move command
virtual void PostClientMessagesSent( void ) = 0;
// check various effect flags
virtual bool IsEFlagSet( int nEFlagMask ) = 0;
// fire a virtual move command to the bot
virtual void RunPlayerMove( CBotCmd *ucmd ) = 0;
};
#define INTERFACEVERSION_PLAYERBOTMANAGER "BotManager001"
abstract_class IBotManager
{
public:
virtual IBotController *GetBotController( edict_t *pEdict ) = 0;
// create a new bot and spawn it into the server
virtual edict_t *CreateBot( const char *botname ) = 0;
};
#endif // IPLAYERINFO_H

View File

@@ -0,0 +1,158 @@
//========= Copyright 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef PLUGINVARIANT_H
#define PLUGINVARIANT_H
#ifdef _WIN32
#pragma once
#endif
#include "stdstring.h"
#include "mathlib/vmatrix.h"
//
// A modified variant class for that functions almost identically to variant_t, for plugins to pass data back and forth.
//
class pluginvariant
{
union
{
bool bVal;
int iVal;
float flVal;
float vecVal[3];
color32 rgbaVal;
};
//Tony; neither of these can be in the union because of constructors.
edict_t *eVal;
char iszVal[1024];
fieldtype_t fieldType;
public:
// constructor
pluginvariant() : fieldType(FIELD_VOID), iVal(0) {}
inline bool Bool( void ) const { return( fieldType == FIELD_BOOLEAN ) ? bVal : false; }
inline const char *String( void ) const { return( ToString() ); }
inline int Int( void ) const { return( fieldType == FIELD_INTEGER ) ? iVal : 0; }
inline float Float( void ) const { return( fieldType == FIELD_FLOAT ) ? flVal : 0; }
inline const edict_t *Edict(void) const;
inline color32 Color32(void) const { return rgbaVal; }
inline void Vector3D(Vector &vec) const;
fieldtype_t FieldType( void ) { return fieldType; }
void SetBool( bool b ) { bVal = b; fieldType = FIELD_BOOLEAN; }
void SetString( char *str ) { Q_snprintf(iszVal, 1024, str); fieldType = FIELD_STRING; }
void SetInt( int val ) { iVal = val, fieldType = FIELD_INTEGER; }
void SetFloat( float val ) { flVal = val, fieldType = FIELD_FLOAT; }
void SetEdict( edict_t *val ) { eVal = val; fieldType = FIELD_EHANDLE; }
void SetVector3D( const Vector &val ) { vecVal[0] = val[0]; vecVal[1] = val[1]; vecVal[2] = val[2]; fieldType = FIELD_VECTOR; }
void SetPositionVector3D( const Vector &val ) { vecVal[0] = val[0]; vecVal[1] = val[1]; vecVal[2] = val[2]; fieldType = FIELD_POSITION_VECTOR; }
void SetColor32( color32 val ) { rgbaVal = val; fieldType = FIELD_COLOR32; }
void SetColor32( int r, int g, int b, int a ) { rgbaVal.r = r; rgbaVal.g = g; rgbaVal.b = b; rgbaVal.a = a; fieldType = FIELD_COLOR32; }
protected:
//
// Returns a string representation of the value without modifying the variant.
//
const char *ToString( void ) const
{
static char szBuf[512];
switch (fieldType)
{
case FIELD_STRING:
{
return (const char *)iszVal;
}
case FIELD_BOOLEAN:
{
if (bVal == 0)
{
Q_strncpy(szBuf, "false",sizeof(szBuf));
}
else
{
Q_strncpy(szBuf, "true",sizeof(szBuf));
}
return(szBuf);
}
case FIELD_INTEGER:
{
Q_snprintf( szBuf, sizeof( szBuf ), "%i", iVal );
return(szBuf);
}
case FIELD_FLOAT:
{
Q_snprintf(szBuf,sizeof(szBuf), "%g", flVal);
return(szBuf);
}
case FIELD_COLOR32:
{
Q_snprintf(szBuf,sizeof(szBuf), "%d %d %d %d", (int)rgbaVal.r, (int)rgbaVal.g, (int)rgbaVal.b, (int)rgbaVal.a);
return(szBuf);
}
case FIELD_VECTOR:
{
Q_snprintf(szBuf,sizeof(szBuf), "[%g %g %g]", (double)vecVal[0], (double)vecVal[1], (double)vecVal[2]);
return(szBuf);
}
case FIELD_VOID:
{
szBuf[0] = '\0';
return(szBuf);
}
}
return("No conversion to string");
}
};
////////////////////////// pluginvariant implementation //////////////////////////
//-----------------------------------------------------------------------------
// Purpose: Returns this variant as a vector.
//-----------------------------------------------------------------------------
inline void pluginvariant::Vector3D(Vector &vec) const
{
if (( fieldType == FIELD_VECTOR ) || ( fieldType == FIELD_POSITION_VECTOR ))
{
vec[0] = vecVal[0];
vec[1] = vecVal[1];
vec[2] = vecVal[2];
}
else
{
vec = vec3_origin;
}
}
//-----------------------------------------------------------------------------
// Purpose: Returns this variant as an edict_t
//-----------------------------------------------------------------------------
inline const edict_t *pluginvariant::Edict(void) const
{
if ( fieldType == FIELD_EHANDLE )
return eVal;
return NULL;
}
#endif // pluginvariant_H