From a52135f276cbbd127e213bd895467d4fea90ba06 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Wed, 27 Aug 2014 23:21:55 +0200 Subject: Core: Remove whitespace --- src/server/scripts/Spells/spell_shaman.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 593ce9a54de..bba1f4e298b 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -312,7 +312,7 @@ class spell_sha_earth_shield : public SpellScriptLoader amount = GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, HEAL); //! WORKAROUND - // If target is affected by healing reduction, modifier is guaranteed to be negative + // If target is affected by healing reduction, modifier is guaranteed to be negative // value (e.g. -50). To revert the effect, multiply amount with reciprocal of relative value: // (100 / ((-1) * modifier)) * 100 = (-1) * 100 * 100 / modifier = -10000 / modifier if (int32 modifier = GetUnitOwner()->GetMaxNegativeAuraModifier(SPELL_AURA_MOD_HEALING_PCT)) -- cgit v1.2.3 From b65172910c4f65c3ddd3a7c7ca3d3c7330f4a1f0 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Thu, 28 Aug 2014 15:32:38 +0100 Subject: Core/BattleGrounds: store data about BGs victories Enable in worldserver.conf Closes #12944 Signed-off-by: DDuarte --- sql/base/characters_database.sql | 62 +++++++++++++++++++++- .../2014_08_28_00_characters_pvpstats.sql | 28 ++++++++++ src/server/game/Battlegrounds/Battleground.cpp | 59 ++++++++++++++++++++ src/server/game/Battlegrounds/BattlegroundScore.h | 13 +++++ .../game/Battlegrounds/Zones/BattlegroundAB.h | 3 ++ .../game/Battlegrounds/Zones/BattlegroundAV.h | 6 +++ .../game/Battlegrounds/Zones/BattlegroundEY.h | 2 + .../game/Battlegrounds/Zones/BattlegroundIC.h | 3 ++ .../game/Battlegrounds/Zones/BattlegroundSA.h | 3 ++ .../game/Battlegrounds/Zones/BattlegroundWS.h | 3 ++ src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + .../Database/Implementation/CharacterDatabase.cpp | 6 +++ .../Database/Implementation/CharacterDatabase.h | 4 ++ src/server/worldserver/worldserver.conf.dist | 8 +++ 15 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 sql/updates/characters/2014_08_28_00_characters_pvpstats.sql (limited to 'src') diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index c7e1372e9a1..6e3ab43e4ac 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2378,6 +2378,66 @@ LOCK TABLES `pool_quest_save` WRITE; /*!40000 ALTER TABLE `pool_quest_save` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `pvpstats_battlegrounds` +-- + +DROP TABLE IF EXISTS `pvpstats_battlegrounds`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `pvpstats_battlegrounds` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `winner_faction` tinyint(4) NOT NULL, + `bracket_id` tinyint(3) unsigned NOT NULL, + `type` tinyint(3) unsigned NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `pvpstats_battlegrounds` +-- + +LOCK TABLES `pvpstats_battlegrounds` WRITE; +/*!40000 ALTER TABLE `pvpstats_battlegrounds` DISABLE KEYS */; +/*!40000 ALTER TABLE `pvpstats_battlegrounds` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `pvpstats_players` +-- + +DROP TABLE IF EXISTS `pvpstats_players`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `pvpstats_players` ( + `battleground_id` bigint(20) unsigned NOT NULL, + `character_guid` int(10) unsigned NOT NULL, + `score_killing_blows` mediumint(8) unsigned NOT NULL, + `score_deaths` mediumint(8) unsigned NOT NULL, + `score_honorable_kills` mediumint(8) unsigned NOT NULL, + `score_bonus_honor` mediumint(8) unsigned NOT NULL, + `score_damage_done` mediumint(8) unsigned NOT NULL, + `score_healing_done` mediumint(8) unsigned NOT NULL, + `attr_1` mediumint(8) unsigned NOT NULL DEFAULT '0', + `attr_2` mediumint(8) unsigned NOT NULL DEFAULT '0', + `attr_3` mediumint(8) unsigned NOT NULL DEFAULT '0', + `attr_4` mediumint(8) unsigned NOT NULL DEFAULT '0', + `attr_5` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`battleground_id`,`character_guid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `pvpstats_players` +-- + +LOCK TABLES `pvpstats_players` WRITE; +/*!40000 ALTER TABLE `pvpstats_players` DISABLE KEYS */; +/*!40000 ALTER TABLE `pvpstats_players` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `reserved_name` -- @@ -2457,4 +2517,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2014-01-26 14:39:20 +-- Dump completed on 2014-08-28 15:30:47 diff --git a/sql/updates/characters/2014_08_28_00_characters_pvpstats.sql b/sql/updates/characters/2014_08_28_00_characters_pvpstats.sql new file mode 100644 index 00000000000..0e3c239f8e6 --- /dev/null +++ b/sql/updates/characters/2014_08_28_00_characters_pvpstats.sql @@ -0,0 +1,28 @@ +DROP TABLE IF EXISTS `pvpstats_battlegrounds`; +CREATE TABLE `pvpstats_battlegrounds` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + `winner_faction` TINYINT NOT NULL, + `bracket_id` TINYINT UNSIGNED NOT NULL, + `type` TINYINT UNSIGNED NOT NULL, + `date` DATETIME NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +DROP TABLE IF EXISTS `pvpstats_players`; +CREATE TABLE `pvpstats_players` ( + `battleground_id` BIGINT UNSIGNED NOT NULL, + `character_guid` INT UNSIGNED NOT NULL, + `score_killing_blows` MEDIUMINT UNSIGNED NOT NULL, + `score_deaths` MEDIUMINT UNSIGNED NOT NULL, + `score_honorable_kills` MEDIUMINT UNSIGNED NOT NULL, + `score_bonus_honor` MEDIUMINT UNSIGNED NOT NULL, + `score_damage_done` MEDIUMINT UNSIGNED NOT NULL, + `score_healing_done` MEDIUMINT UNSIGNED NOT NULL, + `attr_1` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, + `attr_2` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, + `attr_3` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, + `attr_4` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, + `attr_5` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`battleground_id`, `character_guid`) +) ENGINE=InnoDB; + diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 3a59ffa8cf9..c11ee7a39b7 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -712,6 +712,24 @@ void Battleground::EndBattleground(uint32 winner) int32 winmsg_id = 0; + PreparedStatement* stmt; + PreparedQueryResult result; + uint64 battleground_id = 1; + + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) + { + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PVPSTATS_MAXID); + result = CharacterDatabase.Query(stmt); + + if (result) + { + Field* fields = result->Fetch(); + battleground_id = fields[0].GetInt64() + 1; + } + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_BATTLEGROUND); + } + if (winner == ALLIANCE) { winmsg_id = isBattleground() ? LANG_BG_A_WINS : LANG_ARENA_GOLD_WINS; @@ -719,6 +737,9 @@ void Battleground::EndBattleground(uint32 winner) PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound SetWinner(BG_TEAM_ALLIANCE); + + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) + stmt->setUInt8(1, BG_TEAM_ALLIANCE); } else if (winner == HORDE) { @@ -727,10 +748,24 @@ void Battleground::EndBattleground(uint32 winner) PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound SetWinner(BG_TEAM_HORDE); + + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) + stmt->setUInt8(1, BG_TEAM_HORDE); } else { SetWinner(BG_TEAM_NEUTRAL); + + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) + stmt->setUInt8(1, BG_TEAM_NEUTRAL); + } + + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) + { + stmt->setUInt64(0, battleground_id); + stmt->setUInt8(2, m_BracketId + 1); + stmt->setUInt8(3, GetTypeID()); + CharacterDatabase.Execute(stmt); } SetStatus(STATUS_WAIT_LEAVE); @@ -770,6 +805,30 @@ void Battleground::EndBattleground(uint32 winner) uint32 loser_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_FIRST); uint32 winner_arena = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_FIRST); + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) + { + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER); + BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUIDLow()); + + // battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done + + stmt->setUInt32(0, battleground_id); + stmt->setUInt32(1, player->GetGUIDLow()); + stmt->setUInt32(2, score->second->GetKillingBlows()); + stmt->setUInt32(3, score->second->GetDeaths()); + stmt->setUInt32(4, score->second->GetHonorableKills()); + stmt->setUInt32(5, score->second->GetBonusHonor()); + stmt->setUInt32(6, score->second->GetDamageDone()); + stmt->setUInt32(7, score->second->GetHealingDone()); + stmt->setUInt32(8, score->second->GetAttr1()); + stmt->setUInt32(9, score->second->GetAttr2()); + stmt->setUInt32(10, score->second->GetAttr3()); + stmt->setUInt32(11, score->second->GetAttr4()); + stmt->setUInt32(12, score->second->GetAttr5()); + + CharacterDatabase.Execute(stmt); + } + // Reward winner team if (team == winner) { diff --git a/src/server/game/Battlegrounds/BattlegroundScore.h b/src/server/game/Battlegrounds/BattlegroundScore.h index 81aca355be8..f91c2aae579 100644 --- a/src/server/game/Battlegrounds/BattlegroundScore.h +++ b/src/server/game/Battlegrounds/BattlegroundScore.h @@ -107,6 +107,19 @@ struct BattlegroundScore // For Logging purpose virtual std::string ToString() const { return ""; } + uint32 GetKillingBlows() const { return KillingBlows; } + uint32 GetDeaths() const { return Deaths; } + uint32 GetHonorableKills() const { return HonorableKills; } + uint32 GetBonusHonor() const { return BonusHonor; } + uint32 GetDamageDone() const { return DamageDone; } + uint32 GetHealingDone() const { return HealingDone; } + + virtual uint32 GetAttr1() const { return 0; } + virtual uint32 GetAttr2() const { return 0; } + virtual uint32 GetAttr3() const { return 0; } + virtual uint32 GetAttr4() const { return 0; } + virtual uint32 GetAttr5() const { return 0; } + uint64 PlayerGuid; // Default score, present in every type diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index 7655880117f..e44c2682094 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -267,6 +267,9 @@ struct BattlegroundABScore final : public BattlegroundScore data << uint32(BasesDefended); } + uint32 GetAttr1() const { return BasesAssaulted; } + uint32 GetAttr2() const { return BasesDefended; } + uint32 BasesAssaulted; uint32 BasesDefended; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index 882d729c1e8..ac8eebf8cfa 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -1568,6 +1568,12 @@ struct BattlegroundAVScore final : public BattlegroundScore data << uint32(MinesCaptured); } + uint32 GetAttr1() const { return GraveyardsAssaulted; } + uint32 GetAttr2() const { return GraveyardsDefended; } + uint32 GetAttr3() const { return TowersAssaulted; } + uint32 GetAttr4() const { return TowersDefended; } + uint32 GetAttr5() const { return MinesCaptured; } + uint32 GraveyardsAssaulted; uint32 GraveyardsDefended; uint32 TowersAssaulted; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 4a146a17917..7482973d45a 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -349,6 +349,8 @@ struct BattlegroundEYScore final : public BattlegroundScore data << uint32(FlagCaptures); } + uint32 GetAttr1() const { return FlagCaptures; } + uint32 FlagCaptures; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index 5a9b47ec9b5..9c09df64ba0 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -878,6 +878,9 @@ struct BattlegroundICScore final : public BattlegroundScore data << uint32(BasesDefended); } + uint32 GetAttr1() const { return BasesAssaulted; } + uint32 GetAttr2() const { return BasesDefended; } + uint32 BasesAssaulted; uint32 BasesDefended; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index 627c23850d2..bb53428c264 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -538,6 +538,9 @@ struct BattlegroundSAScore final : public BattlegroundScore data << uint32(GatesDestroyed); } + uint32 GetAttr1() const { return DemolishersDestroyed; } + uint32 GetAttr2() const { return GatesDestroyed; } + uint32 DemolishersDestroyed; uint32 GatesDestroyed; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index d29715c982b..78bbb071c6f 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -177,6 +177,9 @@ struct BattlegroundWGScore final : public BattlegroundScore data << uint32(FlagReturns); } + uint32 GetAttr1() const { return FlagCaptures; } + uint32 GetAttr2() const { return FlagReturns; } + uint32 FlagCaptures; uint32 FlagReturns; }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 4de9cb34df6..184637b0a1d 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1021,6 +1021,7 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_BATTLEGROUND_CAST_DESERTER] = sConfigMgr->GetBoolDefault("Battleground.CastDeserter", true); m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.Enable", false); m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.PlayerOnly", false); + m_bool_configs[CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.StoreStatistics.Enable", false); m_int_configs[CONFIG_BATTLEGROUND_INVITATION_TYPE] = sConfigMgr->GetIntDefault ("Battleground.InvitationType", 0); m_int_configs[CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER] = sConfigMgr->GetIntDefault ("Battleground.PrematureFinishTimer", 5 * MINUTE * IN_MILLISECONDS); m_int_configs[CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH] = sConfigMgr->GetIntDefault ("Battleground.PremadeGroupWaitForMatch", 30 * MINUTE * IN_MILLISECONDS); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index cb87e1739c2..fd31099a5ea 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -121,6 +121,7 @@ enum WorldBoolConfigs CONFIG_BATTLEGROUND_CAST_DESERTER, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY, + CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE, CONFIG_BG_XP_FOR_KILL, CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS, CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE, diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 24e61e7399a..0669d0b84f9 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -600,4 +600,10 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_CHAR_PET_SLOT_BY_ID, "UPDATE character_pet SET slot = ? WHERE owner = ? AND id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_PET_BY_ID, "DELETE FROM character_pet WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_PET_BY_SLOT, "DELETE FROM character_pet WHERE owner = ? AND (slot = ? OR slot > ?)", CONNECTION_ASYNC); + + // PvPstats + PrepareStatement(CHAR_SEL_PVPSTATS_MAXID, "SELECT MAX(id) FROM pvpstats_battlegrounds", CONNECTION_SYNCH); + PrepareStatement(CHAR_INS_PVPSTATS_BATTLEGROUND, "INSERT INTO pvpstats_battlegrounds (id, winner_faction, bracket_id, type, date) VALUES (?, ?, ?, ?, NOW())", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + } diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index c73f0df8d00..19b5fef82eb 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -534,6 +534,10 @@ enum CharacterDatabaseStatements CHAR_DEL_ITEMCONTAINER_MONEY, CHAR_INS_ITEMCONTAINER_MONEY, + CHAR_SEL_PVPSTATS_MAXID, + CHAR_INS_PVPSTATS_BATTLEGROUND, + CHAR_INS_PVPSTATS_PLAYER, + MAX_CHARACTERDATABASE_STATEMENTS }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index d98a061b9f3..ee6def23c3e 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2059,6 +2059,14 @@ Battleground.QueueAnnouncer.Enable = 0 Battleground.QueueAnnouncer.PlayerOnly = 0 +# +# Battleground.StoreStatistics.Enable +# Description: Store Battleground scores in the database. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.StoreStatistics.Enable = 0 + # # Battleground.InvitationType # Description: Set Battleground invitation type. -- cgit v1.2.3 From 86db9598856155c36fe61772a337a7d4cc14e56b Mon Sep 17 00:00:00 2001 From: DDuarte Date: Thu, 28 Aug 2014 16:10:13 +0100 Subject: Core/BGs: Add overrides to GetAttrX methods --- src/server/game/Battlegrounds/Zones/BattlegroundAB.h | 4 ++-- src/server/game/Battlegrounds/Zones/BattlegroundAV.h | 10 +++++----- src/server/game/Battlegrounds/Zones/BattlegroundEY.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundIC.h | 4 ++-- src/server/game/Battlegrounds/Zones/BattlegroundSA.h | 4 ++-- src/server/game/Battlegrounds/Zones/BattlegroundWS.h | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index e44c2682094..aed82efd5cb 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -267,8 +267,8 @@ struct BattlegroundABScore final : public BattlegroundScore data << uint32(BasesDefended); } - uint32 GetAttr1() const { return BasesAssaulted; } - uint32 GetAttr2() const { return BasesDefended; } + uint32 GetAttr1() const final override { return BasesAssaulted; } + uint32 GetAttr2() const final override { return BasesDefended; } uint32 BasesAssaulted; uint32 BasesDefended; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index ac8eebf8cfa..b56ec2ca489 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -1568,11 +1568,11 @@ struct BattlegroundAVScore final : public BattlegroundScore data << uint32(MinesCaptured); } - uint32 GetAttr1() const { return GraveyardsAssaulted; } - uint32 GetAttr2() const { return GraveyardsDefended; } - uint32 GetAttr3() const { return TowersAssaulted; } - uint32 GetAttr4() const { return TowersDefended; } - uint32 GetAttr5() const { return MinesCaptured; } + uint32 GetAttr1() const final override { return GraveyardsAssaulted; } + uint32 GetAttr2() const final override { return GraveyardsDefended; } + uint32 GetAttr3() const final override { return TowersAssaulted; } + uint32 GetAttr4() const final override { return TowersDefended; } + uint32 GetAttr5() const final override { return MinesCaptured; } uint32 GraveyardsAssaulted; uint32 GraveyardsDefended; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 7482973d45a..408037b254e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -349,7 +349,7 @@ struct BattlegroundEYScore final : public BattlegroundScore data << uint32(FlagCaptures); } - uint32 GetAttr1() const { return FlagCaptures; } + uint32 GetAttr1() const final override { return FlagCaptures; } uint32 FlagCaptures; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index 9c09df64ba0..c772078a647 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -878,8 +878,8 @@ struct BattlegroundICScore final : public BattlegroundScore data << uint32(BasesDefended); } - uint32 GetAttr1() const { return BasesAssaulted; } - uint32 GetAttr2() const { return BasesDefended; } + uint32 GetAttr1() const final override { return BasesAssaulted; } + uint32 GetAttr2() const final override { return BasesDefended; } uint32 BasesAssaulted; uint32 BasesDefended; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index bb53428c264..eae9e02ba9e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -538,8 +538,8 @@ struct BattlegroundSAScore final : public BattlegroundScore data << uint32(GatesDestroyed); } - uint32 GetAttr1() const { return DemolishersDestroyed; } - uint32 GetAttr2() const { return GatesDestroyed; } + uint32 GetAttr1() const final override { return DemolishersDestroyed; } + uint32 GetAttr2() const final override { return GatesDestroyed; } uint32 DemolishersDestroyed; uint32 GatesDestroyed; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index 78bbb071c6f..71bd5d53047 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -177,8 +177,8 @@ struct BattlegroundWGScore final : public BattlegroundScore data << uint32(FlagReturns); } - uint32 GetAttr1() const { return FlagCaptures; } - uint32 GetAttr2() const { return FlagReturns; } + uint32 GetAttr1() const final override { return FlagCaptures; } + uint32 GetAttr2() const final override { return FlagReturns; } uint32 FlagCaptures; uint32 FlagReturns; -- cgit v1.2.3 From eccb0ed3dac67a7463cc5c1ff5cf2cd3919e7a25 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Thu, 28 Aug 2014 20:16:16 +0200 Subject: Scripts/Quest: Fix some movement stuff for Quest "Death Comes From On High" --- sql/updates/world/2014_08_28_00_world_misc.sql | 70 +++++++++++++ .../EasternKingdoms/ScarletEnclave/chapter1.cpp | 113 +++++++++++++++++++++ src/server/scripts/Spells/spell_quest.cpp | 33 +++++- 3 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2014_08_28_00_world_misc.sql (limited to 'src') diff --git a/sql/updates/world/2014_08_28_00_world_misc.sql b/sql/updates/world/2014_08_28_00_world_misc.sql new file mode 100644 index 00000000000..d97536a836d --- /dev/null +++ b/sql/updates/world/2014_08_28_00_world_misc.sql @@ -0,0 +1,70 @@ +SET @OGUID := 75529; + + +UPDATE `creature_template` SET `AIName`='SmartAi' WHERE `entry`=29525; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=29525 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=30154 AND `source_type`=0 AND `id`=5; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(30154, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 103591, 29525, 0, 0, 0, 0, 0, 'Agnetta Tyrsdottar - On Death - Set Data to Zeev Fizzlespark'), +(29525, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 1, 0, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Zeev Fizzlespark - On Data Set - Say Line'), +(29525, 0, 1, 0, 52, 0, 100, 0, 0, 29525, 0, 0, 53, 1, 29525, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Zeev Fizzlespark - On Data Set - Say Line'), +(29525, 0, 2, 0, 40, 0, 100, 0, 8, 29525, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Zeev Fizzlespark - On Reached WP8 - Despawn'); + +DELETE FROM `creature_text` WHERE `entry`=29525; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +(29525, 0, 0, 'Thank you, thank you! Time to get away from these crazy blue women!', 12, 0, 100, 0, 0, 0, 'Zeev Fizzlespark',30803); + +DELETE FROM `waypoints` WHERE `entry` =29525; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(29525, 1,6887.515, -1586.146, 821.6108, 'Zeev Fizzlespark'), +(29525, 2,6879.559, -1576.52, 822.1594, 'Zeev Fizzlespark'), +(29525, 3,6864.559, -1565.27, 821.4094, 'Zeev Fizzlespark'), +(29525, 4,6864.395, -1565.045, 821.4877, 'Zeev Fizzlespark'), +(29525, 5,6859.145, -1561.045, 821.4877, 'Zeev Fizzlespark'), +(29525, 6,6847.645, -1552.295, 820.9877, 'Zeev Fizzlespark'), +(29525, 7,6844.395, -1549.795, 820.2377, 'Zeev Fizzlespark'), +(29525, 8,6839.645, -1546.045, 819.7377, 'Zeev Fizzlespark'); + +DELETE FROM `gameobject` WHERE `id` IN(191844,191845); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 191844, 571, 1, 1, 8535.68, -496.9023, 823.1414, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+1, 191844, 571, 1, 1, 8546.7, -263.9755, 807.7084, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+2, 191845, 571, 1, 1, 8637.927, -217.2614, 570.3714, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+3, 191844, 571, 1, 1, 8573.364, -92.22021, 673.306, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+4, 191845, 571, 1, 1, 8560.149, -62.62316, 702.3484, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+5, 191845, 571, 1, 1, 8626.088, 33.92166, 572.9097, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+6, 191845, 571, 1, 1, 8614.603, 88.68297, 637.397, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+7, 191844, 571, 1, 1, 8747.084, 9.606879, 296.9369, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+8, 191845, 571, 1, 1, 8579.567, 82.29688, 692.7102, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+9, 191845, 571, 1, 1, 8547.95, -10.12207, 741.0126, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+10, 191844, 571, 1, 1, 8595.69, 112.1224, 662.7746, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+11, 191844, 571, 1, 1, 8607.703, 209.4077, 665.7949, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+12, 191844, 571, 1, 1, 8611.642, 271.6101, 615.5172, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+13, 191844, 571, 1, 1, 8748.884, 312.8568, 299.133, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+14, 191845, 571, 1, 1, 8621.576, 330.7877, 541.5576, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+15, 191845, 571, 1, 1, 8605.192, 312.1095, 579.5255, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+16, 191844, 571, 1, 1, 8684.777, 359.4482, 428.7368, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+17, 191844, 571, 1, 1, 8789.41, 71.40159, 293.1991, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+18, 191844, 571, 1, 1, 8763.857, -67.66808, 138.1753, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+19, 191844, 571, 1, 1, 8774.313, -173.6759, 149.9866, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+20, 191845, 571, 1, 1, 8789.631, -235.4283, 51.76108, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+21, 191844, 571, 1, 1, 8804.998, -172.7898, 84.4473, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+22, 191844, 571, 1, 1, 8699.403, -518.3983, 548.7347, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+23, 191844, 571, 1, 1, 8576.837, -359.9985, 752.7386, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+24, 191844, 571, 1, 1, 8814.698, 129.815, 148.0139, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+25, 191845, 571, 1, 1, 8843.197, 133.3464, 85.0244, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+26, 191844, 571, 1, 1, 8804.185, 280.4642, 290.4794, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+27, 191844, 571, 1, 1, 8626.088, 33.92166, 572.9097, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+28, 191845, 571, 1, 1, 8670.649, -96.9744, 480.4034, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+29, 191844, 571, 1, 1, 8532.542, 68.41764, 725.706, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+30, 191845, 571, 1, 1, 8533.337, -67.05301, 737.9224, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+31, 191845, 571, 1, 1, 8578.229, 145.1865, 697.3944, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+32, 191844, 571, 1, 1, 8549.121, 307.6241, 663.9405, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+33, 191845, 571, 1, 1, 8562.427, 317.5042, 614.5561, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+34, 191844, 571, 1, 1, 8518.978, 314.5187, 762.0441, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+35, 191844, 571, 1, 1, 8748.884, 312.8568, 299.133, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 191844 (Area: 67) +(@OGUID+36, 191845, 571, 1, 1, 8632.458, -147.1184, 579.8124, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+37, 191845, 571, 1, 1, 8685.321, -255.6193, 550.6371, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 191845 (Area: 67) +(@OGUID+38, 191844, 571, 1, 1, 8558.689, -286.8528, 704.2544, 2.146753, 0, 0, 0, 1, 120, 255, 1); -- 191844 (Area: 67) diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index ae6aaef9999..95990f18829 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -26,6 +26,7 @@ #include "Player.h" #include "SpellInfo.h" #include "CreatureTextMgr.h" +#include "MoveSplineInit.h" /*###### ##Quest 12848 @@ -322,6 +323,117 @@ public: }; + /*###### +## npc_eye_of_acherus +######*/ + +enum EyeOfAcherus +{ + SPELL_EYE_VISUAL = 51892, + SPELL_EYE_FLIGHT_BOOST = 51923, + SPELL_EYE_FLIGHT = 51890, + + EVENT_MOVE_START = 1, + + TALK_MOVE_START = 0, + TALK_CONTROL = 1, + + POINT_EYE_FALL = 1, + POINT_EYE_MOVE_END = 3 +}; + +Position const EyeOFAcherusFallPoint = { 2361.21f, -5660.45f, 496.7444f, 0.0f }; + +class npc_eye_of_acherus : public CreatureScript +{ + public: + npc_eye_of_acherus() : CreatureScript("npc_eye_of_acherus") { } + + struct npc_eye_of_acherusAI : public ScriptedAI + { + npc_eye_of_acherusAI(Creature* creature) : ScriptedAI(creature) + { + me->SetDisplayId(me->GetCreatureTemplate()->Modelid1); + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + owner->SendAutoRepeatCancel(me); + + me->SetReactState(REACT_PASSIVE); + + me->GetMotionMaster()->MovePoint(POINT_EYE_FALL, EyeOFAcherusFallPoint, false); + + Movement::MoveSplineInit init(me); + init.MoveTo(EyeOFAcherusFallPoint.GetPositionX(), EyeOFAcherusFallPoint.GetPositionY(), EyeOFAcherusFallPoint.GetPositionZ(), false); + init.SetFall(); + init.Launch(); + } + + void OnCharmed(bool /*apply*/) override { } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_MOVE_START: + { + DoCast(me, SPELL_EYE_FLIGHT_BOOST); + + me->SetControlled(false, UNIT_STATE_ROOT); + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + { + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) + me->SetSpeed(UnitMoveType(i), owner->GetSpeedRate(UnitMoveType(i)), true); + Talk(TALK_MOVE_START, owner); + } + me->GetMotionMaster()->MovePath(me->GetEntry() * 100, false); + break; + } + default: + break; + } + } + } + + void MovementInform(uint32 movementType, uint32 pointId) override + { + if (movementType == WAYPOINT_MOTION_TYPE && pointId == POINT_EYE_MOVE_END - 1) + { + me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); + me->RemoveAllAuras(); + + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + { + owner->RemoveAura(SPELL_EYE_FLIGHT_BOOST); + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) + me->SetSpeed(UnitMoveType(i), owner->GetSpeedRate(UnitMoveType(i)), true); + + TalkToMap(TALK_CONTROL, owner); + } + me->SetDisableGravity(false); + DoCast(me, SPELL_EYE_FLIGHT); + } + + if (movementType == POINT_MOTION_TYPE && pointId == POINT_EYE_FALL) + { + me->SetDisableGravity(true); + me->SetControlled(true, UNIT_STATE_ROOT); + _events.ScheduleEvent(EVENT_MOVE_START, 5000); + } + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_eye_of_acherusAI(creature); + } +}; + /*###### ## npc_death_knight_initiate ######*/ @@ -1079,6 +1191,7 @@ void AddSC_the_scarlet_enclave_c1() new npc_unworthy_initiate(); new npc_unworthy_initiate_anchor(); new go_acherus_soul_prison(); + new npc_eye_of_acherus(); new npc_death_knight_initiate(); new npc_salanar_the_horseman(); new npc_dark_rider_of_acherus(); diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 173e03fef7c..f17aac51519 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -2026,7 +2026,6 @@ class spell_q12308_escape_from_silverbrook_summon_worgen : public SpellScriptLoa } }; - enum DeathComesFromOnHigh { SPELL_FORGE_CREDIT = 51974, @@ -2097,6 +2096,37 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader } }; +// 52694 - Recall Eye of Acherus +class spell_q12641_recall_eye_of_acherus : public SpellScriptLoader +{ + public: + spell_q12641_recall_eye_of_acherus() : SpellScriptLoader("spell_q12641_recall_eye_of_acherus") { } + + class spell_q12641_recall_eye_of_acherus_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q12641_recall_eye_of_acherus_SpellScript); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->GetCharmerOrOwner()->ToPlayer()) + { + player->StopCastingCharm(); + player->StopCastingBindSight(); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_q12641_recall_eye_of_acherus_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_q12641_recall_eye_of_acherus_SpellScript(); + } +}; + // 51769 - Emblazon Runeblade class spell_q12619_emblazon_runeblade : public SpellScriptLoader { @@ -2364,6 +2394,7 @@ void AddSC_quest_spell_scripts() new spell_q12308_escape_from_silverbrook_summon_worgen(); new spell_q12308_escape_from_silverbrook(); new spell_q12641_death_comes_from_on_high(); + new spell_q12641_recall_eye_of_acherus(); new spell_q12619_emblazon_runeblade(); new spell_q12619_emblazon_runeblade_effect(); new spell_q12919_gymers_grab(); -- cgit v1.2.3