Commit 887d70fa authored by DailyShana's avatar DailyShana

fix normal summon with specified proc

close #321
parent 182e619a
...@@ -3012,7 +3012,7 @@ int32 card::is_can_be_summoned(uint8 playerid, uint8 ignore_count, effect* peffe ...@@ -3012,7 +3012,7 @@ int32 card::is_can_be_summoned(uint8 playerid, uint8 ignore_count, effect* peffe
effect_set proc; effect_set proc;
int32 res = filter_summon_procedure(playerid, &proc, ignore_count, min_tribute, zone); int32 res = filter_summon_procedure(playerid, &proc, ignore_count, min_tribute, zone);
if(peffect) { if(peffect) {
if(res < 0 || !pduel->game_field->is_player_can_summon(peffect->get_value(), playerid, this, playerid)) { if(res < 0 || !check_summon_procedure(peffect, playerid, ignore_count, min_tribute, zone)) {
pduel->game_field->restore_lp_cost(); pduel->game_field->restore_lp_cost();
return FALSE; return FALSE;
} }
...@@ -3210,7 +3210,7 @@ int32 card::is_setable_mzone(uint8 playerid, uint8 ignore_count, effect* peffect ...@@ -3210,7 +3210,7 @@ int32 card::is_setable_mzone(uint8 playerid, uint8 ignore_count, effect* peffect
effect_set eset; effect_set eset;
int32 res = filter_set_procedure(playerid, &eset, ignore_count, min_tribute, zone); int32 res = filter_set_procedure(playerid, &eset, ignore_count, min_tribute, zone);
if(peffect) { if(peffect) {
if(res < 0 || !pduel->game_field->is_player_can_mset(peffect->get_value(), playerid, this, playerid)) { if(res < 0 || !check_set_procedure(peffect, playerid, ignore_count, min_tribute, zone)) {
pduel->game_field->restore_lp_cost(); pduel->game_field->restore_lp_cost();
return FALSE; return FALSE;
} }
......
...@@ -1554,7 +1554,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui ...@@ -1554,7 +1554,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
effect_set eset; effect_set eset;
int32 res = target->filter_summon_procedure(sumplayer, &eset, ignore_count, min_tribute, zone); int32 res = target->filter_summon_procedure(sumplayer, &eset, ignore_count, min_tribute, zone);
if(proc) { if(proc) {
if(res < 0) if(res < 0 || !target->check_summon_procedure(proc, sumplayer, ignore_count, min_tribute, zone))
return TRUE; return TRUE;
} else { } else {
if(res == -2) if(res == -2)
...@@ -1595,23 +1595,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui ...@@ -1595,23 +1595,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
core.units.begin()->ptr1 = 0; core.units.begin()->ptr1 = 0;
return FALSE; return FALSE;
} }
if(proc) { if(!proc) {
core.units.begin()->step = 3; proc = core.select_effects[returns.ivalue[0]];
if(!ignore_count && !core.extra_summon[sumplayer]) { core.units.begin()->peffect = proc;
for(int32 i = 0; i < eset.size(); ++i) {
std::vector<int32> retval;
eset[i]->get_value(target, 0, &retval);
if(retval.size() < 2) {
core.units.begin()->ptr1 = eset[i];
return FALSE;
}
}
}
core.units.begin()->ptr1 = 0;
return FALSE;
} }
effect* proc = core.select_effects[returns.ivalue[0]];
core.units.begin()->peffect = proc;
core.select_effects.clear(); core.select_effects.clear();
core.select_options.clear(); core.select_options.clear();
if(ignore_count || core.summon_count[sumplayer] < get_summon_count_limit(sumplayer)) { if(ignore_count || core.summon_count[sumplayer] < get_summon_count_limit(sumplayer)) {
...@@ -2137,7 +2124,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card* target, effect* proc, uint ...@@ -2137,7 +2124,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card* target, effect* proc, uint
effect_set eset; effect_set eset;
int32 res = target->filter_set_procedure(setplayer, &eset, ignore_count, min_tribute, zone); int32 res = target->filter_set_procedure(setplayer, &eset, ignore_count, min_tribute, zone);
if(proc) { if(proc) {
if(res < 0) if(res < 0 || !target->check_set_procedure(proc, setplayer, ignore_count, min_tribute, zone))
return TRUE; return TRUE;
} else { } else {
if(res == -2) if(res == -2)
...@@ -2163,23 +2150,10 @@ int32 field::mset(uint16 step, uint8 setplayer, card* target, effect* proc, uint ...@@ -2163,23 +2150,10 @@ int32 field::mset(uint16 step, uint8 setplayer, card* target, effect* proc, uint
case 1: { case 1: {
effect_set eset; effect_set eset;
target->filter_effect(EFFECT_EXTRA_SET_COUNT, &eset); target->filter_effect(EFFECT_EXTRA_SET_COUNT, &eset);
if(proc) { if(!proc) {
core.units.begin()->step = 3; proc = core.select_effects[returns.ivalue[0]];
if(!ignore_count && !core.extra_summon[setplayer]) { core.units.begin()->peffect = proc;
for(int32 i = 0; i < eset.size(); ++i) {
std::vector<int32> retval;
eset[i]->get_value(target, 0, &retval);
if(retval.size() < 2) {
core.units.begin()->ptr1 = eset[i];
return FALSE;
}
}
}
core.units.begin()->ptr1 = 0;
return FALSE;
} }
effect* proc = core.select_effects[returns.ivalue[0]];
core.units.begin()->peffect = proc;
core.select_effects.clear(); core.select_effects.clear();
core.select_options.clear(); core.select_options.clear();
if(ignore_count || core.summon_count[setplayer] < get_summon_count_limit(setplayer)) { if(ignore_count || core.summon_count[setplayer] < get_summon_count_limit(setplayer)) {
......
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