Portable Half-Life SDK. GoldSource and Xash3D. Crossplatform.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

210 lines
5.5 KiB

#ifndef GRAVGUNMOD_H
#define GRAVGUNMOD_H
extern cvar_t cvar_allow_gravgun;
extern cvar_t cvar_allow_ar2;
extern cvar_t cvar_ar2_mp5;
extern cvar_t cvar_ar2_bullets;
extern cvar_t cvar_ar2_balls;
extern cvar_t cvar_allow_bigcock;
extern cvar_t cvar_allow_gateofbabylon;
extern cvar_t cvar_wresptime;
extern cvar_t cvar_iresptime;
extern cvar_t mp_gravgun_players;
extern cvar_t mp_skipdefaults;
extern cvar_t mp_unduck;
extern cvar_t cvar_gibtime;
extern cvar_t cvar_hgibcount;
extern cvar_t cvar_agibcount;
extern cvar_t mp_spectator;
extern cvar_t mp_fixhornetbug;
extern cvar_t mp_checkentities;
extern cvar_t mp_touchmenu;
extern cvar_t mp_fixsavetime;
// distance clipping (client.cpp)
// useful for open world
extern cvar_t mp_serverdistclip;
extern cvar_t mp_maxbmodeldist;
extern cvar_t mp_maxtrashdist;
extern cvar_t mp_maxwaterdist;
extern cvar_t mp_maxmonsterdist;
extern cvar_t mp_maxotherdist;
extern cvar_t mp_enttools_checkmodels;
// tempentity clipping
// if enabled, ignores PVS, so use only on open world
extern cvar_t mp_servercliptents;
extern cvar_t mp_maxtentdist;
// control decals count from server
// decals is unuseful on sandbox servers
// 100 instancs of single bmodel with 100 decals
// will cause in 10000 decals in frame
// r_decals limit does not cover it because it
// only limit decal count on different models
extern cvar_t mp_maxdecals;
void GGM_RegisterCVars( void );
#define GC_COMMON (1<<0)
#define GC_ENTTOOLS (1<<1)
void Ent_RunGC( int flags, const char *userid, const char *pattern = NULL );
bool Q_stricmpext( const char *pattern, const char *text );
class CBasePlayer;
void GGM_ClientPutinServer(edict_t *pEntity , CBasePlayer *pPlayer);
void GGM_ClientFirstSpawn(CBasePlayer *pPlayer );
const char *GGM_GetPlayerID( edict_t *player );
edict_t *GGM_PlayerByID( const char *id );
void GGM_Say( edict_t *pEntity );
bool GGM_ClientCommand( CBasePlayer *player, const char *pCmd );
void GGM_InitialMenus( CBasePlayer *pPlayer );
void GGM_CvarValue2( const edict_t *pEnt, int requestID, const char *cvarName, const char *value );
enum PlayerState
{
STATE_UNINITIALIZED = 0,
STATE_CONNECTED,
STATE_SPECTATOR_BEGIN,
STATE_SPAWNED,
STATE_SPECTATOR,
STATE_POINT_SELECT,
STATE_LOAD_FIX
};
enum PlayerMenuState
{
MENUSTATE_NONE = 0,
MENUSTATE_COOPMENU,
MENUSTATE_COOPMENU_SPEC,
MENUSTATE_CHECKPOINT,
MENUSTATE_GLOBAL,
MENUSTATE_LOCAL_CONFIRM
};
class GGM_PlayerMenu
{
struct GGM_MenuItem
{
char szCommand[256];
char szName[32];
} m_rgItems[5];
int m_iCount;
char m_sTitle[32];
bool m_fShow;
public:
CBasePlayer *m_pPlayer;
bool MenuSelect( int select );
GGM_PlayerMenu &SetTitle( const char *title );
GGM_PlayerMenu &New( const char *title, bool force = true );
GGM_PlayerMenu &Add( const char *name, const char *command );
GGM_PlayerMenu &Clear( void );
void Show();
};
// full player map-independed position data
struct GGMPosition
{
Vector vecOrigin;
Vector vecAngles;
char szMapName[32];
char szTrainGlobal[32];
Vector vecTrainOffset;
Vector vecTrainAngles;
bool fDuck;
};
// login record
// this maps pair of nickname and uid to registration
struct GGMLogin
{
struct GGMLogin *pNext;
struct {
char szUID[33];
char szName[32];
} f;
struct GGMPlayerState *pState;
};
// registration and game stats
// saved on every change to separate file
// but only for registered users
struct GGMPersist
{
/// todo:salt/hash
char szPassword[33];
};
// complete player state
// saved on save request, but kept in runtime
struct GGMTempState
{
float flHealth;
float flBattery;
int iFrags;
int iDeaths;
char rgszWeapons[MAX_WEAPONS][32];// weapon names
char rgiClip[MAX_WEAPONS];// ammo names
int rgszAmmo[MAX_AMMO_SLOTS];// ammo quantities
char szWeaponName[32];
GGMPosition pos;
bool fIsTempBanned; // prevent some actions
};
// state which every spawned player has
struct GGMPlayerState
{
struct GGMPlayerState *pNext;
struct GGMPersist p;
struct GGMTempState t;
bool fRegistered;
bool fNeedWrite;
// uid or nickname
char szUID[33];
};
// player ggm data. additional struct for CBasePlayer
struct GGMData
{
float flSpawnTime;
PlayerState iState;
bool fTouchMenu;
int iLocalConfirm;
edict_t *pChangeLevel;
float flEntScore;
float flEntTime;
GGM_PlayerMenu menu;
bool fTouchLoading;
struct GGMPlayerState *pState;
char fRegisterInput[32];
};
struct GGMPlayerState *GGM_GetState(const char *uid, const char *name);
bool GGM_RestoreState( CBasePlayer *pPlayer );
bool GGM_RestorePosition( CBasePlayer *pPlayer, struct GGMPosition *pos );
void GGM_SavePosition( CBasePlayer *pPlayer, struct GGMPosition *pos );
void GGM_SaveState( CBasePlayer *pPlayer );
bool GGM_PlayerSpawn( CBasePlayer *pPlayer );
const char *GGM_GetAuthID( CBasePlayer *pPlayer );
void GGM_ServerActivate( void );
void COOP_SetupLandmarkTransition( const char *szNextMap, const char *szNextSpot, Vector vecLandmarkOffset, struct GGMPosition *pPos );
void GGM_ClearLists( void );
void GGM_Save( const char *savename );
void GGM_Load( const char *savename );
const char *GGM_PlayerName( CBaseEntity *pPlayer );
bool GGM_IsTempBanned( CBaseEntity *plr );
void GGM_TempBan( CBaseEntity *pEnt );
int GGM_ChangelevelVote( CBasePlayer *pPlayer, edict_t *pTrigger, const char *pszMapName );
void GGM_ClearVote( void );
void GGM_StartVoteCommand( CBasePlayer *pPlayer, const char *pszCommand, const char *pszMessage );
void GGM_ConnectSaveBot( void );
int GGM_ConnectionlessPacket( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size );
#endif // GRAVGUNMOD_H