public void GetServerState(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { string[] serverList = package.Substring(2).Split('|'); Server server = user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).Server; bool firstTime = true; foreach (string sv in serverList) { string[] separator = sv.Split(';'); int id = int.Parse(separator[0]); ServerState serverState = (ServerState)byte.Parse(separator[1]); if (id == server.Id) { server.State = serverState; manager.ReplaceOneAsync(c => c.Id == user.Id, user); hub.DispatchToClient(new LogMessage(LogType.GAME_INFORMATION, $"Le serveur {server.Name} est {server.State}", tcpId), tcpId).Wait(); if (serverState != ServerState.ONLINE) { firstTime = false; } } } if (!firstTime && server.State == ServerState.ONLINE) { hub.SendPackage("Ax", tcpId); } }
public void RegenTimerHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); characterGame.RegenTime = Convert.ToInt32(package.Substring(3)); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, $"Votre personnage récupère 1 pdv chaque {characterGame.RegenTime / 1000} secondes", tcpId), tcpId).Wait(); }
public void GetServerWorldRemastered(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).GameTicket = package.Split(';')[1]; manager.ReplaceOneAsync(c => c.Id == user.Id, user); hub.Clients.Caller.SendAsync("NewConnection", package.Split(';')[0].Substring(3), 443, true, tcpId, user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).isScan); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, $"Redirection vers le world ", tcpId), tcpId).Wait(); }
public void GetServerWorld(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).GameTicket = package.Substring(14); manager.ReplaceOneAsync(c => c.Id == user.Id, user); hub.Clients.Caller.SendAsync("NewConnection", Hash.DecryptIp(package.Substring(3, 8)), Hash.DecryptPort(package.Substring(11, 3).ToCharArray()), true, tcpId, user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).isScan); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, $"Redirection vers le world {Hash.DecryptIp(package.Substring(3, 8))} {Hash.DecryptPort(package.Substring(11, 3).ToCharArray())}", tcpId), tcpId).Wait(); }
public void GetSecretQuestion(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { if (user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).Server.State == ServerState.ONLINE) { hub.SendPackage("Ax", tcpId, true); } }
public void CharacterRegenHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { int regen = Convert.ToInt32(package.Substring(3)); var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); characterGame.Characteristic.VitalityActual += regen; hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, $"Vous avez récupéré {regen} points de vie", tcpId), tcpId).Wait(); }
public void EntityInventoryHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { //Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; //var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); //string[] datas = package.Substring(2).Split('|'); //TODO //Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); }
public void JobXpHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid jobsId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Jobs; var jobsBook = Database.Jobs.Find(i => i.Key == jobsId).First(); jobsBook.Jobs.DeserializeJobsXp(package.Substring(3)); Database.Jobs.ReplaceOneAsync(i => i.Key == jobsId, jobsBook); }
public void ItemAddHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); inventory.Items.DeserializeItems(package.Substring(4)); Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); hub.DispatchToClient(new InventoryMessage(tcpId), tcpId).Wait(); }
public void StatsHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); characterGame.DeserializeCharacter(package); var inventory = Database.Inventories.Find(i => i.Key == characterGame.Fk_Inventory).First(); hub.DispatchToClient(new CharacteristicMessage(characterGame.Characteristic, inventory.Kamas, characterGame.AvailableCharactericsPts, tcpId), tcpId).Wait(); }
public void SpellUpdateSuccess(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); var split = package.Substring(3).Split('~'); var pair = new KeyValuePair <int, byte>(Convert.ToInt32(split[0]), Convert.ToByte(split[1])); characterGame.Fk_Spells[characterGame.Fk_Spells.FindIndex(spell => spell.Key == pair.Key)] = pair; // TODO send hub spell msg }
public void GetLoginQueue(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { string[] queueData = package.Substring(2).Split('|'); hub.DispatchToClient(new LogMessage(LogType.GAME_INFORMATION, "[File d'attente] Position " + queueData[0] + "/" + queueData[1], tcpId), tcpId).Wait(); if (int.Parse(queueData[0]) > 100) { hub.SendPackage("Af", tcpId); } }
public void JobLevelUpHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid jobsId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Jobs; var datas = package.Substring(2).Split('|'); var jobsBook = Database.Jobs.Find(i => i.Key == jobsId).First(); jobsBook.Jobs.Find(x => x.Id == (JobIdEnum)Convert.ToInt32(datas[0])).Level = Convert.ToInt32(datas[1]); Database.Jobs.ReplaceOneAsync(i => i.Key == jobsId, jobsBook); }
public void GetListCharacters(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var account = user.Accounts.Find(c => c.TcpId == tcpId); hub.SendPackage("Agfr", tcpId); hub.SendPackage($"Ai{account.ClientId}", tcpId); hub.SendPackage("AL", tcpId); hub.SendPackage("Af", tcpId); }
public void InventoryWeightHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); string[] pods = package.Substring(2).Split('|'); inventory.ActualPods = short.Parse(pods[0]); inventory.MaxPods = short.Parse(pods[1]); Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); }
public void ItemRemoveHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); string[] data = package.Substring(2).Split(';'); inventory.Items.RemoveAt(inventory.Items.FindIndex(it => it.InventoryId == Convert.ToInt32(package.Substring(2)))); Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); hub.DispatchToClient(new InventoryMessage(tcpId), tcpId).Wait(); }
public async Task EntityActionHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); var cliId = user.CliConnectionId; var apiKey = user.ApiKey; string[] splittedData = package.Substring(2).Split(';'); int actionId = int.Parse(splittedData[1]); if (actionId > 0) { int entityId = int.Parse(splittedData[2]); switch (actionId) { case 1: // Entity Move on map int startCell = Hash.GetCellNum(splittedData[3].Substring(1, 2)); int cellId = Hash.GetCellNum(splittedData[3].Substring(splittedData[3].Length - 2)); if (entityId == characterGame.Key) { var gttMovementType = splittedData[0]; var path = PathFinder.Instance.GetPath(characterGame.Map, characterGame.CellId, cellId, true); var timeNeed = PathFinderUtils.Instance.GetDeplacementTime(characterGame.Map, path); List <IHubClientAction> pathAction = new List <IHubClientAction>(); pathAction.Add(new HubNodeAction(path, (newCell) => { characterGame.CellId = newCell; characterGame.Map.Entities[entityId].CellId = newCell; }, new HubClientAction(new MapMessage(characterGame.Map, tcpId) ))); talkService.AddTask(tcpId, cliId, apiKey.Key.ToString(), pathAction, 0); List <IHubClientAction> TaskRequest = new List <IHubClientAction>(); TaskRequest.Add(new HubPackageAction($"GKK{gttMovementType}")); talkService.AddTask(tcpId, cliId, apiKey.Key.ToString(), TaskRequest, timeNeed); } else { var path = PathFinder.Instance.GetPath(characterGame.Map, startCell, cellId, true); List <IHubClientAction> TaskRequest = new List <IHubClientAction>(); TaskRequest.Add(new HubNodeAction(path, (newCell) => { if (characterGame.Map.Entities.ContainsKey(entityId)) { characterGame.Map.Entities[entityId].CellId = newCell; } }, new HubClientAction(new MapMessage(characterGame.Map, tcpId)))); talkService.AddTask(tcpId, cliId, apiKey.Key.ToString(), TaskRequest, 0); //characterGame.Map.Entities[entityId].CellId = cellId; //hub.DispatchToClient(new MapMessage(characterGame.Map, tcpId), tcpId); } break; } } }
public void ItemUpdateHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); string[] data = package.Substring(3).Split(';'); Item item = new Item(); item.DeserializeItem(data[0]); inventory.Items[inventory.Items.FindIndex(it => it.InventoryId == item.InventoryId)] = item; Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); hub.DispatchToClient(new InventoryMessage(tcpId), tcpId).Wait(); }
public void SelectCharacter(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var currentAccount = user.Accounts.FirstOrDefault(c => c.TcpId == tcpId); string[] splittedData = package.Substring(3).Split('|'); int count = 2; bool found = false; List <Character> characters = new List <Character>(); hub.CallCheck(tcpId).Wait(); DeepTalk.IsScans.TryGetValue(tcpId, out bool isScan); while (count < splittedData.Length && !found) { string[] _loc11_ = splittedData[count].Split(';'); int id = int.Parse(_loc11_[0]); string characterName = _loc11_[1]; byte Level = byte.Parse(_loc11_[2]); short model = short.Parse(_loc11_[3]); if (isScan) { characters.Add(new Character() { BreedId = model, Key = id, Name = characterName, Level = Level }); } if (!isScan && currentAccount != null) { if (characterName.ToLower().Equals(currentAccount.CurrentCharacter.Name.ToLower())) { hub.SendPackage($"AS{id}", tcpId, true); hub.SendPackage($"Af", tcpId); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, $"Selection du personnage {characterName}", tcpId), tcpId).Wait(); Debug.WriteLine("Add character " + currentAccount.CurrentCharacter.Key + " to memory"); Storage.Instance.AddCharacter(currentAccount.CurrentCharacter); found = true; } } count++; } if (isScan) { user.Accounts.FirstOrDefault(c => c.TcpId == tcpId).Characters = characters; manager.ReplaceOneAsync(c => c.Id == user.Id, user).Wait(); hub.DispatchToClient(new CharactersMessage(characters, tcpId), tcpId).Wait(); hub.DisconnectCli(tcpId, true).Wait(); } }
public async static Task Receive(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> Manager, DeepTalkService talkService) { ReceiverData method = methods.Find(m => package.StartsWith(m.HandlerName)); if (method != null) { //if (method.Information.ReturnType.GetMethod(nameof(Task.GetAwaiter)) != null) // await (Task)method.Information.Invoke(method.Instance, new object[5] { hub, package, user, tcpId, Manager }); //else method.Information.Invoke(method.Instance, new object[6] { hub, package, user, tcpId, Manager, talkService }); } }
public void ExchangeItemsListHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); var inventory = Database.Inventories.Find(i => i.Key == characterGame.Fk_Inventory).First(); if (characterGame.State == CharacterStateEnum.BANKING) { inventory.Bank.DeserializeItems(package.Substring(3)); if (package.Contains(";G")) { inventory.BankKamas = Convert.ToInt32(package.Split(';').First(x => x.StartsWith("G")).Replace("G", "")); } } Database.Inventories.ReplaceOneAsync(i => i.Key == characterGame.Fk_Inventory, inventory); }
public void ItemQuantityUpdateHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); string[] data = package.Substring(2).Split('|'); Item item = inventory.Items.Find(it => it.InventoryId == Convert.ToInt32(data[0])); if (item != null) { item.Quantity = Convert.ToInt32(data[1]); } Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); hub.DispatchToClient(new InventoryMessage(tcpId), tcpId).Wait(); }
public void GroupInvitationHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, package.Substring(3).Split('|')[0].ToLower() + " t'invite à rejoindre son groupe.", tcpId), tcpId).Wait(); if (characterGame.HasGroup && package.Substring(3).Split('|')[0].ToLower() == characterGame.Group.Leader.Name.ToLower()) { hub.SendPackage("PA", tcpId); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, "Invitation acceptée.", tcpId), tcpId).Wait(); } else { hub.SendPackage("PR", tcpId); hub.DispatchToClient(new LogMessage(LogType.SYSTEM_INFORMATION, "Invitation refusée.", tcpId), tcpId).Wait(); } }
public void ExchangeCreateHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); string[] datas = package.Substring(3).Split('|'); var exchangeType = (ExchangeTypeEnum)Convert.ToInt32(datas[0]); if (exchangeType == ExchangeTypeEnum.EXCHANGE_STORAGE) { characterGame.State = CharacterStateEnum.BANKING; } else if (exchangeType == ExchangeTypeEnum.EXCHANGE_PLAYER) { characterGame.State = CharacterStateEnum.TRADING; } }
public void GetWelcomeKeyAsync(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var account = user.Accounts.FirstOrDefault(c => c.TcpId == tcpId); if (account.CurrentCharacter != null) { account.CurrentCharacter.State = CharacterStateEnum.CONNECTING; } account.WelcomeKey = package.Substring(2); manager.ReplaceOneAsync(c => c.Id == user.Id, user); hub.DispatchToClient(new LogMessage(LogType.GAME_INFORMATION, "Connexion au serveur d'auth", tcpId), tcpId).Wait(); hub.SendPackage("1.31.3", tcpId); hub.SendPackage($"{account.AccountName}\n{Hash.EncryptPassword(account.Password, account.WelcomeKey)}", tcpId); hub.SendPackage($"Af", tcpId); }
public void PlayerEmoteHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); var split = package.Substring(3).Split('|'); int playerId = Convert.ToInt32(split[0]), emoteId = Convert.ToInt32(split[1]); if (characterGame.Key != playerId) { return; } if (emoteId == 1 && characterGame.State != CharacterStateEnum.HEALING) { characterGame.State = CharacterStateEnum.HEALING; } else if (emoteId == 0 && characterGame.State == CharacterStateEnum.HEALING) { characterGame.State = CharacterStateEnum.IDLE; } }
public void AccountTempBannedError(DeepTalk hub, string package, UserDB account, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { string[] banInformations = package.Substring(3).Split('|'); int days = int.Parse(banInformations[0].Substring(1)), hours = int.Parse(banInformations[1]), minutes = int.Parse(banInformations[2]); StringBuilder banInformationsMessage = new StringBuilder().Append("Votre compte sera invalide pendant "); if (days > 0) { banInformationsMessage.Append(days + " jour(s)"); } if (hours > 0) { banInformationsMessage.Append(hours + " heures"); } if (minutes > 0) { banInformationsMessage.Append(minutes + " minutes"); } hub.DispatchToClient(new LogMessage(LogType.SYSTEM_ERROR, banInformationsMessage.ToString(), tcpId), tcpId).Wait(); }
public void EntityPopOrMoveHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { var characterGame = Storage.Instance.GetCharacter(user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key); foreach (var playerSplit in package.Substring(3).Split('|')) { if (playerSplit.Length != 0) { if (playerSplit.StartsWith('+')) { Debug.WriteLine(playerSplit.Substring(1)); var entity = EntityFactory.Instance.CreateEntity(characterGame.Map.MapId, playerSplit.Substring(1)); if (entity != null) { Debug.WriteLine($"Entity {entity.Id} pop or move on cell {entity.CellId}; curr character {entity.Id == characterGame.Key}"); if (characterGame.Map.Entities.ContainsKey(entity.Id)) { characterGame.Map.Entities[entity.Id].CellId = entity.CellId; } else { characterGame.Map.Entities[entity.Id] = entity; } if (entity.Id == characterGame.Key) { entity.Type = EntityTypeEnum.TYPE_OWNERCHARACTER; characterGame.CellId = entity.CellId; } hub.DispatchToClient(new MapMessage(characterGame.Map, tcpId), tcpId); } } else if (playerSplit.StartsWith('-')) { characterGame.Map.Entities.Remove(Convert.ToInt32(playerSplit.Substring(1))); hub.DispatchToClient(new MapMessage(characterGame.Map, tcpId), tcpId); } } } }
public void ChannelUpdateHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { /* * var characterGame = Storage.Instance.Characters[user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Key]; * if (package.Substring(2).StartsWith("+")) * { * foreach (var chan in package.Substring(3).ToCharArray()) * { * if (!characterGame.Channels.Contains(chan)) * characterGame.Channels += chan; * } * } * else * { * foreach (var chan in package.Substring(3).ToCharArray()) * { * if (!characterGame.Channels.Contains(chan)) * characterGame.Channels.Replace(chan.ToString(), ""); * } * } * manager.ReplaceOneAsync(c => c.Id == user.Id, user);*/ }
public void ItemMoveHandler(DeepTalk hub, string package, UserDB user, string tcpId, IMongoCollection <UserDB> manager, DeepTalkService talkService) { Guid inventoryId = user.Accounts.Find(c => c.TcpId == tcpId).CurrentCharacter.Fk_Inventory; var inventory = Database.Inventories.Find(i => i.Key == inventoryId).First(); string[] data = package.Substring(2).Split('|'); Item item = inventory.Items.Find(it => it.InventoryId == Convert.ToInt32(data[0])); if (item != null) { if (String.IsNullOrEmpty(data[1])) { item.Position = ItemSlotEnum.SLOT_INVENTORY; } else { item.Position = (ItemSlotEnum)Convert.ToInt32(data[1]); } } Database.Inventories.ReplaceOneAsync(i => i.Key == inventoryId, inventory); hub.DispatchToClient(new InventoryMessage(tcpId), tcpId).Wait(); }