00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "global.hpp"
00017
00018 #define GETTEXT_DOMAIN "wesnoth-lib"
00019
00020 #include "foreach.hpp"
00021 #include "game_display.hpp"
00022 #include "game_preferences.hpp"
00023 #include "gamestatus.hpp"
00024 #include "gettext.hpp"
00025 #include "log.hpp"
00026 #include "map.hpp"
00027 #include "network.hpp"
00028 #include "serialization/string_utils.hpp"
00029 #include "settings.hpp"
00030 #include "unit.hpp"
00031 #include "unit_map.hpp"
00032 #include "wml_exception.hpp"
00033
00034 static lg::log_domain log_config("config");
00035 #define ERR_CFG LOG_STREAM(err , log_config)
00036
00037 namespace {
00038
00039 bool message_private_on = false;
00040
00041 bool haloes = true;
00042
00043 std::set<std::string> encountered_units_set;
00044 std::set<t_translation::t_terrain> encountered_terrains_set;
00045
00046 std::map<std::string, std::vector<std::string> > history_map;
00047 const unsigned max_history_saved = 50;
00048
00049 std::set<std::string> friends;
00050 std::set<std::string> ignores;
00051
00052 bool friends_initialized = false;
00053 bool ignores_initialized = false;
00054
00055 bool authenticated = false;
00056
00057 const char WRAP_CHAR = '@';
00058 const std::string EMPTY_WRAPPED_STRING = "@@";
00059
00060 std::string wrap_credentials_field_value(const std::string& value)
00061 {
00062 return WRAP_CHAR + value + WRAP_CHAR;
00063 }
00064
00065 std::string parse_wrapped_credentials_field(const std::string& raw)
00066 {
00067 if(raw.empty() || raw == EMPTY_WRAPPED_STRING) {
00068
00069 return raw;
00070 } else if(raw.length() < 2 || raw[0] != WRAP_CHAR || raw[raw.length() - 1] != WRAP_CHAR ) {
00071
00072 ERR_CFG << "malformed user credentials (did you manually edit the preferences file?)\n";
00073 return raw;
00074 }
00075
00076 return raw.substr(1, raw.length() - 2);
00077 }
00078
00079 }
00080
00081 namespace preferences {
00082
00083 manager::manager() :
00084 base()
00085 {
00086 set_music_volume(music_volume());
00087 set_sound_volume(sound_volume());
00088
00089 set_show_haloes(preferences::get("show_haloes", true));
00090 if (!preferences::get("remember_timer_settings", false)) {
00091 preferences::erase("mp_countdown_init_time");
00092 preferences::erase("mp_countdown_reservoir_time");
00093 preferences::erase("mp_countdown_turn_bonus");
00094 preferences::erase("mp_countdown_action_bonus");
00095 }
00096
00097 const std::vector<std::string> v = utils::split(preferences::get("encountered_units"));
00098 std::copy(v.begin(), v.end(),
00099 std::inserter(encountered_units_set, encountered_units_set.begin()));
00100
00101 const t_translation::t_list terrain =
00102 t_translation::read_list(preferences::get("encountered_terrain_list"));
00103 std::copy(terrain.begin(), terrain.end(),
00104 std::inserter(encountered_terrains_set, encountered_terrains_set.begin()));
00105
00106 if (const config &history = preferences::get_child("history"))
00107 {
00108
00109
00110
00111
00112
00113
00114
00115 foreach (const config::any_child &h, history.all_children_range())
00116 {
00117 foreach (const config &l, h.cfg.child_range("line")) {
00118 history_map[h.key].push_back(l["message"]);
00119 }
00120 }
00121 }
00122
00123 network::ping_timeout = get_ping_timeout();
00124 }
00125
00126 manager::~manager()
00127 {
00128 std::vector<std::string> v;
00129 std::copy(encountered_units_set.begin(), encountered_units_set.end(), std::back_inserter(v));
00130 preferences::set("encountered_units", utils::join(v));
00131 t_translation::t_list terrain;
00132 std::copy(encountered_terrains_set.begin(), encountered_terrains_set.end(),
00133 std::back_inserter(terrain));
00134 preferences::set("encountered_terrain_list", t_translation::write_list(terrain));
00135
00136
00137
00138
00139
00140
00141
00142
00143 config history;
00144 typedef std::pair<std::string, std::vector<std::string> > hack;
00145 foreach(const hack& history_id, history_map) {
00146
00147 config history_id_cfg;
00148 foreach(const std::string& line, history_id.second) {
00149 config cfg;
00150
00151 cfg["message"] = line;
00152 history_id_cfg.add_child("line", cfg);
00153 }
00154
00155 history.add_child(history_id.first, history_id_cfg);
00156 }
00157 preferences::set_child("history", history);
00158
00159 history_map.clear();
00160 encountered_units_set.clear();
00161 encountered_terrains_set.clear();
00162 }
00163
00164 bool is_authenticated() {
00165 return authenticated;
00166 }
00167
00168 void parse_admin_authentication(const std::string& sender, const std::string& message) {
00169 if(sender != "server") return;
00170 if(message.find("You are now recognized as an administrator.") == 0) {
00171 authenticated = true;
00172 } else if(message.find("You are no longer recognized as an administrator.") == 0) {
00173 authenticated = false;
00174 }
00175 }
00176
00177 static void initialize_friends() {
00178 if(!friends_initialized) {
00179 std::vector<std::string> names = utils::split(preferences::get("friends"));
00180 std::set<std::string> tmp(names.begin(), names.end());
00181 friends.swap(tmp);
00182
00183 friends_initialized = true;
00184 }
00185 }
00186
00187 const std::set<std::string> & get_friends() {
00188 initialize_friends();
00189 return friends;
00190 }
00191
00192 static void initialize_ignores() {
00193 if(!ignores_initialized) {
00194 std::vector<std::string> names = utils::split(preferences::get("ignores"));
00195 std::set<std::string> tmp(names.begin(), names.end());
00196 ignores.swap(tmp);
00197
00198 ignores_initialized = true;
00199 }
00200 }
00201
00202 const std::set<std::string> & get_ignores() {
00203 return ignores;
00204 }
00205
00206 bool add_friend(const std::string& nick) {
00207 if (!utils::isvalid_wildcard(nick)) return false;
00208 friends.insert(nick);
00209 preferences::set("friends", utils::join(friends));
00210 return true;
00211 }
00212
00213 bool add_ignore(const std::string& nick) {
00214 if (!utils::isvalid_wildcard(nick)) return false;
00215 ignores.insert(nick);
00216 preferences::set("ignores", utils::join(ignores));
00217 return true;
00218 }
00219
00220 void remove_friend(const std::string& nick) {
00221 std::set<std::string>::iterator i = friends.find(nick);
00222 if(i != friends.end()) {
00223 friends.erase(i);
00224 preferences::set("friends", utils::join(friends));
00225 }
00226 }
00227
00228 void remove_ignore(const std::string& nick) {
00229 std::set<std::string>::iterator i = ignores.find(nick);
00230 if(i != ignores.end()) {
00231 ignores.erase(i);
00232 preferences::set("ignores", utils::join(ignores));
00233 }
00234 }
00235
00236 bool is_friend(const std::string& nick) {
00237 initialize_friends();
00238 return friends.find(nick) != friends.end();
00239 }
00240
00241 bool is_ignored(const std::string& nick) {
00242 initialize_ignores();
00243 return ignores.find(nick) != ignores.end();
00244 }
00245
00246 void add_completed_campaign(const std::string& campaign_id) {
00247 std::vector<std::string> completed = utils::split(preferences::get("completed_campaigns"));
00248
00249 if(std::find(completed.begin(), completed.end(), campaign_id) != completed.end())
00250 return;
00251
00252 completed.push_back(campaign_id);
00253 preferences::set("completed_campaigns", utils::join(completed));
00254 }
00255
00256 bool is_campaign_completed(const std::string& campaign_id) {
00257 std::vector<std::string> completed = utils::split(preferences::get("completed_campaigns"));
00258
00259 return std::find(completed.begin(), completed.end(), campaign_id) != completed.end();
00260 }
00261
00262 bool parse_should_show_lobby_join(const std::string &sender, const std::string &message)
00263 {
00264
00265 if (sender != "server") return true;
00266 std::string::size_type pos = message.find(" has logged into the lobby");
00267 if (pos == std::string::npos) return true;
00268 int lj = lobby_joins();
00269 if (lj == SHOW_NONE) return false;
00270 if (lj == SHOW_ALL) return true;
00271 return is_friend(message.substr(0, pos));
00272 }
00273
00274 int lobby_joins()
00275 {
00276 std::string pref = preferences::get("lobby_joins");
00277 if (pref == "friends") {
00278 return SHOW_FRIENDS;
00279 } else if (pref == "all") {
00280 return SHOW_ALL;
00281 } else if (pref == "none") {
00282 return SHOW_NONE;
00283 } else {
00284 return SHOW_FRIENDS;
00285 }
00286 }
00287
00288
00289 void _set_lobby_joins(int show)
00290 {
00291 if (show == SHOW_FRIENDS) {
00292 preferences::set("lobby_joins", "friends");
00293 } else if (show == SHOW_ALL) {
00294 preferences::set("lobby_joins", "all");
00295 } else if (show == SHOW_NONE) {
00296 preferences::set("lobby_joins", "none");
00297 }
00298 }
00299
00300 bool new_lobby()
00301 {
00302 return get("new_lobby", false);
00303 }
00304
00305 void set_new_lobby(bool value)
00306 {
00307 preferences::set("new_lobby", value);
00308 }
00309
00310 const std::vector<game_config::server_info>& server_list()
00311 {
00312 static std::vector<game_config::server_info> pref_servers;
00313 if(pref_servers.empty()) {
00314 std::vector<game_config::server_info> &game_servers = game_config::server_list;
00315 VALIDATE(!game_servers.empty(), _("No server has been defined."));
00316 pref_servers.insert(pref_servers.begin(), game_servers.begin(), game_servers.end());
00317 foreach (const config &server, get_prefs()->child_range("server")) {
00318 game_config::server_info sinf;
00319 sinf.name = server["name"].str();
00320 sinf.address = server["address"].str();
00321 pref_servers.push_back(sinf);
00322 }
00323 }
00324 return pref_servers;
00325 }
00326
00327 std::string network_host()
00328 {
00329 const std::string res = preferences::get("host");
00330 if(res.empty()) {
00331 return server_list().front().address;
00332 } else {
00333 return res;
00334 }
00335 }
00336
00337 void set_network_host(const std::string& host)
00338 {
00339 preferences::set("host", host);
00340 }
00341
00342 unsigned int get_ping_timeout()
00343 {
00344 return lexical_cast_default<unsigned>(preferences::get("ping_timeout"), 0);
00345 }
00346
00347 std::string campaign_server()
00348 {
00349 if(!preferences::get("campaign_server").empty()) {
00350 return preferences::get("campaign_server");
00351 } else {
00352 return "add-ons.wesnoth.org";
00353 }
00354 }
00355
00356 void set_campaign_server(const std::string& host)
00357 {
00358 preferences::set("campaign_server", host);
00359 }
00360
00361 bool wrap_password()
00362 {
00363 const bool have_old_password_format =
00364 (!preferences::have_setting("password_is_wrapped")) && preferences::have_setting("password");
00365 return have_old_password_format ? false : preferences::get("password_is_wrapped", true);
00366 }
00367
00368 void set_wrap_password(bool wrap)
00369 {
00370 preferences::set("password_is_wrapped", wrap);
00371 }
00372
00373 bool wrap_login()
00374 {
00375 const bool have_old_login_format =
00376 (!preferences::have_setting("login_is_wrapped")) && preferences::have_setting("login");
00377 return have_old_login_format ? false : preferences::get("login_is_wrapped", true);
00378 }
00379
00380 void set_wrap_login(bool wrap)
00381 {
00382 preferences::set("login_is_wrapped", wrap);
00383 }
00384
00385 std::string login()
00386 {
00387 const std::string res = preferences::get("login");
00388 if(res.empty()) {
00389 char* const login = getenv("USER");
00390 if(login != NULL) {
00391 return login;
00392 }
00393
00394 if(res.empty()) {
00395 return _("player");
00396 }
00397 }
00398
00399 if(!wrap_login()) {
00400 return res;
00401 } else {
00402 return parse_wrapped_credentials_field(res);
00403 }
00404 }
00405
00406 void set_login(const std::string& username)
00407 {
00408 set_wrap_login(true);
00409 preferences::set("login", wrap_credentials_field_value(username));
00410 }
00411
00412 namespace prv {
00413 std::string password;
00414 }
00415
00416 std::string password()
00417 {
00418 if(remember_password()) {
00419 const std::string saved_pass = preferences::get("password");
00420 if(!wrap_password()) {
00421 return saved_pass;
00422 } else {
00423 return parse_wrapped_credentials_field(saved_pass);
00424 }
00425 } else {
00426 return prv::password;
00427 }
00428 }
00429
00430 void set_password(const std::string& password)
00431 {
00432 prv::password = password;
00433 if(remember_password()) {
00434 set_wrap_password(true);
00435 preferences::set("password", wrap_credentials_field_value(password));
00436 }
00437 }
00438
00439 bool remember_password()
00440 {
00441 return preferences::get("remember_password", false);
00442 }
00443
00444 void set_remember_password(bool remember)
00445 {
00446 preferences::set("remember_password", remember);
00447 preferences::set("password", remember ? prv::password : "");
00448 }
00449
00450 bool turn_dialog()
00451 {
00452 return preferences::get("turn_dialog", false);
00453 }
00454
00455 void set_turn_dialog(bool ison)
00456 {
00457 preferences::set("turn_dialog", ison);
00458 }
00459
00460 bool enable_whiteboard_mode_on_start()
00461 {
00462 return preferences::get("enable_planning_mode_on_start", false);
00463 }
00464
00465 void set_enable_whiteboard_mode_on_start(bool value)
00466 {
00467 preferences::set("enable_planning_mode_on_start", value);
00468 }
00469
00470 bool hide_whiteboard()
00471 {
00472 return preferences::get("hide_whiteboard", false);
00473 }
00474
00475 void set_hide_whiteboard(bool value)
00476 {
00477 preferences::set("hide_whiteboard", value);
00478 }
00479
00480 bool show_combat()
00481 {
00482 return preferences::get("show_combat", true);
00483 }
00484
00485 bool allow_observers()
00486 {
00487 return preferences::get("allow_observers", true);
00488 }
00489
00490 void set_allow_observers(bool value)
00491 {
00492 preferences::set("allow_observers", value);
00493 }
00494
00495 bool shuffle_sides()
00496 {
00497 return preferences::get("shuffle_sides", false);
00498 }
00499
00500 void set_shuffle_sides(bool value)
00501 {
00502 preferences::set("shuffle_sides", value);
00503 }
00504
00505 bool use_map_settings()
00506 {
00507 return preferences::get("mp_use_map_settings", true);
00508 }
00509
00510 void set_use_map_settings(bool value)
00511 {
00512 preferences::set("mp_use_map_settings", value);
00513 }
00514
00515 int mp_server_warning_disabled()
00516 {
00517 return lexical_cast_default<int>(preferences::get("mp_server_warning_disabled"), 0);
00518 }
00519
00520 void set_mp_server_warning_disabled(int value)
00521 {
00522 preferences::set("mp_server_warning_disabled", value);
00523 }
00524
00525 void set_mp_server_program_name(const std::string& path)
00526 {
00527 if (path.empty())
00528 {
00529 preferences::clear("mp_server_program_name");
00530 }
00531 else
00532 {
00533 preferences::set("mp_server_program_name", path);
00534 }
00535 }
00536
00537 std::string get_mp_server_program_name()
00538 {
00539 return preferences::get("mp_server_program_name");
00540 }
00541
00542 bool random_start_time()
00543 {
00544 return preferences::get("mp_random_start_time", true);
00545 }
00546
00547 void set_random_start_time(bool value)
00548 {
00549 preferences::set("mp_random_start_time", value);
00550 }
00551
00552 bool fog()
00553 {
00554 return preferences::get("mp_fog", true);
00555 }
00556
00557 void set_fog(bool value)
00558 {
00559 preferences::set("mp_fog", value);
00560 }
00561
00562 bool shroud()
00563 {
00564 return preferences::get("mp_shroud", false);
00565 }
00566
00567 void set_shroud(bool value)
00568 {
00569 preferences::set("mp_shroud", value);
00570 }
00571
00572 int turns()
00573 {
00574 return settings::get_turns(preferences::get("mp_turns"));
00575 }
00576
00577 void set_turns(int value)
00578 {
00579 preferences::set("mp_turns", value);
00580 }
00581
00582 bool skip_mp_replay()
00583 {
00584 return preferences::get("skip_mp_replay", false);
00585 }
00586
00587 void set_skip_mp_replay(bool value)
00588 {
00589 preferences::set("skip_mp_replay", value);
00590 }
00591
00592 bool countdown()
00593 {
00594 return preferences::get("mp_countdown", false);
00595 }
00596
00597 void set_countdown(bool value)
00598 {
00599 preferences::set("mp_countdown", value);
00600 }
00601
00602 int countdown_init_time()
00603 {
00604 return lexical_cast_in_range<int>
00605 (preferences::get("mp_countdown_init_time"), 270, 0, 1500);
00606 }
00607
00608 void set_countdown_init_time(int value)
00609 {
00610 preferences::set("mp_countdown_init_time", value);
00611 }
00612
00613 int countdown_reservoir_time()
00614 {
00615 return lexical_cast_in_range<int>(
00616 preferences::get("mp_countdown_reservoir_time"), 330, 30, 1500);
00617 }
00618
00619 void set_countdown_reservoir_time(int value)
00620 {
00621 preferences::set("mp_countdown_reservoir_time", value);
00622 }
00623
00624 int countdown_turn_bonus()
00625 {
00626 return lexical_cast_in_range<int>(
00627 preferences::get("mp_countdown_turn_bonus"), 60, 0, 300);
00628 }
00629
00630 void set_countdown_turn_bonus(int value)
00631 {
00632 preferences::set("mp_countdown_turn_bonus", value);
00633 }
00634
00635 int countdown_action_bonus()
00636 {
00637 return lexical_cast_in_range<int>(
00638 preferences::get("mp_countdown_action_bonus"), 13, 0, 30);
00639 }
00640
00641 void set_countdown_action_bonus(int value)
00642 {
00643 preferences::set("mp_countdown_action_bonus", value);
00644 }
00645
00646 int village_gold()
00647 {
00648 return settings::get_village_gold(preferences::get("mp_village_gold"));
00649 }
00650
00651 void set_village_gold(int value)
00652 {
00653 preferences::set("mp_village_gold", value);
00654 }
00655
00656 int village_support()
00657 {
00658 return settings::get_village_support(preferences::get("mp_village_support"));
00659 }
00660
00661 void set_village_support(int value)
00662 {
00663 preferences::set("mp_village_support", lexical_cast<std::string>(value));
00664 }
00665
00666 int xp_modifier()
00667 {
00668 return settings::get_xp_modifier(preferences::get("mp_xp_modifier"));
00669 }
00670
00671 void set_xp_modifier(int value)
00672 {
00673 preferences::set("mp_xp_modifier", value);
00674 }
00675
00676 int era()
00677 {
00678 return lexical_cast_default<int>(preferences::get("mp_era"), 0);
00679 }
00680
00681 void set_era(int value)
00682 {
00683 preferences::set("mp_era", value);
00684 }
00685
00686 int map()
00687 {
00688 return lexical_cast_default<int>(preferences::get("mp_map"), 0);
00689 }
00690
00691 void set_map(int value)
00692 {
00693 preferences::set("mp_map", value);
00694 }
00695
00696 bool show_ai_moves()
00697 {
00698 return preferences::get("show_ai_moves", true);
00699 }
00700
00701 void set_show_ai_moves(bool value)
00702 {
00703 preferences::set("show_ai_moves", value);
00704 }
00705
00706 void set_show_side_colors(bool value)
00707 {
00708 preferences::set("show_side_colors", value);
00709 }
00710
00711 bool show_side_colors()
00712 {
00713 return preferences::get("show_side_colors", true);
00714 }
00715
00716 void set_save_replays(bool value)
00717 {
00718 preferences::set("save_replays", value);
00719 }
00720
00721 bool save_replays()
00722 {
00723 return preferences::get("save_replays", true);
00724 }
00725
00726 void set_delete_saves(bool value)
00727 {
00728 preferences::set("delete_saves", value);
00729 }
00730
00731 bool delete_saves()
00732 {
00733 return preferences::get("delete_saves", false);
00734 }
00735
00736 void set_ask_delete_saves(bool value)
00737 {
00738 preferences::set("ask_delete", value);
00739 }
00740
00741 bool ask_delete_saves()
00742 {
00743 return preferences::get("ask_delete", true);
00744 }
00745
00746 void set_interrupt_when_ally_sighted(bool value)
00747 {
00748 preferences::set("ally_sighted_interrupts", value);
00749 }
00750
00751 bool interrupt_when_ally_sighted()
00752 {
00753 return preferences::get("ally_sighted_interrupts", true);
00754 }
00755
00756 int autosavemax()
00757 {
00758 return lexical_cast_default<int>(preferences::get("auto_save_max"), 10);
00759 }
00760
00761 void set_autosavemax(int value)
00762 {
00763 preferences::set("auto_save_max", value);
00764 }
00765
00766 std::string client_type()
00767 {
00768 return preferences::get("client_type") == "ai" ? "ai" : "human";
00769 }
00770
00771 std::string theme()
00772 {
00773 if(non_interactive()) {
00774 static const std::string null_theme = "null";
00775 return null_theme;
00776 }
00777
00778 std::string res = preferences::get("theme");
00779 if(res.empty()) {
00780 return "Default";
00781 }
00782
00783 return res;
00784 }
00785
00786 void set_theme(const std::string& theme)
00787 {
00788 if(theme != "null") {
00789 preferences::set("theme", theme);
00790 }
00791 }
00792
00793 bool show_floating_labels()
00794 {
00795 return preferences::get("floating_labels", true);
00796 }
00797
00798 void set_show_floating_labels(bool value)
00799 {
00800 preferences::set("floating_labels", value);
00801 }
00802
00803 bool message_private()
00804 {
00805 return message_private_on;
00806 }
00807
00808 void set_message_private(bool value)
00809 {
00810 message_private_on = value;
00811 }
00812
00813 bool show_haloes()
00814 {
00815 return haloes;
00816 }
00817
00818 void set_show_haloes(bool value)
00819 {
00820 haloes = value;
00821 preferences::set("show_haloes", value);
00822 }
00823
00824 bool flip_time()
00825 {
00826 return preferences::get("flip_time", false);
00827 }
00828
00829 void set_flip_time(bool value)
00830 {
00831 preferences::set("flip_time", value);
00832 }
00833
00834 bool compress_saves()
00835 {
00836 return preferences::get("compress_saves", true);
00837 }
00838
00839 bool startup_effect()
00840 {
00841 return preferences::get("startup_effect", false);
00842 }
00843
00844 std::string get_chat_timestamp(const time_t& t) {
00845 if (chat_timestamping()) {
00846 if(preferences::use_twelve_hour_clock_format() == false) {
00847 return lg::get_timestamp(t, _("%H:%M")) + " ";
00848 }
00849 else {
00850 return lg::get_timestamp(t, _("%I:%M %p")) + " ";
00851 }
00852 }
00853 return "";
00854 }
00855
00856 bool chat_timestamping() {
00857 return preferences::get("chat_timestamp", false);
00858 }
00859
00860 void set_chat_timestamping(bool value) {
00861 preferences::set("chat_timestamp", value);
00862 }
00863
00864 int chat_lines()
00865 {
00866 return lexical_cast_default<int>(preferences::get("chat_lines"), 6);
00867 }
00868
00869 void set_chat_lines(int lines)
00870 {
00871 preferences::set("chat_lines", lines);
00872 }
00873
00874 void set_chat_message_aging(const int aging)
00875 {
00876 preferences::set("chat_message_aging", aging);
00877 }
00878
00879 int chat_message_aging()
00880 {
00881 return lexical_cast_default<int>(preferences::get("chat_message_aging"), 20);
00882 }
00883
00884 bool show_all_units_in_help() {
00885 return preferences::get("show_all_units_in_help", false);
00886 }
00887
00888 void set_show_all_units_in_help(bool value) {
00889 preferences::set("show_all_units_in_help", value);
00890 }
00891
00892 std::set<std::string> &encountered_units() {
00893 return encountered_units_set;
00894 }
00895
00896 std::set<t_translation::t_terrain> &encountered_terrains() {
00897 return encountered_terrains_set;
00898 }
00899
00900 std::string custom_command() {
00901 return preferences::get("custom_command");
00902 }
00903
00904 void set_custom_command(const std::string& command) {
00905 preferences::set("custom_command", command);
00906 }
00907
00908
00909
00910
00911
00912
00913
00914 std::vector<std::string>* get_history(const std::string& id) {
00915 return &history_map[id];
00916 }
00917
00918 bool green_confirm()
00919 {
00920 std::string confirmation = preferences::get("confirm_end_turn");
00921
00922 if (confirmation == "green" || confirmation == "yes")
00923 return true;
00924 return false;
00925 }
00926
00927 bool yellow_confirm()
00928 {
00929 return preferences::get("confirm_end_turn") == "yellow";
00930 }
00931
00932 bool confirm_no_moves()
00933 {
00934
00935 const std::string confirmation = preferences::get("confirm_end_turn");
00936 return confirmation == "no_moves" || confirmation.empty();
00937 }
00938
00939
00940 void encounter_recruitable_units(std::vector<team>& teams){
00941 for (std::vector<team>::iterator help_team_it = teams.begin();
00942 help_team_it != teams.end(); ++help_team_it) {
00943 help_team_it->log_recruitable();
00944 std::copy(help_team_it->recruits().begin(), help_team_it->recruits().end(),
00945 std::inserter(encountered_units_set, encountered_units_set.begin()));
00946 }
00947 }
00948
00949 void encounter_start_units(unit_map& units){
00950 for (unit_map::const_iterator help_unit_it = units.begin();
00951 help_unit_it != units.end(); ++help_unit_it) {
00952 const std::string name = help_unit_it->type_id();
00953 encountered_units_set.insert(name);
00954 }
00955 }
00956
00957 void encounter_recallable_units(std::vector<team>& teams){
00958 foreach(const team& t, teams) {
00959 foreach(const unit& u, t.recall_list()) {
00960 encountered_units_set.insert(u.type_id());
00961 }
00962 }
00963 }
00964
00965 void encounter_map_terrain(gamemap& map){
00966 for (int map_x = 0; map_x < map.w(); ++map_x) {
00967 for (int map_y = 0; map_y < map.h(); ++map_y) {
00968 const t_translation::t_terrain t = map.get_terrain(map_location(map_x, map_y));
00969 preferences::encountered_terrains().insert(t);
00970 const t_translation::t_list& underlaying_list = map.underlying_union_terrain(map_location(map_x, map_y));
00971 for (std::vector<t_translation::t_terrain>::const_iterator ut = underlaying_list.begin(); ut != underlaying_list.end(); ++ut) {
00972 preferences::encountered_terrains().insert(*ut);
00973 };
00974 }
00975 }
00976 }
00977
00978 }