/// <summary> /// 获取设置状态 /// </summary> public static void SetSkillStatus(ref List <SkillStatusInfo> lstatus, string strStatus) { if (lstatus == null) { lstatus = new List <SkillStatusInfo>(); } if (string.IsNullOrEmpty(strStatus) == true || strStatus == "0") { return; } int length = NdUtil.GetLength(strStatus); for (int i = 0; i < length; ++i) { int statusid = NdUtil.GetIntValue(strStatus, i); s_statusInfo stainfo = GetSkillStatus(statusid); if (stainfo != null) { SkillStatusInfo ss = new SkillStatusInfo(); if (SetSkillStatus(stainfo, ref ss) == true) { lstatus.Add(ss); } } } }
private void SetStatusInfo(SkillStatusInfo s, bool isaction) { if (s == null) { m_StatusInfo = null; } else { if (m_StatusInfo == null) { m_StatusInfo = new StatusInfo(); } m_StatusInfo.State = StatusState.Add; m_StatusInfo.Type = m_type; m_StatusInfo.effectid = s.m_effectid; m_StatusInfo.position = s.m_position; m_StatusInfo.time = s.m_time * 0.001f; m_StatusInfo.exSkill1 = s.m_skill1type; m_StatusInfo.exSkill2 = s.m_skill2type; m_StatusInfo.exSkillLevel1 = s.m_level1; m_StatusInfo.exSkillLevel2 = s.m_level2; m_StatusInfo.Releasescentid = s.m_releasesceneid; m_StatusInfo.effect = s.m_effect; m_StatusInfo.SpePriority = s.m_RelpaceInfo.m_spepriority; m_StatusInfo.isAction = isaction; #if UNITY_EDITOR_LOG //Debug.Log("添加状态:" + s.m_name + "," + m_StatusInfo.effectid + "," + m_StatusInfo.position + "," + Time.time); #endif } }
public override void Finish() { base.Finish(); SkillStatusInfo ssi = SkillM.GetWetBodyStatusInfo(); m_LifePrent.m_Status.AddStatus(0, 0, ssi); }
public override void Init(int SceneID, int ResalseSceneID, int SkillID, SkillStatusInfo Info) { m_OverData = StatusOverAction.CD; m_AddRole = AddRule.Replace; m_type = StatusType.Shield; m_SkillImmune = ImmuneSkill.Normal; m_InterruptSkill = false; m_SelfInterruptSkill = false; base.Init(SceneID, ResalseSceneID, SkillID, Info); }
/// <summary> /// 设置状态 /// </summary> private static bool SetSkillStatus(s_statusInfo stainfo, ref SkillStatusInfo Info) { if (stainfo == null || Info == null) { return(false); } Info.m_persistence = stainfo.persistence; Info.m_id = stainfo.id; Info.m_name = stainfo.name; Info.m_type = stainfo.type; if (string.IsNullOrEmpty(stainfo.effect) == false && stainfo.effect != "0") { int length = NdUtil.GetLength(stainfo.effect); for (int i = 0; i < length; ++i) { Info.m_effect.Add(NdUtil.GetIntValue(stainfo.effect, i)); } } Info.m_effectlevel = stainfo.effectlevel; Info.m_time = stainfo.time; Info.m_timeinterval = stainfo.timeinterval; Info.m_effectid = stainfo.effectid; Info.m_condition = stainfo.condition; Info.m_position = stainfo.position; Info.m_data0 = stainfo.data0; Info.m_data1 = stainfo.data1; Info.m_skill1type = stainfo.skill1type; Info.m_level1 = stainfo.level1; Info.m_skill2type = stainfo.skill2type; Info.m_level2 = stainfo.level2; Info.m_bufftype = stainfo.bufftype; s_statusreplaceInfo replace = GetSkillStatusReplace(Info.m_type, Info.m_effect.Count > 0 ? Info.m_effect[0] : 0, Info.m_bufftype); if (replace != null) { Info.m_RelpaceInfo = new SkillStatusReplaceInfo(); Info.m_RelpaceInfo.m_id = replace.id; Info.m_RelpaceInfo.m_statustype = replace.statustype; Info.m_RelpaceInfo.m_effect = replace.effect; Info.m_RelpaceInfo.m_name = replace.name; Info.m_RelpaceInfo.m_type = replace.type; Info.m_RelpaceInfo.m_compatible = replace.compatible; Info.m_RelpaceInfo.m_reppriority = replace.reppriority; Info.m_RelpaceInfo.m_spepriority = replace.spepriority; Info.m_RelpaceInfo.m_bufftype = replace.bufftype; Info.m_RelpaceInfo.m_isaction = replace.isaction; } else { Debug.Log("xxxx " + Info.m_name); } return(true); }
public override void Init(int SceneID, int ResalseSceneID, int SkillID, SkillStatusInfo Info) { m_OverData = StatusOverAction.Hurt; m_AddRole = AddRule.ADD; m_type = StatusType.KickedBack; m_SkillImmune = ImmuneSkill.Normal; m_InterruptSkill = false; m_SelfInterruptSkill = false; m_selfRuptType = SelfStatusInterrupt.PhyRupt; base.Init(SceneID, ResalseSceneID, SkillID, Info); }
public override void Init(int SceneID, int ResalseSceneID, int SkillID, SkillStatusInfo Info) { m_OverData = StatusOverAction.CD; m_AddRole = AddRule.Replace; m_type = StatusType.ImmunityMagic; m_SkillImmune = ImmuneSkill.MagicSkill; m_InterruptSkill = false; m_SelfInterruptSkill = false; m_AntiInterruptStatus = AntiInterruptStatus.Magic; base.Init(SceneID, ResalseSceneID, SkillID, Info); }
public override void Init(int SceneID, int ResalseSceneID, int SkillID, SkillStatusInfo Info) { m_OverData = StatusOverAction.CD | StatusOverAction.Die; m_AddRole = AddRule.Replace; m_type = StatusType.TearOfMermaid; m_SkillImmune = ImmuneSkill.Normal; m_InterruptSkill = false; m_SelfInterruptSkill = false; m_AntiInterruptStatus = AntiInterruptStatus.Normal; base.Init(SceneID, ResalseSceneID, SkillID, Info); mOwner = CM.GetLifeM(SceneID, LifeMType.SOLDIER) as Role; mStatusActive = false; }
/// <summary> /// 获取湿身状态数据 /// </summary> public static SkillStatusInfo GetWetBodyStatusInfo() { s_statusInfo stainfo = GetSkillStatus(999999); if (stainfo != null) { SkillStatusInfo Info = new SkillStatusInfo(); if (SetSkillStatus(stainfo, ref Info) == true) { return(Info); } } return(null); }
public bool CheckCreateAction(SkillStatusInfo Info) { foreach (StatusM status in m_RoleStatus) { if (status.CheckHaveStatus() && status.ReplaceInfo.m_type == 2) { if (status.ReplaceInfo.m_statustype != Info.m_type && status.ReplaceInfo.m_compatible == 1 && status.ReplaceInfo.m_isaction == 1) { float longduratio = status.GetLongDuration(); if (longduratio > Info.m_time * 0.001f) { return(false); } } } } return(true); }
/// <summary> /// 状态产生判断 /// </summary> private bool CheckCondition(NDAttribute attr, SkillStatusInfo StatusInfo) { if (attr == null || StatusInfo == null) { return(false); } //为0 直接产生状态。 EffectType s = (EffectType)StatusInfo.m_condition; if (s == EffectType.None) { return(true); } int data0 = StatusInfo.m_data0; int data1 = StatusInfo.m_data1; int value = attr.GetAttrData(s); if (value > data0 && value <= data1) { return(true); } return(false); }
public void Init(int SceneID, int SkillType, int ResalseSceneID, SkillStatusInfo Info) { m_StatusType = (StatusType)Info.m_type; m_ResalseSceneID = ResalseSceneID; m_SceneID = SceneID; m_SkillType = SkillType; m_Name = Info.m_name; m_Bfirst = false; // #if UNITY_EDITOR_LOG //Debug.Log("添加状态: " + m_Name + "," + Info.m_effectid); #endif m_NcdOver = (Info.m_time == 0) ? true: false; m_CountTime = 0.0f; m_Duration = Info.m_time * 0.001f; m_Timeinterval = Info.m_timeinterval * 0.001f; m_persistence = Info.m_persistence; m_info = Info; if (Info.m_effect != null && Info.m_effect.Count > 0) { m_AttrData.AddRange(Info.m_effect); } }
/// <summary> /// 添加状态,SceneID 释放技能对象的SceneID /// </summary> /// <returns>true :该状态会打断技能 false : 该状态不打断技能</returns> public bool AddStatus(int ResalseSceneID, int SkillID, SkillStatusInfo Info) { StatusType s = (StatusType)Info.m_type; SetAttrChange(); //状态叠加规则 if (Info.m_RelpaceInfo.m_type == 1) { } else if (Info.m_RelpaceInfo.m_type == 2) //控制类状态 { if (Info.m_RelpaceInfo.m_compatible == 0) { foreach (StatusM status in m_RoleStatus) { if (status.CheckHaveStatus() && status.ReplaceInfo.m_type == 2) { if (status.ReplaceInfo.m_compatible == 0) { if (status.ReplaceInfo.m_reppriority > Info.m_RelpaceInfo.m_reppriority) { return(false); } } } } foreach (StatusM status in m_RoleStatus) { if (status.CheckHaveStatus() && status.ReplaceInfo.m_type == 2) { status.ClearStatus(); } } } else { foreach (StatusM status in m_RoleStatus) { if (status.ReplaceInfo.m_type == 2) { if (status.CheckHaveStatus() && status.ReplaceInfo.m_compatible == 0) { return(false); } } } } } else { } // StatusM Data = FindStatusM(s); if (Data != null) { if (Data.AddStatus(ResalseSceneID, SkillID, Info)) { Data.AddStatusEffect(Info, SkillID, CheckCreateAction(Info)); return(Data.InterruptSkill()); } } else { Data = StatusFactory.Create(m_SceneID, ResalseSceneID, SkillID, Info); if (Data != null) { Data.Init(m_SceneID, ResalseSceneID, SkillID, Info); m_RoleStatus.Add(Data); Info.m_releasesceneid = ResalseSceneID; Data.AddStatusEffect(Info, SkillID, CheckCreateAction(Info)); Life life = CM.GetAllLifeM(m_SceneID, LifeMType.ALL); if (life != null) { if (Info.m_bufftype == 1) { life.ShowBuff(Info.m_name); } else { life.ShowDebuff(Info.m_name); } } return(Data.InterruptSkill()); } } return(false); }
/// <summary> /// 确认能否添加状态。(状态放打断机制) /// </summary> /// <returns>true :该状态会打断技能 false : 该状态不打断技能</returns> public bool CheckCanAddStatus(int ResalseSceneID, int SkillID, AttackType SkillType, SkillStatusInfo Info) { StatusInterrupt interrputtype = StatusInterrupt.Phy; if (SkillType == AttackType.Physical) { interrputtype = StatusInterrupt.Phy; } else if (SkillType == AttackType.Magic) { interrputtype = StatusInterrupt.Magic; } else { return(true); } StatusM Data = StatusFactory.Create(m_SceneID, ResalseSceneID, SkillID, Info); //打断的技能 if (Data != null /*&& Data.InterruptSkill() == true*/) { for (int i = 0; i < m_RoleStatus.Count; i++) { StatusM status = m_RoleStatus[i]; if (status == null) { continue; } if (status.CheckInterruptStatus(interrputtype) == true) { return(false); } } } return(true); }
/// <summary> /// 初始化 /// </summary> public virtual void Init(int SceneID, int ResalseSceneID, int SkillType, SkillStatusInfo Info) { m_SceneID = SceneID; AddStatus(ResalseSceneID, SkillType, Info); }
/// <summary> /// 叠加一个状态 /// </summary> /// public bool AddStatus(int ResalseSceneID, int SkillType, SkillStatusInfo Info) { m_bufftype = Info.m_bufftype; //为空 添加 Info.m_releasesceneid = ResalseSceneID; if (m_StatusData.Count == 0) { StatusAction status = new StatusAction(); status.Init(m_SceneID, SkillType, ResalseSceneID, Info); m_StatusData.Add(status); //AddStatusEffect(Info , SkillType); DoSkillStatus(0.0f); m_ReplaceInfo = Info.m_RelpaceInfo; return(true); } else { //状态叠加新规则,根据技能类型和技能等级做判断 StatusAction s = FindSameSkillTypeStaus(SkillType); if (s != null) { if (s.StatusInfo.m_effectlevel < Info.m_effectlevel) { s.SetDone(); StatusAction status = new StatusAction(); status.Init(m_SceneID, SkillType, ResalseSceneID, Info); m_StatusData.Add(status); DoSkillStatus(0.0f); return(true); } } else { StatusAction status = new StatusAction(); status.Init(m_SceneID, SkillType, ResalseSceneID, Info); m_StatusData.Add(status); DoSkillStatus(0.0f); } /*if(m_AddRole ==AddRule.ADD) //叠加 * { * StatusAction s = FindSameStaus(ResalseSceneID, SkillType); * if(s == null) * { * StatusAction status = new StatusAction(); * status.Init(m_SceneID,SkillType,ResalseSceneID,Info); * m_StatusData.Add(status); * DoSkillStatus(0.0f); * } * else * { * s.ResetTime(Info.m_time); * } * } * else if(m_AddRole ==AddRule.Replace) //替换 * { * m_StatusData.Clear(); * StatusAction status = new StatusAction(); * status.Init(m_SceneID,SkillType,ResalseSceneID,Info); * m_StatusData.Add(status); * DoSkillStatus(0.0f); * } * else * { * Debug.LogError("出现第三种规则,异常"); * }*/ } return(false); }
/// <summary> /// 添加状态,通知表现状态效果 /// </summary> public void AddStatusEffect(SkillStatusInfo s, int SkillType, bool isaction) { SetStatusInfo(s, isaction); SetStatusEvent(SkillType); }
/// <summary> /// 创建状态 /// </summary> /// <param name="Core">雷达拥有者的核心信息</param> /// <param name="f">雷达拥有视野</param> public static StatusM Create(int SceneID, int ResalseSceneID, int SkillID, SkillStatusInfo Info) { if (Info == null) { return(null); } StatusType s = (StatusType)Info.m_type; StatusM status = null; switch (s) { case StatusType.AddAttr: status = new AddAttrStatus(); break; case StatusType.Vertigo: status = new VertigoStatus(); break; case StatusType.Silence: status = new SilenceStatus(); break; case StatusType.Vampire: status = new VampireStatus(); break; case StatusType.Rebound: status = new ReboundStatus(); break; case StatusType.Invisible: status = new InvisibleStatus(); break; case StatusType.Invincible: status = new InvincibleStatus(); break; case StatusType.Transfiguration: status = new TransfigurationStatus(); break; case StatusType.Summon: status = new SummonStatus(); break; case StatusType.ClickFly: status = new ClickFlyStatus(); break; case StatusType.AbsorbDamage: status = new AbsorbDamageStatus(); break; case StatusType.Virtual: status = new VirtualStatus(); break; case StatusType.Shield: status = new ShieldStatus(); break; case StatusType.Sputtering: status = new SputteringStatus(); break; case StatusType.Damnation: status = new DamnationStatus(); break; case StatusType.ImmunePhysical: status = new ImmunePhysicalStatus(); break; case StatusType.ImmunityMagic: status = new ImmunityMagicStatus(); break; case StatusType.IceBuild: status = new IceBuildStatus(); break; case StatusType.Ring: status = new RingStatus(); break; case StatusType.Taunt: status = new TauntStatus(); break; case StatusType.StaticElec: status = new StaticElecStatus(); break; case StatusType.Still: status = new StillStatus(); break; case StatusType.Squash: status = new SquashStatus(); break; case StatusType.Sauna: status = new SaunaStatus(); break; case StatusType.KTV: status = new KTVStatus(); break; case StatusType.ImmuneState: status = new ImmuneState(); break; case StatusType.NoSquash: status = new NoSquashStatus(); break; case StatusType.paralysis: status = new ParalysisStatus(); break; case StatusType.PhyAnitInterrupt: status = new PhyAnitInterruptStatus(); break; case StatusType.MagAnitInterrupt: status = new MagAnitInterruptStatus(); break; case StatusType.Cleanse: status = new CleanseStatus(); break; case StatusType.Charm: status = new CharmStatus(); break; case StatusType.BuildDestory: status = new BuildDestoryStatus(); break; case StatusType.Mark: status = new MarkStatus(); break; case StatusType.RunAway: status = new RunAwayStaus(); break; case StatusType.FakeTaunt: status = new FakeTauntStatus(); break; case StatusType.Die: status = new DieStatus(); break; case StatusType.Turn: status = new TurnStatus(); break; case StatusType.WetBody: status = new WetBodyStatus(); break; case StatusType.Berserker: status = new BerserkerStatus(); break; case StatusType.Paralyze: status = new ParalyzeStatus(); break; case StatusType.DieMark: status = new DieMarkStatus(); break; case StatusType.Sleep: status = new SleepStatus(); break; case StatusType.TearOfMermaid: status = new TearOfMermaidStatus(); break; case StatusType.Trapped: status = new TrapedStatus(); break; case StatusType.KickedBack: status = new KickedBackStatus(); break; case StatusType.WhipCorpse: status = new WhipCorpseStatus(); break; case StatusType.FireShield: status = new FireShieldStatus(); break; default: break; } return(status); }