Commit 01fc03a6 authored by mercury233's avatar mercury233 Committed by nanahira

fix Duel.SSet (#173)

parent 684fb273
...@@ -227,6 +227,7 @@ struct processor { ...@@ -227,6 +227,7 @@ struct processor {
card_set discarded_set; card_set discarded_set;
card_set destroy_canceled; card_set destroy_canceled;
card_set delayed_enable_set; card_set delayed_enable_set;
card_set set_group_pre_set;
card_set set_group_set; card_set set_group_set;
effect_set_v disfield_effects; effect_set_v disfield_effects;
effect_set_v extram_effects; effect_set_v extram_effects;
......
...@@ -2370,6 +2370,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2370,6 +2370,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
returns.ivalue[0] = 0; returns.ivalue[0] = 0;
return TRUE; return TRUE;
} }
core.set_group_pre_set.clear();
core.set_group_set.clear(); core.set_group_set.clear();
core.set_group_used_zones = 0; core.set_group_used_zones = 0;
core.phase_action = TRUE; core.phase_action = TRUE;
...@@ -2407,8 +2408,8 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2407,8 +2408,8 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
card_set* set_cards = (card_set*)ptarget; card_set* set_cards = (card_set*)ptarget;
card* target = *set_cards->begin(); card* target = *set_cards->begin();
uint32 seq = returns.bvalue[2]; uint32 seq = returns.bvalue[2];
core.set_group_seq[core.set_group_set.size()] = seq; core.set_group_seq[core.set_group_pre_set.size()] = seq;
core.set_group_set.insert(target); core.set_group_pre_set.insert(target);
core.set_group_used_zones |= (1 << seq); core.set_group_used_zones |= (1 << seq);
set_cards->erase(target); set_cards->erase(target);
if(!set_cards->empty()) if(!set_cards->empty())
...@@ -2418,7 +2419,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2418,7 +2419,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
return FALSE; return FALSE;
} }
case 3: { case 3: {
card_set* set_cards = &core.set_group_set; card_set* set_cards = &core.set_group_pre_set;
card* target = *set_cards->begin(); card* target = *set_cards->begin();
target->enable_field_effect(false); target->enable_field_effect(false);
uint32 zone; uint32 zone;
...@@ -2437,7 +2438,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2437,7 +2438,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
return FALSE; return FALSE;
} }
case 4: { case 4: {
card_set* set_cards = &core.set_group_set; card_set* set_cards = &core.set_group_pre_set;
card* target = *set_cards->begin(); card* target = *set_cards->begin();
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) {
...@@ -2454,7 +2455,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2454,7 +2455,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
pduel->write_buffer8(MSG_SET); pduel->write_buffer8(MSG_SET);
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());
core.operated_set.insert(target); core.set_group_set.insert(target);
set_cards->erase(target); set_cards->erase(target);
if(!set_cards->empty()) if(!set_cards->empty())
core.units.begin()->step = 2; core.units.begin()->step = 2;
...@@ -2464,8 +2465,8 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2464,8 +2465,8 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
if(confirm) { if(confirm) {
pduel->write_buffer8(MSG_CONFIRM_CARDS); pduel->write_buffer8(MSG_CONFIRM_CARDS);
pduel->write_buffer8(toplayer); pduel->write_buffer8(toplayer);
pduel->write_buffer8(core.operated_set.size()); pduel->write_buffer8(core.set_group_set.size());
for(auto cit = core.operated_set.begin(); cit != core.operated_set.end(); ++cit) { for(auto cit = core.set_group_set.begin(); cit != core.set_group_set.end(); ++cit) {
pduel->write_buffer32((*cit)->data.code); pduel->write_buffer32((*cit)->data.code);
pduel->write_buffer8((*cit)->current.controler); pduel->write_buffer8((*cit)->current.controler);
pduel->write_buffer8((*cit)->current.location); pduel->write_buffer8((*cit)->current.location);
...@@ -2475,9 +2476,15 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2475,9 +2476,15 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
return FALSE; return FALSE;
} }
case 6: { case 6: {
core.operated_set.clear();
for(auto cit = core.set_group_set.begin(); cit != core.set_group_set.end(); ++cit) {
core.operated_set.insert(*cit);
}
uint8 ct = core.operated_set.size(); uint8 ct = core.operated_set.size();
if(core.set_group_used_zones & (1 << 5)) if(core.set_group_used_zones & (1 << 5))
ct--; ct--;
if(ct <= 1)
return FALSE;
pduel->write_buffer8(MSG_SHUFFLE_SET_CARD); pduel->write_buffer8(MSG_SHUFFLE_SET_CARD);
pduel->write_buffer8(LOCATION_SZONE); pduel->write_buffer8(LOCATION_SZONE);
pduel->write_buffer8(ct); pduel->write_buffer8(ct);
......
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