Beispiel #1
0
        /// <summary>
        /// 使用技能,这个需要手动调用
        /// </summary>
        /// <param name="self"></param>
        /// <param name="skillId"></param>
        /// <returns></returns>
        public static UseSkillRet UseSkill(SkillObj self, int skillId)
        {
            UseSkillRet ret = UseSkillRet.Success;

            if (BattleModule.IsActionLimited(self, ActionLimitType.UseSkill))
            {
                return(UseSkillRet.ActionLimit);
            }
            if (self.IsDead())
            {
                return(UseSkillRet.Dead);
            }
            //检查特殊状态
            if (!self.CanUseSkill(skillId))
            {
                return(UseSkillRet.None);
            }
            SkillConfig_New skillConfig = self.GetSkillConfig(skillId);

            if (skillConfig == null)
            {
                return(UseSkillRet.None);
            }
            //检查技能消耗
            if (!UseSkillCheckDeplete(self, skillConfig))
            {
                return(UseSkillRet.Deplete);
            }
            string skillLogicId = self.GetSkillLogicId(skillConfig);

            if (!SkillLogics.ContainsKey(skillLogicId))
            {
                return(UseSkillRet.None);
            }

            SkillLogic skillLogic = SkillLogics[skillLogicId];

            if (skillLogic != null)
            {
                //检查CD
                if (!skillLogic.CheckCD(self, skillConfig))
                {
                    string key = self.GetSkillCDKey(skillConfig);
                    self.LogInfo("skill:[{0}] CD ing [{1}]:[{2}]".F(self.GetSkillID(skillConfig), key, self.GetCD(key)));
                    return(UseSkillRet.CD);
                }
                SkillInfo_New skillInfo = skillLogic.Begin(self, skillConfig);
                if (skillInfo != null)
                {
                    skillLogic.BeginCD(self, skillInfo, skillConfig);
                    self.AddSkillList(skillInfo);
                    self.LogInfo("Skill Begin Successed [{0}]".F(skillId));
                }
                else
                {
                    self.LogInfo("Skill Begin Failed [{0}]".F(skillId));
                }
            }
            return(ret);
        }
Beispiel #2
0
        /// <summary>
        /// 单人技能的tick,这个需要手动调用
        /// </summary>
        /// <param name="self"></param>
        public static void Tick_Battle(SkillObj self)
        {
            if (self.IsDead())
            {
                return;
            }
            var skillList = self.GetSkillList(true);
            var buffList  = self.GetBuffList(true);
            var CDKeyList = self.GetCDKeyList();

            //buff
            if (buffList != null)
            {
                foreach (var buffInfo in buffList)
                {
                    BuffLogic buffLogic = GetBuffLogic(buffInfo, self);
                    if (buffLogic != null)
                    {
                        int            buffId     = self.GetBuffID(buffInfo);
                        BuffConfig_New buffConfig = self.GetBuffConfig(buffId);
                        buffLogic.Tick(self, buffInfo, buffConfig);
                    }
                    else
                    {
                        self.LogInfo("something error {0}".F(self.GetBuffID(buffInfo)));
                    }
                }
            }
            //技能
            if (skillList != null)
            {
                foreach (var skillInfo in skillList)
                {
                    SkillLogic skillLogic = GetSkillLogic(skillInfo, self);
                    if (skillLogic != null)
                    {
                        int             skillId     = self.GetSkillID(skillInfo);
                        SkillConfig_New skillConfig = self.GetSkillConfig(skillId);
                        skillLogic.Tick(self, skillInfo, skillConfig);
                    }
                    else
                    {
                        self.LogInfo("something error2 {0}".F(self.GetSkillID(skillInfo)));
                    }
                }
            }
            //CD
            if (CDKeyList != null)
            {
                foreach (var key in CDKeyList)
                {
                    self.SetCD(key, self.GetCD(key) - self.GetDeltaTime());
                }
            }
        }
Beispiel #3
0
        public static bool IsActionLimited(SkillObj self, ActionLimitType limit)
        {
            var skillList = self.GetSkillList();
            var buffList  = self.GetBuffList();

            //buff
            if (buffList != null)
            {
                foreach (var buffInfo in buffList)
                {
                    BuffLogic buffLogic = GetBuffLogic(buffInfo, self);
                    if (buffLogic != null)
                    {
                        int            buffId     = self.GetBuffID(buffInfo);
                        BuffConfig_New buffConfig = self.GetBuffConfig(buffId);
                        if (buffLogic.IsActionLimited(self, limit, buffInfo, buffConfig))
                        {
                            return(true);
                        }
                    }
                    else
                    {
                        self.LogInfo("something error {0}".F(self.GetBuffID(buffInfo)));
                    }
                }
            }
            //技能
            if (skillList != null)
            {
                foreach (var skillInfo in skillList)
                {
                    SkillLogic skillLogic = GetSkillLogic(skillInfo, self);
                    if (skillLogic != null)
                    {
                        int             skillId     = self.GetSkillID(skillInfo);
                        SkillConfig_New skillConfig = self.GetSkillConfig(skillId);
                        if (skillLogic.IsActionLimited(self, limit, skillInfo, skillConfig))
                        {
                            return(true);
                        }
                    }
                    else
                    {
                        self.LogInfo("something error2 {0}".F(self.GetSkillID(skillInfo)));
                    }
                }
            }
            return(false);
        }
Beispiel #4
0
        private static SkillLogic GetSkillLogic(SkillInfo_New skillInfo, SkillObj logObj)
        {
            int             skillId    = logObj.GetSkillID(skillInfo);
            SkillConfig_New buffConfig = logObj.GetSkillConfig(skillId);

            if (buffConfig == null)
            {
                logObj.LogInfo("SkillConfig not found skillid[{0}]".F(skillId));
                return(null);
            }
            string skillLogicId = logObj.GetSkillLogicId(buffConfig);

            if (!SkillLogics.ContainsKey(skillLogicId))
            {
                logObj.LogInfo("SkillLogic not found skillid[{0}] SkillLogicId[{1}]".F(skillId, skillLogicId));
                return(null);
            }
            SkillLogic skillLogic = SkillLogics[skillLogicId];

            return(skillLogic);
        }
Beispiel #5
0
        /// <summary>
        /// 造成伤害或治疗
        /// </summary>
        /// <param name="tarObj"></param>
        /// <param name="srcObj"></param>
        /// <param name="damage">大于0是伤害,小于0是治疗</param>
        public static void DamageTarget(SkillObj tarObj, SkillObj srcObj, Damage damage)
        {
            SkillObj realSrcObj = srcObj;

            if (tarObj == null || tarObj.IsDead())
            {
                return;
            }
            if (realSrcObj != null && damage.srcId > 0 && realSrcObj.GetID() != damage.srcId)
            {
                realSrcObj = tarObj.GetSkillObj(damage.srcId);
            }
            BattleModule.CalcDamage(tarObj, realSrcObj, damage);
            //先修正伤害
            BattleModule.DamageFix(tarObj, realSrcObj, damage);
            //质量和造成伤害都是这个
            //造成伤害
            if (damage.value >= 0)
            {
                tarObj.OnDamage(damage, realSrcObj);
            }
            else
            {
                tarObj.OnDamage(damage, realSrcObj);
            }
            //检查技能与BUFF的相应触发
            if (realSrcObj != null && !realSrcObj.IsDead())
            {
                var srcSkillList = realSrcObj.GetSkillList();
                var srcBuffList  = realSrcObj.GetBuffList();
                //Source skill fix
                if (srcSkillList != null)
                {
                    foreach (var skillInfo in srcSkillList)
                    {
                        SkillLogic skillLogic = GetSkillLogic(skillInfo, realSrcObj);
                        int        skillId    = realSrcObj.GetSkillID(skillInfo);
                        if (skillLogic != null)
                        {
                            SkillConfig_New skillConfig = realSrcObj.GetSkillConfig(skillId);
                            if (damage.value >= 0)
                            {
                                skillLogic.OnDamageTarget(realSrcObj, tarObj, damage, skillInfo, skillConfig);
                            }
                            else
                            {
                                skillLogic.OnHealTarget(realSrcObj, tarObj, damage, skillInfo, skillConfig);
                            }
                        }
                        else
                        {
                            realSrcObj.LogInfo("something error in BattleModule.DamageTarget src skill:[{0}]".F(skillId));
                        }
                    }
                }
                //Source buff fix
                if (srcBuffList != null)
                {
                    foreach (var buffInfo in srcBuffList)
                    {
                        BuffLogic buffLogic = GetBuffLogic(buffInfo, realSrcObj);
                        int       buffId    = realSrcObj.GetBuffID(buffInfo);
                        if (buffLogic != null)
                        {
                            BuffConfig_New buffConfig = realSrcObj.GetBuffConfig(buffId);
                            if (damage.value >= 0)
                            {
                                buffLogic.OnDamageTarget(realSrcObj, tarObj, damage, buffInfo, buffConfig);
                            }
                            else
                            {
                                buffLogic.OnHealTarget(realSrcObj, tarObj, damage, buffInfo, buffConfig);
                            }
                        }
                        else
                        {
                            realSrcObj.LogInfo("something error in BattleModule.DamageTarget src buff:[{0}]".F(buffId));
                        }
                    }
                }
            }

            var tarSkillList = tarObj.GetSkillList();
            var tarBuffList  = tarObj.GetBuffList();

            //Target skill fix
            if (!tarObj.IsDead())
            {
                if (tarSkillList != null)
                {
                    foreach (var skillInfo in tarSkillList)
                    {
                        SkillLogic skillLogic = GetSkillLogic(skillInfo, tarObj);
                        int        skillId    = tarObj.GetSkillID(skillInfo);
                        if (skillLogic != null)
                        {
                            SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                            if (damage.value >= 0)
                            {
                                skillLogic.OnBeHurt(tarObj, realSrcObj, damage, skillInfo, skillConfig);
                            }
                            else
                            {
                                skillLogic.OnBeHeal(tarObj, realSrcObj, damage, skillInfo, skillConfig);
                            }
                        }
                        else
                        {
                            tarObj.LogInfo("something error in BattleModule.DamageTarget tar skill:[{0}]".F(skillId));
                        }
                    }
                }
                //Target buff fix
                if (tarBuffList != null)
                {
                    foreach (var buffInfo in tarBuffList)
                    {
                        BuffLogic buffLogic = GetBuffLogic(buffInfo, tarObj);
                        int       buffId    = tarObj.GetBuffID(buffInfo);
                        if (buffLogic != null)
                        {
                            BuffConfig_New buffConfig = tarObj.GetBuffConfig(buffId);
                            if (damage.value >= 0)
                            {
                                buffLogic.OnBeHurt(tarObj, realSrcObj, damage, buffInfo, buffConfig);
                            }
                            else
                            {
                                buffLogic.OnBeHeal(tarObj, realSrcObj, damage, buffInfo, buffConfig);
                            }
                        }
                        else
                        {
                            tarObj.LogInfo("something error in BattleModule.DamageTarget tar buff:[{0}]".F(buffId));
                        }
                    }
                }
            }

            if (tarObj.IsDead())
            {
                if (tarSkillList != null)
                {
                    foreach (var skillInfo in tarSkillList)
                    {
                        SkillLogic skillLogic = GetSkillLogic(skillInfo, tarObj);
                        int        skillId    = tarObj.GetSkillID(skillInfo);
                        if (skillLogic != null)
                        {
                            SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                            skillLogic.OnDie(tarObj, realSrcObj, skillInfo, skillConfig);
                        }
                        else
                        {
                            tarObj.LogInfo("something error in BattleModule.DamageTarget tar skill:[{0}]".F(skillId));
                        }
                    }
                }
                //Target buff fix
                if (tarBuffList != null)
                {
                    foreach (var buffInfo in tarBuffList)
                    {
                        BuffLogic buffLogic = GetBuffLogic(buffInfo, tarObj);
                        int       buffId    = tarObj.GetBuffID(buffInfo);
                        if (buffLogic != null)
                        {
                            BuffConfig_New buffConfig = tarObj.GetBuffConfig(buffId);
                            buffLogic.OnDie(tarObj, realSrcObj, buffInfo, buffConfig);
                        }
                        else
                        {
                            tarObj.LogInfo("something error in BattleModule.DamageTarget tar buff:[{0}]".F(buffId));
                        }
                    }
                }
                bool ret = tarObj.OnDie(realSrcObj);
            }
        }
Beispiel #6
0
 private static void DamageFix(SkillObj tarObj, SkillObj srcObj, Damage damage)
 {
     if (tarObj == null)
     {
         return;
     }
     if (srcObj != null)
     {
         var srcSkillList = srcObj.GetSkillList();
         var srcBuffList  = srcObj.GetBuffList();
         //Source skill fix
         if (srcSkillList != null)
         {
             foreach (var skillInfo in srcSkillList)
             {
                 SkillLogic skillLogic = GetSkillLogic(skillInfo, srcObj);
                 int        skillId    = srcObj.GetSkillID(skillInfo);
                 if (skillLogic != null)
                 {
                     SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
                     skillLogic.DamageTargetFix(srcObj, tarObj, damage, skillInfo, skillConfig);
                 }
                 else
                 {
                     srcObj.LogInfo("something error in BattleModule.DamageFix src skill:[{0}]".F(skillId));
                 }
             }
         }
         //Source buff fix
         if (srcBuffList != null)
         {
             foreach (var buffInfo in srcBuffList)
             {
                 BuffLogic buffLogic = GetBuffLogic(buffInfo, srcObj);
                 int       buffId    = srcObj.GetBuffID(buffInfo);
                 if (buffLogic != null)
                 {
                     BuffConfig_New skillConfig = srcObj.GetBuffConfig(buffId);
                     buffLogic.DamageTargetFix(srcObj, tarObj, damage, buffInfo, skillConfig);
                 }
                 else
                 {
                     srcObj.LogInfo("something error in BattleModule.DamageFix src buff:[{0}]".F(buffId));
                 }
             }
         }
     }
     {
         var tarBuffList  = tarObj.GetBuffList();
         var tarSkillList = tarObj.GetSkillList();
         //Target skill fix
         if (tarSkillList != null)
         {
             foreach (var skillInfo in tarSkillList)
             {
                 SkillLogic skillLogic = GetSkillLogic(skillInfo, tarObj);
                 int        skillId    = tarObj.GetSkillID(skillInfo);
                 if (skillLogic != null)
                 {
                     SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                     skillLogic.BeHurtDamageFix(tarObj, srcObj, damage, skillInfo, skillConfig);
                 }
                 else
                 {
                     tarObj.LogInfo("something error in BattleModule.DamageFix tar skill:[{0}]".F(skillId));
                 }
             }
         }
         //Target buff fix
         if (tarBuffList != null)
         {
             foreach (var buffInfo in tarBuffList)
             {
                 BuffLogic buffLogic = GetBuffLogic(buffInfo, tarObj);
                 int       buffId    = tarObj.GetBuffID(buffInfo);
                 if (buffLogic != null)
                 {
                     BuffConfig_New skillConfig = tarObj.GetBuffConfig(buffId);
                     buffLogic.BeHurtDamageFix(tarObj, srcObj, damage, buffInfo, skillConfig);
                 }
                 else
                 {
                     tarObj.LogInfo("something error in BattleModule.DamageFix tar buff:[{0}]".F(buffId));
                 }
             }
         }
     }
 }
Beispiel #7
0
        private BattleInitClass()
        {
            var asm = Assembly.GetExecutingAssembly();

            foreach (var b in asm.GetTypes())
            {
                if (b.IsSubclassOf(typeof(SkillLogic)))
                {
                    //自动填充SkillLogics
                    SkillLogic ins = asm.CreateInstance(b.FullName) as SkillLogic;
                    BattleModule.SkillLogics.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(SkillLogicState)))
                {
                    //自动填充SkillLogicStates
                    SkillLogicState ins = asm.CreateInstance(b.FullName) as SkillLogicState;
                    BattleModule.SkillLogicStates.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(TargetSelect)))
                {
                    //自动填充TargetSelect
                    TargetSelect ins = asm.CreateInstance(b.FullName) as TargetSelect;
                    BattleModule.TargetSelects.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(TargetType)))
                {
                    //自动填充TargetType
                    TargetType ins = asm.CreateInstance(b.FullName) as TargetType;
                    BattleModule.TargetTypes.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(BuffLogicState)))
                {
                    //自动填充BuffLogicStates
                    BuffLogicState ins = asm.CreateInstance(b.FullName) as BuffLogicState;
                    BattleModule.BuffLogicStates.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(BuffLogic)))
                {
                    //自动填充BuffLogicStates
                    BuffLogic ins = asm.CreateInstance(b.FullName) as BuffLogic;
                    BattleModule.BuffLogics.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(BuffSuperpositionLogic)))
                {
                    //自动填充BuffSuperpositionLogics
                    BuffSuperpositionLogic ins = asm.CreateInstance(b.FullName) as BuffSuperpositionLogic;
                    BattleModule.BuffSuperpositionLogics.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(SkillBulletMovingLogic)))
                {
                    //自动填充SkillBulletMovingLogic
                    SkillBulletMovingLogic ins = asm.CreateInstance(b.FullName) as SkillBulletMovingLogic;
                    BattleModule.SkillBulletMovingLogics.Add(b.Name, ins);
                }
                else if (b.IsSubclassOf(typeof(SkillBulletCollisionLogic)))
                {
                    //自动填充SkillBulletCollisionLogic
                    SkillBulletCollisionLogic ins = asm.CreateInstance(b.FullName) as SkillBulletCollisionLogic;
                    BattleModule.SkillBulletCollisionLogics.Add(b.Name, ins);
                }
            }
        }