From c323cfa7fa4f2dd9b99e1c025b86d60df0a8e335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Rosen?= Date: Wed, 27 Dec 2006 13:39:18 +0000 Subject: [PATCH] fix team translation in mp game, thx to coren --- changelog | 1 + src/game_events.cpp | 4 +++- src/multiplayer_connect.cpp | 15 +++++++++++++-- src/multiplayer_connect.hpp | 1 + src/multiplayer_wait.cpp | 2 +- src/team.cpp | 22 +++++++++++++++++++++- src/team.hpp | 5 ++++- src/unit.cpp | 6 ++++-- 8 files changed, 48 insertions(+), 8 deletions(-) diff --git a/changelog b/changelog index 5bb1a62c381..b336444ab35 100644 --- a/changelog +++ b/changelog @@ -27,6 +27,7 @@ Version 1.3-svn: * game management * client now tells the server if a game ended in victory or defeat * configurable castle size for random map generator (patch #598, FR #3232) + * team names translation now supported * scenarios * scenarios can set faction, recruit, leader, and some other initial settings previously ignored in multiplayer diff --git a/src/game_events.cpp b/src/game_events.cpp index fd050b98718..7bce95dc92a 100644 --- a/src/game_events.cpp +++ b/src/game_events.cpp @@ -591,6 +591,7 @@ bool event_handler::handle_event_command(const queued_event& event_info, std::string side = cfg["side"]; std::string income = cfg["income"]; std::string team_name = cfg["team_name"]; + std::string user_team_name = cfg["user_team_name"]; std::string gold = cfg["gold"]; wassert(state_of_game != NULL); side = utils::interpolate_variables_into_string(side, *state_of_game); @@ -604,7 +605,8 @@ bool event_handler::handle_event_command(const queued_event& event_info, std::cerr << "modifying team: " << team_index << "\n"; if(!team_name.empty()) { std::cerr << "change team to team_name '" << team_name << "'\n"; - (*teams)[team_index].change_team(team_name); + (*teams)[team_index].change_team(team_name, + user_team_name); } if(!income.empty()) { diff --git a/src/multiplayer_connect.cpp b/src/multiplayer_connect.cpp index 4199ea02bd7..478e63e25cb 100644 --- a/src/multiplayer_connect.cpp +++ b/src/multiplayer_connect.cpp @@ -531,6 +531,7 @@ config connect::side::get_config() const } // res["team"] = lexical_cast(team_); res["team_name"] = parent_->team_names_[team_]; + res["user_team_name"] = parent_->user_team_names_[team_]; res["colour"] = lexical_cast(colour_ + 1); res["gold"] = lexical_cast(gold_); res["income"] = lexical_cast(income_); @@ -577,6 +578,7 @@ config connect::side::get_config() const trimmed["controller"] = ""; trimmed["description"] = ""; trimmed["team_name"] = ""; + trimmed["user_team_name"] = ""; trimmed["colour"] = ""; trimmed["gold"] = ""; trimmed["income"] = ""; @@ -1153,14 +1155,21 @@ void connect::lists_init() for(sd = sides.first; sd != sides.second; ++sd) { const int side_num = sd - sides.first + 1; t_string& team_name = (**sd)["team_name"]; + t_string& user_team_name = (**sd)["user_team_name"]; if(team_name.empty()) team_name = lexical_cast(side_num); + if(user_team_name.empty()) + { + user_team_name = team_name; + } + std::vector::const_iterator itor = std::find(team_names_.begin(), team_names_.end(), team_name); if(itor == team_names_.end()) { team_names_.push_back(team_name); - player_teams_.push_back(team_name.str()); + user_team_names_.push_back(user_team_name); + player_teams_.push_back(user_team_name.str()); } } } else { @@ -1171,16 +1180,18 @@ void connect::lists_init() if(team_name.empty()) team_name = side_num; - + std::vector::const_iterator itor = std::find(team_names.begin(), team_names.end(), team_name); if(itor == team_names.end()) { team_names.push_back(team_name); + user_team_names_.push_back(team_name); team_name = lexical_cast(team_names.size()); } else { team_name = lexical_cast(itor - team_names.begin() + 1); } team_names_.push_back(side_num); + user_team_names_.push_back(side_num); player_teams_.push_back(team_prefix_ + side_num); } } diff --git a/src/multiplayer_connect.hpp b/src/multiplayer_connect.hpp index fb3ed54e34a..90c99071160 100644 --- a/src/multiplayer_connect.hpp +++ b/src/multiplayer_connect.hpp @@ -221,6 +221,7 @@ private: // team_name list and "Team" prefix std::vector team_names_; + std::vector user_team_names_; const std::string team_prefix_; side_list sides_; diff --git a/src/multiplayer_wait.cpp b/src/multiplayer_wait.cpp index d28371da271..190bb4309cc 100644 --- a/src/multiplayer_wait.cpp +++ b/src/multiplayer_wait.cpp @@ -439,7 +439,7 @@ void wait::generate_menu() str << sd["income"] << _(")"); } - str << COLUMN_SEPARATOR << sd["team_name"]; + str << COLUMN_SEPARATOR << sd["user_team_name"]; str << COLUMN_SEPARATOR << get_colour_string(lexical_cast_default(sd["colour"], 0) - 1); details.push_back(str.str()); } diff --git a/src/team.cpp b/src/team.cpp index 03b756d196a..09fdf992768 100644 --- a/src/team.cpp +++ b/src/team.cpp @@ -94,9 +94,14 @@ team::team_info::team_info(const config& cfg) income = cfg["income"]; name = cfg["name"]; team_name = cfg["team_name"]; + user_team_name = cfg["user_team_name"]; if(team_name.empty()) { team_name = cfg["side"]; } + + if(user_team_name.empty()) { + user_team_name = team_name; + } save_id = cfg["save_id"]; if(save_id.empty()) { @@ -260,6 +265,7 @@ void team::team_info::write(config& cfg) const cfg["income"] = income; cfg["name"] = name; cfg["team_name"] = team_name; + cfg["user_team_name"] = team_name; cfg["save_id"] = save_id; cfg["current_player"] = current_player; cfg["flag"] = flag; @@ -600,9 +606,23 @@ const std::string& team::team_name() const return info_.team_name; } -void team::change_team(const std::string& name) +const std::string& team::user_team_name() const +{ + return info_.user_team_name; +} + +void team::change_team(const std::string& name, + const std::string& user_name) { info_.team_name = name; + if (!user_name.empty()) + { + info_.user_team_name = user_name; + } + else + { + info_.user_team_name = name; + } //reset the cache of allies for all teams if(teams != NULL) { diff --git a/src/team.hpp b/src/team.hpp index 0b975ca57f0..7d5bfb07b28 100644 --- a/src/team.hpp +++ b/src/team.hpp @@ -73,6 +73,7 @@ public: std::vector recruitment_pattern; std::vector enemies; std::string team_name; + std::string user_team_name; std::string save_id; std::string current_player; std::string countdown_time; @@ -185,7 +186,9 @@ public: void make_ai(); const std::string& team_name() const; - void change_team(const std::string& name); + const std::string& user_team_name() const; + void change_team(const std::string& name, + const std::string& user_name); const std::string& flag() const; diff --git a/src/unit.cpp b/src/unit.cpp index 1f2bbd3da4f..8397cb1ad07 100644 --- a/src/unit.cpp +++ b/src/unit.cpp @@ -3331,13 +3331,15 @@ team_data calculate_team_data(const team& tm, int side, const unit_map& units) std::string get_team_name(unsigned int side, const unit_map& units) { - for(unit_map::const_iterator i = units.begin(); i != units.end(); ++i) { + wassert(false); // deprecated code + return team_name(side, units); +/* for(unit_map::const_iterator i = units.begin(); i != units.end(); ++i) { if(i->second.can_recruit() && i->second.side() == side) { return i->second.description(); } } - return "-"; + return "-";*/ } temporary_unit_placer::temporary_unit_placer(unit_map& m, const gamemap::location& loc, const unit& u)