count requests instead of synced contexts for require_random

This commit is contained in:
gfgtdf 2014-11-25 03:05:52 +01:00
parent 9f7638e4e0
commit 00e51feb16
4 changed files with 10 additions and 9 deletions

View File

@ -142,7 +142,7 @@ play_controller::play_controller(const config& level, saved_game& state_of_game,
victory_music_(),
defeat_music_(),
scope_(),
synced_context_number_(0)
server_request_number_(0)
{
resources::controller = this;
resources::gameboard = &gamestate_.board_;

View File

@ -182,8 +182,8 @@ public:
boost::shared_ptr<wb::manager> get_whiteboard();
const mp_game_settings& get_mp_settings();
const game_classification & get_classification();
int get_synced_context_number() const { return synced_context_number_; }
void increase_synced_context_number() { ++synced_context_number_; }
int get_server_request_number() const { return server_request_number_; }
void increase_server_request_number() { ++server_request_number_; }
static const std::string wml_menu_hotkey_prefix;
protected:
@ -305,7 +305,7 @@ private:
hotkey::scope_changer scope_;
// used to sync with the mpserver, not persistent in savefiles.
int synced_context_number_;
int server_request_number_;
};

View File

@ -985,7 +985,7 @@ bool game::process_turn(simple_wml::document& data, const player_map::const_iter
return turn_ended;
}
void game::require_random(const simple_wml::document &data, const player_map::iterator /*user*/)
void game::require_random(const simple_wml::document &data, const player_map::iterator user)
{
// note, that during end turn events, it's side=1 for the server but side= side_count() on the clients.
@ -1001,14 +1001,15 @@ void game::require_random(const simple_wml::document &data, const player_map::it
const simple_wml::node* require_random = data.root().child("require_random");
if(!require_random) return;
if(require_random->has_attr("context_id"))
if(require_random->has_attr("request_id"))
{
int context_id = (*require_random)["context_id"].to_int();
int context_id = (*require_random)["request_id"].to_int();
if(context_id <= last_synced_context_id_)
{
// We gave already a randpm seed for this synced context.
return;
}
LOG_GAME << "answering seed request " << context_id << " by player " << user->second.name() << "(" << user->first << ")" << std::endl;
last_synced_context_id_ = context_id;
}

View File

@ -243,13 +243,14 @@ static void send_require_random()
{
config data;
config& rr = data.add_child("require_random");
rr["context_id"] = resources::controller->get_synced_context_number();
rr["request_id"] = resources::controller->get_server_request_number();
network::send_data(data,0);
}
config synced_context::ask_server_for_seed()
{
resources::controller->increase_server_request_number();
std::string name = "random_seed";
assert(get_synced_state() == synced_context::SYNCED);
const bool is_mp_game = network::nconnections() != 0;
@ -346,7 +347,6 @@ set_scontext_synced::set_scontext_synced(int number)
*/
void set_scontext_synced::init()
{
resources::controller->increase_synced_context_number();
LOG_REPLAY << "set_scontext_synced::set_scontext_synced\n";
assert(synced_context::get_synced_state() == synced_context::UNSYNCED);