예제 #1
0
파일: SkillM.cs 프로젝트: 741645596/batgame
    /// <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);
                }
            }
        }
    }
예제 #2
0
 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
     }
 }
예제 #3
0
    public override void Finish()
    {
        base.Finish();
        SkillStatusInfo ssi = SkillM.GetWetBodyStatusInfo();

        m_LifePrent.m_Status.AddStatus(0, 0, ssi);
    }
예제 #4
0
 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);
 }
예제 #5
0
파일: SkillM.cs 프로젝트: 741645596/batgame
    /// <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);
    }
예제 #6
0
 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);
 }
예제 #7
0
 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);
 }
예제 #8
0
    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;
    }
예제 #9
0
파일: SkillM.cs 프로젝트: 741645596/batgame
    /// <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);
    }
예제 #10
0
 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);
 }
예제 #11
0
    /// <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);
    }
예제 #12
0
 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);
     }
 }
예제 #13
0
    /// <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);
    }
예제 #14
0
    /// <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);
    }
예제 #15
0
 /// <summary>
 /// 初始化
 /// </summary>
 public virtual void Init(int SceneID, int ResalseSceneID, int SkillType, SkillStatusInfo Info)
 {
     m_SceneID = SceneID;
     AddStatus(ResalseSceneID, SkillType, Info);
 }
예제 #16
0
    /// <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);
    }
예제 #17
0
 /// <summary>
 /// 添加状态,通知表现状态效果
 /// </summary>
 public void AddStatusEffect(SkillStatusInfo s, int SkillType, bool isaction)
 {
     SetStatusInfo(s, isaction);
     SetStatusEvent(SkillType);
 }
예제 #18
0
    /// <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);
    }