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); } }
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(); } }
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; }
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; } } }
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); }