コード例 #1
0
 /// <summary>
 /// Tracks internal special coodowns and handles switching back of weapons.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void OnUpdateTicked(object sender, UpdateTickedEventArgs e)
 {
     if (Game1.shouldTimePass())
     {
         if (cachedCooldown > 0)
         {
             cachedCooldown -= (1000 / 60);
         }
         if (defenseCooldown > 0)
         {
             defenseCooldown -= (1000 / 60);
         }
         if (slowCooldown)
         {
             if (MeleeWeapon.defenseCooldown > 0)
             {
                 MeleeWeapon.defenseCooldown = (int)(defenseCooldown * cooldownRatio);
             }
             else
             {
                 slowCooldown = false;
             }
         }
         //if (e.IsMultipleOf(10))
         //    Monitor.Log($"dagCD: {MeleeWeapon.daggerCooldown} ({cachedCooldown}): defCD: {MeleeWeapon.defenseCooldown} ({defenseCooldown})", LogLevel.Debug);
     }
     if (cachedWeapon != null && Game1.player.CurrentTool == stabWeapon)
     {
         if (!stabWeapon.isOnSpecial)
         {
             MeleeWeapon.daggerCooldown = (int)cachedCooldown;
             if (!firstTickMeansSpecialFailed)
             {
                 MeleeWeapon.defenseCooldown = (int)(defenseCooldown * cooldownRatio);
                 slowCooldown = true;
             }
             Monitor.Log($"Weapon swapped back: special execution = {slowCooldown}", LogLevel.Trace);
             Game1.player.removeItemFromInventory(replacementIndex);
             Game1.player.addItemToInventory(cachedWeapon, replacementIndex);
             cachedWeapon = null;
             stabWeapon   = null;
         }
         firstTickMeansSpecialFailed = false;
     }
 }
コード例 #2
0
 /*********
 ** Private methods
 *********/
 /// <summary>Raised after the player presses a button on the keyboard, controller, or mouse.</summary>
 /// <param name="sender">The event sender.</param>
 /// <param name="e">The event data.</param>
 private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
 {
     if (Context.IsWorldReady &&
         Game1.currentLocation != null &&
         e.Button.IsActionButton() &&
         Game1.activeClickableMenu == null &&
         Game1.player.CurrentTool != null &&
         Game1.player.CurrentTool.GetType().Equals(typeof(MeleeWeapon)) &&
         Game1.player.CanMove
         )
     {
         MeleeWeapon activeWeapon = (MeleeWeapon)Game1.player.CurrentTool;
         if (Helper.Reflection.GetMethod(activeWeapon, "specialCooldown").Invoke <int>() <= 0 && !activeWeapon.isScythe() && activeWeapon.type == 3 || activeWeapon.type == 0)
         {
             Monitor.Log($"Intercepting special move!", LogLevel.Trace);
             if (Config.FaceCursorForSpecial)
             {
                 Game1.player.faceGeneralDirection(e.Cursor.AbsolutePixels);
             }
             cachedWeapon = activeWeapon;
             if (MeleeWeapon.daggerCooldown > 0)
             {
                 cachedCooldown = MeleeWeapon.daggerCooldown;
             }
             MeleeWeapon.daggerCooldown = 0;
             defenseCooldown            = Config.BaseCooldownOfSpecial * 1000;
             if (Game1.player.professions.Contains(28))
             {
                 defenseCooldown /= 2;
             }
             if (cachedWeapon.hasEnchantmentOfType <ArtfulEnchantment>())
             {
                 defenseCooldown /= 2;
             }
             stabWeapon       = new StabbingSwordWeapon(activeWeapon, Config.FlurryDamageMult);
             replacementIndex = Game1.player.CurrentToolIndex;
             Game1.player.removeItemFromInventory(replacementIndex);
             Game1.player.addItemToInventory(stabWeapon, replacementIndex);
             firstTickMeansSpecialFailed = true;
             Monitor.Log($"Replaced MeleeWeapon with StabbingSwordWeapon", LogLevel.Trace);
         }
     }
 }