Commit 314fe91f authored by DailyShana's avatar DailyShana

replace self destroy only once

https://github.com/Fluorohydride/ygopro/issues/2215#issuecomment-502517306
close Fluorohydride/ygopro#2215
parent ea305c1b
......@@ -57,6 +57,11 @@ int32 effect::is_disable_related() {
return TRUE;
return FALSE;
}
int32 effect::is_self_destroy_related() {
if(code == EFFECT_UNIQUE_CHECK || code == EFFECT_SELF_DESTROY || code == EFFECT_SELF_TOGRAVE)
return TRUE;
return FALSE;
}
int32 effect::is_can_be_forbidden() {
uint32 ctr = code & 0xf0000;
if (is_flag(EFFECT_FLAG_CANNOT_DISABLE) && !is_flag(EFFECT_FLAG_CANNOT_NEGATE))
......
......@@ -66,6 +66,7 @@ public:
~effect() = default;
int32 is_disable_related();
int32 is_self_destroy_related();
int32 is_can_be_forbidden();
int32 is_available();
int32 check_count_limit(uint8 playerid);
......
......@@ -4688,12 +4688,14 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe
}
case 1: {
if (returns.ivalue[0]) {
targets->container.erase(target);
target->current.reason = target->temp.reason;
target->current.reason_effect = target->temp.reason_effect;
target->current.reason_player = target->temp.reason_player;
if(is_destroy)
core.destroy_canceled.insert(target);
if(!target->current.reason_effect->is_self_destroy_related()) {
targets->container.erase(target);
target->current.reason = target->temp.reason;
target->current.reason_effect = target->temp.reason_effect;
target->current.reason_player = target->temp.reason_player;
if(is_destroy)
core.destroy_canceled.insert(target);
}
replace_effect->dec_count(replace_effect->get_handler_player());
} else
core.units.begin()->step = 2;
......@@ -4752,7 +4754,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe
if (returns.ivalue[0]) {
for (auto cit = targets->container.begin(); cit != targets->container.end();) {
auto rm = cit++;
if (replace_effect->get_value(*rm)) {
if (replace_effect->get_value(*rm) && !(*rm)->current.reason_effect->is_self_destroy_related()) {
(*rm)->current.reason = (*rm)->temp.reason;
(*rm)->current.reason_effect = (*rm)->temp.reason_effect;
(*rm)->current.reason_player = (*rm)->temp.reason_player;
......
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