private bool CanCharacterSeeDestination(Combat.ICharacter viewer, int targetX, int targetY) { int viewerX = viewer.X; int viewerY = viewer.Y; //adjust for screen endings if (viewerX < 10) { viewerX = 10; } if (viewerX > MaxX - 9) { viewerX = MaxX - 9; } if (viewerY < 7) { viewerY = 7; } if (viewerY > MaxY - 7) { viewerY = MaxY - 7; } //check to see if the target would be in the viewer's screen if (targetX > viewerX + 9) { return(false); } if (targetX < viewerX - 10) { return(false); } if (targetY > viewerY + 7) { return(false); } if (targetY < viewerY - 7) { return(false); } int darkness; if (viewer.Darkness > -2) { darkness = viewer.Darkness; } else { darkness = Darkness; } if (darkness > -1) { int distance = (int)System.Math.Floor(2 * System.Math.Sqrt(System.Math.Pow(viewer.X - targetX, 2) + System.Math.Pow(viewer.Y - targetY, 2))); if (distance > darkness - 1) { return(false); } } return(true); }
public void AddPacketToOthers(Combat.ICharacter source, IMap map, TcpPacket packet, Enums.OutdateType updateType) { if (map != null) { if (!cachingEnabled) { for (int i = 0; i < 9; i++) { string borderingMapID = MapManager.RetrieveBorderingMapID(map, (Enums.MapID)i); if (!string.IsNullOrEmpty(borderingMapID)) { IMap borderingMap = null; if (i == 0) { borderingMap = map; } else { borderingMap = MapManager.RetrieveActiveMap(borderingMapID); } if (borderingMap != null) { foreach (Client n in borderingMap.GetClients()) { if (n.Player.GetActiveRecruit() != source) { if (AI.MovementProcessor.WillCharacterSeeCharacter(borderingMap, n.Player.GetActiveRecruit(), map, MapManager.GetOppositeMapID((Enums.MapID)i), source)) { //if (!n.Player.IsSeenCharacterSeen(source)) { n.Player.AddActivationIfCharacterNotSeen(this, source); //} this.AddPacket(n, packet); } else { if (updateType == Enums.OutdateType.Location && n.Player.IsSeenCharacterSeen(source)) { this.AddPacket(n, packet); //unsee character n.Player.RemoveUnseenCharacters(); } else { n.Player.OutdateCharacter(source, updateType); //outdate character //} //} else { //outdate character } } } } } } } } else { hitListCache.AddCacheItem(new object[] { PacketHitListTargets.Others, source, map, packet, updateType }); } } }