mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r26788) -Add: Desync replay option to skip/replay failed commands
This commit is contained in:
parent
9b72a9f6b8
commit
e2f5081f40
|
@ -194,6 +194,7 @@ Table of contents
|
|||
- Get the same version of OpenTTD as the original server was running.
|
||||
- Uncomment/enable the define 'DEBUG_DUMP_COMMANDS' in
|
||||
'src/network/network_func.h'.
|
||||
(DEBUG_FAILED_DUMP_COMMANDS is explained later)
|
||||
- Put the 'commands-out.log' into the root save folder, and rename
|
||||
it to 'commands.log'.
|
||||
- Run 'openttd -D -d desync=3 -g startsavegame.sav'.
|
||||
|
@ -217,6 +218,11 @@ Table of contents
|
|||
the last dmp_cmds that reproduces the replay and the first one
|
||||
that fails.
|
||||
|
||||
If the replay does not succeed without mismatch, you can check the logs
|
||||
whether there were failed commands. Then you may try to replay with
|
||||
DEBUG_FAILED_DUMP_COMMANDS enabled. If the replay then fails, the
|
||||
command test-run of the failed command modified the game state.
|
||||
|
||||
If you have the original 'dmp_cmds_*.sav', you can also compare those
|
||||
savegames with your own ones from the replay. You can also comment/disable
|
||||
the 'NOT_REACHED' mentioned above, to get another 'dmp_cmds_*.sav' from
|
||||
|
|
|
@ -929,7 +929,11 @@ void NetworkGameLoop()
|
|||
p += 2;
|
||||
}
|
||||
|
||||
if (strncmp(p, "cmd: ", 5) == 0 || strncmp(p, "cmdf: ", 6) == 0) {
|
||||
if (strncmp(p, "cmd: ", 5) == 0
|
||||
#ifdef DEBUG_FAILED_DUMP_COMMANDS
|
||||
|| strncmp(p, "cmdf: ", 6) == 0
|
||||
#endif
|
||||
) {
|
||||
p += 5;
|
||||
if (*p == ' ') p++;
|
||||
cp = CallocT<CommandPacket>(1);
|
||||
|
@ -958,6 +962,10 @@ void NetworkGameLoop()
|
|||
} else if (strncmp(p, "msg: ", 5) == 0 || strncmp(p, "client: ", 8) == 0 ||
|
||||
strncmp(p, "load: ", 6) == 0 || strncmp(p, "save: ", 6) == 0) {
|
||||
/* A message that is not very important to the log playback, but part of the log. */
|
||||
#ifndef DEBUG_FAILED_DUMP_COMMANDS
|
||||
} else if (strncmp(p, "cmdf: ", 6) == 0) {
|
||||
DEBUG(net, 0, "Skipping replay of failed command: %s", p + 6);
|
||||
#endif
|
||||
} else {
|
||||
/* Can't parse a line; what's wrong here? */
|
||||
DEBUG(net, 0, "trying to parse: %s", p);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
* See docs/desync.txt for details.
|
||||
*/
|
||||
// #define DEBUG_DUMP_COMMANDS
|
||||
// #define DEBUG_FAILED_DUMP_COMMANDS
|
||||
|
||||
#include "core/address.h"
|
||||
#include "network_type.h"
|
||||
|
|
Loading…
Reference in New Issue