Explorar o código

【优化】宠物伤害,主人看不到

meijun %!s(int64=3) %!d(string=hai) anos
pai
achega
447b1409ed

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

@@ -764,7 +764,9 @@ namespace CommonAI.Zone.Instance
                     UnitHitEvent evt = new UnitHitEvent(ID);
                     evt.senderId = attacker.ID;
 					evt.senderMasterId = attacker.Virtual.GetMasterID();
-                    evt.hp = reduceHP;
+					evt.hitMasterId = this.Virtual.GetMasterID();
+
+					evt.hp = reduceHP;
                     evt.isDead = IsDead();
                     evt.isCritical = source.Attack.MaskMustCritical;
                     evt.effect = source.OutHitEffect;
@@ -1061,6 +1063,7 @@ namespace CommonAI.Zone.Instance
                 hitMessage.object_id = this.ID;
                 hitMessage.senderId = attacker == null ? 0 : attacker.ID;
 				hitMessage.senderMasterId = attacker == null ? 0 : attacker.Virtual.GetMasterID();
+				hitMessage.hitMasterId = this.Virtual.GetMasterID();
                 hitMessage.hp = hp;
 				hitMessage.isSpecialHit = dmgSrc != DamageSource.Def;
 				hitMessage.dmgSrc = dmgSrc;

+ 5 - 3
Common/CommonAI/Zone/Messages.cs

@@ -1374,10 +1374,8 @@ namespace CommonAI.Zone
             private set { BitMask.BitSetMask(ref bitMask, 6, value); }
         }
 
-        public uint senderId;
-		public uint senderMasterId;			//如果sender为召唤物,这个存放主人id(用来广播判断,非网络字段)
+        public uint senderId;		
         public int hp;
-
         public byte client_state;
 
         private byte bitMask = 0;
@@ -1388,8 +1386,12 @@ namespace CommonAI.Zone
 
 		// 伤害来源,非def才需要额外处理
 		public DamageSource dmgSrc;
+
+		//内部字段
 		//针对特殊伤害的特殊处理
 		public bool InViewForceSend = false;
+		public uint senderMasterId;         //如果sender为召唤物,这个存放主人id(用来广播判断,非网络字段)
+		public uint hitMasterId;            //单位的masterid
 
 		public LaunchEffect effect
         {

+ 1 - 1
Common/CommonAIServer/Node/ZoneNode.cs

@@ -394,7 +394,7 @@ namespace CommonAIServer.Node
 				//		}
 				//	}
 				//}
-				if (he.senderId != mActor.ID && he.object_id != mActor.ID && he.senderMasterId != mActor.ID && he.senderMasterId != mActor.ID)
+				if (he.senderId != mActor.ID && he.object_id != mActor.ID && he.senderMasterId != mActor.ID && he.hitMasterId != mActor.ID)
 				{
 					if(he.InViewForceSend && he.sender != null && client.IsInView(he.sender as InstanceZoneObject))
 					{