Commit 7c6190ed authored by DailyShana's avatar DailyShana

update attack cancel and attack rollback

parent d85f0da9
...@@ -3091,7 +3091,8 @@ int32 field::process_battle_command(uint16 step) { ...@@ -3091,7 +3091,8 @@ int32 field::process_battle_command(uint16 step) {
return FALSE; return FALSE;
} }
case 9: { case 9: {
if(is_player_affected_by_effect(infos.turn_player, EFFECT_SKIP_BP) || core.attack_rollback) { if(is_player_affected_by_effect(infos.turn_player, EFFECT_SKIP_BP)
|| core.attacker->is_status(STATUS_ATTACK_CANCELED) || core.attack_rollback) {
core.units.begin()->step = 10; core.units.begin()->step = 10;
return FALSE; return FALSE;
} }
...@@ -3122,17 +3123,12 @@ int32 field::process_battle_command(uint16 step) { ...@@ -3122,17 +3123,12 @@ int32 field::process_battle_command(uint16 step) {
core.attacker->set_status(STATUS_ATTACK_CANCELED, TRUE); core.attacker->set_status(STATUS_ATTACK_CANCELED, TRUE);
} }
if(is_player_affected_by_effect(infos.turn_player, EFFECT_SKIP_BP) if(is_player_affected_by_effect(infos.turn_player, EFFECT_SKIP_BP)
|| !core.attacker->is_capable_attack() || core.attacker->is_status(STATUS_ATTACK_CANCELED) || core.attacker->is_status(STATUS_ATTACK_CANCELED)) {
|| core.attacker->current.controler != core.attacker->attack_controler
|| core.attacker->fieldid_r != core.pre_field[0]) {
core.units.begin()->step = 12; core.units.begin()->step = 12;
return FALSE; return FALSE;
} }
uint8 rollback = core.attack_rollback;
if(!confirm_attack_target())
rollback = TRUE;
// go to damage step // go to damage step
if(!rollback) { if(!core.attack_rollback) {
core.attacker->announce_count++; core.attacker->announce_count++;
core.attacker->announced_cards.addcard(core.attack_target); core.attacker->announced_cards.addcard(core.attack_target);
attack_all_target_check(); attack_all_target_check();
...@@ -5323,8 +5319,14 @@ int32 field::adjust_step(uint16 step) { ...@@ -5323,8 +5319,14 @@ int32 field::adjust_step(uint16 step) {
card* attacker = core.attacker; card* attacker = core.attacker;
if(!attacker) if(!attacker)
return FALSE; return FALSE;
if(attacker->is_affected_by_effect(EFFECT_CANNOT_ATTACK)) if(attacker->is_status(STATUS_ATTACK_CANCELED))
return FALSE;
if(!core.attacker->is_capable_attack()
|| core.attacker->current.controler != core.attacker->attack_controler
|| core.attacker->fieldid_r != core.pre_field[0]) {
attacker->set_status(STATUS_ATTACK_CANCELED, TRUE); attacker->set_status(STATUS_ATTACK_CANCELED, TRUE);
return FALSE;
}
if(core.attack_rollback) if(core.attack_rollback)
return FALSE; return FALSE;
std::set<uint16> fidset; std::set<uint16> fidset;
...@@ -5332,7 +5334,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -5332,7 +5334,7 @@ int32 field::adjust_step(uint16 step) {
if(pcard) if(pcard)
fidset.insert(pcard->fieldid_r); fidset.insert(pcard->fieldid_r);
} }
if(fidset != core.opp_mzone) if(fidset != core.opp_mzone || !confirm_attack_target())
core.attack_rollback = TRUE; core.attack_rollback = TRUE;
return FALSE; return FALSE;
} }
......
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