/// <summary> /// 获取编号记录 /// </summary> /// <param name="typeName"></param> /// <param name="opt"></param> /// <returns></returns> private async Task <NumberRecord> GetNumberRecordAsync(string typeName, NumberOption opt) { if (!recordDic.TryGetValue(typeName, out var record)) { var recordQuery = numberRecords.Where(v => v.BeModule == typeName); var dt = DateTime.Now; var year = dt.Year; var month = dt.Month; var day = dt.Day; record = await recordQuery.Where(v => v.Year == year && v.Month == month && v.Day == day).FirstOrDefaultAsync(); if (record == null) { record = await numberRecords.AddAsync(new NumberRecord { Year = year, Day = day, BeModule = typeName, Id = null, Month = month, Serial = 0, PrevSerial = 0 }); } if (opt.TaskDate) { switch (opt.FmtDate) { case FmtDateEnum.yyyy: case FmtDateEnum.yy: record.PrevSerial = await recordQuery.Where(v => v.Year == year && v.Id != record.Id).SumAsync(v => v.Serial); break; case FmtDateEnum.yyyyMM: case FmtDateEnum.yyMM: record.PrevSerial = await recordQuery.Where(v => v.Year == year && v.Id != record.Id && v.Month == month).SumAsync(v => v.Serial); break; case FmtDateEnum.yyyyMMdd: case FmtDateEnum.yyMMdd: break; default: break; } } else { record.PrevSerial = await recordQuery.Where(v => v.Id != record.Id).SumAsync(v => v.Serial); } recordDic.Add(typeName, record); } return(record); }
public IPluginOptionViewModel Construct(IOption option) { if (option is IListOption) { var optionType = option.GetType().FindBaseType(typeof(ListOption <>)); if (optionType != null) { var tValue = optionType.GetGenericArguments().First(); var generic = _constructListOptionMethodInfo.MakeGenericMethod(tValue); var opt = generic.Invoke(this, new object?[] { option }); if (opt != null) { return((IPluginOptionViewModel)opt); } } } return(option switch { BooleanOption bOption => new PluginBooleanOptionViewModel(bOption, _localizationProvider), NumberOption nOption => new PluginNumberOptionViewModel(nOption, _localizationProvider), TextOption tOption => new PluginTextOptionViewModel(tOption, _localizationProvider), CommandOption cOption => new PluginCommandOptionViewModel(cOption, _localizationProvider), EncryptedTextOption eOption => new PluginEncryptedTextOptionViewModel(eOption, _localizationProvider), StringCollectionOption sOption => new PluginStringCollectionOptionViewModel(sOption, _localizationProvider), DisplayOption dOption => new PluginDisplayOptionViewModel(dOption, _localizationProvider), _ => ConstructDisplayOption(option) });
/// <summary> /// 生成编号 /// </summary> /// <param name="entitys"></param> /// <returns></returns> public async Task MakeNumberAsync(params IHaveNumber[] entitys) { if (entitys.Length == 0) { return; } var typeName = entitys[0].GetType().Name; NumberOption opt = await GetNumberOptionAsync(typeName); NumberRecord record = await GetNumberRecordAsync(typeName, opt); foreach (var item in entitys) { /*自增序列号*/ record.Serial++; DateTime?dt = DateTime.Now; string dtTemp = "", serial = (record.Serial + record.PrevSerial).ToString().PadLeft(opt.SerialLength, '0'); /*取日期字段格式化*/ if (opt.TaskDate) { if (!opt.DateField.IsNullOrWhiteSpace()) { dt = (DateTime?)item.GetValue(opt.DateField); } dt ??= DateTime.Now; dtTemp = dt.Value.ToString(opt.FmtDate.ToString()); } item.Number = $"{opt.Prefix}{dtTemp}{serial}{opt.Suffix}"; } }
public override void OnEnable(ref NumberOption __instance, Action <OptionBehaviour> callback) { __instance.TitleText.Text = optionTitle; __instance.OnValueChanged = new Action <OptionBehaviour>(callback); __instance.Value = value; __instance.enabled = true; }
/// <summary> /// Add a Integer parameter command line option. /// </summary> public NumberOption AddIntParameter(string name, string description, bool required) { NumberOption opt = new NumberOption(name, description, typeof(int), true, required); opt.NumberStyle = NumberStyles.Integer; AddOption(opt); return(opt); }
/// <summary> /// Add a Double parameter command line option. /// </summary> public NumberOption AddDoubleParameter(string name, string description, bool required) { NumberOption opt = new NumberOption(name, description, typeof(double), true, required); opt.NumberStyle = NumberStyles.Float; AddOption(opt); return(opt); }
/// <summary> /// Add a Double parameter command line option. /// </summary> public NumberOption AddDoubleParameter(string name, string description, bool required, NumberFormatInfo numberformat) { NumberOption opt = new NumberOption(name, description, typeof(double), true, required); opt.NumberFormat = numberformat; opt.parseDecimalSeperator = false; opt.NumberStyle = NumberStyles.Float | NumberStyles.AllowThousands; AddOption(opt); return(opt); }
public static void Postfix(ref NumberOption __instance) { foreach (CustomNumberOption custom in numOpts) { if (__instance.Title == custom.numOptionTitle) { __instance.ValueText.text = custom.value.ToString() + $"{(custom.suffix.ToString() != " " ? custom.suffix.ToString() : "")}"; //Rpc<SendOpt>.Instance.Send((false, custom.value, false, custom.optTitleInt)); } } }
public static bool Prefix(NumberOption __instance) { CustomOption option = CustomOption.AllOptions.FirstOrDefault(option => option.Setting == __instance); // Works but may need to change to gameObject.name check if (option is CustomNumberOption number) { number.Decrease(); return(false); } return(true); }
static bool Prefix(ref NumberOption __instance) { foreach (var opt in options) { if (__instance.Title == opt.optionTitleName) { opt.OnEnable(ref __instance, GameOptionsMenu_Start.OnValueChanged); return(false); } } return(true); }
public static bool Prefix1(NumberOption __instance) { if (__instance.TitleText.text == "Sheriff Kill Cooldown") { CustomGameOptions.SheriffKillCD = Math.Min(CustomGameOptions.SheriffKillCD + 2.5f, 40); PlayerControl.LocalPlayer.RpcSyncSettings(PlayerControl.GameOptions); GameOptionMenuPatch.SheriffCooldown.LCDAKOCANPH = CustomGameOptions.SheriffKillCD; GameOptionMenuPatch.SheriffCooldown.Value = CustomGameOptions.SheriffKillCD; GameOptionMenuPatch.SheriffCooldown.ValueText.text = CustomGameOptions.SheriffKillCD.ToString(); return(false); } return(true); }
public static string GenerateRandomText(int wordCount, CaseOption caseOption, NumberOption numberOption) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < wordCount; i++) { string thisWord = GetRandomWord(caseOption, numberOption); builder.Append(thisWord); builder.Append(GetPunctuation()); } return(builder.ToString()); }
public static bool Prefix(NumberOption __instance) { CustomOption option = Options.FirstOrDefault(option => option.GameSetting == __instance); // Works but may need to change to gameObject.name check if (option is CustomNumberOption number) { number.Decrease(); //EssentialsPlugin.Logger.LogInfo($"Option \"{number.Name}\" was {number.GetOldValue()} now {number.GetValue()}"); return(false); } return(true); }
public void SettingValueShouldClampValuesBetweenMinAndMax(int value, int min, int max, int expected) { // Arrange var sut = new NumberOption(0, string.Empty, string.Empty) { MinValue = min, MaxValue = max }; // Act sut.Value = value; // Assert Assert.Equal(expected, sut.Value); }
public static bool Prefix2(NumberOption __instance) { if (__instance.TitleText.Text == "Sheriff Kill Cooldown") { CustomGameOptions.SheriffKillCD = Math.Max(CustomGameOptions.SheriffKillCD - 2.5f, 10); PlayerControl.LocalPlayer.RpcSyncSettings(PlayerControl.GameOptions); GameOptionMenuPatch.SheriffCooldown.IOFLMCGMJBA = CustomGameOptions.SheriffKillCD; GameOptionMenuPatch.SheriffCooldown.Value = CustomGameOptions.SheriffKillCD; GameOptionMenuPatch.SheriffCooldown.ValueText.Text = CustomGameOptions.SheriffKillCD.ToString(); return(false); } return(true); }
private static string GetRandomWord(CaseOption caseOption, NumberOption numberOption) { string word = _WordList[random.Next(0, _WordList.Count)]; switch (numberOption) { case NumberOption.AllNumbers: word = ReplaceAllWithNumbers(word); break; case NumberOption.NumbersAsWords: int threshold = random.Next(1, 50); int probability = random.Next(1, 100); if (probability < threshold) { word = ReplaceAllWithNumbers(word); } break; case NumberOption.NumbersInWords: word = ReplaceSomeWithNumbers(word); break; } switch (caseOption) { case CaseOption.AllCaps: word = word.ToUpper(); break; case CaseOption.LowerCase: word = word.ToLower(); break; case CaseOption.TitleCase: TextInfo ti = new CultureInfo("en-US", false).TextInfo; word = ti.ToTitleCase(word); break; case CaseOption.RandomCase: word = RandomCase(word); break; } return(word); }
static bool Prefix(ref NumberOption __instance) { foreach (CustomNumberOption custom in numOpts) { if (__instance.Title == custom.numOptionTitle) { string title = ""; customTranslationController.Prefix(__instance.Title, ref title); __instance.TitleText.text = title; __instance.OnValueChanged = new Action <OptionBehaviour>(optionsMenuStartPatch.OnValueChanged); __instance.Value = custom.value; __instance.enabled = true; return(false); } } return(true); }
private void Reload() { CaseOption caseOption = CaseOption.LowerCase; if (UpperCaseChecked) { caseOption = CaseOption.AllCaps; } if (LowerCaseChecked) { caseOption = CaseOption.LowerCase; } if (TitleCaseChecked) { caseOption = CaseOption.TitleCase; } if (RandomCaseChecked) { caseOption = CaseOption.RandomCase; } NumberOption numberOption = NumberOption.NumbersAsWords; if (AllNumbersChecked) { numberOption = NumberOption.AllNumbers; } if (NoNumbersChecked) { numberOption = NumberOption.NoNumbers; } if (NumbersInsideChecked) { numberOption = NumberOption.NumbersInWords; } if (NumbersReplaceChecked) { numberOption = NumberOption.NumbersAsWords; } RandomText = RandomWordGenerator.GenerateRandomText (WordCount, caseOption, numberOption); }
/// <summary> /// 获取编码设置 /// </summary> /// <param name="typeName"></param> /// <returns></returns> private async Task <NumberOption> GetNumberOptionAsync(string typeName) { var opt = await numberOptions.Where(v => v.BeModule == typeName).FirstOrDefaultAsync(); if (opt == null) { opt = new NumberOption { BeModule = typeName, DateField = null, DateFieldText = null, FmtDate = FmtDateEnum.yyyyMMdd, Prefix = null, Suffix = null, SerialLength = 3, TaskDate = true }; } return(opt); }
public static void Postfix(ref GameOptionsMenu __instance) { float lowestY = __instance.GetComponentsInChildren <OptionBehaviour>().Min(o => o.transform.position.y) - 0.2f; ToggleOption togglePrefab = __instance.Children.Where(o => o.TryCast <ToggleOption>() != null).First(o => o.Title != StringNames.GameRecommendedSettings).Cast <ToggleOption>(); // GameRecommendedSettings has a specific design NumberOption numberPrefab = __instance.GetComponentInChildren <NumberOption>(); StringOption stringPrefab = __instance.GetComponentInChildren <StringOption>(); byte optionsAdded = 0; foreach (var baseOption in OptionsManager.LimitOptions.Values .Concat(OptionsManager.CustomOptions.SelectMany(p => p.Value)) ) { var option = Object.Instantiate <OptionBehaviour>( baseOption switch { CustomToggleOption => togglePrefab, CustomNumberOption => numberPrefab, CustomStringOption => stringPrefab, _ => throw new InvalidCastException($"{nameof(baseOption)} was unknown type") },
static bool Prefix(ref NumberOption __instance) { if (__instance.Title == maxPlayerAdminTitle) { string smh = ""; TranslationController_GetString.Prefix(__instance.Title, ref smh); __instance.TitleText.Text = smh; __instance.OnValueChanged = new Action <OptionBehaviour>(GameOptionsMenu_Start.OnValueChanged); __instance.Value = maxPlayerAdmin; __instance.enabled = true; return(false); } if (__instance.Title == maxPlayerCamsTitle) { string smh = ""; TranslationController_GetString.Prefix(__instance.Title, ref smh); __instance.TitleText.Text = smh; __instance.OnValueChanged = new Action <OptionBehaviour>(GameOptionsMenu_Start.OnValueChanged); __instance.Value = maxPlayerCams; __instance.enabled = true; return(false); } if (__instance.Title == maxPlayerVitalsTitle) { string smh = ""; TranslationController_GetString.Prefix(__instance.Title, ref smh); __instance.TitleText.Text = smh; __instance.OnValueChanged = new Action <OptionBehaviour>(GameOptionsMenu_Start.OnValueChanged); __instance.Value = maxPlayerVitals; __instance.enabled = true; return(false); } return(true); }
public SearchRange(uint @from, uint to, uint step = 1, NumberOption numberOption = NumberOption.Normal) : this() { Preconditions.CheckSpecialPreconditions(@from, to, step); var maxLength = to.ToString(CultureInfo.InvariantCulture).Length; for (var i = @from; i <= to; i += step) { var tempNumber = i.ToString(CultureInfo.InvariantCulture); switch (numberOption) { case NumberOption.Normal: Items.Add(tempNumber); break; case NumberOption.WithZeros: Items.Add(CreateZeros(tempNumber.Length, maxLength) + tempNumber); break; } } }
public static void Postfix(ref NumberOption __instance) { foreach (CustomNumberOption custom in numOpts) { if (__instance.Title == custom.numOptionTitle) { custom.value -= custom.incrementValue; if (custom.value > custom.maxValue) { custom.value = custom.maxValue; } if (custom.value < custom.minValue) { custom.value = custom.minValue; } __instance.Value = custom.value; if (AmongUsClient.Instance.AmHost) { Rpc <SendOpt> .Instance.Send((true, custom.value, false, custom.optTitleInt)); } } } }
public static bool Prefix2(NumberOption __instance) { if (__instance.TitleText.text == "Morph Duration") { CustomGameOptions.MorphDuration = Math.Max(CustomGameOptions.MorphDuration - 2.5f, 10.0f); PlayerControl.LocalPlayer.RpcSyncSettings(PlayerControl.GameOptions); GameOptionMenuPatch.MorphDuration.LCDAKOCANPH = CustomGameOptions.MorphDuration; GameOptionMenuPatch.MorphDuration.Value = CustomGameOptions.MorphDuration; GameOptionMenuPatch.MorphDuration.ValueText.text = CustomGameOptions.MorphDuration.ToString(); return(false); } else if (__instance.TitleText.text == "Morph Cooldown") { CustomGameOptions.MorphCooldown = Math.Max(CustomGameOptions.MorphCooldown - 2.5f, 10.0f); PlayerControl.LocalPlayer.RpcSyncSettings(PlayerControl.GameOptions); GameOptionMenuPatch.MorphCooldown.LCDAKOCANPH = CustomGameOptions.MorphCooldown; GameOptionMenuPatch.MorphCooldown.Value = CustomGameOptions.MorphCooldown; GameOptionMenuPatch.MorphCooldown.ValueText.text = CustomGameOptions.MorphCooldown.ToString(); return(false); } return(true); }
private static bool Prefix(NumberOption __instance) { return(OnEnable(__instance)); }
private static List <OptionBehaviour> GetGameOptions(float lowestY) { List <OptionBehaviour> options = new List <OptionBehaviour>(); /*EssentialsPlugin.Logger.LogInfo($"toggles {Object.FindObjectsOfType<ToggleOption>().Count}"); * EssentialsPlugin.Logger.LogInfo($"numbers {Object.FindObjectsOfType<NumberOption>().Count}"); * EssentialsPlugin.Logger.LogInfo($"strings {Object.FindObjectsOfType<StringOption>().Count}"); * EssentialsPlugin.Logger.LogInfo($"keyvalues {Object.FindObjectsOfType<KeyValueOption>().Count}");*/ ToggleOption toggleOption = Object.FindObjectsOfType <ToggleOption>().FirstOrDefault(); NumberOption numberOption = Object.FindObjectsOfType <NumberOption>().FirstOrDefault(); StringOption stringOption = Object.FindObjectsOfType <StringOption>().FirstOrDefault(); //KeyValueOption kvOption = Object.FindObjectsOfType<KeyValueOption>().FirstOrDefault(); int i = 0; foreach (CustomOption option in Options) { if (option.GameSetting != null) { option.GameSetting.gameObject.SetActive(option.MenuVisible); options.Add(option.GameSetting); continue; } if (option.Type == CustomOptionType.Toggle && AmongUsClient.Instance?.AmHost == true) { if (toggleOption == null) { continue; } ToggleOption toggle = Object.Instantiate(toggleOption, toggleOption.transform.parent);//.DontDestroy(); if (!option.OnGameOptionCreated(toggle)) { toggle.Destroy(); continue; } options.Add(toggle); if (Debug) { EssentialsPlugin.Logger.LogInfo($"Option \"{option.Name}\" was created"); } } else if (option.Type == CustomOptionType.Number) { if (numberOption == null) { continue; } NumberOption number = Object.Instantiate(numberOption, numberOption.transform.parent);//.DontDestroy(); if (!option.OnGameOptionCreated(number)) { number.Destroy(); continue; } options.Add(number); if (Debug) { EssentialsPlugin.Logger.LogInfo($"Option \"{option.Name}\" was created"); } } else if (option.Type == CustomOptionType.String || option.Type == CustomOptionType.Toggle && AmongUsClient.Instance?.AmHost != true) { //if (option is IKeyValueOption) //{ // //if (kvOption == null) continue; // Transform parent = kvOption?.transform?.parent ?? toggleOption?.transform?.parent ?? numberOption?.transform?.parent ?? stringOption?.transform?.parent; // if (parent == null) continue; // KeyValueOption kv = kvOption == null ? new KeyValueOption().DontDestroy() : Object.Instantiate(kvOption); // if (kv == null) continue; // kv.transform.SetParent(/*kvOption.transform.*/parent); // option.OnGameOptionCreated(kv); // options.Add(kv); // if (Debug)EssentialsPlugin.Logger.LogInfo($"Option \"{option.Name}\" was created"); //} if (stringOption == null) { continue; } StringOption str = Object.Instantiate(stringOption, stringOption.transform.parent);//.DontDestroy(); if (!option.OnGameOptionCreated(str)) { str.Destroy(); continue; } options.Add(str); if (Debug) { EssentialsPlugin.Logger.LogInfo($"Option \"{option.Name}\" was created"); } } if (!option.GameSetting) { continue; } if (option.MenuVisible) { option.GameSetting.transform.localPosition = new Vector3(option.GameSetting.transform.localPosition.x, lowestY - ++i * 0.5F, option.GameSetting.transform.localPosition.z); } option.GameSetting.gameObject.SetActive(option.MenuVisible); } return(options); }
/// <summary> /// Add a Double parameter command line option. /// </summary> public NumberOption AddDoubleParameter(string name, string description, bool required, NumberFormatInfo numberformat ) { NumberOption opt = new NumberOption(name, description, typeof(double), true, required); opt.NumberFormat = numberformat; opt.parseDecimalSeperator = false; opt.NumberStyle = NumberStyles.Float | NumberStyles.AllowThousands; AddOption(opt); return (opt); }
public virtual void OnEnable(ref NumberOption __instance, Action <OptionBehaviour> callback) { }
public SearchRange(uint to, NumberOption numberOption = NumberOption.Normal) : this(0, to, 1, numberOption) { }
/// <summary> /// Add a Double parameter command line option. /// </summary> public NumberOption AddDoubleParameter(string name, string description,bool required) { NumberOption opt = new NumberOption(name, description, typeof(double), true, required); opt.NumberStyle = NumberStyles.Float; AddOption(opt); return (opt); }
public PluginNumberOptionViewModel(NumberOption option, ILocalizationProvider localizationProvider) : base(option.Value, option.MinValue, option.MaxValue, option.NameTextId) { _pluginOptionViewModelImplementation = new PluginOptionViewModelImplementation <int>(option, localizationProvider, this); }
/// <summary> /// Add a Integer parameter command line option. /// </summary> public NumberOption AddIntParameter(string name, string description, bool required) { NumberOption opt = new NumberOption(name, description, typeof(int), true, required); opt.NumberStyle = NumberStyles.Integer; AddOption(opt); return (opt); }
public static void Postfix(NumberOption __instance) { __instance.Value = (float)Math.Round(__instance.Value, 2); }