Commit d26721b3 authored by DailyShana's avatar DailyShana

fix

parent 2d7f3eb7
......@@ -1272,7 +1272,7 @@ int32 card::refresh_disable_status() {
}
uint8 card::refresh_control_status() {
uint8 final = owner;
if(pduel->game_field->core.remove_brainwashing)
if(pduel->game_field->core.remove_brainwashing && is_affected_by_effect(EFFECT_REMOVE_BRAINWASHING))
return final;
effect_set eset;
filter_effect(EFFECT_SET_CONTROL, &eset);
......@@ -1473,6 +1473,17 @@ void card::filter_effect(int32 code, effect_set* eset, uint8 sort) {
if(sort)
eset->sort();
}
void card::filter_single_effect(int32 code, effect_set* eset, uint8 sort) {
effect* peffect;
auto rg = single_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first) {
peffect = rg.first->second;
if (peffect->is_available() && !(peffect->flag & EFFECT_FLAG_SINGLE_RANGE))
eset->add_item(peffect);
}
if(sort)
eset->sort();
}
void card::filter_single_continuous_effect(int32 code, effect_set* eset, uint8 sort) {
auto rg = single_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first)
......
......@@ -199,6 +199,7 @@ public:
void cancel_card_target(card* pcard);
void filter_effect(int32 code, effect_set* eset, uint8 sort = TRUE);
void filter_single_effect(int32 code, effect_set* eset, uint8 sort = TRUE);
void filter_single_continuous_effect(int32 code, effect_set* eset, uint8 sort = TRUE);
void filter_immune_effect();
void filter_disable_related_cards();
......
......@@ -371,7 +371,7 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc
add_card(playerid, pcard, location, sequence);
}
void field::set_control(card* pcard, uint8 playerid, uint16 reset_phase, uint8 reset_count) {
if(core.remove_brainwashing || pcard->refresh_control_status() == playerid)
if((core.remove_brainwashing && pcard->is_affected_by_effect(EFFECT_REMOVE_BRAINWASHING)) || pcard->refresh_control_status() == playerid)
return;
effect* peffect = pduel->new_effect();
if(core.reason_effect)
......
......@@ -5221,6 +5221,34 @@ int32 field::adjust_step(uint16 step) {
return FALSE;
}
case 4: {
//remove brainwashing
effect_set eset;
uint32 res = 0;
if(core.global_flag & GLOBALFLAG_BRAINWASHING_CHECK) {
filter_field_effect(EFFECT_REMOVE_BRAINWASHING, &eset, FALSE);
res = eset.size() ? TRUE : FALSE;
if(res) {
card* pcard;
effect_set ctrleff;
for(uint8 p = 0; p < 2; ++p) {
for(uint8 i = 0; i < 5; ++i) {
pcard = player[p].list_mzone[i];
if(pcard && pcard->is_affected_by_effect(EFFECT_REMOVE_BRAINWASHING)) {
ctrleff.clear();
pcard->filter_single_effect(EFFECT_SET_CONTROL, &ctrleff, FALSE);
for(int32 i = 0; i < ctrleff.size(); ++i) {
pcard->remove_effect(ctrleff[i]);
core.re_adjust = TRUE;
}
}
}
}
}
core.remove_brainwashing = res;
}
return FALSE;
}
case 5: {
//1-4 control
card* pcard;
uint8 cur, ref;
......@@ -5245,9 +5273,6 @@ int32 field::adjust_step(uint16 step) {
core.units.begin()->step = 7;
return FALSE;
}
case 5: {
return FALSE;
}
case 6: {
return FALSE;
}
......@@ -5346,7 +5371,7 @@ int32 field::adjust_step(uint16 step) {
return FALSE;
}
case 13: {
//reverse_deck && remove brainwashing
//reverse_deck
effect_set eset;
uint32 res = 0;
if(core.global_flag & GLOBALFLAG_DECK_REVERSE_CHECK) {
......@@ -5380,25 +5405,6 @@ int32 field::adjust_step(uint16 step) {
}
}
core.deck_reversed = res;
eset.clear();
}
if(core.global_flag & GLOBALFLAG_BRAINWASHING_CHECK) {
filter_field_effect(EFFECT_REMOVE_BRAINWASHING, &eset, FALSE);
res = eset.size() ? TRUE : FALSE;
if(res && !core.remove_brainwashing) {
for(int i = 0; i < 5; ++i) {
card* pcard = player[0].list_mzone[i];
if(pcard)
pcard->reset(EFFECT_SET_CONTROL, RESET_CODE);
}
for(int i = 0; i < 5; ++i) {
card* pcard = player[1].list_mzone[i];
if(pcard)
pcard->reset(EFFECT_SET_CONTROL, RESET_CODE);
}
core.re_adjust = TRUE;
}
core.remove_brainwashing = res;
}
return FALSE;
}
......
......@@ -11,5 +11,6 @@ function c94739788.initial_effect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_REMOVE_BRAINWASHING)
e2:SetRange(LOCATION_SZONE)
e2:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
c:RegisterEffect(e2)
end
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