Commit b96c9081 authored by DailyShana's avatar DailyShana

fix attack rollback

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