aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/world_database.sql18
-rw-r--r--sql/updates/world/2011_05_12_08_world_spell_bonus_data.sql (renamed from sql/updates/world/2011_05_12_08_world_bonus_data.sql)0
-rw-r--r--sql/updates/world/2011_05_12_09_world_spell_bonus_data.sql3
-rw-r--r--sql/updates/world/2011_05_12_10_world_spell_bonus_data.sql2
-rw-r--r--sql/updates/world/2011_05_12_11_world_spell_proc_event.sql1
-rw-r--r--sql/updates/world/2011_05_12_12_world_spell_bonus_data.sql3
-rw-r--r--sql/updates/world/2011_05_12_13_world_spell_dbc.sql2
-rw-r--r--sql/updates/world/2011_05_12_13_world_spell_proc_event.sql1
-rwxr-xr-xsrc/server/game/Achievements/AchievementMgr.cpp6
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.cpp2
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.h1
-rwxr-xr-xsrc/server/game/DataStores/DBCStructure.h7
-rwxr-xr-xsrc/server/game/DataStores/DBCfmt.h1
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp18
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h2
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp69
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/PetHandler.cpp8
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.cpp5
-rwxr-xr-xsrc/server/game/World/World.cpp2
-rwxr-xr-xsrc/server/game/World/World.h2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp9
-rw-r--r--src/server/worldserver/worldserver.conf.dist12
23 files changed, 113 insertions, 63 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql
index c0928d9346d..ef426634725 100644
--- a/sql/base/world_database.sql
+++ b/sql/base/world_database.sql
@@ -16862,8 +16862,7 @@ CREATE TABLE `spell_bonus_data` (
LOCK TABLES `spell_bonus_data` WRITE;
/*!40000 ALTER TABLE `spell_bonus_data` DISABLE KEYS */;
INSERT INTO `spell_bonus_data` (`entry`,`direct_bonus`,`dot_bonus`,`ap_bonus`,`ap_dot_bonus`,`comments`) VALUES
-(49941, -1, -1, 0.04, -1, 'Death Knight - Blood Boil'),
-(48721, 0, -1, 0.04, -1, 'Death Knight - Blood Boil'),
+(48721, 0, -1, 0.06, -1, 'Death Knight - Blood Boil'),
(55078, 0, 0, -1, 0.06325, 'Death Knight - Blood Plague'),
(50444, -1, -1, 0.105, -1, 'Death Knight - Corpse Explosion Triggered'),
(52212, 0, -1, 0.0475, -1, 'Death Knight - Death and Decay'),
@@ -16897,14 +16896,8 @@ INSERT INTO `spell_bonus_data` (`entry`,`direct_bonus`,`dot_bonus`,`ap_bonus`,`a
(1822, -1, -1, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'),
(8936, 0.539, 0.188, -1, -1, 'Druid - Regrowth'),
(774, -1, 0.37604, -1, -1, 'Druid - Rejuvenation'),
-(50294, 0.0119, -1, -1, -1, 'Druid - Starfall AOE rank 1'),
-(53188, 0.0119, -1, -1, -1, 'Druid - Starfall AOE rank 2'),
-(53189, 0.0119, -1, -1, -1, 'Druid - Starfall AOE rank 3'),
-(53190, 0.0119, -1, -1, -1, 'Druid - Starfall AOE rank 4'),
-(50288, 0.0458, -1, -1, -1, 'Druid - Starfall rank 1'),
-(53191, 0.0458, -1, -1, -1, 'Druid - Starfall rank 2'),
-(53194, 0.0458, -1, -1, -1, 'Druid - Starfall rank 3'),
-(53195, 0.0458, -1, -1, -1, 'Druid - Starfall rank 4'),
+(50294, 0.13, -1, -1, -1, 'Druid - Starfall AOE'),
+(50288, 0.3, -1, -1, -1, 'Druid - Starfall'),
(2912, 1, -1, -1, -1, 'Druid - Starfire'),
(18562, 0, 0, 0, 0, 'Druid - Swiftmend'),
(779, -1, -1, 0.063, -1, 'Druid - Swipe (Bear)'),
@@ -17026,6 +17019,7 @@ INSERT INTO `spell_bonus_data` (`entry`,`direct_bonus`,`dot_bonus`,`ap_bonus`,`a
(34433, 0.65, -1, -1, -1, 'Priest - Shadowfiend'),
(585, 0.714, -1, -1, -1, 'Priest - Smite'),
(34914, -1, 0.4, -1, -1, 'Priest - Vampiric Touch'),
+(64085, 1.2, -1, -1, -1, 'Priest - Vampiric Touch (Dispelled)'),
(7001, -1, 0.3333, -1, -1, 'Priest - Lightwell Renew Rank 1'),
(63675, 0, 0, 0, 0, 'Priest - Improved Devouring Plague'),
(56131, 0, 0, 0, 0, 'Priest - Glyph of Dispel Magic'),
@@ -17280,6 +17274,7 @@ INSERT INTO `spell_dbc` (`Id`,`Dispel`,`Mechanic`,`Attributes`,`AttributesEx`,`A
(34145, 0, 0, 0, 0, 0, 67108864, 0, 0, 0, 0, 0, 1, 0, 0, 101, 0, 0, 80, 80, 0, 1, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 'Ritual of Souls Rank 1 - Trigger Create Soulwell (29886)'),
(58888, 0, 0, 0, 0, 0, 67108864, 0, 0, 0, 0, 0, 1, 0, 0, 101, 0, 0, 68, 68, 0, 1, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 'Ritual of Souls Rank 2 - Trigger Create Soulwell (58889)'),
(61988, 0, 0, 671089024, 268436480, 4, 269484032, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 13, 0, -1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Divine Shield Exclude Aura - 61988'),
+(100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, -1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Bone Shield cooldown - serverside spell'),
(200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, -1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 'Drain Soul increased damage - serverside spell'),
(42876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Quest 9275 reward serverside spell'),
(44987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Quest 11521 reward serverside spell'),
@@ -19008,7 +19003,7 @@ INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFam
( 49543, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 9, 20), -- Bloodworms (Rank 3)
( 49208, 0x00, 15, 0x00400000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Reaping (Rank 1)
( 49219, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0, 0, 0), -- Blood-Caked Blade (Rank 1)
-( 49222, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000222A8, 0x00000000, 0, 0, 3), -- Bone Shield
+( 49222, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000222A8, 0x00000000, 0, 0, 2), -- Bone Shield
( 49280, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 3), -- Lightning Shield (Rank 10)
( 49281, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 3), -- Lightning Shield (Rank 11)
( 49283, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000222A8, 0x00000000, 0, 0, 3), -- Earth Shield (Rank 4)
@@ -19165,7 +19160,6 @@ INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFam
( 54808, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 60), -- Sonic Shield
( 54838, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 45), -- Purified Spirit
( 54841, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0, 0, 3), -- Thunder Capacitor
-( 54936, 0x00, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Glyph of Flash of Light
( 54937, 0x00, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Glyph of Holy Light
( 54939, 0x00, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Glyph of Divinity
( 55198, 0x00, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00004000, 0x00000002, 0, 0, 0), -- Tidal Force
diff --git a/sql/updates/world/2011_05_12_08_world_bonus_data.sql b/sql/updates/world/2011_05_12_08_world_spell_bonus_data.sql
index d72932f35b3..d72932f35b3 100644
--- a/sql/updates/world/2011_05_12_08_world_bonus_data.sql
+++ b/sql/updates/world/2011_05_12_08_world_spell_bonus_data.sql
diff --git a/sql/updates/world/2011_05_12_09_world_spell_bonus_data.sql b/sql/updates/world/2011_05_12_09_world_spell_bonus_data.sql
new file mode 100644
index 00000000000..f48f3479388
--- /dev/null
+++ b/sql/updates/world/2011_05_12_09_world_spell_bonus_data.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_bonus_data` WHERE `entry` = 64085;
+INSERT INTO `spell_bonus_data` VALUES
+(64085,1.2,-1,-1,-1,'Priest - Vampiric Touch (Dispelled)');
diff --git a/sql/updates/world/2011_05_12_10_world_spell_bonus_data.sql b/sql/updates/world/2011_05_12_10_world_spell_bonus_data.sql
new file mode 100644
index 00000000000..c9fcade6817
--- /dev/null
+++ b/sql/updates/world/2011_05_12_10_world_spell_bonus_data.sql
@@ -0,0 +1,2 @@
+UPDATE `spell_bonus_data` SET `ap_bonus` = 0.06 WHERE `entry` = 48721;
+DELETE FROM `spell_bonus_data` WHERE `entry` = 49941;
diff --git a/sql/updates/world/2011_05_12_11_world_spell_proc_event.sql b/sql/updates/world/2011_05_12_11_world_spell_proc_event.sql
new file mode 100644
index 00000000000..f2b6ce5fd47
--- /dev/null
+++ b/sql/updates/world/2011_05_12_11_world_spell_proc_event.sql
@@ -0,0 +1 @@
+DELETE FROM `spell_proc_event` WHERE `entry` = 54936;
diff --git a/sql/updates/world/2011_05_12_12_world_spell_bonus_data.sql b/sql/updates/world/2011_05_12_12_world_spell_bonus_data.sql
new file mode 100644
index 00000000000..adf2e07c926
--- /dev/null
+++ b/sql/updates/world/2011_05_12_12_world_spell_bonus_data.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_bonus_data` WHERE `entry` IN (53188,53189,53190,53191,53194,53195);
+UPDATE `spell_bonus_data` SET `direct_bonus` = 0.3 WHERE `entry` = 50288;
+UPDATE `spell_bonus_data` SET `direct_bonus` = 0.13 WHERE `entry` = 50294;
diff --git a/sql/updates/world/2011_05_12_13_world_spell_dbc.sql b/sql/updates/world/2011_05_12_13_world_spell_dbc.sql
new file mode 100644
index 00000000000..c3c649f2647
--- /dev/null
+++ b/sql/updates/world/2011_05_12_13_world_spell_dbc.sql
@@ -0,0 +1,2 @@
+DELETE FROM `spell_dbc` WHERE `id` = 100000;
+INSERT INTO `spell_dbc` VALUES (100000,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,-1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,'Bone Shield cooldown - serverside spell');
diff --git a/sql/updates/world/2011_05_12_13_world_spell_proc_event.sql b/sql/updates/world/2011_05_12_13_world_spell_proc_event.sql
new file mode 100644
index 00000000000..9a533bdb810
--- /dev/null
+++ b/sql/updates/world/2011_05_12_13_world_spell_proc_event.sql
@@ -0,0 +1 @@
+UPDATE `spell_proc_event` SET `cooldown` = 2 WHERE `entry` = 49222;
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 83f28b7cbaa..b2d7cb79319 100755
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -428,7 +428,7 @@ void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaTypes type, uin
{
sLog->outDebug(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::ResetAchievementCriteria(%u, %u, %u)", type, miscvalue1, miscvalue2);
- if (!sWorld->getBoolConfig(CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS) && m_player->GetSession()->GetSecurity() > SEC_PLAYER)
+ if (m_player->GetSession()->GetSecurity() > AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS)))
return;
AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByType(type);
@@ -728,7 +728,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
{
sLog->outDebug(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::UpdateAchievementCriteria(%u, %u, %u)", type, miscValue1, miscValue2);
- if (!sWorld->getBoolConfig(CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS) && m_player->GetSession()->GetSecurity() > SEC_PLAYER)
+ if (m_player->GetSession()->GetSecurity() > AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS)))
return;
AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByType(type);
@@ -1972,7 +1972,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement, b
{
sLog->outDetail("AchievementMgr::CompletedAchievement(%u)", achievement->ID);
- if (!sWorld->getBoolConfig(CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS) && m_player->GetSession()->GetSecurity() > SEC_PLAYER && !ignoreGMAllowAchievementConfig)
+ if (m_player->GetSession()->GetSecurity() > AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS)) && !ignoreGMAllowAchievementConfig)
return;
if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement))
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index f4056dd0a37..3fd61553811 100755
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -99,6 +99,7 @@ DBCStorage <GtChanceToMeleeCritBaseEntry> sGtChanceToMeleeCritBaseStore(GtChance
DBCStorage <GtChanceToMeleeCritEntry> sGtChanceToMeleeCritStore(GtChanceToMeleeCritfmt);
DBCStorage <GtChanceToSpellCritBaseEntry> sGtChanceToSpellCritBaseStore(GtChanceToSpellCritBasefmt);
DBCStorage <GtChanceToSpellCritEntry> sGtChanceToSpellCritStore(GtChanceToSpellCritfmt);
+DBCStorage <GtOCTClassCombatRatingScalarEntry> sGtOCTClassCombatRatingScalarStore(GtOCTClassCombatRatingScalarfmt);
DBCStorage <GtOCTRegenHPEntry> sGtOCTRegenHPStore(GtOCTRegenHPfmt);
//DBCStorage <GtOCTRegenMPEntry> sGtOCTRegenMPStore(GtOCTRegenMPfmt); -- not used currently
DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore(GtRegenHPPerSptfmt);
@@ -331,6 +332,7 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sGtChanceToMeleeCritStore, dbcPath, "gtChanceToMeleeCrit.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sGtChanceToSpellCritBaseStore, dbcPath, "gtChanceToSpellCritBase.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sGtChanceToSpellCritStore, dbcPath, "gtChanceToSpellCrit.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTClassCombatRatingScalarStore, dbcPath, "gtOCTClassCombatRatingScalar.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTRegenHPStore, dbcPath, "gtOCTRegenHP.dbc");
//LoadDBC(dbcCount, availableDbcLocales, bad_dbc_files, sGtOCTRegenMPStore, dbcPath, "gtOCTRegenMP.dbc"); -- not used currently
LoadDBC(availableDbcLocales, bad_dbc_files, sGtRegenHPPerSptStore, dbcPath, "gtRegenHPPerSpt.dbc");
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index 97598e87f8e..396bd8ca98c 100755
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -103,6 +103,7 @@ extern DBCStorage <GtChanceToMeleeCritBaseEntry> sGtChanceToMeleeCritBaseStore;
extern DBCStorage <GtChanceToMeleeCritEntry> sGtChanceToMeleeCritStore;
extern DBCStorage <GtChanceToSpellCritBaseEntry> sGtChanceToSpellCritBaseStore;
extern DBCStorage <GtChanceToSpellCritEntry> sGtChanceToSpellCritStore;
+extern DBCStorage <GtOCTClassCombatRatingScalarEntry> sGtOCTClassCombatRatingScalarStore;
extern DBCStorage <GtOCTRegenHPEntry> sGtOCTRegenHPStore;
//extern DBCStorage <GtOCTRegenMPEntry> sGtOCTRegenMPStore; -- not used currently
extern DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index 114e14ab6c0..b5c22a11b24 100755
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -961,6 +961,8 @@ struct GlyphSlotEntry
// All Gt* DBC store data for 100 levels, some by 100 per class/race
#define GT_MAX_LEVEL 100
+// gtOCTClassCombatRatingScalar.dbc stores data for 32 ratings, look at MAX_COMBAT_RATING for real used amount
+#define GT_MAX_RATING 32
struct GtBarberShopCostBaseEntry
{
@@ -992,6 +994,11 @@ struct GtChanceToSpellCritEntry
float ratio;
};
+struct GtOCTClassCombatRatingScalarEntry
+{
+ float ratio;
+};
+
struct GtOCTRegenHPEntry
{
float ratio;
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index caceb389d6c..8f7ce9d8df3 100755
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -61,6 +61,7 @@ const char GtChanceToMeleeCritBasefmt[]="f";
const char GtChanceToMeleeCritfmt[]="f";
const char GtChanceToSpellCritBasefmt[]="f";
const char GtChanceToSpellCritfmt[]="f";
+const char GtOCTClassCombatRatingScalarfmt[]="df";
const char GtOCTRegenHPfmt[]="f";
//const char GtOCTRegenMPfmt[]="f";
const char GtRegenHPPerSptfmt[]="f";
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4fc87b99761..e6d38dee3ec 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2002,7 +2002,7 @@ bool Player::ToggleAFK()
bool state = HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK);
// afk player not allowed in battleground
- if (state && InBattleground())
+ if (state && InBattleground() && !InArena())
LeaveBattleground();
return state;
@@ -5783,7 +5783,7 @@ float Player::GetSpellCritFromIntellect()
return crit*100.0f;
}
-float Player::GetRatingCoefficient(CombatRating cr) const
+float Player::GetRatingMultiplier(CombatRating cr) const
{
uint8 level = getLevel();
@@ -5791,15 +5791,17 @@ float Player::GetRatingCoefficient(CombatRating cr) const
level = GT_MAX_LEVEL;
GtCombatRatingsEntry const *Rating = sGtCombatRatingsStore.LookupEntry(cr*GT_MAX_LEVEL+level-1);
- if (Rating == NULL)
+ // gtOCTClassCombatRatingScalarStore.dbc starts with 1, CombatRating with zero, so cr+1
+ GtOCTClassCombatRatingScalarEntry const *classRating = sGtOCTClassCombatRatingScalarStore.LookupEntry((getClass()-1)*GT_MAX_RATING+cr+1);
+ if (!Rating || !classRating)
return 1.0f; // By default use minimum coefficient (not must be called)
- return Rating->ratio;
+ return classRating->ratio / Rating->ratio;
}
float Player::GetRatingBonusValue(CombatRating cr) const
{
- return float(GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr)) / GetRatingCoefficient(cr);
+ return float(GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr)) * GetRatingMultiplier(cr);
}
float Player::GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const
@@ -5867,20 +5869,20 @@ void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply)
{
case CR_HASTE_MELEE:
{
- float RatingChange = value / GetRatingCoefficient(cr);
+ float RatingChange = value * GetRatingMultiplier(cr);
ApplyAttackTimePercentMod(BASE_ATTACK, RatingChange, apply);
ApplyAttackTimePercentMod(OFF_ATTACK, RatingChange, apply);
break;
}
case CR_HASTE_RANGED:
{
- float RatingChange = value / GetRatingCoefficient(cr);
+ float RatingChange = value * GetRatingMultiplier(cr);
ApplyAttackTimePercentMod(RANGED_ATTACK, RatingChange, apply);
break;
}
case CR_HASTE_SPELL:
{
- float RatingChange = value / GetRatingCoefficient(cr);
+ float RatingChange = value * GetRatingMultiplier(cr);
ApplyCastTimePercentMod(RatingChange, apply);
break;
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 13e6b195142..4c0c6401049 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1844,7 +1844,7 @@ class Player : public Unit, public GridObject<Player>
float GetSpellCritFromIntellect();
float OCTRegenHPPerSpirit();
float OCTRegenMPPerSpirit();
- float GetRatingCoefficient(CombatRating cr) const;
+ float GetRatingMultiplier(CombatRating cr) const;
float GetRatingBonusValue(CombatRating cr) const;
uint32 GetBaseSpellPowerBonus() { return m_baseSpellPower; }
int32 GetSpellPenetrationItemMod() const { return m_spellPenetrationItemMod; }
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 1e296b5cce8..c2415dd4ad7 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -2250,17 +2250,21 @@ void Unit::SendMeleeAttackStop(Unit* victim)
sLog->outDetail("%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow());
}
-bool Unit::isSpellBlocked(Unit *pVictim, SpellEntry const * /*spellProto*/, WeaponAttackType attackType)
+bool Unit::isSpellBlocked(Unit* victim, SpellEntry const * spellProto, WeaponAttackType attackType)
{
- if (pVictim->HasInArc(M_PI, this) || pVictim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ // These spells can't be blocked
+ if (spellProto && spellProto->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)
+ return false;
+
+ if (victim->HasInArc(M_PI, this) || victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
{
// Check creatures flags_extra for disable block
- if (pVictim->GetTypeId() == TYPEID_UNIT &&
- pVictim->ToCreature()->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK)
+ if (victim->GetTypeId() == TYPEID_UNIT &&
+ victim->ToCreature()->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK)
return false;
- float blockChance = pVictim->GetUnitBlockChance();
- blockChance += (int32(GetWeaponSkillValue(attackType)) - int32(pVictim->GetMaxSkillValueForLevel()))*0.04f;
+ float blockChance = victim->GetUnitBlockChance();
+ blockChance += (int32(GetWeaponSkillValue(attackType)) - int32(victim->GetMaxSkillValueForLevel())) * 0.04f;
if (roll_chance_f(blockChance))
return true;
}
@@ -6815,26 +6819,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
break;
}
- // Glyph of Divinity
- case 54939:
- {
- // Lookup base amount mana restore
- for (uint8 i=0; i<MAX_SPELL_EFFECTS; i++)
- if (procSpell->Effect[i] == SPELL_EFFECT_ENERGIZE)
- {
- int32 mana = SpellMgr::CalculateSpellEffectAmount(procSpell, i);
- CastCustomSpell(this, 54986, 0, &mana, 0, true, castItem, triggeredByAura);
- break;
- }
- return true;
- }
- // Glyph of Flash of Light
- case 54936:
- {
- triggered_spell_id = 54957;
- basepoints0 = CalculatePctN(int32(damage), triggerAmount);
- break;
- }
// Glyph of Holy Light
case 54937:
{
@@ -7844,7 +7828,7 @@ bool Unit::HandleModDamagePctTakenAuraProc(Unit *pVictim, uint32 /*damage*/, Aur
// Used in case when access to whole aura is needed
// All procs should be handled like this...
-bool Unit::HandleAuraProc(Unit * pVictim, uint32 damage, Aura * triggeredByAura, SpellEntry const * procSpell, uint32 /*procFlag*/, uint32 procEx, uint32 /*cooldown*/, bool * handled)
+bool Unit::HandleAuraProc(Unit * pVictim, uint32 damage, Aura * triggeredByAura, SpellEntry const * procSpell, uint32 /*procFlag*/, uint32 procEx, uint32 cooldown, bool * handled)
{
SpellEntry const *dummySpell = triggeredByAura->GetSpellProto();
@@ -7913,6 +7897,25 @@ bool Unit::HandleAuraProc(Unit * pVictim, uint32 damage, Aura * triggeredByAura,
return true;
}
}
+ // Glyph of Divinity
+ else if (dummySpell->Id == 54939)
+ {
+ *handled = true;
+ // Check if we are the target and prevent mana gain
+ if (triggeredByAura->GetCasterGUID() == pVictim->GetGUID())
+ return false;
+ // Lookup base amount mana restore
+ for (uint8 i=0; i<MAX_SPELL_EFFECTS; i++)
+ {
+ if (procSpell->Effect[i] == SPELL_EFFECT_ENERGIZE)
+ {
+ // value multiplied by 2 because you should get twice amount
+ int32 mana = SpellMgr::CalculateSpellEffectAmount(procSpell, i) * 2;
+ CastCustomSpell(this, 54986, 0, &mana, NULL, true);
+ }
+ }
+ return true;
+ }
break;
}
case SPELLFAMILY_MAGE:
@@ -8010,6 +8013,18 @@ bool Unit::HandleAuraProc(Unit * pVictim, uint32 damage, Aura * triggeredByAura,
switch(dummySpell->Id)
{
+ // Bone Shield cooldown
+ case 49222:
+ {
+ *handled = true;
+ if (cooldown && GetTypeId() == TYPEID_PLAYER)
+ {
+ if (ToPlayer()->HasSpellCooldown(100000))
+ return false;
+ ToPlayer()->AddSpellCooldown(100000, 0, time(NULL) + cooldown);
+ }
+ return true;
+ }
// Hungering Cold aura drop
case 51209:
*handled = true;
diff --git a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
index 9dfac0e1b7c..0c8201aa1e2 100755
--- a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
@@ -560,7 +560,9 @@ void WorldSession::HandlePetSetAction(WorldPacket & recv_data)
if (pet->GetTypeId() == TYPEID_UNIT && pet->ToCreature()->isPet())
((Pet*)pet)->ToggleAutocast(spell_id, true);
else
- charmInfo->ToggleCreatureAutocast(spell_id, true);
+ for (Unit::ControlList::iterator itr = GetPlayer()->m_Controlled.begin(); itr != GetPlayer()->m_Controlled.end(); ++itr)
+ if ((*itr)->GetEntry() == pet->GetEntry())
+ (*itr)->GetCharmInfo()->ToggleCreatureAutocast(spell_id, true);
}
//sign for no/turn off autocast
else if (act_state == ACT_DISABLED && spell_id)
@@ -568,7 +570,9 @@ void WorldSession::HandlePetSetAction(WorldPacket & recv_data)
if (pet->GetTypeId() == TYPEID_UNIT && pet->ToCreature()->isPet())
((Pet*)pet)->ToggleAutocast(spell_id, false);
else
- charmInfo->ToggleCreatureAutocast(spell_id, false);
+ for (Unit::ControlList::iterator itr = GetPlayer()->m_Controlled.begin(); itr != GetPlayer()->m_Controlled.end(); ++itr)
+ if ((*itr)->GetEntry() == pet->GetEntry())
+ (*itr)->GetCharmInfo()->ToggleCreatureAutocast(spell_id, false);
}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index fc2a6920c8e..fcfef1f9cfa 100755
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5989,7 +5989,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const * aurApp, uint8 mode, boo
{
if (AuraEffect const * aurEff = GetBase()->GetEffect(1))
{
- int32 damage = aurEff->GetAmount()*4;
+ int32 damage = aurEff->GetAmount() * 8;
// backfire damage
target->CastCustomSpell(target, 64085, &damage, NULL, NULL, true, NULL, NULL, GetCasterGUID());
}
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index d5e736c7900..ad2bd3aa0c0 100755
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3944,6 +3944,11 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->AttributesEx5 &= ~SPELL_ATTR5_USABLE_WHILE_STUNNED;
++count;
break;
+ case 8145: // Tremor Totem (instant pulse)
+ case 6474: // Earthbind Totem (instant pulse)
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY;
+ ++count;
+ break;
case 53241: // Marked for Death (Rank 1)
case 53243: // Marked for Death (Rank 2)
case 53244: // Marked for Death (Rank 3)
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index b79f6721bd7..a17e0b0dad3 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -854,6 +854,7 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_GM_LEVEL_IN_GM_LIST] = sConfig->GetIntDefault("GM.InGMList.Level", SEC_ADMINISTRATOR);
m_int_configs[CONFIG_GM_LEVEL_IN_WHO_LIST] = sConfig->GetIntDefault("GM.InWhoList.Level", SEC_ADMINISTRATOR);
+ m_int_configs[CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS] = sConfig->GetIntDefault("GM.AllowAchievementGain.Level", SEC_ADMINISTRATOR);
m_bool_configs[CONFIG_GM_LOG_TRADE] = sConfig->GetBoolDefault("GM.LogTrade", false);
m_int_configs[CONFIG_START_GM_LEVEL] = sConfig->GetIntDefault("GM.StartLevel", 1);
if (m_int_configs[CONFIG_START_GM_LEVEL] < m_int_configs[CONFIG_START_PLAYER_LEVEL])
@@ -870,7 +871,6 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_ALLOW_GM_GROUP] = sConfig->GetBoolDefault("GM.AllowInvite", false);
m_bool_configs[CONFIG_ALLOW_GM_FRIEND] = sConfig->GetBoolDefault("GM.AllowFriend", false);
m_bool_configs[CONFIG_GM_LOWER_SECURITY] = sConfig->GetBoolDefault("GM.LowerSecurity", false);
- m_bool_configs[CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS] = sConfig->GetBoolDefault("GM.AllowAchievementGain", true);
m_float_configs[CONFIG_CHANCE_OF_GM_SURVEY] = sConfig->GetFloatDefault("GM.TicketSystem.ChanceOfGMSurvey", 50.0f);
m_int_configs[CONFIG_GROUP_VISIBILITY] = sConfig->GetIntDefault("Visibility.GroupMode", 1);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 868881b9510..a585be5ad84 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -108,7 +108,6 @@ enum WorldBoolConfigs
CONFIG_ALLOW_GM_GROUP,
CONFIG_ALLOW_GM_FRIEND,
CONFIG_GM_LOWER_SECURITY,
- CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS,
CONFIG_SKILL_PROSPECTING,
CONFIG_SKILL_MILLING,
CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY,
@@ -227,6 +226,7 @@ enum WorldIntConfigs
CONFIG_GM_WHISPERING_TO,
CONFIG_GM_LEVEL_IN_GM_LIST,
CONFIG_GM_LEVEL_IN_WHO_LIST,
+ CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS,
CONFIG_START_GM_LEVEL,
CONFIG_GROUP_VISIBILITY,
CONFIG_MAIL_DELIVERY_DELAY,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index bedca0188bb..6a72b9c87bd 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -316,13 +316,18 @@ class boss_blood_queen_lana_thel : public CreatureScript
DoCast(me, SPELL_BERSERK);
break;
case EVENT_VAMPIRIC_BITE:
- if (Player* target = SelectRandomTarget(false))
+ {
+ std::list<Player*> targets;
+ SelectRandomTarget(false, &targets);
+ if (!targets.empty())
{
+ Unit* target = targets.front();
DoCast(target, SPELL_VAMPIRIC_BITE);
Talk(SAY_VAMPIRIC_BITE);
_vampires.insert(target->GetGUID());
}
break;
+ }
case EVENT_BLOOD_MIRROR:
{
// victim can be NULL when this is processed in the same update tick as EVENT_AIR_PHASE
@@ -453,7 +458,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
}
std::list<Player*>::iterator itr = tempTargets.begin();
- std::advance(itr, urand(0, tempTargets.size()-1));
+ std::advance(itr, urand(0, tempTargets.size() - 1));
return *itr;
}
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 3109c922914..db6e9dc74c9 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1894,12 +1894,14 @@ GM.AllowFriend = 0
GM.LowerSecurity = 0
#
-# GM.AllowAchievementGain
-# Description: Allow GM characters to obtain achievements.
-# Default: 1 - (Enabled)
-# 0 - (Disabled)
+# GM.AllowAchievementGain.Level
+# Description: Max GM level that can obtain achievements.
+# Default: 3 - (Anyone)
+# 0 - (Only players)
+# 1 - (Only moderators)
+# 2 - (Only gamemasters)
-GM.AllowAchievementGain = 1
+GM.AllowAchievementGain.Level = 3
#
# GM.TicketSystem.ChanceOfGMSurvey