Ejemplo n.º 1
0
        public async Task Handle(RecvPacketOperations operation, IPacket packet, GameSocket socket)
        {
            var characterID = packet.Decode <int>();

            try
            {
                using var store = socket.Service.DataStore.OpenSession();
                var character = store
                                .Query <Character>()
                                .First(c => c.ID == characterID);
                var data = store
                           .Query <AccountData>()
                           .First(d => d.ID == character.AccountDataID);
                var account = store
                              .Query <Account>()
                              .First(a => a.ID == data.AccountID);

                await socket.TryMigrateFrom(account, character);

                socket.Account     = account;
                socket.AccountData = data;
                socket.Character   = character;

                var field     = socket.Service.FieldManager.Get(character.FieldID);
                var fieldUser = new FieldUser(socket);
                await fieldUser.ValidateStat();

                socket.FieldUser = fieldUser;

                await field.Enter(fieldUser);

                if (socket.SocialService != null)
                {
                    await socket.Service.SendMessage(socket.SocialService, new SocialStateMessage
                    {
                        CharacterID = character.ID,
                        State       = MigrationState.LoggedIn,
                        Service     = socket.Service.Info.Name
                    });
                }

                using (var p = new Packet(SendPacketOperations.FuncKeyMappedInit))
                {
                    p.Encode <bool>(false);

                    for (var i = 0; i < 90; i++)
                    {
                        var key = character.FunctionKeys[i];

                        p.Encode <byte>(key?.Type ?? 0);
                        p.Encode <int>(key?.Action ?? 0);
                    }

                    await socket.SendPacket(p);
                }

                using (var p = new Packet(SendPacketOperations.QuickslotMappedInit))
                {
                    p.Encode <bool>(true);

                    for (var i = 0; i < 8; i++)
                    {
                        p.Encode <int>(character.QuickSlotKeys[i]);
                    }

                    await socket.SendPacket(p);
                }

                if (SkillConstants.HasEvanDragon(fieldUser.Character.Job))
                {
                    var dragon = new FieldDragon(fieldUser);

                    fieldUser.Owned.Add(dragon);
                    await fieldUser.Field.Enter(dragon);
                }
            }
            catch
            {
                await socket.Close();
            }
        }
Ejemplo n.º 2
0
 public abstract Task Handle(RecvPacketOperations operation, IPacket packet, FieldDragon dragon);
Ejemplo n.º 3
0
        public override async Task Handle(RecvPacketOperations operation, IPacket packet, FieldDragon dragon)
        {
            using (var p = new Packet(SendPacketOperations.DragonMove))
            {
                p.Encode <int>(dragon.Owner.ID);
                dragon.Move(packet).Encode(p);

                await dragon.Field.BroadcastPacket(dragon.Owner, p);
            }
        }