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