mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r19601) -Fix: make the desync replay parse the "whole" string instead of everything up to the first space; make it log the sync state too
This commit is contained in:
parent
ba5f5c1ce1
commit
9b7d71699d
|
@ -632,7 +632,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
|
||||||
return_dcpi(CommandCost(), false);
|
return_dcpi(CommandCost(), false);
|
||||||
}
|
}
|
||||||
#endif /* ENABLE_NETWORK */
|
#endif /* ENABLE_NETWORK */
|
||||||
DEBUG(desync, 1, "cmd: %08x; %02x; %02x; %06x; %08x; %08x; %08x; %s", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text);
|
DEBUG(desync, 1, "cmd: %08x; %02x; %02x; %06x; %08x; %08x; %08x; \"%s\"", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text);
|
||||||
|
|
||||||
/* Actually try and execute the command. If no cost-type is given
|
/* Actually try and execute the command. If no cost-type is given
|
||||||
* use the construction one */
|
* use the construction one */
|
||||||
|
|
|
@ -1077,6 +1077,9 @@ void NetworkGameLoop()
|
||||||
if (!NetworkReceive()) return;
|
if (!NetworkReceive()) return;
|
||||||
|
|
||||||
if (_network_server) {
|
if (_network_server) {
|
||||||
|
/* Log the sync state to check for in-syncedness of replays. */
|
||||||
|
if (_date_fract == 0) DEBUG(desync, 1, "sync: %08x; %02x; %08x; %08x", _date, _date_fract, _random.state[0], _random.state[1]);
|
||||||
|
|
||||||
#ifdef DEBUG_DUMP_COMMANDS
|
#ifdef DEBUG_DUMP_COMMANDS
|
||||||
/* Loading of the debug commands from -ddesync>=1 */
|
/* Loading of the debug commands from -ddesync>=1 */
|
||||||
static FILE *f = FioFOpenFile("commands.log", "rb", SAVE_DIR);
|
static FILE *f = FioFOpenFile("commands.log", "rb", SAVE_DIR);
|
||||||
|
@ -1092,7 +1095,7 @@ void NetworkGameLoop()
|
||||||
if (cp != NULL && _date == next_date && _date_fract == next_date_fract) {
|
if (cp != NULL && _date == next_date && _date_fract == next_date_fract) {
|
||||||
_current_company = cp->company;
|
_current_company = cp->company;
|
||||||
bool ret = DoCommandP(cp->tile, cp->p1, cp->p2, cp->cmd, NULL, cp->text);
|
bool ret = DoCommandP(cp->tile, cp->p1, cp->p2, cp->cmd, NULL, cp->text);
|
||||||
DEBUG(net, 0, "injecting: %08x; %02x; %02x; %06x; %08x; %08x; %08x; %s -> %i", _date, _date_fract, (int)_current_company, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text, (int)ret);
|
DEBUG(net, 0, "injecting: %08x; %02x; %02x; %06x; %08x; %08x; %08x; \"%s\" -> %i", _date, _date_fract, (int)_current_company, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text, (int)ret);
|
||||||
assert(ret);
|
assert(ret);
|
||||||
free(cp);
|
free(cp);
|
||||||
cp = NULL;
|
cp = NULL;
|
||||||
|
@ -1112,9 +1115,9 @@ void NetworkGameLoop()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strncmp(p, "cmd: ", 5) == 0) {
|
if (strncmp(p, "cmd: ", 5) == 0) {
|
||||||
cp = MallocT<CommandPacket>(1);
|
cp = CallocT<CommandPacket>(1);
|
||||||
int company;
|
int company;
|
||||||
int ret = sscanf(p + 5, "%x; %x; %x; %x; %x; %x; %x; %s", &next_date, &next_date_fract, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text);
|
int ret = sscanf(p + 5, "%x; %x; %x; %x; %x; %x; %x; \"%[^\"]\"", &next_date, &next_date_fract, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text);
|
||||||
/* There are 8 pieces of data to read, however the last is a
|
/* There are 8 pieces of data to read, however the last is a
|
||||||
* string that might or might not exist. Ignore it if that
|
* string that might or might not exist. Ignore it if that
|
||||||
* string misses because in 99% of the time it's not used. */
|
* string misses because in 99% of the time it's not used. */
|
||||||
|
|
Loading…
Reference in New Issue