Commit 869e34cd authored by mercury233's avatar mercury233
parents b644fa90 3028b766
...@@ -2352,7 +2352,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2352,7 +2352,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
card_set* set_cards = new card_set; card_set* set_cards = new card_set;
core.operated_set.clear(); core.operated_set.clear();
for(auto& target : ptarget->container) { for(auto& target : ptarget->container) {
if((!(target->data.type & TYPE_FIELD) && get_useable_count(NULL, toplayer, LOCATION_SZONE, setplayer, LOCATION_REASON_TOFIELD) <= 0) if((!(target->data.type & TYPE_FIELD) && get_useable_count(target, toplayer, LOCATION_SZONE, setplayer, LOCATION_REASON_TOFIELD) <= 0)
|| (target->data.type & TYPE_MONSTER && !target->is_affected_by_effect(EFFECT_MONSTER_SSET)) || (target->data.type & TYPE_MONSTER && !target->is_affected_by_effect(EFFECT_MONSTER_SSET))
|| (target->current.location == LOCATION_SZONE) || (target->current.location == LOCATION_SZONE)
|| (!is_player_can_sset(setplayer, target)) || (!is_player_can_sset(setplayer, target))
...@@ -2387,16 +2387,12 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget ...@@ -2387,16 +2387,12 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
case 1: { case 1: {
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 flag;
int32 ct = get_useable_count(target, toplayer, LOCATION_SZONE, setplayer, LOCATION_REASON_TOFIELD, 0xff, &flag);
if(ct <= 0) {
core.units.begin()->step = 2;
return FALSE;
}
if(target->data.type & TYPE_FIELD) { if(target->data.type & TYPE_FIELD) {
returns.bvalue[2] = 5; returns.bvalue[2] = 5;
return FALSE; return FALSE;
} }
uint32 flag;
get_useable_count(target, toplayer, LOCATION_SZONE, setplayer, LOCATION_REASON_TOFIELD, 0xff, &flag);
flag |= core.set_group_used_zones; flag |= core.set_group_used_zones;
if(setplayer == toplayer) { if(setplayer == toplayer) {
flag = ((flag & 0xff) << 8) | 0xffff00ff; flag = ((flag & 0xff) << 8) | 0xffff00ff;
......
...@@ -1606,41 +1606,41 @@ int32 field::process_quick_effect(int16 step, int32 skip_freechain, uint8 priori ...@@ -1606,41 +1606,41 @@ int32 field::process_quick_effect(int16 step, int32 skip_freechain, uint8 priori
chain newchain; chain newchain;
if(core.ignition_priority_chains.size()) if(core.ignition_priority_chains.size())
core.select_chains.swap(core.ignition_priority_chains); core.select_chains.swap(core.ignition_priority_chains);
for(auto evit = core.point_event.begin(); evit != core.instant_event.end(); ++evit) { for(const auto* ev_list : { &core.point_event, &core.instant_event }) {
if(evit == core.point_event.end()) for(const auto& ev : *ev_list) {
evit = core.instant_event.begin(); auto pr = effects.activate_effect.equal_range(ev.event_code);
auto pr = effects.activate_effect.equal_range(evit->event_code);
for(auto eit = pr.first; eit != pr.second;) { for(auto eit = pr.first; eit != pr.second;) {
effect* peffect = eit->second; effect* peffect = eit->second;
++eit; ++eit;
peffect->set_activate_location(); peffect->set_activate_location();
if(!peffect->is_flag(EFFECT_FLAG_DELAY) && peffect->is_chainable(priority) && peffect->is_activateable(priority, *evit)) { if(!peffect->is_flag(EFFECT_FLAG_DELAY) && peffect->is_chainable(priority) && peffect->is_activateable(priority, ev)) {
card* phandler = peffect->get_handler(); card* phandler = peffect->get_handler();
newchain.flag = 0; newchain.flag = 0;
newchain.chain_id = infos.field_id++; newchain.chain_id = infos.field_id++;
newchain.evt = *evit; newchain.evt = ev;
newchain.triggering_effect = peffect; newchain.triggering_effect = peffect;
newchain.set_triggering_state(phandler); newchain.set_triggering_state(phandler);
newchain.triggering_player = priority; newchain.triggering_player = priority;
core.select_chains.push_back(newchain); core.select_chains.push_back(newchain);
} }
} }
pr = effects.quick_o_effect.equal_range(evit->event_code); pr = effects.quick_o_effect.equal_range(ev.event_code);
for(auto eit = pr.first; eit != pr.second;) { for(auto eit = pr.first; eit != pr.second;) {
effect* peffect = eit->second; effect* peffect = eit->second;
++eit; ++eit;
peffect->set_activate_location(); peffect->set_activate_location();
if(peffect->is_chainable(priority) && peffect->is_activateable(priority, *evit)) { if(peffect->is_chainable(priority) && peffect->is_activateable(priority, ev)) {
card* phandler = peffect->get_handler(); card* phandler = peffect->get_handler();
newchain.flag = 0; newchain.flag = 0;
newchain.chain_id = infos.field_id++; newchain.chain_id = infos.field_id++;
newchain.evt = *evit; newchain.evt = ev;
newchain.triggering_effect = peffect; newchain.triggering_effect = peffect;
newchain.set_triggering_state(phandler); newchain.set_triggering_state(phandler);
newchain.triggering_player = priority; newchain.triggering_player = priority;
core.select_chains.push_back(newchain); core.select_chains.push_back(newchain);
core.delayed_quick_tmp.erase(std::make_pair(peffect, *evit)); core.delayed_quick_tmp.erase(std::make_pair(peffect, ev));
core.delayed_quick_break.erase(std::make_pair(peffect, *evit)); core.delayed_quick_break.erase(std::make_pair(peffect, ev));
}
} }
} }
} }
......
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