Commit f16a258d authored by DailyShana's avatar DailyShana

update get_attack_target

parent 56ea6cf2
......@@ -2306,20 +2306,10 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack,
if(val > extra_count_m)
extra_count_m = val;
}
bool dir = true;
if(pcard->announce_count < extra_count + 1)
dir = true;
else if(chain_attack && !core.chain_attack_target)
dir = true;
else if(extra_count_m && pcard->announce_count < extra_count_m + 1
&& pcard->announced_cards.findcard(0) == 0
&& pcard->battled_cards.findcard(0) == 0)
dir = false;
else {
if(!chain_attack && pcard->announce_count > extra_count
&& (!extra_count_m || pcard->announce_count > extra_count_m || pcard->announced_cards.findcard(0))) {
effect* peffect;
if((peffect = pcard->is_affected_by_effect(EFFECT_ATTACK_ALL)) && pcard->attack_all_target
&& pcard->announced_cards.findcard(0) == 0
&& pcard->battled_cards.findcard(0) == 0) {
if((peffect = pcard->is_affected_by_effect(EFFECT_ATTACK_ALL)) && pcard->attack_all_target) {
for(auto cit = pv->begin(); cit != pv->end(); ++cit) {
card* atarget = *cit;
if(!atarget)
......@@ -2329,33 +2319,31 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack,
continue;
if(pcard->announced_cards.findcard(atarget) >= (uint32)peffect->get_value(atarget))
continue;
if(pcard->battled_cards.findcard(atarget) >= (uint32)peffect->get_value(atarget))
if(atype >= 2 && atarget->is_affected_by_effect(EFFECT_IGNORE_BATTLE_TARGET))
continue;
if(select_target && atype == 4 && !atarget->is_capable_be_battle_target(pcard))
if(select_target && atype == 4) {
if(atarget->is_affected_by_effect(EFFECT_CANNOT_BE_BATTLE_TARGET, pcard))
continue;
if(pcard->is_affected_by_effect(EFFECT_CANNOT_SELECT_BATTLE_TARGET, atarget))
continue;
v->push_back(atarget);
}
}
if(chain_attack && core.chain_attack_target
&& std::find(pv->begin(), pv->end(), core.chain_attack_target) != pv->end()
&& (!select_target || atype != 4 || core.chain_attack_target->is_capable_be_battle_target(pcard))) {
v->push_back(core.chain_attack_target);
v->push_back(atarget);
}
return atype;
}
if(atype <= 3) {
*v = *pv;
return atype;
}
//chain attack or announce count check passed
uint32 mcount = 0;
for(auto cit = pv->begin(); cit != pv->end(); ++cit) {
card* atarget = *cit;
if(!atarget)
continue;
if(atarget->is_affected_by_effect(EFFECT_IGNORE_BATTLE_TARGET))
if(atype >= 2 && atarget->is_affected_by_effect(EFFECT_IGNORE_BATTLE_TARGET))
continue;
mcount++;
if(select_target) {
if(chain_attack && core.chain_attack_target && atarget != core.chain_attack_target)
continue;
if(select_target && atype == 4) {
if(atarget->is_affected_by_effect(EFFECT_CANNOT_BE_BATTLE_TARGET, pcard))
continue;
if(pcard->is_affected_by_effect(EFFECT_CANNOT_SELECT_BATTLE_TARGET, atarget))
......@@ -2363,8 +2351,12 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack,
}
v->push_back(atarget);
}
if(atype <= 3)
return atype;
if((mcount == 0 || pcard->is_affected_by_effect(EFFECT_DIRECT_ATTACK) || core.attack_player)
&& !pcard->is_affected_by_effect(EFFECT_CANNOT_DIRECT_ATTACK) && dir)
&& !pcard->is_affected_by_effect(EFFECT_CANNOT_DIRECT_ATTACK)
&& !(extra_count_m && pcard->announce_count > extra_count)
&& !(chain_attack && core.chain_attack_target))
pcard->direct_attackable = 1;
return atype;
}
......
......@@ -3680,6 +3680,7 @@ int32 field::process_damage_step(uint16 step, uint32 new_attack) {
core.battled_count[infos.turn_player]++;
check_card_counter(core.attacker, 5, infos.turn_player);
}
core.attacker->announced_cards.addcard(core.attack_target);
attack_all_target_check();
pduel->write_buffer8(MSG_ATTACK);
pduel->write_buffer32(core.attacker->get_info_location());
......
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