Commit b96c9081 authored by DailyShana's avatar DailyShana

fix attack rollback

parent db6804c9
......@@ -68,8 +68,7 @@ field::field(duel* pduel) {
}
core.pre_field[0] = 0;
core.pre_field[1] = 0;
for (int32 i = 0; i < 7; ++i)
core.opp_mzone[i] = 0;
core.opp_mzone.clear();
core.summoning_card = 0;
core.summon_depth = 0;
core.summon_cancelable = FALSE;
......
......@@ -243,7 +243,7 @@ struct processor {
ptr temp_var[4];
uint32 global_flag;
uint16 pre_field[2];
uint16 opp_mzone[7];
std::set<uint16> opp_mzone;
chain_limit_list chain_limit;
chain_limit_list chain_limit_p;
uint8 chain_solving;
......
......@@ -1347,12 +1347,11 @@ int32 scriptlib::duel_change_attack_target(lua_State *L) {
|| !target && !attacker->is_affected_by_effect(EFFECT_CANNOT_DIRECT_ATTACK)) {
pduel->game_field->core.attack_target = target;
pduel->game_field->core.attack_rollback = FALSE;
pduel->game_field->core.opp_mzone.clear();
for(uint32 i = 0; i < pduel->game_field->player[1 - turnp].list_mzone.size(); ++i) {
card* pcard = pduel->game_field->player[1 - turnp].list_mzone[i];
if(pcard)
pduel->game_field->core.opp_mzone[i] = pcard->fieldid_r;
else
pduel->game_field->core.opp_mzone[i] = 0;
pduel->game_field->core.opp_mzone.insert(pcard->fieldid_r);
}
pduel->game_field->attack_all_target_check();
if(target) {
......
......@@ -3044,12 +3044,11 @@ int32 field::process_battle_command(uint16 step) {
} else
pduel->write_buffer32(0);
core.attack_rollback = FALSE;
core.opp_mzone.clear();
for(uint32 i = 0; i < player[1 - infos.turn_player].list_mzone.size(); ++i) {
card* pcard = player[1 - infos.turn_player].list_mzone[i];
if(pcard)
core.opp_mzone[i] = pcard->fieldid_r;
else
core.opp_mzone[i] = 0;
core.opp_mzone.insert(pcard->fieldid_r);
}
//core.units.begin()->arg1 ---> is rollbacked
if(!core.units.begin()->arg1) {
......@@ -5296,20 +5295,14 @@ int32 field::adjust_step(uint16 step) {
attacker->set_status(STATUS_ATTACK_CANCELED, TRUE);
if(core.attack_rollback)
return FALSE;
std::set<uint16> fidset;
for(uint32 i = 0; i < player[1 - infos.turn_player].list_mzone.size(); ++i) {
card* pcard = player[1 - infos.turn_player].list_mzone[i];
if(pcard) {
if(!core.opp_mzone[i] || core.opp_mzone[i] != pcard->fieldid_r) {
core.attack_rollback = TRUE;
break;
}
} else {
if(core.opp_mzone[i]) {
core.attack_rollback = TRUE;
break;
}
}
if(pcard)
fidset.insert(pcard->fieldid_r);
}
if(fidset != core.opp_mzone)
core.attack_rollback = TRUE;
return FALSE;
}
case 15: {
......
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