Commit 7c9cf56a authored by mercury233's avatar mercury233
parents 1590f304 3b8bde1f
......@@ -2449,15 +2449,6 @@ void card::filter_disable_related_cards() {
pduel->game_field->add_to_disable_check_list(overlay_target);
}
}
for(auto pcard : effect_target_cards) {
for(auto it = pcard->single_effect.begin(); it != pcard->single_effect.end(); ++it) {
effect* peffect = it->second;
if(peffect->is_disable_related() && peffect->is_flag(EFFECT_FLAG_OWNER_RELATE)){
pduel->game_field->add_to_disable_check_list(pcard);
break;
}
}
}
}
// put all summon procedures except ordinay summon in peset (see is_can_be_summoned())
// return value:
......
......@@ -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))
......@@ -266,7 +271,7 @@ int32 effect::is_activateable(uint8 playerid, const tevent& e, int32 neglect_con
return FALSE;
}
if(!(type & (EFFECT_TYPE_FLIP | EFFECT_TYPE_TRIGGER_F))
&& !((type & EFFECT_TYPE_SINGLE) && (code == EVENT_TO_GRAVE || code == EVENT_DESTROYED || code == EVENT_SPSUMMON_SUCCESS || code == EVENT_TO_HAND || code == EVENT_REMOVE))) {
&& !((type & EFFECT_TYPE_SINGLE) && (code == EVENT_TO_GRAVE || code == EVENT_DESTROYED || code == EVENT_SPSUMMON_SUCCESS || code == EVENT_TO_HAND || code == EVENT_REMOVE || code == EVENT_FLIP))) {
if((code < 1132 || code > 1149) && pduel->game_field->infos.phase == PHASE_DAMAGE && !is_flag(EFFECT_FLAG_DAMAGE_STEP))
return FALSE;
if((code < 1134 || code > 1136) && pduel->game_field->infos.phase == PHASE_DAMAGE_CAL && !is_flag(EFFECT_FLAG_DAMAGE_CAL))
......
......@@ -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);
......
......@@ -1198,7 +1198,8 @@ int32 scriptlib::card_enable_dual_state(lua_State *L) {
deffect->owner = pcard;
deffect->code = EFFECT_DUAL_STATUS;
deffect->type = EFFECT_TYPE_SINGLE;
deffect->flag[0] = EFFECT_FLAG_CANNOT_DISABLE;
deffect->flag[0] = EFFECT_FLAG_CANNOT_DISABLE | EFFECT_FLAG_CLIENT_HINT;
deffect->description = 64;
deffect->reset_flag = RESET_EVENT + 0x1fe0000;
pcard->add_effect(deffect);
return 0;
......
......@@ -3266,8 +3266,7 @@ int32 scriptlib::duel_overlay(lua_State *L) {
target->xyz_overlay(&cset);
} else
target->xyz_overlay(&pgroup->container);
if(target->current.location == LOCATION_MZONE)
target->pduel->game_field->adjust_all();
target->pduel->game_field->adjust_all();
return lua_yield(L, 0);
}
int32 scriptlib::duel_get_overlay_group(lua_State *L) {
......
......@@ -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