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