int32 effect::is_target_player(uint8 playerid) { if(!(flag & EFFECT_FLAG_PLAYER_TARGET)) return FALSE; uint8 self = get_handler_player(); if(flag & EFFECT_FLAG_ABSOLUTE_TARGET) { if(s_range && playerid == 0 ) return TRUE; if(o_range && playerid == 1 ) return TRUE; } else { if(s_range && self == playerid) return TRUE; if(o_range && self != playerid) return TRUE; } return FALSE; }
int32 effect::reset(uint32 reset_level, uint32 reset_type) { switch (reset_type) { case RESET_EVENT: { if(!(reset_flag & RESET_EVENT)) return FALSE; if(owner != handler) reset_level &= ~RESET_DISABLE; if(reset_level & 0xffff0000 & reset_flag) return TRUE; return FALSE; break; } case RESET_CARD: { return owner && (owner->data.code == reset_level); break; } case RESET_PHASE: { if(!(reset_flag & RESET_PHASE)) return FALSE; uint8 pid = get_handler_player(); uint8 tp = handler->pduel->game_field->infos.turn_player; if((((reset_flag & RESET_SELF_TURN) && pid == tp) || ((reset_flag & RESET_OPPO_TURN) && pid != tp)) && (reset_level & 0xff & reset_flag)) reset_count--; if((reset_count & 0xff) == 0) return TRUE; return FALSE; break; } case RESET_CODE: { return (code == reset_level) && (type & EFFECT_TYPE_SINGLE) && !(type & EFFECT_TYPE_ACTIONS); break; } case RESET_COPY: { return copy_id == reset_level; break; } } return FALSE; }
int32 effect::is_target(card* pcard) { if(type & EFFECT_TYPE_ACTIONS) return FALSE; if((type & EFFECT_TYPE_SINGLE) || (type & EFFECT_TYPE_EQUIP)) return TRUE; if(pcard && !(flag & EFFECT_FLAG_SET_AVAILABLE) && (pcard->current.location & LOCATION_ONFIELD) && !pcard->is_position(POS_FACEUP)) return FALSE; if(!(flag & EFFECT_FLAG_IGNORE_RANGE)) { if(pcard->get_status(STATUS_SUMMONING + STATUS_SUMMON_DISABLED)) return FALSE; if(flag & EFFECT_FLAG_ABSOLUTE_TARGET) { if(pcard->current.controler == 0) { if (!(s_range & pcard->current.location)) return FALSE; } else { if(!(o_range & pcard->current.location)) return FALSE; } } else { if(pcard->current.controler == get_handler_player()) { if(!(s_range & pcard->current.location)) return FALSE; } else { if(!(o_range & pcard->current.location)) return FALSE; } } } if(target) { pduel->lua->add_param(this, PARAM_TYPE_EFFECT); pduel->lua->add_param(pcard, PARAM_TYPE_CARD); if (!pduel->lua->check_condition(target, 2)) { return FALSE; } } return TRUE; }