De/Game initialization: Difference between revisions
(Created page with "{{otherlang2 |en=Game_initialization }} {{stub:de}} Der 'Zündkreis' eines jeden Source-Spiels und -Modifikation ist die standardmäßig '''<code><game>_client.cpp</code>''' gen...") |
CHILLMODEA (talk | contribs) (rewrite Template:lang to Template:LanguageBar) |
||
(7 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LanguageBar|Game initialization}} | ||
| | |||
Der 'Zündkreis' eines jeden Source-Spiels und -Modifikation ist die standardmäßig '''<code><game>_client.cpp</code>''' genannte Datei. Sie beinhaltet mehrere Scope-lose (z. B. nicht in einer | {{stub}} | ||
Der 'Zündkreis' eines jeden Source-Spiels und -Modifikation ist die standardmäßig '''<code><game>_client.cpp</code>''' genannte Datei. Sie beinhaltet mehrere Scope-lose (z. B. nicht in einer {{L|class|Klasse}}) Funktionen, die aufgerufen werden, wenn server.dll geladen wurde, wenn die Welt spawnt, wenn ein Spieler sich verbindet usw. Einer der Hauptzwecke ist das Erzeugen einer Spieler-Entity für jeden verbundenen Client. Aus offensichtlichen Gründen kann es nur eine game_client.cpp je Projekt geben! | |||
== Client.cpp-Funktionen == | == Client.cpp-Funktionen == | ||
Verschiedene Konsolenbefehle usw., die auf dem Server ausgeführt werden, aber nur einen Spieler betreffen. Das Modell eines Spielers ändern, etwas | Verschiedene Konsolenbefehle usw., die auf dem Server ausgeführt werden, aber nur einen Spieler betreffen. Das Modell eines Spielers ändern, etwas {{L|say|sagen}}, {{L|god|Gott}}modus... | ||
Der Code wird zwischen allen Spielen und Modifikationen geteilt, weshalb nicht Spiel-spezifisches hineingelegt wird! | Der Code wird zwischen allen Spielen und Modifikationen geteilt, weshalb nicht Spiel-spezifisches hineingelegt wird! | ||
Line 18: | Line 17: | ||
; <code>void ClientPutInServer()</code> | ; <code>void ClientPutInServer()</code> | ||
; <code>void ClientActive()</code> | ; <code>void ClientActive()</code> | ||
: Wird aufgerufen, wenn ein Spieler sich verbindet bzw. | : Wird aufgerufen, wenn ein Spieler sich verbindet bzw. {{L|Activate()|aktiviert}} wird. ''Diese Funktionen definieren die für die Spieler verwendeten C++-Klassen.'' | ||
; <code>void respawn()</code> | ; <code>void respawn()</code> | ||
: Wird von <code>ClientKill()</code> und <code>DeadThink()</code> aufgerufen, wenn ein Spieler stirbt. Spawnt Ragdolls im Multiplayer und lädt den letzten Spielstand im singleplayer. | : Wird von <code>ClientKill()</code> und <code>DeadThink()</code> aufgerufen, wenn ein Spieler stirbt. Spawnt Ragdolls im Multiplayer und lädt den letzten Spielstand im singleplayer. | ||
; <code> | ; <code>{{L|const}} {{L|char}}* GetGameDescription()</code> | ||
: Liefert den beschreibenden Namen der .dll (z. B. Half Life oder Team Fortress 2). | : Liefert den beschreibenden Namen der .dll (z. B. Half-Life oder Team Fortress 2). | ||
; <code> | ; <code>{{L|CBaseEntity}}* FindEntity()</code> | ||
: Wird aufgerufen, wenn der Zielname | : Wird aufgerufen, wenn der Zielname {{L|!picker}} aufgerufen wird. | ||
; <code>void ClientGamePrecache()</code> | ; <code>void ClientGamePrecache()</code> | ||
: Precache-Funktion für den Spieler. {{todo:de|Warum nicht <code>CBasePlayer::Precache()</code>? (Siehe | : Precache-Funktion für den Spieler. {{todo:de|Warum nicht <code>CBasePlayer::Precache()</code>? (Siehe {{L|Game_initialization#Game_client.cpp functions|originale Seite}}}} | ||
; <code>void GameStartFrame()</code> | ; <code>void GameStartFrame()</code> | ||
: Einstiegspunkt für Spielspeziefischen Code, der jeden Frame ausgeführt werden muss. Mit vorsicht zu verwenden. | : Einstiegspunkt für Spielspeziefischen Code, der jeden Frame ausgeführt werden muss. Mit vorsicht zu verwenden. | ||
; <code>void InstallGameRules()</code> | ; <code>void InstallGameRules()</code> | ||
: Entscheidet, welche | : Entscheidet, welche {{L|GameRules}} verwenden werden sollen. Dafür sollte <code>CreateGameRulesObject( {{L|String|string}} ClassName )</code> verwendet werden. | ||
== Spielschleife == | == Spielschleife == | ||
Line 41: | Line 40: | ||
*** <code>'''Physics_SimulateEntity(player)'''</code> | *** <code>'''Physics_SimulateEntity(player)'''</code> | ||
**** <code>CBasePlayer::'''PhysicsSimulate()'''</code> | **** <code>CBasePlayer::'''PhysicsSimulate()'''</code> | ||
**** <code>CBasePlayer::'''PlayerRunCommand()'''</code> - {{todo:de|Dies scheint tatsächlich von irgendwo innerhalb der Engine aufgerufen zu werden. (Siehe | **** <code>CBasePlayer::'''PlayerRunCommand()'''</code> - {{todo:de|Dies scheint tatsächlich von irgendwo innerhalb der Engine aufgerufen zu werden. (Siehe {{L|Game_initialization#Game loop|originale seite}})}} | ||
***** <code>CPlayerMove::'''RunCommand()'''</code> | ***** <code>CPlayerMove::'''RunCommand()'''</code> | ||
****** <code>CPlayerMove::'''StartCommand()'''</code> | ****** <code>CPlayerMove::'''StartCommand()'''</code> | ||
Line 52: | Line 51: | ||
****** <code>CBasePlayer::'''PostThink()'''</code> | ****** <code>CBasePlayer::'''PostThink()'''</code> | ||
****** <code>CPlayerMove::'''FinishCommand()'''</code> | ****** <code>CPlayerMove::'''FinishCommand()'''</code> | ||
** <code>IGameSystem::'''FrameUpdatePostEntityThinkAllSystems()'''</code> - {{todo:de| | ** <code>IGameSystem::'''FrameUpdatePostEntityThinkAllSystems()'''</code> - {{todo:de|{{L|Thinking|Think()}} auf alle nicht-Spieler Entities aufrufen?}} | ||
** <code>g_pGameRules->'''EndGameFrame()'''</code> | ** <code>g_pGameRules->'''EndGameFrame()'''</code> | ||
{{ACategory|Programming}} |
Latest revision as of 00:38, 30 June 2025
Der 'Zündkreis' eines jeden Source-Spiels und -Modifikation ist die standardmäßig <game>_client.cpp
genannte Datei. Sie beinhaltet mehrere Scope-lose (z. B. nicht in einer Klasse ) Funktionen, die aufgerufen werden, wenn server.dll geladen wurde, wenn die Welt spawnt, wenn ein Spieler sich verbindet usw. Einer der Hauptzwecke ist das Erzeugen einer Spieler-Entity für jeden verbundenen Client. Aus offensichtlichen Gründen kann es nur eine game_client.cpp je Projekt geben!
Client.cpp-Funktionen
Verschiedene Konsolenbefehle usw., die auf dem Server ausgeführt werden, aber nur einen Spieler betreffen. Das Modell eines Spielers ändern, etwas sagen , Gott modus...
Der Code wird zwischen allen Spielen und Modifikationen geteilt, weshalb nicht Spiel-spezifisches hineingelegt wird!
Game_client.cpp-Funktionen
Die Funktionen in _client.cpp werden augenscheinlich aus der Engine heraus aufgerufen und als solche müssen sie immer gleich sein.
void ClientPutInServer()
void ClientActive()
- Wird aufgerufen, wenn ein Spieler sich verbindet bzw. aktiviert wird. Diese Funktionen definieren die für die Spieler verwendeten C++-Klassen.
void respawn()
- Wird von
ClientKill()
undDeadThink()
aufgerufen, wenn ein Spieler stirbt. Spawnt Ragdolls im Multiplayer und lädt den letzten Spielstand im singleplayer. const char * GetGameDescription()
- Liefert den beschreibenden Namen der .dll (z. B. Half-Life oder Team Fortress 2).
CBaseEntity * FindEntity()
- Wird aufgerufen, wenn der Zielname !picker aufgerufen wird.
void ClientGamePrecache()
- Precache-Funktion für den Spieler. Zu erledigen: Warum nicht
CBasePlayer::Precache()
? (Siehe originale Seite void GameStartFrame()
- Einstiegspunkt für Spielspeziefischen Code, der jeden Frame ausgeführt werden muss. Mit vorsicht zu verwenden.
void InstallGameRules()
- Entscheidet, welche GameRules verwenden werden sollen. Dafür sollte
CreateGameRulesObject( string ClassName )
verwendet werden.
Spielschleife
(Angepasst aus diesem Bericht von James Gadbury)
CServerGameDLL::GameFrame()
GameStartFrame()
Physics_RunThinkFunctions()
- Führt dei Haupt-Physiksimulationsschleife für alle Entities, abgesehen vom Spieler, ausPhysics_SimulateEntity(player)
CBasePlayer::PhysicsSimulate()
CBasePlayer::PlayerRunCommand()
-Zu erledigen: Dies scheint tatsächlich von irgendwo innerhalb der Engine aufgerufen zu werden. (Siehe originale seite )CPlayerMove::RunCommand()
CPlayerMove::StartCommand()
CBasePlayer::PreThink()
CBasePlayer::Think()
CPlayerMove::SetupMove()
- wendet einen Benutzerbefehl anCGameMovement::PlayerMove()
CGameMovement::FullWalkMove()
CPlayerMove::FinishMove()
CBasePlayer::PostThink()
CPlayerMove::FinishCommand()
IGameSystem::FrameUpdatePostEntityThinkAllSystems()
-Zu erledigen: Think() auf alle nicht-Spieler Entities aufrufen?g_pGameRules->EndGameFrame()