Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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)
            });
Beispiel #3
0
        /// <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;
 }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        /// <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);
        }
Beispiel #8
0
 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));
         }
     }
 }
Beispiel #9
0
            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);
        }
Beispiel #15
0
        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);
        }
Beispiel #17
0
            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);
            }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        /// <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);
        }
Beispiel #20
0
            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);
            }
Beispiel #22
0
        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;
                }
            }
        }
Beispiel #23
0
 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));
 }
Beispiel #26
0
        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);
        }
Beispiel #27
0
 /// <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)
 {
 }
Beispiel #29
0
 public SearchRange(uint to, NumberOption numberOption = NumberOption.Normal)
     : this(0, to, 1, numberOption)
 {
 }
Beispiel #30
0
 /// <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);
 }
Beispiel #31
0
 public PluginNumberOptionViewModel(NumberOption option, ILocalizationProvider localizationProvider)
     : base(option.Value, option.MinValue, option.MaxValue, option.NameTextId)
 {
     _pluginOptionViewModelImplementation = new PluginOptionViewModelImplementation <int>(option, localizationProvider, this);
 }
Beispiel #32
0
 /// <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);
 }
Beispiel #33
0
 public static void Postfix(NumberOption __instance)
 {
     __instance.Value = (float)Math.Round(__instance.Value, 2);
 }