Пример #1
0
        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));
            }
        }
Пример #2
0
    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);
            }
        }
    }
Пример #3
0
 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
         },
Пример #4
0
 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 },
Пример #5
0
 public long Insert(BankInventory bankInventory)
 {
     return(QueryFactory.Query(TableName).InsertGetId <long>(new
     {
         mesos = bankInventory.Mesos.Amount,
         extra_size = bankInventory.ExtraSize,
     }));
 }
Пример #6
0
    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));
    }
Пример #7
0
        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));
        }
Пример #8
0
 /// <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]);
 }
Пример #9
0
 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);
 }
Пример #10
0
    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));
    }
Пример #11
0
        /// <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);
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        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);
            }
        }
Пример #15
0
 private static void HandleClose(BankInventory bankInventory)
 {
     DatabaseManager.BankInventories.Update(bankInventory);
 }
Пример #16
0
    /// <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
            });
        }