diff options
Diffstat (limited to 'src')
68 files changed, 463 insertions, 195 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index fbcffb47b7c..c79deb5d960 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -466,7 +466,7 @@ enum SMART_ACTION SMART_ACTION_SET_VISIBILITY = 47, // on/off SMART_ACTION_SET_ACTIVE = 48, // on/off SMART_ACTION_ATTACK_START = 49, // - SMART_ACTION_SUMMON_GO = 50, // GameObjectID, DespawnTime in ms, + SMART_ACTION_SUMMON_GO = 50, // GameObjectID, DespawnTime in s SMART_ACTION_KILL_UNIT = 51, // SMART_ACTION_ACTIVATE_TAXI = 52, // TaxiID SMART_ACTION_WP_START = 53, // run/walk, pathID, canRepeat, quest, despawntime, reactState diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 1bc83cccaa0..e58c09251ba 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -240,7 +240,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result) newMember.Name = fields[6].GetString(); newMember.Class = fields[7].GetUInt8(); newMember.PersonalRating = fields[8].GetUInt16(); - newMember.MatchMakerRating = fields[9].GetUInt16() > 0 ? fields[9].GetUInt16() : 1500; + newMember.MatchMakerRating = fields[9].GetUInt16() > 0 ? fields[9].GetUInt16() : sWorld->getIntConfig(CONFIG_ARENA_START_MATCHMAKER_RATING); // Delete member if character information is missing if (newMember.Name.empty()) 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..aed82efd5cb 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 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 882d729c1e8..b56ec2ca489 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 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; uint32 TowersAssaulted; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 4a146a17917..408037b254e 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 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 5a9b47ec9b5..c772078a647 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 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 627c23850d2..eae9e02ba9e 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 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 d29715c982b..71bd5d53047 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 final override { return FlagCaptures; } + uint32 GetAttr2() const final override { return FlagReturns; } + uint32 FlagCaptures; uint32 FlagReturns; }; diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h index fb93af2c310..eee45ba5b97 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.h +++ b/src/server/game/Chat/Channels/ChannelMgr.h @@ -26,6 +26,8 @@ #include "World.h" +#define MAX_CHANNEL_PASS_STR 31 + class ChannelMgr { typedef std::map<std::wstring, Channel*> ChannelMap; diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 50f67d4f920..265197e9c3b 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -1148,7 +1148,7 @@ bool ChatHandler::extractPlayerTarget(char* args, Player** player, uint64* playe } else { - Player* pl = getSelectedPlayer(); + Player* pl = getSelectedPlayerOrSelf(); // if allowed player pointer if (player) *player = pl; diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 32820de0fc2..c0e3da32b3f 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -112,7 +112,7 @@ class ChatHandler GameTele const* extractGameTeleFromLink(char* text); bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &player, Group* &group, uint64 &guid, bool offline = false); std::string extractPlayerNameFromLink(char* text); - // select by arg (name/link) or in-game selection online/offline player + // select by arg (name/link) or in-game selection online/offline player or self if a creature is selected bool extractPlayerTarget(char* args, Player** player, uint64* player_guid = NULL, std::string* player_name = NULL); std::string playerLink(std::string const& name) const { return m_session ? "|cffffffff|Hplayer:"+name+"|h["+name+"]|h|r" : name; } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index cdc61f8b2ff..85381c1dfd9 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -700,7 +700,7 @@ class WorldObject : public Object, public WorldLocation TempSummon* SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0) const; TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0) const; - GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime); + GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /* s */); Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL); void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = NULL); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1fc1cd9f7b8..2876b4fc67d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22684,6 +22684,8 @@ bool Player::ModifyMoney(int32 amount, bool sendError /*= true*/) SetMoney(GetMoney() + amount); else { + sScriptMgr->OnPlayerMoneyLimit(this, amount); + if (sendError) SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL); return false; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d75e7db11fe..bfa57ef64b8 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14333,7 +14333,18 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u // Remove charge (aura can be removed by triggers) if (prepare && useCharges && takeCharges) - i->aura->DropCharge(); + { + // Set charge drop delay (only for missiles) + if ((procExtra & PROC_EX_REFLECT) && target && procSpell && procSpell->Speed > 0.0f) + { + // Set up missile speed based delay (from Spell.cpp: Spell::AddUnitTarget()::L2237) + uint32 delay = uint32(std::floor(std::max<float>(target->GetDistance(this), 5.0f) / procSpell->Speed * 1000.0f)); + // Schedule charge drop + i->aura->DropChargeDelayed(delay); + } + else + i->aura->DropCharge(); + } i->aura->CallScriptAfterProcHandlers(aurApp, eventInfo); diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index cda6e7a4efb..d528aed6f34 100644 --- a/src/server/game/Handlers/ChannelHandler.cpp +++ b/src/server/game/Handlers/ChannelHandler.cpp @@ -100,6 +100,9 @@ void WorldSession::HandleChannelPassword(WorldPacket& recvPacket) TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_PASSWORD %s Channel: %s, Password: %s", GetPlayerInfo().c_str(), channelName.c_str(), password.c_str()); + if (password.length() > MAX_CHANNEL_PASS_STR) + return; + if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->Password(GetPlayer(), password); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 243a931d463..9e29fb01c3b 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -159,7 +159,7 @@ void Map::LoadMap(int gx, int gy, bool reload) // load grid map for base map if (!m_parentMap->GridMaps[gx][gy]) - m_parentMap->EnsureGridCreated_i(GridCoord(63-gx, 63-gy)); + m_parentMap->EnsureGridCreated(GridCoord(63-gx, 63-gy)); ((MapInstanced*)(m_parentMap))->AddGridMapReference(GridCoord(gx, gy)); GridMaps[gx][gy] = m_parentMap->GridMaps[gx][gy]; diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index daa4c36a442..d13c81ed059 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1180,6 +1180,11 @@ void ScriptMgr::OnPlayerMoneyChanged(Player* player, int32& amount) FOREACH_SCRIPT(PlayerScript)->OnMoneyChanged(player, amount); } +void ScriptMgr::OnPlayerMoneyLimit(Player* player, int32 amount) +{ + FOREACH_SCRIPT(PlayerScript)->OnMoneyLimit(player, amount); +} + void ScriptMgr::OnGivePlayerXP(Player* player, uint32& amount, Unit* victim) { FOREACH_SCRIPT(PlayerScript)->OnGiveXP(player, amount, victim); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index ea25d51dab2..499d7ff6c09 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -706,6 +706,9 @@ class PlayerScript : public UnitScript // Called when a player's money is modified (before the modification is done) virtual void OnMoneyChanged(Player* /*player*/, int32& /*amount*/) { } + // Called when a player's money is at limit (amount = money tried to add) + virtual void OnMoneyLimit(Player* /*player*/, int32 /*amount*/) { } + // Called when a player gains XP (before anything is given) virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { } @@ -1053,6 +1056,7 @@ class ScriptMgr void OnPlayerFreeTalentPointsChanged(Player* player, uint32 newPoints); void OnPlayerTalentsReset(Player* player, bool noCost); void OnPlayerMoneyChanged(Player* player, int32& amount); + void OnPlayerMoneyLimit(Player* player, int32 amount); void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim); void OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental); void OnPlayerDuelRequest(Player* target, Player* challenger); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 348869075ee..07cfa80f297 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -335,7 +335,7 @@ m_spellInfo(spellproto), m_casterGuid(casterGUID ? casterGUID : caster->GetGUID( m_castItemGuid(castItem ? castItem->GetGUID() : 0), m_applyTime(time(NULL)), m_owner(owner), m_timeCla(0), m_updateTargetMapInterval(0), m_casterLevel(caster ? caster->getLevel() : m_spellInfo->SpellLevel), m_procCharges(0), m_stackAmount(1), -m_isRemoved(false), m_isSingleTarget(false), m_isUsingCharges(false) +m_isRemoved(false), m_isSingleTarget(false), m_isUsingCharges(false), m_dropEvent(nullptr) { if (m_spellInfo->ManaPerSecond || m_spellInfo->ManaPerSecondPerLevel) m_timeCla = 1 * IN_MILLISECONDS; @@ -467,6 +467,12 @@ void Aura::_Remove(AuraRemoveMode removeMode) target->_UnapplyAura(aurApp, removeMode); appItr = m_applications.begin(); } + + if (m_dropEvent) + { + m_dropEvent->to_Abort = true; + m_dropEvent = nullptr; + } } void Aura::UpdateTargetMap(Unit* caster, bool apply) @@ -815,6 +821,26 @@ bool Aura::ModCharges(int32 num, AuraRemoveMode removeMode) return false; } +void Aura::ModChargesDelayed(int32 num, AuraRemoveMode removeMode) +{ + m_dropEvent = nullptr; + ModCharges(num, removeMode); +} + +void Aura::DropChargeDelayed(uint32 delay, AuraRemoveMode removeMode) +{ + // aura is already during delayed charge drop + if (m_dropEvent) + return; + // only units have events + Unit* owner = m_owner->ToUnit(); + if (!owner) + return; + + m_dropEvent = new ChargeDropEvent(this, removeMode); + owner->m_Events.AddEvent(m_dropEvent, owner->m_Events.CalculateTime(delay)); +} + void Aura::SetStackAmount(uint8 stackAmount) { m_stackAmount = stackAmount; @@ -2538,3 +2564,9 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8> & targets, Unit* /*caster* } } +bool ChargeDropEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) +{ + // _base is always valid (look in Aura::_Remove()) + _base->ModChargesDelayed(-1, _mode); + return true; +} diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index e578c0ffc3a..1266bf5c6ec 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -34,6 +34,7 @@ class Aura; class DynamicObject; class AuraScript; class ProcInfo; +class ChargeDropEvent; // update aura target map every 500 ms instead of every update - reduce amount of grid searcher calls #define UPDATE_TARGET_MAP_INTERVAL 500 @@ -131,7 +132,7 @@ class Aura void SetDuration(int32 duration, bool withMods = false); void RefreshDuration(bool withMods = false); void RefreshTimers(); - bool IsExpired() const { return !GetDuration();} + bool IsExpired() const { return !GetDuration() && !m_dropEvent; } bool IsPermanent() const { return GetMaxDuration() == -1; } uint8 GetCharges() const { return m_procCharges; } @@ -140,6 +141,8 @@ class Aura uint8 CalcMaxCharges() const { return CalcMaxCharges(GetCaster()); } bool ModCharges(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); bool DropCharge(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) { return ModCharges(-1, removeMode); } + void ModChargesDelayed(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); + void DropChargeDelayed(uint32 delay, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); uint8 GetStackAmount() const { return m_stackAmount; } void SetStackAmount(uint8 num); @@ -264,6 +267,8 @@ class Aura bool m_isSingleTarget:1; // true if it's a single target spell and registered at caster - can change at spell steal for example bool m_isUsingCharges:1; + ChargeDropEvent* m_dropEvent; + private: Unit::AuraApplicationList m_removedApplications; }; @@ -299,4 +304,16 @@ class DynObjAura : public Aura void FillTargetMap(std::map<Unit*, uint8> & targets, Unit* caster) override; }; + +class ChargeDropEvent : public BasicEvent +{ + friend class Aura; + protected: + ChargeDropEvent(Aura* base, AuraRemoveMode mode) : _base(base), _mode(mode) { } + bool Execute(uint64 /*e_time*/, uint32 /*p_time*/); + + private: + Aura* _base; + AuraRemoveMode _mode; +}; #endif diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 5607b875cfe..f9c8c800ca5 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1022,6 +1022,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 5b4811af01c..b77f8777bdc 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -122,6 +122,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/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index ee307a1d065..dc00ad047da 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -628,7 +628,7 @@ public: return false; // can be NULL at console call - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); std::string namePart = args; std::wstring wNamePart; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index a3848c00877..9cb7173556a 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -662,7 +662,7 @@ public: static bool HandleCooldownCommand(ChatHandler* handler, char const* args) { - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 5dbe95b3e54..f70f17232eb 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -98,7 +98,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 6004cd0bc89..08603279824 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -53,7 +53,7 @@ public: static bool HandleQuestAdd(ChatHandler* handler, const char* args) { - Player* player = handler->getSelectedPlayer(); + Player* player = handler->getSelectedPlayerOrSelf(); if (!player) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -151,7 +151,7 @@ public: static bool HandleQuestComplete(ChatHandler* handler, const char* args) { - Player* player = handler->getSelectedPlayer(); + Player* player = handler->getSelectedPlayerOrSelf(); if (!player) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index b171bf014c7..220cf0c92b4 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -317,7 +317,7 @@ public: me->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[9], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); break; case 2: - if (GameObject* go = me->SummonGameObject(183410, -533.140f, -105.322f, -156.016f, 0, 0, 0, 0, 0, 1000)) + if (GameObject* go = me->SummonGameObject(183410, -533.140f, -105.322f, -156.016f, 0, 0, 0, 0, 0, 1)) { GoSummonList.push_back(go->GetGUID()); go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it! @@ -332,7 +332,7 @@ public: Talk(SAY_BLASTMASTER_7); break; case 4: - if (GameObject* go = me->SummonGameObject(183410, -542.199f, -96.854f, -155.790f, 0, 0, 0, 0, 0, 1000)) + if (GameObject* go = me->SummonGameObject(183410, -542.199f, -96.854f, -155.790f, 0, 0, 0, 0, 0, 1)) { GoSummonList.push_back(go->GetGUID()); go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); @@ -346,7 +346,7 @@ public: me->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[14], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); break; case 6: - if (GameObject* go = me->SummonGameObject(183410, -507.820f, -103.333f, -151.353f, 0, 0, 0, 0, 0, 1000)) + if (GameObject* go = me->SummonGameObject(183410, -507.820f, -103.333f, -151.353f, 0, 0, 0, 0, 0, 1)) { GoSummonList.push_back(go->GetGUID()); go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it! @@ -354,7 +354,7 @@ public: } break; case 7: - if (GameObject* go = me->SummonGameObject(183410, -511.829f, -86.249f, -151.431f, 0, 0, 0, 0, 0, 1000)) + if (GameObject* go = me->SummonGameObject(183410, -511.829f, -86.249f, -151.431f, 0, 0, 0, 0, 0, 1)) { GoSummonList.push_back(go->GetGUID()); go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it! 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/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 72757387b1c..e202e55e675 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1138,7 +1138,7 @@ public: case 48: // Show the cleansing effect (dawn of light) //if (GameObject* go = me->GetMap()->GetGameObject(uiDawnofLightGUID)) // go->SetPhaseMask(128, true); - me->SummonGameObject(GO_LIGHT_OF_DAWN, 2283.896f, -5287.914f, 83.066f, 0, 0, 0, 0, 0, 30000); + me->SummonGameObject(GO_LIGHT_OF_DAWN, 2283.896f, -5287.914f, 83.066f, 0, 0, 0, 0, 0, 30); if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { if (temp->HasAura(SPELL_REBIRTH_OF_THE_ASHBRINGER, 0)) diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index 0f33103fc2c..789a5c3a874 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -183,13 +183,13 @@ public: /* void UseLastStatue(GameObject* go) { - AtalaiStatue1->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue1->GetPositionX(), AtalaiStatue1->GetPositionY(), AtalaiStatue1->GetPositionZ(), 0, 0, 0, 0, 0, 100000); - AtalaiStatue2->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue2->GetPositionX(), AtalaiStatue2->GetPositionY(), AtalaiStatue2->GetPositionZ(), 0, 0, 0, 0, 0, 100000); - AtalaiStatue3->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue3->GetPositionX(), AtalaiStatue3->GetPositionY(), AtalaiStatue3->GetPositionZ(), 0, 0, 0, 0, 0, 100000); - AtalaiStatue4->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue4->GetPositionX(), AtalaiStatue4->GetPositionY(), AtalaiStatue4->GetPositionZ(), 0, 0, 0, 0, 0, 100000); - AtalaiStatue5->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue5->GetPositionX(), AtalaiStatue5->GetPositionY(), AtalaiStatue5->GetPositionZ(), 0, 0, 0, 0, 0, 100000); - AtalaiStatue6->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue6->GetPositionX(), AtalaiStatue6->GetPositionY(), AtalaiStatue6->GetPositionZ(), 0, 0, 0, 0, 0, 100000); - go->SummonGameObject(148838, -488.997, 96.61, -189.019, -1.52, 0, 0, 0, 0, 100000); + AtalaiStatue1->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue1->GetPositionX(), AtalaiStatue1->GetPositionY(), AtalaiStatue1->GetPositionZ(), 0, 0, 0, 0, 0, 100); + AtalaiStatue2->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue2->GetPositionX(), AtalaiStatue2->GetPositionY(), AtalaiStatue2->GetPositionZ(), 0, 0, 0, 0, 0, 100); + AtalaiStatue3->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue3->GetPositionX(), AtalaiStatue3->GetPositionY(), AtalaiStatue3->GetPositionZ(), 0, 0, 0, 0, 0, 100); + AtalaiStatue4->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue4->GetPositionX(), AtalaiStatue4->GetPositionY(), AtalaiStatue4->GetPositionZ(), 0, 0, 0, 0, 0, 100); + AtalaiStatue5->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue5->GetPositionX(), AtalaiStatue5->GetPositionY(), AtalaiStatue5->GetPositionZ(), 0, 0, 0, 0, 0, 100); + AtalaiStatue6->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue6->GetPositionX(), AtalaiStatue6->GetPositionY(), AtalaiStatue6->GetPositionZ(), 0, 0, 0, 0, 0, 100); + go->SummonGameObject(148838, -488.997, 96.61, -189.019, -1.52, 0, 0, 0, 0, 100); } */ diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index ce9ed4f36c8..3e15a80fd74 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -204,7 +204,7 @@ public: case EVENT_COMPLETE: { DoCast(me, SPELL_IDOM_ROOM_CAMERA_SHAKE); - me->SummonGameObject(GO_BELNISTRASZS_BRAZIER, 2577.196f, 947.0781f, 53.16757f, 2.356195f, 0, 0, 0.9238796f, 0.3826832f, 3600000); + me->SummonGameObject(GO_BELNISTRASZS_BRAZIER, 2577.196f, 947.0781f, 53.16757f, 2.356195f, 0, 0, 0.9238796f, 0.3826832f, 3600); std::list<WorldObject*> ClusterList; Trinity::AllWorldObjectsInRange objects(me, 50.0f); Trinity::WorldObjectListSearcher<Trinity::AllWorldObjectsInRange> searcher(me, ClusterList, objects); diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp index bc6807c54d9..905761ce359 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -39,11 +39,8 @@ enum Spells SPELL_SPHERE_VISUAL = 56075, SPELL_GIFT_OF_THE_HERALD = 56219, SPELL_CYCLONE_STRIKE = 56855, // Self - SPELL_CYCLONE_STRIKE_H = 60030, SPELL_LIGHTNING_BOLT = 56891, // 40Y - SPELL_LIGHTNING_BOLT_H = 60032, // 40Y - SPELL_THUNDERSHOCK = 56926, // 30Y - SPELL_THUNDERSHOCK_H = 60029 // 30Y + SPELL_THUNDERSHOCK = 56926 // 30Y }; const Position JedogaPosition[2] = @@ -296,7 +293,7 @@ public: if (uiBoltTimer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - me->CastSpell(target, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false); + me->CastSpell(target, SPELL_LIGHTNING_BOLT, false); uiBoltTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS); } else uiBoltTimer -= diff; @@ -304,7 +301,7 @@ public: if (uiThunderTimer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - me->CastSpell(target, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false); + me->CastSpell(target, SPELL_THUNDERSHOCK, false); uiThunderTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS); } else uiThunderTimer -= diff; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 81e124cf5bc..4c3ca322574 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -41,9 +41,7 @@ enum Enums SPELL_BERSERK = 61632, // Increases the caster's attack speed by 150% and all damage it deals by 500% for 5 min. SPELL_CLEAVE = 56909, // Inflicts 35% weapon damage to an enemy and its nearest allies, affecting up to 10 targets. SPELL_FLAME_BREATH = 56908, // Inflicts 8750 to 11250 Fire damage to enemies in a cone in front of the caster. - SPELL_FLAME_BREATH_H = 58956, // Inflicts 10938 to 14062 Fire damage to enemies in a cone in front of the caster. SPELL_TAIL_LASH = 56910, // A sweeping tail strike hits all enemies behind the caster, inflicting 3063 to 3937 damage and stunning them for 2 sec. - SPELL_TAIL_LASH_H = 58957, // A sweeping tail strike hits all enemies behind the caster, inflicting 4375 to 5625 damage and stunning them for 2 sec. SPELL_WILL_OF_SARTHARION = 61254, // Sartharion's presence bolsters the resolve of the Twilight Drakes, increasing their total health by 25%. This effect also increases Sartharion's health by 25%. SPELL_LAVA_STRIKE = 57571, // (Real spell cast should be 57578) 57571 then trigger visual missile, then summon Lava Blaze on impact(spell 57572) SPELL_TWILIGHT_REVENGE = 60639, @@ -443,11 +441,11 @@ public: break; case EVENT_FLAME_BREATH: Talk(SAY_SARTHARION_BREATH); - DoCastVictim(RAID_MODE(SPELL_FLAME_BREATH, SPELL_FLAME_BREATH_H)); + DoCastVictim(SPELL_FLAME_BREATH); events.ScheduleEvent(EVENT_FLAME_BREATH, urand(25000, 35000)); break; case EVENT_TAIL_SWEEP: - DoCastVictim(RAID_MODE(SPELL_TAIL_LASH, SPELL_TAIL_LASH_H)); + DoCastVictim(SPELL_TAIL_LASH); events.ScheduleEvent(EVENT_TAIL_SWEEP, urand(15000, 20000)); break; case EVENT_CLEAVE_ATTACK: diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index e332e7959ce..0a712b69771 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -29,10 +29,7 @@ enum Enums SPELL_TWILIGHT_RESIDUE = 61885, // makes immune to shadow damage, applied when leave phase //Miniboses (Vesperon, Shadron, Tenebron) - SPELL_SHADOW_BREATH_H = 59126, // Inflicts 8788 to 10212 Fire damage to enemies in a cone in front of the caster. SPELL_SHADOW_BREATH = 57570, // Inflicts 6938 to 8062 Fire damage to enemies in a cone in front of the caster. - - SPELL_SHADOW_FISSURE_H = 59127, // Deals 9488 to 13512 Shadow damage to any enemy within the Shadow fissure after 5 sec. SPELL_SHADOW_FISSURE = 57579, // Deals 6188 to 8812 Shadow damage to any enemy within the Shadow fissure after 5 sec. //Vesperon @@ -49,7 +46,6 @@ enum Enums SPELL_GIFT_OF_TWILIGTH_SHA = 57835, // TARGET_SCRIPT shadron SPELL_GIFT_OF_TWILIGTH_SAR = 58766, // TARGET_SCRIPT sartharion SPELL_VOID_BLAST = 57581, // Twilight Fissure - SPELL_VOID_BLAST_H = 59128, //Tenebron //in the portal spawns 6 eggs, if not killed in time (approx. 20s) they will hatch, whelps can cast 60708 @@ -382,12 +378,12 @@ struct dummy_dragonAI : public ScriptedAI { case EVENT_SHADOW_FISSURE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) - DoCast(target, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE)); + DoCast(target, SPELL_SHADOW_FISSURE); events.ScheduleEvent(eventId, urand(15000, 20000)); break; case EVENT_SHADOW_BREATH: Talk(SAY_BREATH); - DoCastVictim(RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); + DoCastVictim(SPELL_SHADOW_BREATH); events.ScheduleEvent(eventId, urand(20000, 25000)); break; default: @@ -949,7 +945,7 @@ public: if (events.ExecuteEvent() == EVENT_VOID_BLAST) { - DoCastAOE(RAID_MODE(SPELL_VOID_BLAST, SPELL_VOID_BLAST_H)); + DoCastAOE(SPELL_VOID_BLAST); ////twilight realm //DoCastVictim(57620, true); //DoCastVictim(57874, true); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index ac8a7969c9d..5209e8b2f94 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -194,7 +194,7 @@ public: { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); + pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000); } } } @@ -217,7 +217,7 @@ public: { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); + pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000); } break; case BOSS_ARGENT_CHALLENGE_P: @@ -226,7 +226,7 @@ public: { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); + pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000); } break; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 6a664ec7f8d..7af55ec37ea 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -465,7 +465,7 @@ class npc_swarm_scarab : public CreatureScript void JustDied(Unit* killer) override { - DoCast(killer, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25)); + DoCast(killer, SPELL_TRAITOR_KING); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h index 8a62453d7c1..dc0f390f8e0 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h @@ -293,8 +293,7 @@ enum AchievementData SPELL_WORMS_KILLED_IN_10_SECONDS = 68523, SPELL_CHAMPIONS_KILLED_IN_MINUTE = 68620, SPELL_DEFEAT_FACTION_CHAMPIONS = 68184, - SPELL_TRAITOR_KING_10 = 68186, - SPELL_TRAITOR_KING_25 = 68515, + SPELL_TRAITOR_KING = 68186, // Timed events EVENT_START_TWINS_FIGHT = 21853 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 2a587e535a3..676e4134f11 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -38,10 +38,8 @@ enum Events enum Spells { - SPELL_IMPALE_10 = 28783, - SPELL_IMPALE_25 = 56090, - SPELL_LOCUST_SWARM_10 = 28785, - SPELL_LOCUST_SWARM_25 = 54021, + SPELL_IMPALE = 28783, + SPELL_LOCUST_SWARM = 28785, SPELL_SUMMON_CORPSE_SCARABS_PLR = 29105, // This spawns 5 corpse scarabs on top of player SPELL_SUMMON_CORPSE_SCARABS_MOB = 28864, // This spawns 10 corpse scarabs on top of dead guards SPELL_BERSERK = 27680 @@ -154,14 +152,14 @@ public: case EVENT_IMPALE: //Cast Impale on a random target //Do NOT cast it when we are afflicted by locust swarm - if (!me->HasAura(RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25))) + if (!me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LOCUST_SWARM, me))) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25)); + DoCast(target, SPELL_IMPALE); events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000)); break; case EVENT_LOCUST: /// @todo Add Text - DoCast(me, RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25)); + DoCast(me, SPELL_LOCUST_SWARM); DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN); events.ScheduleEvent(EVENT_LOCUST, 90000); break; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index 3d42827c0a8..ec273d5f6e8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -31,16 +31,12 @@ enum Yells enum Spells { SPELL_POISON_BOLT_VOLLEY = 28796, - H_SPELL_POISON_BOLT_VOLLEY = 54098, SPELL_RAIN_OF_FIRE = 28794, - H_SPELL_RAIN_OF_FIRE = 54099, SPELL_FRENZY = 28798, - H_SPELL_FRENZY = 54100, - SPELL_WIDOWS_EMBRACE = 28732, - H_SPELL_WIDOWS_EMBRACE = 54097 + SPELL_WIDOWS_EMBRACE = 28732 }; -#define SPELL_WIDOWS_EMBRACE_HELPER RAID_MODE(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE) +#define SPELL_WIDOWS_EMBRACE_HELPER RAID_MODE<uint32>(28732, 54097) enum Events { @@ -108,7 +104,7 @@ class boss_faerlina : public CreatureScript void SpellHit(Unit* caster, SpellInfo const* spell) override { - if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE) + if (spell->Id == SPELL_WIDOWS_EMBRACE_HELPER) { /// @todo Add Text ++_frenzyDispels; @@ -133,7 +129,7 @@ class boss_faerlina : public CreatureScript if (_delayFrenzy && !me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER)) { _delayFrenzy = false; - DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY), true); + DoCast(me, SPELL_FRENZY, true); } events.Update(diff); @@ -147,18 +143,18 @@ class boss_faerlina : public CreatureScript { case EVENT_POISON: if (!me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER)) - DoCastAOE(RAID_MODE(SPELL_POISON_BOLT_VOLLEY, H_SPELL_POISON_BOLT_VOLLEY)); + DoCastAOE(SPELL_POISON_BOLT_VOLLEY); events.ScheduleEvent(EVENT_POISON, urand(8000, 15000)); break; case EVENT_FIRE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_RAIN_OF_FIRE, H_SPELL_RAIN_OF_FIRE)); + DoCast(target, SPELL_RAIN_OF_FIRE); events.ScheduleEvent(EVENT_FIRE, urand(6000, 18000)); break; case EVENT_FRENZY: /// @todo Add Text if (!me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER)) - DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY)); + DoCast(me, SPELL_FRENZY); else _delayFrenzy = true; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index fa5a0c47808..648fc3c87d2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -35,7 +35,6 @@ enum Spells { SPELL_HARVEST_SOUL = 28679, SPELL_SHADOW_BOLT = 29317, - H_SPELL_SHADOW_BOLT = 56405, SPELL_INFORM_LIVE_TRAINEE = 27892, SPELL_INFORM_LIVE_KNIGHT = 27928, SPELL_INFORM_LIVE_RIDER = 27935, @@ -459,7 +458,7 @@ class boss_gothik : public CreatureScript } break; case EVENT_BOLT: - DoCastVictim(RAID_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT)); + DoCastVictim(SPELL_SHADOW_BOLT); events.ScheduleEvent(EVENT_BOLT, 1000); break; case EVENT_HARVEST: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index 5702987cc5a..9987802a165 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -27,9 +27,7 @@ enum Spells SPELL_WARN_NECROTIC_AURA = 59481, SPELL_SUMMON_SPORE = 29234, SPELL_DEATHBLOOM = 29865, - H_SPELL_DEATHBLOOM = 55053, - SPELL_INEVITABLE_DOOM = 29204, - H_SPELL_INEVITABLE_DOOM = 55052 + SPELL_INEVITABLE_DOOM = 29204 }; enum Texts @@ -111,12 +109,12 @@ class boss_loatheb : public CreatureScript events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14000); break; case EVENT_DEATHBLOOM: - DoCastAOE(RAID_MODE(SPELL_DEATHBLOOM, H_SPELL_DEATHBLOOM)); + DoCastAOE(SPELL_DEATHBLOOM); events.ScheduleEvent(EVENT_DEATHBLOOM, 30000); break; case EVENT_INEVITABLE_DOOM: _doomCounter++; - DoCastAOE(RAID_MODE(SPELL_INEVITABLE_DOOM, H_SPELL_INEVITABLE_DOOM)); + DoCastAOE(SPELL_INEVITABLE_DOOM); events.ScheduleEvent(EVENT_INEVITABLE_DOOM, std::max(120000 - _doomCounter * 15000, 15000)); // needs to be confirmed break; case EVENT_SPORE: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 7f7adefc2fb..5b02b7a2009 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -23,14 +23,10 @@ enum Spells { SPELL_WEB_WRAP = 28622, - SPELL_WEB_SPRAY_10 = 29484, - SPELL_WEB_SPRAY_25 = 54125, - SPELL_POISON_SHOCK_10 = 28741, - SPELL_POISON_SHOCK_25 = 54122, - SPELL_NECROTIC_POISON_10 = 28776, - SPELL_NECROTIC_POISON_25 = 54121, - SPELL_FRENZY_10 = 54123, - SPELL_FRENZY_25 = 54124, + SPELL_WEB_SPRAY = 29484, + SPELL_POISON_SHOCK = 28741, + SPELL_NECROTIC_POISON = 28776, + SPELL_FRENZY = 54123 }; enum Creatures @@ -108,7 +104,7 @@ public: { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP)) { - target->RemoveAura(RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25)); + target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_WEB_SPRAY, me)); uint8 pos = rand32() % MAX_POS_WRAP; target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20); if (Creature* wrap = DoSummon(NPC_WEB_WRAP, PosWrap[pos], 0, TEMPSUMMON_CORPSE_DESPAWN)) @@ -118,19 +114,19 @@ public: events.ScheduleEvent(EVENT_WRAP, 40000); break; case EVENT_SPRAY: - DoCastAOE(RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25)); + DoCastAOE(SPELL_WEB_SPRAY); events.ScheduleEvent(EVENT_SPRAY, 40000); break; case EVENT_SHOCK: - DoCastAOE(RAID_MODE(SPELL_POISON_SHOCK_10, SPELL_POISON_SHOCK_25)); + DoCastAOE(SPELL_POISON_SHOCK); events.ScheduleEvent(EVENT_SHOCK, urand(10000, 20000)); break; case EVENT_POISON: - DoCastVictim(RAID_MODE(SPELL_NECROTIC_POISON_10, SPELL_NECROTIC_POISON_25)); + DoCastVictim(SPELL_NECROTIC_POISON); events.ScheduleEvent(EVENT_POISON, urand(10000, 20000)); break; case EVENT_FRENZY: - DoCast(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true); + DoCast(me, SPELL_FRENZY, true); events.ScheduleEvent(EVENT_FRENZY, 600000); break; case EVENT_SUMMON: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index a47b75ec234..3e8a54f7cec 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -22,7 +22,6 @@ enum Spells { SPELL_HATEFUL_STRIKE = 41926, - H_SPELL_HATEFUL_STRIKE = 59192, SPELL_FRENZY = 28131, SPELL_BERSERK = 26662, SPELL_SLIME_BOLT = 32309 @@ -127,7 +126,7 @@ public: if (!pMostHPTarget) pMostHPTarget = me->GetVictim(); - DoCast(pMostHPTarget, RAID_MODE(SPELL_HATEFUL_STRIKE, H_SPELL_HATEFUL_STRIKE), true); + DoCast(pMostHPTarget, SPELL_HATEFUL_STRIKE, true); events.ScheduleEvent(EVENT_HATEFUL, 1000); break; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 6a3927d4aa0..ea345c0dee0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -140,7 +140,7 @@ class boss_sapphiron : public CreatureScript IceBlockMap::iterator itr = _iceblocks.find(target->GetGUID()); if (itr != _iceblocks.end() && !itr->second) { - if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25000)) + if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25)) itr->second = iceblock->GetGUID(); } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 34e21336547..0dfae16323b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -32,7 +32,6 @@ enum StalaggYells enum StalagSpells { SPELL_POWERSURGE = 28134, - H_SPELL_POWERSURGE = 54529, SPELL_MAGNETIC_PULL = 28338, SPELL_STALAGG_TESLA = 28097 }; @@ -48,7 +47,6 @@ enum FeugenYells enum FeugenSpells { SPELL_STATICFIELD = 28135, - H_SPELL_STATICFIELD = 54528, SPELL_FEUGEN_TESLA = 28109 }; @@ -80,7 +78,6 @@ enum ThaddiusSpells SPELL_POLARITY_SHIFT = 28089, SPELL_BALL_LIGHTNING = 28299, SPELL_CHAIN_LIGHTNING = 28167, - H_SPELL_CHAIN_LIGHTNING = 54531, SPELL_BERSERK = 27680, SPELL_POSITIVE_CHARGE = 28062, SPELL_POSITIVE_CHARGE_STACK = 29659, @@ -258,7 +255,7 @@ public: events.ScheduleEvent(EVENT_SHIFT, 30000); return; case EVENT_CHAIN: - DoCastVictim(RAID_MODE(SPELL_CHAIN_LIGHTNING, H_SPELL_CHAIN_LIGHTNING)); + DoCastVictim(SPELL_CHAIN_LIGHTNING); events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000)); return; case EVENT_BERSERK: @@ -358,7 +355,7 @@ public: if (powerSurgeTimer <= uiDiff) { - DoCast(me, RAID_MODE(SPELL_POWERSURGE, H_SPELL_POWERSURGE)); + DoCast(me, SPELL_POWERSURGE); powerSurgeTimer = urand(15000, 20000); } else powerSurgeTimer -= uiDiff; @@ -424,7 +421,7 @@ public: if (staticFieldTimer <= uiDiff) { - DoCast(me, RAID_MODE(SPELL_STATICFIELD, H_SPELL_STATICFIELD)); + DoCast(me, SPELL_STATICFIELD); staticFieldTimer = 5000; } else staticFieldTimer -= uiDiff; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 83082b18d73..ae48dd7aa9a 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -28,17 +28,14 @@ enum Spells { SPELL_BALL_LIGHTNING = 52780, - H_SPELL_BALL_LIGHTNING = 59800, SPELL_STATIC_OVERLOAD = 52658, - H_SPELL_STATIC_OVERLOAD = 59795, SPELL_DISPERSE = 52770, SPELL_SUMMON_SPARK = 52746, SPELL_SPARK_DESPAWN = 52776, - //Spark of Ionar - SPELL_SPARK_VISUAL_TRIGGER = 52667, - H_SPELL_SPARK_VISUAL_TRIGGER = 59833 + // Spark of Ionar + SPELL_SPARK_VISUAL_TRIGGER = 52667 }; enum Yells @@ -193,7 +190,7 @@ public: { lSparkList.Summon(summoned); - summoned->CastSpell(summoned, DUNGEON_MODE(SPELL_SPARK_VISUAL_TRIGGER, H_SPELL_SPARK_VISUAL_TRIGGER), true); + summoned->CastSpell(summoned, SPELL_SPARK_VISUAL_TRIGGER, true); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index 576fc4492f1..98d7d629756 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -45,11 +45,9 @@ enum Yells enum Spells { SPELL_ARC_LIGHTNING = 52921, - SPELL_LIGHTNING_NOVA_N = 52960, - SPELL_LIGHTNING_NOVA_H = 59835, + SPELL_LIGHTNING_NOVA = 52960, - SPELL_PULSING_SHOCKWAVE_N = 52961, - SPELL_PULSING_SHOCKWAVE_H = 59836, + SPELL_PULSING_SHOCKWAVE = 52961, SPELL_PULSING_SHOCKWAVE_AURA = 59414 }; @@ -134,7 +132,7 @@ public: DoCast(me, SPELL_PULSING_SHOCKWAVE_AURA, true); me->ClearUnitState(UNIT_STATE_CASTING); // this flag breaks movement - DoCast(me, SPELL_PULSING_SHOCKWAVE_N, true); + DoCast(me, SPELL_PULSING_SHOCKWAVE, true); m_uiResumePulsingShockwave_Timer = 0; } else @@ -155,9 +153,9 @@ public: { Talk(SAY_NOVA); Talk(EMOTE_NOVA); - DoCast(me, SPELL_LIGHTNING_NOVA_N); + DoCast(me, SPELL_LIGHTNING_NOVA); - me->RemoveAurasDueToSpell(DUNGEON_MODE<uint32>(SPELL_PULSING_SHOCKWAVE_N, SPELL_PULSING_SHOCKWAVE_H)); + me->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_PULSING_SHOCKWAVE, me)); m_uiResumePulsingShockwave_Timer = DUNGEON_MODE(5000, 4000); // Pause Pulsing Shockwave aura m_uiLightningNova_Timer = urand(20000, 21000); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index b424ce01b06..31805d3404f 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -39,10 +39,8 @@ enum Enums EMOTE_TO_ANVIL = 5, EMOTE_SHATTER = 6, - SPELL_HEAT_N = 52387, - SPELL_HEAT_H = 59528, - SPELL_SHATTERING_STOMP_N = 52237, - SPELL_SHATTERING_STOMP_H = 59529, + SPELL_HEAT = 52387, + SPELL_SHATTERING_STOMP = 52237, SPELL_TEMPER = 52238, SPELL_TEMPER_DUMMY = 52654, @@ -51,10 +49,8 @@ enum Enums // Molten Golem SPELL_BLAST_WAVE = 23113, - SPELL_IMMOLATION_STRIKE_N = 52433, - SPELL_IMMOLATION_STRIKE_H = 59530, - SPELL_SHATTER_N = 52429, - SPELL_SHATTER_H = 59527, + SPELL_IMMOLATION_STRIKE = 52433, + SPELL_SHATTER = 52429, NPC_VOLKHAN_ANVIL = 28823, NPC_MOLTEN_GOLEM = 28695, @@ -184,7 +180,7 @@ public: // Only shatter brittle golems if (temp->IsAlive() && temp->GetEntry() == NPC_BRITTLE_GOLEM) { - temp->CastSpell(temp, DUNGEON_MODE(SPELL_SHATTER_N, SPELL_SHATTER_H), false); + temp->CastSpell(temp, SPELL_SHATTER, false); GolemsShattered += 1; } } @@ -201,7 +197,7 @@ public: summoned->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f); // Why healing when just summoned? - summoned->CastSpell(summoned, DUNGEON_MODE(SPELL_HEAT_N, SPELL_HEAT_H), false, NULL, NULL, me->GetGUID()); + summoned->CastSpell(summoned, SPELL_HEAT, false, NULL, NULL, me->GetGUID()); } } @@ -253,7 +249,7 @@ public: // Should he stomp even if he has no brittle golem to shatter? Talk(SAY_STOMP); - DoCast(me, SPELL_SHATTERING_STOMP_N); + DoCast(me, SPELL_SHATTERING_STOMP); Talk(EMOTE_SHATTER); @@ -418,7 +414,7 @@ public: void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override { // This is the dummy effect of the spells - if (pSpell->Id == SPELL_SHATTER_N || pSpell->Id == SPELL_SHATTER_H) + if (pSpell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SHATTER, me)) if (me->GetEntry() == NPC_BRITTLE_GOLEM) me->DespawnOrUnsummon(); } @@ -439,7 +435,7 @@ public: if (m_uiImmolation_Timer <= uiDiff) { - DoCastVictim(SPELL_IMMOLATION_STRIKE_N); + DoCastVictim(SPELL_IMMOLATION_STRIKE); m_uiImmolation_Timer = 5000; } else diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index 683eb97a4f7..4ff0bd1e5cb 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -102,15 +102,12 @@ enum Spells // Kadrak SPELL_GLARE_OF_THE_TRIBUNAL = 50988, - H_SPELL_GLARE_OF_THE_TRIBUNAL = 59868, // Marnak SPELL_DARK_MATTER = 51012, - H_SPELL_DARK_MATTER = 59868, // Abedneum SPELL_SEARING_GAZE = 51136, - H_SPELL_SEARING_GAZE = 59867, SPELL_REWARD_ACHIEVEMENT = 59046, }; @@ -214,7 +211,7 @@ public: if (Creature* pKaddrak = ObjectAccessor::GetCreature(*me, *itr)) { if (pKaddrak->IsAlive()) - pKaddrak->CastSpell(target, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, H_SPELL_GLARE_OF_THE_TRIBUNAL), true); + pKaddrak->CastSpell(target, SPELL_GLARE_OF_THE_TRIBUNAL, true); } } uiKaddrakEncounterTimer = 1500; @@ -230,7 +227,7 @@ public: { summon->SetDisplayId(11686); summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - summon->CastSpell(target, DUNGEON_MODE(SPELL_DARK_MATTER, H_SPELL_DARK_MATTER), true); + summon->CastSpell(target, SPELL_DARK_MATTER, true); } } uiMarnakEncounterTimer = urand(30000, 31000); @@ -246,7 +243,7 @@ public: { summon->SetDisplayId(11686); summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - summon->CastSpell(target, DUNGEON_MODE(SPELL_SEARING_GAZE, H_SPELL_SEARING_GAZE), true); + summon->CastSpell(target, SPELL_SEARING_GAZE, true); } } uiAbedneumEncounterTimer = urand(30000, 31000); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 9a08f01c279..60698aac95e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -54,8 +54,7 @@ enum AssemblySpells SPELL_CHAIN_LIGHTNING = 61879, SPELL_OVERLOAD = 61869, SPELL_LIGHTNING_WHIRL = 61915, - SPELL_LIGHTNING_TENDRILS_10M = 61887, - SPELL_LIGHTNING_TENDRILS_25M = 63486, + SPELL_LIGHTNING_TENDRILS = 61887, SPELL_LIGHTNING_TENDRILS_VISUAL = 61883, SPELL_STORMSHIELD = 64187 }; @@ -561,8 +560,8 @@ class boss_stormcaller_brundir : public CreatureScript break; case EVENT_LIGHTNING_TENDRILS: Talk(SAY_BRUNDIR_FLIGHT); - DoCast(RAID_MODE(SPELL_LIGHTNING_TENDRILS_10M, SPELL_LIGHTNING_TENDRILS_25M)); - DoCast(SPELL_LIGHTNING_TENDRILS_VISUAL); + DoCast(me, SPELL_LIGHTNING_TENDRILS); + DoCast(me, SPELL_LIGHTNING_TENDRILS_VISUAL); me->AttackStop(); //me->SetLevitate(true); me->GetMotionMaster()->Initialize(); @@ -592,7 +591,7 @@ class boss_stormcaller_brundir : public CreatureScript break; case EVENT_GROUND: //me->SetLevitate(false); - me->RemoveAurasDueToSpell(RAID_MODE(SPELL_LIGHTNING_TENDRILS_10M, SPELL_LIGHTNING_TENDRILS_25M)); + me->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_TENDRILS, me)); me->RemoveAurasDueToSpell(SPELL_LIGHTNING_TENDRILS_VISUAL); DoStartMovement(me->GetVictim()); events.CancelEvent(EVENT_GROUND); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 399113e18c8..f5fe255fdf3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -242,7 +242,7 @@ class boss_razorscale_controller : public CreatureScript break; case ACTION_PLACE_BROKEN_HARPOON: for (uint8 n = 0; n < RAID_MODE(2, 4); n++) - me->SummonGameObject(GO_RAZOR_BROKEN_HARPOON, PosHarpoon[n].GetPositionX(), PosHarpoon[n].GetPositionY(), PosHarpoon[n].GetPositionZ(), 2.286f, 0, 0, 0, 0, 180000); + me->SummonGameObject(GO_RAZOR_BROKEN_HARPOON, PosHarpoon[n].GetPositionX(), PosHarpoon[n].GetPositionY(), PosHarpoon[n].GetPositionZ(), 2.286f, 0, 0, 0, 0, 180); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 8520e317ba3..1d2b1b24322 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -36,17 +36,14 @@ enum Spells { SPELL_TYMPANIC_TANTRUM = 62776, - SPELL_SEARING_LIGHT_10 = 63018, - SPELL_SEARING_LIGHT_25 = 65121, + SPELL_SEARING_LIGHT = 63018, SPELL_SUMMON_LIFE_SPARK = 64210, SPELL_SUMMON_VOID_ZONE = 64203, - SPELL_GRAVITY_BOMB_10 = 63024, - SPELL_GRAVITY_BOMB_25 = 64234, + SPELL_GRAVITY_BOMB = 63024, - SPELL_HEARTBREAK_10 = 65737, - SPELL_HEARTBREAK_25 = 64193, + SPELL_HEARTBREAK = 65737, // Cast by 33337 at Heartbreak: SPELL_RECHARGE_PUMMELER = 62831, // Summons 33344 @@ -66,12 +63,10 @@ enum Spells SPELL_SUBMERGE = 37751, //------------------VOID ZONE-------------------- - SPELL_VOID_ZONE_10 = 64203, - SPELL_VOID_ZONE_25 = 64235, + SPELL_VOID_ZONE = 64203, // Life Spark - SPELL_STATIC_CHARGED_10 = 64227, - SPELL_STATIC_CHARGED_25 = 64236, + SPELL_STATIC_CHARGED = 64227, SPELL_SHOCK = 64230, //----------------XT-002 HEART------------------- @@ -279,13 +274,13 @@ class boss_xt002 : public CreatureScript { case EVENT_SEARING_LIGHT: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25)); + DoCast(target, SPELL_SEARING_LIGHT); events.ScheduleEvent(EVENT_SEARING_LIGHT, TIMER_SEARING_LIGHT); break; case EVENT_GRAVITY_BOMB: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_GRAVITY_BOMB_10, SPELL_GRAVITY_BOMB_25)); + DoCast(target, SPELL_GRAVITY_BOMB); events.ScheduleEvent(EVENT_GRAVITY_BOMB, TIMER_GRAVITY_BOMB); break; @@ -304,7 +299,7 @@ class boss_xt002 : public CreatureScript break; case EVENT_ENTER_HARD_MODE: me->SetFullHealth(); - DoCast(me, RAID_MODE(SPELL_HEARTBREAK_10, SPELL_HEARTBREAK_25), true); + DoCast(me, SPELL_HEARTBREAK, true); me->AddLootMode(LOOT_MODE_HARD_MODE_1); _hardMode = true; SetPhaseOne(); @@ -735,7 +730,7 @@ class npc_life_spark : public CreatureScript void Reset() override { - DoCast(me, RAID_MODE(SPELL_STATIC_CHARGED_10, SPELL_STATIC_CHARGED_25)); + DoCast(me, SPELL_STATIC_CHARGED); _shockTimer = 0; // first one is immediate. } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index dfef80133c4..01e09ca2f9a 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -31,15 +31,11 @@ Script Data End */ enum Spells { SPELL_BANE = 48294, - H_SPELL_BANE = 59301, SPELL_DARK_SLASH = 48292, SPELL_FETID_ROT = 48291, - H_SPELL_FETID_ROT = 59300, SPELL_SCREAMS_OF_THE_DEAD = 51750, SPELL_SPIRIT_BURST = 48529, - H_SPELL_SPIRIT_BURST = 59305, SPELL_SPIRIT_STRIKE = 48423, - H_SPELL_SPIRIT_STRIKE = 59304, SPELL_ANCESTORS_VENGEANCE = 16939, SPELL_SUMMON_AVENGING_SPIRIT = 48592, @@ -48,8 +44,7 @@ enum Spells SPELL_CHANNEL_SPIRIT_TO_YMIRON = 48316, SPELL_CHANNEL_YMIRON_TO_SPIRIT = 48307, - SPELL_SPIRIT_FOUNT = 48380, - H_SPELL_SPIRIT_FOUNT = 59320 + SPELL_SPIRIT_FOUNT = 48380 }; //not in db @@ -278,7 +273,7 @@ public: if (Creature* temp = me->SummonCreature(NPC_SPIRIT_FOUNT, 385.0f + rand32() % 10, -330.0f + rand32() % 10, 104.756f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000)) { temp->SetSpeed(MOVE_RUN, 0.4f); - temp->CastSpell(temp, DUNGEON_MODE(SPELL_SPIRIT_FOUNT, H_SPELL_SPIRIT_FOUNT), true); + temp->CastSpell(temp, SPELL_SPIRIT_FOUNT, true); temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); temp->SetDisplayId(11686); m_uiOrbGUID = temp->GetGUID(); diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 9e2bb85e27a..1c106f399de 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -50,7 +50,6 @@ enum AzureInvaderSpells { SPELL_CLEAVE = 15496, SPELL_IMPALE = 58459, - H_SPELL_IMPALE = 59256, SPELL_BRUTAL_STRIKE = 58460, SPELL_SUNDER_ARMOR = 58461 }; @@ -58,23 +57,17 @@ enum AzureInvaderSpells enum AzureSellbreakerSpells { SPELL_ARCANE_BLAST = 58462, - H_SPELL_ARCANE_BLAST = 59257, SPELL_SLOW = 25603, SPELL_CHAINS_OF_ICE = 58464, - SPELL_CONE_OF_COLD = 58463, - H_SPELL_CONE_OF_COLD = 59258 + SPELL_CONE_OF_COLD = 58463 }; enum AzureBinderSpells { SPELL_ARCANE_BARRAGE = 58456, - H_SPELL_ARCANE_BARRAGE = 59248, SPELL_ARCANE_EXPLOSION = 58455, - H_SPELL_ARCANE_EXPLOSION = 59245, SPELL_FROST_NOVA = 58458, - H_SPELL_FROST_NOVA = 59253, - SPELL_FROSTBOLT = 58457, - H_SPELL_FROSTBOLT = 59251, + SPELL_FROSTBOLT = 58457 }; enum AzureMageSlayerSpells @@ -92,9 +85,7 @@ enum AzureCaptainSpells enum AzureSorcerorSpells { SPELL_ARCANE_STREAM = 60181, - H_SPELL_ARCANE_STREAM = 60204, - SPELL_MANA_DETONATION = 60182, - H_SPELL_MANA_DETONATION = 60205 + SPELL_MANA_DETONATION = 60182 }; enum AzureRaiderSpells @@ -912,7 +903,7 @@ public: { if (uiArcaneExplosionTimer <= diff) { - DoCast(DUNGEON_MODE(SPELL_ARCANE_EXPLOSION, H_SPELL_ARCANE_EXPLOSION)); + DoCast(SPELL_ARCANE_EXPLOSION); uiArcaneExplosionTimer = 5000; } else uiArcaneExplosionTimer -= diff; @@ -920,7 +911,7 @@ public: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (target) - DoCast(target, DUNGEON_MODE(SPELL_ARCANE_BARRAGE, H_SPELL_ARCANE_BARRAGE)); + DoCast(target, SPELL_ARCANE_BARRAGE); uiArcainBarrageTimer = 6000; } else uiArcainBarrageTimer -= diff; } @@ -929,7 +920,7 @@ public: { if (uiFrostNovaTimer <= diff) { - DoCast(DUNGEON_MODE(SPELL_FROST_NOVA, H_SPELL_FROST_NOVA)); + DoCast(SPELL_FROST_NOVA); uiFrostNovaTimer = 5000; } else uiFrostNovaTimer -= diff; @@ -937,7 +928,7 @@ public: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (target) - DoCast(target, DUNGEON_MODE(SPELL_FROSTBOLT, H_SPELL_FROSTBOLT)); + DoCast(target, SPELL_FROSTBOLT); uiFrostboltTimer = 6000; } else uiFrostboltTimer -= diff; } @@ -1164,7 +1155,7 @@ public: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (target) - DoCast(target, DUNGEON_MODE(SPELL_ARCANE_BLAST, H_SPELL_ARCANE_BLAST)); + DoCast(target, SPELL_ARCANE_BLAST); uiArcaneBlastTimer = 6000; } else uiArcaneBlastTimer -= diff; @@ -1189,7 +1180,7 @@ public: if (uiConeOfColdTimer <= diff) { - DoCast(DUNGEON_MODE(SPELL_CONE_OF_COLD, H_SPELL_CONE_OF_COLD)); + DoCast(SPELL_CONE_OF_COLD); uiConeOfColdTimer = 5000; } else uiConeOfColdTimer -= diff; } @@ -1296,14 +1287,14 @@ public: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (target) - DoCast(target, DUNGEON_MODE(SPELL_ARCANE_STREAM, H_SPELL_ARCANE_STREAM)); + DoCast(target, SPELL_ARCANE_STREAM); uiArcaneStreamTimer = urand(0, 5000)+5000; uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer; } else uiArcaneStreamTimer -= diff; if (uiManaDetonationTimer <= diff && uiArcaneStreamTimer >=1500 && uiArcaneStreamTimer <= uiArcaneStreamTimerStartingValueHolder/2) { - DoCast(DUNGEON_MODE(SPELL_MANA_DETONATION, H_SPELL_MANA_DETONATION)); + DoCast(SPELL_MANA_DETONATION); uiManaDetonationTimer = urand(2000, 6000); } else uiManaDetonationTimer -= diff; diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index d454b646647..905fe67af97 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -52,7 +52,6 @@ enum GrandmasterVorpil SPELL_SACRIFICE = 33587, SPELL_SHADOW_NOVA = 33846, SPELL_EMPOWERING_SHADOWS = 33783, - H_SPELL_EMPOWERING_SHADOWS = 39364, NPC_VOID_PORTAL = 19224, SPELL_SUMMON_PORTAL = 33566, @@ -245,7 +244,7 @@ class npc_voidtraveler : public CreatureScript if (_sacrificed) { - DoCastAOE(DUNGEON_MODE(SPELL_EMPOWERING_SHADOWS, H_SPELL_EMPOWERING_SHADOWS), true); + DoCastAOE(SPELL_EMPOWERING_SHADOWS, true); DoCast(me, SPELL_SHADOW_NOVA, true); me->Kill(me); return; diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 839dd800721..d2a93caf7a3 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -43,9 +43,7 @@ enum Says enum Spells { SPELL_FIREBALL = 34653, - SPELL_FIREBALL_H = 36920, SPELL_CONE_OF_FIRE = 30926, - SPELL_CONE_OF_FIRE_H = 36921, SPELL_SUMMON_LIQUID_FIRE = 23971, SPELL_SUMMON_LIQUID_FIRE_H = 30928, SPELL_BELLOWING_ROAR = 39427, @@ -116,7 +114,7 @@ class boss_nazan : public CreatureScript if (Fireball_Timer <= diff) { if (Unit* victim = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(victim, DUNGEON_MODE(SPELL_FIREBALL, SPELL_FIREBALL_H), true); + DoCast(victim, SPELL_FIREBALL, true); Fireball_Timer = urand(4000, 7000); } else @@ -156,7 +154,7 @@ class boss_nazan : public CreatureScript { if (ConeOfFire_Timer <= diff) { - DoCast(me, DUNGEON_MODE(SPELL_CONE_OF_FIRE, SPELL_CONE_OF_FIRE_H)); + DoCast(me, SPELL_CONE_OF_FIRE); ConeOfFire_Timer = 12000; Fireball_Timer = 4000; } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp index d2a1d101ae4..9114027b9fb 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp @@ -34,8 +34,7 @@ enum Says enum Spells { SPELL_SACRIFICE = 34661, - SPELL_HELLFIRE_NORMAL = 34659, - SPELL_HELLFIRE_HEROIC = 39131, + SPELL_HELLFIRE = 34659, SPELL_ENRAGE = 34670 }; @@ -119,7 +118,7 @@ class boss_thorngrin_the_tender : public CreatureScript break; case EVENT_HELLFIRE: Talk(SAY_CAST_HELLFIRE); - DoCastVictim(DUNGEON_MODE(SPELL_HELLFIRE_NORMAL, SPELL_HELLFIRE_HEROIC), true); + DoCastVictim(SPELL_HELLFIRE, true); events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); break; case EVENT_ENRAGE: diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp index bbb384ed0f8..8bc9d0982e3 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp @@ -40,7 +40,6 @@ enum Spells WAR_STOMP = 34716, SUMMON_TREANTS = 34727, // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon) ARCANE_VOLLEY = 36705, - ARCANE_VOLLEY_H = 39133, SPELL_HEAL_FATHER = 6262 }; @@ -208,7 +207,7 @@ class boss_warp_splinter : public CreatureScript //Check for Arcane Volley if (Arcane_Volley_Timer <= diff) { - DoCastVictim(DUNGEON_MODE(ARCANE_VOLLEY, ARCANE_VOLLEY_H)); + DoCastVictim(ARCANE_VOLLEY); Arcane_Volley_Timer = urand(20000, 35000); } else diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index d54eb6fff8c..03b8e7e69c8 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -1143,7 +1143,7 @@ public: { // Spell 37392 does not exist in dbc, manually spawning me->SummonCreature(NPC_OSCILLATING_FREQUENCY_SCANNER_TOP_BUNNY, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.5f, me->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 50000); - me->SummonGameObject(GO_OSCILLATING_FREQUENCY_SCANNER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 50000); + me->SummonGameObject(GO_OSCILLATING_FREQUENCY_SCANNER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 50); me->DespawnOrUnsummon(50000); } 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(); 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)) diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index 4cf2ef971eb..a191f37c76c 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -241,7 +241,7 @@ public: float x, y, z; go->GetClosePoint(x, y, z, go->GetObjectSize() / 3, 7.0f); - go->SummonGameObject(GO_HIGH_QUALITY_FUR, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0, 0, 0, 0, 0, 1000); + go->SummonGameObject(GO_HIGH_QUALITY_FUR, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0, 0, 0, 0, 0, 1); if (TempSummon* summon = player->SummonCreature(NPC_NESINGWARY_TRAPPER, x, y, z, go->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000)) { summon->SetVisible(false); 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/RemoteAccess/RASession.cpp b/src/server/worldserver/RemoteAccess/RASession.cpp index 846a4eb39e3..9892019ae5a 100644 --- a/src/server/worldserver/RemoteAccess/RASession.cpp +++ b/src/server/worldserver/RemoteAccess/RASession.cpp @@ -31,12 +31,12 @@ using boost::asio::ip::tcp; void RASession::Start() { - boost::asio::socket_base::bytes_readable command(true); - _socket.io_control(command); - std::size_t bytes_readable = command.get(); + // wait 1 second for active connections to send negotiation request + for (int counter = 0; counter < 10 && _socket.available() == 0; counter++) + std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Check if there are bytes available, if they are, then the client is requesting the negotiation - if (bytes_readable > 0) + if (_socket.available() > 0) { // Handle subnegotiation boost::array<char, 1024> buf; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index d2e871e9bcc..824a1ae475e 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2060,6 +2060,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. # Default: 0 - (Normal, Invite as much players to battlegrounds as queued, |