From 301e0d5d43b535d8aaff0534ed2064b4e0939be8 Mon Sep 17 00:00:00 2001 From: flix Date: Tue, 24 Sep 2013 02:37:20 +0200 Subject: [PATCH] Fix a bug. --- data/ai/utils/default_config.cfg | 2 +- src/ai/recruitment/recruitment.cpp | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/data/ai/utils/default_config.cfg b/data/ai/utils/default_config.cfg index 9f150270d50..46f05adc5bb 100644 --- a/data/ai/utils/default_config.cfg +++ b/data/ai/utils/default_config.cfg @@ -105,7 +105,7 @@ engine=cpp name=standard_aspect [value] - active=yes + active=2 begin=1.0 end=0.7 spend_all_gold=-1 diff --git a/src/ai/recruitment/recruitment.cpp b/src/ai/recruitment/recruitment.cpp index b0e3e296c71..1330a8da302 100644 --- a/src/ai/recruitment/recruitment.cpp +++ b/src/ai/recruitment/recruitment.cpp @@ -198,7 +198,7 @@ double recruitment::evaluate() { } void recruitment::execute() { - LOG_AI_RECRUITMENT << "\n\n\n------------FLIX RECRUITMENT BEGIN ------------\n\n"; + LOG_AI_RECRUITMENT << "\n\n\n------------AI RECRUITMENT BEGIN---------------\n\n"; LOG_AI_RECRUITMENT << "TURN: " << resources::tod_manager->turn() << " SIDE: " << current_team().side() << "\n"; @@ -338,14 +338,16 @@ void recruitment::execute() { config* job = NULL; do { // Recruitment loop recruit_situation_change_observer_.reset_gamestate_changed(); + + // Check if we may want to save gold by not recruiting. update_state(); - - // Retrieve from aspect. - bool save_gold_active = get_recruitment_save_gold()["active"].to_bool(true); - + int save_gold_turn = get_recruitment_save_gold()["active"].to_int(2); // From aspect. + int current_turn = resources::tod_manager->turn(); + bool save_gold_active = save_gold_turn > 0 && save_gold_turn <= current_turn; if (state_ == SAVE_GOLD && save_gold_active) { break; } + job = get_most_important_job(); if (!job) { LOG_AI_RECRUITMENT << "All recruitment jobs (recruitment_instructions) done.\n"; @@ -391,7 +393,7 @@ void recruitment::execute() { } // Update the current job. - if (!job->operator[]("total").to_bool()) { + if (!job->operator[]("total").to_bool(false)) { job->operator[]("number") = job->operator[]("number").to_int(99999) - 1; } @@ -1467,8 +1469,8 @@ double recruitment::get_estimated_village_gain() const { */ double recruitment::get_unit_ratio() const { const unit_map& units = *resources::units; - double own_total_value; - double enemy_total_value; + double own_total_value = 0.; + double enemy_total_value = 0.; BOOST_FOREACH(const unit& unit, units) { if (unit.incapacitated() || unit.total_movement() <= 0) { continue; @@ -1480,6 +1482,9 @@ double recruitment::get_unit_ratio() const { own_total_value += value; } } + if (enemy_total_value == 0) { + return 999.; // Should never happen + } return own_total_value / enemy_total_value; }