Browse Source

【BUG】MMO-21265: 修正随从机制调整后护盾不生效了

meijun 3 years ago
parent
commit
db57896ddb

+ 1 - 1
XmdsVSPlugins/XmdsCommonSkill/Plugin/Buffs/XmdsBuff_PropChange.cs

@@ -54,7 +54,7 @@ namespace XmdsCommonSkill.Plugin.Buffs
             int v = (state.OverlayLevel + 1) * CurrentValue;
             int v = (state.OverlayLevel + 1) * CurrentValue;
             ChangeProp(hitter, CurentChangeType, v);
             ChangeProp(hitter, CurentChangeType, v);
 
 
-			int valueMax = hitter.IsPlayerUnit() ? 10000 : 20000;
+			int valueMax = hitter.IsPlayerUnit() ? 10000 : 25000;
 			if(state.OverlayLevel > 10 || v > valueMax)
 			if(state.OverlayLevel > 10 || v > valueMax)
 			{
 			{
 				log.Warn("XmdsBuff_PropChange信息输出:" + this.BindBuffID + ", 层:" + state.OverlayLevel + ", " + CurentChangeType + ", 值:" + v +
 				log.Warn("XmdsBuff_PropChange信息输出:" + this.BindBuffID + ", 层:" + state.OverlayLevel + ", " + CurentChangeType + ", 值:" + v +

+ 56 - 17
XmdsVSPlugins/XmdsCommonSkill/Plugin/Buffs/XmdsBuff_Shield_AbsorbDamage.cs

@@ -64,14 +64,30 @@ namespace XmdsCommonSkill.Plugin.Buffs
 		protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state)
 		protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state)
         {
         {
             //注册监听.
             //注册监听.
-            mHandleUUID = hitter.RegistOnHitDamage(OnHandleHitDmage, null);
+            if(hitter.mUnit.IsPet)
+            {
+                mHandleUUID = hitter.RegistShareMasterDmgEvent(OnShareMasterDmgEvent, null);
+            }
+            else
+            {
+                mHandleUUID = hitter.RegistOnHitDamage(OnHandleHitDmage, null);
+            }
+           
             XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】增加吸收伤害护盾.", hitter.mProp.ServerData.BaseInfo.name);
             XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】增加吸收伤害护盾.", hitter.mProp.ServerData.BaseInfo.name);
         }
         }
 
 
         protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace)
         protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace)
         {
         {
             //取消监听.
             //取消监听.
-            hitter.UnRegistOnHitDamage(mHandleUUID);
+            if(hitter.mUnit.IsPet)
+            {
+                hitter.UnRegistShareMasterDmgEvent(mHandleUUID);
+            }
+            else
+            {
+                hitter.UnRegistOnHitDamage(mHandleUUID);
+            }
+            
             XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】失去吸收伤害护盾.", hitter.mProp.ServerData.BaseInfo.name);
             XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】失去吸收伤害护盾.", hitter.mProp.ServerData.BaseInfo.name);
 
 
 			//护盾破碎,创建法术
 			//护盾破碎,创建法术
@@ -87,13 +103,23 @@ namespace XmdsCommonSkill.Plugin.Buffs
         //单位被攻击时.伤害吸收计算.
         //单位被攻击时.伤害吸收计算.
         private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, 
         private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, 
             ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
             ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+        {
+            return DoAbsortDmg(damage, hitted, attacker, source);
+        }
+
+        private int OnShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill skill, ref bool isEndDispatch)
+        {
+            return (int)(DoAbsortDmg(hp, unit.Virtual as XmdsVirtual, sender == null ? null : (sender.Virtual as XmdsVirtual)));
+        }
+
+        private float DoAbsortDmg(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source = null)
         {
         {
             float ret = damage;
             float ret = damage;
 
 
-			if(this.mNextHitTime > CommonLang.CUtils.localTimeMS)
-			{
-				return damage;
-			}
+            if (this.mNextHitTime > CommonLang.CUtils.localTimeMS)
+            {
+                return damage;
+            }
 
 
             //damage > 0是伤害,damage < 0是加血机制.
             //damage > 0是伤害,damage < 0是加血机制.
             if (damage > 0 && AbsorbDamageSum > 0)
             if (damage > 0 && AbsorbDamageSum > 0)
@@ -103,13 +129,15 @@ namespace XmdsCommonSkill.Plugin.Buffs
                 if (ret < 0)
                 if (ret < 0)
                 {
                 {
                     ret = 0;
                     ret = 0;
-                    source.OutClientState = (byte)XmdsCommonServer.Plugin.XmdsVirtual.UnitHitEventState.Absorb;
+                    if(source != null)
+                    {
+                        source.OutClientState = (byte)XmdsCommonServer.Plugin.XmdsVirtual.UnitHitEventState.Absorb;
+                    }                    
                 }
                 }
 
 
                 int abDamage = CUtils.CastInt(damage - ret);
                 int abDamage = CUtils.CastInt(damage - ret);
 
 
                 AbsorbDamageSum -= abDamage;
                 AbsorbDamageSum -= abDamage;
-
                 if (AbsorbDamageSum <= 0)
                 if (AbsorbDamageSum <= 0)
                 {
                 {
                     //破盾.
                     //破盾.
@@ -122,22 +150,33 @@ namespace XmdsCommonSkill.Plugin.Buffs
                     }
                     }
                 }
                 }
 
 
-				//触发频率
-				if(this.HitInterval > 0)
-				{
-					this.mNextHitTime = CommonLang.CUtils.localTimeMS + this.HitInterval;
-				}
+                //触发频率
+                if (this.HitInterval > 0)
+                {
+                    this.mNextHitTime = CommonLang.CUtils.localTimeMS + this.HitInterval;
+                }
 
 
-				this.OnAbsortDamage(hitted, attacker, source);
+                this.OnAbsortDamage(hitted, attacker, source);
 
 
-			}
+            }
 
 
             return ret;
             return ret;
         }
         }
 
 
-		protected virtual void OnAbsortDamage(XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source)
-		{
 
 
+
+        protected virtual void OnAbsortDamage(XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source)
+		{
+            if(hitted.mUnit.IsPet)
+            {
+                //手动推送吸收伤害消息
+                UnitHitEvent evt = new UnitHitEvent(hitted.mUnit.ID);
+                evt.senderId = attacker == null ? 0 : attacker.mUnit.ID;
+                evt.senderMasterId = hitted.GetMasterID();
+                evt.hitMasterId = attacker == null ? 0 : attacker.GetMasterID();
+                evt.client_state = (byte)XmdsCommonServer.Plugin.XmdsVirtual.UnitHitEventState.Absorb;
+                hitted.mUnit.queueEvent(evt);
+            }
 		}
 		}
     }
     }
 }
 }

+ 1 - 1
test/app.config

@@ -14,7 +14,7 @@
     <add key="iceConfig.isWarnConnections" value="true" />
     <add key="iceConfig.isWarnConnections" value="true" />
     <add key="fastStreamConfig.port" value="3370" />
     <add key="fastStreamConfig.port" value="3370" />
     <add key="game.server.id" value="" />
     <add key="game.server.id" value="" />
-    <add key="game.bstest" value="false" />
+    <add key="game.bstest" value="true" />
     <!--add key="gameServer.start.bat" value="E:\work\服务器运行环境\xmds-server\xmds-game.bat" /-->
     <!--add key="gameServer.start.bat" value="E:\work\服务器运行环境\xmds-server\xmds-game.bat" /-->
     <add key="ClientSettingsProvider.ServiceUri" value="" />
     <add key="ClientSettingsProvider.ServiceUri" value="" />
   </appSettings>
   </appSettings>