diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 748241e23..ba2665884 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -6049,7 +6049,7 @@ namespace Game.Entities return; UpdateData udata = new(GetMapId()); - List newVisibleUnits = new(); + List newVisibleObjects = new(); foreach (WorldObject target in targets) { @@ -6059,28 +6059,28 @@ namespace Game.Entities switch (target.GetTypeId()) { case TypeId.Unit: - UpdateVisibilityOf(target.ToCreature(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToCreature(), udata, newVisibleObjects); break; case TypeId.Player: - UpdateVisibilityOf(target.ToPlayer(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToPlayer(), udata, newVisibleObjects); break; case TypeId.GameObject: - UpdateVisibilityOf(target.ToGameObject(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToGameObject(), udata, newVisibleObjects); break; case TypeId.DynamicObject: - UpdateVisibilityOf(target.ToDynamicObject(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToDynamicObject(), udata, newVisibleObjects); break; case TypeId.Corpse: - UpdateVisibilityOf(target.ToCorpse(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToCorpse(), udata, newVisibleObjects); break; case TypeId.AreaTrigger: - UpdateVisibilityOf(target.ToAreaTrigger(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToAreaTrigger(), udata, newVisibleObjects); break; case TypeId.SceneObject: - UpdateVisibilityOf(target.ToSceneObject(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToSceneObject(), udata, newVisibleObjects); break; case TypeId.Conversation: - UpdateVisibilityOf(target.ToConversation(), udata, newVisibleUnits); + UpdateVisibilityOf(target.ToConversation(), udata, newVisibleObjects); break; default: break; @@ -6093,7 +6093,7 @@ namespace Game.Entities udata.BuildPacket(out UpdateObject packet); SendPacket(packet); - foreach (var visibleUnit in newVisibleUnits) + foreach (var visibleUnit in newVisibleObjects) SendInitialVisiblePackets(visibleUnit); } @@ -6129,7 +6129,7 @@ namespace Game.Entities } } - public void UpdateVisibilityOf(T target, UpdateData data, List visibleNow) where T : WorldObject + public void UpdateVisibilityOf(T target, UpdateData data, List visibleNow) where T : WorldObject { if (HaveAtClient(target)) { @@ -6150,33 +6150,23 @@ namespace Game.Entities if (CanSeeOrDetect(target, false, true)) { target.BuildCreateUpdateBlockForPlayer(data, this); - UpdateVisibilityOf_helper(m_clientGUIDs, target, visibleNow); + m_clientGUIDs.Add(target.GetGUID()); + visibleNow.Add(target); } } } - void UpdateVisibilityOf_helper(List s64, T target, List v) where T : WorldObject + public void SendInitialVisiblePackets(WorldObject target) { - s64.Add(target.GetGUID()); - - switch (target.GetTypeId()) + Unit targetUnit = target.ToUnit(); + if (targetUnit != null) { - case TypeId.Unit: - v.Add(target.ToCreature()); - break; - case TypeId.Player: - v.Add(target.ToPlayer()); - break; - } - } - - public void SendInitialVisiblePackets(Unit target) - { - SendAurasForTarget(target); - if (target.IsAlive()) - { - if (target.HasUnitState(UnitState.MeleeAttacking) && target.GetVictim() != null) - target.SendMeleeAttackStart(target.GetVictim()); + SendAurasForTarget(targetUnit); + if (targetUnit.IsAlive()) + { + if (targetUnit.HasUnitState(UnitState.MeleeAttacking) && targetUnit.GetVictim() != null) + targetUnit.SendMeleeAttackStart(targetUnit.GetVictim()); + } } } diff --git a/Source/Game/Maps/GridNotifiers.cs b/Source/Game/Maps/GridNotifiers.cs index 01eb5e2df..1fa955b07 100644 --- a/Source/Game/Maps/GridNotifiers.cs +++ b/Source/Game/Maps/GridNotifiers.cs @@ -72,7 +72,7 @@ namespace Game.Maps i_player = pl; i_data = new UpdateData(pl.GetMapId()); vis_guids = new List(pl.m_clientGUIDs); - i_visibleNow = new List(); + i_visibleNow = new List(); } public override void Visit(IList objs) @@ -93,30 +93,28 @@ namespace Game.Maps Transport transport = i_player.GetTransport(); if (transport != null) { - foreach (var obj in transport.GetPassengers()) + foreach (var passenger in transport.GetPassengers()) { - if (vis_guids.Contains(obj.GetGUID())) + if (vis_guids.Remove(passenger.GetGUID())) { - vis_guids.Remove(obj.GetGUID()); - - switch (obj.GetTypeId()) + switch (passenger.GetTypeId()) { case TypeId.GameObject: - i_player.UpdateVisibilityOf(obj.ToGameObject(), i_data, i_visibleNow); + i_player.UpdateVisibilityOf(passenger.ToGameObject(), i_data, i_visibleNow); break; case TypeId.Player: - i_player.UpdateVisibilityOf(obj.ToPlayer(), i_data, i_visibleNow); - if (!obj.IsNeedNotify(NotifyFlags.VisibilityChanged)) - obj.ToPlayer().UpdateVisibilityOf(i_player); + i_player.UpdateVisibilityOf(passenger.ToPlayer(), i_data, i_visibleNow); + if (!passenger.IsNeedNotify(NotifyFlags.VisibilityChanged)) + passenger.ToPlayer().UpdateVisibilityOf(i_player); break; case TypeId.Unit: - i_player.UpdateVisibilityOf(obj.ToCreature(), i_data, i_visibleNow); + i_player.UpdateVisibilityOf(passenger.ToCreature(), i_data, i_visibleNow); break; case TypeId.DynamicObject: - i_player.UpdateVisibilityOf(obj.ToDynamicObject(), i_data, i_visibleNow); + i_player.UpdateVisibilityOf(passenger.ToDynamicObject(), i_data, i_visibleNow); break; case TypeId.AreaTrigger: - i_player.UpdateVisibilityOf(obj.ToAreaTrigger(), i_data, i_visibleNow); + i_player.UpdateVisibilityOf(passenger.ToAreaTrigger(), i_data, i_visibleNow); break; default: break; @@ -125,16 +123,16 @@ namespace Game.Maps } } - foreach (var guid in vis_guids) + foreach (var outOfRangeGuid in vis_guids) { - i_player.m_clientGUIDs.Remove(guid); - i_data.AddOutOfRangeGUID(guid); + i_player.m_clientGUIDs.Remove(outOfRangeGuid); + i_data.AddOutOfRangeGUID(outOfRangeGuid); - if (guid.IsPlayer()) + if (outOfRangeGuid.IsPlayer()) { - Player pl = Global.ObjAccessor.FindPlayer(guid); - if (pl != null && pl.IsInWorld && !pl.IsNeedNotify(NotifyFlags.VisibilityChanged)) - pl.UpdateVisibilityOf(i_player); + Player player = Global.ObjAccessor.FindPlayer(outOfRangeGuid); + if (player != null && !player.IsNeedNotify(NotifyFlags.VisibilityChanged)) + player.UpdateVisibilityOf(i_player); } } @@ -145,14 +143,14 @@ namespace Game.Maps i_data.BuildPacket(out packet); i_player.SendPacket(packet); - foreach (var obj in i_visibleNow) - i_player.SendInitialVisiblePackets(obj); + foreach (var visibleObject in i_visibleNow) + i_player.SendInitialVisiblePackets(visibleObject); } internal Player i_player; internal UpdateData i_data; internal List vis_guids; - internal List i_visibleNow; + internal List i_visibleNow; } public class VisibleChangesNotifier : Notifier