fix bug #15390:
...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:
parent
a63204710e
commit
5fc4765bb5
3 changed files with 70 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
############################################################
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue