mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2024-12-28 15:45:41 +03:00
3d252fe527
Fixed some critical bugs and typos (carrer_task, tutor, zbot and other) Added command line option `-bots` to run bots in CS 1.6 Removed the tests demo record/player from myself the project and also dependency of the steam library. Fixed the progress bar when generating a nav file.
393 lines
12 KiB
C++
393 lines
12 KiB
C++
/*
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* In addition, as a special exception, the author gives permission to
|
|
* link the code of this program with the Half-Life Game Engine ("HL
|
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
|
* respects for all of the code used other than the HL Engine and MODs
|
|
* from Valve. If you modify this file, you may extend this exception
|
|
* to your version of the file, but you are not obligated to do so. If
|
|
* you do not wish to do so, delete this exception statement from your
|
|
* version.
|
|
*
|
|
*/
|
|
|
|
#ifndef MAPRULES_H
|
|
#define MAPRULES_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#define MAX_EQUIP 32
|
|
#define SF_SCORE_NEGATIVE 0x0001
|
|
#define SF_SCORE_TEAM 0x0002
|
|
|
|
#define SF_ENVTEXT_ALLPLAYERS 0x0001
|
|
|
|
#define SF_TEAMMASTER_FIREONCE 0x0001
|
|
#define SF_TEAMMASTER_ANYTEAM 0x0002
|
|
|
|
#define SF_TEAMSET_FIREONCE 0x0001
|
|
#define SF_TEAMSET_CLEARTEAM 0x0002
|
|
|
|
#define SF_PKILL_FIREONCE 0x0001
|
|
|
|
#define SF_GAMECOUNT_FIREONCE 0x0001
|
|
#define SF_GAMECOUNT_RESET 0x0002
|
|
|
|
#define SF_GAMECOUNTSET_FIREONCE 0x0001
|
|
|
|
#define SF_PLAYEREQUIP_USEONLY 0x0001
|
|
|
|
#define SF_PTEAM_FIREONCE 0x0001
|
|
#define SF_PTEAM_KILL 0x0002
|
|
#define SF_PTEAM_GIB 0x0004
|
|
|
|
class CRuleEntity: public CBaseEntity
|
|
{
|
|
public:
|
|
virtual void Spawn();
|
|
virtual void KeyValue(KeyValueData *pkvd);
|
|
virtual int Save(CSave &save);
|
|
virtual int Restore(CRestore &restore);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Spawn_();
|
|
void KeyValue_(KeyValueData *pkvd);
|
|
int Save_(CSave &save);
|
|
int Restore_(CRestore &restore);
|
|
|
|
#endif
|
|
|
|
public:
|
|
static TYPEDESCRIPTION IMPL(m_SaveData)[1];
|
|
|
|
void SetMaster(int iszMaster) { m_iszMaster = iszMaster; }
|
|
|
|
protected:
|
|
BOOL CanFireForActivator(CBaseEntity *pActivator);
|
|
|
|
private:
|
|
string_t m_iszMaster;
|
|
};
|
|
|
|
// CRulePointEntity -- base class for all rule "point" entities (not brushes)
|
|
class CRulePointEntity: public CRuleEntity
|
|
{
|
|
public:
|
|
virtual void Spawn();
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Spawn_();
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
// CRuleBrushEntity -- base class for all rule "brush" entities (not brushes)
|
|
// Default behavior is to set up like a trigger, invisible, but keep the model for volume testing
|
|
class CRuleBrushEntity: public CRuleEntity
|
|
{
|
|
public:
|
|
virtual void Spawn();
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Spawn_();
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
// CGameScore / game_score -- award points to player / team
|
|
// Points +/- total
|
|
// Flag: Allow negative scores SF_SCORE_NEGATIVE
|
|
// Flag: Award points to team in teamplay SF_SCORE_TEAM
|
|
class CGameScore: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Spawn();
|
|
virtual void KeyValue(KeyValueData *pkvd);
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Spawn_();
|
|
void KeyValue_(KeyValueData *pkvd);
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
int Points() const { return int(pev->frags); }
|
|
BOOL AllowNegativeScore() { return pev->spawnflags & SF_SCORE_NEGATIVE; }
|
|
BOOL AwardToTeam() const { return pev->spawnflags & SF_SCORE_TEAM; }
|
|
|
|
void SetPoints(int points) { pev->frags = points; }
|
|
};
|
|
|
|
// CGameEnd / game_end -- Ends the game in MP
|
|
class CGameEnd: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
// CGameText / game_text -- NON-Localized HUD Message (use env_message to display a titles.txt message)
|
|
// Flag: All players SF_ENVTEXT_ALLPLAYERS
|
|
class CGameText: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void KeyValue(KeyValueData *pkvd);
|
|
virtual int Save(CSave &save);
|
|
virtual int Restore(CRestore &restore);
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void KeyValue_(KeyValueData *pkvd);
|
|
int Save_(CSave &save);
|
|
int Restore_(CRestore &restore);
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL MessageToAll() const { return (pev->spawnflags & SF_ENVTEXT_ALLPLAYERS) == SF_ENVTEXT_ALLPLAYERS; }
|
|
void MessageSet(const char *pMessage) { pev->message = ALLOC_STRING(pMessage); }
|
|
const char *MessageGet() const { return STRING(pev->message); }
|
|
|
|
public:
|
|
static TYPEDESCRIPTION IMPL(m_SaveData)[1];
|
|
|
|
private:
|
|
hudtextparms_t m_textParms;
|
|
};
|
|
|
|
// CGameTeamMaster / game_team_master -- "Masters" like multisource, but based on the team of the activator
|
|
// Only allows mastered entity to fire if the team matches my team
|
|
//
|
|
// team index (pulled from server team list "mp_teamlist"
|
|
// Flag: Remove on Fire
|
|
// Flag: Any team until set? -- Any team can use this until the team is set (otherwise no teams can use it)
|
|
class CGameTeamMaster: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void KeyValue(KeyValueData *pkvd);
|
|
virtual int ObjectCaps() { return (CRulePointEntity::ObjectCaps() | FCAP_MASTER); }
|
|
virtual BOOL IsTriggered(CBaseEntity *pActivator);
|
|
virtual const char *TeamID();
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void KeyValue_(KeyValueData *pkvd);
|
|
BOOL IsTriggered_(CBaseEntity *pActivator);
|
|
const char *TeamID_();
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_TEAMMASTER_FIREONCE) == SF_TEAMMASTER_FIREONCE; }
|
|
BOOL AnyTeam() const { return (pev->spawnflags & SF_TEAMMASTER_ANYTEAM) == SF_TEAMMASTER_ANYTEAM; }
|
|
|
|
private:
|
|
BOOL TeamMatch(CBaseEntity *pActivator);
|
|
|
|
public:
|
|
int m_teamIndex;
|
|
USE_TYPE triggerType;
|
|
};
|
|
|
|
// CGameTeamSet / game_team_set -- Changes the team of the entity it targets to the activator's team
|
|
// Flag: Fire once
|
|
// Flag: Clear team -- Sets the team to "NONE" instead of activator
|
|
class CGameTeamSet: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_TEAMSET_FIREONCE) == SF_TEAMSET_FIREONCE; }
|
|
BOOL ShouldClearTeam() const { return (pev->spawnflags & SF_TEAMSET_CLEARTEAM) == SF_TEAMSET_CLEARTEAM; }
|
|
};
|
|
|
|
// CGamePlayerZone / game_player_zone -- players in the zone fire my target when I'm fired
|
|
// Needs master?
|
|
class CGamePlayerZone: public CRuleBrushEntity
|
|
{
|
|
public:
|
|
virtual void KeyValue(KeyValueData *pkvd);
|
|
virtual int Save(CSave &save);
|
|
virtual int Restore(CRestore &restore);
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void KeyValue_(KeyValueData *pkvd);
|
|
int Save_(CSave &save);
|
|
int Restore_(CRestore &restore);
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
static TYPEDESCRIPTION IMPL(m_SaveData)[4];
|
|
|
|
private:
|
|
string_t m_iszInTarget;
|
|
string_t m_iszOutTarget;
|
|
string_t m_iszInCount;
|
|
string_t m_iszOutCount;
|
|
};
|
|
|
|
// CGamePlayerHurt / game_player_hurt -- Damages the player who fires it
|
|
// Flag: Fire once
|
|
class CGamePlayerHurt: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_PKILL_FIREONCE) == SF_PKILL_FIREONCE; }
|
|
};
|
|
|
|
// CGameCounter / game_counter -- Counts events and fires target
|
|
// Flag: Fire once
|
|
// Flag: Reset on Fire
|
|
class CGameCounter: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Spawn();
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Spawn_();
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_GAMECOUNT_FIREONCE) == SF_GAMECOUNT_FIREONCE; }
|
|
BOOL ResetOnFire() const { return (pev->spawnflags & SF_GAMECOUNT_RESET) == SF_GAMECOUNT_RESET; }
|
|
|
|
void CountUp() { pev->frags++; }
|
|
void CountDown() { pev->frags--; }
|
|
void ResetCount() { pev->frags = pev->dmg; }
|
|
|
|
int CountValue() const { return int(pev->frags); }
|
|
int LimitValue() const { return int(pev->health); }
|
|
BOOL HitLimit() const { return CountValue() == LimitValue(); }
|
|
|
|
private:
|
|
void SetCountValue(int value) { pev->frags = value; }
|
|
void SetInitialValue(int value) { pev->dmg = value; }
|
|
};
|
|
|
|
// CGameCounterSet / game_counter_set -- Sets the counter's value
|
|
// Flag: Fire once
|
|
class CGameCounterSet: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_GAMECOUNTSET_FIREONCE) == SF_GAMECOUNTSET_FIREONCE; }
|
|
};
|
|
|
|
// CGamePlayerEquip / game_playerequip -- Sets the default player equipment
|
|
// Flag: USE Only
|
|
class CGamePlayerEquip: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void KeyValue(KeyValueData *pkvd);
|
|
virtual void Touch(CBaseEntity *pOther);
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void KeyValue_(KeyValueData *pkvd);
|
|
void Touch_(CBaseEntity *pOther);
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
public:
|
|
BOOL UseOnly() const { return (pev->spawnflags & SF_PLAYEREQUIP_USEONLY) == SF_PLAYEREQUIP_USEONLY; }
|
|
|
|
private:
|
|
void EquipPlayer(CBaseEntity *pPlayer);
|
|
|
|
public:
|
|
string_t m_weaponNames[ MAX_EQUIP ];
|
|
int m_weaponCount[ MAX_EQUIP ];
|
|
};
|
|
|
|
// CGamePlayerTeam / game_player_team -- Changes the team of the player who fired it
|
|
// Flag: Fire once
|
|
// Flag: Kill Player
|
|
// Flag: Gib Player
|
|
class CGamePlayerTeam: public CRulePointEntity
|
|
{
|
|
public:
|
|
virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#ifdef HOOK_GAMEDLL
|
|
|
|
void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
|
|
|
#endif
|
|
|
|
private:
|
|
BOOL RemoveOnFire() const { return (pev->spawnflags & SF_PTEAM_FIREONCE) == SF_PTEAM_FIREONCE; }
|
|
BOOL ShouldKillPlayer() const { return (pev->spawnflags & SF_PTEAM_KILL) == SF_PTEAM_KILL; }
|
|
BOOL ShouldGibPlayer() const { return (pev->spawnflags & SF_PTEAM_GIB) == SF_PTEAM_GIB; }
|
|
|
|
const char *TargetTeamName(const char *pszTargetName);
|
|
};
|
|
|
|
#endif // MAPRULES_H
|