Commit 864a0e58 authored by mercury233's avatar mercury233
parents c9a468c0 59559357
...@@ -2730,6 +2730,7 @@ effect* card::is_affected_by_effect(int32 code, card* target) { ...@@ -2730,6 +2730,7 @@ effect* card::is_affected_by_effect(int32 code, card* target) {
} }
return 0; return 0;
} }
// return the last control-changing continous effect
effect* card::check_control_effect() { effect* card::check_control_effect() {
effect* ret_effect = 0; effect* ret_effect = 0;
for (auto& pcard : equiping_cards) { for (auto& pcard : equiping_cards) {
...@@ -2753,7 +2754,7 @@ effect* card::check_control_effect() { ...@@ -2753,7 +2754,7 @@ effect* card::check_control_effect() {
auto rg = single_effect.equal_range(EFFECT_SET_CONTROL); auto rg = single_effect.equal_range(EFFECT_SET_CONTROL);
for (; rg.first != rg.second; ++rg.first) { for (; rg.first != rg.second; ++rg.first) {
effect* peffect = rg.first->second; effect* peffect = rg.first->second;
if(!peffect->is_flag(EFFECT_FLAG_SINGLE_RANGE)) if(!peffect->is_flag(EFFECT_FLAG_OWNER_RELATE))
continue; continue;
if(!ret_effect || peffect->id > ret_effect->id) if(!ret_effect || peffect->id > ret_effect->id)
ret_effect = peffect; ret_effect = peffect;
......
...@@ -545,7 +545,7 @@ int32 effect::is_chainable(uint8 tp) { ...@@ -545,7 +545,7 @@ int32 effect::is_chainable(uint8 tp) {
return TRUE; return TRUE;
} }
//return: this can be reset by reset_level or not //return: this can be reset by reset_level or not
//RESET_CODE can only reset single effects without EFFECT_FLAG_SINGLE_RANGE //RESET_CODE can only reset single effects without EFFECT_FLAG_SINGLE_RANGE, EFFECT_FLAG_OWNER_RELATE
//RESET_DISABLE is valid only when owner == handler //RESET_DISABLE is valid only when owner == handler
int32 effect::reset(uint32 reset_level, uint32 reset_type) { int32 effect::reset(uint32 reset_level, uint32 reset_type) {
switch (reset_type) { switch (reset_type) {
...@@ -578,7 +578,7 @@ int32 effect::reset(uint32 reset_level, uint32 reset_type) { ...@@ -578,7 +578,7 @@ int32 effect::reset(uint32 reset_level, uint32 reset_type) {
} }
case RESET_CODE: { case RESET_CODE: {
return (code == reset_level) && (type & EFFECT_TYPE_SINGLE) && !(type & EFFECT_TYPE_ACTIONS) return (code == reset_level) && (type & EFFECT_TYPE_SINGLE) && !(type & EFFECT_TYPE_ACTIONS)
&& !is_flag(EFFECT_FLAG_SINGLE_RANGE); && !is_flag(EFFECT_FLAG_SINGLE_RANGE) && !is_flag(EFFECT_FLAG_OWNER_RELATE);
break; break;
} }
case RESET_COPY: { case RESET_COPY: {
......
...@@ -1225,8 +1225,8 @@ void field::reset_phase(uint32 phase) { ...@@ -1225,8 +1225,8 @@ void field::reset_phase(uint32 phase) {
// work around: skip turn still raise reset_phase(PHASE_END) // work around: skip turn still raise reset_phase(PHASE_END)
// without this taking control only for one turn will be returned when skipping turn // without this taking control only for one turn will be returned when skipping turn
// RESET_TURN_END should be introduced // RESET_TURN_END should be introduced
if((*rm)->code == EFFECT_SET_CONTROL) //if((*rm)->code == EFFECT_SET_CONTROL)
continue; // continue;
if((*rm)->reset(phase, RESET_PHASE)) { if((*rm)->reset(phase, RESET_PHASE)) {
if((*rm)->is_flag(EFFECT_FLAG_FIELD_ONLY)) if((*rm)->is_flag(EFFECT_FLAG_FIELD_ONLY))
remove_effect((*rm)); remove_effect((*rm));
......
...@@ -1408,8 +1408,7 @@ int32 field::process_phase_event(int16 step, int32 phase) { ...@@ -1408,8 +1408,7 @@ int32 field::process_phase_event(int16 step, int32 phase) {
uint8 tp = infos.turn_player; uint8 tp = infos.turn_player;
if(!(((peffect->reset_flag & RESET_SELF_TURN) && pid == tp) || ((peffect->reset_flag & RESET_OPPO_TURN) && pid != tp))) if(!(((peffect->reset_flag & RESET_SELF_TURN) && pid == tp) || ((peffect->reset_flag & RESET_OPPO_TURN) && pid != tp)))
continue; continue;
peffect->reset_count--; if(peffect->reset_count != 1)
if(peffect->reset_count != 0)
continue; continue;
card* phandler = peffect->get_handler(); card* phandler = peffect->get_handler();
if(pid != phandler->current.controler) { if(pid != phandler->current.controler) {
......
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