コード例 #1
0
        public void SelectCharacter(uint index)
        {
            if (CurrentLoginStep == LoginSteps.CharacterSelection)
            {
                LastCharacterManager.Save(Account, World.ServerName, Characters[index]);

                CurrentLoginStep = LoginSteps.EnteringBritania;
                NetClient.Socket.Send_SelectCharacter(index, Characters[index], NetClient.Socket.LocalIP);
            }
        }
コード例 #2
0
        public void ReceiveCharacterList(ref StackDataReader p)
        {
            ParseCharacterList(ref p);
            ParseCities(ref p);

            World.ClientFeatures.SetFlags((CharacterListFlags)p.ReadUInt32BE());
            CurrentLoginStep = LoginSteps.CharacterSelection;

            uint charToSelect = 0;

            bool haveAnyCharacter = false;
            bool canLogin         = CanAutologin;

            if (_autoLogin)
            {
                _autoLogin = false;
            }

            string lastCharName = LastCharacterManager.GetLastCharacter(Account, World.ServerName);

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

                    if (Characters[i] == lastCharName)
                    {
                        charToSelect = i;

                        break;
                    }
                }
            }

            if (canLogin && haveAnyCharacter)
            {
                SelectCharacter(charToSelect);
            }
            else if (!haveAnyCharacter)
            {
                StartCharCreation();
            }
        }
コード例 #3
0
        public void CreateCharacter(PlayerMobile character, int cityIndex, byte profession)
        {
            int i = 0;

            for (; i < Characters.Length; i++)
            {
                if (string.IsNullOrEmpty(Characters[i]))
                {
                    break;
                }
            }

            LastCharacterManager.Save(Account, World.ServerName, character.Name);

            NetClient.Socket.Send_CreateCharacter(character,
                                                  cityIndex,
                                                  NetClient.Socket.LocalIP,
                                                  ServerIndex,
                                                  (uint)i,
                                                  profession);

            CurrentLoginStep = LoginSteps.CharacterCreationDone;
        }
コード例 #4
0
        private static void ReadSettingsFromArgs(string[] args)
        {
            for (int i = 0; i <= args.Length - 1; i++)
            {
                string cmd = args[i].ToLower();

                // NOTE: Command-line option name should start with "-" character
                if (cmd.Length == 0 || cmd[0] != '-')
                {
                    continue;
                }

                cmd = cmd.Remove(0, 1);
                string value = string.Empty;

                if (i < args.Length - 1)
                {
                    if (!string.IsNullOrWhiteSpace(args[i + 1]) && !args[i + 1].StartsWith("-"))
                    {
                        value = args[++i];
                    }
                }

                Log.Trace($"ARG: {cmd}, VALUE: {value}");

                switch (cmd)
                {
                // Here we have it! Using `-settings` option we can now set the filepath that will be used
                // to load and save ClassicUO main settings instead of default `./settings.json`
                // NOTE: All individual settings like `username`, `password`, etc passed in command-line options
                // will override and overwrite those in the settings file because they have higher priority
                case "settings":
                    Settings.CustomSettingsFilepath = value;

                    break;

                case "highdpi":
                    CUOEnviroment.IsHighDPI = true;

                    break;

                case "username":
                    Settings.GlobalSettings.Username = value;

                    break;

                case "password":
                    Settings.GlobalSettings.Password = Crypter.Encrypt(value);

                    break;

                case "password_enc":     // Non-standard setting, similar to `password` but for already encrypted password
                    Settings.GlobalSettings.Password = value;

                    break;

                case "ip":
                    Settings.GlobalSettings.IP = value;

                    break;

                case "port":
                    Settings.GlobalSettings.Port = ushort.Parse(value);

                    break;

                case "filesoverride":
                case "uofilesoverride":
                    UOFilesOverrideMap.OverrideFile = value;

                    break;

                case "ultimaonlinedirectory":
                case "uopath":
                    Settings.GlobalSettings.UltimaOnlineDirectory = value;

                    break;

                case "profilespath":
                    Settings.GlobalSettings.ProfilesPath = value;

                    break;

                case "clientversion":
                    Settings.GlobalSettings.ClientVersion = value;

                    break;

                case "lastcharactername":
                case "lastcharname":
                    LastCharacterManager.OverrideLastCharacter(value);

                    break;

                case "lastservernum":
                    Settings.GlobalSettings.LastServerNum = ushort.Parse(value);

                    break;

                case "last_server_name":
                    Settings.GlobalSettings.LastServerName = value;
                    break;

                case "fps":
                    int v = int.Parse(value);

                    if (v < Constants.MIN_FPS)
                    {
                        v = Constants.MIN_FPS;
                    }
                    else if (v > Constants.MAX_FPS)
                    {
                        v = Constants.MAX_FPS;
                    }

                    Settings.GlobalSettings.FPS = v;

                    break;

                case "debug":
                    CUOEnviroment.Debug = true;

                    break;

                case "profiler":
                    CUOEnviroment.Profiler = bool.Parse(value);

                    break;

                case "saveaccount":
                    Settings.GlobalSettings.SaveAccount = bool.Parse(value);

                    break;

                case "autologin":
                    Settings.GlobalSettings.AutoLogin = bool.Parse(value);

                    break;

                case "reconnect":
                    Settings.GlobalSettings.Reconnect = bool.Parse(value);

                    break;

                case "reconnect_time":

                    if (!int.TryParse(value, out int reconnectTime) || reconnectTime < 1000)
                    {
                        reconnectTime = 1000;
                    }

                    Settings.GlobalSettings.ReconnectTime = reconnectTime;

                    break;

                case "login_music":
                case "music":
                    Settings.GlobalSettings.LoginMusic = bool.Parse(value);

                    break;

                case "login_music_volume":
                case "music_volume":
                    Settings.GlobalSettings.LoginMusicVolume = int.Parse(value);

                    break;

                // ======= [SHARD_TYPE_FIX] =======
                // TODO old. maintain it for retrocompatibility
                case "shard_type":
                case "shard":
                    Settings.GlobalSettings.ShardType = int.Parse(value);

                    break;
                // ================================

                case "outlands":
                    CUOEnviroment.IsOutlands = true;

                    break;

                case "fixed_time_step":
                    Settings.GlobalSettings.FixedTimeStep = bool.Parse(value);

                    break;

                case "skiploginscreen":
                    CUOEnviroment.SkipLoginScreen = true;

                    break;

                case "plugins":
                    Settings.GlobalSettings.Plugins = string.IsNullOrEmpty(value) ? new string[0] : value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                    break;

                case "use_verdata":
                    Settings.GlobalSettings.UseVerdata = bool.Parse(value);

                    break;

                case "maps_layouts":

                    Settings.GlobalSettings.MapsLayouts = value;

                    break;

                case "encryption":
                    Settings.GlobalSettings.Encryption = byte.Parse(value);

                    break;

                case "force_driver":
                    if (byte.TryParse(value, out byte res))
                    {
                        switch (res)
                        {
                        case 1:         // OpenGL
                            Settings.GlobalSettings.ForceDriver = 1;

                            break;

                        case 2:         // Vulkan
                            Settings.GlobalSettings.ForceDriver = 2;

                            break;

                        default:         // use default
                            Settings.GlobalSettings.ForceDriver = 0;

                            break;
                        }
                    }
                    else
                    {
                        Settings.GlobalSettings.ForceDriver = 0;
                    }

                    break;

                case "packetlog":

                    CUOEnviroment.PacketLog = true;

                    break;

                case "language":

                    switch (value?.ToUpperInvariant())
                    {
                    case "RUS": Settings.GlobalSettings.Language = "RUS"; break;

                    case "FRA": Settings.GlobalSettings.Language = "FRA"; break;

                    case "DEU": Settings.GlobalSettings.Language = "DEU"; break;

                    case "ESP": Settings.GlobalSettings.Language = "ESP"; break;

                    case "JPN": Settings.GlobalSettings.Language = "JPN"; break;

                    case "KOR": Settings.GlobalSettings.Language = "KOR"; break;

                    case "PTB": Settings.GlobalSettings.Language = "PTB"; break;

                    case "ITA": Settings.GlobalSettings.Language = "ITA"; break;

                    case "CHT": Settings.GlobalSettings.Language = "CHT"; break;

                    default:

                        Settings.GlobalSettings.Language = "ENU";
                        break;
                    }

                    break;

                case "no_server_ping":

                    CUOEnviroment.NoServerPing = true;

                    break;
                }
            }
        }
コード例 #5
0
        public CharacterSelectionGump() : base(0, 0)
        {
            CanCloseWithRightClick = false;

            int posInList  = 0;
            int yOffset    = 150;
            int yBonus     = 0;
            int listTitleY = 106;

            LoginScene loginScene = Client.Game.GetScene <LoginScene>();

            string lastCharName = LastCharacterManager.GetLastCharacter(LoginScene.Account, World.ServerName);
            string lastSelected = loginScene.Characters.FirstOrDefault(o => o == lastCharName);

            LockedFeatureFlags f  = World.ClientLockedFeatures.Flags;
            CharacterListFlags ff = World.ClientFeatures.Flags;

            if (Client.Version >= ClientVersion.CV_6040 || Client.Version >= ClientVersion.CV_5020 && loginScene.Characters.Length > 5)
            {
                listTitleY = 96;
                yOffset    = 125;
                yBonus     = 45;
            }

            if (!string.IsNullOrEmpty(lastSelected))
            {
                _selectedCharacter = (uint)Array.IndexOf(loginScene.Characters, lastSelected);
            }
            else if (loginScene.Characters.Length > 0)
            {
                _selectedCharacter = 0;
            }

            Add
            (
                new ResizePic(0x0A28)
            {
                X = 160, Y = 70, Width = 408, Height = 343 + yBonus
            },
                1
            );

            bool isAsianLang = string.Compare(Settings.GlobalSettings.Language, "CHT", StringComparison.InvariantCultureIgnoreCase) == 0 ||
                               string.Compare(Settings.GlobalSettings.Language, "KOR", StringComparison.InvariantCultureIgnoreCase) == 0 ||
                               string.Compare(Settings.GlobalSettings.Language, "JPN", StringComparison.InvariantCultureIgnoreCase) == 0;

            bool   unicode = isAsianLang;
            byte   font    = (byte)(isAsianLang ? 1 : 2);
            ushort hue     = (ushort)(isAsianLang ? 0xFFFF : 0x0386);

            Add
            (
                new Label(ClilocLoader.Instance.GetString(3000050, "Character Selection"), unicode, hue, font: font)
            {
                X = 267, Y = listTitleY
            },
                1
            );

            for (int i = 0, valid = 0; i < loginScene.Characters.Length; i++)
            {
                string character = loginScene.Characters[i];

                if (!string.IsNullOrEmpty(character))
                {
                    valid++;

                    if (valid > World.ClientFeatures.MaxChars)
                    {
                        break;
                    }

                    if (World.ClientLockedFeatures.Flags != 0 && !World.ClientLockedFeatures.CharSlots7)
                    {
                        if (valid == 6 && !World.ClientLockedFeatures.CharSlots6)
                        {
                            break;
                        }
                    }

                    Add
                    (
                        new CharacterEntryGump((uint)i, character, SelectCharacter, LoginCharacter)
                    {
                        X   = 224,
                        Y   = yOffset + posInList * 40,
                        Hue = i == _selectedCharacter ? SELECTED_COLOR : NORMAL_COLOR
                    },
                        1
                    );

                    posInList++;
                }
            }

            if (CanCreateChar(loginScene))
            {
                Add
                (
                    new Button((int)Buttons.New, 0x159D, 0x159F, 0x159E)
                {
                    X = 224, Y = 350 + yBonus, ButtonAction = ButtonAction.Activate
                },
                    1
                );
            }

            Add
            (
                new Button((int)Buttons.Delete, 0x159A, 0x159C, 0x159B)
            {
                X            = 442,
                Y            = 350 + yBonus,
                ButtonAction = ButtonAction.Activate
            },
                1
            );

            Add
            (
                new Button((int)Buttons.Prev, 0x15A1, 0x15A3, 0x15A2)
            {
                X = 586, Y = 445, ButtonAction = ButtonAction.Activate
            },
                1
            );

            Add
            (
                new Button((int)Buttons.Next, 0x15A4, 0x15A6, 0x15A5)
            {
                X = 610, Y = 445, ButtonAction = ButtonAction.Activate
            },
                1
            );

            AcceptKeyboardInput = true;
            ChangePage(1);
        }