38 namespace default_recruitment {
62 : leader(leader), ratio_score(1.0), recruit_count(0), in_danger(false) { }
65 for (
const score_map::value_type& entry : scores) {
71 const double sum = get_score_sum();
76 for (
const score_map::value_type& entry : scores) {
77 normalized[entry.first] = entry.second / sum;
81 std::string to_string()
const;
89 a_defense(a_def), b_defense(b_def), value(v) {
92 return value < o.
value;
101 recruit_job(std::vector<std::string>
t, std::string L, std::string
id,
int n,
int i,
bool s,
bool p,
bool b)
102 : types(t), leader(L), id(id)
103 , number(n), importance(i)
104 , total(s), pattern(p), blocker(b)
108 if(number > 0 && number < 99999) {
109 cfg[
"number"] = number;
111 cfg[
"importance"] = importance;
112 cfg[
"total"] = total;
113 cfg[
"pattern"] = pattern;
114 cfg[
"blocker"] = blocker;
115 if(!leader.empty()) {
116 cfg[
"leader_id"] = leader;
127 std::string
get_name()
const {
return "recruit_job";}
136 : types(t), id(id), limit(lim)
150 std::string
get_name()
const {
return "recruit_limit";}
155 std::vector<std::shared_ptr<recruit_job>>
jobs_;
156 std::vector<std::shared_ptr<recruit_limit>>
limits_;
159 void recalculate()
const;
160 void create_job(std::vector<std::shared_ptr<recruit_job>> &jobs,
const config &job);
161 void create_limit(std::vector<std::shared_ptr<recruit_limit>> &limits,
const config &lim);
164 typedef std::map<std::string, std::set<cached_combat_value>>
table_row;
171 virtual double evaluate();
172 virtual void execute();
179 const std::string* get_appropriate_recall(
const std::string& type,
180 const data& leader_data)
const;
181 data* get_best_leader_from_ratio_scores(std::vector<data>& leader_data,
183 const std::string get_best_recruit_from_scores(
const data& leader_data,
187 void compare_cost_maps_and_update_important_hexes(
190 double get_average_defense(
const std::string&
unit_type)
const;
192 void show_important_hexes()
const;
193 void update_average_lawful_bonus();
194 void update_average_local_cost();
195 void update_important_hexes();
198 double compare_unit_types(
const std::string&
a,
const std::string&
b);
199 void do_combat_analysis(std::vector<data>* leader_data);
200 const double* get_cached_combat_value(
const std::string& a,
const std::string& b,
201 double a_defense,
double b_defense);
202 void simulate_attack(
203 const unit_type*
const attacker,
const unit_type*
const defender,
204 double attacker_defense,
double defender_defense,
205 double* damage_to_attacker,
double* damage_to_defender)
const;
208 config* get_most_important_job();
209 const std::string get_random_pattern_type_if_exists(
const data& leader_data,
211 void integrate_recruitment_pattern_in_recruitment_instructions();
212 bool leader_matches_job(
const data& leader_data,
const config* job)
const;
213 bool limit_ok(
const std::string& recruit)
const;
214 bool recruit_matches_job(
const std::string& recruit,
const config* job)
const;
215 bool recruit_matches_type(
const std::string& recruit,
const std::string& type)
const;
216 bool recruit_matches_types(
const std::string& recruit,
217 const std::vector<std::string>& types)
const;
218 bool remove_job_if_no_blocker(
config* job);
221 double get_estimated_income(
int turns)
const;
222 double get_estimated_unit_gain()
const;
223 double get_estimated_village_gain()
const;
224 double get_unit_ratio()
const;
228 void do_randomness(std::vector<data>* leader_data)
const;
229 void do_similarity_penalty(std::vector<data>* leader_data)
const;
231 void handle_recruitment_more(std::vector<data>* leader_data)
const;
232 bool is_enemy_in_radius(
const map_location& loc,
int radius)
const;
233 void update_own_units_count();
234 void update_scouts_wanted();
242 void handle_generic_event(
const std::string& event);
244 bool recruit_list_changed();
245 void set_recruit_list_changed(
bool changed);
246 int gamestate_changed();
247 void reset_gamestate_changed();
std::shared_ptr< action_result > action_result_ptr
std::vector< std::string > types
recruit_limit(std::vector< std::string > t, std::string id, int lim)
count_map own_units_count_
bool recruit_list_changed_
cached_combat_value(double a_def, double b_def, double v)
terrain_count_map important_terrain_
std::string join(const T &v, const std::string &s=",")
Generates a new string joining container items in a list.
std::string get_id() const
double get_score_sum() const
std::map< map_location, double > average_local_cost_
bool recall_unit(const std::string &id, team ¤t_team, const map_location &loc, const map_location &from, map_location::DIRECTION facing, bool show, bool use_undo)
Recalls the unit with the indicated ID for the provided team.
std::vector< std::shared_ptr< recruit_job > > jobs_
std::map< std::string, int > count_map
recruit_situation_change_observer recruit_situation_change_observer_
A single unit type that the player may recruit.
std::set< map_location > important_hexes_
int average_lawful_bonus_
std::string get_id() const
std::shared_ptr< const unit > unit_const_ptr
A small explanation about what's going on here: Each action has access to two game_info objects First...
cache_table combat_cache_
score_map get_normalized_scores() const
std::vector< std::string > types
Encapsulates the map of the game.
std::string id
Text to match against addon_info.tags()
data(const unit_map::const_iterator leader)
static map_location::DIRECTION s
Structure which uses find_routes() to build a cost map This maps each hex to a the movements a unit w...
std::map< std::string, std::set< cached_combat_value > > table_row
std::vector< std::shared_ptr< recruit_limit > > limits_
std::map< t_translation::terrain_code, int > terrain_count_map
std::string get_name() const
std::string get_engine() const
recruit_job(std::vector< std::string > t, std::string L, std::string id, int n, int i, bool s, bool p, bool b)
config recruitment_instructions_
std::string get_engine() const
unit_map::const_iterator leader
std::map< std::string, table_row > cache_table
bool operator<(const cached_combat_value &o) const
A config object defines a single node in a WML file, with access to child nodes.
int recruitment_instructions_turn_
static map_location::DIRECTION n
std::map< std::string, double > score_map
std::set< std::string > recruits
int own_units_in_combat_counter_
std::string get_name() const
candidate action framework
std::map< std::size_t, int > cheapest_unit_costs_