Commit 9fb33573 authored by salix5's avatar salix5 Committed by GitHub

update EFFECT_INDESTRUCTABLE_COUNT (#498)

monsters with EFFECT_INDESTRUCTABLE_COUNT cannot apply EFFECT_DESTROY_REPLACE
parent feeaf9b3
...@@ -252,6 +252,7 @@ struct processor { ...@@ -252,6 +252,7 @@ struct processor {
card_set operated_set; card_set operated_set;
card_set discarded_set; card_set discarded_set;
card_set destroy_canceled; card_set destroy_canceled;
card_set indestructable_count_set;
card_set delayed_enable_set; card_set delayed_enable_set;
card_set set_group_pre_set; card_set set_group_pre_set;
card_set set_group_set; card_set set_group_set;
......
...@@ -3402,6 +3402,7 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3402,6 +3402,7 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3
continue; continue;
} }
} }
// monsters with EFFECT_INDESTRUCTABLE_COUNT cannot apply EFFECT_DESTROY_REPLACE
eset.clear(); eset.clear();
pcard->filter_effect(EFFECT_INDESTRUCTABLE_COUNT, &eset); pcard->filter_effect(EFFECT_INDESTRUCTABLE_COUNT, &eset);
if (eset.size()) { if (eset.size()) {
...@@ -3423,8 +3424,8 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3423,8 +3424,8 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3
pduel->lua->add_param(pcard->current.reason_player, PARAM_TYPE_INT); pduel->lua->add_param(pcard->current.reason_player, PARAM_TYPE_INT);
int32 ct; int32 ct;
if(ct = eset[i]->get_value(3)) { if(ct = eset[i]->get_value(3)) {
auto it = pcard->indestructable_effects.emplace(eset[i]->id, 0); auto ret = pcard->indestructable_effects.emplace(eset[i]->id, 0);
if(++it.first->second <= ct) { if(++ret.first->second <= ct) {
indestructable_effect_set.insert(eset[i]); indestructable_effect_set.insert(eset[i]);
is_destructable = false; is_destructable = false;
} }
...@@ -3432,7 +3433,7 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3432,7 +3433,7 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3
} }
} }
if(!is_destructable) { if(!is_destructable) {
indestructable_set.insert(pcard); core.indestructable_count_set.insert(pcard);
continue; continue;
} }
} }
...@@ -3465,6 +3466,12 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3465,6 +3466,12 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3
pcard->set_status(STATUS_DESTROY_CONFIRMED, FALSE); pcard->set_status(STATUS_DESTROY_CONFIRMED, FALSE);
targets->container.erase(pcard); targets->container.erase(pcard);
} }
for (auto& pcard : core.indestructable_count_set) {
pcard->current.reason = pcard->temp.reason;
pcard->current.reason_effect = pcard->temp.reason_effect;
pcard->current.reason_player = pcard->temp.reason_player;
targets->container.erase(pcard);
}
for (auto& rep : extra) { for (auto& rep : extra) {
if(targets->container.count(rep) == 0) { if(targets->container.count(rep) == 0) {
rep->temp.reason = rep->current.reason; rep->temp.reason = rep->current.reason;
...@@ -3497,6 +3504,9 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3497,6 +3504,9 @@ int32 field::destroy(uint16 step, group * targets, effect * reason_effect, uint3
for (auto& pcard : core.destroy_canceled) for (auto& pcard : core.destroy_canceled)
pcard->set_status(STATUS_DESTROY_CONFIRMED, FALSE); pcard->set_status(STATUS_DESTROY_CONFIRMED, FALSE);
core.destroy_canceled.clear(); core.destroy_canceled.clear();
for (auto& pcard : core.indestructable_count_set)
pcard->set_status(STATUS_DESTROY_CONFIRMED, FALSE);
core.indestructable_count_set.clear();
return FALSE; return FALSE;
} }
case 3: { case 3: {
......
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