Commit 801f9264 authored by wind2009's avatar wind2009

Merge remote-tracking branch 'upstream/patch-card' into develop

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