GameRules

From Valve Developer Community
< De
Jump to navigation Jump to search
English (en)Deutsch (de)Translate (Translate)

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.

Zu erledigen: Beste Praxis, um dies festzustellen und zu verwalten. #ifdefs verwirren Visual Studio... (siehe originale Seite(en)

Netzwerk

GameRules sind nicht selbstständig netzwerkfähig (

Zu erledigen: Warum nicht? (Siehe originale Seite(en)

). Stattdessen wird ein von CGameRulesProxy(en) abgeleiteter Proxy erzeugt.

Erwähnenswerte Funktionen

Geteilt

int(en) Damage_GetNoPhysicsForce()
int Damage_GetShouldGibCorpse()
usw.
Verschiedene Funktionen, die einen ganzzahligen bitstring(en) liefern, der den Schadenstyp(en) der jeweiligen Kategorie beinhaltet.
bool(en) ShouldCollide()
Sagt aus, ob Entities in der angegebenen Kollisionsgruppe(en) 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(en)* 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(en) GetAmmoDamage()
Bestimmt, wie viel Schaden angerichtet werden soll, wenn eine Entity (eine beliebige Entity) Kugeln feuert. Normalerweise werden aufrufe an GetAmmoDef()(en) weitergeleitet.
unsigned(en) char(en)* GetEncryptionKey()
Der ICE(en)-Schlüssel der Modifikation für Skriptverschlüsselung.
CViewVectors(en)* GetViewVectors()
Getter für g_DefaultViewVectors(en).

Server

void LevelShutdown()
Wird aufgerufen, wenn die Spielregeln durch die Welt(en) 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 und EndGameFrame()? (Siehe originale Seite(en))
void EndGameFrame()
Wird am Ende von CServerGameDLL(en)::GameFrame() aufgerufen (z. B. nachdem die gesamte Spiellogik lief).
CreateStandardEntities()
Erzeugt die externen entities, die für die GameRoles zum funktionieren benötigt werden.
Warning.png 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(en)-Definitionen
  • Lebensregenerierer-Respawnkontrolle
  • Was passiert mit der Waffe und der Munition eines toten Spielers
  • Teamregeln
  • Schrittgeräusche
  • NPCs
  • TraceLines(en)
  • Team- und Ortspräfixe im Chat
  • Errungenschaften(en)