mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
118 lines
4.3 KiB
Diff
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
|
|
|