Core/Misc: Added float chrono typedefs

(cherry picked from commit cb4013efe6)

# Conflicts:
#	src/server/scripts/Spells/spell_dh.cpp
#	src/server/scripts/Spells/spell_evoker.cpp
This commit is contained in:
Shauren
2025-01-19 18:29:38 +01:00
committed by Ovahlord
parent e122b1b67f
commit 54d6486034
2 changed files with 15 additions and 13 deletions

View File

@@ -15,22 +15,26 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _DURATION_H_
#define _DURATION_H_
#ifndef TRINITYCORE_DURATION_H
#define TRINITYCORE_DURATION_H
#include <chrono>
/// Milliseconds shorthand typedef.
typedef std::chrono::milliseconds Milliseconds;
using Milliseconds = std::chrono::milliseconds;
using FloatMilliseconds = std::chrono::duration<float, Milliseconds::period>;
/// Seconds shorthand typedef.
typedef std::chrono::seconds Seconds;
using Seconds = std::chrono::seconds;
using FloatSeconds = std::chrono::duration<float, Seconds::period>;
/// Minutes shorthand typedef.
typedef std::chrono::minutes Minutes;
using Minutes = std::chrono::minutes;
using FloatMinutes = std::chrono::duration<float, Minutes::period>;
/// Hours shorthand typedef.
typedef std::chrono::hours Hours;
using Hours = std::chrono::hours;
using FloatHours = std::chrono::duration<float, Hours::period>;
/// time_point shorthand typedefs
typedef std::chrono::steady_clock::time_point TimePoint;
@@ -39,9 +43,9 @@ typedef std::chrono::system_clock::time_point SystemTimePoint;
/// Makes std::chrono_literals globally available.
using namespace std::chrono_literals;
constexpr std::chrono::hours operator""_days(unsigned long long days)
constexpr std::chrono::days operator""_days(unsigned long long days)
{
return std::chrono::hours(days * 24h);
return std::chrono::days(days);
}
#endif // _DURATION_H_
#endif // TRINITYCORE_DURATION_H

View File

@@ -2013,15 +2013,13 @@ void Aura::TriggerProcOnEvent(uint32 procEffectMask, AuraApplication* aurApp, Pr
float Aura::CalcPPMProcChance(Unit* actor) const
{
using FSeconds = std::chrono::duration<float, Seconds::period>;
// Formula see http://us.battle.net/wow/en/forum/topic/8197741003#1
float ppm = m_spellInfo->CalcProcPPM(actor, GetCastItemLevel());
float averageProcInterval = 60.0f / ppm;
TimePoint currentTime = GameTime::Now();
float secondsSinceLastAttempt = std::min(std::chrono::duration_cast<FSeconds>(currentTime - m_lastProcAttemptTime).count(), 10.0f);
float secondsSinceLastProc = std::min(std::chrono::duration_cast<FSeconds>(currentTime - m_lastProcSuccessTime).count(), 1000.0f);
float secondsSinceLastAttempt = std::min(duration_cast<FloatSeconds>(currentTime - m_lastProcAttemptTime).count(), 10.0f);
float secondsSinceLastProc = std::min(duration_cast<FloatSeconds>(currentTime - m_lastProcSuccessTime).count(), 1000.0f);
float chance = std::max(1.0f, 1.0f + ((secondsSinceLastProc / averageProcInterval - 1.5f) * 3.0f)) * ppm * secondsSinceLastAttempt / 60.0f;
RoundToInterval(chance, 0.0f, 1.0f);