Browse Source

【优化】日志 & 微量内存泄漏

meijun 3 years ago
parent
commit
28dcbeb630

+ 4 - 1
Common/CommonAI/Zone/Instance/InstanceNpcs.cs

@@ -63,6 +63,9 @@ namespace CommonAI.Zone.Instance
             mTracingTarget = null;
             mGuardTarget = null;
             mBackToPosition = null;
+            mOrginPosition = null;
+            this.mNextCheckGuardLimit = null;
+            this.OnActivated -= this.onUnitActivated;
         }
 
         override protected void onResetAI()
@@ -423,7 +426,7 @@ namespace CommonAI.Zone.Instance
             if (Info.GuardRangeLimit > Info.GuardRange)
             {
                 //if (mCheckInGuardLimit.Update(Parent.UpdateIntervalMS))
-				if(mNextCheckGuardLimit.IsTrigger())
+				if(mNextCheckGuardLimit != null && mNextCheckGuardLimit.IsTrigger())
                 {
                     if (!CMath.includeRoundPoint(X, Y, Info.GuardRangeLimit, mOrginPosition.X, mOrginPosition.Y))
                     {

+ 9 - 9
Common/CommonAI/Zone/Instance/InstanceUnit.Status.cs

@@ -83,15 +83,15 @@ namespace CommonAI.Zone.Instance
             mMultiTimeLineGroup.Add(timeline);
             return timeline;
         }
-        /// <summary>
-        /// 获取指定ID TimeLine
-        /// </summary>
-        /// <param name="index"></param>
-        /// <returns></returns>
-        public MultiTimeLine GetTimeLine(int index)
-        {
-            return mMultiTimeLineGroup[index];
-        }
+        ///// <summary>
+        ///// 获取指定ID TimeLine
+        ///// </summary>
+        ///// <param name="index"></param>
+        ///// <returns></returns>
+        //public MultiTimeLine GetTimeLine(int index)
+        //{
+        //    return mMultiTimeLineGroup[index];
+        //}
 
 		public bool IsMoveAble()
 		{

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

@@ -162,15 +162,15 @@ namespace CommonAI.Zone.Instance
             this.clearItemSlots();
             this.clearTriggers();
 
-			//this.mNoneBlockTimeMS.Clear();
-			//this.mStunTimeMS.Clear();
-			//this.mInvisibleTimeMS.Clear();
-			//this.mInvincibleTimeMS.Clear();
-			//this.mSilentTimeMS.Clear();
-			//this.mCannotMoveTimeMS.Clear();
-			//this.mIgnoreControl.Clear();
-
-			foreach (MultiTimeLine timeLine in mMultiTimeLineGroup)
+			this.mNoneBlockTimeMS.Disposing();
+            this.mStunTimeMS.Disposing();
+            this.mInvisibleTimeMS.Disposing();
+            this.mInvincibleTimeMS.Disposing();
+            this.mSilentTimeMS.Disposing();
+            this.mCannotMoveTimeMS.Disposing();
+            this.mIgnoreControl.Disposing();
+
+            foreach (MultiTimeLine timeLine in mMultiTimeLineGroup)
 			{
 				timeLine.Disposing();
 			}

+ 29 - 11
Common/CommonAI/ZoneServer/JSGModule/JSGServerProfile.cs

@@ -1,4 +1,5 @@
-using CommonAI.Zone;
+using CommonAI.Data;
+using CommonAI.Zone;
 using CommonLang;
 using CommonLang.Log;
 using System;
@@ -45,7 +46,7 @@ namespace CommonAI.ZoneServer.JSGModule
 		}
 
 		protected static readonly Logger log = LoggerFactory.GetDefLogger();
-		private static readonly int STRIGGER_INTERVAL = 600 * 1000;
+		private static int STRIGGER_INTERVAL = 1800 * 1000;
 
 		//////////////////////////////////////////////////////////////////////////////////
 		//数据统计		
@@ -62,6 +63,11 @@ namespace CommonAI.ZoneServer.JSGModule
 
 		public static void init()
 		{
+			if (GlobalData.GAME_BS_TEST)
+            {
+				STRIGGER_INTERVAL = 300 * 1000;
+			}
+
 			mNextPrintTime = CommonLang.CUtils.CurrentTimeMS + STRIGGER_INTERVAL;
 		}
 
@@ -153,33 +159,45 @@ namespace CommonAI.ZoneServer.JSGModule
 			log.Info(" --------------------- PackEvent recv ------------------- ");
 			foreach (KeyValuePair<int, JSGProfileData> kv in mRecProfile)
 			{
-				log.Info(" - - - - - MsgID = " + kv.Key + ",\t Size = " + kv.Value.size +
-					", \ttimes = " + kv.Value.times + ", \t avg = " + (kv.Value.size / kv.Value.times));
+				log.Info(" - - - - - MsgID = " + kv.Key + ",\t Size = " + kv.Value.size + ", \ttimes = " + kv.Value.times + ", \t avg = " + (kv.Value.size / kv.Value.times));
 			}
 
-			log.Info("----------------------创建场景耗时统计输出----------------------");
+			JSGPrintLog("----------------------创建场景耗时统计输出----------------------");
 			foreach (ZoneCreateInfo info in mZoneCreate.Values)
 			{
-				log.Info("##创建场景耗时统计:" + info.areaId + ", " + info.mTotalTimes + ", " + info.mTotalTimeUse);
+				JSGPrintLog("##创建场景耗时统计:" + info.areaId + ", " + info.mTotalTimes + ", " + info.mTotalTimeUse);
 			}
 
-			log.Info("----------------------场景事件耗时输出----------------------");
+			JSGPrintLog("----------------------场景事件耗时输出----------------------");
 			foreach (JSGTriggerProfile info in mZoneTriggers.Values)
 			{
-				log.Info("##场景触发器总揽:" + info.areaId + ", 检测次数:" + info.total.checkTimes + ", 触发次数: " + info.total.triggerTimes + ", 耗时:" + info.total.timeUse);
-				if (info.total.checkTimes < 1000 || info.total.timeUse < 1000)
+				JSGPrintLog("##场景触发器总揽:" + info.areaId + ", 检测次数:" + info.total.checkTimes + ", 触发次数: " + info.total.triggerTimes + ", 耗时:" + info.total.timeUse);
+				if (info.total.checkTimes < 10000 || info.total.timeUse < 1000)
 				{
 					continue;
 				}
 
 				foreach (KeyValuePair<string, TriggerData> kv in info.profileData)
 				{
-					log.Info("------场景触发器总揽:" + kv.Key + ", 检测次数:" + kv.Value.checkTimes + ", 触发次数: " + kv.Value.triggerTimes + ", 耗时:" + kv.Value.timeUse);
+					JSGPrintLog("------场景触发器总揽:" + kv.Key + ", 检测次数:" + kv.Value.checkTimes + ", 触发次数: " + kv.Value.triggerTimes + ", 耗时:" + kv.Value.timeUse);
 				}
 			}
 
-			log.Info(" ---------------------------------------------------- ");
+			JSGPrintLog(" ---------------------------------------------------- ");
 			return true;
 		}
+
+		private static void JSGPrintLog(string data)
+        {
+			if (GlobalData.GAME_BS_TEST)
+            {
+				log.Warn(data);
+            }
+            else
+            {
+				log.Info(data);
+            }
+
+		}
 	}
 }

+ 2 - 2
Common/CommonAI/data/Interface.cs

@@ -110,8 +110,8 @@ namespace CommonAI.data
 
 	public interface IPlayerCache
 	{
-		void AddTalentValue(int value);
-		void UseTalentValue(int value);
+		bool AddTalentValue(int value);
+		bool UseTalentValue(int value);
 		bool Refresh(bool notify = true);
 		void MarkValid(bool isValid);
 		int GetTalentValue();

+ 1 - 1
XmdsCommonServer/Plugin/Units/XmdsInstanceMonster.cs

@@ -117,7 +117,7 @@ namespace XmdsCommonServer.Plugin.Units
             if (mGuardRangeLimit > mGuardRange)
             {
 				//if (mCheckInGuardLimit.Update(Parent.UpdateIntervalMS))
-				if (mNextCheckGuardLimit.IsTrigger())
+				if (mNextCheckGuardLimit != null && mNextCheckGuardLimit.IsTrigger())
 				{
 					//怪物会原地警戒
 					float mGuardRangeLimitTemp = mGuardRangeLimit + 1.5f;

+ 1 - 1
XmdsCommonServer/Plugin/Units/XmdsInstanceNPC.cs

@@ -50,7 +50,7 @@ namespace XmdsCommonServer.Plugin.Units
             if (mOrginPosition != null && mGuardRangeLimit > mGuardRange)
             {
 				//if (mCheckInGuardLimit.Update(Parent.UpdateIntervalMS))
-				if (mNextCheckGuardLimit.IsTrigger())
+				if (mNextCheckGuardLimit != null && mNextCheckGuardLimit.IsTrigger())
 				{
 					if (!CMath.includeRoundPoint(X, Y, mGuardRangeLimit, mOrginPosition.X, mOrginPosition.Y))
                     {

+ 11 - 5
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Skills.cs

@@ -569,13 +569,13 @@ namespace XmdsCommonServer.Plugin
 		#region 技能监听回调.
 
 		//技能成功施放回调.
+		private long mPreLaunchTime;
 		private void OnLaunchSkillHandler(InstanceUnit obj, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
 		{
 			XmdsSkillProperties skillProp = skill.Data.Properties as XmdsSkillProperties;
 
 			//增加Buff判断,部分buff效果可使技能使用效果发生变更.
-			DispatchLaunchsSkillOverEvent(this, skill);
-
+			DispatchLaunchsSkillOverEvent(this, skill);			
 
 			//天赋点扣除
 			if (this.mUnit.IsPlayer && skill.ActionIndex <= 0 && (this.GetUnitPro() == XmdsUnitPro.Sword || this.GetUnitPro() == XmdsUnitPro.Magic))
@@ -583,12 +583,17 @@ namespace XmdsCommonServer.Plugin
 				XmdsSkillValue data = XmdsGlobalData.GetTalentData(skill.Data.ID);
 				if (data != null && data.GetValue() > 0)
 				{
-					this.Talent_Use(data.GetValue());
+                    if (!this.Talent_Use(data.GetValue()))
+                    {
+						long timePass = System.DateTime.Now.Ticks - mPreLaunchTime;
+						log.Warn("天赋扣除异常:" + this.mUnit.PlayerUUID + ", SceneID: " + this.mUnit.Parent.GetSceneID() + ", " + timePass);
+                    }
 				}
 			}
 
 			//能量扣除.
 			//mUnit.AddMP(-cost);
+			mPreLaunchTime = System.DateTime.Now.Ticks;
 		}
 
 		//回调增加技能.
@@ -1734,12 +1739,13 @@ namespace XmdsCommonServer.Plugin
 			}
 		}
 
-		public virtual void Talent_Use(int value)
+		public virtual bool Talent_Use(int value)
 		{
 			if (this.mPlayerCache != null)
 			{
-				this.mPlayerCache.UseTalentValue(value);
+				return this.mPlayerCache.UseTalentValue(value);
 			}
+			return false;
 		}
 
 		public virtual int Talent_Value()

+ 16 - 0
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.cs

@@ -263,6 +263,22 @@ namespace XmdsCommonServer.Plugin
 
 		public void OnDispose(InstanceUnit owner)
         {
+            if(this.mUnit != null)
+            {
+                //施放技能监听.
+                mUnit.OnLaunchSkill -= OnLaunchSkillHandler;
+                //技能新增监听.
+                mUnit.OnSkillAdded -= OnSkillAddHandler;
+                //技能移除监听.
+                mUnit.OnSkillRemoved -= OnSkillRemoveHandler;
+                //技能变更监听.
+                mUnit.OnStateChanged -= OnStateChangedHandler;
+                //物品时候时触发.
+                mUnit.OnUseItem -= MUnit_OnUseItem;
+
+                mUnit.OnSkillHitTarget -= OnSkillHitTargetHandler;
+            }          
+
             Dispose();
         }
 

+ 1 - 1
XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Remedy/Remedy_510601.cs

@@ -103,7 +103,7 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			if(poisonRate.value1 > 0 && poisonRate.value2 > 0 && attacker.mUnit.RandomN.Next(GlobalData.RATE_BASE) < (poisonRate.value1 + mPlayerCache.GetRateAddition()))
 			{
 				hitted.mUnit.AddBuff(Buff_POISON, attacker.mUnit, 0, false, false, false, 0, poisonRate.value2);
-				mPlayerCache.RecordPoisonPlayer(hitted);
+				//mPlayerCache.RecordPoisonPlayer(hitted);
 			}
 
 			return damage;

+ 4 - 2
XmdsVSPlugins/XmdsCommonSkill/Plugin/base/PlayerCache/PlayerCacheBase.cs

@@ -42,17 +42,19 @@ namespace XmdsCommonSkill.Plugin.Skills
 		}
 
 		// 获得天赋值
-		public virtual void AddTalentValue(int value)
+		public virtual bool AddTalentValue(int value)
 		{
 			//System.Console.WriteLine("++获得天赋值了:" + value + ", 总值:" + this.mTalentValue);
 			this.NotifyPlayer();
+			return true;
 		}
 
 		// 使用天赋(怒气/剑气)
-		public virtual void UseTalentValue(int value)
+		public virtual bool UseTalentValue(int value)
 		{
 			//System.Console.WriteLine("--消耗天赋值了:" + value + ", 总值:" + this.mTalentValue);
 			this.NotifyPlayer();
+			return true;
 		}
 
 		//天赋信息有变更,返回true

+ 7 - 7
XmdsVSPlugins/XmdsCommonSkill/Plugin/base/PlayerCache/PlayerCache_Magic.cs

@@ -39,19 +39,19 @@ namespace XmdsCommonSkill.Plugin.Skills
 		}
 
 		// 增加天赋点信息
-		public override void AddTalentValue(int value)
+		public override bool AddTalentValue(int value)
 		{
 			//战斗状态下,才会增加剑气值
 			if(this.mOwner.Virtual.GetBattleStatus() < CommonAI.Data.BattleStatus.PVE)
 			{
-				return;
+				return false;
 			}
 
 			// 法师每次获得剑气值都是一样的
 			value = value == 0 ? this.mSwordGetTalnetValue : value;
 			if (value <= 0)
 			{
-				return;
+				return false;
 			}
 
 			// 基础天赋值变更
@@ -68,20 +68,20 @@ namespace XmdsCommonSkill.Plugin.Skills
 			}
 
 			//this.mTalnetUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS;
-			base.AddTalentValue(value);
+			return base.AddTalentValue(value);
 		}
 
-		public override void UseTalentValue(int value)
+		public override bool UseTalentValue(int value)
 		{
 			if (value <= 0)
 			{
-				return;
+				return false;
 			}
 
 			this.mTalentValue = Math.Max(this.mTalentValue - value, 0);
 			//this.mTalnetUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS;
 
-			base.UseTalentValue(value);
+			return base.UseTalentValue(value);
 		}
 
 		public override bool Refresh(bool notify)

+ 53 - 53
XmdsVSPlugins/XmdsCommonSkill/Plugin/base/PlayerCache/PlayerCache_Remedy.cs

@@ -29,7 +29,7 @@ namespace XmdsCommonSkill.Plugin.Skills
 		private HashMap<int, IntIntData> mPoisonRate = new HashMap<int, IntIntData>();
 
 		//记录所有附加毒的玩家信息
-		private HashMap<String, PoisonPlayers> mPoisonPlayers = new HashMap<String, PoisonPlayers>();
+		//private HashMap<String, PoisonPlayers> mPoisonPlayers = new HashMap<String, PoisonPlayers>();
 
 		//毒buff有效时间
 		private int mPoisonValidTime;
@@ -101,18 +101,18 @@ namespace XmdsCommonSkill.Plugin.Skills
 
 
 		//记录叠毒玩家信息
-		public void RecordPoisonPlayer(XmdsVirtual hitter)
-		{
-			PoisonPlayers record = mPoisonPlayers.Get(hitter.mUnit.PlayerUUID);
-			if(record == null)
-			{
-				record = new PoisonPlayers();
-				record.player = hitter;
-				mPoisonPlayers.Put(hitter.mUnit.PlayerUUID, record);
-			}
-
-			record.buffValidTime = CommonLang.CUtils.localTimeMS + mPoisonValidTime;
-		}
+		//public void RecordPoisonPlayer(XmdsVirtual hitter)
+		//{
+		//	PoisonPlayers record = mPoisonPlayers.Get(hitter.mUnit.PlayerUUID);
+		//	if(record == null)
+		//	{
+		//		record = new PoisonPlayers();
+		//		record.player = hitter;
+		//		mPoisonPlayers.Put(hitter.mUnit.PlayerUUID, record);
+		//	}
+
+		//	record.buffValidTime = CommonLang.CUtils.localTimeMS + mPoisonValidTime;
+		//}
 
 		//刷新配置
 		public void RefreshConfig(int poisonTime)
@@ -121,46 +121,46 @@ namespace XmdsCommonSkill.Plugin.Skills
 		}
 
 		//毒爆: checkRange内的玩家毒会爆炸
-		public void TriggerPoisonEffect(int damageBase, int damagePer, int checkRange = 9, int addLayer = 0, int breakAddBuffId = 0, int breakAddBufMaxLayer = 0)
-		{
-			XmdsVirtual owner = this.mOwner.Virtual as XmdsVirtual;
-			foreach (PoisonPlayers playerData in mPoisonPlayers.Values)
-			{
-				if (playerData.buffValidTime < CommonLang.CUtils.localTimeMS || !playerData.player.mUnit.IsActive)
-				{
-					continue;
-				}
-				else if(CMath.getDistance(mOwner.X, mOwner.Y, playerData.player.mUnit.X, playerData.player.mUnit.Y) > checkRange)
-				{
-					continue;
-				}
-
-				BuffState buffState = playerData.player.mUnit.GetBuffByIDAndSender(Remedy_510601.Buff_POISON, this.mOwner.ID);
-				if(buffState == null)
-				{
-					continue;
-				}
-
-				int finalLayer = 1 + buffState.OverlayLevel + addLayer;
-				damagePer += (this.mPoisonBreakDmgAdd + (finalLayer >= buffState.Data.MaxOverlay ? this.mPoisonBreakFullDmgAdd : 0));
-
-				int attackTemp = (int)(owner.MirrorProp.GetFinalAttack(playerData.player.mUnit.IsMonster) / XmdsDamageCalculator.PERER * damagePer);
-				int calcDmg = (damageBase + XmdsDamageCalculator.GetDamage(attackTemp, owner, playerData.player, null)) * finalLayer;
-				playerData.player.mUnit.AddHP(-calcDmg, this.mOwner);
-				playerData.player.mUnit.removeBuffBySender(Remedy_510601.Buff_POISON, this.mOwner.ID);
-
-				// 附加额外buff
-				if(breakAddBuffId > 0)
-				{					
-					BuffState buff = playerData.player.mUnit.AddBuff(breakAddBuffId, this.mOwner, 0, false, false, false, 0, finalLayer);
-					buff.SetLayerLevel((byte)(Math.Min(breakAddBufMaxLayer, finalLayer)));
-				}				
-
-				System.Console.WriteLine("毒爆: " + playerData.player.mUnit.Info.Name + ", 伤害:" + calcDmg + ", 结算层:" + (1 + buffState.OverlayLevel + addLayer));
-			}
-
-			this.mPoisonPlayers.Clear();
-		}
+		//public void TriggerPoisonEffect(int damageBase, int damagePer, int checkRange = 9, int addLayer = 0, int breakAddBuffId = 0, int breakAddBufMaxLayer = 0)
+		//{
+		//	XmdsVirtual owner = this.mOwner.Virtual as XmdsVirtual;
+		//	foreach (PoisonPlayers playerData in mPoisonPlayers.Values)
+		//	{
+		//		if (playerData.buffValidTime < CommonLang.CUtils.localTimeMS || !playerData.player.mUnit.IsActive)
+		//		{
+		//			continue;
+		//		}
+		//		else if(CMath.getDistance(mOwner.X, mOwner.Y, playerData.player.mUnit.X, playerData.player.mUnit.Y) > checkRange)
+		//		{
+		//			continue;
+		//		}
+
+		//		BuffState buffState = playerData.player.mUnit.GetBuffByIDAndSender(Remedy_510601.Buff_POISON, this.mOwner.ID);
+		//		if(buffState == null)
+		//		{
+		//			continue;
+		//		}
+
+		//		int finalLayer = 1 + buffState.OverlayLevel + addLayer;
+		//		damagePer += (this.mPoisonBreakDmgAdd + (finalLayer >= buffState.Data.MaxOverlay ? this.mPoisonBreakFullDmgAdd : 0));
+
+		//		int attackTemp = (int)(owner.MirrorProp.GetFinalAttack(playerData.player.mUnit.IsMonster) / XmdsDamageCalculator.PERER * damagePer);
+		//		int calcDmg = (damageBase + XmdsDamageCalculator.GetDamage(attackTemp, owner, playerData.player, null)) * finalLayer;
+		//		playerData.player.mUnit.AddHP(-calcDmg, this.mOwner);
+		//		playerData.player.mUnit.removeBuffBySender(Remedy_510601.Buff_POISON, this.mOwner.ID);
+
+		//		// 附加额外buff
+		//		if(breakAddBuffId > 0)
+		//		{					
+		//			BuffState buff = playerData.player.mUnit.AddBuff(breakAddBuffId, this.mOwner, 0, false, false, false, 0, finalLayer);
+		//			buff.SetLayerLevel((byte)(Math.Min(breakAddBufMaxLayer, finalLayer)));
+		//		}				
+
+		//		System.Console.WriteLine("毒爆: " + playerData.player.mUnit.Info.Name + ", 伤害:" + calcDmg + ", 结算层:" + (1 + buffState.OverlayLevel + addLayer));
+		//	}
+
+		//	this.mPoisonPlayers.Clear();
+		//}
 
 	}
 }

+ 6 - 6
XmdsVSPlugins/XmdsCommonSkill/Plugin/base/PlayerCache/PlayerCache_Warrior.cs

@@ -27,25 +27,25 @@ namespace XmdsCommonSkill.Plugin.Skills
 		}
 
 		// 增加天赋点信息
-		public override void AddTalentValue(int value)
+		public override bool AddTalentValue(int value)
 		{
 			if(value <= 0)
 			{
-				return;
+				return false;
 			}
 
 			// 基础天赋值变更
 			this.mTalentValue = Math.Min(this.mTalentValue + value, this.mTalnetMax);
 			//this.mTalnetUpdateTime = CommonLang.CUtils.S_LOCAL_TIMESTAMPMS;
-			base.AddTalentValue(value);
+			return base .AddTalentValue(value);
 		}
 
 		// 使用天赋(怒气/剑气)
-		public override void UseTalentValue(int value)
+		public override bool UseTalentValue(int value)
 		{
 			if (value <= 0)
 			{
-				return;
+				return false;
 			}
 			else if (value > this.mTalentValue)
 			{
@@ -55,7 +55,7 @@ namespace XmdsCommonSkill.Plugin.Skills
 
 			this.mTalentValue = Math.Max(0, this.mTalentValue - value);
 			//this.mTalnetUpdateTime = CommonLang.CUtils.localTimeMS;
-			base.UseTalentValue(value);
+			return base.UseTalentValue(value);
 		}
 
 		public void SetNormalAtakAnger(int value)