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); }
/// <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); }
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); }