Пример #1
0
        public void HandleErrorCode(ref PacketBufferReader p)
        {
            byte code = p.ReadByte();

            PopupMessage     = ServerErrorMessages.GetError(p.ID, code);
            CurrentLoginStep = LoginSteps.PopUpMessage;
        }
Пример #2
0
        public void HandleErrorCode(ref StackDataReader p)
        {
            byte code = p.ReadUInt8();

            PopupMessage     = ServerErrorMessages.GetError(p[0], code);
            CurrentLoginStep = LoginSteps.PopUpMessage;
        }
Пример #3
0
        private void NetClient_PacketReceived(object sender, Packet e)
        {
            e.MoveToData();
            switch (e.ID)
            {
            case 0xA8:     // ServerListReceived
                ParseServerList(e);

                // Save credentials to config file
                if (Engine.GlobalSettings.SaveAccount)
                {
                    Engine.GlobalSettings.Username = Account;
                    Engine.GlobalSettings.Password = Crypter.Encrypt(Password);
                    Engine.GlobalSettings.Save();
                }

                CurrentLoginStep = LoginStep.ServerSelection;

                if (Engine.GlobalSettings.AutoLogin && _isFirstLogin)
                {
                    if (Servers.Length != 0)
                    {
                        SelectServer((byte)Servers[(Engine.GlobalSettings.LastServerNum - 1)].Index);
                    }
                }

                break;

            case 0x8C:     // ReceiveServerRelay
                // On OSI, upon receiving this packet, the client would disconnect and
                // log in to the specified server. Since emulated servers use the same
                // server for both shard selection and world, we don't need to disconnect.
                HandleRelayServerPacket(e);

                break;

            case 0x86:     // UpdateCharacterList
                ParseCharacterList(e);

                Engine.UI.Remove <CharacterSelectionGump>();

                _currentGump?.Dispose();

                Engine.UI.Add(_currentGump = new CharacterSelectionGump());

                break;

            case 0xA9:                     // ReceiveCharacterList
                ParseCharacterList(e);
                ParseCities(e);
                ParseFlags(e);
                CurrentLoginStep = LoginStep.CharacterSelection;

                if (Engine.GlobalSettings.AutoLogin && _isFirstLogin)
                {
                    _isFirstLogin = false;
                    bool haveAnyCharacter = false;

                    for (byte i = 0; i < Characters.Length; i++)
                    {
                        if (Characters[i].Length > 0)
                        {
                            haveAnyCharacter = true;
                            if (Characters[i] == Engine.GlobalSettings.LastCharacterName)
                            {
                                SelectCharacter(i);
                                return;
                            }
                        }
                    }

                    if (haveAnyCharacter)
                    {
                        SelectCharacter(0);
                    }
                }

                break;

            case 0xBD:     // ReceiveVersionRequest
                NetClient.Socket.Send(new PClientVersion(Engine.GlobalSettings.ClientVersion));

                break;

            case 0x82:     // ReceiveLoginRejection
            case 0x85:     // character list notification
            case 0x53:     // Error Code
                byte code = e.ReadByte();

                PopupMessage     = ServerErrorMessages.GetError(e.ID, code);
                CurrentLoginStep = LoginStep.PopUpMessage;

                break;
            }
        }
Пример #4
0
        private void NetClient_PacketReceived(object sender, Packet e)
        {
            e.MoveToData();

            switch (e.ID)
            {
            case 0xA8:     // ServerListReceived
                ParseServerList(e);

                CurrentLoginStep = LoginSteps.ServerSelection;

                if (Settings.GlobalSettings.AutoLogin || Reconnect)
                {
                    if (Servers.Length != 0)
                    {
                        int index = Settings.GlobalSettings.LastServerNum;

                        if (index <= 0 || index > Servers.Length)
                        {
                            Log.Warn($"Wrong server index: {index}");
                            index = 1;
                        }

                        SelectServer((byte)Servers[index - 1].Index);
                    }
                }

                break;

            case 0x8C:     // ReceiveServerRelay
                // On OSI, upon receiving this packet, the client would disconnect and
                // log in to the specified server. Since emulated servers use the same
                // server for both shard selection and world, we don't need to disconnect.
                HandleRelayServerPacket(e);

                break;

            case 0x86:     // UpdateCharacterList
                ParseCharacterList(e);

                UIManager.GetGump <CharacterSelectionGump>()?.Dispose();

                _currentGump?.Dispose();

                UIManager.Add(_currentGump = new CharacterSelectionGump());

                break;

            case 0xA9:     // ReceiveCharacterList
                ParseCharacterList(e);
                ParseCities(e);
                ParseFlags(e);
                CurrentLoginStep = LoginSteps.CharacterSelection;

                uint charToSelect = 0;

                bool haveAnyCharacter = false;
                bool tryAutologin     = Settings.GlobalSettings.AutoLogin || Reconnect;

                for (byte i = 0; i < Characters.Length; i++)
                {
                    if (Characters[i].Length > 0)
                    {
                        haveAnyCharacter = true;

                        if (Characters[i] == Settings.GlobalSettings.LastCharacterName)
                        {
                            charToSelect = i;

                            break;
                        }
                    }
                }

                if (tryAutologin && haveAnyCharacter)
                {
                    SelectCharacter(charToSelect);
                }
                else if (!haveAnyCharacter)
                {
                    StartCharCreation();
                }

                break;

            case 0xBD:     // ReceiveVersionRequest
                NetClient.Socket.Send(new PClientVersion(Settings.GlobalSettings.ClientVersion));

                break;

            case 0x82:     // ReceiveLoginRejection
            case 0x85:     // character list notification
            case 0x53:     // Error Code
                byte code = e.ReadByte();

                PopupMessage     = ServerErrorMessages.GetError(e.ID, code);
                CurrentLoginStep = LoginSteps.PopUpMessage;

                break;

            case 0xB9:
                uint flags = 0;

                if (Client.Version >= ClientVersion.CV_60142)
                {
                    flags = e.ReadUInt();
                }
                else
                {
                    flags = e.ReadUShort();
                }
                World.ClientLockedFeatures.SetFlags((LockedFeatureFlags)flags);
                break;

            default:
                break;
            }
        }