예제 #1
0
		public override void Tick(SkillObj self, BuffInfo_New buffInfo, BuffConfig_New buffConfig)
		{
			Dictionary<int, int> keyValues = new Dictionary<int, int>();
			foreach(var buff in self.GetBuffIntParams(buffConfig).Skip(Key_Int_SummonId_BuffConfig+1))
			{
				keyValues.Add(buff, buff);
			}
			bool bAddTime = false;
			foreach (var buff in self.GetBuffList(true))
			{
				int buffId = self.GetBuffID(buff);
				if(keyValues.ContainsKey(buffId))
				{
					bAddTime = true;
					break;
				}
			}
			if (bAddTime)
			{
				self.SetBuffTime(buffInfo, self.GetBuffTime(buffInfo) + self.GetDeltaTime());
				self.SetBuffStateTime(buffInfo, self.GetBuffStateTime(buffInfo) + self.GetDeltaTime());
				self.NotifyBuffInfo(buffInfo, BattleInfoNotifyType.Time_Buff, BattleNotifyTime.TickEnd);
			}
			base.Tick(self, buffInfo, buffConfig);

		}
예제 #2
0
        public static SkillObj Summon(int id, SkillObj srcObj, SkillObj tarObj, SkillInfo_New skillInfo, SkillConfig_New skillConfig)
        {
            SkillObj summonObj = null;

            if (srcObj != null)
            {
                summonObj = srcObj.Summon(id, tarObj, skillInfo, skillConfig);
                var srcBuffList = srcObj.GetBuffList();
                //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 buffConfig = srcObj.GetBuffConfig(buffId);
                            buffLogic.OnSummon(id, srcObj, summonObj, buffInfo, buffConfig);
                        }
                        else
                        {
                            srcObj.LogInfo("something error in BattleModule.Summon src buff:[{0}]".F(buffId));
                        }
                    }
                }
            }
            return(summonObj);
        }
예제 #3
0
        override public BuffSuperpositionRet OnBuffSuperposition(SkillObj tarObj, SkillObj srcObj, BattleReason reason, BuffConfig_New buffConfig)
        {
            BuffSuperpositionRet ret;

            ret.bType = BuffSuperpositionType.None;
            ret.buff  = null;
            var tarBuff = tarObj.GetBuffList().Where(b => tarObj.GetBuffID(b) == tarObj.GetBuffID(buffConfig));

            if (tarBuff != null && tarBuff.FirstOrDefault() != null)
            {
                ret.bType = BuffSuperpositionType.AddStateTime;
                var buff = tarBuff.First();
                ret.buff = buff;
                double addTime = tarObj.GetBuffSuperpositionDoubleParam(buffConfig, Key_AddTime_SkillConfig);
                tarObj.SetBuffTime(buff, tarObj.GetBuffTime(buff) + addTime);
                tarObj.SetBuffStateTime(buff, tarObj.GetBuffStateTime(buff) + addTime);
                tarObj.NotifyBuffInfo(buff, BattleInfoNotifyType.Time_Buff, BattleNotifyTime.TickEnd);
            }
            else
            {
                ret.bType = BuffSuperpositionType.Add;
                ret.buff  = new BuffInfo_New();
            }
            return(ret);
        }
예제 #4
0
        public override void Tick(SkillObj self, BuffInfo_New buffInfo, BuffConfig_New buffConfig)
        {
            Dictionary <int, int> keyValues = new Dictionary <int, int>();

            foreach (var buff in self.GetBuffIntParams(buffConfig).Skip(Key_Int_SummonId_BuffConfig + 1))
            {
                keyValues.Add(buff, buff);
            }
            bool bAddTime = false;

            foreach (var buff in self.GetBuffList(true))
            {
                int buffId = self.GetBuffID(buff);
                if (keyValues.ContainsKey(buffId))
                {
                    bAddTime = true;
                    break;
                }
            }
            if (bAddTime)
            {
                self.SetBuffTime(buffInfo, self.GetBuffTime(buffInfo) + self.GetDeltaTime());
                self.SetBuffStateTime(buffInfo, self.GetBuffStateTime(buffInfo) + self.GetDeltaTime());
                self.NotifyBuffInfo(buffInfo, BattleInfoNotifyType.Time_Buff, BattleNotifyTime.TickEnd);
            }
            base.Tick(self, buffInfo, buffConfig);
        }
예제 #5
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());
                }
            }
        }
예제 #6
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);
        }
예제 #7
0
        // 		private const int key_BuffId3_SkillConfig = 2;
        public override bool OnEffect(SkillObj self, SkillObj target, SkillInfo_New skillInfo, SkillConfig_New skillConfig)
        {
            var buffId1 = self.GetSkillIntParam(skillConfig, key_BuffId1_SkillConfig);
            var buffId2 = self.GetSkillIntParam(skillConfig, key_BuffId2_SkillConfig);
            var tarBuff = target.GetBuffList().Where(b => target.GetBuffID(b) == buffId1);
            if (tarBuff != null && tarBuff.FirstOrDefault() != null)
            {
                BattleModule.AddBuff(target, self, buffId2, BattleReason.Skill);
                BattleModule.RemoveBuff(target, self, buffId1, BattleReason.Skill);
            }
            else
            {
                BattleModule.AddBuff(target, self, buffId1, BattleReason.Skill);
                BattleModule.RemoveBuff(target, self, buffId2, BattleReason.Skill);
            }

            return true;
        }
 public override BuffSuperpositionRet OnBuffSuperposition(SkillObj tarObj, SkillObj srcObj, BattleReason reason, BuffConfig_New buffConfig)
 {
     BuffSuperpositionRet ret;
     ret.bType = BuffSuperpositionType.None;
     ret.buff = null;
     var tarBuff = tarObj.GetBuffList().Where(b => tarObj.GetBuffID(b) == tarObj.GetBuffID(buffConfig));
     if (tarBuff != null && tarBuff.FirstOrDefault() != null)
     {
         ret.bType = BuffSuperpositionType.Refresh;
         var buff = tarBuff.First();
         ret.buff = buff;
     }
     else
     {
         ret.bType = BuffSuperpositionType.Add;
         ret.buff = new BuffInfo_New();
     }
     return ret;
 }
예제 #9
0
//      private const int key_BuffId3_SkillConfig = 2;
        public override bool OnEffect(SkillObj self, SkillObj target, SkillInfo_New skillInfo, SkillConfig_New skillConfig)
        {
            var buffId1 = self.GetSkillIntParam(skillConfig, key_BuffId1_SkillConfig);
            var buffId2 = self.GetSkillIntParam(skillConfig, key_BuffId2_SkillConfig);
            var tarBuff = target.GetBuffList().Where(b => target.GetBuffID(b) == buffId1);

            if (tarBuff != null && tarBuff.FirstOrDefault() != null)
            {
                BattleModule.AddBuff(target, self, buffId2, BattleReason.Skill);
                BattleModule.RemoveBuff(target, self, buffId1, BattleReason.Skill);
            }
            else
            {
                BattleModule.AddBuff(target, self, buffId1, BattleReason.Skill);
                BattleModule.RemoveBuff(target, self, buffId2, BattleReason.Skill);
            }

            return(true);
        }
        public override BuffSuperpositionRet OnBuffSuperposition(SkillObj tarObj, SkillObj srcObj, BattleReason reason, BuffConfig_New buffConfig)
        {
            BuffSuperpositionRet ret;
            ret.bType = BuffSuperpositionType.None;
            ret.buff = null;
            var buffKey = tarObj.GetBuffKey(buffConfig);
            foreach (var tarBuff in tarObj.GetBuffList())
            {
                var tarBuffConfig = tarObj.GetBuffConfig(tarObj.GetBuffID(tarBuff));
                if(tarBuffConfig != null && tarObj.GetBuffKey(tarBuffConfig).Equals(buffKey))
                {
                    BattleModule.RemoveBuff(tarObj, srcObj, tarObj.GetBuffID(tarBuff), BattleReason.Replace);
                    //BattleModule.DetachBuff(tarObj, srcObj, tarBuff, tarBuffConfig);
                }
            }

            ret.bType = BuffSuperpositionType.Add;
            ret.buff = new BuffInfo_New();
            return ret;
        }
예제 #11
0
        override public BuffSuperpositionRet OnBuffSuperposition(SkillObj tarObj, SkillObj srcObj, BattleReason reason, BuffConfig_New buffConfig)
        {
            BuffSuperpositionRet ret;

            ret.bType = BuffSuperpositionType.None;
            ret.buff  = null;
            var tarBuff = tarObj.GetBuffList().Where(b => tarObj.GetBuffID(b) == tarObj.GetBuffID(buffConfig));

            if (tarBuff != null && tarBuff.FirstOrDefault() != null)
            {
                ret.bType = BuffSuperpositionType.Refresh;
                var buff = tarBuff.First();
                ret.buff = buff;
            }
            else
            {
                ret.bType = BuffSuperpositionType.Add;
                ret.buff  = new BuffInfo_New();
            }
            return(ret);
        }
 public override BuffSuperpositionRet OnBuffSuperposition(SkillObj tarObj, SkillObj srcObj, BattleReason reason, BuffConfig_New buffConfig)
 {
     BuffSuperpositionRet ret;
     ret.bType = BuffSuperpositionType.None;
     ret.buff = null;
     var tarBuff = tarObj.GetBuffList().Where(b => tarObj.GetBuffID(b) == tarObj.GetBuffID(buffConfig));
     if (tarBuff != null && tarBuff.FirstOrDefault() != null)
     {
         ret.bType = BuffSuperpositionType.AddStateTime;
         var buff = tarBuff.First();
         double addTime = tarObj.GetBuffSuperpositionDoubleParam(buffConfig, Key_AddTime_SkillConfig);
         tarObj.SetBuffTime(buff, tarObj.GetBuffTime(buff) + addTime);
         tarObj.SetBuffStateTime(buff, tarObj.GetBuffStateTime(buff) + addTime);
         tarObj.NotifyBuffInfo(buff, BattleInfoNotifyType.Time_Buff, BattleNotifyTime.TickEnd);
     }
     else
     {
         ret.bType = BuffSuperpositionType.Add;
         ret.buff = new BuffInfo_New();
     }
     return ret;
 }
        override public BuffSuperpositionRet OnBuffSuperposition(SkillObj tarObj, SkillObj srcObj, BattleReason reason, BuffConfig_New buffConfig)
        {
            BuffSuperpositionRet ret;

            ret.bType = BuffSuperpositionType.None;
            ret.buff  = null;
            var buffKey = tarObj.GetBuffKey(buffConfig);

            foreach (var tarBuff in tarObj.GetBuffList())
            {
                var tarBuffConfig = tarObj.GetBuffConfig(tarObj.GetBuffID(tarBuff));
                if (tarBuffConfig != null && tarObj.GetBuffKey(tarBuffConfig).Equals(buffKey))
                {
                    BattleModule.RemoveBuff(tarObj, srcObj, tarObj.GetBuffID(tarBuff), BattleReason.Replace);
                    //BattleModule.DetachBuff(tarObj, srcObj, tarBuff, tarBuffConfig);
                }
            }

            ret.bType = BuffSuperpositionType.Add;
            ret.buff  = new BuffInfo_New();
            return(ret);
        }
예제 #14
0
 public override void OnEffect(SkillObj self, SkillObj tarObj, BuffInfo_New buffInfo, BuffConfig_New buffConfig)
 {
     int key = Key_Double_AddTime1_BuffConfig;
     if (self.GetSrcID(buffInfo) == tarObj.GetID() || self.GetSrcParentID(buffInfo) == tarObj.GetID())
     {
         key = Key_Double_AddTime1_BuffConfig;
     }
     else
     {
         key = Key_Double_AddTime2_BuffConfig;
     }
     foreach (var buff in self.GetBuffList(true))
     {
         int buffId = self.GetBuffID(buff);
         if (buffId > 0 && buffId == self.GetBuffIntParam(buffConfig, Key_Int_BuffId_BuffConfig))
         {
             double addTime = self.GetBuffDoubleParam(buffConfig, key);
             self.SetBuffTime(buff, self.GetBuffTime(buff) + addTime);
             self.SetBuffStateTime(buff, self.GetBuffStateTime(buff) + addTime);
             self.NotifyBuffInfo(buff, BattleInfoNotifyType.Time_Buff, BattleNotifyTime.TickEnd);
         }
     }
 }
예제 #15
0
        public override void OnEffect(SkillObj self, SkillObj tarObj, BuffInfo_New buffInfo, BuffConfig_New buffConfig)
        {
            int key = Key_Double_AddTime1_BuffConfig;

            if (self.GetSrcID(buffInfo) == tarObj.GetID() || self.GetSrcParentID(buffInfo) == tarObj.GetID())
            {
                key = Key_Double_AddTime1_BuffConfig;
            }
            else
            {
                key = Key_Double_AddTime2_BuffConfig;
            }
            foreach (var buff in self.GetBuffList(true))
            {
                int buffId = self.GetBuffID(buff);
                if (buffId > 0 && buffId == self.GetBuffIntParam(buffConfig, Key_Int_BuffId_BuffConfig))
                {
                    double addTime = self.GetBuffDoubleParam(buffConfig, key);
                    self.SetBuffTime(buff, self.GetBuffTime(buff) + addTime);
                    self.SetBuffStateTime(buff, self.GetBuffStateTime(buff) + addTime);
                    self.NotifyBuffInfo(buff, BattleInfoNotifyType.Time_Buff, BattleNotifyTime.TickEnd);
                }
            }
        }
예제 #16
0
        public static void DetachBuff(SkillObj tarObj, SkillObj srcObj, BuffInfo_New buff, BuffConfig_New buffConfig)
        {
            var buffLogicId = tarObj.GetBuffLogicId(buffConfig);
            if (!BuffLogics.ContainsKey(buffLogicId))
            {
                return ;
            }
            BuffLogic buffLogic = BuffLogics[buffLogicId];

            //先从src方进行修正
            if (srcObj != null)
            {
                var srcSkillList = srcObj.GetSkillList();
                var srcBuffList = srcObj.GetBuffList();
                if (srcSkillList != null)
                {
                    foreach (var skillInfo in srcSkillList)
                    {
                        int skillId = srcObj.GetSkillID(skillInfo);
                        SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
                        var logic = GetSkillLogic(skillInfo, srcObj);
                        logic.OnClearBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                    }
                }
                if (srcBuffList != null)
                {
                    foreach (var buffInfo in srcBuffList)
                    {
                        int buffId = srcObj.GetBuffID(buffInfo);
                        BuffConfig_New srcBuffConfig = srcObj.GetBuffConfig(buffId);
                        var logic = GetBuffLogic(buffInfo, srcObj);
                        logic.OnClearBuff(tarObj, srcObj, buff, buffInfo, srcBuffConfig);
                    }
                }
            }
            {
                var tarSkillList = tarObj.GetSkillList();
                var tarBuffList = tarObj.GetBuffList();
                if (tarSkillList != null)
                {
                    foreach (var skillInfo in tarSkillList)
                    {
                        int skillId = tarObj.GetSkillID(skillInfo);
                        SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                        var logic = GetSkillLogic(skillInfo, tarObj);
                        logic.OnDetachBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                    }
                }
                if (tarBuffList != null)
                {
                    foreach (var buffInfo in tarBuffList.Where(b=>b.buff!=buff.buff))
                    {
                        int buffId = tarObj.GetBuffID(buffInfo);
                        BuffConfig_New tarBuffConfig = tarObj.GetBuffConfig(buffId);
                        var logic = GetBuffLogic(buffInfo, tarObj);
                        logic.OnDetachBuff(tarObj, srcObj, buff, buffInfo, tarBuffConfig);
                    }
                }
            }
            buffLogic.BuffOnEnd(tarObj, buff, buffConfig);
            buffLogic.OnDetach(tarObj, srcObj, buff, buffConfig);
        }
예제 #17
0
        public static bool RemoveBuff(SkillObj tarObj, SkillObj srcObj, int deleteBuffId, BattleReason reason)
        {
            if (tarObj == null)
            {
                return(false);
            }
            var buffConfig = tarObj.GetBuffConfig(deleteBuffId);

            if (buffConfig == null)
            {
                return(false);
            }

            var          tarBuffList = tarObj.GetBuffList();
            BuffInfo_New buff        = null;

            foreach (var b in tarBuffList)
            {
                if (tarObj.GetBuffID(b) == deleteBuffId)
                {
                    buff = b;
                    break;
                }
            }
            if (buff == null)
            {
                return(false);
            }
            //DetachBuff(tarObj, srcObj, buff, buffConfig);
            var buffLogicId = tarObj.GetBuffLogicId(buffConfig);

            if (!BuffLogics.ContainsKey(buffLogicId))
            {
                return(false);
            }
            BuffLogic buffLogic = BuffLogics[buffLogicId];

            buffLogic.BuffOnEnd(tarObj, buff, buffConfig);

            ////先从src方进行修正
            //if (srcObj != null)
            //{
            //	var srcSkillList = srcObj.GetSkillList();
            //	var srcBuffList = srcObj.GetBuffList();
            //	if (srcSkillList != null)
            //	{
            //		foreach (var skillInfo in srcSkillList)
            //		{
            //			int skillId = srcObj.GetSkillID(skillInfo);
            //			SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
            //			var logic = GetSkillLogic(skillInfo, srcObj);
            //			logic.OnClearBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
            //		}
            //	}
            //	if (srcBuffList != null)
            //	{
            //		foreach (var buffInfo in srcBuffList)
            //		{
            //			int buffId = srcObj.GetBuffID(buffInfo);
            //			BuffConfig_New srcBuffConfig = srcObj.GetBuffConfig(buffId);
            //			var logic = GetBuffLogic(buffInfo, srcObj);
            //			logic.OnClearBuff(tarObj, srcObj, buff, buffInfo, srcBuffConfig);
            //		}
            //	}
            //}
            //{
            //	var tarSkillList = tarObj.GetSkillList();
            //	if (tarSkillList != null)
            //	{
            //		foreach (var skillInfo in tarSkillList)
            //		{
            //			int skillId = tarObj.GetSkillID(skillInfo);
            //			SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
            //			var logic = GetSkillLogic(skillInfo, tarObj);
            //			logic.OnDetachBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
            //		}
            //	}
            //	if (tarBuffList != null)
            //	{
            //		foreach (var buffInfo in tarBuffList)
            //		{
            //			int buffId = tarObj.GetBuffID(buffInfo);
            //			BuffConfig_New tarBuffConfig = tarObj.GetBuffConfig(buffId);
            //			var logic = GetBuffLogic(buffInfo, tarObj);
            //			logic.OnDetachBuff(tarObj, srcObj, buff, buffInfo, tarBuffConfig);
            //		}
            //	}
            //}
            //buffLogic.BuffOnEnd(tarObj, buff, buffConfig);
            return(true);
        }
예제 #18
0
        public static bool AddBuff(SkillObj tarObj, SkillObj srcObj, int newBuffId, BattleReason reason)
        {
            if (tarObj == null)
            {
                return(false);
            }
            var buffConfig = tarObj.GetBuffConfig(newBuffId);

            if (buffConfig == null)
            {
                return(false);
            }

            var buffSuperpositionLogicId = tarObj.GetBuffSuperpositionLogicId(buffConfig);

            if (!BuffSuperpositionLogics.ContainsKey(buffSuperpositionLogicId))
            {
                return(false);
            }
            BuffSuperpositionLogic buffSuperpositionLogic = BuffSuperpositionLogics[buffSuperpositionLogicId];

            var          buffRet = buffSuperpositionLogic.OnBuffSuperposition(tarObj, srcObj, reason, buffConfig);
            BuffInfo_New buff    = buffRet.buff;

            if (buffRet.bType == BuffSuperpositionType.Refresh)
            {
                var buffLogicId = tarObj.GetBuffLogicId(buffConfig);
                if (!BuffLogics.ContainsKey(buffLogicId))
                {
                    return(false);
                }
                BuffLogic buffLogic = BuffLogics[buffLogicId];
                buffLogic.InitBuffInfo(tarObj, srcObj, reason, buff, buffConfig, false);
            }
            else if (buffRet.bType == BuffSuperpositionType.Add)
            {
                var buffLogicId = tarObj.GetBuffLogicId(buffConfig);
                if (!BuffLogics.ContainsKey(buffLogicId))
                {
                    return(false);
                }
                BuffLogic buffLogic = BuffLogics[buffLogicId];
                buffLogic.InitBuffInfo(tarObj, srcObj, reason, buff, buffConfig);

                //先从src方进行修正
                if (srcObj != null)
                {
                    var srcSkillList = srcObj.GetSkillList();
                    var srcBuffList  = srcObj.GetBuffList();
                    if (srcSkillList != null)
                    {
                        foreach (var skillInfo in srcSkillList)
                        {
                            int             skillId     = srcObj.GetSkillID(skillInfo);
                            SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
                            var             logic       = GetSkillLogic(skillInfo, srcObj);
                            logic.OnSendBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                        }
                    }
                    if (srcBuffList != null)
                    {
                        foreach (var buffInfo in srcBuffList)
                        {
                            int            buffId        = srcObj.GetBuffID(buffInfo);
                            BuffConfig_New srcBuffConfig = srcObj.GetBuffConfig(buffId);
                            var            logic         = GetBuffLogic(buffInfo, srcObj);
                            logic.OnSendBuff(tarObj, srcObj, buff, buffInfo, srcBuffConfig);
                        }
                    }
                }
                {
                    var tarSkillList = tarObj.GetSkillList();
                    var tarBuffList  = tarObj.GetBuffList();
                    if (tarSkillList != null)
                    {
                        foreach (var skillInfo in tarSkillList)
                        {
                            int             skillId     = tarObj.GetSkillID(skillInfo);
                            SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                            var             logic       = GetSkillLogic(skillInfo, tarObj);
                            logic.OnAttachBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                        }
                    }
                    if (tarBuffList != null)
                    {
                        foreach (var buffInfo in tarBuffList)
                        {
                            int            buffId        = tarObj.GetBuffID(buffInfo);
                            BuffConfig_New tarBuffConfig = tarObj.GetBuffConfig(buffId);
                            var            logic         = GetBuffLogic(buffInfo, tarObj);
                            logic.OnAttachBuff(tarObj, srcObj, buff, buffInfo, tarBuffConfig);
                        }
                    }
                }
                buffLogic.OnAttach(tarObj, srcObj, buff, buffConfig);
                tarObj.AddTempBuffList(buff);
            }
            tarObj.NotifyBuffInfo(buff, BattleInfoNotifyType.All_Buff, BattleNotifyTime.TickEnd);
            return(true);
        }
예제 #19
0
        public static void DetachBuff(SkillObj tarObj, SkillObj srcObj, BuffInfo_New buff, BuffConfig_New buffConfig)
        {
            var buffLogicId = tarObj.GetBuffLogicId(buffConfig);

            if (!BuffLogics.ContainsKey(buffLogicId))
            {
                return;
            }
            BuffLogic buffLogic = BuffLogics[buffLogicId];

            //先从src方进行修正
            if (srcObj != null)
            {
                var srcSkillList = srcObj.GetSkillList();
                var srcBuffList  = srcObj.GetBuffList();
                if (srcSkillList != null)
                {
                    foreach (var skillInfo in srcSkillList)
                    {
                        int             skillId     = srcObj.GetSkillID(skillInfo);
                        SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
                        var             logic       = GetSkillLogic(skillInfo, srcObj);
                        logic.OnClearBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                    }
                }
                if (srcBuffList != null)
                {
                    foreach (var buffInfo in srcBuffList)
                    {
                        int            buffId        = srcObj.GetBuffID(buffInfo);
                        BuffConfig_New srcBuffConfig = srcObj.GetBuffConfig(buffId);
                        var            logic         = GetBuffLogic(buffInfo, srcObj);
                        logic.OnClearBuff(tarObj, srcObj, buff, buffInfo, srcBuffConfig);
                    }
                }
            }
            {
                var tarSkillList = tarObj.GetSkillList();
                var tarBuffList  = tarObj.GetBuffList();
                if (tarSkillList != null)
                {
                    foreach (var skillInfo in tarSkillList)
                    {
                        int             skillId     = tarObj.GetSkillID(skillInfo);
                        SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                        var             logic       = GetSkillLogic(skillInfo, tarObj);
                        logic.OnDetachBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                    }
                }
                if (tarBuffList != null)
                {
                    foreach (var buffInfo in tarBuffList.Where(b => b.buff != buff.buff))
                    {
                        int            buffId        = tarObj.GetBuffID(buffInfo);
                        BuffConfig_New tarBuffConfig = tarObj.GetBuffConfig(buffId);
                        var            logic         = GetBuffLogic(buffInfo, tarObj);
                        logic.OnDetachBuff(tarObj, srcObj, buff, buffInfo, tarBuffConfig);
                    }
                }
            }
            buffLogic.BuffOnEnd(tarObj, buff, buffConfig);
            buffLogic.OnDetach(tarObj, srcObj, buff, buffConfig);
        }
예제 #20
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));
                 }
             }
         }
     }
 }
예제 #21
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);
            }
        }
예제 #22
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));
                 }
             }
         }
     }
 }
예제 #23
0
        public static bool AddBuff(SkillObj tarObj, SkillObj srcObj, int newBuffId, BattleReason reason)
        {
            if (tarObj == null)
            {
                return false;
            }
            var buffConfig = tarObj.GetBuffConfig(newBuffId);
            if(buffConfig == null)
            {
                return false;
            }

            var buffSuperpositionLogicId = tarObj.GetBuffSuperpositionLogicId(buffConfig);
            if (!BuffSuperpositionLogics.ContainsKey(buffSuperpositionLogicId))
            {
                return false;
            }
            BuffSuperpositionLogic buffSuperpositionLogic = BuffSuperpositionLogics[buffSuperpositionLogicId];

            var buffRet = buffSuperpositionLogic.OnBuffSuperposition(tarObj, srcObj, reason, buffConfig);
            BuffInfo_New buff = buffRet.buff;
            if(buffRet.bType == BuffSuperpositionType.Refresh)
            {
                var buffLogicId = tarObj.GetBuffLogicId(buffConfig);
                if (!BuffLogics.ContainsKey(buffLogicId))
                {
                    return false;
                }
                BuffLogic buffLogic = BuffLogics[buffLogicId];
                buffLogic.InitBuffInfo(tarObj, srcObj, reason, buff, buffConfig, false);
            }
            else if(buffRet.bType == BuffSuperpositionType.Add)
            {
                var buffLogicId = tarObj.GetBuffLogicId(buffConfig);
                if (!BuffLogics.ContainsKey(buffLogicId))
                {
                    return false;
                }
                BuffLogic buffLogic = BuffLogics[buffLogicId];
                buffLogic.InitBuffInfo(tarObj, srcObj, reason, buff, buffConfig);

                //先从src方进行修正
                if (srcObj != null)
                {
                    var srcSkillList = srcObj.GetSkillList();
                    var srcBuffList = srcObj.GetBuffList();
                    if (srcSkillList != null)
                    {
                        foreach (var skillInfo in srcSkillList)
                        {
                            int skillId = srcObj.GetSkillID(skillInfo);
                            SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
                            var logic = GetSkillLogic(skillInfo, srcObj);
                            logic.OnSendBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                        }
                    }
                    if (srcBuffList != null)
                    {
                        foreach (var buffInfo in srcBuffList)
                        {
                            int buffId = srcObj.GetBuffID(buffInfo);
                            BuffConfig_New srcBuffConfig = srcObj.GetBuffConfig(buffId);
                            var logic = GetBuffLogic(buffInfo, srcObj);
                            logic.OnSendBuff(tarObj, srcObj, buff, buffInfo, srcBuffConfig);
                        }
                    }
                }
                {
                    var tarSkillList = tarObj.GetSkillList();
                    var tarBuffList = tarObj.GetBuffList();
                    if (tarSkillList != null)
                    {
                        foreach (var skillInfo in tarSkillList)
                        {
                            int skillId = tarObj.GetSkillID(skillInfo);
                            SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
                            var logic = GetSkillLogic(skillInfo, tarObj);
                            logic.OnAttachBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
                        }
                    }
                    if (tarBuffList != null)
                    {
                        foreach (var buffInfo in tarBuffList)
                        {
                            int buffId = tarObj.GetBuffID(buffInfo);
                            BuffConfig_New tarBuffConfig = tarObj.GetBuffConfig(buffId);
                            var logic = GetBuffLogic(buffInfo, tarObj);
                            logic.OnAttachBuff(tarObj, srcObj, buff, buffInfo, tarBuffConfig);
                        }
                    }
                }
                buffLogic.OnAttach(tarObj, srcObj, buff, buffConfig);
                tarObj.AddTempBuffList(buff);
            }
            tarObj.NotifyBuffInfo(buff, BattleInfoNotifyType.All_Buff, BattleNotifyTime.TickEnd);
            return true;
        }
예제 #24
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());
         }
     }
 }
예제 #25
0
 public static SkillObj Summon(int id, SkillObj srcObj, SkillObj tarObj, SkillInfo_New skillInfo, SkillConfig_New skillConfig)
 {
     SkillObj summonObj = null;
     if (srcObj != null)
     {
         summonObj = srcObj.Summon(id, tarObj, skillInfo, skillConfig);
         var srcBuffList = srcObj.GetBuffList();
         //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 buffConfig = srcObj.GetBuffConfig(buffId);
                     buffLogic.OnSummon(id, srcObj, summonObj, buffInfo, buffConfig);
                 }
                 else
                 {
                     srcObj.LogInfo("something error in BattleModule.Summon src buff:[{0}]".F(buffId));
                 }
             }
         }
     }
     return summonObj;
 }
예제 #26
0
        public static bool RemoveBuff(SkillObj tarObj, SkillObj srcObj, int deleteBuffId, BattleReason reason)
        {
            if (tarObj == null)
            {
                return false;
            }
            var buffConfig = tarObj.GetBuffConfig(deleteBuffId);
            if (buffConfig == null)
            {
                return false;
            }

            var tarBuffList = tarObj.GetBuffList();
            BuffInfo_New buff = null;
            foreach (var b in tarBuffList)
            {
                if (tarObj.GetBuffID(b) == deleteBuffId)
                {
                    buff = b;
                    break;
                }
            }
            if (buff == null)
            {
                return false;
            }
            //DetachBuff(tarObj, srcObj, buff, buffConfig);
            var buffLogicId = tarObj.GetBuffLogicId(buffConfig);
            if (!BuffLogics.ContainsKey(buffLogicId))
            {
                return false;
            }
            BuffLogic buffLogic = BuffLogics[buffLogicId];
            buffLogic.BuffOnEnd(tarObj, buff, buffConfig);

            ////先从src方进行修正
            //if (srcObj != null)
            //{
            //	var srcSkillList = srcObj.GetSkillList();
            //	var srcBuffList = srcObj.GetBuffList();
            //	if (srcSkillList != null)
            //	{
            //		foreach (var skillInfo in srcSkillList)
            //		{
            //			int skillId = srcObj.GetSkillID(skillInfo);
            //			SkillConfig_New skillConfig = srcObj.GetSkillConfig(skillId);
            //			var logic = GetSkillLogic(skillInfo, srcObj);
            //			logic.OnClearBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
            //		}
            //	}
            //	if (srcBuffList != null)
            //	{
            //		foreach (var buffInfo in srcBuffList)
            //		{
            //			int buffId = srcObj.GetBuffID(buffInfo);
            //			BuffConfig_New srcBuffConfig = srcObj.GetBuffConfig(buffId);
            //			var logic = GetBuffLogic(buffInfo, srcObj);
            //			logic.OnClearBuff(tarObj, srcObj, buff, buffInfo, srcBuffConfig);
            //		}
            //	}
            //}
            //{
            //	var tarSkillList = tarObj.GetSkillList();
            //	if (tarSkillList != null)
            //	{
            //		foreach (var skillInfo in tarSkillList)
            //		{
            //			int skillId = tarObj.GetSkillID(skillInfo);
            //			SkillConfig_New skillConfig = tarObj.GetSkillConfig(skillId);
            //			var logic = GetSkillLogic(skillInfo, tarObj);
            //			logic.OnDetachBuff(tarObj, srcObj, buff, skillInfo, skillConfig);
            //		}
            //	}
            //	if (tarBuffList != null)
            //	{
            //		foreach (var buffInfo in tarBuffList)
            //		{
            //			int buffId = tarObj.GetBuffID(buffInfo);
            //			BuffConfig_New tarBuffConfig = tarObj.GetBuffConfig(buffId);
            //			var logic = GetBuffLogic(buffInfo, tarObj);
            //			logic.OnDetachBuff(tarObj, srcObj, buff, buffInfo, tarBuffConfig);
            //		}
            //	}
            //}
            //buffLogic.BuffOnEnd(tarObj, buff, buffConfig);
            return true;
        }
예제 #27
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;
 }
예제 #28
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);
            }
        }