public SkillCast(long time, long duration, SkillCastType castTypeType, uint skillId, string skillName) { Time = time; Duration = duration; CastType = castTypeType; SkillId = skillId; SkillName = skillName; }
public void SetSkillCfg(int _index) { this.index = _index; //skill = GameMain.getInstance().m_SkillMgr.GetSkill(this.index); if (skill != null) { skillCastType = skill.m_CastType; } }
/// <summary> /// Execute a user preformed skill /// </summary> /// <param name="associate">Executioner</param> /// <param name="reader">Client skill data</param> /// <param name="writer">Data to be sent to clients</param> /// <param name="castType">Type of skill</param> /// <param name="target">Explicit target</param> /// <returns>Context</returns> public async Task <ExecutionContext> ExecuteAsync(GameObject associate, BitReader reader, SkillCastType castType = SkillCastType.OnEquip, GameObject target = default) { var context = new ExecutionContext(associate, reader, default) { ExplicitTarget = target }; if (RootBehaviors.TryGetValue(SkillCastType.Default, out var defaultList)) { foreach (var root in defaultList) { context.Root = root; var branchContext = new ExecutionBranchContext(associate); await root.ExecuteAsync(context, branchContext); } } if (!RootBehaviors.TryGetValue(castType, out var list)) { return(context); } foreach (var root in list) { context.Root = root; var branchContext = new ExecutionBranchContext(associate); await root.ExecuteAsync(context, branchContext); } return(context); }
public override void parseJson(object jd) { Dictionary <string, object> item = (Dictionary <string, object>)jd; skill_id = long.Parse(item["skill_id"].ToString()); name = item["name"].ToString(); hero_id = long.Parse(item["hero_id"].ToString()); skill_name = item["skill_name"].ToString(); if (item["des"] != null) { des = item["des"].ToString(); } skill_icon = item["skill_icon"].ToString(); spell_motion = item["skill_motion"].ToString(); sound = item["sound"].ToString(); hit_sound = item["hit_sound"].ToString(); target_ceiling = byte.Parse(item["target_ceiling"].ToString()); types = byte.Parse(item["types"].ToString()); dist = float.Parse(item["dist"].ToString()); castBefore = float.Parse(item["end_motion"].ToString()); isSingle = item["singular_aoe"] == null ? true : byte.Parse(item["singular_aoe"].ToString()) == 0; ignoreTerrain = item["pierce through"] == null ? false : byte.Parse(item["ignore_terrain"].ToString()) == 0; isPierce = item["pierce through"] == null ? false : byte.Parse(item["pierce through"].ToString()) == 0; flight_speed = float.Parse(item["flight_speed"].ToString()); max_fly = item["max_fly"] == null ? 0 : float.Parse(item["max_fly"].ToString()); skill_type = item.ContainsKey("skill_type") && item["skill_type"] != null ? (SkillCastType)byte.Parse(item["skill_type"].ToString()) : (SkillCastType)0; range_type = (rangeType)byte.Parse(item["range_type"].ToString()); aoe_long = float.Parse(item["aoe_long"].ToString()); aoe_wide = float.Parse(item["aoe_wide"].ToString()); angle = float.Parse(item["angle"].ToString()); site = int.Parse(item["site"].ToString()); seat = int.Parse(item["seat"].ToString()); alertedType = int.Parse(item["alerted_type"].ToString()); length_base = float.Parse(item["length_base"].ToString()); energy = int.Parse(item["energy"].ToString()); target = (TargetState)(int.Parse(item["target"].ToString())); choseTarget = (ChoseTarget)(int.Parse(item["choose_target"].ToString())); interval_time = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["interval_time"]); damage_ratio = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["damage_ratio"]); int[] nodelist = item["nullity_type"] as int[]; if (nodelist != null) { nullity_type = new int[nodelist.Length]; for (int m = 0; m < nodelist.Length; m++) { nullity_type[m] = nodelist[m]; } } int[] influenceList = item["influence_type"] as int[]; if (influenceList != null) { influence_type = influenceList; } // nullity_type = byte.Parse(item["nullity_type"].ToString()); missable = byte.Parse(item["missable"].ToString()); efficiency_time = float.Parse(item["efficiency_time"].ToString()); effect_time = float.Parse(item["effect_time"].ToString()); isFiringPoint = item["firing"] == null ? false : float.Parse(item["firing"].ToString()) == 1; cooling = float.Parse(item["cooling"].ToString()); //cooling = 1; base_num1 = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["base_num1"]); growth_ratio1 = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["growth_ratio1"]); skill_ratio = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["skill_ratio"]); if (skill_ratio == null) { Debug.LogError("skill_ratio null"); } stats = (int[])item["stats"]; buffs_target = item["buffs_target"] as int[]; specialBuffs = (object[])item["special_buffs"]; skill_parts = FSDataNodeTable <SkillNode> .GetSingleton().ParseToLongArray(item["skill_parts"]); add_state = (object[])item["add_state"]; range = float.Parse((item["dist"]).ToString()); battleRange = new SectorRange(range); }
public SkillCastItem(long castStartTime, long castEndTime, SkillCastType type, Skill skill) : base(castStartTime) { CastEndTime = castEndTime; Type = type; Skill = skill; }
public int[] combo_time; //普攻连击限制 //-------------------------------------------------------------------------------------- public override void ParseJson(object jd) { Dictionary <string, object> item = (Dictionary <string, object>)jd; skill_id = item.TryGetLong("skillid"); name = item.TryGetString("name"); hero_id = item.TryGetLong("hero_id"); skill_name = item.TryGetString("skill_name"); des = item.TryGetString("des"); skill_atlas = item.TryGetString("icon_atlas"); skill_icon = item.TryGetString("skill_icon"); spell_motion = item.TryGetString("skill_motion"); sound = item.TryGetString("sound"); hit_sound = item.TryGetString("hit_sound"); target_ceiling = item.TryGetByte("target_ceiling"); attack_type = item.TryGetByte("attack_type"); types = item.TryGetByte("types"); dist = item.TryGetFloat("dist"); castBefore = item.TryGetFloat("end_motion"); if (item.ContainsKey("singular_aoe")) { isSingle = item["singular_aoe"] == null ? true : byte.Parse(item["singular_aoe"].ToString()) == 0; } if (item.ContainsKey("ignore_terrain")) { ignoreTerrain = item["ignore_terrain"] == null ? false : byte.Parse(item["ignore_terrain"].ToString()) == 0; } if (item.ContainsKey("pierce through")) { isPierce = item["pierce through"] == null ? false : byte.Parse(item["pierce through"].ToString()) == 0; } flight_speed = item.TryGetFloat("flight_speed"); if (item.ContainsKey("max_fly")) { max_fly = item["max_fly"] == null ? 0 : float.Parse(item["max_fly"].ToString()); } skill_type = item.ContainsKey("skill_type") && item["skill_type"] != null ? (SkillCastType)byte.Parse(item["skill_type"].ToString()) : (SkillCastType)0; if (item.ContainsKey("range_type")) { range_type = (rangeType)byte.Parse(item["range_type"].ToString()); } aoe_long = item.TryGetFloat("aoe_long"); aoe_wide = item.TryGetFloat("aoe_wide"); angle = item.TryGetFloat("angle"); site = item.TryGetInt("site"); seat = item.TryGetInt("seat"); alertedType = item.TryGetInt("alerted_type"); length_base = item.TryGetFloat("length_base"); energy = item.TryGetInt("energy"); if (item.ContainsKey("choose_target")) { choseTarget = (ChoseTarget)(int.Parse(item["choose_target"].ToString())); } if (item.ContainsKey("rangen_type")) { object[] rangens = item["rangen_type"] as object[]; if (rangens != null) { rangenValue.type = rangens.Length > 0 ? (RangenType)(int.Parse(rangens[0].ToString())) : RangenType.OuterCircle; switch (rangenValue.type) { case RangenType.OuterCircle: rangenValue.outerRadius = rangens.Length > 1 ? float.Parse(rangens[1].ToString()) : 0; break; case RangenType.OuterCircle_InnerCube: rangenValue.outerRadius = rangens.Length > 1 ? float.Parse(rangens[1].ToString()) : 0; rangenValue.length = rangens.Length > 2 ? float.Parse(rangens[2].ToString()) : 0; rangenValue.width = rangens.Length > 3 ? float.Parse(rangens[3].ToString()) : 0; break; case RangenType.OuterCircle_InnerSector: rangenValue.outerRadius = rangens.Length > 1 ? float.Parse(rangens[1].ToString()) : 0; rangenValue.angle = rangens.Length > 2 ? float.Parse(rangens[2].ToString()) : 0; break; case RangenType.OuterCircle_InnerCircle: rangenValue.outerRadius = rangens.Length > 1 ? float.Parse(rangens[1].ToString()) : 0; rangenValue.innerRadius = rangens.Length > 2 ? float.Parse(rangens[2].ToString()) : 0; break; case RangenType.InnerCube: rangenValue.length = rangens.Length > 1 ? float.Parse(rangens[1].ToString()) : 0; rangenValue.width = rangens.Length > 2 ? float.Parse(rangens[2].ToString()) : 0; break; default: break; } } } if (item.ContainsKey("interval_time")) { interval_time = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["interval_time"]); } if (item.ContainsKey("damage_ratio")) { damage_ratio = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["damage_ratio"]); } if (item.ContainsKey("nullity_type")) { int[] nodelist = item["nullity_type"] as int[]; if (nodelist != null) { nullity_type = new int[nodelist.Length]; for (int m = 0; m < nodelist.Length; m++) { nullity_type[m] = nodelist[m]; } } } if (item.ContainsKey("influence_type")) { int[] influenceList = item["influence_type"] as int[]; if (influenceList != null) { influence_type = influenceList; } } missable = item.TryGetByte("missable"); efficiency_time = item.TryGetFloat("efficiency_time"); effect_time = item.TryGetFloat("effect_time"); cooling = item.TryGetFloat("cooling"); if (item.ContainsKey("base_num1")) { base_num1 = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["base_num1"]); } if (item.ContainsKey("growth_ratio1")) { growth_ratio1 = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["growth_ratio1"]); } if (item.ContainsKey("skill_ratio")) { skill_ratio = FSDataNodeTable <SkillNode> .GetSingleton().ParseToFloatArray(item["skill_ratio"]); if (skill_ratio == null) { GameDebug.LogError("skill_ratio null"); } } if (item.ContainsKey("stats")) { stats = item["stats"] as int[]; } if (item.ContainsKey("buffs_target")) { buffs_target = item["buffs_target"] as int[]; } if (item.ContainsKey("special_buffs")) { specialBuffs = (object[])item["special_buffs"]; } if (item.ContainsKey("skill_parts")) { skill_parts = FSDataNodeTable <SkillNode> .GetSingleton().ParseToLongArray(item["skill_parts"]); } if (item.ContainsKey("add_state")) { add_state = item["add_state"] as object[]; } range = item.TryGetFloat("dist"); warn_time = item.TryGetFloat("warn_time"); // nullity_type = byte.Parse(item["nullity_type"].ToString()); animatorTime = item.TryGetFloat("actuation time"); if (item.ContainsKey("life_drain")) { life_drain = item["life_drain"] as object[]; } if (item.ContainsKey("alerted_position")) { alerted_position = item.TryGetInt("alerted_position"); } //-------------------------------------------------------------------------------------- //新加数据 energyvalue = item.TryGetInt("energy_value"); can_move = item.TryGetInt("can_move") == 2; is_turnround = item.TryGetInt("is_turnround") == 1; face_type = (FaceType)item.TryGetInt("face_type"); effect = item.TryGetStringIntArr("effect"); effect_position = item.TryGetIntArr("effect_position"); if (item.ContainsKey("effect_positionxyz") && item["effect_positionxyz"] != null) { object[] effect_positionxyz_temp = item["effect_positionxyz"] as object[]; GetVector3List(effect_positionxyz, effect_positionxyz_temp); } effect_start = item.TryGetDoubleArr("effect_start"); effect_end = item.TryGetDoubleArr("effect_end"); skill_usetype = (SkillUseType)item.TryGetInt("skill_usetype"); bullet_time = item.TryGetDoubleArr("bullet_time"); bullet_id = item.TryGetIntArr("bullet_id"); bul_target_type = item.TryGetIntArr("bul_target_type"); if (item.ContainsKey("bul_target_value") && item["bul_target_value"] != null) { bul_target_value = new List <int[]>(); object[] bul_target_value_temp = item["bul_target_value"] as object[]; for (int i = 0; i < bul_target_value_temp.Length; i++) { int[] objs = bul_target_value_temp[i] as int[]; bul_target_value.Add(objs); } } bul_target_size = item.TryGetIntArr("bul_target_size"); max_bul = item.TryGetIntArr("max_bul"); if (item.ContainsKey("bul_num_single") && item["bul_num_single"] != null) { bul_num_single = new List <int[]>(); object[] bul_num_single_temp = item["bul_num_single"] as object[]; for (int i = 0; i < bul_num_single_temp.Length; i++) { int[] objs = bul_num_single_temp[i] as int[]; bul_num_single.Add(objs); } } bul_start = item.TryGetIntArr("bul_start"); isFiringPoint = item.TryGetInt("firing"); if (item.ContainsKey("firing_xyz") && item["firing_xyz"] != null) { object[] firing_xyz_temp = item["firing_xyz"] as object[]; GetVector3List(firing_xyz, firing_xyz_temp); } bul_end = item.TryGetInt("bul_end"); if (item.ContainsKey("bul_end_xyz") && item["bul_end_xyz"] != null) { object[] bul_end_xyz_temp = item["bul_end_xyz"] as object[]; GetVector3List(bul_end_xyz, bul_end_xyz_temp); } bul_end_angle = item.TryGetIntArr("bul_end_angle"); bul_son_max = item.TryGetIntArr("bul_son_max"); combo_time = item.TryGetIntArr("combo_time"); //-------------------------------------------------------------------------------------- }
public StartSkillCastEvent(long time, Agent agent, Skill skill, int castingTimeMs, SkillCastType castType) : base(time, agent, skill, castingTimeMs) { CastType = castType; }
/// <summary> /// 通过技能类型分类 /// </summary> /// <param name="mCurSkillNode"></param> /// <param name="go"></param> /// <returns></returns> public EffectTrackBase SetSkillCategory(SkillNode mCurSkillNode, GameObject go) { if (mCurSkillNode == null) { return(null); } SkillCastType type = mCurSkillNode.skill_type; EffectTrackBase[] effectBase = go.GetComponents <EffectTrackBase>(); for (int i = 0; i < effectBase.Length; i++) { Destroy(effectBase[i]); } EffectTrackBase et = null; switch (type) { case SkillCastType.MeleeEffect: et = go.AddComponent <EffectMelee>(); et.distance = mCurSkillNode.dist; et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.CastSkill: et = go.AddComponent <EffectMonomer>(); et.destoryTime = mCurSkillNode.max_fly / mCurSkillNode.flight_speed; break; case SkillCastType.FlyEffect: et = go.AddComponent <FlyPropUnit>(); et.destoryTime = mCurSkillNode.efficiency_time; if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.BlinkSkill: et = go.AddComponent <EffectBlink>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.FrontSprintSkill: et = go.AddComponent <EffectForward>(); et.destoryTime = mCurSkillNode.max_fly / mCurSkillNode.flight_speed; et.distance = mCurSkillNode.aoe_long; if (cs.mCurMobalId == MobaObjectID.HeroXiaoxiao) { SkillBuff mGrowBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).Find(a => a.id == (long)SkillBuffType.Grow); et.distance += mGrowBuff == null ? 0 : et.distance * 0.4f; } if (mCurSkillNode.efficiency_time != 0) { et.efficiency_time = mCurSkillNode.efficiency_time; } break; case SkillCastType.ShockWaveSkill: et = go.AddComponent <EffectStraightFly>(); et.destoryTime = mCurSkillNode.flight_speed == 0 ? mCurSkillNode.efficiency_time : mCurSkillNode.max_fly / mCurSkillNode.flight_speed; et.efficiency_time = mCurSkillNode.efficiency_time; et.distance = mCurSkillNode.aoe_long; break; case SkillCastType.TrackSkill: et = go.AddComponent <EffectTrack>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.CenterSkill: et = go.AddComponent <EffectAOECenter>(); if (mCurSkillNode.aoe_long != 0) { (et as EffectAOECenter).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe; et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.TrapSkill: break; case SkillCastType.SummonSkill: et = go.AddComponent <EffectSummon>(); break; case SkillCastType.AoeSKill: et = go.AddComponent <EffectAOE>(); if (mCurSkillNode.aoe_long != 0) { (et as EffectAOE).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe; et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.LinkSkill: et = go.AddComponent <EffectLink>(); et.destoryTime = mCurSkillNode.efficiency_time; et.distance = mCurSkillNode.aoe_long; break; case SkillCastType.ToSelfCenterSkill: et = go.AddComponent <EffectCircle>(); if (mCurSkillNode.aoe_long != 0) { (et as EffectCircle).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe; et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.ChainSkill: et = go.AddComponent <EffectChain>(); et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.Boom: et = go.AddComponent <ThrowEffect>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.Bounce: et = go.AddComponent <EffectBounce>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.MultiTrackSkill: et = go.AddComponent <EffectTrack>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.MoveShrinkSkill: et = go.AddComponent <EffectMoveDiffusionShrink>(); break; case SkillCastType.BurrowSkill: et = go.AddComponent <EffectBurrow>(); if (mCurSkillNode.aoe_long != 0) { (et as EffectBurrow).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe; et.distance = mCurSkillNode.aoe_long; } et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.JumpChopSkill: et = go.AddComponent <EffectJumpChop>(); et.destoryTime = mCurSkillNode.efficiency_time; et.distance = mCurSkillNode.aoe_long; break; case SkillCastType.MultiBounce: et = go.AddComponent <EffectMultiBounce>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.GenerateObstacle: et = go.AddComponent <EffectGenerateObstacle>(); et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.DiffuseSkill: et = go.AddComponent <EffectDiffuse>(); et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.MultiTractionSkill: et = go.AddComponent <EffectTraction>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } break; case SkillCastType.LaunchDiffuseMeterSkill: et = go.AddComponent <EffectLaunchDiffuseMeter>(); et.destoryTime = mCurSkillNode.efficiency_time; break; case SkillCastType.SnakeSteerSkill: et = go.AddComponent <EffectSnakeSteer>(); if (mCurSkillNode.aoe_long != 0) { et.distance = mCurSkillNode.aoe_long; } break; default: break; } return(et); }