Esempio n. 1
0
        /*********
        ** Public methods
        *********/
        /// <summary>The mod entry point, called after the mod is first loaded.</summary>
        /// <param name="helper">Provides simplified APIs for writing mods.</param>
        public override void Entry(IModHelper helper)
        {
            this.SprintBuff   = new Buff(0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, "Sprinting", "Sprinting");
            this.CooldownBuff = new Buff(0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, -2, 1, "Combat Dash Cooldown", "Combat Dash Cooldown");
            this.WindedBuff   = new Buff(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "Winded", "Winded");

            // read config
            this.Config       = helper.ReadConfig <SprintDashConfig>();
            this.StamCost     = Math.Max(1, this.Config.StamCost);
            this.DashDuration = Math.Max(1, Math.Min(10, this.Config.DashDuration)) * 1000; // 1-10 seconds
            this.DashCooldown = (int)(this.DashDuration * 2.5);
            this.WindedStep   = this.Config.WindedStep;
            if (this.WindedStep > 0)
            {
                this.EnableWindedness   = true;
                this.WindedCooldownStep = this.WindedStep * 200; //Recovering from winded-ness take 1/5 the time spent being winded.
                this.WindedStep        *= 1000;                  // convert config-based times to ms
            }
            this.EnableToggle = this.Config.ToggleMode;
            this.RunKey       = null;

            // hook events
            GameEvents.UpdateTick    += this.GameEvents_UpdateTick;
            ControlEvents.KeyPressed += this.ControlEvents_KeyPressed;

            // log info
            this.Monitor.Log($"Stamina cost: {this.StamCost}, dash duration: {this.DashDuration}, dash cooldown: {this.DashCooldown}, winded step: {this.WindedStep}, toggle mode: {this.EnableToggle}", LogLevel.Trace);
        }
        private void StartupTasks(object sender, SaveLoadedEventArgs e)
        {
            myPlayer = Game1.player;
            myConfig = myHelper.ReadConfig <SprintDashConfig>();

            SprintButton = myConfig.SprintKey;
            DashButton   = myConfig.DashKey;

            StamCost     = Math.Max(1, myConfig.StamCost);
            DashDuration = Math.Min(10, myConfig.DashDuration) * 1000; // 1-10 seconds, < 0  turns off at later step.
            DashCooldown = (int)(DashDuration * 2.5);
            WindedStep   = Math.Max(0, myConfig.WindedStep);
            if (WindedStep > 0)
            {
                EnableWindedness   = true;
                WindedCooldownStep = WindedStep * 200; //Recovering from winded-ness take 1/5 the time spent being winded.
                WindedStep        *= 1000;             // convert config-based times to ms
            }
            MinStaminaToRefresh = Math.Max(0, Math.Min(0.99f, myConfig.QuitSprintingAt)) * myPlayer.maxStamina;
            EnableToggle        = myConfig.ToggleMode;

            //60 tick/sec, interval in 0-1 seconds acts as multiplier.
            IntervalTicks = Math.Max(1, Math.Min(60, (uint)(myConfig.TimeInterval * 60.0)));
            //Want a timeout that is slightly more than the interval. (1 itck is ~16.666.. ms)
            TimeoutCheck = 5 + Math.Max(17, Math.Min(1000, (int)(myConfig.TimeInterval * 1000)));

            Verbose = myConfig.VerboseMode;

            //This is complicated and necessary because SDV stores the run button as an array of buttons. Theoretically we may have more than one.
            if (RunKey == null)
            {
                RunKey = new Keys[Game1.options.runButton.Length];

                int i = 0;

                foreach (InputButton button in Game1.options.runButton)
                {
                    RunKey[i] = button.key;
                    i++;
                }
            }

            SaveHasLoaded = true;

            BasicConfigReport("Startup Tasks");
        }
        private void TryLoadingGMCM()
        {
            //See if we can find GMCM, quit if not.
            var api = Helper.ModRegistry.GetApi <GenericModConfigMenu.GenericModConfigMenuAPI>("spacechase0.GenericModConfigMenu");

            if (api == null)
            {
                Monitor.Log("Unable to load GMCM API.", LogLevel.Info);
                return;
            }

            api.RegisterModConfig(ModManifest, () => myConfig = new SprintDashConfig(), () => Helper.WriteConfig(myConfig));
            api.RegisterSimpleOption(ModManifest, "Sprint Button", "Set the button to use to sprint.", () => myConfig.SprintKey, (SButton val) => myConfig.SprintKey = val);
            api.RegisterSimpleOption(ModManifest, "Dash Button", "Set the button to use to dash.", () => myConfig.DashKey, (SButton val) => myConfig.DashKey         = val);
            api.RegisterClampedOption(ModManifest, "Stamina Cost", "Cost per second of sprinting. Use config file to enter values greater than 10.", () => myConfig.StamCost, (float val) => myConfig.StamCost = val, 1, 10);
            api.RegisterClampedOption(ModManifest, "Dash Duration", "How long the dash buff will last. Note that there is a cooldown/vulnerable phase 2.5x as long. Set to 0 to disable this feature.", () => myConfig.DashDuration, (int val) => myConfig.DashDuration = val, 0, 10);
            api.RegisterClampedOption(ModManifest, "Winded Step", "Values above 0 activate the 'winded' system, see reademe.txt for details. Use config file to enter values greater than 30.", () => myConfig.WindedStep, (int val) => myConfig.WindedStep             = val, 0, 30);
            api.RegisterClampedOption(ModManifest, "Sprint Requirement", "Stamina must be at least this percent of max stamina to run.", () => (int)(myConfig.QuitSprintingAt * 100), (int val) => myConfig.QuitSprintingAt = (float)val / 100, 0, 99);
            api.RegisterSimpleOption(ModManifest, "Toggle Mode", "This turns the sprint key into a toggle, such then you start sprinting when you press it and stop when you press it again.", () => myConfig.ToggleMode, (bool val) => myConfig.ToggleMode = val);
        }
 private void OnGameLaunched(object sender, GameLaunchedEventArgs e)
 {
     myConfig = myHelper.ReadConfig <SprintDashConfig>();
     TryLoadingGMCM();
     BasicConfigReport("On Game Launched Event");
 }