Game initialization

From Valve Developer Community
< De
Jump to navigation Jump to search
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()