DESKTOP-FB72PO8\Administrator преди 6 часа
родител
ревизия
a58e062252

+ 4 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/CombatEventType.cs

@@ -107,6 +107,10 @@
         /// </summary>
         AddCombatMassge,
         /// <summary>
+        /// 功法碰撞开始
+        /// </summary>
+        GongFaPengZhuangStart,
+        /// <summary>
         /// 功法碰撞完成
         /// </summary>
         GongFaPengZhuangFinish,

+ 28 - 1
Assets/Scripts/GameLogic/Combat/CombatTool/CombatCalculateTool.cs

@@ -118,7 +118,7 @@ namespace GameLogic.Combat.CombatTool
 
             float qiangDu = 100;
             SkillFeaturesData skillFeaturesData = skillFeatures as SkillFeaturesData;
-            if (skillFeaturesData != null&&skillFeaturesData.maxHp>0)
+            if (skillFeaturesData != null && skillFeaturesData.maxHp > 0)
             {
                 qiangDu = (skillFeaturesData.hp * 100) / skillFeaturesData.maxHp;
             }
@@ -371,6 +371,12 @@ namespace GameLogic.Combat.CombatTool
         public void GongFaPengZhuang(SkillFeaturesData a, SkillFeaturesData b, CombatHeroEntity heroEntityA,
             CombatHeroEntity heroEntityB)
         {
+            a.InitPengZhuang();
+            b.InitPengZhuang();
+            GongFaPengZhuangFinishEventData gongFaPengZhuStart = GongFaPengZhuangFinishEventData.Create();
+            gongFaPengZhuStart.a = a;
+            gongFaPengZhuStart.b = b;
+            CombatEventManager.Instance.Dispatch(CombatEventType.GongFaPengZhuangStart, gongFaPengZhuStart);
             int myRestrained = GetRestrained(a.WuXingType, b.WuXingType);
             int targetRestrained = GetRestrained(b.WuXingType, a.WuXingType);
             float lg_a = heroEntityA.CurrCombatHeroInfo.GetWuXingShuXing(a.WuXingType);
@@ -393,6 +399,25 @@ namespace GameLogic.Combat.CombatTool
                 myHp = GetVlaueRatioForLong(myHp, p2);
             }
 
+            if (a.SkillFeaturesPengZhuangInfo.neutralizeQiangDu > 0)
+            {
+                targetHp -= GetVlaueRatioForLong(targetHp, a.SkillFeaturesPengZhuangInfo.neutralizeQiangDu);
+            }
+
+            if (b.SkillFeaturesPengZhuangInfo.neutralizeQiangDu > 0)
+            {
+                myHp -= GetVlaueRatioForLong(myHp, b.SkillFeaturesPengZhuangInfo.neutralizeQiangDu);
+            }
+
+            if (targetHp < 0)
+            {
+                targetHp = 0;
+            }
+
+            if (myHp < 0)
+            {
+                myHp = 0;
+            }
 
             if (myHp > targetHp)
             {
@@ -417,6 +442,8 @@ namespace GameLogic.Combat.CombatTool
             gongFaPengZhu.b = b;
             CombatEventManager.Instance.Dispatch(CombatEventType.GongFaPengZhuangFinish, gongFaPengZhu, false);
             CombatEventManager.Instance.Dispatch(CombatEventType.GongFaPengZhuangFinish2, gongFaPengZhu);
+            a.DisposePengZhuang();
+            b.DisposePengZhuang();
         }
 
         /// <summary>

+ 60 - 3
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroInfo.cs

@@ -112,6 +112,66 @@ public class CombatHeroInfo
     /// </summary>
     public float Earth_Injury;
 
+    /// <summary>
+    /// 火精通
+    /// </summary>
+    public float Fire_Proficient;
+
+    /// <summary>
+    /// 土精通
+    /// </summary>
+    public float Earth_Proficient;
+
+    /// <summary>
+    /// 水精通
+    /// </summary>
+    public float Water_Proficient;
+
+    /// <summary>
+    /// 木精通
+    /// </summary>
+    public float Wood_Proficient;
+
+    /// <summary>
+    /// 金精通
+    /// </summary>
+    public float Metal_Proficient;
+
+    /// <summary>
+    /// 异常伤害增加
+    /// </summary>
+    public float abnormalHarmAdd;
+
+    /// <summary>
+    /// 金伤害增加
+    /// </summary>
+    public float Metal_HarmAdd;
+
+    /// <summary>
+    /// 火伤害增加
+    /// </summary>
+    public float Fire_HarmAdd;
+
+    /// <summary>
+    /// 土伤害增加
+    /// </summary>
+    public float Earth_HarmAdd;
+
+    /// <summary>
+    /// 水伤害增加
+    /// </summary>
+    public float Water_HarmAdd;
+
+    /// <summary>
+    /// 木伤害增加
+    /// </summary>
+    public float Wood_HarmAdd;
+
+    /// <summary>
+    /// 最后伤害减少
+    /// </summary>
+    public float finallyHarmReduce;
+
     /// <summary>
     /// 1=英雄 2=小怪 3=精英怪 4=boss
     /// </summary>
@@ -169,8 +229,6 @@ public class CombatHeroInfo
     protected Map<AttributeType, float> _AttributeCacheValue = new Map<AttributeType, float>();
 
 
-
-
     /// <summary>
     /// 获取五行灵根属性
     /// </summary>
@@ -382,7 +440,6 @@ public class CombatHeroInfo
     }
 
 
-   
     protected void SetDataConfig(int modelID, int level)
     {
         modelConfig = ConfigComponent.Instance.Get<HeroModelConfig>(modelID);

+ 46 - 0
Assets/Scripts/GameLogic/Combat/Skill/S60102.cs

@@ -0,0 +1,46 @@
+using Common.Utility.CombatEvent;
+using Fort23.Core;
+
+namespace GameLogic.Combat.Skill
+{
+    /// <summary>
+    /// 启动期间功法在对碰时受到的克制影响降低80%
+    /// </summary>
+    public class S60102 : SkillBasic
+    {
+        private DS60101 ds60101;
+
+        protected override void ProActiveSkill()
+        {
+            ds60101 = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic<DS60101>();
+            CombatEventManager.Instance.AddEventListener(CombatEventType.GongFaPengZhuangStart, GongFaPengZhuangStart);
+        }
+
+        private void GongFaPengZhuangStart(IEventData iEventData)
+        {
+            if (ds60101 == null || !ds60101._updateTime)
+            {
+                return;
+            }
+            SkillFeaturesData mySkillFeaturesData = null;
+            GongFaPengZhuangFinishEventData gongFaPengZhuangFinishEventData = iEventData as GongFaPengZhuangFinishEventData;
+            if (gongFaPengZhuangFinishEventData.a.SkillBasic.CombatHeroEntity == CombatHeroEntity)
+            {
+                mySkillFeaturesData= gongFaPengZhuangFinishEventData.a;
+            }
+            else if (gongFaPengZhuangFinishEventData.b.SkillBasic.CombatHeroEntity == CombatHeroEntity)
+            {
+                mySkillFeaturesData = gongFaPengZhuangFinishEventData.b;
+            }
+
+            if (mySkillFeaturesData != null)
+            {
+                mySkillFeaturesData.SkillFeaturesPengZhuangInfo.neutralizeQiangDu += effectValue[0];
+            }
+        }
+
+        protected override void ProUseSkill()
+        {
+        }
+    }
+}

+ 3 - 0
Assets/Scripts/GameLogic/Combat/Skill/S60102.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ee410011e52741f29d35549712af13af
+timeCreated: 1751271210

+ 25 - 5
Assets/Scripts/GameLogic/Combat/Skill/SkillFeaturesData.cs

@@ -6,22 +6,29 @@ using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
 
 namespace GameLogic.Combat.Skill
 {
-    public class SkillFeaturesData : CObject,ISkillFeatures
+    public class SkillFeaturesData : CObject, ISkillFeatures
     {
         /// <summary>
         /// 生命值
         /// </summary>
         public long hp;
+
         /// <summary>
         /// 最大时的Hp
         /// </summary>
         public long maxHp;
+
         public long pengZhuangHp;
-        
+
         public bool isEnemy;
-        
+
         public WuXingType WuXingType;
-        
+
+        /// <summary>
+        /// 防御,减少受到的伤害(百分比例)%
+        /// </summary>
+        public SkillFeaturesPengZhuangInfo SkillFeaturesPengZhuangInfo;
+
         public SkillBasic SkillBasic;
         public FxAILogicBasic FxAILogicBasic;
 
@@ -29,9 +36,10 @@ namespace GameLogic.Combat.Skill
         {
             SkillFeaturesData skillFeaturesData = CObjectPool.Instance.Fetch<SkillFeaturesData>();
             skillFeaturesData.hp = hp;
-            skillFeaturesData.SkillBasic=SkillBasic;
+            skillFeaturesData.SkillBasic = SkillBasic;
             skillFeaturesData.isEnemy = isEnemy;
             skillFeaturesData.WuXingType = WuXingType;
+
             return skillFeaturesData;
         }
 
@@ -44,5 +52,17 @@ namespace GameLogic.Combat.Skill
             SkillBasic = null;
             FxAILogicBasic = null;
         }
+
+        public void InitPengZhuang()
+        {
+            DisposePengZhuang();
+            SkillFeaturesPengZhuangInfo = CObjectPool.Instance.Fetch<SkillFeaturesPengZhuangInfo>();
+        }
+
+        public void DisposePengZhuang()
+        {
+            CObjectPool.Instance.Recycle(SkillFeaturesPengZhuangInfo);
+            SkillFeaturesPengZhuangInfo = null;
+        }
     }
 }

+ 19 - 0
Assets/Scripts/GameLogic/Combat/Skill/SkillFeaturesPengZhuangInfo.cs

@@ -0,0 +1,19 @@
+using Fort23.Core;
+
+namespace GameLogic.Combat.Skill
+{
+    public class SkillFeaturesPengZhuangInfo : CObject
+    {
+        /// <summary>
+        /// 百分比
+        /// </summary>
+        public float neutralizeQiangDu;
+        public override void ActiveObj()
+        {
+        }
+
+        public override void DormancyObj()
+        {
+        }
+    }
+}

+ 3 - 0
Assets/Scripts/GameLogic/Combat/Skill/SkillFeaturesPengZhuangInfo.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 74ab26a6e0b24a67aae92edbcd254dc8
+timeCreated: 1751272069