Beispiel #1
0
        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);
        }
Beispiel #2
0
 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 });
         }
     }
 }