Game initialization

From Valve Developer Community
Jump to: navigation, search
English (en)Deutsch (de)中文 (zh)

Stub

Dieser Artikel ist unvollständig. Du kannst helfen, indem du ihn erweiterst.

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.
Blank image.pngZu 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() -
          Blank image.pngZu 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() -
      Blank image.pngZu erledigen: Think()(en) auf alle nicht-Spieler Entities aufrufen?
    • g_pGameRules->EndGameFrame()