De/Game initialization: Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
(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...")
 
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{otherlang2
{{LanguageBar|Game initialization}}
|en=Game_initialization
}}
{{stub:de}}


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 [[class:de|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!
{{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 [[say:de|sagen]], [[god:de|Gott]]modus...
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. [[Activate():de|aktiviert]] wird. ''Diese Funktionen definieren die für die Spieler verwendeten C++-Klassen.''
: 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>[[const:de|const]] [[char:de|char]]* GetGameDescription()</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>[[CBaseEntity:de|CBaseEntity]]* FindEntity()</code>
; <code>{{L|CBaseEntity}}* FindEntity()</code>
: Wird aufgerufen, wenn der Zielname [[!picker:de|!picker]] aufgerufen wird.
: 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 [[Game_initialization#Game_client.cpp functions|originale Seite]]}}
: 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 [[GameRules:de|GameRules]] verwenden werden sollen. Dafür sollte <code>CreateGameRulesObject( [[string:de|string]] ClassName )</code> verwendet werden.
: 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 [[Game_initialization#Game loop|originale seite]])}}
**** <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|[[Think():de|Think()]] auf alle nicht-Spieler Entities aufrufen?}}
** <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>


[[Category:Programming:de]]
{{ACategory|Programming}}

Latest revision as of 00:38, 30 June 2025

English (en)Deutsch (de)中文 (zh)Translate (Translate)

Stub

This article or section is a stub. You can help by expanding it.

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(en)) 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(en), Gott(en)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(en) wird. Diese Funktionen definieren die für die Spieler verwendeten C++-Klassen.
void respawn()
Wird von ClientKill() und DeadThink() aufgerufen, wenn ein Spieler stirbt. Spawnt Ragdolls im Multiplayer und lädt den letzten Spielstand im singleplayer.
const(en) char(en)* GetGameDescription()
Liefert den beschreibenden Namen der .dll (z. B. Half-Life oder Team Fortress 2).
CBaseEntity(en)* FindEntity()
Wird aufgerufen, wenn der Zielname !picker(en) aufgerufen wird.
void ClientGamePrecache()
Precache-Funktion für den Spieler.
Zu erledigen: Warum nicht CBasePlayer::Precache()? (Siehe originale Seite(en)
void GameStartFrame()
Einstiegspunkt für Spielspeziefischen Code, der jeden Frame ausgeführt werden muss. Mit vorsicht zu verwenden.
void InstallGameRules()
Entscheidet, welche GameRules(en) verwenden werden sollen. Dafür sollte CreateGameRulesObject( string(en) 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, aus
      • Physics_SimulateEntity(player)
        • CBasePlayer::PhysicsSimulate()
        • CBasePlayer::PlayerRunCommand() -
          Zu erledigen: Dies scheint tatsächlich von irgendwo innerhalb der Engine aufgerufen zu werden. (Siehe originale seite(en))
          • CPlayerMove::RunCommand()
            • CPlayerMove::StartCommand()
            • CBasePlayer::PreThink()
            • CBasePlayer::Think()
            • CPlayerMove::SetupMove() - wendet einen Benutzerbefehl an
              • CGameMovement::PlayerMove()
              • CGameMovement::FullWalkMove()
            • CPlayerMove::FinishMove()
            • CBasePlayer::PostThink()
            • CPlayerMove::FinishCommand()
    • IGameSystem::FrameUpdatePostEntityThinkAllSystems() -
      Zu erledigen: Think()(en) auf alle nicht-Spieler Entities aufrufen?
    • g_pGameRules->EndGameFrame()