De/GameRules: Difference between revisions
m (obsolete language category) |
No edit summary |
||
Line 33: | Line 33: | ||
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. | 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. | ||
{{todo | {{todo|Beste Praxis, um dies festzustellen und zu verwalten. #ifdefs verwirren Visual Studio... (siehe {{L|GameRules#Managing_shared_code|originale Seite}}}} | ||
== Netzwerk == | == Netzwerk == | ||
GameRules sind nicht selbstständig netzwerkfähig ({{todo | GameRules sind nicht selbstständig netzwerkfähig ({{todo|Warum nicht? (Siehe {{L|GameRules#Networking|originale Seite}}}}). Stattdessen wird ein von <code>{{L|CGameRulesProxy}}</code> abgeleiteter Proxy erzeugt. | ||
== Erwähnenswerte Funktionen == | == Erwähnenswerte Funktionen == | ||
Line 64: | Line 64: | ||
: Wird aufgerufen, wenn die Spielregeln durch die {{L|Worldspawn|Welt}} zerstört werden. | : Wird aufgerufen, wenn die Spielregeln durch die {{L|Worldspawn|Welt}} zerstört werden. | ||
; <code>void FrameUpdatePostEntityThink()</code> | ; <code>void FrameUpdatePostEntityThink()</code> | ||
: Wird jeden Frame aufgerufen. Standardmäßig werden Aufrufe an <code>Think()</code> weitergeleitet. {{todo | : Wird jeden Frame aufgerufen. Standardmäßig werden Aufrufe an <code>Think()</code> weitergeleitet. {{todo|Was ist der Unterschied zwischen dieser "PostEntityThink"-Funktion und <code>EndGameFrame()</code>? (Siehe {{L|GameRules#Server|originale Seite}})}} | ||
; <code>void EndGameFrame()</code> | ; <code>void EndGameFrame()</code> | ||
: Wird am Ende von <code>{{L|CServerGameDLL}}::GameFrame()</code> aufgerufen (z. B. nachdem die gesamte Spiellogik lief). | : Wird am Ende von <code>{{L|CServerGameDLL}}::GameFrame()</code> aufgerufen (z. B. nachdem die gesamte Spiellogik lief). | ||
; <code>CreateStandardEntities()</code> | ; <code>CreateStandardEntities()</code> | ||
: Erzeugt die externen entities, die für die GameRoles zum funktionieren benötigt werden. {{warning | : Erzeugt die externen entities, die für die GameRoles zum funktionieren benötigt werden. {{warning|Ein nicht nachvervolgbarer Absturz tritt auf, wenn die Funktion überschrieben wird, ohne dass <code>BaseClass::CreateStandardEntities()</code> aufgerufen wird.}} | ||
Es gibt zu viele andere wichtige Funktionen, um hier einzeln aufgezählt zu werden. Siehe <code>game\shared\gamerules.h</code> Zeile 179 und folgende für eine komplette Listewelche folgendes abdeckt: | Es gibt zu viele andere wichtige Funktionen, um hier einzeln aufgezählt zu werden. Siehe <code>game\shared\gamerules.h</code> Zeile 179 und folgende für eine komplette Listewelche folgendes abdeckt: |
Latest revision as of 12:43, 16 May 2025
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