public static bool apply_skill_eff_to(long now, IBaseUnit from, IBaseUnit target, skill_state_conf sk_res, int aff, int percentage) { if (target.isghost() || target.isdie()) return false; if (target.ignore_dmg()) return false; if (sk_res.rate > 0) { if (new Random().Next(0, 100) > sk_res.rate) return false; } if (target.has_state(pl_state_type.PST_SKILL_AVOID)) return false; if (from.iid != target.iid) { if (!skill_conf.skill_target_type_validation(aff, skill_aff_type.SAT_ENERMY)) { if (from.can_atk(target)) return false; if (from.isaily(target)) { if (!skill_conf.skill_target_type_validation(aff, skill_aff_type.SAT_ALLY)) return false; } else { if (!skill_conf.skill_target_type_validation(aff, skill_aff_type.SAT_MID)) return false; } } else { if (from.Is_Player()) { if (target.Is_Player()) { if (target.get_pack_data().in_pczone || from.get_pack_data().in_pczone) return false; if (!from.can_atk(target)) return false; } else if (target.Is_Monster()) { if (target.owner_ply != null) { if (target.owner_ply.iid == from.iid) return false; if (target.owner_ply.get_pack_data().in_pczone || from.get_pack_data().in_pczone) return false; if (!from.can_atk(target)) return false; } } } else { if (!from.can_atk(target)) return false; } } } else { if(!skill_conf.skill_target_type_validation(aff,skill_aff_type.SAT_SELF)) return false; } if (from.Is_Player()) { if(target.can_atk(from)) target.atk_by(from); } if (sk_res.nodmg == 0) { //TODO do damage } if (sk_res.rmv_stat > 0) rmv_stat_from_pl_by_gb(sk_res.rmv_stat,target); if(sk_res.rmv_1_stat >0) rmv_1_stat_from_pl_by_gb(sk_res.rmv_1_stat,target); if (sk_res.tar_state > 0) { IBaseUnit_State state = add_state_to_pl(now, target, sk_res, from, 100); } if (sk_res.force_move_dir != -1) { int dir = sk_res.force_move_dir; if (sk_res.force_move_dir == 2) dir = new Random().Next(0, 2); int delta_x = target.x - from.x; int delta_y = target.y - from.y; if (delta_x != 0 || delta_y != 0) { Point2D vec=new Point2D(delta_x,delta_y); vec = Utility.normalize_vec2(vec); delta_x = (int)(sk_res.force_move_rang*vec.x); delta_y = (int) (sk_res.force_move_rang*vec.y); if (sk_res.force_move_dir == 0) { target.x += delta_x; target.y += delta_y; } else { target.x -= delta_x; target.y -= delta_y; } } target.get_pack_data().moving = null; target.get_pack_data().casting = null; target.get_pack_data().last_mvpts = null; } return true; }
public static IBaseUnit_State add_state_to_pl(long now, IBaseUnit target, skill_state_conf sk_res, IBaseUnit from, int per) { }