Author: ilor
Date: Sat Feb 13 14:40:11 2010
New Revision: 41185
URL: http://svn.gna.org/viewcvs/wesnoth?rev=41185&view=rev
Log:
get rid of a lot of random number mismatch warnings by marking which random
numbers are not yet synced with the server.
Fatal random mismatches (that might indicate cheating) are now logged as
errors, this will probably be changed to an OOS.
Modified:
trunk/src/game_events.cpp
trunk/src/play_controller.cpp
trunk/src/race.cpp
trunk/src/random.cpp
trunk/src/random.hpp
trunk/src/rng.hpp
trunk/src/simple_rng.hpp
trunk/src/unit.cpp
Modified: trunk/src/game_events.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_events.cpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/game_events.cpp (original)
+++ trunk/src/game_events.cpp Sat Feb 13 14:40:11 2010
@@ -1344,7 +1344,7 @@
}
}
- int choice = get_random() % num_choices;
+ int choice = get_random_nocheck() % num_choices;
int tmp = 0;
for(size_t i = 0; i < ranges.size(); ++i) {
tmp += (ranges[i].second - ranges[i].first) + 1;
@@ -1436,7 +1436,7 @@
}
}
- int choice = state_of_game->rng().get_random() % num_choices;
+ int choice = state_of_game->rng().get_next_random() %
num_choices;
int tmp = 0;
for(size_t i = 0; i < ranges.size(); ++i) {
tmp += (ranges[i].second - ranges[i].first) + 1;
Modified: trunk/src/play_controller.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/play_controller.cpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/play_controller.cpp (original)
+++ trunk/src/play_controller.cpp Sat Feb 13 14:40:11 2010
@@ -1126,7 +1126,7 @@
if(victory_music_.empty())
return empty_str;
- const size_t p = gamestate_.rng().get_random() % victory_music_.size();
+ const size_t p = gamestate_.rng().get_next_random() %
victory_music_.size();
assert(p < victory_music_.size());
return victory_music_[p];
}
@@ -1136,7 +1136,7 @@
if(defeat_music_.empty())
return empty_str;
- const size_t p = gamestate_.rng().get_random() % defeat_music_.size();
+ const size_t p = gamestate_.rng().get_next_random() %
defeat_music_.size();
assert(p < defeat_music_.size());
return defeat_music_[p];
}
Modified: trunk/src/race.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/race.cpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/race.cpp (original)
+++ trunk/src/race.cpp Sat Feb 13 14:40:11 2010
@@ -69,7 +69,7 @@
std::vector<int> random(max_len);
size_t j = 0;
for(; j < max_len; ++j) {
- random[j] = rng ? rng->get_random() : get_random();
+ random[j] = rng ? rng->get_next_random() : get_random_nocheck();
}
j = 0;
Modified: trunk/src/random.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/random.cpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/random.cpp (original)
+++ trunk/src/random.cpp Sat Feb 13 14:40:11 2010
@@ -70,6 +70,12 @@
return r ;
}
+int get_random_nocheck()
+{
+ assert(random_generator!=NULL);
+ int r = random_generator->get_random_nocheck();
+ return r ;
+}
const config* get_random_results()
{
@@ -148,8 +154,18 @@
int rng::get_random()
{
+ return get_random_private(true);
+}
+
+int rng::get_random_nocheck()
+{
+ return get_random_private(false);
+}
+
+int rng::get_random_private(bool check)
+{
if (!random_) {
- int r = generator_.get_random();
+ int r = generator_.get_next_random();
LOG_RND << "get_random() returning " << r << " (random_ is
null)\n";
return r;
}
@@ -157,15 +173,20 @@
const config::child_list random(random_->get_children("random"));
if (random_child_ >= random.size()) {
random_child_ = random.size() + 1;
- int res = generator_.get_random() & 0x7FFFFFFF;
+ int res = generator_.get_next_random() & 0x7FFFFFFF;
(random_->add_child("random"))["value"] =
lexical_cast<std::string>(res);
LOG_RND << "get_random() returning " << res << " (added to
random_)\n";
return res;
} else {
- int mine = generator_.get_random();
+ int mine = generator_.get_next_random();
int stored =
lexical_cast_default<int>((*random[random_child_++])["value"], 0);
if (mine != stored) {
- WRN_RND << "Random number mismatch, mine " << mine << "
vs " << stored << "\n";
+ if (check) {
+ ERR_RND << "Random number mismatch, mine " <<
mine << " vs " << stored << "\n";
+ //OOS here?
+ } else {
+ LOG_RND << "Random number mismatch (nocheck),
mine " << mine << " vs " << stored << "\n";
+ }
}
LOG_RND << "get_random() returning " << stored << "\n";
return stored;
@@ -239,7 +260,7 @@
{
}
-int simple_rng::get_random()
+int simple_rng::get_next_random()
{
random_next();
++random_calls_;
Modified: trunk/src/random.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/random.hpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/random.hpp (original)
+++ trunk/src/random.hpp Sat Feb 13 14:40:11 2010
@@ -21,6 +21,7 @@
class config;
int get_random();
+int get_random_nocheck();
const config* get_random_results();
void set_random_results(const config& cfg);
Modified: trunk/src/rng.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/rng.hpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/rng.hpp (original)
+++ trunk/src/rng.hpp Sat Feb 13 14:40:11 2010
@@ -29,7 +29,18 @@
{
public:
rng();
+ /**
+ * Get the next random number -- from the results if available, from the
+ * generator otherwise. The two should match.
+ */
int get_random();
+
+ /**
+ * Get the next random number.
+ * Do not check if the random number is consistent with local seed state
+ * (evantually this should be never used).
+ */
+ int get_random_nocheck();
const config* get_random_results();
void set_random_results(const config& cfg);
@@ -37,6 +48,7 @@
void set_seed(seed_t seed);
protected:
+ int get_random_private(bool check);
config* random();
void set_random(config*);
Modified: trunk/src/simple_rng.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/simple_rng.hpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/simple_rng.hpp (original)
+++ trunk/src/simple_rng.hpp Sat Feb 13 14:40:11 2010
@@ -28,7 +28,7 @@
simple_rng(const config& cfg);
/** Get a new random number. */
- int get_random();
+ int get_next_random();
/**
* Seeds the random pool.
Modified: trunk/src/unit.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit.cpp?rev=41185&r1=41184&r2=41185&view=diff
==============================================================================
--- trunk/src/unit.cpp (original)
+++ trunk/src/unit.cpp Sat Feb 13 14:40:11 2010
@@ -105,7 +105,7 @@
} else if(random_gender == false || genders.size() == 1) {
return genders.front();
} else {
- int random = state ? state->rng().get_random() : get_random();
+ int random = state ? state->rng().get_next_random() :
get_random_nocheck();
return genders[random % genders.size()];
}
}
@@ -764,7 +764,7 @@
int max_traits = type->num_traits();
for (; nb_traits < max_traits && !candidate_traits.empty(); ++nb_traits)
{
- int num = (state ? state->rng().get_random() : get_random())
+ int num = (state ? state->rng().get_next_random() :
get_random_nocheck())
% candidate_traits.size();
modifications_.add_child("trait", candidate_traits[num]);
candidate_traits.erase(candidate_traits.begin() + num);
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits