Moved input handling out of game_logic_update back to game_update,
should be executed per frame not tick.
Placed gInUpdateCode at the proper locations.
* Moved out command processing from network_update into its own function. This should fix some false positives calling scenario_rand from a command callback.
* Fix Server_Handle_GAMECMD to use the command queue instead of executing directly.
* Exit the queue processing to still check for desync
This addresses some of the desync causes:
* `vehicle_create_car` was using `scenario_rand` when it shouldn't have
* ghost elements affected grass growth
* ghost elements affecting peep logic[1]
It also adds some desync debug facilities, enabled at compile time.
It also reverts part of change introduced in
https://github.com/OpenRCT2/OpenRCT2/pull/5185,
namely reorder of desync check vs call to `ProcessGameCommandQueue();`
[1] It is not ideal to have this check in multiple locations, it is prone
to human error. We already have `map_remove_provisional_elements`,
but it is possible it does not work as well as it should. This needs
further investigation.
This commit expands tabs to spaces (ts=4) in all the files under src/
and test/.
Until now we had two wildly different code styles with C using tabs and
new C++ using spaces. It is painful to maintain as none of the commonly
used tools support this kind of setup and in reality is needless, as we
can simply convert all the sources to spaces and have opened PRs do the
same, where needed.
Additionally, trailing whitespace has been removed.
Squash commit containing:
- 398d978 Setup server action logging for server admins in multiplayer
- 13330ae Added server action logging for using cheats in multiplayer
- b619019 Added server action logging for demolishing rides in multiplayer
- 93de752 Added server action logging for editing ride properties in multiplayer
- 8a3d932 Added server action logging for editing park properties in multiplayer
- c78b6e7 Moved duplicate chat and server logging code into new network methods
- c8f66bf Changed logging variable types to avoid deprecated conversion errors in CI builds
- 454e527 Added improved server action logging for using cheats in multiplayer
- 1194305 Moved server action logging code in game.c into a separate method to reduce clutter
- d59cd42 Added server action logging for add/edit/remove scenery in multiplayer
- c41ae0e Added server action logging for clients in multiplayer
- c383341 Removed unused variable to fix CI build error
- 2d1d8e3 Added server action logging for ride creation in multiplayer
Caused by the user not having the required 'official' objects. This was because the network was being closed during a network update. Disposed memory would then be accessed later in the update loop.
To fix this, a lock has been added to Close() so that it can be deferred to the end of Update(). This isn't particularly nice, but the whole of network will need redesigning to fix this properly for all potentical scenarios where Close() can be called.