eluna-scripts-ornfelt/lua/WowEmulationScriptPack/patch/Haste-cap-patch-applied.patch
2024-09-23 07:59:23 +02:00

118 lines
4.3 KiB
Diff

From 2c0d7f91953d8268b1baceea39bad84213de8414 Mon Sep 17 00:00:00 2001
From: AwkwardDev <awkwarddev@gmail.bg>
Date: Mon, 3 Sep 2012 00:23:13 +0300
Subject: Haste cap patch applied.
---
src/server/game/Entities/Player/Player.cpp | 46 ++++++++++++++++++++++++++
src/server/game/World/World.cpp | 3 ++
src/server/game/World/World.h | 1 +
src/server/worldserver/worldserver.conf.dist | 9 +++++
4 files changed, 59 insertions(+)
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 65f6588..827bb7b 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -5940,6 +5940,52 @@ void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply)
UpdateRating(cr);
}
+void Player::UpdateInstantHasteCap()
+{
+ if (sWorld->getIntConfig(CONFIG_PLAYER_HASTE_CAP) == -1)
+ {
+ return;
+ }
+
+ bool hasInstantHasteCap = (GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 0) == 1
+ || GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 1) == 1
+ || GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 2) == 1
+ || GetFloatValue(UNIT_MOD_CAST_SPEED) == 0);
+
+ if (m_baseRatingValue[CR_HASTE_MELEE] >= sWorld->getIntConfig(CONFIG_PLAYER_HASTE_CAP))
+ {
+ SetFloatValue(UNIT_MOD_CAST_SPEED, 0);
+ SetFloatValue(UNIT_FIELD_BASEATTACKTIME + BASE_ATTACK, 1);
+ SetFloatValue(UNIT_FIELD_BASEATTACKTIME + OFF_ATTACK, 1);
+ SetFloatValue(UNIT_FIELD_BASEATTACKTIME + RANGED_ATTACK, 1);
+ }
+
+ else if (hasInstantHasteCap && m_baseRatingValue[CR_HASTE_MELEE] < sWorld->getIntConfig(CONFIG_PLAYER_HASTE_CAP))
+ {
+ SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
+ SetRegularAttackTime();
+ ApplyCastTimePercentMod(m_baseRatingValue[CR_HASTE_SPELL] * GetRatingMultiplier(CR_HASTE_SPELL), true);
+
+ if (GetShapeshiftForm())
+ {
+ SpellShapeshiftEntry const* ssEntry = sSpellShapeshiftStore.LookupEntry(GetShapeshiftForm());
+ if (ssEntry && ssEntry->attackSpeed)
+ {
+ SetAttackTime(BASE_ATTACK, ssEntry->attackSpeed);
+ SetAttackTime(OFF_ATTACK, ssEntry->attackSpeed);
+ SetAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME);
+ }
+ }
+ }
+
+ if (CanModifyStats())
+ {
+ UpdateDamagePhysical(BASE_ATTACK);
+ UpdateDamagePhysical(OFF_ATTACK);
+ UpdateDamagePhysical(RANGED_ATTACK);
+ }
+}
+
void Player::UpdateRating(CombatRating cr)
{
int32 amount = m_baseRatingValue[cr];
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index ea74b6d..0e2dd6a 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1210,6 +1210,9 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_WINTERGRASP_NOBATTLETIME] = ConfigMgr::GetIntDefault("Wintergrasp.NoBattleTimer", 150);
m_int_configs[CONFIG_WINTERGRASP_RESTART_AFTER_CRASH] = ConfigMgr::GetIntDefault("Wintergrasp.CrashRestartTimer", 10);
+ // Player haste cap
+ m_int_configs[CONFIG_PLAYER_HASTE_CAP] = ConfigMgr::GetIntDefault("Player.HasteCap", 0);
+
if (reload)
sScriptMgr->OnConfigLoad(reload);
}
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index a6cdd47..e0abdd4 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -325,6 +325,7 @@ enum WorldIntConfigs
CONFIG_WINTERGRASP_BATTLETIME,
CONFIG_WINTERGRASP_NOBATTLETIME,
CONFIG_WINTERGRASP_RESTART_AFTER_CRASH,
+ CONFIG_PLAYER_HASTE_CAP, // Player haste cap
INT_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index ce65517..8e5765e 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -2642,6 +2642,15 @@ PlayerDump.DisallowPaths = 1
PlayerDump.DisallowOverwrite = 1
#
+# Player.HasteCap
+# Description: Haste rating at which attack and casting speed will be set to instant (0).
+# Default: -1 - (Disabled)
+# 0+ - (Enabled)
+# Example: Player.HasteCap = 2000
+
+Player.HasteCap = 2000
+
+#
###################################################################################################
###################################################################################################
--
1.7.10.msysgit.1