Commit a3274347 authored by VanillaSalt's avatar VanillaSalt

fix

parent d70fa6e2
...@@ -1444,7 +1444,7 @@ int32 card::filter_summon_procedure(uint8 playerid, effect_set* peset, uint8 ign ...@@ -1444,7 +1444,7 @@ int32 card::filter_summon_procedure(uint8 playerid, effect_set* peset, uint8 ign
peset->add_item(eset[i]); peset->add_item(eset[i]);
if(!pduel->game_field->is_player_can_summon(SUMMON_TYPE_NORMAL, playerid, this)) if(!pduel->game_field->is_player_can_summon(SUMMON_TYPE_NORMAL, playerid, this))
return FALSE; return FALSE;
int32 rcount = get_summon_tribute_count(); int32 rcount = get_summon_tribute_count(ignore_count);
int32 min = rcount & 0xffff, max = (rcount >> 16) & 0xffff; int32 min = rcount & 0xffff, max = (rcount >> 16) & 0xffff;
if(min > 0 && !pduel->game_field->is_player_can_summon(SUMMON_TYPE_ADVANCE, playerid, this)) if(min > 0 && !pduel->game_field->is_player_can_summon(SUMMON_TYPE_ADVANCE, playerid, this))
return FALSE; return FALSE;
...@@ -1713,7 +1713,7 @@ int32 card::is_can_be_summoned(uint8 playerid, uint8 ignore_count, effect* peffe ...@@ -1713,7 +1713,7 @@ int32 card::is_can_be_summoned(uint8 playerid, uint8 ignore_count, effect* peffe
pduel->game_field->restore_lp_cost(); pduel->game_field->restore_lp_cost();
return TRUE; return TRUE;
} }
int32 card::get_summon_tribute_count() { int32 card::get_summon_tribute_count(uint8 ignore_count) {
int32 min = 0, max = 0; int32 min = 0, max = 0;
int32 minul = 0, maxul = 0; int32 minul = 0, maxul = 0;
int32 level = get_level(); int32 level = get_level();
...@@ -1739,6 +1739,16 @@ int32 card::get_summon_tribute_count() { ...@@ -1739,6 +1739,16 @@ int32 card::get_summon_tribute_count() {
} }
min -= minul; min -= minul;
max -= maxul; max -= maxul;
int32 playerid = current.controler;
if(!ignore_count && !pduel->game_field->core.extra_summon[playerid]
&& pduel->game_field->core.summon_count[playerid] >= pduel->game_field->get_summon_count_limit(playerid)) {
effect* pextra = is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT);
if(pextra && !(pextra->flag & EFFECT_FLAG_FUNC_VALUE)) {
int32 count = pextra->get_value();
if(min < count)
min = count;
}
}
if(min < 0) min = 0; if(min < 0) min = 0;
if(max < min) max = min; if(max < min) max = min;
return min + (max << 16); return min + (max << 16);
......
...@@ -212,7 +212,7 @@ public: ...@@ -212,7 +212,7 @@ public:
int32 is_summonable(); int32 is_summonable();
int32 is_summonable(effect* peffect); int32 is_summonable(effect* peffect);
int32 is_can_be_summoned(uint8 playerid, uint8 ingore_count, effect* peffect); int32 is_can_be_summoned(uint8 playerid, uint8 ingore_count, effect* peffect);
int32 get_summon_tribute_count(); int32 get_summon_tribute_count(uint8 ignore_count = 0);
int32 get_set_tribute_count(); int32 get_set_tribute_count();
int32 is_can_be_flip_summoned(uint8 playerid); int32 is_can_be_flip_summoned(uint8 playerid);
int32 is_special_summonable(uint8 playerid); int32 is_special_summonable(uint8 playerid);
......
...@@ -1304,8 +1304,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1304,8 +1304,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
effect* pextra = core.extra_summon[sumplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT); effect* pextra = core.extra_summon[sumplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT);
if(pextra) { if(pextra) {
core.temp_var[0] = (ptr)pextra; core.temp_var[0] = (ptr)pextra;
if(pextra->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) && target->material_cards.size() < pextra->get_value())
core.temp_var[0] = 0;
else else
returns.ivalue[0] = TRUE; returns.ivalue[0] = TRUE;
} }
...@@ -1356,7 +1358,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1356,7 +1358,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
effect* pextra = core.extra_summon[sumplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT); effect* pextra = core.extra_summon[sumplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT);
if(pextra) { if(pextra) {
core.temp_var[0] = (ptr)pextra; core.temp_var[0] = (ptr)pextra;
if(pextra->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 else
returns.ivalue[0] = TRUE; returns.ivalue[0] = TRUE;
......
...@@ -14,6 +14,7 @@ function c41440148.sumop(e,tp,eg,ep,ev,re,r,rp) ...@@ -14,6 +14,7 @@ function c41440148.sumop(e,tp,eg,ep,ev,re,r,rp)
e1:SetTargetRange(LOCATION_HAND,0) e1:SetTargetRange(LOCATION_HAND,0)
e1:SetCode(EFFECT_EXTRA_SUMMON_COUNT) e1:SetCode(EFFECT_EXTRA_SUMMON_COUNT)
e1:SetTarget(aux.TargetBoolFunction(Card.IsLevelAbove,7)) e1:SetTarget(aux.TargetBoolFunction(Card.IsLevelAbove,7))
e1:SetValue(0x1)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e1,tp) Duel.RegisterEffect(e1,tp)
Duel.RegisterFlagEffect(tp,41440148,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,41440148,RESET_PHASE+PHASE_END,0,1)
......
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