예제 #1
0
    private static float CalculateNewStamina(Player __instance, bool ___m_wallRunning, float ___m_staminaRegen, float ___m_stamina, SEMan ___m_seman, ref float ___m_staminaRegenTimer, float dt)
    {
        float num1 = 1f;

        if (__instance.IsBlocking())
        {
            num1 *= 0.8f;
        }
        if (((__instance.IsSwiming() && !__instance.IsOnGround() || (__instance.InAttack() || __instance.InDodge()) ? 1 : (___m_wallRunning ? 1 : 0)) | (__instance.IsEncumbered() ? 1 : 0)) != 0)
        {
            num1 = 0.0f;
        }

        float maxStamina        = __instance.GetMaxStamina();
        float missingStaminaMod = (float)(1.0 - (double)___m_stamina / (double)maxStamina);
        float num2 = (___m_staminaRegen + missingStaminaMod * ___m_staminaRegen * __instance.m_staminaRegenTimeMultiplier) * num1;
        float staminaMultiplier = 1f;

        ___m_seman.ModifyStaminaRegen(ref staminaMultiplier);
        float num3 = num2 * staminaMultiplier;

        ___m_staminaRegenTimer -= dt;

        float returnStamina = ___m_stamina;

        if ((double)___m_stamina < (double)maxStamina && (double)___m_staminaRegenTimer <= 0.0)
        {
            returnStamina = Mathf.Min(maxStamina, ___m_stamina + num3 * dt);
        }

        float staminaChange = returnStamina - ___m_stamina;

        if (Mathf.Abs(staminaChange) > 0f)
        {
            BetterStaminaPlugin.DebugLog($"StaminaChangeThisFrame: {num3}(dt-{staminaChange}), base regen - {___m_staminaRegen}; activity mult - {num1}; base mult - {__instance.m_staminaRegenTimeMultiplier}; missing mult - {missingStaminaMod}; SE mult - {staminaMultiplier}");
        }

        return(returnStamina);
    }