...add a try_delete action to modify_ai which has 'delete if exists,
don't complain if not exists' semantics
This commit is contained in:
Iurii Chernyi 2010-03-09 19:39:15 +00:00
parent a63204710e
commit 5fc4765bb5
3 changed files with 70 additions and 7 deletions

View file

@ -246,9 +246,9 @@
#define CLEAN_AI SIDE
{MODIFY_AI_DELETE_GOAL {SIDE} *}
{MODIFY_AI_DELETE_STAGE {SIDE} retreat_to_olurfs_land}
{MODIFY_AI_DELETE_ASPECT {SIDE} avoid stay_in_own_land}
{MODIFY_AI_DELETE_ASPECT {SIDE} recruitment always}
{MODIFY_AI_TRY_DELETE_STAGE {SIDE} retreat_to_olurfs_land}
{MODIFY_AI_TRY_DELETE_ASPECT {SIDE} avoid stay_in_own_land}
{MODIFY_AI_TRY_DELETE_ASPECT {SIDE} recruitment always}
#enddef
#define ADD_AVOID_STAY_AT_OLURFS_LAND

View file

@ -106,6 +106,63 @@
[/modify_ai]
#enddef
############################################################
# MODIFY_AI - TRY_DELETE
############################################################
#define MODIFY_AI_TRY_DELETE_ASPECT SIDE ASPECT_ID FACET_ID
# modify ai, delete facet from aspect
#
# example: {MODIFY_AI_TRY_DELETE_ASPECT 1 aggression night}
[modify_ai]
side={SIDE}
action=try_delete
path=aspect[{ASPECT_ID}].facet[{FACET_ID}]
[/modify_ai]
#enddef
#define MODIFY_AI_TRY_DELETE_STAGE SIDE STAGE_ID
# modify ai, delete a stage
#
# example: {MODIFY_AI_TRY_DELETE_STAGE 1 fallback}
# example: {MODIFY_AI_TRY_DELETE_STAGE 1 3}
[modify_ai]
side={SIDE}
action=try_delete
path=stage[{STAGE_ID}]
[/modify_ai]
#enddef
#define MODIFY_AI_TRY_DELETE_GOAL SIDE GOAL_ID
# modify ai, delete a goal
#
# example: {MODIFY_AI_TRY_DELETE_GOAL 1 kill_undead}
# example: {MODIFY_AI_TRY_DELETE_GOAL 2 *}
# example: {MODIFY_AI_TRY_DELETE_GOAL 3 0}
[modify_ai]
side={SIDE}
action=try_delete
path=goal[{GOAL_ID}]
[/modify_ai]
#enddef
#define MODIFY_AI_TRY_DELETE_CANDIDATE_ACTION SIDE STAGE_ID CANDIDATE_ACTION_ID
# modify ai, delete candidate action from a stage
#
# example: {MODIFY_AI_TRY_DELETE_CANDIDATE_ACTION 1 special_poisoning_formula}
# example: {MODIFY_AI_TRY_DELETE_CANDIDATE_ACTION 1 0}
[modify_ai]
side={SIDE}
action=try_delete
path=stage[{STAGE_ID}].candidate_action[{CANDIDATE_ACTION_ID}]
[/modify_ai]
#enddef
############################################################
# ASPECTS - DECLARATION
############################################################

View file

@ -165,14 +165,20 @@ void holder::modify_ai(const config &cfg)
res = component_manager::change_component(&*this->ai_,cfg["path"],cfg);
} else if (act == "delete") {
res = component_manager::delete_component(&*this->ai_,cfg["path"]);
} else if (act == "try_delete") {
res = component_manager::delete_component(&*this->ai_,cfg["path"]);
if (!res) {
LOG_AI_MOD << "[modify_ai] "<<act<<" failed, ignoring because it's a try_delete"<< std::endl;
res = true;
}
} else {
ERR_AI_MOD << "modify_ai tag has invalid 'action' attribute " << std::endl;
ERR_AI_MOD << "modify_ai tag has invalid 'action' attribute " << act << std::endl;
}
DBG_AI_MOD << "side "<< side_ << " after [modify_ai]"<<std::endl << to_config() << std::endl;
DBG_AI_MOD << "side "<< side_ << " after [modify_ai]"<<act<<std::endl << to_config() << std::endl;
if (!res) {
WRN_AI_MOD << "[modify_ai] failed"<< std::endl;
LOG_AI_MOD << "[modify_ai] "<<act<<" failed"<< std::endl;
} else {
LOG_AI_MOD << "[modify_ai] success"<< std::endl;
LOG_AI_MOD << "[modify_ai] "<<act<<" success"<< std::endl;
}
}