This class represents active gamerules.
The ncRuleDelegate class is for any set of active gamerules. It can be accessed in QuakeC via the global g_grMode
from the server-side.
Choosing A Ruleset
Upon server init, the game will query the weak function Game_DefaultRules(), which can be re-implemented with the same name by the game developer in their server game. The return value should either be __NULL__
or the name of a progs within <gamedir>/progs/
.
By default, the game will load either <gamedir>/progs/singleplayer.dat
when it's only a singleplayer client or the console variable for coop
is 1
, or <gamedir>/progs/deathmatch.dat
in any other case. If you happen to set the server-side console variable g_gametype
to a custom string, it will attempt to load a named progs that can be found under <gamedir>/progs/
.
Here's the current implementation of said function:
__weak string
Game_DefaultRules(void)
{
if (!STRING_SET(gameType)) {
bool isSingle = (
cvars.
GetInteger(
"sv_playerslots") <= 1) ? (
true) : (
false);
gameType = (isSingle || isCoop) == (true) ? "singleplayer" : "deathmatch";
}
return (gameType);
}
cvarAPI_t cvars
Access cvarAPI_t functions using this variable.
Definition: api.h:121
float GetBool(string cvarName)
Returns the boolean value of a console variable.
string GetString(string cvarName)
Returns the string value of a console variable.
int GetInteger(string cvarName)
Returns the integer value of a console variable.
If you only plan on having one mode, ever, and disallow custom game modes - you can define it like this anywhere:
string
Game_DefaultRules(void)
{
return ("deathmatch");
}
The progs in question is then able to override any methods of the ncGameRule class.
Implementing RuleC Progs
When we decide to load a rule from an external progs, that progs can be implemented with as many binds as you like. The only requirement is you include the header found under src/server/api.h
.
Example RuleC
Here's a simple deathmatch rule, which will increment the score on the score-board for every player frag:
#pragma PROGS_DAT "../../progs/deathmatch.dat"
#include "../../../src/server/api.h"
void
CodeCallback_Precaches(void)
{
}
void
CodeCallback_StartGameType(void)
{
}
void
CodeCallback_PlayerSpawn(entity playerTarget)
{
}
bool
CodeCallback_PlayerRequestRespawn(entity playerTarget)
{
CodeCallback_PlayerSpawn(playerTarget);
return (true);
}
void
CodeCallback_PlayerKilled(entity playerTarget, entity inflictor, entity attacker,
string weapon)
{
playerTarget.deaths++;
if (playerTarget == attacker) {
attacker.frags--;
} else {
attacker.frags++;
}
}
}
var weaponAPI_t weapon
Access weaponAPI_t functions using this variable.
Definition: api_func.h:453
var motdAPI_t motd
Access motdAPI_t functions using this variable.
Definition: api_func.h:184
var gameAPI_t game
Access gameAPI_t functions using this variable.
Definition: api_func.h:172
var entsAPI_t ents
Access entsAPI_t functions using this variable.
Definition: api_func.h:144
precacheAPI_t precache
Access precacheAPI_t functions using this variable.
Definition: api.h:476
entity ChangeToClass(entity targetEntity, string className)
Transitions an entity from one class to another.
bool isPlayer(entity entityToCheck)
Returns true/false depending on if the entity is a player.
void TeleportToSpawn(entity teleportingEntity)
Teleports an entity to their ideal spawn-point.
void LoadDefault(void)
Loads the message of the day from the default location: <gamedir>/motd.txt
float Entity(string className)
Precaches a given entity class.
Class To Progs Callback Mappings
Left = class method, right = name of the callback function for you to implement in progs.
ncRuleDelegate::Title = CodeCallback_Title
ncRuleDelegate::ClientCommand = CodeCallback_ClientCommand
ncRuleDelegate::ConsoleCommand = CodeCallback_ConsoleCommand
ncRuleDelegate::FrameStart = CodeCallback_FrameStart
ncRuleDelegate::ImpulseCommand = CodeCallback_ImpulseCommand
ncRuleDelegate::InitPostEnts = CodeCallback_StartGameType
ncRuleDelegate::Input = CodeCallback_Input
ncRuleDelegate::NPCDeath = CodeCallback_NPCKilled
ncRuleDelegate::PlayerCanAttack = CodeCallback_PlayerCanAttack
ncRuleDelegate::PlayerConnect = CodeCallback_PlayerConnect
ncRuleDelegate::PlayerDeath = CodeCallback_PlayerKilled
ncRuleDelegate::PlayerDisconnect = CodeCallback_PlayerDisconnect
ncRuleDelegate::PlayerPain = CodeCallback_PlayerDamage
ncRuleDelegate::PlayerPreFrame = CodeCallback_PlayerPreFrame
ncRuleDelegate::PlayerRequestRespawn = CodeCallback_PlayerRequestRespawn
ncRuleDelegate::PlayerRequestTeam = CodeCallback_CallRequestTeam
ncRuleDelegate::PlayerSpawn = CodeCallback_PlayerSpawn
The underlying return values and parameters are inherited from its class counter-part.
|
void | ncRuleDelegate (void) |
|
virtual void | Save (float) |
| Handles saving a copy of this entity to a given filehandle. More...
|
|
virtual void | Restore (string, string) |
| Similar to ncIO::SpawnKey() but for save-game fields. More...
|
|
virtual void | RestoreComplete (void) |
| Called when the entity has been successfully restored from a savegame file. More...
|
|
virtual void | Input (entity, string, string) |
| Called when we are being prompted by another object/function with an input message. More...
|
|
virtual void | InitPostEnts (void) |
| Overridable: Called when all map entities have initialized. More...
|
|
virtual void | FrameStart (void) |
| Overridable: Called every server frame. More...
|
|
virtual bool | ConsoleCommand (ncPlayer, string) |
| Overridable: Called when the server issues a console command. More...
|
|
virtual bool | ClientCommand (ncClient, string) |
| Overridable: Called when a client issues a client command. More...
|
|
virtual bool | ImpulseCommand (ncClient, float) |
| Overridable: Called when a client issues an impulse command. More...
|
|
virtual void | PlayerConnect (ncPlayer) |
| Overridable: Called when a ncPlayer joins the server. More...
|
|
virtual void | PlayerDisconnect (ncPlayer) |
| Overridable: Called when a ncPlayer leaves the server. More...
|
|
virtual void | PlayerKill (ncPlayer) |
| Overridable: Called when a ncPlayer issues the kill console command. More...
|
|
virtual void | PlayerSpawn (ncPlayer) |
| Overridable: Called when a ncPlayer spawns, called sometime after joining. More...
|
|
virtual void | PlayerPreFrame (ncPlayer) |
| Overridable: Called before running physics on the ncPlayer in question. More...
|
|
virtual void | PlayerPostFrame (ncPlayer) |
| Overridable: Called after running physics on the ncPlayer in question. More...
|
|
virtual void | PlayerDeath (ncPlayer, ncEntity, ncEntity, string) |
| Overridable: Called when a ncPlayer dies in the game. More...
|
|
virtual void | PlayerPain (ncPlayer, ncActor, ncDict) |
| Overridable: Called when a ncPlayer feels pain. More...
|
|
virtual bool | PlayerCanAttack (ncPlayer) |
| Overridable: Called to check if a ncPlayer can attack. More...
|
|
virtual void | NPCDeath (ncActor, ncEntity, ncEntity) |
| Overridable:: Called when an NPC gets killed. More...
|
|
virtual bool | PlayerRequestRespawn (ncPlayer) |
| Overridable: called when a ncPlayer requests a respawn. More...
|
|
virtual bool | PlayerRequestTeam (ncPlayer, int team) |
| Overridable: called when a ncPlayer requests joining a specific team. More...
|
|
virtual void | LevelNewParms (void) |
| Overridable: Called to set up new level parms for any ncPlayer. More...
|
|
virtual void | LevelChangeParms (ncPlayer) |
| Overridable: Called to store parms for a specific ncPlayer. More...
|
|
virtual int | MaxItemPerSlot (int) |
| Overridable: Returns how many items players can carry in a given slot. More...
|
|
virtual bool | MonstersSpawn (void) |
| Overridable: Returns if ncMonster or ncTalkMonster entities can spawn. More...
|
|
virtual void | IntermissionStart (void) |
| Called when intermission starts. More...
|
|
virtual void | IntermissionCycle (void) |
| Called when the intermission system calls a new map. More...
|
|
virtual void | IntermissionEnd (void) |
| Called when intermission ends. More...
|
|
virtual void | IntermissionToPlayer (ncPlayer) |
| Run to send a specific player to an intermission. More...
|
|
virtual bool | InIntermission (void) |
| Returns if the gamerules find themselves in an intermission. More...
|
|
virtual bool | IsTeamplay (void) |
| Returns if this gamerule considers itself teamplay oriented. More...
|
|
virtual bool | IsMultiplayer (void) |
| Returns if the gamerule is a multiplayer game. More...
|
|
virtual void | ChatMessageAll (ncClient, string) |
| Called by Nuclide when the server has received a chat message that is to be distributed amongst all clients, regardless of team. More...
|
|
virtual void | ChatMessageTeam (ncClient, string) |
| Called by Nuclide when the server has received a chat message that is to be distributed amongst all clients of the same team. More...
|
|
virtual string | Title (void) |
| Returns the title of the gamemode running. More...
|
|
nonvirtual ncRuleDelegate | CreateRules (void) |
|