mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-27 20:32:21 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user