Commit 4369eee6 authored by mercury233's avatar mercury233 Committed by GitHub

cancel spell set from hand (#466)

parent b501c1ef
...@@ -2376,6 +2376,26 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target, e ...@@ -2376,6 +2376,26 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target, e
return TRUE; return TRUE;
if(target->is_affected_by_effect(EFFECT_CANNOT_SSET)) if(target->is_affected_by_effect(EFFECT_CANNOT_SSET))
return TRUE; return TRUE;
uint32 flag = 0;
if(target->data.type & TYPE_FIELD) {
flag = ~(0x1 << 13);
} else {
get_useable_count(target, setplayer, LOCATION_SZONE, toplayer, LOCATION_REASON_TOFIELD, 0xff, &flag);
flag = ((flag & 0xff) << 8) | 0xffff00ff;
flag |= 0xe080e080;
}
pduel->write_buffer8(MSG_HINT);
pduel->write_buffer8(HINT_SELECTMSG);
pduel->write_buffer8(setplayer);
pduel->write_buffer32(target->data.code);
add_process(PROCESSOR_SELECT_PLACE, 0, 0, 0, setplayer, flag, 0);
return FALSE;
}
case 1: {
if(returns.bvalue[1] == 0) {
return TRUE;
}
target->to_field_param = returns.bvalue[2];
effect_set eset; effect_set eset;
target->filter_effect(EFFECT_SSET_COST, &eset); target->filter_effect(EFFECT_SSET_COST, &eset);
for(int32 i = 0; i < eset.size(); ++i) { for(int32 i = 0; i < eset.size(); ++i) {
...@@ -2386,12 +2406,12 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target, e ...@@ -2386,12 +2406,12 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target, e
} }
return FALSE; return FALSE;
} }
case 1: { case 2: {
target->enable_field_effect(false); target->enable_field_effect(false);
move_to_field(target, setplayer, toplayer, LOCATION_SZONE, POS_FACEDOWN, FALSE, 0, FALSE, (target->data.type & TYPE_FIELD) ? 0x1 << 5 : 0xff); move_to_field(target, setplayer, toplayer, LOCATION_SZONE, POS_FACEDOWN, FALSE, 0, FALSE, 0x1 << target->to_field_param);
return FALSE; return FALSE;
} }
case 2: { case 3: {
core.phase_action = TRUE; core.phase_action = TRUE;
target->set_status(STATUS_SET_TURN, TRUE); target->set_status(STATUS_SET_TURN, TRUE);
if(target->data.type & TYPE_MONSTER) { if(target->data.type & TYPE_MONSTER) {
......
...@@ -374,8 +374,6 @@ int32 field::select_chain(uint16 step, uint8 playerid, uint8 spe_count, uint8 fo ...@@ -374,8 +374,6 @@ int32 field::select_chain(uint16 step, uint8 playerid, uint8 spe_count, uint8 fo
} }
int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count) { int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count) {
if(step == 0) { if(step == 0) {
if(count == 0)
return TRUE;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) { if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
flag = ~flag; flag = ~flag;
int32 filter; int32 filter;
...@@ -433,14 +431,15 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count) ...@@ -433,14 +431,15 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count)
} else { } else {
uint8 pt = 0; uint8 pt = 0;
uint32 selected = 0; uint32 selected = 0;
for(int8 i = 0; i < count; ++i) { for(int8 i = 0; i < 1 || i < count; ++i) {
uint8 p = returns.bvalue[pt]; uint8 p = returns.bvalue[pt];
uint8 l = returns.bvalue[pt + 1]; uint8 l = returns.bvalue[pt + 1];
uint8 s = returns.bvalue[pt + 2]; uint8 s = returns.bvalue[pt + 2];
uint32 sel = 0x1u << (s + (p == playerid ? 0 : 16) + (l == LOCATION_MZONE ? 0 : 8)); uint32 sel = 0x1u << (s + (p == playerid ? 0 : 16) + (l == LOCATION_MZONE ? 0 : 8));
if((p != 0 && p != 1) if(!(count == 0 && i == 0 && l == 0)
&& ((p != 0 && p != 1)
|| ((l != LOCATION_MZONE) && (l != LOCATION_SZONE)) || ((l != LOCATION_MZONE) && (l != LOCATION_SZONE))
|| (sel & flag) || (sel & selected)) { || (sel & flag) || (sel & selected))) {
pduel->write_buffer8(MSG_RETRY); pduel->write_buffer8(MSG_RETRY);
return FALSE; return FALSE;
} }
......
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