Commit 555bfa8c authored by VanillaSalt's avatar VanillaSalt

fix

parent d4f84633
...@@ -1317,6 +1317,9 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1317,6 +1317,9 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
} }
} }
} }
effect* pextra = 0;
if(!ignore_count && !core.extra_summon[sumplayer])
pextra = target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT);
if(returns.bvalue[0]) { if(returns.bvalue[0]) {
card_set tributes; card_set tributes;
for(int32 i = 0; i < returns.bvalue[0]; ++i) { for(int32 i = 0; i < returns.bvalue[0]; ++i) {
...@@ -1335,9 +1338,13 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1335,9 +1338,13 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
target->current.reason_effect = 0; target->current.reason_effect = 0;
target->current.reason_player = sumplayer; target->current.reason_player = sumplayer;
core.units.begin()->step = 4; core.units.begin()->step = 4;
core.temp_var[0] = (ptr)pextra;
return FALSE; return FALSE;
} }
case 4: { case 4: {
effect* pextra = 0;
if(!ignore_count && !core.extra_summon[sumplayer])
pextra = target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT);
target->summon_info = (proc->get_value(target) & 0xfffffff) | SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16); target->summon_info = (proc->get_value(target) & 0xfffffff) | SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16);
target->current.reason_effect = proc; target->current.reason_effect = proc;
target->current.reason_player = sumplayer; target->current.reason_player = sumplayer;
...@@ -1347,6 +1354,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1347,6 +1354,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
add_process(PROCESSOR_EXECUTE_OPERATION, 0, proc, 0, sumplayer, 0); add_process(PROCESSOR_EXECUTE_OPERATION, 0, proc, 0, sumplayer, 0);
} }
proc->dec_count(sumplayer); proc->dec_count(sumplayer);
core.temp_var[0] = (ptr)pextra;
return FALSE; return FALSE;
} }
case 5: { case 5: {
...@@ -1354,12 +1362,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1354,12 +1362,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
if(core.summon_depth) if(core.summon_depth)
return TRUE; return TRUE;
break_effect(); break_effect();
core.temp_var[0] = 0;
if(!ignore_count) { if(!ignore_count) {
returns.ivalue[0] = FALSE; returns.ivalue[0] = FALSE;
effect* pextra = core.extra_summon[sumplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT); effect* pextra = (effect*)core.temp_var[0];
if(pextra) { if(pextra) {
core.temp_var[0] = (ptr)pextra;
if((pextra->flag & EFFECT_FLAG_FUNC_VALUE) && (core.summon_count[sumplayer] < get_summon_count_limit(sumplayer))) if((pextra->flag & EFFECT_FLAG_FUNC_VALUE) && (core.summon_count[sumplayer] < get_summon_count_limit(sumplayer)))
add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, sumplayer, 91); add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, sumplayer, 91);
else if(!(pextra->flag & EFFECT_FLAG_FUNC_VALUE) && ((int32)target->material_cards.size() < pextra->get_value())) else if(!(pextra->flag & EFFECT_FLAG_FUNC_VALUE) && ((int32)target->material_cards.size() < pextra->get_value()))
...@@ -1751,6 +1757,9 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1751,6 +1757,9 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
return FALSE; return FALSE;
} }
case 3: { case 3: {
effect* pextra = 0;
if(!ignore_count && !core.extra_summon[setplayer])
pextra = target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT);
if(returns.bvalue[0]) { if(returns.bvalue[0]) {
card_set tributes; card_set tributes;
for(int32 i = 0; i < returns.bvalue[0]; ++i) { for(int32 i = 0; i < returns.bvalue[0]; ++i) {
...@@ -1770,9 +1779,13 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1770,9 +1779,13 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
target->current.reason_effect = 0; target->current.reason_effect = 0;
target->current.reason_player = setplayer; target->current.reason_player = setplayer;
core.units.begin()->step = 4; core.units.begin()->step = 4;
core.temp_var[0] = (ptr)pextra;
return FALSE; return FALSE;
} }
case 4: { case 4: {
effect* pextra = 0;
if(!ignore_count && !core.extra_summon[setplayer])
pextra = target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT);
target->summon_info = (proc->get_value(target) & 0xfffffff) | SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16); target->summon_info = (proc->get_value(target) & 0xfffffff) | SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16);
target->current.reason_effect = proc; target->current.reason_effect = proc;
target->current.reason_player = setplayer; target->current.reason_player = setplayer;
...@@ -1780,16 +1793,15 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1780,16 +1793,15 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
core.sub_solving_event.push_back(nil_event); core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_EXECUTE_OPERATION, 0, proc, 0, setplayer, 0); add_process(PROCESSOR_EXECUTE_OPERATION, 0, proc, 0, setplayer, 0);
proc->dec_count(setplayer); proc->dec_count(setplayer);
core.temp_var[0] = (ptr)pextra;
return FALSE; return FALSE;
} }
case 5: { case 5: {
core.temp_var[0] = 0;
break_effect(); break_effect();
if(!ignore_count) { if(!ignore_count) {
returns.ivalue[0] = FALSE; returns.ivalue[0] = FALSE;
effect* pextra = core.extra_summon[setplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT); effect* pextra = (effect*)core.temp_var[0];
if(pextra) { if(pextra) {
core.temp_var[0] = (ptr)pextra;
if((pextra->flag & EFFECT_FLAG_FUNC_VALUE) && (core.summon_count[setplayer] < get_summon_count_limit(setplayer))) if((pextra->flag & EFFECT_FLAG_FUNC_VALUE) && (core.summon_count[setplayer] < get_summon_count_limit(setplayer)))
add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, setplayer, 91); add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, setplayer, 91);
else if(!(pextra->flag & EFFECT_FLAG_FUNC_VALUE) && ((int32)target->material_cards.size() < pextra->get_value())) else if(!(pextra->flag & EFFECT_FLAG_FUNC_VALUE) && ((int32)target->material_cards.size() < pextra->get_value()))
......
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