public static bool CanMove(Enums.Direction dirToTest) { Maps.Map map = Maps.MapHelper.ActiveMap; Players.MyPlayer player = Players.PlayerManager.MyPlayer; Enums.Direction dir = player.Direction; int x, y; //Make sure they aren't asleep, or frozen if (player.StatusAilment == Enums.StatusAilment.Freeze || player.StatusAilment == Enums.StatusAilment.Sleep) { return(false); } // Make sure they aren't trying to move when they are already moving if (player.MovementSpeed != Enums.MovementSpeed.Standing || Globals.GettingMap) { return(false); } player.Direction = dirToTest; //make sure they aren't exceeding speed limit if (player.SpeedLimit == Enums.MovementSpeed.Standing && map.Tile[player.Location.X, player.Location.Y].Type != Enums.TileType.Slippery) { Messenger.SendPlayerDir(); return(false); } //test against post-attack cooldown if (!(Players.PlayerManager.MyPlayer.PauseTimer < Globals.Tick)) { Messenger.SendPlayerDir(); return(false); } x = player.Location.X; y = player.Location.Y; switch (dirToTest) { case Enums.Direction.Up: x = player.Location.X; y = player.Location.Y - 1; player.Direction = Enums.Direction.Up; if (y < 0) { if (map.Up > 0 && Windows.WindowSwitcher.GameWindow.inMapEditor == false) { if (Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Up)) { return(true); } else { Messenger.SendPlayerRequestNewMap(false); Globals.GettingMap = true; return(false); } } else { return(false); } } break; case Enums.Direction.Down: x = player.Location.X; y = player.Location.Y + 1; if (y > map.MaxY) { if (map.Down > 0 && Windows.WindowSwitcher.GameWindow.inMapEditor == false) { if (Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Down)) { return(true); } else { Messenger.SendPlayerRequestNewMap(false); Globals.GettingMap = true; return(false); } } else { return(false); } } break; case Enums.Direction.Left: x = player.Location.X - 1; y = player.Location.Y; if (x < 0) { if (map.Left > 0 && Windows.WindowSwitcher.GameWindow.inMapEditor == false) { if (Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Left)) { return(true); } else { Messenger.SendPlayerRequestNewMap(false); Globals.GettingMap = true; return(false); } } else { return(false); } } break; case Enums.Direction.Right: x = player.Location.X + 1; y = player.Location.Y; if (x > map.MaxX) { if (map.Right > 0 && Windows.WindowSwitcher.GameWindow.inMapEditor == false) { if (Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Right)) { return(true); } else { Messenger.SendPlayerRequestNewMap(false); Globals.GettingMap = true; return(false); } } else { return(false); } } break; } if (x < 0 || x > map.MaxX || y < 0 || y > map.MaxY) { return(false); } Maps.Tile tile = map.Tile[x, y]; switch (tile.Type) { case Enums.TileType.Blocked: case Enums.TileType.Sign: case Enums.TileType.ScriptedSign: if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); case Enums.TileType.Warp: { if (Windows.WindowSwitcher.GameWindow.inMapEditor) { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } } break; case Enums.TileType.LevelBlock: if (player.Level > tile.Data1) { return(true); } else { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } case Enums.TileType.Story: Messenger.SendPacket(TcpPacket.CreatePacket("isstory", x.ToString(), y.ToString())); if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(true); case Enums.TileType.SpriteBlock: if (tile.Data1 == 1) { if (player.Sprite == tile.Data2 || player.Sprite == tile.Data3) { return(true); } else { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } } else if (tile.Data1 == 2) { if (player.Sprite != tile.Data2 || player.Sprite != tile.Data3) { return(true); } else { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } } else { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } case Enums.TileType.MobileBlock: { int mobilityList = tile.Data1; for (int i = 0; i < 16; i++) { if (mobilityList % 2 == 1 && !player.Mobility[i]) { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } mobilityList /= 2; } // use mobility return(true); } //if (tile.Data1 == player.GetActiveRecruit().Class) { // return true; //} else if (tile.Data2 == player.GetActiveRecruit().Class) { // return true; //} else if (tile.Data3 == player.GetActiveRecruit().Class) { // return true; //} else { // if (dir != dirToTest) { // Tcp.Messenger.SendPlayerDir(); // } // return false; //} case Enums.TileType.Key: case Enums.TileType.Door: if (tile.DoorOpen == false) { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } break; case Enums.TileType.LinkShop: case Enums.TileType.Assembly: case Enums.TileType.Guild: case Enums.TileType.Bank: case Enums.TileType.Shop: //player.MovementLocked = true; return(true); } foreach (IPlayer playerToTest in PlayerManager.Players.GetAllPlayers()) { if (playerToTest.MapID == map.MapID && playerToTest.ScreenActive) { if (playerToTest.Location.X == x && playerToTest.Location.Y == y) { if (player.Solid == true) { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } } } } for (int i = 0; i < MaxInfo.MAX_MAP_NPCS; i++) { if (map.MapNpcs[i].Num > 0 && map.MapNpcs[i].ScreenActive) { if (map.MapNpcs[i].Location.X == x && map.MapNpcs[i].Location.Y == y) { if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(false); } } } if (dir != dirToTest) { Messenger.SendPlayerDir(); } return(true); }
public static bool CheckLocked(Enums.Direction dirToTest) { Maps.Map map = Maps.MapHelper.ActiveMap; Players.MyPlayer player = Players.PlayerManager.MyPlayer; Enums.Direction dir = player.Direction; int x = 0, y = 0; switch (dirToTest) { case Enums.Direction.Up: x = player.Location.X; y = player.Location.Y - 1; break; case Enums.Direction.Down: x = player.Location.X; y = player.Location.Y + 1; break; case Enums.Direction.Left: x = player.Location.X - 1; y = player.Location.Y; break; case Enums.Direction.Right: x = player.Location.X + 1; y = player.Location.Y; break; } if (x < 0 || x > map.MaxX || y < 0 || y > map.MaxY) { return(false); } Maps.Tile tile = map.Tile[x, y]; switch (tile.Type) { case Enums.TileType.Story: case Enums.TileType.LinkShop: case Enums.TileType.Assembly: case Enums.TileType.Guild: case Enums.TileType.Bank: case Enums.TileType.Shop: case Enums.TileType.MissionBoard: case Enums.TileType.RDungeonGoal: case Enums.TileType.Evolution: case Enums.TileType.SpriteChange: case Enums.TileType.Warp: case Enums.TileType.Scripted: return(true); } return(false); }