Moved gamerule definitions at a higher scope, this will make it easier
to call GameRule events from other parts of the codebase.
This commit is contained in:
parent
3e4a67367b
commit
ad62ddc574
41 changed files with 480 additions and 273 deletions
|
@ -40,6 +40,13 @@ Game_Parse_Event(float fHeader)
|
|||
sendevent("PlayerSwitchWeapon", "i", w);
|
||||
}
|
||||
|
||||
player pl = (player)pSeat->m_ePlayer;
|
||||
if (getplayerkeyfloat(pl.entnum-1, "*team") == TEAM_CT) {
|
||||
setcustomskin(pSeat->m_eViewModel, "", "geomset 0 2\n");
|
||||
} else {
|
||||
setcustomskin(pSeat->m_eViewModel, "", "geomset 0 1\n");
|
||||
}
|
||||
|
||||
HUD_WeaponPickupNotify(w);
|
||||
} else if (fHeader == EV_RADIOMSG) {
|
||||
Radio_PlayMessage(readbyte());
|
||||
|
|
|
@ -38,7 +38,7 @@ Player_ReadEntity(float new)
|
|||
break; //erk?... too old?
|
||||
}
|
||||
input_sequence = i;
|
||||
QPhysics_Run(pl);
|
||||
PMove_Run();
|
||||
}
|
||||
|
||||
/* any differences in things that are read below are now
|
||||
|
|
|
@ -62,7 +62,7 @@ Predict_PreFrame(player pl)
|
|||
break;
|
||||
}
|
||||
input_sequence = i;
|
||||
QPhysics_Run(pl);
|
||||
PMove_Run();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ Player_ReadEntity(float new)
|
|||
break; //erk?... too old?
|
||||
}
|
||||
input_sequence = i;
|
||||
QPhysics_Run(pl);
|
||||
PMove_Run();
|
||||
}
|
||||
|
||||
/* any differences in things that are read below are now
|
||||
|
|
|
@ -55,7 +55,7 @@ CSEv_BuyWeapon_f(float fWeapon)
|
|||
player pl = (player)self;
|
||||
iWeapon = (int)fWeapon;
|
||||
|
||||
if (rules.RulesBuyingPossible(pl) == FALSE) {
|
||||
if (rules.BuyingPossible(pl) == FALSE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ Game_RunClientCommand(void)
|
|||
pl.buyzone = FALSE;
|
||||
|
||||
Footsteps_Update();
|
||||
QPhysics_Run(self);
|
||||
PMove_Run();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "gamerules.h"
|
||||
|
||||
var int g_cstrike_buying = 0;
|
||||
var float g_cstrike_bombradius = 500;
|
||||
|
||||
|
@ -60,8 +62,8 @@ var int autocvar_fcs_penalty_pain = -150;
|
|||
var int autocvar_fcs_penalty_kill = -1500;
|
||||
var int autocvar_fcs_maxmoney = 16000;
|
||||
var int autocvar_fcs_fillweapons = FALSE; /* This will automatically get ammo for the weapon you buy */
|
||||
var int autocvar_fcs_fix_bombtimer = FALSE; /* If true, the bomb-timer will dictate the round-end */
|
||||
var int autocvar_fcs_bombaltthrow = FALSE; /* Randomize the bomb-throw every time ever so slightly */
|
||||
var int autocvar_fcs_fix_bombtimer = TRUE; /* If true, the bomb-timer will dictate the round-end */
|
||||
var int autocvar_fcs_bombaltthrow = TRUE; /* Randomize the bomb-throw every time ever so slightly */
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
|
@ -37,3 +37,9 @@ func_bomb_target::Respawn(void)
|
|||
{
|
||||
InitBrushTrigger();
|
||||
}
|
||||
|
||||
void
|
||||
func_bomb_target::func_bomb_target(void)
|
||||
{
|
||||
g_cs_bombzones++;
|
||||
}
|
||||
|
|
|
@ -16,24 +16,8 @@
|
|||
|
||||
var int autocvar_sv_playerkeepalive = TRUE;
|
||||
|
||||
class CSGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
|
||||
virtual int(player) RulesBuyingPossible;
|
||||
};
|
||||
|
||||
|
||||
int
|
||||
CSGameRules::RulesBuyingPossible(player pl)
|
||||
CSGameRules::BuyingPossible(player pl)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
|
73
src/server/cstrike/gamerules.h
Normal file
73
src/server/cstrike/gamerules.h
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../gamerules.h"
|
||||
|
||||
class CSGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
|
||||
virtual int(player) BuyingPossible;
|
||||
};
|
||||
|
||||
class CSSingleplayerRules:CSGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
||||
|
||||
class CSMultiplayerRules:CSGameRules
|
||||
{
|
||||
entity m_eLastTSpawn;
|
||||
entity m_eLastCTSpawn;
|
||||
|
||||
void() CSMultiplayerRules;
|
||||
|
||||
virtual void(void) InitPostEnts;
|
||||
virtual void(void) FrameStart;
|
||||
virtual void(player) PlayerSpawn;
|
||||
virtual void(player) PlayerPreFrame;
|
||||
|
||||
/* CS specific */
|
||||
virtual void(void) CreateRescueZones;
|
||||
virtual void(void) CreateCTBuyzones;
|
||||
virtual void(void) CreateTBuyzones;
|
||||
virtual void(float, int) TimerBegin;
|
||||
virtual void(void) TimerUpdate;
|
||||
|
||||
virtual int(player) BuyingPossible;
|
||||
virtual void(int, int, int) RoundOver;
|
||||
virtual void(int) RestartRound;
|
||||
virtual void(player) DeathCheck;
|
||||
virtual void(player) MakeBomber;
|
||||
virtual void(player) MakeVIP;
|
||||
virtual void(void) CountPlayers;
|
||||
virtual void(void) SwitchTeams;
|
||||
virtual void(void) TimeOut;
|
||||
|
||||
virtual void(player, int) PlayerMakePlayable;
|
||||
virtual void(player) PlayerMakeSpectator;
|
||||
virtual void(player, int) PlayerRespawn;
|
||||
virtual entity(float) PlayerFindSpawn;
|
||||
};
|
|
@ -14,37 +14,18 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class CSMultiplayerRules:CSGameRules
|
||||
void
|
||||
CSMultiplayerRules::PlayerPreFrame(player pl)
|
||||
{
|
||||
entity m_eLastTSpawn;
|
||||
entity m_eLastCTSpawn;
|
||||
if (pl.health <= 0)
|
||||
return;
|
||||
|
||||
virtual void(void) InitPostEnts;
|
||||
virtual void(void) FrameStart;
|
||||
virtual void(player) PlayerSpawn;
|
||||
|
||||
/* CS specific */
|
||||
virtual void(void) CreateRescueZones;
|
||||
virtual void(void) CreateCTBuyzones;
|
||||
virtual void(void) CreateTBuyzones;
|
||||
virtual void(float, int) TimerBegin;
|
||||
virtual void(void) TimerUpdate;
|
||||
|
||||
virtual void(player) RulesDeathCheck;
|
||||
virtual void(void) RulesCountPlayers;
|
||||
virtual void(void) RulesSwitchTeams;
|
||||
virtual void(void) RulesTimeOver;
|
||||
virtual void(int, int, int) RulesRoundOver;
|
||||
virtual void(int) RulesRestart;
|
||||
virtual void(player) RulesMakeVIP;
|
||||
virtual void(player) RulesMakeBomber;
|
||||
virtual int(player) RulesBuyingPossible;
|
||||
|
||||
virtual void(player, int) PlayerMakePlayable;
|
||||
virtual void(player) PlayerMakeSpectator;
|
||||
virtual void(player, int) PlayerRespawn;
|
||||
virtual entity(float) PlayerFindSpawn;
|
||||
};
|
||||
if (g_cs_gamestate == GAME_FREEZE) {
|
||||
pl.flags |= FL_FROZEN;
|
||||
} else {
|
||||
pl.flags &= ~FL_FROZEN;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CSMultiplayerRules::FrameStart(void)
|
||||
|
@ -196,7 +177,7 @@ CSMultiplayerRules::TimerUpdate(void)
|
|||
|
||||
if (g_cs_hostagestotal > 0) {
|
||||
if (g_cs_hostagesrescued >= g_cs_hostagestotal) {
|
||||
RulesRoundOver(TEAM_CT, 0, FALSE);
|
||||
RoundOver(TEAM_CT, 0, FALSE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -239,14 +220,14 @@ CSMultiplayerRules::TimerUpdate(void)
|
|||
if (g_cs_roundswon_t == 0 && g_cs_roundswon_ct == 0) {
|
||||
Money_ResetTeamReward();
|
||||
Money_ResetRoundReward();
|
||||
RulesRestart(TRUE);
|
||||
RestartRound(TRUE);
|
||||
} else {
|
||||
if (autocvar_mp_halftime == TRUE && (autocvar_mp_winlimit / 2 == g_cs_roundsplayed)) {
|
||||
Money_ResetTeamReward();
|
||||
RulesSwitchTeams();
|
||||
RulesRestart(TRUE);
|
||||
SwitchTeams();
|
||||
RestartRound(TRUE);
|
||||
} else {
|
||||
RulesRestart(FALSE);
|
||||
RestartRound(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -262,7 +243,7 @@ CSMultiplayerRules::TimerUpdate(void)
|
|||
return;
|
||||
}
|
||||
}
|
||||
RulesTimeOver();
|
||||
TimeOut();
|
||||
TimerBegin(5, GAME_END); // Round is over, 5 seconds til a new round starts
|
||||
} else {
|
||||
TimerBegin(autocvar_mp_roundtime * 60, GAME_ACTIVE); // Unfreeze
|
||||
|
@ -274,13 +255,13 @@ CSMultiplayerRules::TimerUpdate(void)
|
|||
|
||||
/*
|
||||
=================
|
||||
RulesBuyingPossible
|
||||
BuyingPossible
|
||||
|
||||
Checks if it is possible for players to buy anything
|
||||
=================
|
||||
*/
|
||||
int
|
||||
CSMultiplayerRules::RulesBuyingPossible(player pl)
|
||||
CSMultiplayerRules::BuyingPossible(player pl)
|
||||
{
|
||||
if (pl.health <= 0) {
|
||||
return FALSE;
|
||||
|
@ -322,14 +303,14 @@ CSMultiplayerRules::RulesBuyingPossible(player pl)
|
|||
}
|
||||
|
||||
void
|
||||
CSMultiplayerRules::RulesMakeBomber(player pl)
|
||||
CSMultiplayerRules::MakeBomber(player pl)
|
||||
{
|
||||
Weapons_AddItem(pl, WEAPON_C4BOMB);
|
||||
centerprint(pl, "You have the bomb!\nFind the target zone or DROP\nthe bomb for another Terrorist.");
|
||||
}
|
||||
|
||||
void
|
||||
CSMultiplayerRules::RulesMakeVIP(player pl)
|
||||
CSMultiplayerRules::MakeVIP(player pl)
|
||||
{
|
||||
pl.team = TEAM_VIP;
|
||||
PlayerRespawn(pl, pl.team);
|
||||
|
@ -339,13 +320,13 @@ CSMultiplayerRules::RulesMakeVIP(player pl)
|
|||
|
||||
/*
|
||||
=================
|
||||
RulesRestart
|
||||
RestartRound
|
||||
|
||||
Loop through all ents and handle them
|
||||
=================
|
||||
*/
|
||||
void
|
||||
CSMultiplayerRules::RulesRestart(int iWipe)
|
||||
CSMultiplayerRules::RestartRound(int iWipe)
|
||||
{
|
||||
g_cs_hostagesrescued = 0;
|
||||
|
||||
|
@ -388,7 +369,7 @@ CSMultiplayerRules::RulesRestart(int iWipe)
|
|||
iPickT++;
|
||||
|
||||
if (iPickT == iRandomT) {
|
||||
RulesMakeBomber((player)eFind);
|
||||
MakeBomber((player)eFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -403,7 +384,7 @@ CSMultiplayerRules::RulesRestart(int iWipe)
|
|||
if (eFind.team == TEAM_CT) {
|
||||
iPickCT++;
|
||||
if (iPickCT == iRandomCT) {
|
||||
RulesMakeVIP((player)eFind);
|
||||
MakeVIP((player)eFind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -421,13 +402,13 @@ CSMultiplayerRules::RulesRestart(int iWipe)
|
|||
|
||||
/*
|
||||
=================
|
||||
RulesRoundOver
|
||||
RoundOver
|
||||
|
||||
This happens whenever an objective is complete or time is up
|
||||
=================
|
||||
*/
|
||||
void
|
||||
CSMultiplayerRules::RulesRoundOver(int iTeamWon, int iMoneyReward, int fSilent)
|
||||
CSMultiplayerRules::RoundOver(int iTeamWon, int iMoneyReward, int fSilent)
|
||||
{
|
||||
|
||||
if (g_cs_gamestate != GAME_ACTIVE) {
|
||||
|
@ -467,37 +448,37 @@ CSMultiplayerRules::RulesRoundOver(int iTeamWon, int iMoneyReward, int fSilent)
|
|||
|
||||
/*
|
||||
=================
|
||||
RulesTimeOver
|
||||
TimeOut
|
||||
|
||||
Whenever mp_roundtime was being counted down to 0
|
||||
=================
|
||||
*/
|
||||
void
|
||||
CSMultiplayerRules::RulesTimeOver(void)
|
||||
CSMultiplayerRules::TimeOut(void)
|
||||
{
|
||||
if (g_cs_vipzones > 0) {
|
||||
RulesRoundOver(TEAM_T, 3250, FALSE);
|
||||
RoundOver(TEAM_T, 3250, FALSE);
|
||||
} else if (g_cs_bombzones > 0) {
|
||||
/* In Bomb Defusal, all Counter-Terrorists receive $3250
|
||||
* if they won running down the time. */
|
||||
RulesRoundOver(TEAM_CT, 3250, FALSE);
|
||||
RoundOver(TEAM_CT, 3250, FALSE);
|
||||
} else if (g_cs_hostagestotal > 0) {
|
||||
// TODO: Broadcast_Print: Hostages have not been rescued!
|
||||
RulesRoundOver(TEAM_T, 3250, FALSE);
|
||||
RoundOver(TEAM_T, 3250, FALSE);
|
||||
} else {
|
||||
RulesRoundOver(0, 0, FALSE);
|
||||
RoundOver(0, 0, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
RulesSwitchTeams
|
||||
SwitchTeams
|
||||
|
||||
Happens rarely
|
||||
=================
|
||||
*/
|
||||
void
|
||||
CSMultiplayerRules::RulesSwitchTeams(void)
|
||||
CSMultiplayerRules::SwitchTeams(void)
|
||||
{
|
||||
int iCTW, iTW;
|
||||
|
||||
|
@ -527,7 +508,7 @@ CSMultiplayerRules::RulesSwitchTeams(void)
|
|||
}
|
||||
|
||||
void
|
||||
CSMultiplayerRules::RulesCountPlayers(void)
|
||||
CSMultiplayerRules::CountPlayers(void)
|
||||
{
|
||||
g_cs_alive_t = 0;
|
||||
g_cs_alive_ct = 0;
|
||||
|
@ -546,13 +527,13 @@ CSMultiplayerRules::RulesCountPlayers(void)
|
|||
}
|
||||
|
||||
void
|
||||
CSMultiplayerRules::RulesDeathCheck(player pl)
|
||||
CSMultiplayerRules::DeathCheck(player pl)
|
||||
{
|
||||
if ((g_cs_alive_t == 0) && (g_cs_alive_ct == 0)) {
|
||||
if (g_cs_bombplanted == TRUE) {
|
||||
RulesRoundOver(TEAM_T, 3600, FALSE);
|
||||
RoundOver(TEAM_T, 3600, FALSE);
|
||||
} else {
|
||||
RulesRoundOver(FALSE, 0, FALSE);
|
||||
RoundOver(FALSE, 0, FALSE);
|
||||
}
|
||||
} else {
|
||||
int winner;
|
||||
|
@ -567,12 +548,12 @@ CSMultiplayerRules::RulesDeathCheck(player pl)
|
|||
/* In Bomb Defusal, the winning team receives $3250
|
||||
* if they won by eliminating the enemy team. */
|
||||
if (!g_cs_bombplanted || g_cs_alive_ct == 0) {
|
||||
RulesRoundOver(winner, 3250, FALSE);
|
||||
RoundOver(winner, 3250, FALSE);
|
||||
}
|
||||
} else {
|
||||
/* In Hostage Rescue, the winning team receives $3600
|
||||
* if they won by eliminating the enemy team. */
|
||||
RulesRoundOver(winner, 3600, FALSE);
|
||||
RoundOver(winner, 3600, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -647,7 +628,7 @@ CSMultiplayerRules::PlayerRespawn(player pl, int fTeam)
|
|||
pl.classname = "player";
|
||||
pl.health = pl.max_health = 100;
|
||||
forceinfokey(pl, "*dead", "0");
|
||||
RulesCountPlayers();
|
||||
CountPlayers();
|
||||
|
||||
pl.takedamage = DAMAGE_YES;
|
||||
pl.solid = SOLID_SLIDEBOX;
|
||||
|
@ -769,6 +750,12 @@ CSMultiplayerRules::PlayerSpawn(player pl)
|
|||
forceinfokey(pl, "*team", "0");
|
||||
}
|
||||
|
||||
void
|
||||
CSMultiplayerRules::CSMultiplayerRules(void)
|
||||
{
|
||||
forceinfokey(world, "*gamemode", "classic");
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
CSEv_JoinTeam_f
|
||||
|
@ -776,7 +763,7 @@ CSEv_JoinTeam_f
|
|||
Event Handling, called by the Client codebase via 'sendevent'
|
||||
=================
|
||||
*/
|
||||
void CSEv_JoinTeam_f(int fChar)
|
||||
void CSEv_JoinTeam_f(float flChar)
|
||||
{
|
||||
CSMultiplayerRules rules = (CSMultiplayerRules)g_grMode;
|
||||
player pl = (player)self;
|
||||
|
@ -794,28 +781,28 @@ void CSEv_JoinTeam_f(int fChar)
|
|||
switch (g_cs_gamestate) {
|
||||
/* spawn the players immediately when its in the freeze state */
|
||||
case GAME_FREEZE:
|
||||
pl.charmodel = fChar;
|
||||
rules.PlayerMakePlayable(pl, fChar);
|
||||
pl.charmodel = (int)flChar;
|
||||
rules.PlayerMakePlayable(pl, (int)flChar);
|
||||
|
||||
if ((pl.team == TEAM_T) && (g_cs_alive_t == 1)) {
|
||||
if (g_cs_bombzones > 0) {
|
||||
rules.RulesMakeBomber(pl);
|
||||
rules.MakeBomber(pl);
|
||||
}
|
||||
} else if ((pl.team == TEAM_CT) && (g_cs_alive_ct == 1)) {
|
||||
if (g_cs_vipzones > 0) {
|
||||
rules.RulesMakeVIP(pl);
|
||||
rules.MakeVIP(pl);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
/* otherwise, just prepare their fields for the next round */
|
||||
default:
|
||||
if (fChar == 0) {
|
||||
if (flChar == 0) {
|
||||
rules.PlayerSpawn(pl);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fChar < 5) {
|
||||
if (flChar < 5) {
|
||||
pl.team = TEAM_T;
|
||||
} else {
|
||||
pl.team = TEAM_CT;
|
||||
|
@ -823,7 +810,7 @@ void CSEv_JoinTeam_f(int fChar)
|
|||
|
||||
rules.PlayerMakeSpectator(pl);
|
||||
pl.classname = "player";
|
||||
pl.charmodel = fChar;
|
||||
pl.charmodel = (int)flChar;
|
||||
pl.health = 0;
|
||||
forceinfokey(pl, "*dead", "1");
|
||||
forceinfokey(pl, "*team", ftos(pl.team));
|
||||
|
@ -836,9 +823,9 @@ void CSEv_JoinTeam_f(int fChar)
|
|||
|
||||
/* if no players are present in the chosen team, force restart round */
|
||||
if ((pl.team == TEAM_T) && (g_cs_alive_t == 0)) {
|
||||
rules.RulesRoundOver(FALSE, 0, FALSE);
|
||||
rules.RoundOver(FALSE, 0, FALSE);
|
||||
} else if ((pl.team == TEAM_CT) && (g_cs_alive_ct == 0)) {
|
||||
rules.RulesRoundOver(FALSE, 0, FALSE);
|
||||
rules.RoundOver(FALSE, 0, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,12 +14,6 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class CSSingleplayerRules:CSGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
||||
|
||||
void
|
||||
CSSingleplayerRules::PlayerSpawn(player pl)
|
||||
{
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../../shared/cstrike/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -18,7 +17,6 @@
|
|||
../../shared/sound.c
|
||||
../../shared/valve/animations.h
|
||||
../defs.h
|
||||
../cstrike/defs.h
|
||||
../plugins.c
|
||||
../logging.c
|
||||
../nodes.c
|
||||
|
@ -28,8 +26,10 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/effects.c
|
||||
../../shared/cstrike/player.cpp
|
||||
../cstrike/defs.h
|
||||
|
||||
../../shared/effects.c
|
||||
../cstrike/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
@ -87,7 +87,6 @@
|
|||
|
||||
../gamerules.cpp
|
||||
../cstrike/game_money.c
|
||||
|
||||
../cstrike/gamerules.cpp
|
||||
../cstrike/gamerules_singleplayer.cpp
|
||||
../cstrike/gamerules_multiplayer.cpp
|
||||
|
|
|
@ -14,34 +14,6 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class CGameRules
|
||||
{
|
||||
void() CGameRules;
|
||||
|
||||
virtual void(void) InitPostEnts;
|
||||
|
||||
/* logic */
|
||||
virtual void(void) FrameStart;
|
||||
virtual float(player,string) ConsoleCommand;
|
||||
|
||||
/* client */
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerSpawn;
|
||||
virtual void(player) PlayerPreFrame;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(void) LevelNewParms;
|
||||
virtual void(player) LevelChangeParms;
|
||||
|
||||
/* spectator */
|
||||
/*virtual void(player) SpectatorConnect;
|
||||
virtual void(player) SpectatorDisconnect;
|
||||
virtual void(player) SpectatorThink;*/
|
||||
};
|
||||
|
||||
/* init */
|
||||
void
|
||||
CGameRules::InitPostEnts(void)
|
||||
|
|
46
src/server/gamerules.h
Normal file
46
src/server/gamerules.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class CGameRules
|
||||
{
|
||||
void() CGameRules;
|
||||
|
||||
virtual void(void) InitPostEnts;
|
||||
|
||||
/* logic */
|
||||
virtual void(void) FrameStart;
|
||||
virtual float(player,string) ConsoleCommand;
|
||||
|
||||
/* client */
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerSpawn;
|
||||
virtual void(player) PlayerPreFrame;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(void) LevelNewParms;
|
||||
virtual void(player) LevelChangeParms;
|
||||
|
||||
/* spectator */
|
||||
/*virtual void(player) SpectatorConnect;
|
||||
virtual void(player) SpectatorDisconnect;
|
||||
virtual void(player) SpectatorThink;*/
|
||||
};
|
||||
|
||||
/* our currently running mode */
|
||||
CGameRules g_grMode;
|
|
@ -16,19 +16,6 @@
|
|||
|
||||
var int autocvar_sv_playerkeepalive = TRUE;
|
||||
|
||||
class HLGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
||||
|
||||
/* we check what fields have changed over the course of the frame and network
|
||||
* only the ones that have actually changed */
|
||||
void
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -26,6 +25,9 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/gearbox/player.cpp
|
||||
../valve/defs.h
|
||||
|
||||
../valve/monster_apache.cpp
|
||||
../valve/monster_alien_controller.cpp
|
||||
../valve/monster_alien_grunt.cpp
|
||||
|
@ -65,7 +67,6 @@
|
|||
../gearbox/monster_recruit.cpp
|
||||
|
||||
../../shared/effects.c
|
||||
../../shared/gearbox/player.cpp
|
||||
../valve/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -26,6 +25,9 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/hunger/player.cpp
|
||||
../valve/defs.h
|
||||
|
||||
../valve/monster_apache.cpp
|
||||
../valve/monster_alien_controller.cpp
|
||||
../valve/monster_alien_grunt.cpp
|
||||
|
@ -62,7 +64,6 @@
|
|||
../valve/monster_zombie.cpp
|
||||
|
||||
../../shared/effects.c
|
||||
../../shared/hunger/player.cpp
|
||||
../valve/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
|
|
@ -16,19 +16,6 @@
|
|||
|
||||
var int autocvar_sv_playerkeepalive = TRUE;
|
||||
|
||||
class HLGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
||||
|
||||
/* we check what fields have changed over the course of the frame and network
|
||||
* only the ones that have actually changed */
|
||||
void
|
||||
|
|
|
@ -14,15 +14,6 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class HLMultiplayerRules:HLGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
|
||||
/* level transitions */
|
||||
virtual void(player) LevelDecodeParms;
|
||||
};
|
||||
|
||||
void
|
||||
HLMultiplayerRules::LevelDecodeParms(player pl)
|
||||
{
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -26,6 +25,9 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/poke646/player.cpp
|
||||
../valve/defs.h
|
||||
|
||||
../valve/monster_apache.cpp
|
||||
../valve/monster_alien_controller.cpp
|
||||
../valve/monster_alien_grunt.cpp
|
||||
|
@ -62,7 +64,6 @@
|
|||
../valve/monster_zombie.cpp
|
||||
|
||||
../../shared/effects.c
|
||||
../../shared/poke646/player.cpp
|
||||
../valve/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
|
|
@ -16,18 +16,6 @@
|
|||
|
||||
var int autocvar_sv_playerkeepalive = TRUE;
|
||||
|
||||
class HLGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
||||
|
||||
void
|
||||
HLGameRules::LevelDecodeParms(player pl)
|
||||
{
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -25,6 +24,9 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/rewolf/player.cpp
|
||||
../valve/defs.h
|
||||
|
||||
../valve/monster_rat.cpp
|
||||
../valve/monster_scientist_dead.cpp
|
||||
gunman_cycler.cpp
|
||||
|
@ -34,7 +36,6 @@ monster_human_demoman.cpp
|
|||
monster_human_gunman.cpp
|
||||
monster_human_unarmed.cpp
|
||||
../../shared/effects.c
|
||||
../../shared/rewolf/player.cpp
|
||||
../valve/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
|
17
src/server/scihunt/defs.h
Normal file
17
src/server/scihunt/defs.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "gamerules.h"
|
|
@ -14,12 +14,6 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class SHMultiplayerRules:HLGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
||||
|
||||
void
|
||||
SHMultiplayerRules::PlayerSpawn(player pl)
|
||||
{
|
||||
|
@ -56,8 +50,6 @@ SHMultiplayerRules::PlayerSpawn(player pl)
|
|||
forceinfokey(pl, "*spec", "0");
|
||||
forceinfokey(pl, "*deaths", ftos(pl.deaths));
|
||||
|
||||
LevelNewParms();
|
||||
LevelDecodeParms(pl);
|
||||
spot = Spawn_SelectRandom("info_player_deathmatch");
|
||||
setorigin(pl, spot.origin);
|
||||
pl.angles = spot.angles;
|
23
src/server/scihunt/gamerules.h
Normal file
23
src/server/scihunt/gamerules.h
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../gamerules.h"
|
||||
|
||||
class SHMultiplayerRules:CGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
|
@ -9,7 +9,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -27,6 +26,9 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/scihunt/player.cpp
|
||||
../scihunt/defs.h
|
||||
|
||||
../valve/monster_apache.cpp
|
||||
../valve/monster_alien_controller.cpp
|
||||
../valve/monster_alien_grunt.cpp
|
||||
|
@ -64,7 +66,6 @@ monster_scientist.cpp
|
|||
|
||||
../../shared/effects.c
|
||||
|
||||
../../shared/scihunt/player.cpp
|
||||
../valve/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
@ -111,8 +112,7 @@ shdata_parse.c
|
|||
../../shared/valve/animations.c
|
||||
|
||||
../gamerules.cpp
|
||||
../valve/gamerules.cpp
|
||||
../scihunt/gamerules_multiplayer.cpp
|
||||
../scihunt/gamerules.cpp
|
||||
../valve/client.c
|
||||
../client.c
|
||||
|
||||
|
|
17
src/server/tfc/defs.h
Normal file
17
src/server/tfc/defs.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "gamerules.h"
|
|
@ -16,17 +16,6 @@
|
|||
|
||||
var int autocvar_sv_playerkeepalive = TRUE;
|
||||
|
||||
class TFCGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
virtual void(player) PlayerSpawn;
|
||||
virtual void(player) PlayerKill;
|
||||
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
||||
|
||||
/* we check what fields have changed over the course of the frame and network
|
||||
* only the ones that have actually changed */
|
||||
void
|
||||
|
|
28
src/server/tfc/gamerules.h
Normal file
28
src/server/tfc/gamerules.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../gamerules.h"
|
||||
|
||||
class TFCGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
virtual void(player) PlayerSpawn;
|
||||
virtual void(player) PlayerKill;
|
||||
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
|
@ -8,7 +8,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
../valve/defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -25,8 +24,10 @@
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/effects.c
|
||||
../../shared/valve/player.cpp
|
||||
../tfc/defs.h
|
||||
|
||||
../../shared/effects.c
|
||||
../valve/player.c
|
||||
../../shared/pmove.c
|
||||
../valve/spectator.c
|
||||
|
|
|
@ -19,7 +19,7 @@ void
|
|||
Game_RunClientCommand(void)
|
||||
{
|
||||
Footsteps_Update();
|
||||
QPhysics_Run(self);
|
||||
PMove_Run();
|
||||
}
|
||||
|
||||
/* custom chat packet */
|
||||
|
|
|
@ -14,4 +14,4 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
void Damage_Apply(entity, entity, float, int, int);
|
||||
#include "gamerules.h"
|
||||
|
|
|
@ -16,18 +16,6 @@
|
|||
|
||||
var int autocvar_sv_playerkeepalive = TRUE;
|
||||
|
||||
class HLGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
||||
|
||||
void
|
||||
HLGameRules::LevelDecodeParms(player pl)
|
||||
{
|
||||
|
|
41
src/server/valve/gamerules.h
Normal file
41
src/server/valve/gamerules.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../gamerules.h"
|
||||
|
||||
class HLGameRules:CGameRules
|
||||
{
|
||||
virtual void(entity) PlayerConnect;
|
||||
virtual void(entity) PlayerDisconnect;
|
||||
virtual void(player) PlayerKill;
|
||||
virtual void(player) PlayerPostFrame;
|
||||
|
||||
virtual void(player) LevelDecodeParms;
|
||||
virtual void(player) LevelChangeParms;
|
||||
virtual void(void) LevelNewParms;
|
||||
};
|
||||
|
||||
class HLSingleplayerRules:HLGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
||||
|
||||
class HLMultiplayerRules:HLGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
|
@ -14,12 +14,6 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
class HLSingleplayerRules:HLGameRules
|
||||
{
|
||||
/* client */
|
||||
virtual void(player) PlayerSpawn;
|
||||
};
|
||||
|
||||
void
|
||||
HLSingleplayerRules::PlayerSpawn(player pl)
|
||||
{
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
../../shared/defs.h
|
||||
defs.h
|
||||
../../shared/math.h
|
||||
../../shared/materials.h
|
||||
../../shared/events.h
|
||||
|
@ -25,6 +24,9 @@ defs.h
|
|||
../../gs-entbase/server.src
|
||||
../../gs-entbase/shared.src
|
||||
|
||||
../../shared/valve/player.cpp
|
||||
../valve/defs.h
|
||||
|
||||
../valve/monster_apache.cpp
|
||||
../valve/monster_alien_controller.cpp
|
||||
../valve/monster_alien_grunt.cpp
|
||||
|
@ -61,7 +63,6 @@ defs.h
|
|||
../valve/monster_zombie.cpp
|
||||
|
||||
../../shared/effects.c
|
||||
../../shared/valve/player.cpp
|
||||
player.c
|
||||
../../shared/pmove.c
|
||||
spectator.c
|
||||
|
|
|
@ -28,6 +28,97 @@ func_bombtarget brush entities.
|
|||
|
||||
*/
|
||||
|
||||
/* C4 entity logic */
|
||||
|
||||
#ifdef SERVER
|
||||
class c4bomb:CBaseEntity
|
||||
{
|
||||
entity m_eUser;
|
||||
float m_flBeepTime;
|
||||
float m_flExplodeTime;
|
||||
float m_flDefusalState;
|
||||
|
||||
void(void) c4bomb;
|
||||
virtual void(void) PlayerUse;
|
||||
virtual void(void) Logic;
|
||||
};
|
||||
|
||||
void
|
||||
c4bomb::PlayerUse(void)
|
||||
{
|
||||
m_eUser = eActivator;
|
||||
m_flDefusalState += frametime;
|
||||
}
|
||||
|
||||
void
|
||||
c4bomb::Logic(void)
|
||||
{
|
||||
// If the guy who started using us stopped using us, reset the defuser counter
|
||||
if (m_eUser != world) {
|
||||
m_eUser= world;
|
||||
m_flDefusalState = 0.0f;
|
||||
}
|
||||
|
||||
// If our time has passed, explode
|
||||
if (m_flExplodeTime < time) {
|
||||
CSMultiplayerRules rules = (CSMultiplayerRules)g_grMode;
|
||||
|
||||
/* In Bomb Defusal, all Terrorists receive $3500
|
||||
* if they won by detonating the bomb. */
|
||||
rules.RoundOver(TEAM_T, 3500, FALSE);
|
||||
Damage_Radius(origin, this.owner, 500, g_cstrike_bombradius, TRUE, WEAPON_C4BOMB);
|
||||
sound(this, CHAN_VOICE, "weapons/c4_explode1.wav", 1.0, ATTN_NONE);
|
||||
|
||||
for (entity e = world; (e = find(e, ::classname, "func_bomb_target"));) {
|
||||
CBaseTrigger trigger = (CBaseTrigger)e;
|
||||
if (trigger.Trigger != __NULL__) {
|
||||
trigger.Trigger();
|
||||
}
|
||||
}
|
||||
|
||||
m_flBeepTime = 0.0f;
|
||||
m_flDefusalState = 0;
|
||||
remove(this);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flBeepTime > time) {
|
||||
return;
|
||||
}
|
||||
m_flBeepTime = time + 1.5;
|
||||
|
||||
if (m_flExplodeTime - time < 2) {
|
||||
sound(this, CHAN_VOICE, "weapons/c4_beep5.wav", 1.0, ATTN_NONE);
|
||||
} else if (m_flExplodeTime - time < 5) {
|
||||
sound(this, CHAN_VOICE, "weapons/c4_beep5.wav", 1.0, ATTN_NORM);
|
||||
} else if (m_flExplodeTime - time < 10) {
|
||||
sound(this, CHAN_VOICE, "weapons/c4_beep4.wav", 1.0, ATTN_NORM);
|
||||
} else if (m_flExplodeTime - time < 20) {
|
||||
sound(this, CHAN_VOICE, "weapons/c4_beep3.wav", 1.0, ATTN_NORM);
|
||||
} else if (m_flExplodeTime - time < 30) {
|
||||
sound(this, CHAN_VOICE, "weapons/c4_beep2.wav", 1.0, ATTN_NORM);
|
||||
} else {
|
||||
sound(this, CHAN_VOICE, "weapons/c4_beep1.wav", 1.0, ATTN_NORM);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
c4bomb::c4bomb(void)
|
||||
{
|
||||
movetype = MOVETYPE_NONE;
|
||||
solid = SOLID_BBOX;
|
||||
setmodel(this, "models/w_c4.mdl");
|
||||
setsize(this, [-6,-6,0], [6,6,6]);
|
||||
|
||||
customphysics = Logic;
|
||||
m_flExplodeTime = time + 45.0f;
|
||||
|
||||
sound(this, CHAN_WEAPON, "weapons/c4_plant.wav", 1.0f, ATTN_IDLE);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* C4 weapon logic */
|
||||
|
||||
enum
|
||||
{
|
||||
C4_IDLE,
|
||||
|
@ -52,6 +143,13 @@ w_c4bomb_precache(void)
|
|||
Sound_Precache("weapon_c4bomb.disarmed");
|
||||
Sound_Precache("weapon_c4bomb.explode");
|
||||
Sound_Precache("weapon_c4bomb.plant");
|
||||
precache_sound("weapons/c4_plant.wav");
|
||||
precache_sound("weapons/c4_beep1.wav");
|
||||
precache_sound("weapons/c4_beep2.wav");
|
||||
precache_sound("weapons/c4_beep3.wav");
|
||||
precache_sound("weapons/c4_beep4.wav");
|
||||
precache_sound("weapons/c4_beep5.wav");
|
||||
precache_sound("weapons/c4_explode1.wav");
|
||||
#endif
|
||||
precache_model("models/v_c4.mdl");
|
||||
precache_model("models/w_c4.mdl");
|
||||
|
@ -100,6 +198,15 @@ w_c4bomb_release(void)
|
|||
if (pl.w_idle_next <= 0.0f) {
|
||||
pl.a_ammo1 = C4S_DONE;
|
||||
#ifdef SERVER
|
||||
c4bomb bomb = spawn(c4bomb);
|
||||
bomb.owner = pl;
|
||||
|
||||
/* place directly below */
|
||||
traceline(pl.origin, pl.origin + [0,0,-64], FALSE, pl);
|
||||
setorigin(bomb, trace_endpos);
|
||||
|
||||
Radio_BroadcastMessage(RADIO_BOMBPL);
|
||||
g_cs_bombplanted = TRUE;
|
||||
Weapons_RemoveItem(pl, WEAPON_C4BOMB);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -201,7 +201,7 @@ w_m4a1_primary(void)
|
|||
}
|
||||
|
||||
pl.w_attack_next = 0.0875f;
|
||||
pl.w_idle_next = pl.w_attack_next;
|
||||
pl.w_idle_next = 2.0f;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -45,41 +45,3 @@ Math_Reflect(vector v1, vector v2)
|
|||
{
|
||||
return v1 - 2 * dotproduct(v1, v2) * v2;
|
||||
}
|
||||
|
||||
#if defined(SSQC) || defined(CSQC)
|
||||
void PMove_Run(void);
|
||||
|
||||
int
|
||||
QPhysics_IsStuck(entity eTarget, vector vOffset, vector vecMins, vector vecMaxs)
|
||||
{
|
||||
if (eTarget.solid != SOLID_SLIDEBOX) {
|
||||
return FALSE;
|
||||
}
|
||||
tracebox(eTarget.origin + vOffset, vecMins, vecMaxs, eTarget.origin + vOffset, FALSE, eTarget);
|
||||
return trace_startsolid;
|
||||
}
|
||||
|
||||
void
|
||||
QPhysics_Run(entity eTarget)
|
||||
{
|
||||
entity eOld = self;
|
||||
self = eTarget;
|
||||
|
||||
float flFallVel = (self.flags & FL_ONGROUND) ? 0 : -self.velocity[2];
|
||||
|
||||
PMove_Run();
|
||||
#ifdef SERVER
|
||||
if (self.waterlevel != 0) {
|
||||
flFallVel = 0;
|
||||
}
|
||||
|
||||
if ((self.flags & FL_ONGROUND) && self.movetype == MOVETYPE_WALK && (flFallVel > 580)) {
|
||||
float fFallDamage = (flFallVel - 580) * (100 / (1024 - 580));
|
||||
Damage_Apply(self, world, fFallDamage, 0, DMG_FALL);
|
||||
sound(self, CHAN_AUTO, "player/pl_fallpain3.wav", 1.0, ATTN_NORM);
|
||||
}
|
||||
#endif
|
||||
|
||||
self = eOld;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -745,6 +745,10 @@ PMove_Run(void)
|
|||
{
|
||||
float punch;
|
||||
player pl = (player)self;
|
||||
|
||||
#ifdef SERVER
|
||||
float flFallVel = (self.flags & FL_ONGROUND) ? 0 : -self.velocity[2];
|
||||
#endif
|
||||
|
||||
/* maxspeed changes when crouching, TODO: make this game-specific */
|
||||
self.maxspeed = (self.flags & FL_CROUCHING) ? 135 : 270;
|
||||
|
@ -754,6 +758,10 @@ PMove_Run(void)
|
|||
input_movevalues *= 0.25;
|
||||
}
|
||||
|
||||
if (pl.flags & FL_FROZEN) {
|
||||
input_movevalues = [0,0,0];
|
||||
}
|
||||
|
||||
/* establish which water elements we're dealing in */
|
||||
PMove_WaterMove();
|
||||
|
||||
|
@ -805,6 +813,18 @@ PMove_Run(void)
|
|||
pl.punchangle[1] *= punch;
|
||||
pl.punchangle[2] *= punch;
|
||||
|
||||
#ifdef SERVER
|
||||
if (self.waterlevel != 0) {
|
||||
flFallVel = 0;
|
||||
}
|
||||
|
||||
if ((self.flags & FL_ONGROUND) && self.movetype == MOVETYPE_WALK && (flFallVel > 580)) {
|
||||
float fFallDamage = (flFallVel - 580) * (100 / (1024 - 580));
|
||||
Damage_Apply(self, world, fFallDamage, 0, DMG_FALL);
|
||||
sound(self, CHAN_AUTO, "player/pl_fallpain3.wav", 1.0, ATTN_NORM);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* weapon/item logic of what the player controls */
|
||||
Game_Input();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue