Browse Source

Merge branch 'master' of 192.168.0.254:BattleSever/WSHCommon

lvlh 3 years ago
parent
commit
21b5dbc53f
29 changed files with 283 additions and 125 deletions
  1. 2 2
      Common/CommonAI/Zone/EventTrigger/EventAdapter.cs
  2. 2 2
      Common/CommonAI/Zone/Formula/IFormulas.cs
  3. 14 0
      Common/CommonAI/Zone/Instance/InstanceNpcs.cs
  4. 9 6
      Common/CommonAI/Zone/Instance/InstanceUnit.API.cs
  5. 9 3
      Common/CommonAI/Zone/Instance/InstanceUnit.StateMachine.cs
  6. 19 3
      Common/CommonAI/Zone/Instance/InstanceUnit.Status.cs
  7. 24 4
      Common/CommonAI/Zone/Instance/InstanceUnit.cs
  8. 5 0
      Common/CommonAI/Zone/Instance/InstanceZone.cs
  9. 2 0
      Common/CommonAI/Zone/Instance/InstanceZoneObject.cs
  10. 1 1
      Common/CommonAI/Zone/ZoneEditor/EditorScene.cs
  11. 3 1
      Common/CommonAI/ZoneServer/JSGModule/JSGModule.cs
  12. 1 1
      XmdsCommonServer/Plugin/CardSkill/PlayerCardSkill/JSNextCardSkillStrengthenhModule.cs
  13. 2 1
      XmdsCommonServer/Plugin/JSGModule/JSGMountainKingModule.cs
  14. 60 47
      XmdsCommonServer/Plugin/Units/XmdsInstancePet.cs
  15. 8 7
      XmdsCommonServer/Plugin/Units/XmdsInstancePlayer.cs
  16. 18 4
      XmdsCommonServer/Plugin/XmdsSkillTemplate/DamageCalculator/XmdsDamageCalculator.cs
  17. 1 1
      XmdsCommonServer/Plugin/XmdsSkillTemplate/Skills/XmdsSkill.cs
  18. 8 3
      XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Event.cs
  19. 2 2
      XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Skills.cs
  20. 11 6
      XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Team.cs
  21. 9 1
      XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.cs
  22. 5 5
      XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual_Monster.cs
  23. 0 1
      XmdsCommonServer/XLS/XLSMountainKingConfigLoader.cs
  24. 1 1
      XmdsServerCS/XmdsServerEdgeJS/Zone/ZoneService.cs
  25. 1 1
      XmdsServerCS/XmdsServerEdgeJS/Zone/ZoneServiceICE.cs
  26. 9 2
      XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Boss/Boss_91001.cs
  27. 30 12
      XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Pet20200515/Pet_80009.cs
  28. 26 7
      XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Pet20200515/Pet_80011.cs
  29. 1 1
      XmdsVSPlugins/XmdsCommonSkill/Plugin/Skills/Warrior/Warrior_110550.cs

+ 2 - 2
Common/CommonAI/Zone/EventTrigger/EventAdapter.cs

@@ -331,11 +331,11 @@ namespace CommonAI.Zone.EventTrigger
 #endif
 			if (GlobalData.GAME_BS_TEST)
 			{
-				log.Warn("--调试-场景:" + this.ZoneAPI.GetSceneID() + ", 执行动作:" + this.Name);
+				log.Warn("--调试场景:" + this.ZoneAPI.UUID + ", " + this.ZoneAPI.GetSceneID() + ", 执行动作:" + this.Name);
 			}
 			else
 			{
-				log.Info("--调试-场景:" + this.ZoneAPI.GetSceneID() + ", 执行动作:" + this.Name);
+				log.Info("--调试场景:" + this.ZoneAPI.UUID + ", " + this.ZoneAPI.GetSceneID() + ", 执行动作:" + this.Name);
 			}
 
 			//if(this.Name.Equals("事件重置列表1") || this.Name.Equals("玉重置"))

+ 2 - 2
Common/CommonAI/Zone/Formula/IFormulas.cs

@@ -278,6 +278,8 @@ namespace CommonAI.Zone.Formula
 		bool IsServerMember(int id);
 		//获取服务器id
 		int GetServerID();
+		//获取基础技能id
+		int GetBaseSkillID();
 
 		/** 获取PK模式 */
 		PKMode GetCurPKMode();
@@ -321,8 +323,6 @@ namespace CommonAI.Zone.Formula
 		InstanceUnit GetMasterUnit();
 		void StartRecoverMP(bool reset = false);
 		bool IsCanReduceMP(bool force);
-		/** 分发宠物为主人承担伤害事件 */
-		void DispatchShareMasterDmgEvent(int shareDmg, InstanceUnit sender);
 
 	   //获取玩家宠物接口
 		InstanceUnit GetPetUnit();

+ 14 - 0
Common/CommonAI/Zone/Instance/InstanceNpcs.cs

@@ -572,6 +572,20 @@ namespace CommonAI.Zone.Instance
             {
                 return;
             }
+
+			if(attacker.IsPet)
+			{
+				InstanceUnit master = attacker.Virtual.GetMasterUnit();
+				if(master == null)
+				{
+					log.Warn("onDamaged: 找不到宠物主人:" + attacker.Info.ID + ", " + attacker.Parent.GetSceneID());
+				}
+				else
+				{
+					attacker = master;
+				}
+			}
+
             // 被攻击转火
             mHateSystem.OnHitted(attacker, attack, reduceHP);
             onAddEnemy(attacker, true, AttackReason.Damaged);

+ 9 - 6
Common/CommonAI/Zone/Instance/InstanceUnit.API.cs

@@ -202,13 +202,16 @@ namespace CommonAI.Zone.Instance
 
 			//排除怪物回血
 #if JSG_DMG_LOG
-			int atkPropID = (source == null || source.Attack == null || source.Attack.Properties == null) ? 0 : source.Attack.Properties.GetAttackID();
-			if (atkPropID != 9999901 && (finalHP < -100000000 || finalHP > 100000000) && !(this.IsMonster && hp == this.MaxHP))
+			if(this.IsPlayer)
 			{
-				string stackInfo = new StackTrace().ToString();
-				log.Error("伤害异常: " + finalHP + ", ID" + this.Info.ID + ", " + (sender == null ? "-1" : sender.PlayerUUID)
-					+ JSGModule.GetAttackSourceDes(source) + ", " + stackInfo);
-			}
+				int atkPropID = (source == null || source.Attack == null || source.Attack.Properties == null) ? 0 : source.Attack.Properties.GetAttackID();
+				if (atkPropID != 9999901 && (finalHP < -100000000 || finalHP > 100000000) && !(this.IsMonster && hp == this.MaxHP))
+				{
+					string stackInfo = new StackTrace().ToString();
+					log.Error("伤害异常: " + finalHP + ", ID" + this.Info.ID + ", " + (sender == null ? "-1" : sender.PlayerUUID)
+						+ JSGModule.GetAttackSourceDes(source) + ", " + stackInfo);
+				}
+			}			
 #endif
 			return finalHP;
 		}

+ 9 - 3
Common/CommonAI/Zone/Instance/InstanceUnit.StateMachine.cs

@@ -2579,11 +2579,11 @@ namespace CommonAI.Zone.Instance
         {
             private TimeExpire<int> dead_time;
             private TimeExpire<int> rebirth_time;
-            private InstanceZoneObject attacker;
+            private InstanceUnit attacker;
             private bool crushed;
             private List<TimeExpire<int>> dead_delayTimes = new List<TimeExpire<int>>();
 
-            public StateDead(InstanceUnit unit, InstanceZoneObject attacker, bool crush = false)
+            public StateDead(InstanceUnit unit, InstanceUnit attacker, bool crush = false)
                 : base(unit)
             {
                 this.attacker = attacker;
@@ -2607,7 +2607,13 @@ namespace CommonAI.Zone.Instance
             }
             override protected void onStart()
             {
-                unit.SetActionStatus(UnitActionStatus.Dead);
+				//某些状态帧下死亡调用漏掉了
+				if (unit.IsNeedProcessDead())
+				{
+					unit.Parent.cb_unitDeadCallBack(unit, this.attacker);
+				}
+
+				unit.SetActionStatus(UnitActionStatus.Dead);
                 this.rebirth_time = new TimeExpire<int>(unit.mInfo.RebirthTimeMS);
                 this.dead_time = new TimeExpire<int>(unit.mInfo.DeadTimeMS);
                 if (unit.Info.DeadLaunchSpell != null)

+ 19 - 3
Common/CommonAI/Zone/Instance/InstanceUnit.Status.cs

@@ -171,7 +171,17 @@ namespace CommonAI.Zone.Instance
 		//是否刷新标记
 		private bool mNeedUpdate = false;
 
-        private void InitTimeLines()
+		public bool IsCanLaunchSkill(int skillID)
+		{
+			if (this.IsStun || (this.IsSilent == true && skillID != this.Virtual.GetBaseSkillID()))
+			{
+				return false;
+			}
+
+			return true;
+		}
+
+		private void InitTimeLines()
         {
             int index;
             mNoneBlockTimeMS = RegistMultiTimeLine(out index);
@@ -1311,10 +1321,16 @@ namespace CommonAI.Zone.Instance
                 {
                     return false;
                 }
-                if (Owner.__mCurrentHP.Value >= Data.CostHP)
+				if (!this.Owner.IsCanLaunchSkill(Data.TemplateID))
+				{
+					return false;
+				}
+
+				if (Owner.__mCurrentHP.Value >= Data.CostHP)
                 {
                     return IsDone;
-                }
+                }				
+
                 return false;
             }
             public int NextAction()

+ 24 - 4
Common/CommonAI/Zone/Instance/InstanceUnit.cs

@@ -136,8 +136,19 @@ namespace CommonAI.Zone.Instance
             this.mUnitVirtual = TemplateManager.Factory.CreateUnitVirtual(this);			
 		}
 
-        protected override void Disposing()
+		public override bool IsNeedProcessDead()
+		{
+			return this.mProcessDeadTime == 0;
+		}
+
+		protected override void Disposing()
         {
+			//if(this.IsMonster && (this.mProcessDeadTime == 0 || this.CurrentHP > 0 || this.mProcessDeadTime == 0))
+			//{
+			//	log.Info("单位Disposing:" + this.Parent.UUID + ", " + this.Parent.GetSceneID() + ", " + this.ID + ", " + this.CurrentHP + "," +
+			//		this.IsMonster + ", " + mProcessDeadTime);
+			//}
+
             if (mUnitVirtual != null)
             {
                 mUnitVirtual.OnDispose(this);
@@ -636,8 +647,12 @@ namespace CommonAI.Zone.Instance
             if (this.mOnDamage != null)
                 this.mOnDamage.Invoke(this, attacker, reduceHP, source);
         }
-        internal void callback_onDead(InstanceZone zone, InstanceUnit attacker)
+
+		public long mProcessDeadTime = 0;
+
+		internal void callback_onDead(InstanceZone zone, InstanceUnit attacker)
         {
+			this.mProcessDeadTime = CommonLang.TimeUtil.GetTimestampMS();
 			this.OnUnitDead();
 			if (this.mOnDead != null)
                 this.mOnDead.Invoke(this, attacker);
@@ -1068,7 +1083,7 @@ namespace CommonAI.Zone.Instance
 					{
 						int petShareDmg = Math.Max(1, (int)(hp * XmdsConstConfig.PET_SHARE_MASTERDMG_RATIO));
 						hp = Math.Max(1, hp - petShareDmg);
-						petUnit.AddHP(-petShareDmg, this);
+						petUnit.PetShareDamage(petShareDmg, this);
 					}
 				}
 			}
@@ -1481,7 +1496,7 @@ namespace CommonAI.Zone.Instance
                 //手动取消技能禁止其他技能打断//
                 return null;
             }
-            if (mFormula.TryLaunchSkill(this, ss, ref param) && ss.TryLaunch())
+            if (ss.TryLaunch() && mFormula.TryLaunchSkill(this, ss, ref param))
             {
 				if(param.IsAutoLaunch && !ss.CanAutoLaunch())
 				{
@@ -1872,6 +1887,11 @@ namespace CommonAI.Zone.Instance
             mBindEvents.Clear();
         }
 
+		/** 计算并获得伤害 */
+		public virtual void PetShareDamage(int baseDmgValue, InstanceUnit sender)
+		{
+		}
+
 		#endregion
 		//-----------------------------------------------------------------------------------------------------//
 

+ 5 - 0
Common/CommonAI/Zone/Instance/InstanceZone.cs

@@ -1572,6 +1572,11 @@ namespace CommonAI.Zone.Instance
         /// <returns></returns>
         public virtual bool IsAttackable(InstanceUnit src, InstanceUnit target, SkillTemplate.CastTarget expectTarget, AttackReason reason, ITemplateData weapon)
         {
+			if(src == null || target == null)
+			{
+				return false;
+			}
+
             if (!IsVisibleAOI(src, target))
             {
                 return false;

+ 2 - 0
Common/CommonAI/Zone/Instance/InstanceZoneObject.cs

@@ -76,6 +76,8 @@ namespace CommonAI.Zone.Instance
         /** 单位是否死亡 */
         public virtual bool IsDead() { return false; }
 
+		public virtual bool IsNeedProcessDead() { return false; }
+
         //---------------------------------------------------------------------------------------
 
         public uint ID { get { return mID; } }

+ 1 - 1
Common/CommonAI/Zone/ZoneEditor/EditorScene.cs

@@ -119,7 +119,7 @@ namespace CommonAI.Zone.ZoneEditor
 
 		public override int GetSceneID()
 		{
-			return this.mSceneData.ID;
+			return this.mSceneData == null ? -1 : this.mSceneData.ID;
 		}
 
 		protected override void Disposing()

+ 3 - 1
Common/CommonAI/ZoneServer/JSGModule/JSGModule.cs

@@ -100,7 +100,9 @@ namespace CommonAI.ZoneServer.JSGModule
 				return "";
 			}
 
-			return "【attackSN: " + (source.Attack == null ? 0 : source.Attack.SerialNumber) + ", spellID: " + (source.FromSpell == null ? 0 : source.FromSpell.ID) + "】";
+			return "【attackSN: " + (source.Attack == null ? 0 : source.Attack.SerialNumber) 
+				+ ", attackID: " + (source.Attack == null ? 0 : source.Attack.Properties.GetAttackID())
+				+ ", spellID: " + (source.FromSpell == null ? 0 : source.FromSpell.ID) + "】";
 		}
 
 		public static bool IsActiveSkill(XmdsSkillType skillType)

+ 1 - 1
XmdsCommonServer/Plugin/CardSkill/PlayerCardSkill/JSNextCardSkillStrengthenhModule.cs

@@ -105,7 +105,7 @@ namespace XmdsCommonServer.Plugin.CardSkill.PlayerCardSkill
 				{
 					//针对叠层
 					oldData.AddLayers(data);
-					System.Console.WriteLine("伤害叠层:" + data.value2 + " -> " + oldData.value2);
+					//System.Console.WriteLine("伤害叠层:" + data.value2 + " -> " + oldData.value2);
 					return oldData;
 				}
 			} while (false);

+ 2 - 1
XmdsCommonServer/Plugin/JSGModule/JSGMountainKingModule.cs

@@ -39,7 +39,7 @@ public class JSGMountainKingModule
 		HashMap<int, MountainKingData> srvMountain = mMountainKings.Get(gameSrvId);
 		if(srvMountain != null)
 		{
-			log.Warn("多次初始化山大王数据,过:" + gameSrvId);
+			log.Warn("多次初始化山大王数据,过:" + gameSrvId);
 			return;
 		}
 
@@ -51,6 +51,7 @@ public class JSGMountainKingModule
 		{
 			srvMountain.Put(kingId, new MountainKingData());
 		}
+		log.Warn("初始化山大王信息:" + gameSrvId + ", " + kings.Count);
 	}
 
 	/** 怪物复活,判断是否山大王 */

+ 60 - 47
XmdsCommonServer/Plugin/Units/XmdsInstancePet.cs

@@ -11,13 +11,14 @@ using System.Linq;
 using System.Text;
 using XmdsCommon.Message;
 using XmdsCommon.Plugin;
+using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
 using static CommonAI.Zone.SkillTemplate;
 
 namespace XmdsCommonServer.Plugin.Units
 {
     public class XmdsInstancePet : InstancePet
     {
-        private XmdsCommon.Plugin.XmdsPetConifg.XmdsPetFollowMode mCurFollowMode = XmdsCommon.Plugin.XmdsPetConifg.XmdsPetFollowMode.ActiveAtk;
+		private XmdsCommon.Plugin.XmdsPetConifg.XmdsPetFollowMode mCurFollowMode = XmdsCommon.Plugin.XmdsPetConifg.XmdsPetFollowMode.ActiveAtk;
 
         //主人当前战斗状态.
         private BattleStatus mMasterCombatStatus;
@@ -99,8 +100,8 @@ namespace XmdsCommonServer.Plugin.Units
 
 				//主人脱战了,并且没有伤害,宠物强行脱战
 				//2020.9.22修改,宠物可以和怪物撕逼
-                if (CurrentState is StateIdle/* || (this.Master.mLastHitOtherTime + XmdsVirtual.Coefficient_OutOfCombatTime < CommonLang.CUtils.localTimeMS
-					&& this.Master.mLastDamageTime + XmdsVirtual.Coefficient_OutOfCombatTime < CommonLang.CUtils.localTimeMS)*/)
+                if (CurrentState is StateIdle || (this.Master.mLastHitOtherTime + XmdsConfig.Instance.OUTOF_BATTLE_PLAYER < CommonLang.CUtils.localTimeMS
+					&& this.Master.mLastDamageTime + XmdsConfig.Instance.OUTOF_BATTLE_PLAYER < CommonLang.CUtils.localTimeMS))
                 {
                     mCurAtkUnit = null;
 
@@ -393,49 +394,49 @@ namespace XmdsCommonServer.Plugin.Units
         {
             bool ret = false;
 
-            using (var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
-            {
-                //找到离自己最近的单位攻击.
-                Parent.getObjectsRoundRange<InstanceUnit>(Collider.Object_BlockBody_TouchRound, X, Y, Info.GuardRange, list , AoiStatus);
-                DoAndRemoveCollection.UpdateAndRemove<InstanceUnit>(list, (InstanceUnit u) =>
-                {
-                    return !u.IsActive;
-                });
-
-                if (list != null && list.Count > 0)
-                {
-                    list.Sort((a, b) =>
-                    {
-                        //选距离最近的单位.
-                        float da = CMath.getDistanceSquare(a.X, a.Y, this.X, this.Y);
-                        float db = CMath.getDistanceSquare(b.X, b.Y, this.X, this.Y);
-                        return (int)(da - db);
-                    });
-
-                    foreach (SkillState skill in SkillStatus)
-                    {
-                        if (skill.LaunchSkill.AutoLaunch && skill.TryLaunch())
-                        {
-                            foreach (InstanceUnit u in list)
-                            {
-                                if (this.IsCanAttack(u) && Parent.IsAttackable(this, u, skill.Data.ExpectTarget, AttackReason.Attack, skill.Data))
-                                {
-                                    //是否在守卫范围内.
-                                    if (CheckInAtkRange(u, this.Info.GuardRange + skill.Data.AttackRange))
-                                    {
-                                        //检测是否有可释放技能//
-                                        if (tryAutoLaunch(skill, u))
-                                        {
-                                            return true;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                }
-            }
+            //using (var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
+            //{
+            //    //找到离自己最近的单位攻击.
+            //    Parent.getObjectsRoundRange<InstanceUnit>(Collider.Object_BlockBody_TouchRound, X, Y, Info.GuardRange, list , AoiStatus);
+            //    DoAndRemoveCollection.UpdateAndRemove<InstanceUnit>(list, (InstanceUnit u) =>
+            //    {
+            //        return !u.IsActive;
+            //    });
+
+            //    if (list != null && list.Count > 0)
+            //    {
+            //        list.Sort((a, b) =>
+            //        {
+            //            //选距离最近的单位.
+            //            float da = CMath.getDistanceSquare(a.X, a.Y, this.X, this.Y);
+            //            float db = CMath.getDistanceSquare(b.X, b.Y, this.X, this.Y);
+            //            return (int)(da - db);
+            //        });
+
+            //        foreach (SkillState skill in SkillStatus)
+            //        {
+            //            if (skill.LaunchSkill.AutoLaunch && skill.TryLaunch())
+            //            {
+            //                foreach (InstanceUnit u in list)
+            //                {
+            //                    if (this.IsCanAttack(u) && Parent.IsAttackable(this, u, skill.Data.ExpectTarget, AttackReason.Attack, skill.Data))
+            //                    {
+            //                        //是否在守卫范围内.
+            //                        if (CheckInAtkRange(u, this.Info.GuardRange + skill.Data.AttackRange))
+            //                        {
+            //                            //检测是否有可释放技能//
+            //                            if (tryAutoLaunch(skill, u))
+            //                            {
+            //                                return true;
+            //                            }
+            //                        }
+            //                    }
+            //                }
+            //            }
+            //        }
+
+            //    }
+            //}
             return ret;
         }
 
@@ -495,7 +496,19 @@ namespace XmdsCommonServer.Plugin.Units
             return false;
         }
 
-        public override void doSomething()
+		/** 计算并获得伤害 */
+		public override void PetShareDamage(int baseDmgValue, InstanceUnit sender)
+		{
+			XmdsVirtual petVirtual = this.Virtual as XmdsVirtual;
+			int finalDmg = XmdsDamageCalculator.GetPetDamage(baseDmgValue, petVirtual);
+
+			//分发事件
+			finalDmg = petVirtual.DispatchShareMasterDmgEvent(finalDmg, sender);
+			
+			this.AddHP(-finalDmg, sender);
+		}
+
+		public override void doSomething()
         {
             if (CurrentState is StateSkill)
             {

+ 8 - 7
XmdsCommonServer/Plugin/Units/XmdsInstancePlayer.cs

@@ -377,7 +377,8 @@ namespace XmdsCommonServer.Plugin.Units
         }
         protected override bool doLaunchSkill(UnitLaunchSkillAction sk)
         {
-			//Console.WriteLine(" ------------------------------doLaunchSkill - " + sk.SkillID + ", " + this.ID + ", targetID: " + sk.TargetObjID	+ ", XY:" + this.X + ", " + this.Y + ", direction : " + this.Direction);
+			//Console.WriteLine(" ------------------------------doLaunchSkill - " + sk.SkillID + ", " + this.ID + ", targetID: " + 
+			//	sk.TargetObjID	+ ", XY:" + this.X + ", " + this.Y + ", direction : " + this.Direction + ", " + this.Parent.UUID);
 			//if(sk.SkillID == 110160)
 			//	sk.SkillID = 110360;
 			//如果在采集中,不让放技能,并通知客户端.
@@ -648,12 +649,12 @@ namespace XmdsCommonServer.Plugin.Units
                             return;
                         }
 
-						if (CommonLang.CUtils.localTimeMS - this.mLastAutoAttackTime > 3000/* && this.X == this.mLastAutoFightPos.X && this.Y == this.mLastAutoFightPos.Y*/)
-						{
-							this.mLastAutoAttackTime = CommonLang.CUtils.localTimeMS;
-							this.mGuardPos.SetX(this.X);
-							this.mGuardPos.SetY(this.Y);
-						}
+						//if (CommonLang.CUtils.localTimeMS - this.mLastAutoAttackTime > 3000/* && this.X == this.mLastAutoFightPos.X && this.Y == this.mLastAutoFightPos.Y*/)
+						//{
+						//	this.mLastAutoAttackTime = CommonLang.CUtils.localTimeMS;
+						//	this.mGuardPos.SetX(this.X);
+						//	this.mGuardPos.SetY(this.Y);
+						//}
 					}
                 }
             }

+ 18 - 4
XmdsCommonServer/Plugin/XmdsSkillTemplate/DamageCalculator/XmdsDamageCalculator.cs

@@ -43,6 +43,9 @@ namespace XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator
 		//神器属性
 		private const float Coefficient_Artifact = 1.1f;
 
+		//随从受伤K系数
+		private static readonly float PET_HIT_DAMAGE_K = 0.5f;
+
         //万分比.
         public static float PERER = 10000.0f;
 
@@ -349,10 +352,10 @@ namespace XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator
 					//猎妖防御系数
 					if(hitter.GetStateLv() > 0)
 					{
-						int hitDef = GetMonsterDefAddition(attacker.GetStateLv());
-						if(hitDef > 0)
+						int atkMonsterDef = GetMonsterDefAddition(attacker.GetStateLv());
+						if(atkMonsterDef > 0)
 						{
-							monsterAtkPer = 2.0f * hitDef / (hitDef + hitter.MirrorProp.MaxMonsterDef);
+							monsterAtkPer = 2.0f * atkMonsterDef / (atkMonsterDef + hitter.MirrorProp.MaxMonsterDef);
 						}						
 					}					
 				}
@@ -394,10 +397,21 @@ namespace XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator
 				damage = CUtils.CastInt(damage * (1 + (attacker.mUnit.Level - hitter.mUnit.Level) * BOSS_LEVEL_SUBDUE));
 			}
 
-
 			return Math.Max(damage, 1);
 		}
 
+		public static int GetPetDamage(int damageBaseValue, XmdsVirtual pet)
+		{
+			//防御属性
+			float ingoreDmg = 1.0f - pet.MirrorProp.Defence / (pet.MirrorProp.Defence + GetDefenceAddition(pet.GetStateLv()));
+
+			//伤害变更(免伤,受伤加深)
+			float allDmgChg = GetFinalDamageValue(pet.MirrorProp.AllDmgAdd - pet.MirrorProp.AllDmgReduce);
+
+			int finalDmg = Math.Max(1, (int)(damageBaseValue * PET_HIT_DAMAGE_K * ingoreDmg * allDmgChg));
+			return finalDmg;
+		}
+
 		private static float GetFinalDamageValue(int value)
 		{
 			if (value < 0)

+ 1 - 1
XmdsCommonServer/Plugin/XmdsSkillTemplate/Skills/XmdsSkill.cs

@@ -494,7 +494,7 @@ namespace XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills
 	public delegate bool IAddOtherHPEvent(int hp, InstanceUnit sender, InstanceUnit hitter, out int finalHP);
 
 	//宠物承担主人伤害事件
-	public delegate bool IShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit);
+	public delegate int IShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill info, ref bool isEndDispatch);
 
 	//扣定力
 	public delegate bool IReduceOtherMpEvent(int mp, InstanceUnit sender, InstanceUnit hitter, out int finalMP, AttackSource source);

+ 8 - 3
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Event.cs

@@ -1112,7 +1112,7 @@ namespace XmdsCommonServer.Plugin
 			int checkValue = (source != null && source.Attack != null && source.Attack.Properties.GetAttackID() / 100 == 1104)
 				? attacker.mUnit.CurrentHP : attacker.MirrorProp.GetFinalAttack(hitter == null ? false : hitter.mUnit.IsMonster);
 
-			if (finalDmg / sourceDmg > 3.5f || finalDmg / checkValue > 60)
+			if (finalDmg / sourceDmg > 5.0f || finalDmg / checkValue > 60)
 			{
 				log.Warn(flag + ", dmg: " + (int)finalDmg + ", src: " + (int)sourceDmg + ", attackerAtk: " + attacker.MirrorProp.MaxAttack + ", "
 					+ attacker.MirrorProp.MaxMonsterAttack + ", atkHP:" + mUnit.CurrentHP
@@ -1502,16 +1502,21 @@ namespace XmdsCommonServer.Plugin
 		}
 
 		/** 分发宠物承担主人伤害事件 */
-		public void DispatchShareMasterDmgEvent(int shareDmg, InstanceUnit sender)
+		public int DispatchShareMasterDmgEvent(int shareDmg, InstanceUnit sender)
 		{
+			bool isEndDispatch = false;
 			for (int i = mShareMasterDmgList.Count - 1; i >= 0; --i)
 			{
 				OnShareMasterDmgEvent hitend = mShareMasterDmgList[i];
-				if (hitend.m_hand.Invoke(shareDmg, sender, this.mUnit))
+
+				shareDmg = hitend.m_hand.Invoke(shareDmg, sender, this.mUnit, hitend.m_skill, ref isEndDispatch);
+				if (isEndDispatch)
 				{
 					break;
 				}
 			}
+
+			return shareDmg;
 		}
 
 

+ 2 - 2
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Skills.cs

@@ -466,6 +466,7 @@ namespace XmdsCommonServer.Plugin
 
 			return ret;
 		}
+
 		/// <summary>
 		/// 判断是否可放技能.
 		/// </summary>
@@ -474,8 +475,7 @@ namespace XmdsCommonServer.Plugin
 		public virtual bool TryLaunchSkill(InstanceUnit.SkillState skill, ref InstanceUnit.LaunchSkillParam param)
 		{
 			#region 
-
-			if (this.mUnit.IsStun || (this.mUnit.IsSilent == true && skill.ID != this.SkillHelper.GetBaseSkillID()))
+			if (!this.mUnit.IsCanLaunchSkill(skill.ID))
 			{
 				SendMsgToClient(CommonAI.XmdsConstConfig.TIPS_CAN_NOT_USE_SKILL);
 				return false;

+ 11 - 6
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Team.cs

@@ -333,12 +333,17 @@ namespace XmdsCommonServer.Plugin
             return s == id ? true : false;
         }
 
-        /// <summary>
-        /// 是否相同阵营势力.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <returns></returns>
-        public virtual bool IsCampMember(int type)
+		public virtual int GetBaseSkillID()
+		{
+			return this.SkillHelper == null ? 0 : this.SkillHelper.GetBaseSkillID();
+		}
+
+		/// <summary>
+		/// 是否相同阵营势力.
+		/// </summary>
+		/// <param name="type"></param>
+		/// <returns></returns>
+		public virtual bool IsCampMember(int type)
         {
             int r = this.GetForceID();
 

+ 9 - 1
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.cs

@@ -131,6 +131,9 @@ namespace XmdsCommonServer.Plugin
 		//恢复MP状态,不可打断
 		public int mRecoverMPLeftTimes;
 
+		//PVP触发的玩家id
+		public string mPvpTriggerPlayerId;
+
         //战斗状态变更通知.
         public delegate void OnCombatChangeEvent(BattleStatus status);
         public event OnCombatChangeEvent OnHandleCombatChangeEvent
@@ -1117,7 +1120,12 @@ namespace XmdsCommonServer.Plugin
 
         protected virtual void ChangeCombatStateFromAtk(XmdsVirtual target)
         {
-            var s = target.IsPlayerUnit() ? BattleStatus.PVP : BattleStatus.PVE;
+            var s = BattleStatus.PVE;
+			if (target.IsPlayerUnit())
+			{
+				s = BattleStatus.PVP;
+				this.mPvpTriggerPlayerId = target.mUnit.PlayerUUID;
+			}
             SetCombatState(s);
         }
 

+ 5 - 5
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual_Monster.cs

@@ -826,14 +826,14 @@ namespace XmdsCommonServer.Plugin
 
 			if (ret.MaxHP <= 0 || ret.MaxAttack <= 0 || ret.Defence <= 0)
 			{
-				log.Error("怪物属性错误:" + this.mUnit.Info.ID + ", 生命:" + ret.MaxHP +
+				log.Error("怪物属性错误:" + this.mUnit.Parent.GetSceneID() + ", " + this.mUnit.Info.ID + ", 生命:" + ret.MaxHP +
 					", 攻击:" + ret.MaxAttack + ", 防御:" + ret.Defence);
 			}
-			else if(ret.MaxHP > 500000 || ret.MaxAttack > 30000)
+			else if(this.IsBoss() || ret.MaxHP > 500000 || ret.MaxAttack > 10000)
 			{
-				log.Info("场景:" + _sceneType + ", ID: " + templateID + ", " + this.mUnit.Parent.UUID + ", 等级: " + lvl_monster + ", 战斗规模:" + ma.Fight_Type + ",(攻-" +
-					ret.BaseAttack + ", 防-" + ret.BaseDefence + ", 血-" + ret.BaseMaxHP + ", 爆-" + ret.CritRate + ", 爆伤-" +
-					ret.CritDamage + ", 穿透-" + ret.IgnoreDefensePer + ")");
+				log.Info("场景:" + this.mUnit.Parent.GetSceneID() + ", ID: " + templateID + ", " + this.mUnit.Parent.UUID + ", UID: " + this.mUnit.ID + ", 等级: " + lvl_monster 
+					+ ", 战斗规模:" + ma.Fight_Type + ",(攻-" +	ret.BaseAttack + ", 防-" + ret.BaseDefence + ", 血-" + ret.BaseMaxHP + ", 爆-" + ret.CritRate
+					+ ", 爆伤-" + ret.CritDamage + ", 穿透-" + ret.IgnoreDefensePer + ")");
 			}
         }
 

+ 0 - 1
XmdsCommonServer/XLS/XLSMountainKingConfigLoader.cs

@@ -78,7 +78,6 @@ namespace XmdsCommonServer.XLS
 						mMapMountainKing.Put(int.Parse(mapId), m.ID);
 					}
 					mKings.Add(m.ID);
-					break;
 				}
 			}
 			catch (Exception error)

+ 1 - 1
XmdsServerCS/XmdsServerEdgeJS/Zone/ZoneService.cs

@@ -233,7 +233,7 @@ namespace XmdsServerEdgeJS.Zone
 					resCode = 1;
 					XmdsVirtual playerVirtual = player.BindingActor.Virtual as XmdsVirtual;
 					log.Warn("PVP状态下传送2:" + playerVirtual.mUnit.PlayerUUID + ", 场景ID: " + playerVirtual.mUnit.Parent.GetSceneID() + ", " 
-						+ playerVirtual.GetHateSystem().GetHatePlayerInfo());
+						+ playerVirtual.GetHateSystem().GetHatePlayerInfo() + ", 触发PVP玩家:" + playerVirtual.mPvpTriggerPlayerId);
 
 				}
 			}

+ 1 - 1
XmdsServerCS/XmdsServerEdgeJS/Zone/ZoneServiceICE.cs

@@ -228,7 +228,7 @@ namespace XmdsServerEdgeJS.Zone
 				{
 					XmdsVirtual playerVirtual = player.BindingActor.Virtual as XmdsVirtual;
 					log.Warn("PVP状态下传送1:" + playerVirtual.mUnit.PlayerUUID + ", 场景ID: " + playerVirtual.mUnit.Parent.GetSceneID() + ", " + 
-						playerVirtual.GetHateSystem().GetHatePlayerInfo());
+						playerVirtual.GetHateSystem().GetHatePlayerInfo() + ", 触发PVP玩家:" + playerVirtual.mPvpTriggerPlayerId);
 				}				
 			}
 

+ 9 - 2
XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Boss/Boss_91001.cs

@@ -83,6 +83,11 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 				mTriggerHelp = false;
 				return;
 			}
+			else if (mNextWeakTime == 0)
+			{
+				//起手进入战斗状态,默认进一次cd
+				this.mNextWeakTime = this.mWeakInterval + CommonLang.CUtils.localTimeMS;
+			}
 
 			int kingID = this.mOwner.mUnit.Parent.GetZoneKingID();
 			if (kingID > 0 && mNextWeakTime < CommonLang.CUtils.localTimeMS && !JSGMountainKingModule.IsKingAlive(this.mOwner.mUnit.Parent, kingID) 
@@ -106,8 +111,9 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			{
 				damage += damage * this.mDamageDeeper;
 			}
-			else if (!mTriggerHelp && hitted.mUnit.IsActive)
+			else if (!mTriggerHelp && hitted.mUnit.IsActive && hitted.mUnit.Virtual.GetBattleStatus() >= BattleStatus.PVE)
 			{
+				//一刀就干到了触发值的,可以过滤,毕竟第二刀就死了
 				int leftHP = (int)(hitted.mUnit.CurrentHP - damage);
 				if (leftHP > 0 && leftHP < mTriggerHP)
 				{
@@ -138,7 +144,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 					}
 					else
 					{
-						log.Warn("触发大王护卫事件,找不到仇恨目标:" + hitted.mUnit.Parent.GetSceneID() + ", " + hitted.mUnit.Info.ID + ", " + ret.Count
+						log.Warn("触发大王护卫事件,找不到仇恨目标:" + hitted.mUnit.Parent.GetSceneID() + ", " + hitted.mUnit.Info.ID + ", " + ret.Count 
+							+ ", 本次伤害:" + damage + ", 剩余血量: " + leftHP + ", PV状态: " + hitted.mUnit.Virtual.GetBattleStatus()
 							+ ", 本次攻击者信息:" + attacker.mUnit.PlayerUUID + ", " + attacker.mUnit.Info.ID + ", " + JSGModule.GetAttackSourceDes(source));
 					}
 				}

+ 30 - 12
XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Pet20200515/Pet_80009.cs

@@ -57,7 +57,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			owner.RegistSendBuff(bt);
 
 			this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
-			mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDamage, skillInfo, true);
+			//mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDamage, skillInfo, true);
+			mUUID_1 = owner.RegistShareMasterDmgEvent(OnShareMasterDmgEvent, skillInfo);
 		}
 
 		protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
@@ -72,22 +73,38 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			bt.LifeTimeMS = buffTime.GetValue(gs.SkillLevel);
 		}
 
-		private float OnHandleHitDamage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
-		ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		private int OnShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill skill, ref bool isEndDispatch)
 		{
-			UnitFateType fateType = hitted.GetUnitFateType();
-			if (fateType != UnitFateType.None && damageType == DamageType.Damage && 
-				this.mNextTriggerTime < CommonLang.CUtils.localTimeMS &&
-				IsTrigger(hitted, triggerRate, triggerRateExt, skill, fateType))
+			XmdsVirtual virUnit = unit.Virtual as XmdsVirtual;
+			UnitFateType fateType = virUnit.GetUnitFateType();
+			if (fateType != UnitFateType.None && hp > 0 && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS &&
+				IsTrigger(virUnit, triggerRate, triggerRateExt, skill, fateType))
 			{
-				hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
+				virUnit.mUnit.AddBuff(Buff_ID, virUnit.mUnit);
 
 				this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
-				base.NotifyTriggerAblity(hitted.mUnit, this.SkillID);
+				base.NotifyTriggerAblity(virUnit.mUnit, this.SkillID);
 			}
 
-			return damage;
-		}		
+			return hp;
+		}
+
+		//private float OnHandleHitDamage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
+		//ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		//{
+		//	UnitFateType fateType = hitted.GetUnitFateType();
+		//	if (fateType != UnitFateType.None && damageType == DamageType.Damage && 
+		//		this.mNextTriggerTime < CommonLang.CUtils.localTimeMS &&
+		//		IsTrigger(hitted, triggerRate, triggerRateExt, skill, fateType))
+		//	{
+		//		hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
+
+		//		this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
+		//		base.NotifyTriggerAblity(hitted.mUnit, this.SkillID);
+		//	}
+
+		//	return damage;
+		//}		
 
 		protected override void OnInitSkillParam()
 		{
@@ -101,7 +118,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 
 		protected override void OnDispose(XmdsVirtual owner)
 		{
-			owner.UnRegistOnHitDamage(mUUID_1);
+			//owner.UnRegistOnHitDamage(mUUID_1);
+			owner.UnRegistShareMasterDmgEvent(mUUID_1);
 		}
 	}
 }

+ 26 - 7
XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Pet20200515/Pet_80011.cs

@@ -52,7 +52,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			owner.RegistSendBuff(bt);
 
 			this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
-			mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
+			//mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
+			mUUID_1 = owner.RegistShareMasterDmgEvent(OnShareMasterDmgEvent, skillInfo);
 		}
 
 		protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
@@ -64,13 +65,13 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			bt.LifeTimeMS = buffTime.GetValue(gs.SkillLevel);
 		}
 
-		private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
-		  ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		private int OnShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill skill, ref bool isEndDispatch)
 		{
+			XmdsVirtual hitted = unit.Virtual as XmdsVirtual;
 			UnitFateType fateType = hitted.GetUnitFateType();
-			if (fateType != UnitFateType.None && damageType == DamageType.Damage && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
+			if (fateType != UnitFateType.None && hp > 0 && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
 			{
-				long triggerHP = (long)(hitted.mUnit.MaxHP * XmdsUnitProp.PER * hpTriggerData.GetValue(skill.SkillLevel));
+				long triggerHP = (long)(hitted.mUnit.MaxHP * XmdsUnitProp.PER * hpTriggerData.GetValue(skill.SkillLevel)) * 5;
 				if(hitted.mUnit.CurrentHP < triggerHP)
 				{
 					hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
@@ -79,8 +80,25 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 
 				this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
 			}
-			return damage;
+			return hp;
 		}
+		//private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
+		//  ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		//{
+		//	UnitFateType fateType = hitted.GetUnitFateType();
+		//	if (fateType != UnitFateType.None && damageType == DamageType.Damage && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
+		//	{
+		//		long triggerHP = (long)(hitted.mUnit.MaxHP * XmdsUnitProp.PER * hpTriggerData.GetValue(skill.SkillLevel));
+		//		if(hitted.mUnit.CurrentHP < triggerHP)
+		//		{
+		//			hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
+		//			base.NotifyTriggerAblity(hitted.mUnit, this.SkillID);
+		//		}
+
+			//		this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
+			//	}
+			//	return damage;
+			//}
 
 		protected override void OnInitSkillParam()
 		{
@@ -95,7 +113,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 
 		protected override void OnDispose(XmdsVirtual owner)
 		{
-			owner.UnRegistOnHitDamage(mUUID_1);
+			//owner.UnRegistOnHitDamage(mUUID_1);
+			owner.UnRegistShareMasterDmgEvent(mUUID_1);
 		}
 	}
 }

+ 1 - 1
XmdsVSPlugins/XmdsCommonSkill/Plugin/Skills/Warrior/Warrior_110550.cs

@@ -51,7 +51,7 @@ namespace XmdsCommonSkill.Plugin.Skills.Warrior
 			var buff1 = unit.GetRegisBuffVirtual(Buff_ID_5_5, 0) as XmdsBuff_IgnorCtrlAndSpeedChg;
 			buff1.speedChange = mValueSet3.GetValue(gs.TalentSkillLevel2, 1);
 
-			var buff2 = unit.GetRegisBuffVirtual(Buff_ID_5_5, 0) as XmdsBuff_PropChange;
+			var buff2 = unit.GetRegisBuffVirtual(Buff_ID_5_5, 1) as XmdsBuff_PropChange;
 			buff2.CurrentValue = mValueSet3.GetValue(gs.TalentSkillLevel2, 2);
 		}