public FloodUC(AccountUC account) { InitializeComponent(); m_Account = account; string pathPlayers = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "BlueSheep", "Accounts", m_Account.AccountName, "Flood"); if (!Directory.Exists(pathPlayers)) Directory.CreateDirectory(pathPlayers); PrivateExitBox.Hide(); FloodContent = ""; Dictionary<string, int> temp = new Dictionary<string, int>(); if (File.Exists(pathPlayers + @"\Players.txt")) { var sr = new StreamReader(pathPlayers + @"\Players.txt"); while (!sr.EndOfStream) { string line = sr.ReadLine(); string[] parsed = line.Split(','); if (parsed.Length > 1) { temp.Add(parsed[0], int.Parse(parsed[1])); PlayerListLb.Items.Add(line); } else { sr.Close(); File.Delete(pathPlayers + @"\Players.txt"); return; } } sr.Close(); m_Account.Log(new DebugTextInformation("[ADVANCED FLOOD] Players loaded."), 5); } }
public GestItemsUC(AccountUC Account) { InitializeComponent(); account = Account; LVGestItems.Columns.Add("Nom", 200, HorizontalAlignment.Center); LVGestItems.Columns.Add("Action", 200, HorizontalAlignment.Center); this.ItemTxtBox.KeyUp += (s, e) => { IntelliSense.AutoCompleteTextBox(ItemTxtBox, this.litPopup, IntelliSense.ItemsList, e); }; AutoDeletionTimer = new System.Timers.Timer(Convert.ToDouble(NUDAutoDeletion.Value * 10000)) { AutoReset = false }; AutoDeletionTimer.Elapsed += new System.Timers.ElapsedEventHandler(PerformAutoDeletion); if (AutoDeletionBox.Checked) AutoDeletionTimer.Start(); }
public static void RawDataMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { //TODO : Bypass this f*****g anti-bot Random random = new Random(); int randomNumber = (int)Math.Floor(random.NextDouble() * 16777215); CheckIntegrityMessage checkIntegrityMessage = new CheckIntegrityMessage(new List <int>() { randomNumber }); using (BigEndianWriter writer = new BigEndianWriter()) { checkIntegrityMessage.Serialize(writer); MessagePackaging messagePackaging = new MessagePackaging(writer); messagePackaging.Pack((int)checkIntegrityMessage.ProtocolID); account.SocketManager.Send(messagePackaging.Writer.Content); } //using (BigEndianReader reader = new BigEndianReader(packetDatas)) //{ // byte[] content = reader.ReadBytes((int)reader.BytesAvailable); // string d = DateTime.Now.ToShortDateString().Replace('\\', '-').Replace('/', '-'); // File.WriteAllBytes(@"F:\RDMs\" + d + "_RDM.swf", content); // //account.SocketManager.Disconnect(); //} //using (BigEndianWriter writer = new BigEndianWriter()) //{ // TrustStatusMessage tsm = new TrustStatusMessage(true); // tsm.Serialize(writer); // writer.WriteUTF(account.Ticket); // MessagePackaging pack = new MessagePackaging(writer); // pack.Pack((int)tsm.ProtocolID); // account.SocketManager.SendRaw(pack.Writer.Content); //} //using (BigEndianWriter writer = new BigEndianWriter()) //{ // writer.WriteBytes(packetDatas); // MessagePackaging pack = new MessagePackaging(writer); // pack.Pack(6253); // account.SocketManager.SendRaw(pack.Writer.Content); //} // System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); // byte[] hash = md5.ComputeHash(pack.Writer.Content); // StringBuilder sb = new StringBuilder(); // for (int i = 0; i < hash.Length; i++) // { // sb.Append(hash[i].ToString("X2")); // } // System.Windows.Forms.MessageBox.Show(sb.ToString()); //} }
public PathCondition(PathConditionEnum condition, object delta, char operateur, AccountUC Account) { m_Cond = condition; m_delta = delta; m_operateur = operateur; account = Account; }
public static void SelectedServerDataExtendedMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { SelectedServerDataExtendedMessage msg = (SelectedServerDataExtendedMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } //account.Log(new BotTextInformation(selectedServerDataExtendedMessage.address + " " + (int)selectedServerDataExtendedMessage.port)); account.Ticket = AES.AES.TicketTrans(msg.Ticket).ToString(); account.HumanCheck = new HumanCheck(account); account.SocketManager.IsChangingServer = true; if (!account.IsMITM) { account.Log(new ConnectionTextInformation("Connexion au serveur " + BlueSheep.Common.Data.I18N.GetText((int)GameData.GetDataObject(D2oFileEnum.Servers, msg.ServerId).Fields["nameId"])), 0); account.SocketManager.Connect(new ConnectionInformations(msg.Address, (int)msg.Port, "de jeu")); account.loginstate = "de jeu"; } else { SelectedServerDataExtendedMessage nmsg = new SelectedServerDataExtendedMessage(msg.CanCreateNewCharacter, msg.ServerId, msg.Address, msg.Port, msg.Ticket, msg.ServerIds); using (BigEndianWriter writer = new BigEndianWriter()) { nmsg.Serialize(writer); MessagePackaging pack = new MessagePackaging(writer); pack.Pack((int)nmsg.MessageID); account.SocketManager.SendToDofusClient(pack.Writer.Content); //account.SocketManager.DisconnectFromDofusClient(); account.SocketManager.DisconnectServer("42 packet handling."); account.SocketManager.ListenDofus(); account.Wait(100, 200); } account.Log(new ConnectionTextInformation("Connexion au serveur " + BlueSheep.Common.Data.I18N.GetText((int)GameData.GetDataObject(D2oFileEnum.Servers, msg.ServerId).Fields["nameId"])), 0); account.SocketManager.Connect(new ConnectionInformations(msg.Address, (int)msg.Port, "de jeu")); account.loginstate = "de jeu"; } }
public static void IdentificationSuccessMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { IdentificationSuccessMessage msg = (IdentificationSuccessMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); dtDateTime = dtDateTime.AddMilliseconds(msg.SubscriptionEndDate).ToLocalTime(); DateTime subscriptionDate = dtDateTime; if (subscriptionDate > DateTime.Now) { account.ModifBar(9, 0, 0, subscriptionDate.Date.ToShortDateString()); } account.Log(new ConnectionTextInformation("Identification réussie."), 0); }
public static void IdentificationFailedBannedMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { IdentificationFailedBannedMessage msg = (IdentificationFailedBannedMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } account.Log(new ConnectionTextInformation("Echec de connexion : Vous êtes bannis."), 0); account.SocketManager.DisconnectFromGUI(); }
public static void SelectedServerRefusedMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { // Lecture du paquet ServerStatusUpdateMessage SelectedServerRefusedMessage selectedServerRefusedMessage = (SelectedServerRefusedMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { selectedServerRefusedMessage.Deserialize(reader); } // Cherche le statut du serveur ServerStatus.Test((ServerStatusEnum)selectedServerRefusedMessage.ServerStatus, account); }
public static void SequenceEndMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { SequenceEndMessage msg = (SequenceEndMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if ((account.Fight != null) && (account.Fight.Fighter != null) && (account.Fight.Fighter.Id == msg.authorId) && (!account.IsMITM)) { GameActionAcknowledgementMessage msg2 = new GameActionAcknowledgementMessage(true, msg.sequenceType); account.SocketManager.Send(msg2); account.Fight.PerformSpellsStack(); //account.Fight.PerformMove(); } }
public static void GameFightTurnReadyRequestMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightTurnReadyRequestMessage msg = (GameFightTurnReadyRequestMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } GameFightTurnReadyMessage msg2 = new GameFightTurnReadyMessage(true); account.SocketManager.Send(msg2); }
public static void GameFightPlacementPossiblePositionsMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightPlacementPossiblePositionsMessage msg = (GameFightPlacementPossiblePositionsMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } account.SetStatus(Status.Fighting); if (account.Fight != null) { account.Fight.PlacementCells = msg.positionsForChallengers.ToList(); account.Fight.TurnId = 0; if (account.Fight.m_Conf.Tactic != BlueSheep.Core.Fight.TacticEnum.Immobile) { account.Fight.PlaceCharacter(); } } //account.Fight.PerformAutoTimeoutFight(3000); //if (account.IsMITM) // account.Fight.PerformAutoTimeoutFight(3000); if (account.WithItemSetBox.Checked == true) { sbyte id = (sbyte)account.PresetStartUpD.Value; InventoryPresetUseMessage msg2 = new InventoryPresetUseMessage((sbyte)(id - 1)); account.SocketManager.Send(msg2); account.Log(new ActionTextInformation("Equipement rapide numero " + Convert.ToString(id)), 5); account.Fight.PerformAutoTimeoutFight(500); } //LaunchWatch() GameFightReadyMessage nmsg = new GameFightReadyMessage(true); account.SocketManager.Send(nmsg); account.Log(new BotTextInformation("Send Ready !"), 5); }
public static void GameFightTurnStartPlayingMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightTurnStartPlayingMessage msg = (GameFightTurnStartPlayingMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } //account.Fight.PerformAutoTimeoutFight(100); if (account.Fight != null) { account.Fight.FightTurn(); } }
public static void GameFightNewRoundMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightNewRoundMessage msg = (GameFightNewRoundMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if (account.Fight != null) { account.Fight.TurnId = msg.roundNumber; } }
public static void GameMapMovementMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameMapMovementMessage msg = (GameMapMovementMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } MovementPath clientMovement = MapMovementAdapter.GetClientMovement(msg.keyMovements.Select <short, uint>(k => (uint)k).ToList()); if (account.state == Enums.Status.Fighting) { BFighter fighter = account.Fight.GetFighter(msg.actorId); if (fighter != null) { //account.Log(new BotTextInformation("GameMap Ancienne cellid of " + fighter.Id + " = " + fighter.CellId)); fighter.CellId = clientMovement.CellEnd.CellId; //account.Log(new BotTextInformation("GameMap Nouvelle cellid of " + fighter.Id + " = " + fighter.CellId)); } } }
public static void GameActionFightDispellableEffectMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameActionFightDispellableEffectMessage msg = (GameActionFightDispellableEffectMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if (account.Fight != null) { if (msg.effect is FightTemporaryBoostStateEffect) { FightTemporaryBoostStateEffect effect = (FightTemporaryBoostStateEffect)msg.effect; if (effect.targetId == account.Fight.Fighter.Id) { if (account.Fight.DurationByEffect.ContainsKey(effect.stateId)) { account.Fight.DurationByEffect.Remove(effect.stateId); } account.Fight.DurationByEffect.Add(effect.stateId, effect.turnDuration); } } else if (msg.effect is FightTemporaryBoostEffect) { FightTemporaryBoostEffect effect = (FightTemporaryBoostEffect)msg.effect; if (msg.actionId == 168) { ((BFighter)account.Fight.Fighter).ActionPoints = account.Fight.Fighter.ActionPoints - effect.delta; } else if (msg.actionId == 169) { ((BFighter)account.Fight.Fighter).MovementPoints = account.Fight.Fighter.MovementPoints - effect.delta; } } } }
public RegenUC(AccountUC Account) { InitializeComponent(); m_Account = Account; Init(); }
public static void GameFightTurnStartMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightTurnStartMessage msg = (GameFightTurnStartMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if (!account.Fight.IsFightStarted) { account.Fight.IsFightStarted = true; } if (msg.id == account.CharacterBaseInformations.id) { account.Fight.IsFighterTurn = true; } else { account.Fight.IsFighterTurn = false; } }
public static void LifePointsRegenBeginMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { LifePointsRegenBeginMessage msg = (LifePointsRegenBeginMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if (account.Fight != null && account.state == Enums.Status.Fighting) { account.Fight.watch.Stop(); account.Fight.WaitForReady = false; account.Fight.IsFighterTurn = false; account.Fight.IsFightStarted = false; account.Log(new ActionTextInformation("Combat fini ! (" + account.Fight.watch.Elapsed.Minutes + " min, " + account.Fight.watch.Elapsed.Seconds + " sec)"), 0); account.Fight.watch.Reset(); account.Fight.PerformAutoTimeoutFight(2000); if (account.WithItemSetBox.Checked == true) { sbyte id = (sbyte)account.PresetEndUpD.Value; InventoryPresetUseMessage msg2 = new InventoryPresetUseMessage((sbyte)(id - 1)); account.SocketManager.Send(msg2); account.Log(new ActionTextInformation("Equipement rapide numero " + Convert.ToString(id)), 5); } account.Fight.PulseRegen(); } account.SetStatus(Status.None); //account.Path.Stop = false; }
public static void IdentificationFailedForBadVersionMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { IdentificationFailedForBadVersionMessage identificationFailedForBadVersionMessage = (IdentificationFailedForBadVersionMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { identificationFailedForBadVersionMessage.Deserialize(reader); } account.Log(new ErrorTextInformation("Echec de connexion : Dofus a été mis à jour (" + identificationFailedForBadVersionMessage.RequiredVersion.Major + "." + identificationFailedForBadVersionMessage.RequiredVersion.Minor + "." + identificationFailedForBadVersionMessage.RequiredVersion.Release + "." + identificationFailedForBadVersionMessage.RequiredVersion.Revision + "." + identificationFailedForBadVersionMessage.RequiredVersion.Patch + "." + identificationFailedForBadVersionMessage.RequiredVersion.BuildType + ")." + " BlueSheep supporte uniquement la version " + GameConstants.Major + "." + GameConstants.Minor + "." + GameConstants.Release + "." + GameConstants.Revision + "." + GameConstants.Patch + "." + GameConstants.BuildType + " du jeu. Consultez le forum pour être alerté de la mise à jour du bot."), 0); account.SocketManager.DisconnectFromGUI(); }
public static void LifePointsRegenEndMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { LifePointsRegenEndMessage msg = (LifePointsRegenEndMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } int percent = (msg.lifePoints / msg.maxLifePoints) * 100; account.Log(new BotTextInformation("Fin de la régénération. + " + msg.lifePointsGained + " points de vie"), 2); //string text = msg.lifePoints + "/" + msg.maxLifePoints + "(" + percent + "%)"; account.ModifBar(2, (int)msg.maxLifePoints, (int)msg.lifePoints, "Vitalité"); }
public static void HelloConnectMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { account.SetStatus(Status.None); if (!account.IsMITM) { HelloConnectMessage helloConnectMessage = (HelloConnectMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { helloConnectMessage.Deserialize(reader); } sbyte[] credentials = RSAKey.Encrypt(helloConnectMessage.key, account.AccountName, account.AccountPassword, helloConnectMessage.salt); IdentificationMessage msg = new IdentificationMessage(GameConstants.AutoConnect, GameConstants.UseCertificate, GameConstants.UseLoginToken, new Common.Protocol.Types.VersionExtended(GameConstants.Major, GameConstants.Minor, GameConstants.Release, GameConstants.Revision, GameConstants.Patch, GameConstants.BuildType, GameConstants.Install, GameConstants.Technology), GameConstants.Lang, credentials, GameConstants.ServerID, GameConstants.SessionOptionalSalt, new List <ushort>().ToArray()); account.SocketManager.Send(msg); } account.Log(new ConnectionTextInformation("Identification en cours."), 0); }
public static void GameFightSpectatorJoinMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightSpectatorJoinMessage msg = (GameFightSpectatorJoinMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } }
public static void IdentificationFailedMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { IdentificationFailedMessage identificationFailedMessage = (IdentificationFailedMessage)message; account.Log(new ErrorTextInformation("Echec de l'identification."), 0); using (BigEndianReader reader = new BigEndianReader(packetDatas)) { identificationFailedMessage.Deserialize(reader); } IdentificationFailureReason.Test((IdentificationFailureReasonEnum)identificationFailedMessage.Reason, account); account.SocketManager.DisconnectFromGUI(); }
public static void GameActionFightPointsVariationMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameActionFightPointsVariationMessage msg = (GameActionFightPointsVariationMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if (account.Fight != null) { BFighter fighter = (BFighter)account.Fight.GetFighter(msg.targetId); if (fighter != null) { switch (msg.actionId) { case 101: case 102: case 120: fighter.ActionPoints = (fighter.ActionPoints + msg.delta); break; case 78: case 127: case 129: fighter.MovementPoints = (fighter.MovementPoints + msg.delta); break; } } } }
public CLIParser(AccountUC Account) { this.account = Account; }
public Gather(AccountUC Account) { account = Account; }
public Treatment(AccountUC accountform) { GetTypes("BlueSheep"); account = accountform; }
public static void ServerListMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { ServersListMessage msg = new ServersListMessage(); using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } account.Log(new ConnectionTextInformation("< --- Probably, your server is under maintenance --- >"), 0); msg.Servers.ForEach(server => account.Log(new ConnectionTextInformation("< --- Server : " + BlueSheep.Common.Data.I18N.GetText((int)GameData.GetDataObject(D2oFileEnum.Servers, server.ObjectID).Fields["nameId"]) + " Status : " + ((ServerStatusEnum)server.Status).Description() + " --- >"), 0)); //foreach (GameServerInformations gsi in msg.servers) //{ // account.Log(new ConnectionTextInformation("Server : "+ // IntelliSense.ServersList.Where(server => server.Id == gsi.id).FirstOrDefault().Name), 0); //} account.Log(new ConnectionTextInformation("Serveur complet."), 0); account.TryReconnect(600); }
public static void CheckIntegrityMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { //using (BigEndianWriter writer = new BigEndianWriter()) //{ // writer.WriteBytes(packetDatas); // MessagePackaging pack = new MessagePackaging(writer); // pack.Pack(6372); // account.SocketManager.Send(pack.Writer.Content); // account.Log(new BotTextInformation("Raw data traité avec succès."), 0); //} }
public static void HelloGameMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { if (!account.IsMITM) { AuthenticationTicketMessage authenticationTicketMessage = new AuthenticationTicketMessage(GameConstants.Lang, account.Ticket); account.SocketManager.Send(authenticationTicketMessage); } }
public static void AuthenticationTicketAcceptedMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { if (!account.IsMITM) { CharactersListRequestMessage charactersListRequestMessage = new CharactersListRequestMessage(); account.SocketManager.Send(charactersListRequestMessage); } }
public static void AuthenticationTicketAcceptedRefusedTreatment(Message message, byte[] packetDatas, AccountUC account) { AuthenticationTicketRefusedMessage msg = new AuthenticationTicketRefusedMessage(); using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } account.Log(new ErrorTextInformation("Error : Authentication Ticket Refused"), 0); }
public CaracUC(AccountUC Account) { InitializeComponent(); account = Account; }
public static void GameFightTurnEndMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { GameFightTurnEndMessage msg = (GameFightTurnEndMessage)message; using (BigEndianReader reader = new BigEndianReader(packetDatas)) { msg.Deserialize(reader); } if (msg.id == account.CharacterBaseInformations.id) { int num4 = 0; List <int> list = new List <int>(); account.Fight.IsFighterTurn = false; account.Fight.TotalLaunchBySpell.Clear(); //Nettoyage des variables de vérification de lancement d'un sort account.Fight.TotalLaunchByCellBySpell.Clear(); //Nettoyage des variables de vérification de lancement d'un sort for (int i = 0; i < account.Fight.DurationByEffect.Keys.Count; i++) { Dictionary <int, int> durationPerEffect = account.Fight.DurationByEffect; num4 = Enumerable.ElementAtOrDefault <int>(account.Fight.DurationByEffect.Keys, i); durationPerEffect[num4] = (durationPerEffect[num4] - 1); if (account.Fight.DurationByEffect[Enumerable.ElementAtOrDefault <int>(account.Fight.DurationByEffect.Keys, i)] <= 0) { list.Add(Enumerable.ElementAtOrDefault <int>(account.Fight.DurationByEffect.Keys, i)); } } while (list.Count > 0) { account.Fight.DurationByEffect.Remove(list[0]); list.RemoveAt(0); } for (int i = 0; i < account.Fight.LastTurnLaunchBySpell.Keys.Count; i++) { Dictionary <int, int> dictionary = account.Fight.LastTurnLaunchBySpell; num4 = Enumerable.ElementAtOrDefault <int>(account.Fight.LastTurnLaunchBySpell.Keys, i); dictionary[num4] = (dictionary[num4] - 1); if (account.Fight.LastTurnLaunchBySpell[Enumerable.ElementAtOrDefault <int>(account.Fight.LastTurnLaunchBySpell.Keys, i)] <= 0) { list.Add(Enumerable.ElementAtOrDefault <int>(account.Fight.LastTurnLaunchBySpell.Keys, i)); } } while (list.Count > 0) { account.Fight.LastTurnLaunchBySpell.Remove(list[0]); list.RemoveAt(0); } account.Log(new BotTextInformation("Fin du tour"), 5); } BFighter fighter = (BFighter)account.Fight.GetFighter(msg.id); if (fighter != null) { fighter.ActionPoints = fighter.GameFightMinimalStats.maxActionPoints; fighter.MovementPoints = fighter.GameFightMinimalStats.maxMovementPoints; } }