public static bool DeleteCharacter(Player player) { using (DatabaseContext context = new DatabaseContext()) { Player character = context.Characters.Find(player.CharacterId); List <Item> items = context.Items.Where(x => x.Owner.CharacterId == player.CharacterId).ToList(); List <Buddy> buddies = context.Buddies.Where(x => x.Player.AccountId == player.CharacterId).ToList(); List <QuestStatus> quests = context.Quests.Where(x => x.Player.CharacterId == player.CharacterId).ToList(); List <SkillTab> skilltabs = context.SkillTabs.Where(x => x.Player.CharacterId == player.CharacterId).ToList(); List <Mail> mails = context.Mails.Where(x => x.PlayerId == player.CharacterId).ToList(); List <Inventory> inventories = context.Inventories.Where(x => x.Id == player.Inventory.Id).ToList(); BankInventory bankInventory = context.BankInventories.First(x => x.Id == player.BankInventory.Id); Wallet wallet = context.Wallets.First(x => x.Id == player.Wallet.Id); Levels level = context.Levels.First(x => x.Id == player.Levels.Id); GameOptions gameOptions = context.GameOptions.First(x => x.Id == player.GameOptions.Id); Mailbox mailBox = context.MailBoxes.First(x => x.Id == player.Mailbox.Id); items.ForEach(x => context.Entry(x).State = EntityState.Deleted); buddies.ForEach(x => context.Entry(x).State = EntityState.Deleted); quests.ForEach(x => context.Entry(x).State = EntityState.Deleted); skilltabs.ForEach(x => context.Entry(x).State = EntityState.Deleted); inventories.ForEach(x => context.Entry(x).State = EntityState.Deleted); mails.ForEach(x => context.Entry(x).State = EntityState.Deleted); context.Entry(wallet).State = EntityState.Deleted; context.Entry(bankInventory).State = EntityState.Deleted; context.Entry(level).State = EntityState.Deleted; context.Entry(gameOptions).State = EntityState.Deleted; context.Entry(mailBox).State = EntityState.Deleted; context.Entry(character).State = EntityState.Deleted; return(SaveChanges(context)); } }
private static void HandleMesos(GameSession session, PacketReader packet) { packet.ReadLong(); byte mode = packet.ReadByte(); long amount = packet.ReadLong(); Wallet wallet = session.Player.Wallet; BankInventory bankInventory = session.Player.Account.BankInventory; if (mode == 1) // add mesos { if (wallet.Meso.Modify(-amount)) { bankInventory.Mesos.Modify(amount); } return; } if (mode == 0) // remove mesos { if (bankInventory.Mesos.Modify(-amount)) { wallet.Meso.Modify(amount); } } }
public Account(long accountId, dynamic data, BankInventory bankInventory, MushkingRoyaleStats royaleStats, List <Medal> medals, AuthData authData, GameSession gameSession) { Id = accountId; Username = data.username; PasswordHash = data.password_hash; CreationTime = data.creation_time; LastLoginTime = data.last_login_time; CharacterSlots = data.character_slots; Meret = new(CurrencyType.Meret, data.meret, gameSession); GameMeret = new(CurrencyType.GameMeret, data.game_meret, gameSession); EventMeret = new(CurrencyType.EventMeret, data.event_meret, gameSession); MesoToken = new(CurrencyType.MesoToken, data.meso_token, gameSession); BankInventory = bankInventory; MushkingRoyaleStats = royaleStats; VIPExpiration = data.vip_expiration; HomeId = data.home_id ?? 0; MesoMarketDailyListings = data.meso_market_daily_listings; MesoMarketMonthlyPurchases = data.meso_market_monthly_purchases; AuthData = authData; EquippedMedals = new() { { MedalSlot.Tail, null }, { MedalSlot.GroundMount, null },
public Account(long accountId, string username, string passwordHash, long creationTime, long lastLoginTime, int characterSlots, long meretAmount, long gameMeretAmount, long eventMeretAmount, long mesoTokens, long homeId, long vipExpiration, int mesoMarketDailyListings, int mesoMarketMonthlyPurchases, BankInventory bankInventory, MushkingRoyaleStats royaleStats, List <Medal> medals, AuthData authData, GameSession gameSession) { Id = accountId; Username = username; PasswordHash = passwordHash; CreationTime = creationTime; LastLoginTime = lastLoginTime; CharacterSlots = characterSlots; Meret = new(CurrencyType.Meret, meretAmount, gameSession); GameMeret = new(CurrencyType.GameMeret, gameMeretAmount, gameSession); EventMeret = new(CurrencyType.EventMeret, eventMeretAmount, gameSession); MesoToken = new(CurrencyType.MesoToken, mesoTokens, gameSession); BankInventory = bankInventory; MushkingRoyaleStats = royaleStats; VIPExpiration = vipExpiration; HomeId = homeId; MesoMarketDailyListings = mesoMarketDailyListings; MesoMarketMonthlyPurchases = mesoMarketMonthlyPurchases; AuthData = authData; EquippedMedals = new() { { MedalSlot.Tail, null }, { MedalSlot.GroundMount, null },
public long Insert(BankInventory bankInventory) { return(QueryFactory.Query(TableName).InsertGetId <long>(new { mesos = bankInventory.Mesos.Amount, extra_size = bankInventory.ExtraSize, })); }
private static Account ReadAccount(dynamic data) { BankInventory bankInventory = DatabaseManager.BankInventories.FindById(data.bank_inventory_id); MushkingRoyaleStats royaleStats = DatabaseManager.MushkingRoyaleStats.FindById(data.mushking_royale_id); List <Medal> medals = DatabaseManager.MushkingRoyaleMedals.FindAllByAccountId(data.id); return(new(data.id, data, bankInventory, royaleStats, medals, null, null)); }
private static Account ReadAccount(dynamic data) { BankInventory bankInventory = DatabaseManager.BankInventories.FindById(data.bank_inventory_id); return(new Account(data.id, data.username, data.password_hash, data.creation_time, data.last_login_time, data.character_slots, data.meret, data.game_meret, data.event_meret, data.meso_token, data.home_id ?? 0, data.vip_expiration, bankInventory)); }
/// <summary> /// /// </summary> /// <param name="accountId"></param> /// <returns></returns> public BankInventory GetBankByAccountId(long accountId) { if (!m_bankByAccountId.ContainsKey(accountId)) { var bank = new BankInventory(BankRepository.Instance.GetByAccountId(accountId)); m_bankByAccountId.Add(accountId, bank); return(bank); } return(m_bankByAccountId[accountId]); }
public Player() { Type |= ObjectTypes.Player; inventory = new PlayerInventory(this, (UpdateFields.PLAYER_FARSIGHT - UpdateFields.PLAYER_FIELD_INV_SLOT_HEAD) / 2); _equipment = new EquipmentInventory(this); _backPack = new BackPackInventory(this); _bank = new BankInventory(this); _bankBags = new BankBagsInventory(this); _keyRing = new KeyRingInventory(this); }
private static Account ReadAccount(dynamic data) { BankInventory bankInventory = DatabaseManager.BankInventories.FindById(data.bank_inventory_id); MushkingRoyaleStats royaleStats = DatabaseManager.MushkingRoyaleStats.FindById(data.mushking_royale_id); List <Medal> medals = DatabaseManager.MushkingRoyaleMedals.FindAllByAccountId(data.id); return(new Account(data.id, data.username, data.password_hash, data.creation_time, data.last_login_time, data.character_slots, data.meret, data.game_meret, data.event_meret, data.meso_token, data.home_id ?? 0, data.vip_expiration, data.meso_market_daily_listings, data.meso_market_monthly_purchases, bankInventory, royaleStats, medals, null)); }
/// <summary> /// Sends OpenBank to creature's client. /// </summary> /// <param name="creature"></param> /// <param name="bank"></param> /// <param name="race"></param> public static void OpenBank(Creature creature, BankInventory bank, BankTabRace race, string bankId, string bankTitle) { var packet = new Packet(Op.OpenBank, creature.EntityId); packet.PutByte(1); packet.PutByte((byte)race); packet.PutLong(DateTime.Now); packet.PutByte(0); packet.PutString(creature.Client.Account.Id); packet.PutString(bankId); packet.PutString(bankTitle); packet.PutInt(bank.Gold); var server = creature.Client.Account.Characters.FirstOrDefault(c => c.EntityId == packet.Id).Server; var tabList = bank.GetTabList(server, race); packet.PutInt(tabList.Count); foreach (var tab in tabList) { packet.PutString(tab.Name); packet.PutByte((byte)tab.Race); // [190200, NA204 (2015-05-19)] ? // Haven't opened a bank in a while, could've been // added earlier. -- exec { packet.PutInt(0); } packet.PutInt(tab.Width); packet.PutInt(tab.Height); var itemList = tab.GetItemList(); packet.PutInt(itemList.Count); foreach (var item in itemList) { packet.PutString(item.Bank); packet.PutLong(item.BankTransferRemaining); packet.PutLong(item.BankTransferStart); packet.AddItemInfo(item, ItemPacketType.Private); } } creature.Client.Send(packet); }
/// <summary> /// Sends OpenBank to creature's client. /// </summary> /// <param name="creature"></param> /// <param name="bank"></param> /// <param name="race"></param> public static void OpenBank(Creature creature, BankInventory bank, BankTabRace race) { var packet = new Packet(Op.OpenBank, creature.EntityId); packet.PutByte(1); packet.PutByte((byte)race); packet.PutLong(DateTime.Now); packet.PutByte(0); packet.PutString(creature.Client.Account.Id); packet.PutString("Global"); // Current bank id packet.PutString("Bank"); // Current bank title packet.PutInt(bank.Gold); var tabList = bank.GetTabList(race); packet.PutInt(tabList.Count); foreach (var tab in tabList) { packet.PutString(tab.Name); packet.PutByte((byte)tab.Race); // [190200, NA204 (2015-05-19)] ? // Haven't opened a bank in a while, could've been // added earlier. -- exec { packet.PutInt(0); } packet.PutInt(tab.Width); packet.PutInt(tab.Height); var itemList = tab.GetItemList(); packet.PutInt(itemList.Count); foreach (var item in itemList) { packet.PutString("Global"); // Bank id packet.PutULong(18446744017659355058); packet.PutULong(0); packet.AddItemInfo(item, ItemPacketType.Private); } } creature.Client.Send(packet); }
public static void UpdateItems(Player player) { Inventory inventory = player.Inventory; inventory.DB_Items = inventory.Items.Values.Where(x => x != null).ToList(); inventory.DB_Items.AddRange(inventory.Equips.Values.Where(x => x != null).ToList()); inventory.DB_Items.AddRange(inventory.Cosmetics.Values.Where(x => x != null).ToList()); BankInventory bankInventory = player.BankInventory; bankInventory.DB_Items = bankInventory.Items.Where(x => x != null).ToList(); using (DatabaseContext context = new DatabaseContext()) { foreach (Item item in inventory.DB_Items) { Item dbItem = context.Items.Include(x => x.Inventory).Include(x => x.BankInventory).FirstOrDefault(x => x.Uid == item.Uid); if (dbItem == null) { item.Inventory = inventory; context.Entry(item).State = EntityState.Added; continue; } item.BankInventory = null; dbItem.BankInventory = null; context.Entry(dbItem).CurrentValues.SetValues(item); } foreach (Item item in bankInventory.DB_Items) { Item dbItem = context.Items.Include(x => x.Inventory).Include(x => x.BankInventory).FirstOrDefault(x => x.Uid == item.Uid); if (dbItem == null) { item.BankInventory = bankInventory; context.Entry(item).State = EntityState.Added; continue; } item.Inventory = null; dbItem.Inventory = null; context.Entry(dbItem).CurrentValues.SetValues(item); } SaveChanges(context); } }
public void Update(BankInventory bankInventory) { QueryFactory.Query(TableName).Where("id", bankInventory.Id).Update(new { mesos = bankInventory.Mesos.Amount, extra_size = bankInventory.ExtraSize, }); List <Item> items = new List <Item>(); items.AddRange(bankInventory.Items.Where(item => item != null).ToList()); foreach (Item item in items) { item.BankInventoryId = bankInventory.Id; item.InventoryId = 0; item.HomeId = 0; DatabaseManager.Items.Update(item); } }
private static void HandleClose(BankInventory bankInventory) { DatabaseManager.BankInventories.Update(bankInventory); }
/// <summary> /// Return the full player with the given id, with Hotbars, SkillTabs, Inventories, etc. /// </summary> /// <returns>Player</returns> public Player FindPlayerById(long characterId, GameSession session) { dynamic data = QueryFactory.Query(TableName).Where("character_id", characterId) .Join("levels", "levels.id", "characters.levels_id") .Join("accounts", "accounts.id", "characters.account_id") .Join("game_options", "game_options.id", "characters.game_options_id") .Join("wallets", "wallets.id", "characters.wallet_id") .Join("auth_data", "auth_data.account_id", "characters.account_id") .LeftJoin("homes", "homes.account_id", "accounts.id") .Select( "characters.{*}", "levels.{level, exp, rest_exp, prestige_level, prestige_exp, mastery_exp}", "accounts.{username, password_hash, creation_time, last_log_time, character_slots, meret, game_meret, event_meret, meso_token, bank_inventory_id, mushking_royale_id, vip_expiration, meso_market_daily_listings, meso_market_monthly_purchases}", "game_options.{keybinds, active_hotbar_id}", "wallets.{meso, valor_token, treva, rue, havi_fruit}", "homes.id as home_id", "auth_data.{token_a, token_b, online_character_id}") .FirstOrDefault(); List <Hotbar> hotbars = DatabaseManager.Hotbars.FindAllByGameOptionsId(data.game_options_id); List <Macro> macros = DatabaseManager.Macros.FindAllByCharacterId(data.character_id); List <SkillTab> skillTabs = DatabaseManager.SkillTabs.FindAllByCharacterId(data.character_id, data.job); IInventory inventory = DatabaseManager.Inventories.FindById(data.inventory_id); BankInventory bankInventory = DatabaseManager.BankInventories.FindById(data.bank_inventory_id); MushkingRoyaleStats royaleStats = DatabaseManager.MushkingRoyaleStats.FindById(data.mushking_royale_id); List <Medal> medals = DatabaseManager.MushkingRoyaleMedals.FindAllByAccountId(data.account_id); Dictionary <int, Trophy> trophies = DatabaseManager.Trophies.FindAllByCharacterId(data.character_id); List <ClubMember> clubMemberships = DatabaseManager.ClubMembers.FindAllClubIdsByCharacterId(data.character_id); foreach (KeyValuePair <int, Trophy> trophy in DatabaseManager.Trophies.FindAllByAccountId(data.account_id)) { trophies.Add(trophy.Key, trophy.Value); } Dictionary <int, QuestStatus> questList = DatabaseManager.Quests.FindAllByCharacterId(data.character_id); AuthData authData = new(data.token_a, data.token_b, data.account_id, data.online_character_id ?? 0); return(new() { Session = session, CharacterId = data.character_id, AccountId = data.account_id, Account = new(data.account_id, data, bankInventory, royaleStats, medals, authData, session), CreationTime = data.creation_time, Birthday = data.birthday, Name = data.name, Gender = (Gender)data.gender, Awakened = data.awakened, ChannelId = data.channel_id, InstanceId = data.instance_id, IsMigrating = data.is_migrating, Job = (Job)data.job, Levels = new(data.level, data.exp, data.rest_exp, data.prestige_level, data.prestige_exp, JsonConvert.DeserializeObject <List <MasteryExp> >(data.mastery_exp), session, data.levels_id), MapId = data.map_id, TitleId = data.title_id, InsigniaId = data.insignia_id, Titles = JsonConvert.DeserializeObject <List <int> >(data.titles), PrestigeRewardsClaimed = JsonConvert.DeserializeObject <List <int> >(data.prestige_rewards_claimed), PrestigeMissions = JsonConvert.DeserializeObject <List <PrestigeMission> >(data.prestige_missions), GearScore = data.gear_score, MaxSkillTabs = data.max_skill_tabs, ActiveSkillTabId = data.active_skill_tab_id, GameOptions = new GameOptions(JsonConvert.DeserializeObject <Dictionary <int, KeyBind> >(data.keybinds), hotbars, data.active_hotbar_id, data.game_options_id), Macros = macros, Wallet = new Wallet(data.meso, data.valor_token, data.treva, data.rue, data.havi_fruit, session, data.wallet_id), Inventory = inventory, ChatSticker = JsonConvert.DeserializeObject <List <ChatSticker> >(data.chat_sticker), SavedCoord = JsonConvert.DeserializeObject <CoordF>(data.coord), Emotes = JsonConvert.DeserializeObject <List <int> >(data.emotes), FavoriteStickers = JsonConvert.DeserializeObject <List <int> >(data.favorite_stickers), GuildApplications = JsonConvert.DeserializeObject <List <GuildApplication> >(data.guild_applications), GuildId = data.guild_id ?? 0, ClubMembers = clubMemberships, IsDeleted = data.is_deleted, Motto = data.motto, ProfileUrl = data.profile_url, ReturnCoord = JsonConvert.DeserializeObject <CoordF>(data.return_coord), ReturnMapId = data.return_map_id, SkinColor = JsonConvert.DeserializeObject <SkinColor>(data.skin_color), StatPointDistribution = JsonConvert.DeserializeObject <StatDistribution>(data.statpoint_distribution), Stats = JsonConvert.DeserializeObject <Stats>(data.stats), TrophyCount = JsonConvert.DeserializeObject <int[]>(data.trophy_count), UnlockedMaps = JsonConvert.DeserializeObject <List <int> >(data.unlocked_maps), UnlockedTaxis = JsonConvert.DeserializeObject <List <int> >(data.unlocked_taxis), VisitingHomeId = data.visiting_home_id, SkillTabs = skillTabs, TrophyData = trophies, QuestData = questList, GatheringCount = JsonConvert.DeserializeObject <List <GatheringCount> >(data.gathering_count), ActivePet = DatabaseManager.Items.FindByUid(data.active_pet_item_uid) }); }
/// <summary> /// Return the full player with the given id, with Hotbars, SkillTabs, Inventories, etc. /// </summary> /// <returns>Player</returns> public Player FindPlayerById(long characterId) { dynamic data = QueryFactory.Query(TableName).Where("character_id", characterId) .Join("levels", "levels.id", "characters.levels_id") .Join("accounts", "accounts.id", "characters.account_id") .Join("game_options", "game_options.id", "characters.game_options_id") .Join("wallets", "wallets.id", "characters.wallet_id") .LeftJoin("homes", "homes.account_id", "accounts.id") .Select( "characters.{*}", "levels.{level, exp, rest_exp, prestige_level, prestige_exp, mastery_exp}", "accounts.{username, password_hash, creation_time, last_login_time, character_slots, meret, game_meret, event_meret, meso_token, bank_inventory_id, vip_expiration}", "game_options.{keybinds, active_hotbar_id}", "wallets.{meso, valor_token, treva, rue, havi_fruit}", "homes.id as home_id") .FirstOrDefault(); List <Hotbar> hotbars = DatabaseManager.Hotbars.FindAllByGameOptionsId(data.game_options_id); List <SkillTab> skillTabs = DatabaseManager.SkillTabs.FindAllByCharacterId(data.character_id, data.job); Inventory inventory = DatabaseManager.Inventories.FindById(data.inventory_id); BankInventory bankInventory = DatabaseManager.BankInventories.FindById(data.bank_inventory_id); Dictionary <int, Trophy> trophies = DatabaseManager.Trophies.FindAllByCharacterId(data.character_id); foreach (KeyValuePair <int, Trophy> trophy in DatabaseManager.Trophies.FindAllByAccountId(data.account_id)) { trophies.Add(trophy.Key, trophy.Value); } List <QuestStatus> questList = DatabaseManager.Quests.FindAllByCharacterId(data.character_id); return(new Player() { CharacterId = data.character_id, AccountId = data.account_id, Account = new Account(data.account_id, data.username, data.password_hash, data.creation_time, data.last_login_time, data.character_slots, data.meret, data.game_meret, data.event_meret, data.meso_token, data.home_id ?? 0, data.vip_expiration, bankInventory), CreationTime = data.creation_time, Name = data.name, Gender = data.gender, Awakened = data.awakened, Job = (Job)data.job, Levels = new Levels(data.level, data.exp, data.rest_exp, data.prestige_level, data.prestige_exp, JsonConvert.DeserializeObject <List <MasteryExp> >(data.mastery_exp), data.levels_id), MapId = data.map_id, TitleId = data.title_id, InsigniaId = data.insignia_id, Titles = JsonConvert.DeserializeObject <List <int> >(data.titles), PrestigeRewardsClaimed = JsonConvert.DeserializeObject <List <int> >(data.prestige_rewards_claimed), MaxSkillTabs = data.max_skill_tabs, ActiveSkillTabId = data.active_skill_tab_id, GameOptions = new GameOptions(JsonConvert.DeserializeObject <Dictionary <int, KeyBind> >(data.keybinds), hotbars, data.active_hotbar_id, data.game_options_id), Wallet = new Wallet(data.meso, data.valor_token, data.treva, data.rue, data.havi_fruit, data.wallet_id), Inventory = inventory, ChatSticker = JsonConvert.DeserializeObject <List <ChatSticker> >(data.chat_sticker), ClubId = data.club_id, Coord = JsonConvert.DeserializeObject <CoordF>(data.coord), Emotes = JsonConvert.DeserializeObject <List <int> >(data.emotes), FavoriteStickers = JsonConvert.DeserializeObject <List <int> >(data.favorite_stickers), GroupChatId = JsonConvert.DeserializeObject <int[]>(data.group_chat_id), GuildApplications = JsonConvert.DeserializeObject <List <GuildApplication> >(data.guild_applications), GuildId = data.guild_id ?? 0, IsDeleted = data.is_deleted, Mapleopoly = JsonConvert.DeserializeObject <Mapleopoly>(data.mapleopoly), Motto = data.motto, ProfileUrl = data.profile_url, ReturnCoord = JsonConvert.DeserializeObject <CoordF>(data.return_coord), ReturnMapId = data.return_map_id, SkinColor = JsonConvert.DeserializeObject <SkinColor>(data.skin_color), StatPointDistribution = JsonConvert.DeserializeObject <StatDistribution>(data.statpoint_distribution), Stats = JsonConvert.DeserializeObject <PlayerStats>(data.stats), TrophyCount = JsonConvert.DeserializeObject <int[]>(data.trophy_count), UnlockedMaps = JsonConvert.DeserializeObject <List <int> >(data.unlocked_maps), UnlockedTaxis = JsonConvert.DeserializeObject <List <int> >(data.unlocked_taxis), VisitingHomeId = data.visiting_home_id, SkillTabs = skillTabs, TrophyData = trophies, QuestList = questList }); }