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 CGameRulesProxy
abgeleiteter Proxy erzeugt.
Erwähnenswerte Funktionen
Geteilt
int Damage_GetNoPhysicsForce()
int Damage_GetShouldGibCorpse()
- usw.
- Verschiedene Funktionen, die einen ganzzahligen bitstring liefern, der den Schadenstyp der jeweiligen Kategorie beinhaltet.
bool ShouldCollide()
- Sagt aus, ob Entities in der angegebenen Kollisionsgruppe 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()
CBaseCombatWeapon * 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. float GetAmmoDamage()
- Bestimmt, wie viel Schaden angerichtet werden soll, wenn eine Entity (eine beliebige Entity) Kugeln feuert. Normalerweise werden aufrufe an
GetAmmoDef()
weitergeleitet. unsigned char * GetEncryptionKey()
- Der ICE -Schlüssel der Modifikation für Skriptverschlüsselung.
CViewVectors * GetViewVectors()
- Getter für
g_DefaultViewVectors
.
Server
void LevelShutdown()
- Wird aufgerufen, wenn die Spielregeln durch die Welt zerstört werden.
void FrameUpdatePostEntityThink()
- Wird jeden Frame aufgerufen. Standardmäßig werden Aufrufe an
Think()
weitergeleitet.Zu erledigen: Was ist der Unterschied zwischen dieser "PostEntityThink"-Funktion undEndGameFrame()
? (Siehe originale Seite ) void EndGameFrame()
- Wird am Ende von
CServerGameDLL ::GameFrame()
aufgerufen (z. B. nachdem die gesamte Spiellogik lief). CreateStandardEntities()
- Erzeugt die externen entities, die für die GameRoles zum funktionieren benötigt werden. Achtung: Ein nicht nachvervolgbarer Absturz tritt auf, wenn die Funktion überschrieben wird, ohne dass
BaseClass::CreateStandardEntities()
aufgerufen wird.
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
- KI -Definitionen
- Lebensregenerierer-Respawnkontrolle
- Was passiert mit der Waffe und der Munition eines toten Spielers
- Teamregeln
- Schrittgeräusche
- NPCs
- TraceLines
- Team- und Ortspräfixe im Chat
- Errungenschaften