public static bool ChangeMap(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { if (player.Map.IsDynamic) { if (player.Houses.Count > 0 && player.Houses.GetAll().Any(house => house.DynamicMapId == player.MapId)) { player.AddActionLog("LeaveHouse"); player.TeleportToLastMap(); return(true); } if (player.Guild.InHouse(player)) { player.AddActionLog("LeaveGuildHouse"); player.TeleportToLastMap(); return(true); } } var coordinate = new Models.Maps.Coordinate(packet.Data1Low, packet.Data1High); if (Tools.RangeTools.GetDistanceU(player.X, player.Y, coordinate.X, coordinate.Y) <= 5) { int mapId = player.MapId; if (Collections.PortalCollection.Teleport(player, mapId, coordinate.X, coordinate.Y)) { player.AddActionLog("Portal", string.Format("{0} : {1},{2}", mapId, coordinate.X, coordinate.Y)); return(true); } } player.Pullback(); return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { if (!player.Alive && DateTime.UtcNow > player.DeadTime) { player.ClientSocket.Disconnect(Drivers.Messages.Errors.JUMP_WHILE_DEAD); return(false); } if (packet.ClientId != player.ClientId) { Database.Dal.Accounts.Ban( player.DbPlayer.Account, Drivers.Messages.JUMP_OTHER_PLAYER, Database.Models.DbAccount.BanRangeType.Perm); player.ClientSocket.Disconnect(Drivers.Messages.JUMP_OTHER_PLAYER); return(false); } player.Action = Enums.PlayerAction.None; player.AttackPacket = null; ushort newX = packet.Data1Low; ushort newY = packet.Data1High; if (Tools.RangeTools.GetDistanceU(newX, newY, player.X, player.Y) > 28) { player.Pullback(); return(true); } if (!player.Map.ValidCoord(newX, newY)) { player.Pullback(); return(false); } if (player.LastMovementMode == Enums.WalkMode.Jump && DateTime.UtcNow <= player.LastMovementTime.AddMilliseconds(400)) { player.SpeedHackChecks++; if (player.SpeedHackChecks >= 3) { // speedhack ... if (player.SpeedHackChecks >= 10) { player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK); return(false); } player.Pullback(); return(true); } } else { player.SpeedHackChecks = 0; } if (player.Battle != null) { if (!player.Battle.EnterArea(player)) { player.Pullback(); return(true); } else if (!player.Battle.LeaveArea(player)) { player.Pullback(); return(true); } } if (Tools.CalculationTools.ChanceSuccess(Data.Constants.Chances.StaminaOnJump)) { player.Stamina = (byte)Math.Min(100, player.Stamina + 7); } player.X = newX; player.Y = newY; player.LastMovementMode = Enums.WalkMode.Jump; player.LastMovementTime = DateTime.UtcNow; player.ClientSocket.Send(packet); player.UpdateScreen(false, packet, Enums.UpdateScreenFlags.Idle); return(true); }
public static bool HandlePacket(Models.Entities.Player player, Models.Packets.Location.WalkPacket packet) { if (packet.ClientId != player.ClientId) { Database.Dal.Accounts.Ban( player.DbPlayer.Account, Drivers.Messages.MOVE_OTHER_PLAYER, Database.Models.DbAccount.BanRangeType.Perm); player.ClientSocket.Disconnect(Drivers.Messages.MOVE_OTHER_PLAYER); return(false); } player.Action = Enums.PlayerAction.None; player.AttackPacket = null; player.LastMovementMode = packet.Mode; int newX = 0, newY = 0; int newDir = 0; switch (packet.Mode) { case Enums.WalkMode.Walk: case Enums.WalkMode.Run: { newDir = (int)packet.Direction % 8; newX = player.X + Data.Constants.Movement.DeltaX[newDir]; newY = player.Y + Data.Constants.Movement.DeltaY[newDir]; if (DateTime.UtcNow < player.LastMovementTime.AddMilliseconds(100)) { player.SpeedHackChecks++; if (player.SpeedHackChecks >= 3) { // speedhack ... if (player.SpeedHackChecks >= 10) { player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK); return(false); } player.Pullback(); return(true); } } else { player.SpeedHackChecks = 0; } break; } case Enums.WalkMode.Mount: { newDir = (int)packet.Direction % 24; newX = player.X + Data.Constants.Movement.DeltaMountX[newDir]; newY = player.Y + Data.Constants.Movement.DeltaMountY[newDir]; if (DateTime.UtcNow < player.LastMovementTime.AddMilliseconds(400)) { player.SpeedHackChecks++; if (player.SpeedHackChecks >= 3) { // speedhack ... if (player.SpeedHackChecks >= 10) { player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK); return(false); } player.Pullback(); return(true); } } else { player.SpeedHackChecks = 0; } break; } default: return(false); } if (player.Map.ValidCoord((ushort)newX, (ushort)newY)) { player.LastMovementTime = DateTime.UtcNow; player.X = (ushort)newX; player.Y = (ushort)newY; player.ClientSocket.Send(packet); player.UpdateScreen(false, packet, Enums.UpdateScreenFlags.Idle); if (player.Battle != null) { if (!player.Battle.EnterArea(player)) { player.Pullback(); } else if (!player.Battle.LeaveArea(player)) { player.Pullback(); } } return(true); } return(false); }