HTTPS clone URL
Subversion checkout URL
Please sign in to comment.
fix bug #18829
it turns out that when the "network_ai" controller type was introduced, it was implemented on the server in the following way: https://github.com/wesnoth/wesnoth/blob/a4f47a63c7b2c55fd7d8d3cd425ede256b39acdd/src/server/game.cpp#L464 change_controller requests to the type "ai" are always transformed by the server into either "human_ai" for host or "network_ai" for client, and in thunderstruck's refactor of the mp_connect dialogs, ai sides are always set to "ai" in the WML sent to the server (and set this way on the host). however, because of code in play_campaign.cpp which long predated this refactor, all sides on an mp client are either set to human (if that player controls them) or "network", or "null". this causes problems because if that player saves the game, the savegame will record these sides at human controlled rather than ai controlled... if the game is reloaded oos can occur, although I won't detail it here. we update the play_campaign.cpp code to ensure that "ai" controller types always resolve to human_ai or network_ai as appropriate. additionally, we make sure that on the host, sides always resolve to human_ai rather than ai. so the type "ai" should never be observed during an mp game, and only during scenario configuration, and perhaps during replays. additionally, we ensure in playturn.cpp that if the client gets a message from the server to set a side to "ai" during the game, it will in fact set it to "human_ai" or "network_ai", to preserve the invariant. finally we also switch over observers to follow this behavior -- previously there was a hack here in the server which would make sure that any observers which join see all sides as controlled by "human" https://github.com/wesnoth/wesnoth/blob/a4f47a63c7b2c55fd7d8d3cd425ede256b39acdd/src/server/game.cpp#L197 in order that they do not attempt to substitute themselves for a player. we change this by removing the hack, and programming the client to remember if the player is an observer, and if so not attempting to substitute themself at game start.
- Loading branch information...
Showing with 40 additions and 9 deletions.