Пример #1
0
        private async Task OnMigrateIn(IPacket packet)
        {
            var characterID = packet.Decode <int>();

            using (var db = WvsGame.DataContextFactory.Create())
            {
                var character = db.Characters
                                .Include(c => c.Data)
                                .ThenInclude(a => a.Account)
                                .Include(c => c.Data)
                                .ThenInclude(c => c.Trunk)
                                .ThenInclude(c => c.Items)
                                .Include(c => c.Inventories)
                                .ThenInclude(c => c.Items)
                                .Include(c => c.WishList)
                                .Single(c => c.ID == characterID);

                character.CoupleRecords = db.CoupleRecord
                                          .Where(c => c.CharacterID == character.ID)
                                          .ToList();
                character.FriendRecords = db.FriendRecord
                                          .Where(c => c.CharacterID == character.ID)
                                          .ToList();
                character.Memos = db.Memos
                                  .Where(m => m.CharacterID == character.ID)
                                  .ToList();

                if (!await WvsGame.TryMigrateFrom(character, WvsGame.Info))
                {
                    await Disconnect();
                }

                var field     = WvsGame.FieldManager.Get(character.FieldID);
                var fieldUser = new FieldUser(this, character);

                FieldUser = fieldUser;
                await field.Enter(fieldUser);

                var memos = character.Memos;
                if (memos.Count > 0)
                {
                    using (var p = new Packet(SendPacketOperations.MemoResult))
                    {
                        p.Encode <byte>((byte)MemoResult.Load);
                        p.Encode <byte>((byte)memos.Count);
                        memos.ForEach(m =>
                        {
                            p.Encode <int>(m.ID);
                            p.Encode <string>(m.Sender);
                            p.Encode <string>(m.Content);
                            p.Encode <DateTime>(m.DateSent);
                            p.Encode <byte>((byte)m.Flag);
                        });
                        await SendPacket(p);
                    }
                }
            }
        }