Game initialization:de
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, Gottmodus...
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()