Commit 68d39fb2 authored by salix5's avatar salix5

fix self-destroy & activation of the card

parent f0a8eb49
...@@ -194,7 +194,6 @@ void field::special_summon_complete(effect* reason_effect, uint8 reason_player) ...@@ -194,7 +194,6 @@ void field::special_summon_complete(effect* reason_effect, uint8 reason_player)
group* ng = pduel->new_group(); group* ng = pduel->new_group();
ng->container.swap(core.special_summoning); ng->container.swap(core.special_summoning);
ng->is_readonly = TRUE; ng->is_readonly = TRUE;
//core.special_summoning.clear();
add_process(PROCESSOR_SPSUMMON, 1, reason_effect, ng, reason_player, 0); add_process(PROCESSOR_SPSUMMON, 1, reason_effect, ng, reason_player, 0);
} }
void field::destroy(card_set* targets, effect* reason_effect, uint32 reason, uint32 reason_player, uint32 playerid, uint32 destination, uint32 sequence) { void field::destroy(card_set* targets, effect* reason_effect, uint32 reason, uint32 reason_player, uint32 playerid, uint32 destination, uint32 sequence) {
......
...@@ -766,7 +766,7 @@ int32 field::execute_cost(uint16 step, effect * triggering_effect, uint8 trigger ...@@ -766,7 +766,7 @@ int32 field::execute_cost(uint16 step, effect * triggering_effect, uint8 trigger
if(core.shuffle_deck_check[1]) if(core.shuffle_deck_check[1])
shuffle(1, LOCATION_DECK); shuffle(1, LOCATION_DECK);
} }
core.shuffle_check_disabled = core.units.begin()->arg2; core.shuffle_check_disabled = (uint8)core.units.begin()->arg2;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
...@@ -822,7 +822,7 @@ int32 field::execute_operation(uint16 step, effect * triggering_effect, uint8 tr ...@@ -822,7 +822,7 @@ int32 field::execute_operation(uint16 step, effect * triggering_effect, uint8 tr
//cost[0].amount = 0; //cost[0].amount = 0;
//cost[1].amount = 0; //cost[1].amount = 0;
} }
core.shuffle_check_disabled = core.units.begin()->arg2; core.shuffle_check_disabled = (uint8)core.units.begin()->arg2;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
...@@ -875,7 +875,7 @@ int32 field::execute_target(uint16 step, effect * triggering_effect, uint8 trigg ...@@ -875,7 +875,7 @@ int32 field::execute_target(uint16 step, effect * triggering_effect, uint8 trigg
if(core.shuffle_deck_check[1]) if(core.shuffle_deck_check[1])
shuffle(1, LOCATION_DECK); shuffle(1, LOCATION_DECK);
} }
core.shuffle_check_disabled = core.units.begin()->arg2; core.shuffle_check_disabled = (uint8)core.units.begin()->arg2;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
...@@ -4304,6 +4304,10 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2 ...@@ -4304,6 +4304,10 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2
case 2: { case 2: {
effect* peffect = cait->triggering_effect; effect* peffect = cait->triggering_effect;
card* pcard = peffect->get_handler(); card* pcard = peffect->get_handler();
if((cait->flag & CHAIN_CONTINUOUS_CARD) && !pcard->is_has_relation(*cait)){
core.units.begin()->step = 3;
return FALSE;
}
if((peffect->type & EFFECT_TYPE_ACTIVATE) && pcard->is_has_relation(*cait) && !cait->replace_op) { if((peffect->type & EFFECT_TYPE_ACTIVATE) && pcard->is_has_relation(*cait) && !cait->replace_op) {
pcard->enable_field_effect(true); pcard->enable_field_effect(true);
if(core.duel_rule <= 2) { if(core.duel_rule <= 2) {
...@@ -4329,29 +4333,37 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2 ...@@ -4329,29 +4333,37 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2
return FALSE; return FALSE;
} }
} }
return FALSE;
}
case 3 : {
effect* peffect = cait->triggering_effect;
card* pcard = peffect->get_handler();
if((cait->flag & CHAIN_CONTINUOUS_CARD) && !pcard->is_has_relation(*cait)){
return FALSE;
}
if(cait->replace_op) { if(cait->replace_op) {
core.units.begin()->arg4 = cait->triggering_effect->operation; core.units.begin()->arg4 = cait->triggering_effect->operation;
cait->triggering_effect->operation = cait->replace_op; cait->triggering_effect->operation = cait->replace_op;
} else } else
core.units.begin()->arg4 = 0; core.units.begin()->arg4 = 0;
if((cait->flag & CHAIN_CONTINUOUS_CARD) && !pcard->is_has_relation(*cait))
return FALSE;
if(cait->triggering_effect->operation) { if(cait->triggering_effect->operation) {
core.sub_solving_event.push_back(cait->evt); core.sub_solving_event.push_back(cait->evt);
add_process(PROCESSOR_EXECUTE_OPERATION, 0, cait->triggering_effect, 0, cait->triggering_player, 0); add_process(PROCESSOR_EXECUTE_OPERATION, 0, cait->triggering_effect, 0, cait->triggering_player, 0);
} }
return FALSE; return FALSE;
} }
case 3: { case 4: {
// clean up when the resolution ends
effect* peffect = cait->triggering_effect; effect* peffect = cait->triggering_effect;
if(core.units.begin()->arg4) { if(core.units.begin()->arg4) {
peffect->operation = (int32)core.units.begin()->arg4; peffect->operation = (int32)core.units.begin()->arg4;
core.units.begin()->arg4 = 0;
} }
core.special_summoning.clear(); core.special_summoning.clear();
core.equiping_cards.clear(); core.equiping_cards.clear();
return FALSE; return FALSE;
} }
case 4: { case 5: {
core.chain_solving = FALSE; core.chain_solving = FALSE;
if(core.delayed_continuous_tp.size()) { if(core.delayed_continuous_tp.size()) {
core.conti_player = infos.turn_player; core.conti_player = infos.turn_player;
......
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