Game initialization
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()