Commit a6b53577 authored by salix5's avatar salix5 Committed by GitHub

set STATUS_SUMMONING before checking EFFECT_CANNOT_DISABLE_SUMMON (#635)

* set STATUS_SUMMONING before checking EFFECT_CANNOT_DISABLE_SUMMON

* format
parent 556c10f4
......@@ -3663,8 +3663,8 @@ int32 card::is_setable_szone(uint8 playerid, uint8 ignore_fd) {
return TRUE;
}
int32 card::is_affect_by_effect(effect* reason_effect) {
if(is_status(STATUS_SUMMONING) && reason_effect->code != EFFECT_CANNOT_DISABLE_SUMMON && reason_effect->code != EFFECT_CANNOT_DISABLE_SPSUMMON)
return FALSE;
if (is_status(STATUS_SUMMONING))
return reason_effect && (reason_effect->code == EFFECT_CANNOT_DISABLE_SUMMON || reason_effect->code == EFFECT_CANNOT_DISABLE_SPSUMMON);
if(!reason_effect || reason_effect->is_flag(EFFECT_FLAG_IGNORE_IMMUNE))
return TRUE;
if(reason_effect->is_immuned(this))
......
......@@ -16,6 +16,7 @@ class effect;
bool effect_sort_id(const effect* e1, const effect* e2);
// std::array<effect*, 64>
struct effect_set {
void add_item(effect* peffect) {
if (count >= 64)
......
......@@ -1865,6 +1865,16 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
core.phase_action = TRUE;
target->current.reason = REASON_SUMMON;
target->summon_player = sumplayer;
if (core.current_chain.size() == 0) {
if (core.is_gemini_summoning) {
target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_FLIP_SUMMONING, TRUE);
}
else {
target->set_status(STATUS_SUMMONING, TRUE);
target->set_status(STATUS_FLIP_SUMMONING, FALSE);
}
}
pduel->write_buffer8(MSG_SUMMONING);
pduel->write_buffer32(target->data.code);
pduel->write_buffer32(target->get_info_location());
......@@ -1889,14 +1899,6 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
return FALSE;
}
case 13: {
if (core.is_gemini_summoning) {
target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_FLIP_SUMMONING, TRUE);
}
else {
target->set_status(STATUS_SUMMONING, TRUE);
target->set_status(STATUS_FLIP_SUMMONING, FALSE);
}
target->set_status(STATUS_SUMMON_DISABLED, FALSE);
target->set_status(STATUS_FLIP_SUMMON_DISABLED, FALSE);
raise_event(target, EVENT_SUMMON, proc, 0, sumplayer, sumplayer, 0);
......@@ -2860,6 +2862,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
set_control(target, target->current.controler, 0, 0);
core.phase_action = TRUE;
target->current.reason_effect = core.units.begin()->peffect;
target->set_status(STATUS_SUMMONING, TRUE);
pduel->write_buffer8(MSG_SPSUMMONING);
pduel->write_buffer32(target->data.code);
pduel->write_buffer32(target->get_info_location());
......@@ -2897,7 +2900,6 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
return FALSE;
}
case 10: {
target->set_status(STATUS_SUMMONING, TRUE);
target->set_status(STATUS_SUMMON_DISABLED, FALSE);
raise_event(target, EVENT_SPSUMMON, core.units.begin()->peffect, 0, sumplayer, sumplayer, 0);
process_instant_event();
......@@ -3070,13 +3072,14 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
}
card* pcard = *pgroup->it;
++pgroup->it;
set_control(pcard, pcard->current.controler, 0, 0);
pcard->set_status(STATUS_SUMMONING, TRUE);
pduel->write_buffer8(MSG_SPSUMMONING);
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->current.sequence);
pduel->write_buffer8(pcard->current.position);
set_control(pcard, pcard->current.controler, 0, 0);
if(pgroup->it != pgroup->container.end())
core.units.begin()->step = 22;
return FALSE;
......@@ -3085,7 +3088,6 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
group* pgroup = core.units.begin()->ptarget;
card_set cset;
for(auto& pcard : pgroup->container) {
pcard->set_status(STATUS_SUMMONING, TRUE);
if(!pcard->is_affected_by_effect(EFFECT_CANNOT_DISABLE_SPSUMMON)) {
cset.insert(pcard);
}
......
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