예제 #1
0
        public static Dictionary <int, bool> CheckStatic(int x, int y)
        {
            Dictionary <int, bool> zThings = new Dictionary <int, bool>();
            short landId = (short)Statics.GetLandID(x, y, Player.Map);
            short zValue = (short)Statics.GetLandZ(x, y, Player.Map);

            if (m_landdata.ContainsKey(landId))
            {
                TileFlag templandflag = m_landdata[landId];

                if ((templandflag & TileFlag.Impassable) != 0 || (templandflag & TileFlag.Wall) != 0 ||
                    (templandflag & TileFlag.Wet) != 0)
                {
                    zThings.Add(zValue, true);
                }
                else
                {
                    zThings.Add(zValue, false);
                }
            }

            List <Statics.TileInfo> staticitemsid = Statics.GetStaticsTileInfo(x, y, Player.Map);

            if (staticitemsid.Count > 0)
            {
                foreach (Statics.TileInfo tile in staticitemsid)
                {
                    if (TileData.ItemTable[tile.StaticID].Flags != TileFlag.None)
                    {
                        if ((TileData.ItemTable[tile.StaticID].Flags & TileFlag.Impassable) != 0 ||
                            (TileData.ItemTable[tile.StaticID].Flags & TileFlag.Door) != 0 ||
                            (TileData.ItemTable[tile.StaticID].Flags & TileFlag.Wall) != 0 ||
                            (TileData.ItemTable[tile.StaticID].Flags & TileFlag.Damaging) != 0 ||
                            (TileData.ItemTable[tile.StaticID].Flags & TileFlag.Wet) != 0 ||
                            (TileData.ItemTable[tile.StaticID].Flags & TileFlag.Window) != 0)
                        {
                            if (zThings.ContainsKey(tile.StaticZ))
                            {
                                zThings[tile.StaticZ] = true;
                            }
                            else
                            {
                                zThings.Add(tile.StaticZ, true);
                            }
                        }
                        else if ((TileData.ItemTable[tile.StaticID].Flags & TileFlag.Roof) != 0 ||
                                 (TileData.ItemTable[tile.StaticID].Flags & TileFlag.Surface) != 0)
                        {
                            if (!zThings.ContainsKey(tile.StaticZ))
                            {
                                zThings.Add(tile.StaticZ, false);
                            }
                        }
                    }
                }
            }

            return(zThings);
        }
예제 #2
0
        /// <summary>
        /// Execute target on specific land point with offset distance from Mobile. Distance is calculated by target Mobile.Direction.
        /// </summary>
        /// <param name="mobile">Mobile object to target.</param>
        /// <param name="offset">Distance from the target.</param>
        public static void TargetExecuteRelative(Mobile mobile, int offset)
        {
            Assistant.Point2D relpos = new Assistant.Point2D();
            switch (mobile.Direction)
            {
            case "North":
                relpos.X = mobile.Position.X;
                relpos.Y = mobile.Position.Y - offset;
                break;

            case "South":
                relpos.X = mobile.Position.X;
                relpos.Y = mobile.Position.Y + offset;
                break;

            case "West":
                relpos.X = mobile.Position.X - offset;
                relpos.Y = mobile.Position.Y;
                break;

            case "East":
                relpos.X = mobile.Position.X + offset;
                relpos.Y = mobile.Position.Y;
                break;

            case "Up":
                relpos.X = mobile.Position.X - offset;
                relpos.Y = mobile.Position.Y - offset;
                break;

            case "Down":
                relpos.X = mobile.Position.X + offset;
                relpos.Y = mobile.Position.Y + offset;
                break;

            case "Left":
                relpos.X = mobile.Position.X - offset;
                relpos.Y = mobile.Position.Y + offset;
                break;

            case "Right":
                relpos.X = mobile.Position.X + offset;
                relpos.Y = mobile.Position.Y - offset;
                break;
            }
            Assistant.Point3D location = new Assistant.Point3D(relpos.X, relpos.Y, Statics.GetLandZ(relpos.X, relpos.Y, Player.Map));
            Assistant.Targeting.Target(location, true);
        }
예제 #3
0
        internal static List <Assistant.Point3D> CoordsToMobile(Assistant.Mobile mobile)
        {
            List <Assistant.Point3D> coords = new List <Assistant.Point3D>();

            Assistant.Point3D playerPosition = World.Player.Position;
            Assistant.Point3D mobPosition    = mobile.Position;

            // player is x0 mob is x1 in m = (y1?y0)/(x1?x0)
            float slope = (float)((float)mobPosition.Y - playerPosition.Y) / ((float)mobPosition.X - playerPosition.X);

            // for every x compute the y
            for (int x = Math.Min(playerPosition.X, mobPosition.X); x <= Math.Max(playerPosition.X, mobPosition.X); x++)
            {
                // formula for y is y = m* (x-x0) + y0
                if (x != playerPosition.X)
                {
                    int y = (int)(slope * ((float)x - playerPosition.X) + playerPosition.Y);
                    coords.Add(new Assistant.Point3D(x, y, Statics.GetLandZ(x, y, Player.Map)));
                }
            }

            // for every y compute the x
            for (int y = Math.Min(playerPosition.Y, mobPosition.Y); y <= Math.Max(playerPosition.Y, mobPosition.Y); y++)
            {
                // formula for x is  x = ((y?y0)/m) + x0
                if (y != playerPosition.Y)
                {
                    int x = (int)((((float)y - playerPosition.Y) / slope) + playerPosition.X);
                    coords.Add(new Assistant.Point3D(x, y, Statics.GetLandZ(x, y, Player.Map)));
                }
            }

            //coords.Add(new Assistant.Point3D(playerPosition.X, playerPosition.Y, Statics.GetLandZ(playerPosition.X, playerPosition.Y, Player.Map)));

            return(coords);
        }