Commit 1c9b1071 authored by salix5's avatar salix5

attack all

parent 378c8aab
...@@ -1694,26 +1694,31 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack) ...@@ -1694,26 +1694,31 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack)
atype = 4; atype = 4;
pv = &player[1 - p].list_mzone; pv = &player[1 - p].list_mzone;
} }
if(pcard->attack_all_target && (peffect = pcard->is_affected_by_effect(EFFECT_ATTACK_ALL))) { // The system only check the general case (never attacked player), and the script should check specific condition.
if(pcard->battled_cards.size()) { if(pcard->announced_cards.size() && (peffect = pcard->is_affected_by_effect(EFFECT_ATTACK_ALL))
for(auto cit = pv->begin(); cit != pv->end(); ++cit) { && pcard->announced_cards.find(0) == pcard->announced_cards.end() && pcard->battled_cards.find(0) == pcard->battled_cards.end()) {
atarget = *cit; for(auto cit = pv->begin(); cit != pv->end(); ++cit) {
if(!atarget) atarget = *cit;
continue; if(!atarget)
pduel->lua->add_param(atarget, PARAM_TYPE_CARD); continue;
if(!peffect->check_value_condition(1)) // valid target
continue; pduel->lua->add_param(atarget, PARAM_TYPE_CARD);
auto it = pcard->battled_cards.find(atarget->fieldid_r); if(!peffect->check_value_condition(1))
if(it != pcard->battled_cards.end()) { continue;
if(it->second.second >= (uint32)peffect->get_value(atarget)) // enough effect count
continue; auto it = pcard->announced_cards.find(atarget->fieldid_r);
} if(it != pcard->announced_cards.end() && (int32)it->second.second >= peffect->get_value(atarget)) {
if(atype == 4 && !atarget->is_capable_be_battle_target(pcard)) continue;
continue;
v->push_back(atarget);
} }
return atype; it = pcard->battled_cards.find(atarget->fieldid_r);
if(it != pcard->battled_cards.end() && (int32)it->second.second >= peffect->get_value(atarget)) {
continue;
}
if(atype == 4 && !atarget->is_capable_be_battle_target(pcard))
continue;
v->push_back(atarget);
} }
return atype;
} else if(chain_attack && core.chain_attack_target) { } else if(chain_attack && core.chain_attack_target) {
if(std::find(pv->begin(), pv->end(), core.chain_attack_target) != pv->end() if(std::find(pv->begin(), pv->end(), core.chain_attack_target) != pv->end()
&& (atype != 4 || core.chain_attack_target->is_capable_be_battle_target(pcard))){ && (atype != 4 || core.chain_attack_target->is_capable_be_battle_target(pcard))){
......
...@@ -2807,7 +2807,10 @@ int32 field::process_battle_command(uint16 step) { ...@@ -2807,7 +2807,10 @@ int32 field::process_battle_command(uint16 step) {
if(tmp > extrac) if(tmp > extrac)
extrac = tmp; extrac = tmp;
} }
if(!pcard->is_affected_by_effect(EFFECT_ATTACK_ALL) && !chain_attack && pcard->announce_count >= extrac + 1) if(!(pcard->announced_cards.size() && pcard->is_affected_by_effect(EFFECT_ATTACK_ALL) && pcard->announced_cards.find(0) == pcard->announced_cards.end()
&& pcard->battled_cards.find(0) == pcard->battled_cards.end())
&& !chain_attack
&& pcard->announce_count >= extrac + 1)
continue; continue;
core.select_cards.clear(); core.select_cards.clear();
get_attack_target(pcard, &core.select_cards, chain_attack); get_attack_target(pcard, &core.select_cards, chain_attack);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment