De/GameRules

Das GameRules-Objekt definiert die abstrakten Spielregeln. Es handhabt konventionsbedingt alle Events, die nicht dem Spieler, NPCs, der Welt oder anderem Gewirr angeboren sind.
In einer Modifikation, die Deathmatch und Capture the Flag unterstützt, würde jeder Spielmodus sein eigenes GameRules-Objekt mit der entsprechenden Logik, wann Punkte verteilt werden, wo die Spieler zu spawnen sind usw., haben.
== Minimalimplementierung ==
In shared\<mod>\<mod>_gamerules.cpp:
#include "multiplay_gamerules.h"
#ifdef CLIENT_DLL
	#define CSkeletonGameRules C_SkeletonGameRules
#endif
// Valves Basisklassen: CSingleplayRules, CMultiplayRules, CTeamplayRules, CTeamplayRoundBasedRules
class CSkeletonGameRules : public CMultiplayRules
{
	DECLARE_CLASS( CSkeletonGameRules, CMultiplayRules );
};
REGISTER_GAMERULES_CLASS( CSkeletonGameRules );
In server\<mod>\<mod>_client.cpp:
void InstallGameRules()
{
	CreateGameRulesObject( "CSkeletonGameRules" );
}
== Geteilten Code verwalten ==
GameRules werden meist in geteiltem Code geschrieben, sodass der Client die Auswirkungen seiner Aktionen vorherbestimmten kann. Dennoch gibt es Funktionen, die nur auf dem Client oder dem Server verfügbar sind.
== Netzwerk ==
GameRules sind nicht selbstständig netzwerkfähig (). Stattdessen wird ein von abgeleiteter Proxy erzeugt.
== Erwähnenswerte Funktionen ==
=== Geteilt ===
; Damage_GetNoPhysicsForce()
; int Damage_GetShouldGibCorpse()
; usw.
: Verschiedene Funktionen, die einen ganzzahligen liefern, der den der jeweiligen Kategorie beinhaltet.
; ShouldCollide()
: Sagt aus, ob Entities in der angegebenen miteinander kollidieren. Da die Argumente Kollisionsgruppen und keine Entities sind, ist diese Funktion nicht so nützlich wie sie anfangs zu sein scheint.
; bool SwitchToNextBestWeapon()
; * GetNextBestWeapon()
: 2 Funktionen, die dazu benutzt werden können, eine Waffe für den Spieler zu wählen, sollte ihm seine Munition ausgehen. SwitchToNextBestWeapon() liefert true, wenn der Wechsel erfolgreich war.
; GetAmmoDamage()
: Bestimmt, wie viel Schaden angerichtet werden soll, wenn eine Entity (eine beliebige Entity) Kugeln feuert. Normalerweise werden aufrufe an weitergeleitet.
; * GetEncryptionKey()
: Der -Schlüssel der Modifikation für Skriptverschlüsselung.
; * GetViewVectors()
: Getter für .
=== Server ===
; void LevelShutdown()
: Wird aufgerufen, wenn die Spielregeln durch die zerstört werden.
; void FrameUpdatePostEntityThink()
: Wird jeden Frame aufgerufen. Standardmäßig werden Aufrufe an Think() weitergeleitet. 
; void EndGameFrame()
: Wird am Ende von ::GameFrame() aufgerufen (z. B. nachdem die gesamte Spiellogik lief).
; CreateStandardEntities()
: Erzeugt die externen entities, die für die GameRoles zum funktionieren benötigt werden. 
Es gibt zu viele andere wichtige Funktionen, um hier einzeln aufgezählt zu werden. Siehe game\shared\gamerules.h Zeile 179 und folgende für eine komplette Listewelche folgendes abdeckt:
* Schwierigkeitsstufen
* Den Single-/Multiplayerstatus eines Spiels
* Clientverbindung und -verbindungstrennung
* Client-Schadensregeln
* Client-Tötungen und -Punkte
* Spawn- und Respawnkontrolle
* Waffenschaden
* Waffen-/Gegenstands-/Munitionswiedergewinnung
* Waffen-/Itemspawn und -respawnkontrolle
* -Definitionen
* Lebensregenerierer-Respawnkontrolle
* Was passiert mit der Waffe und der Munition eines toten Spielers
* Teamregeln
* Schrittgeräusche
* NPCs
* 
* Team- und Ortspräfixe im Chat
*