diff options
Diffstat (limited to 'src')
391 files changed, 3592 insertions, 3957 deletions
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index 80a810e4ce1..c4a130e7aa1 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -229,7 +229,7 @@ extern int main(int argc, char** argv) { CPU_ZERO(&mask); sched_getaffinity(0, sizeof(mask), &mask); - TC_LOG_INFO("server.authserver", "Using processors (bitmask, hex): %x", *(uint32*)(&mask)); + TC_LOG_INFO("server.authserver", "Using processors (bitmask, hex): %lx", *(__cpu_mask*)(&mask)); } } diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp index 6595b6238b2..41bc9089987 100644 --- a/src/server/authserver/Server/AuthSocket.cpp +++ b/src/server/authserver/Server/AuthSocket.cpp @@ -443,7 +443,7 @@ bool AuthSocket::_HandleLogonChallenge() if (!locked) { //set expired bans to inactive - LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS)); + LoginDatabase.DirectExecute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS)); // If the account is banned, reject the logon attempt stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED); diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 0d5af4f8802..7c0e04aa957 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -22,6 +22,7 @@ #include "Define.h" #include <list> #include "Object.h" +#include "QuestDef.h" #include "GameObject.h" #include "CreatureAI.h" @@ -51,7 +52,7 @@ class GameObjectAI virtual bool GossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, char const* /*code*/) { return false; } virtual bool QuestAccept(Player* /*player*/, Quest const* /*quest*/) { return false; } virtual bool QuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } - virtual uint32 GetDialogStatus(Player* /*player*/) { return 100; } + virtual uint32 GetDialogStatus(Player* /*player*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } virtual void Destroyed(Player* /*player*/, uint32 /*eventId*/) { } virtual uint32 GetData(uint32 /*id*/) const { return 0; } virtual void SetData64(uint32 /*id*/, uint64 /*value*/) { } diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index 18daf1ef8de..bc131724484 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -131,7 +131,7 @@ void PetAI::UpdateAI(uint32 diff) HandleReturnMovement(); } - // Autocast (casted only in combat or persistent spells in any state) + // Autocast (cast only in combat or persistent spells in any state) if (!me->HasUnitState(UNIT_STATE_CASTING)) { typedef std::vector<std::pair<Unit*, Spell*> > TargetSpellList; diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index 6f8452176e5..508554a7a32 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -52,7 +52,7 @@ void TotemAI::UpdateAI(uint32 /*diff*/) if (me->ToTotem()->GetTotemType() != TOTEM_ACTIVE) return; - if (!me->IsAlive() || me->IsNonMeleeSpellCasted(false)) + if (!me->IsAlive() || me->IsNonMeleeSpellCast(false)) return; // Search spell diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 2ec0e4ff3ca..c8c456b772f 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -38,9 +38,9 @@ void CreatureAI::OnCharmed(bool /*apply*/) AISpellInfoType* UnitAI::AISpellInfo; AISpellInfoType* GetAISpellInfo(uint32 i) { return &CreatureAI::AISpellInfo[i]; } -void CreatureAI::Talk(uint8 id, uint64 WhisperGuid) +void CreatureAI::Talk(uint8 id, WorldObject const* whisperTarget /*= NULL*/) { - sCreatureTextMgr->SendChat(me, id, WhisperGuid); + sCreatureTextMgr->SendChat(me, id, whisperTarget); } void CreatureAI::DoZoneInCombat(Creature* creature /*= NULL*/, float maxRangeToNearestTarget /* = 50.0f*/) diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 14cf0a05109..3efc9a831cb 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -78,7 +78,7 @@ class CreatureAI : public UnitAI Creature* DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN); public: - void Talk(uint8 id, uint64 WhisperGuid = 0); + void Talk(uint8 id, WorldObject const* whisperTarget = NULL); explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), m_MoveInLineOfSight_locked(false) { } virtual ~CreatureAI() { } diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 68c7869f8b7..d00f686a98a 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -156,7 +156,7 @@ void ScriptedAI::DoStopAttack() void ScriptedAI::DoCastSpell(Unit* target, SpellInfo const* spellInfo, bool triggered) { - if (!target || me->IsNonMeleeSpellCasted(false)) + if (!target || me->IsNonMeleeSpellCast(false)) return; me->StopMoving(); diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 1ced9e79672..8b914d7ca20 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -905,7 +905,10 @@ bool SmartGameObjectAI::QuestReward(Player* player, Quest const* quest, uint32 o } // Called when the dialog status between a player and the gameobject is requested. -uint32 SmartGameObjectAI::GetDialogStatus(Player* /*player*/) { return 100; } +uint32 SmartGameObjectAI::GetDialogStatus(Player* /*player*/) +{ + return DIALOG_STATUS_SCRIPTED_NO_STATUS; +} // Called when the gameobject is destroyed (destructible buildings only). void SmartGameObjectAI::Destroyed(Player* player, uint32 eventId) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 44da73482a7..0069cd3dd45 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -17,6 +17,7 @@ #include "Cell.h" #include "CellImpl.h" +#include "Chat.h" #include "CreatureTextMgr.h" #include "DatabaseEnv.h" #include "GossipDef.h" @@ -40,41 +41,22 @@ class TrinityStringTextBuilder { public: - TrinityStringTextBuilder(WorldObject* obj, ChatMsg msgtype, int32 id, uint32 language, uint64 targetGUID) - : _source(obj), _msgType(msgtype), _textId(id), _language(language), _targetGUID(targetGUID) + TrinityStringTextBuilder(WorldObject* obj, ChatMsg msgtype, int32 id, uint32 language, WorldObject* target) + : _source(obj), _msgType(msgtype), _textId(id), _language(language), _target(target) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { std::string text = sObjectMgr->GetTrinityString(_textId, locale); - std::string localizedName = _source->GetNameForLocaleIdx(locale); - - *data << uint8(_msgType); - *data << uint32(_language); - *data << uint64(_source->GetGUID()); - *data << uint32(1); // 2.1.0 - *data << uint32(localizedName.size() + 1); - *data << localizedName; - size_t whisperGUIDpos = data->wpos(); - *data << uint64(_targetGUID); // Unit Target - if (_targetGUID && !IS_PLAYER_GUID(_targetGUID)) - { - *data << uint32(1); // target name length - *data << uint8(0); // target name - } - *data << uint32(text.length() + 1); - *data << text; - *data << uint8(0); // ChatTag - - return whisperGUIDpos; + return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale); } WorldObject* _source; ChatMsg _msgType; int32 _textId; uint32 _language; - uint64 _targetGUID; + WorldObject* _target; }; SmartScript::SmartScript() @@ -87,7 +69,6 @@ SmartScript::SmartScript() mTargetStorage = new ObjectListMap(); mTextTimer = 0; mLastTextID = 0; - mTextGUID = 0; mUseTextTimer = false; mTalkerEntry = 0; mTemplate = SMARTAI_TEMPLATE_BASIC; @@ -189,17 +170,16 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u mTalkerEntry = talker->GetEntry(); mLastTextID = e.action.talk.textGroupID; mTextTimer = e.action.talk.duration; + Unit* talkTarget = NULL; if (IsPlayer(GetLastInvoker())) // used for $vars in texts and whisper target - mTextGUID = GetLastInvoker()->GetGUID(); + talkTarget = GetLastInvoker(); else if (targetPlayer) - mTextGUID = targetPlayer->GetGUID(); - else - mTextGUID = 0; + talkTarget = targetPlayer; mUseTextTimer = true; - sCreatureTextMgr->SendChat(talker, uint8(e.action.talk.textGroupID), mTextGUID); + sCreatureTextMgr->SendChat(talker, uint8(e.action.talk.textGroupID), talkTarget); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_TALK: talker: %s (GuidLow: %u), textGuid: %u", - talker->GetName().c_str(), talker->GetGUIDLow(), GUID_LOPART(mTextGUID)); + talker->GetName().c_str(), talker->GetGUIDLow(), talkTarget ? talkTarget->GetGUIDLow() : 0); break; } case SMART_ACTION_SIMPLE_TALK: @@ -210,11 +190,11 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { if (IsCreature(*itr)) - sCreatureTextMgr->SendChat((*itr)->ToCreature(), uint8(e.action.talk.textGroupID), IsPlayer(GetLastInvoker())? GetLastInvoker()->GetGUID() : 0); + sCreatureTextMgr->SendChat((*itr)->ToCreature(), uint8(e.action.talk.textGroupID), IsPlayer(GetLastInvoker())? GetLastInvoker() : 0); else if (IsPlayer(*itr) && me) { Unit* templastInvoker = GetLastInvoker(); - sCreatureTextMgr->SendChat(me, uint8(e.action.talk.textGroupID), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer()); + sCreatureTextMgr->SendChat(me, uint8(e.action.talk.textGroupID), IsPlayer(templastInvoker) ? templastInvoker : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer()); } TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SIMPLE_TALK: talker: %s (GuidLow: %u), textGroupId: %u", (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), uint8(e.action.talk.textGroupID)); @@ -549,7 +529,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); } else - TC_LOG_DEBUG("scripts.ai", "Spell %u not casted because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*itr)->GetGUID(), (*itr)->GetEntry(), uint32((*itr)->GetTypeId())); + TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*itr)->GetGUID(), (*itr)->GetEntry(), uint32((*itr)->GetTypeId())); } delete targets; @@ -580,7 +560,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u tempLastInvoker->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); } else - TC_LOG_DEBUG("scripts.ai", "Spell %u not casted because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*itr)->GetGUID(), (*itr)->GetEntry(), uint32((*itr)->GetTypeId())); + TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*itr)->GetGUID(), (*itr)->GetEntry(), uint32((*itr)->GetTypeId())); } delete targets; @@ -779,7 +759,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->DoFleeToGetAssistance(); if (e.action.flee.withEmote) { - TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_FLEE, LANG_UNIVERSAL, 0); + TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_FLEE, LANG_UNIVERSAL, NULL); sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE); } TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUIDLow()); @@ -1022,7 +1002,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->CallForHelp((float)e.action.callHelp.range); if (e.action.callHelp.withEmote) { - TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_CALL_FOR_HELP, LANG_UNIVERSAL, 0); + TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_CALL_FOR_HELP, LANG_UNIVERSAL, NULL); sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE); } TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUIDLow()); @@ -1750,7 +1730,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u unit->CastSpell((*it)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); } else - TC_LOG_DEBUG("scripts.ai", "Spell %u not casted because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*it)->GetGUID(), (*it)->GetEntry(), uint32((*it)->GetTypeId())); + TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*it)->GetGUID(), (*it)->GetEntry(), uint32((*it)->GetTypeId())); } } @@ -2751,7 +2731,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui Unit* victim = me->GetVictim(); - if (!victim || !victim->IsNonMeleeSpellCasted(false, false, true)) + if (!victim || !victim->IsNonMeleeSpellCast(false, false, true)) return; if (e.event.targetCasting.spellId > 0) @@ -3177,12 +3157,12 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff) if (e.GetEventType() == SMART_EVENT_UPDATE_IC && (!me || !me->IsInCombat())) return; - if (e.GetEventType() == SMART_EVENT_UPDATE_OOC && (me && me->IsInCombat()))//can be used with me=NULL (go script) + if (e.GetEventType() == SMART_EVENT_UPDATE_OOC && (me && me->IsInCombat())) //can be used with me=NULL (go script) return; if (e.timer < diff) { - // delay spell cast event if another spell is being casted + // delay spell cast event if another spell is being cast if (e.GetActionType() == SMART_ACTION_CAST) { if (!(e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS)) diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index f9eff2ec96e..77327d6229b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -237,7 +237,6 @@ class SmartScript uint32 mTextTimer; uint32 mLastTextID; - uint64 mTextGUID; uint32 mTalkerEntry; bool mUseTextTimer; diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 0f1dd1c53c6..191acdefcac 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -21,6 +21,7 @@ #include "ArenaTeamMgr.h" #include "Battleground.h" #include "CellImpl.h" +#include "Chat.h" #include "Common.h" #include "DatabaseEnv.h" #include "DBCEnums.h" @@ -48,19 +49,11 @@ namespace Trinity public: AchievementChatBuilder(Player const& player, ChatMsg msgtype, int32 textId, uint32 ach_id) : i_player(player), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) { } + void operator()(WorldPacket& data, LocaleConstant loc_idx) { - char const* text = sObjectMgr->GetTrinityString(i_textId, loc_idx); - - data << uint8(i_msgtype); - data << uint32(LANG_UNIVERSAL); - data << uint64(i_player.GetGUID()); - data << uint32(5); - data << uint64(i_player.GetGUID()); - data << uint32(strlen(text)+1); - data << text; - data << uint8(0); - data << uint32(i_achievementId); + std::string text = sObjectMgr->GetTrinityString(i_textId, loc_idx); + ChatHandler::BuildChatPacket(data, i_msgtype, LANG_UNIVERSAL, &i_player, &i_player, text, i_achievementId); } private: @@ -778,7 +771,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD: /* FIXME: for online player only currently */ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT: case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED: - case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CASTED: + case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST: case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED: // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case if (!miscValue1) diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index f85f8bc77db..17c5b0cc85e 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -445,50 +445,18 @@ void Battlefield::BroadcastPacketToWar(WorldPacket& data) const player->GetSession()->SendPacket(&data); } -WorldPacket Battlefield::BuildWarningAnnPacket(std::string const& msg) -{ - WorldPacket data(SMSG_MESSAGECHAT, 200); - - data << uint8(CHAT_MSG_RAID_BOSS_EMOTE); - data << uint32(LANG_UNIVERSAL); - data << uint64(0); - data << uint32(0); // 2.1.0 - data << uint32(1); - data << uint8(0); - data << uint64(0); - data << uint32(msg.length() + 1); - data << msg; - data << uint8(0); - - return data; -} - void Battlefield::SendWarningToAllInZone(uint32 entry) { if (Creature* stalker = GetCreature(StalkerGuid)) // FIXME: replaced CHAT_TYPE_END with CHAT_MSG_BG_SYSTEM_NEUTRAL to fix compile, it's a guessed change :/ - sCreatureTextMgr->SendChat(stalker, (uint8) entry, 0, CHAT_MSG_BG_SYSTEM_NEUTRAL, LANG_ADDON, TEXT_RANGE_ZONE); + sCreatureTextMgr->SendChat(stalker, (uint8) entry, NULL, CHAT_MSG_BG_SYSTEM_NEUTRAL, LANG_ADDON, TEXT_RANGE_ZONE); } -/*void Battlefield::SendWarningToAllInWar(int32 entry, ...) -{ - const char *format = sObjectMgr->GetTrinityStringForDBCLocale(entry); - va_list ap; - char str [1024]; - va_start(ap, entry); - vsnprintf(str, 1024, format, ap); - va_end(ap); - std::string msg = (std::string)str; - - WorldPacket data = BuildWarningAnnPacket(msg); - BroadcastPacketWar(data); -}*/ - void Battlefield::SendWarningToPlayer(Player* player, uint32 entry) { if (player) if (Creature* stalker = GetCreature(StalkerGuid)) - sCreatureTextMgr->SendChat(stalker, (uint8)entry, player->GetGUID()); + sCreatureTextMgr->SendChat(stalker, (uint8)entry, player); } void Battlefield::SendUpdateWorldState(uint32 field, uint32 value) diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 70805dd3a97..b43a5f28048 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -309,9 +309,7 @@ class Battlefield : public ZoneScript /// Called when a player enter in battlefield zone virtual void OnPlayerEnterZone(Player* /*player*/) { } - WorldPacket BuildWarningAnnPacket(std::string const& msg); void SendWarningToAllInZone(uint32 entry); - //void SendWarningToAllInWar(int32 entry, ...); -- UNUSED void SendWarningToPlayer(Player* player, uint32 entry); void PlayerAcceptInviteToQueue(Player* player); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index a5602a1b415..67288e0fadb 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -804,7 +804,7 @@ uint32 BattlefieldWG::GetData(uint32 data) const { switch (data) { - // Used to determine when the phasing spells must be casted + // Used to determine when the phasing spells must be cast // See: SpellArea::IsFitToRequirements case AREA_THE_SUNKEN_RING: case AREA_THE_BROKEN_TEMPLATE: diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 81507e4b620..a6cc3ccfb6c 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -21,6 +21,7 @@ #include "Battleground.h" #include "BattlegroundMgr.h" #include "Creature.h" +#include "Chat.h" #include "Formulas.h" #include "GridNotifiersImpl.h" #include "Group.h" @@ -65,16 +66,7 @@ namespace Trinity private: void do_helper(WorldPacket& data, char const* text) { - uint64 target_guid = _source ? _source->GetGUID() : 0; - - data << uint8 (_msgtype); - data << uint32(LANG_UNIVERSAL); - data << uint64(target_guid); // there 0 for BG messages - data << uint32(0); // can be chat msg group or something - data << uint64(target_guid); - data << uint32(strlen(text) + 1); - data << text; - data << uint8 (_source ? _source->GetChatTag() : 0); + ChatHandler::BuildChatPacket(data, _msgtype, LANG_UNIVERSAL, _source, _source, text); } ChatMsg _msgtype; @@ -98,16 +90,7 @@ namespace Trinity char str[2048]; snprintf(str, 2048, text, arg1str, arg2str); - uint64 target_guid = _source ? _source->GetGUID() : 0; - - data << uint8 (_msgtype); - data << uint32(LANG_UNIVERSAL); - data << uint64(target_guid); // there 0 for BG messages - data << uint32(0); // can be chat msg group or something - data << uint64(target_guid); - data << uint32(strlen(str) + 1); - data << str; - data << uint8 (_source ? _source->GetChatTag() : uint8(0)); + ChatHandler::BuildChatPacket(data, _msgtype, LANG_UNIVERSAL, _source, _source, str); } private: @@ -697,8 +680,8 @@ void Battleground::YellToAll(Creature* creature, char const* text, uint32 langua for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) if (Player* player = _GetPlayer(itr, "YellToAll")) { - WorldPacket data(SMSG_MESSAGECHAT, 200); - creature->BuildMonsterChat(&data, CHAT_MSG_MONSTER_YELL, text, language, creature->GetName(), itr->first); + WorldPacket data; + ChatHandler::BuildChatPacket(data, CHAT_MSG_MONSTER_YELL, Language(language), creature, player, text); player->SendDirectMessage(&data); } } @@ -1709,30 +1692,25 @@ void Battleground::SendWarningToAll(int32 entry, ...) if (!entry) return; - char const* format = sObjectMgr->GetTrinityStringForDBCLocale(entry); - - char str[1024]; - va_list ap; - va_start(ap, entry); - vsnprintf(str, 1024, format, ap); - va_end(ap); - std::string msg(str); - - WorldPacket data(SMSG_MESSAGECHAT, 200); - - data << (uint8)CHAT_MSG_RAID_BOSS_EMOTE; - data << (uint32)LANG_UNIVERSAL; - data << (uint64)0; - data << (uint32)0; // 2.1.0 - data << (uint32)1; - data << (uint8)0; - data << (uint64)0; - data << (uint32)(msg.length() + 1); - data << msg.c_str(); - data << (uint8)0; + std::map<uint32, WorldPacket> localizedPackets; for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) - player->SendDirectMessage(&data); + { + if (localizedPackets.find(player->GetSession()->GetSessionDbLocaleIndex()) == localizedPackets.end()) + { + char const* format = sObjectMgr->GetTrinityString(entry, player->GetSession()->GetSessionDbLocaleIndex()); + + char str[1024]; + va_list ap; + va_start(ap, entry); + vsnprintf(str, 1024, format, ap); + va_end(ap); + + ChatHandler::BuildChatPacket(localizedPackets[player->GetSession()->GetSessionDbLocaleIndex()], CHAT_MSG_RAID_BOSS_EMOTE, LANG_UNIVERSAL, NULL, NULL, str); + } + + player->SendDirectMessage(&localizedPackets[player->GetSession()->GetSessionDbLocaleIndex()]); + } } void Battleground::SendMessage2ToAll(int32 entry, ChatMsg type, Player const* source, int32 arg1, int32 arg2) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h index cdfbbc480bb..74c5e70a633 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h @@ -58,7 +58,7 @@ enum BattlegroundDSCreatures enum BattlegroundDSSpells { BG_DS_SPELL_FLUSH = 57405, // Visual and target selector for the starting knockback from the pipe - BG_DS_SPELL_FLUSH_KNOCKBACK = 61698, // Knockback effect for previous spell (triggered, not need to be casted) + BG_DS_SPELL_FLUSH_KNOCKBACK = 61698, // Knockback effect for previous spell (triggered, not needed to be cast) BG_DS_SPELL_WATER_SPOUT = 58873 // Knockback effect of the central waterfall }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index aa3568a62d5..5ebef030518 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -397,10 +397,8 @@ bool BattlegroundIC::SetupBattleground() return false; } - //Send transport init packet to all player in map - for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(itr->first)) - GetBgMap()->SendInitTransports(player); + gunshipHorde->EnableMovement(false); + gunshipAlliance->EnableMovement(false); // setting correct factions for Keep Cannons for (uint8 i = BG_IC_NPC_KEEP_CANNON_1; i < BG_IC_NPC_KEEP_CANNON_12; ++i) diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 9e0747c3d11..1faa168b3a8 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -600,10 +600,6 @@ void Channel::Say(uint64 guid, std::string const& what, uint32 lang) if (what.empty()) return; - uint8 chatTag = 0; - if (Player* player = ObjectAccessor::FindPlayer(guid)) - chatTag = player->GetChatTag(); - // TODO: Add proper RBAC check if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) lang = LANG_UNIVERSAL; @@ -624,16 +620,11 @@ void Channel::Say(uint64 guid, std::string const& what, uint32 lang) return; } - WorldPacket data(SMSG_MESSAGECHAT, 1 + 4 + 8 + 4 + _name.size() + 8 + 4 + what.size() + 1); - data << uint8(CHAT_MSG_CHANNEL); - data << uint32(lang); - data << uint64(guid); - data << uint32(0); - data << _name; - data << uint64(guid); - data << uint32(what.size() + 1); - data << what; - data << uint8(chatTag); + WorldPacket data; + if (Player* player = ObjectAccessor::FindPlayer(guid)) + ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name); + else + ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, 0, "", "", 0, false, _name); SendToAll(&data, !playersStore[guid].IsModerator() ? guid : false); } diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 99dd23aa649..e446b18e78d 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -210,7 +210,7 @@ void ChatHandler::SendSysMessage(const char *str) while (char* line = LineFromMessage(pos)) { - FillSystemMessageData(&data, line); + BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); m_session->SendPacket(&data); } @@ -228,7 +228,7 @@ void ChatHandler::SendGlobalSysMessage(const char *str) while (char* line = LineFromMessage(pos)) { - FillSystemMessageData(&data, line); + BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); sWorld->SendGlobalMessage(&data); } @@ -246,9 +246,10 @@ void ChatHandler::SendGlobalGMSysMessage(const char *str) while (char* line = LineFromMessage(pos)) { - FillSystemMessageData(&data, line); + BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); sWorld->SendGlobalGMMessage(&data); - } + } + free(buf); } @@ -628,84 +629,113 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd) return ShowHelpForSubCommands(table, "", cmd); } -//Note: target_guid used only in CHAT_MSG_WHISPER_INFORM mode (in this case channelName ignored) -void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker) +size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, uint64 senderGUID, uint64 receiverGUID, std::string const& message, uint8 chatTag, + std::string const& senderName /*= ""*/, std::string const& receiverName /*= ""*/, + uint32 achievementId /*= 0*/, bool gmMessage /*= false*/, std::string const& channelName /*= ""*/) { - uint32 messageLength = (message ? strlen(message) : 0) + 1; - - data->Initialize(SMSG_MESSAGECHAT, 100); // guess size - *data << uint8(type); - if ((type != CHAT_MSG_CHANNEL && type != CHAT_MSG_WHISPER) || language == LANG_ADDON) - *data << uint32(language); - else - *data << uint32(LANG_UNIVERSAL); - - switch (type) + size_t receiverGUIDPos = 0; + data.Initialize(!gmMessage ? SMSG_MESSAGECHAT : SMSG_GM_MESSAGECHAT); + data << uint8(chatType); + data << int32(language); + data << uint64(senderGUID); + data << uint32(0); // some flags + switch (chatType) { - case CHAT_MSG_SAY: - case CHAT_MSG_PARTY: - case CHAT_MSG_PARTY_LEADER: - case CHAT_MSG_RAID: - case CHAT_MSG_GUILD: - case CHAT_MSG_OFFICER: - case CHAT_MSG_YELL: - case CHAT_MSG_WHISPER: - case CHAT_MSG_CHANNEL: - case CHAT_MSG_RAID_LEADER: - case CHAT_MSG_RAID_WARNING: - case CHAT_MSG_BG_SYSTEM_NEUTRAL: - case CHAT_MSG_BG_SYSTEM_ALLIANCE: - case CHAT_MSG_BG_SYSTEM_HORDE: - case CHAT_MSG_BATTLEGROUND: - case CHAT_MSG_BATTLEGROUND_LEADER: - target_guid = session ? session->GetPlayer()->GetGUID() : 0; - break; case CHAT_MSG_MONSTER_SAY: case CHAT_MSG_MONSTER_PARTY: case CHAT_MSG_MONSTER_YELL: case CHAT_MSG_MONSTER_WHISPER: case CHAT_MSG_MONSTER_EMOTE: - case CHAT_MSG_RAID_BOSS_WHISPER: case CHAT_MSG_RAID_BOSS_EMOTE: + case CHAT_MSG_RAID_BOSS_WHISPER: case CHAT_MSG_BATTLENET: - { - *data << uint64(speaker->GetGUID()); - *data << uint32(0); // 2.1.0 - *data << uint32(speaker->GetName().size() + 1); - *data << speaker->GetName(); - *data << uint64(0); // listener_guid - //if (listener_guid && !IS_PLAYER_GUID(listener_guid)) - //{ - // *data << uint32(1); // string listener_name_length - // *data << uint8(0); // string listener_name - //} - *data << uint32(messageLength); - *data << message; - *data << uint8(0); - return; - } + data << uint32(senderName.length() + 1); + data << senderName; + receiverGUIDPos = data.wpos(); + data << uint64(receiverGUID); + if (receiverGUID && !IS_PLAYER_GUID(receiverGUID) && !IS_PET_GUID(receiverGUID)) + { + data << uint32(receiverName.length() + 1); + data << receiverName; + } + break; + case CHAT_MSG_WHISPER_FOREIGN: + data << uint32(senderName.length() + 1); + data << senderName; + receiverGUIDPos = data.wpos(); + data << uint64(receiverGUID); + break; + case CHAT_MSG_BG_SYSTEM_NEUTRAL: + case CHAT_MSG_BG_SYSTEM_ALLIANCE: + case CHAT_MSG_BG_SYSTEM_HORDE: + receiverGUIDPos = data.wpos(); + data << uint64(receiverGUID); + if (receiverGUID && !IS_PLAYER_GUID(receiverGUID)) + { + data << uint32(receiverName.length() + 1); + data << receiverName; + } + break; + case CHAT_MSG_ACHIEVEMENT: + case CHAT_MSG_GUILD_ACHIEVEMENT: + receiverGUIDPos = data.wpos(); + data << uint64(receiverGUID); + break; default: - if (type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_IGNORED && type != CHAT_MSG_DND && type != CHAT_MSG_AFK) - target_guid = 0; // only for CHAT_MSG_WHISPER_INFORM used original value target_guid + if (gmMessage) + { + data << uint32(senderName.length() + 1); + data << senderName; + } + + if (chatType == CHAT_MSG_CHANNEL) + { + ASSERT(channelName.length() > 0); + data << channelName; + } + + receiverGUIDPos = data.wpos(); + data << uint64(receiverGUID); break; } - *data << uint64(target_guid); // there 0 for BG messages - *data << uint32(0); // can be chat msg group or something + data << uint32(message.length() + 1); + data << message; + data << uint8(chatTag); - if (type == CHAT_MSG_CHANNEL) + if (chatType == CHAT_MSG_ACHIEVEMENT || chatType == CHAT_MSG_GUILD_ACHIEVEMENT) + data << uint32(achievementId); + + return receiverGUIDPos; +} + +size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, + uint32 achievementId /*= 0*/, std::string const& channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/) +{ + uint64 senderGUID = 0; + std::string senderName = ""; + uint8 chatTag = 0; + bool gmMessage = false; + uint64 receiverGUID = 0; + std::string receiverName = ""; + if (sender) + { + senderGUID = sender->GetGUID(); + senderName = sender->GetNameForLocaleIdx(locale); + if (Player const* playerSender = sender->ToPlayer()) + { + chatTag = playerSender->GetChatTag(); + gmMessage = playerSender->GetSession()->HasPermission(rbac::RBAC_PERM_COMMAND_GM_CHAT); + } + } + + if (receiver) { - ASSERT(channelName); - *data << channelName; + receiverGUID = receiver->GetGUID(); + receiverName = receiver->GetNameForLocaleIdx(locale); } - *data << uint64(target_guid); - *data << uint32(messageLength); - *data << message; - if (session != 0 && type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_DND && type != CHAT_MSG_AFK) - *data << uint8(session->GetPlayer()->GetChatTag()); - else - *data << uint8(0); + return BuildChatPacket(data, chatType, language, senderGUID, receiverGUID, message, chatTag, senderName, receiverName, achievementId, gmMessage, channelName); } Player* ChatHandler::getSelectedPlayer() diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 9574d3b38c3..e6b5cb5f57b 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -53,17 +53,13 @@ class ChatHandler explicit ChatHandler(WorldSession* session) : m_session(session), sentErrorMessage(false) { } virtual ~ChatHandler() { } - static void FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker); + // Builds chat packet and returns receiver guid position in the packet to substitute in whisper builders + static size_t BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, uint64 senderGUID, uint64 receiverGUID, std::string const& message, uint8 chatTag, + std::string const& senderName = "", std::string const& receiverName = "", + uint32 achievementId = 0, bool gmMessage = false, std::string const& channelName = ""); - void FillMessageData(WorldPacket* data, uint8 type, uint32 language, uint64 target_guid, const char* message) - { - FillMessageData(data, m_session, type, language, NULL, target_guid, message, NULL); - } - - void FillSystemMessageData(WorldPacket* data, const char* message) - { - FillMessageData(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, 0, message); - } + // Builds chat packet and returns receiver guid position in the packet to substitute in whisper builders + static size_t BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, uint32 achievementId = 0, std::string const& channelName = "", LocaleConstant locale = DEFAULT_LOCALE); static char* LineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; } diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index e976704c215..ec2ab308cd7 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -201,7 +201,7 @@ enum AchievementCriteriaTypes ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT = 101, ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED = 102, ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED = 103, - ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CASTED = 104, + ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST = 104, ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED = 105, ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED = 106, ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED = 107, diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index 30b15108cf2..1e9ee949c59 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -77,12 +77,6 @@ class Corpse : public WorldObject, public GridObject<Corpse> Player* lootRecipient; bool lootForBody; - void Say(int32 textId, uint32 language, uint64 TargetGuid) { MonsterSay(textId, language, TargetGuid); } - void Yell(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYell(textId, language, TargetGuid); } - void TextEmote(int32 textId, uint64 TargetGuid) { MonsterTextEmote(textId, TargetGuid); } - void Whisper(int32 textId, uint64 receiver) { MonsterWhisper(textId, receiver); } - void YellToZone(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYellToZone(textId, language, TargetGuid); } - bool IsExpired(time_t t) const; private: diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 7826fb30614..90e8bd7edb1 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -534,12 +534,6 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject std::string GetScriptName() const; uint32 GetScriptId() const; - void Say(int32 textId, uint32 language, uint64 TargetGuid) { MonsterSay(textId, language, TargetGuid); } - void Yell(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYell(textId, language, TargetGuid); } - void TextEmote(int32 textId, uint64 TargetGuid, bool IsBossEmote = false) { MonsterTextEmote(textId, TargetGuid, IsBossEmote); } - void Whisper(int32 textId, uint64 receiver, bool IsBossWhisper = false) { MonsterWhisper(textId, receiver, IsBossWhisper); } - void YellToZone(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYellToZone(textId, language, TargetGuid); } - // override WorldObject function for proper name localization std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index d04fde46713..6c13b921d3e 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -297,7 +297,7 @@ void QuestMenu::ClearMenu() _questMenuItems.clear(); } -void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title, uint64 npcGUID) +void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string& Title, uint64 npcGUID) { WorldPacket data(SMSG_QUESTGIVER_QUEST_LIST, 100); // guess size data << uint64(npcGUID); @@ -436,8 +436,8 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID, // rewarded honor points. Multiply with 10 to satisfy client data << uint32(10 * quest->CalculateHonorGain(_session->GetPlayer()->GetQuestLevel(quest))); data << float(0.0f); // unk, honor multiplier? - data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast == 0) - data << int32(quest->GetRewSpellCast()); // casted spell + data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0) + data << int32(quest->GetRewSpellCast()); // cast spell data << uint32(quest->GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles) data << uint32(quest->GetBonusTalents()); // bonus talents data << uint32(quest->GetRewArenaPoints()); // reward arena points @@ -517,8 +517,8 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const data << uint32(quest->GetRewOrReqMoney()); // reward money (below max lvl) data << uint32(quest->GetRewMoneyMaxLevel()); // used in XP calculation at client - data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast == 0) - data << int32(quest->GetRewSpellCast()); // casted spell + data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0) + data << int32(quest->GetRewSpellCast()); // cast spell // rewarded honor points data << uint32(quest->GetRewHonorAddition()); @@ -674,8 +674,8 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b data << uint32(10 * quest->CalculateHonorGain(_session->GetPlayer()->GetQuestLevel(quest))); data << float(0.0f); // unk, honor multiplier? data << uint32(0x08); // unused by client? - data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast == 0) - data << int32(quest->GetRewSpellCast()); // casted spell + data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0) + data << int32(quest->GetRewSpellCast()); // cast spell data << uint32(0); // unknown data << uint32(quest->GetBonusTalents()); // bonus talents data << uint32(quest->GetRewArenaPoints()); // arena points diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index b43ab8ec332..0c5b7e8c9eb 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -273,7 +273,7 @@ class PlayerMenu /*********************************************************/ void SendQuestGiverStatus(uint8 questStatus, uint64 npcGUID) const; - void SendQuestGiverQuestList(QEmote eEmote, const std::string& Title, uint64 npcGUID); + void SendQuestGiverQuestList(QEmote const& eEmote, const std::string& Title, uint64 npcGUID); void SendQuestQueryResponse(Quest const* quest) const; void SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID, bool activateAccept) const; diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h index 0522bc67aff..c143827543c 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -58,12 +58,6 @@ class DynamicObject : public WorldObject, public GridObject<DynamicObject> uint64 GetCasterGUID() const { return GetUInt64Value(DYNAMICOBJECT_CASTER); } float GetRadius() const { return GetFloatValue(DYNAMICOBJECT_RADIUS); } - void Say(int32 textId, uint32 language, uint64 targetGuid) { MonsterSay(textId, language, targetGuid); } - void Yell(int32 textId, uint32 language, uint64 targetGuid) { MonsterYell(textId, language, targetGuid); } - void TextEmote(int32 textId, uint64 targetGuid) { MonsterTextEmote(textId, targetGuid); } - void Whisper(int32 textId, uint64 receiver) { MonsterWhisper(textId, receiver); } - void YellToZone(int32 textId, uint32 language, uint64 targetGuid) { MonsterYellToZone(textId, language, targetGuid); } - protected: Aura* _aura; Aura* _removedAura; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 3c44c8e6035..e4d69a1f690 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -651,7 +651,7 @@ void GameObject::Update(uint32 diff) void GameObject::Refresh() { - // not refresh despawned not casted GO (despawned casted GO destroyed in all cases anyway) + // Do not refresh despawned GO from spellcast (GO's from spellcast are destroyed after despawn) if (m_respawnTime > 0 && m_spawnedByDefault) return; @@ -1485,7 +1485,7 @@ void GameObject::Use(Unit* user) if (spellId == 62330) // GO store nonexistent spell, replace by expected { // spell have reagent and mana cost but it not expected use its - // it triggered spell in fact casted at currently channeled GO + // it triggered spell in fact cast at currently channeled GO spellId = 61993; triggered = true; } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 8930806bca5..7fca29e99bc 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -656,12 +656,6 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map void UpdateRotationFields(float rotation2 = 0.0f, float rotation3 = 0.0f); - void Say(int32 textId, uint32 language, uint64 TargetGuid) { MonsterSay(textId, language, TargetGuid); } - void Yell(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYell(textId, language, TargetGuid); } - void TextEmote(int32 textId, uint64 TargetGuid) { MonsterTextEmote(textId, TargetGuid); } - void Whisper(int32 textId, uint64 receiver) { MonsterWhisper(textId, receiver); } - void YellToZone(int32 textId, uint32 language, uint64 TargetGuid) { MonsterYellToZone(textId, language, TargetGuid); } - // overwrite WorldObject function for proper name localization std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 747884e197c..b69c5f05714 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -102,7 +102,7 @@ void AddItemsSetItem(Player* player, Item* item) break; } - // spell casted only if fit form requirement, in other case will casted at form change + // spell cast only if fit form requirement, in other case will cast at form change player->ApplyEquipSpell(spellInfo, NULL, true); eff->spells[y] = spellInfo; break; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 9ca28ea83f5..e88d84d4a18 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -50,6 +50,7 @@ #include "Group.h" #include "Battlefield.h" #include "BattlefieldMgr.h" +#include "Chat.h" uint32 GuidHigh2TypeId(uint32 guid_hi) { @@ -1880,180 +1881,142 @@ namespace Trinity class MonsterChatBuilder { public: - MonsterChatBuilder(WorldObject const& obj, ChatMsg msgtype, int32 textId, uint32 language, uint64 targetGUID) - : i_object(obj), i_msgtype(msgtype), i_textId(textId), i_language(language), i_targetGUID(targetGUID) { } + MonsterChatBuilder(WorldObject const* obj, ChatMsg msgtype, int32 textId, uint32 language, WorldObject const* target) + : i_object(obj), i_msgtype(msgtype), i_textId(textId), i_language(Language(language)), i_target(target) { } void operator()(WorldPacket& data, LocaleConstant loc_idx) { char const* text = sObjectMgr->GetTrinityString(i_textId, loc_idx); - - /// @todo i_object.GetName() also must be localized? - i_object.BuildMonsterChat(&data, i_msgtype, text, i_language, i_object.GetNameForLocaleIdx(loc_idx), i_targetGUID); + ChatHandler::BuildChatPacket(data, i_msgtype, i_language, i_object, i_target, text, 0, "", loc_idx); } private: - WorldObject const& i_object; + WorldObject const* i_object; ChatMsg i_msgtype; int32 i_textId; - uint32 i_language; - uint64 i_targetGUID; + Language i_language; + WorldObject const* i_target; }; class MonsterCustomChatBuilder { public: - MonsterCustomChatBuilder(WorldObject const& obj, ChatMsg msgtype, const char* text, uint32 language, uint64 targetGUID) - : i_object(obj), i_msgtype(msgtype), i_text(text), i_language(language), i_targetGUID(targetGUID) { } + MonsterCustomChatBuilder(WorldObject const* obj, ChatMsg msgtype, const char* text, uint32 language, WorldObject const* target) + : i_object(obj), i_msgtype(msgtype), i_text(text), i_language(Language(language)), i_target(target) + {} void operator()(WorldPacket& data, LocaleConstant loc_idx) { - /// @todo i_object.GetName() also must be localized? - i_object.BuildMonsterChat(&data, i_msgtype, i_text, i_language, i_object.GetNameForLocaleIdx(loc_idx), i_targetGUID); + ChatHandler::BuildChatPacket(data, i_msgtype, i_language, i_object, i_target, i_text, 0, "", loc_idx); } private: - WorldObject const& i_object; + WorldObject const* i_object; ChatMsg i_msgtype; const char* i_text; - uint32 i_language; - uint64 i_targetGUID; + Language i_language; + WorldObject const* i_target; }; } // namespace Trinity -void WorldObject::MonsterSay(const char* text, uint32 language, uint64 TargetGuid) +void WorldObject::MonsterSay(const char* text, uint32 language, WorldObject const* target) { CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); Cell cell(p); cell.SetNoCreate(); - Trinity::MonsterCustomChatBuilder say_build(*this, CHAT_MSG_MONSTER_SAY, text, language, TargetGuid); + Trinity::MonsterCustomChatBuilder say_build(this, CHAT_MSG_MONSTER_SAY, text, language, target); Trinity::LocalizedPacketDo<Trinity::MonsterCustomChatBuilder> say_do(say_build); Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterCustomChatBuilder> > say_worker(this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), say_do); TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterCustomChatBuilder> >, WorldTypeMapContainer > message(say_worker); cell.Visit(p, message, *GetMap(), *this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY)); } -void WorldObject::MonsterSay(int32 textId, uint32 language, uint64 TargetGuid) +void WorldObject::MonsterSay(int32 textId, uint32 language, WorldObject const* target) { CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); Cell cell(p); cell.SetNoCreate(); - Trinity::MonsterChatBuilder say_build(*this, CHAT_MSG_MONSTER_SAY, textId, language, TargetGuid); + Trinity::MonsterChatBuilder say_build(this, CHAT_MSG_MONSTER_SAY, textId, language, target); Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> say_do(say_build); Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> > say_worker(this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), say_do); TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> >, WorldTypeMapContainer > message(say_worker); cell.Visit(p, message, *GetMap(), *this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY)); } -void WorldObject::MonsterYell(const char* text, uint32 language, uint64 TargetGuid) +void WorldObject::MonsterYell(const char* text, uint32 language, WorldObject const* target) { CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); Cell cell(p); cell.SetNoCreate(); - Trinity::MonsterCustomChatBuilder say_build(*this, CHAT_MSG_MONSTER_YELL, text, language, TargetGuid); + Trinity::MonsterCustomChatBuilder say_build(this, CHAT_MSG_MONSTER_YELL, text, language, target); Trinity::LocalizedPacketDo<Trinity::MonsterCustomChatBuilder> say_do(say_build); Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterCustomChatBuilder> > say_worker(this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), say_do); TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterCustomChatBuilder> >, WorldTypeMapContainer > message(say_worker); cell.Visit(p, message, *GetMap(), *this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL)); } -void WorldObject::MonsterYell(int32 textId, uint32 language, uint64 TargetGuid) +void WorldObject::MonsterYell(int32 textId, uint32 language, WorldObject const* target) { CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); Cell cell(p); cell.SetNoCreate(); - Trinity::MonsterChatBuilder say_build(*this, CHAT_MSG_MONSTER_YELL, textId, language, TargetGuid); + Trinity::MonsterChatBuilder say_build(this, CHAT_MSG_MONSTER_YELL, textId, language, target); Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> say_do(say_build); Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> > say_worker(this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), say_do); TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> >, WorldTypeMapContainer > message(say_worker); cell.Visit(p, message, *GetMap(), *this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL)); } -void WorldObject::MonsterYellToZone(int32 textId, uint32 language, uint64 TargetGuid) +void WorldObject::MonsterTextEmote(const char* text, WorldObject const* target, bool IsBossEmote) { - Trinity::MonsterChatBuilder say_build(*this, CHAT_MSG_MONSTER_YELL, textId, language, TargetGuid); - Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> say_do(say_build); - - uint32 zoneid = GetZoneId(); - - Map::PlayerList const& pList = GetMap()->GetPlayers(); - for (Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr) - if (itr->GetSource()->GetZoneId() == zoneid) - say_do(itr->GetSource()); -} - -void WorldObject::MonsterTextEmote(const char* text, uint64 TargetGuid, bool IsBossEmote) -{ - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildMonsterChat(&data, IsBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, text, LANG_UNIVERSAL, GetName(), TargetGuid); + WorldPacket data; + ChatHandler::BuildChatPacket(data, IsBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, LANG_UNIVERSAL, + this, target, text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true); } -void WorldObject::MonsterTextEmote(int32 textId, uint64 TargetGuid, bool IsBossEmote) +void WorldObject::MonsterTextEmote(int32 textId, WorldObject const* target, bool IsBossEmote) { CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); Cell cell(p); cell.SetNoCreate(); - Trinity::MonsterChatBuilder say_build(*this, IsBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, textId, LANG_UNIVERSAL, TargetGuid); + Trinity::MonsterChatBuilder say_build(this, IsBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, textId, LANG_UNIVERSAL, target); Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> say_do(say_build); Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> > say_worker(this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), say_do); TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::MonsterChatBuilder> >, WorldTypeMapContainer > message(say_worker); cell.Visit(p, message, *GetMap(), *this, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE)); } -void WorldObject::MonsterWhisper(const char* text, uint64 receiver, bool IsBossWhisper) +void WorldObject::MonsterWhisper(const char* text, Player const* target, bool IsBossWhisper) { - Player* player = ObjectAccessor::FindPlayer(receiver); - if (!player || !player->GetSession()) + if (!target) return; - LocaleConstant loc_idx = player->GetSession()->GetSessionDbLocaleIndex(); - - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildMonsterChat(&data, IsBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, text, LANG_UNIVERSAL, GetNameForLocaleIdx(loc_idx), receiver); - - player->GetSession()->SendPacket(&data); + LocaleConstant loc_idx = target->GetSession()->GetSessionDbLocaleIndex(); + WorldPacket data; + ChatHandler::BuildChatPacket(data, IsBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, text, 0, "", loc_idx); + target->GetSession()->SendPacket(&data); } -void WorldObject::MonsterWhisper(int32 textId, uint64 receiver, bool IsBossWhisper) +void WorldObject::MonsterWhisper(int32 textId, Player const* target, bool IsBossWhisper) { - Player* player = ObjectAccessor::FindPlayer(receiver); - if (!player || !player->GetSession()) + if (!target) return; - LocaleConstant loc_idx = player->GetSession()->GetSessionDbLocaleIndex(); + LocaleConstant loc_idx = target->GetSession()->GetSessionDbLocaleIndex(); char const* text = sObjectMgr->GetTrinityString(textId, loc_idx); + WorldPacket data; + ChatHandler::BuildChatPacket(data, IsBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, text, 0, "", loc_idx); - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildMonsterChat(&data, IsBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, text, LANG_UNIVERSAL, GetNameForLocaleIdx(loc_idx), receiver); - - player->GetSession()->SendPacket(&data); -} - -void WorldObject::BuildMonsterChat(WorldPacket* data, uint8 msgtype, char const* text, uint32 language, std::string const &name, uint64 targetGuid) const -{ - *data << (uint8)msgtype; - *data << (uint32)language; - *data << (uint64)GetGUID(); - *data << (uint32)0; // 2.1.0 - *data << (uint32)(name.size()+1); - *data << name; - *data << (uint64)targetGuid; // Unit Target - if (targetGuid && !IS_PLAYER_GUID(targetGuid)) - { - *data << (uint32)1; // target name length - *data << (uint8)0; // target name - } - *data << (uint32)(strlen(text)+1); - *data << text; - *data << (uint8)0; // ChatTag + target->GetSession()->SendPacket(&data); } void Unit::BuildHeartBeatMsg(WorldPacket* data) const diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index aeeb1d691f0..4a09393ab76 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -637,16 +637,14 @@ class WorldObject : public Object, public WorldLocation virtual uint8 getLevelForTarget(WorldObject const* /*target*/) const { return 1; } - void MonsterSay(const char* text, uint32 language, uint64 TargetGuid); - void MonsterYell(const char* text, uint32 language, uint64 TargetGuid); - void MonsterTextEmote(const char* text, uint64 TargetGuid, bool IsBossEmote = false); - void MonsterWhisper(const char* text, uint64 receiver, bool IsBossWhisper = false); - void MonsterSay(int32 textId, uint32 language, uint64 TargetGuid); - void MonsterYell(int32 textId, uint32 language, uint64 TargetGuid); - void MonsterTextEmote(int32 textId, uint64 TargetGuid, bool IsBossEmote = false); - void MonsterWhisper(int32 textId, uint64 receiver, bool IsBossWhisper = false); - void MonsterYellToZone(int32 textId, uint32 language, uint64 TargetGuid); - void BuildMonsterChat(WorldPacket* data, uint8 msgtype, char const* text, uint32 language, std::string const& name, uint64 TargetGuid) const; + void MonsterSay(const char* text, uint32 language, WorldObject const* target); + void MonsterYell(const char* text, uint32 language, WorldObject const* target); + void MonsterTextEmote(const char* text, WorldObject const* target, bool IsBossEmote = false); + void MonsterWhisper(const char* text, Player const* target, bool IsBossWhisper = false); + void MonsterSay(int32 textId, uint32 language, WorldObject const* target); + void MonsterYell(int32 textId, uint32 language, WorldObject const* target); + void MonsterTextEmote(int32 textId, WorldObject const* target, bool IsBossEmote = false); + void MonsterWhisper(int32 textId, Player const* target, bool IsBossWhisper = false); void PlayDistanceSound(uint32 sound_id, Player* target = NULL); void PlayDirectSound(uint32 sound_id, Player* target = NULL); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 94c2f2e9f26..934acc223b0 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2180,7 +2180,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati SetSemaphoreTeleportFar(false); //setup delayed teleport flag SetDelayedTeleportFlag(IsCanDelayTeleport()); - //if teleport spell is casted in Unit::Update() func + //if teleport spell is cast in Unit::Update() func //then we need to delay it until update process will be finished if (IsHasDelayedTeleport()) { @@ -2244,7 +2244,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati SetSemaphoreTeleportNear(false); //setup delayed teleport flag SetDelayedTeleportFlag(IsCanDelayTeleport()); - //if teleport spell is casted in Unit::Update() func + //if teleport spell is cast in Unit::Update() func //then we need to delay it until update process will be finished if (IsHasDelayedTeleport()) { @@ -2290,7 +2290,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati // stop spellcasting // not attempt interrupt teleportation spell at caster teleport if (!(options & TELE_TO_SPELL)) - if (IsNonMeleeSpellCasted(true)) + if (IsNonMeleeSpellCast(true)) InterruptNonMeleeSpells(true); //remove auras before removing from map... @@ -8422,7 +8422,7 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pEnchant->spellid[s]); if (!spellInfo) { - TC_LOG_ERROR("entities.player.items", "Player::CastItemCombatSpell(GUID: %u, name: %s, enchant: %i): unknown spell %i is casted, ignoring...", + TC_LOG_ERROR("entities.player.items", "Player::CastItemCombatSpell(GUID: %u, name: %s, enchant: %i): unknown spell %i is cast, ignoring...", GetGUIDLow(), GetName().c_str(), pEnchant->ID, pEnchant->spellid[s]); continue; } @@ -8483,7 +8483,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8 // use triggered flag only for items with many spell casts and for not first cast uint8 count = 0; - // item spells casted at use + // item spells cast at use for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { _Spell const& spellData = proto->Spells[i]; @@ -8512,7 +8512,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8 ++count; } - // Item enchantments spells casted at use + // Item enchantments spells cast at use for (uint8 e_slot = 0; e_slot < MAX_ENCHANTMENT_SLOT; ++e_slot) { uint32 enchant_id = item->GetEnchantmentId(EnchantmentSlot(e_slot)); @@ -11554,7 +11554,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool if (IsInCombat()&& (pProto->Class == ITEM_CLASS_WEAPON || pProto->InventoryType == INVTYPE_RELIC) && m_weaponChangeTimer != 0) return EQUIP_ERR_CANT_DO_RIGHT_NOW; // maybe exist better err - if (IsNonMeleeSpellCasted(false)) + if (IsNonMeleeSpellCast(false)) return EQUIP_ERR_CANT_DO_RIGHT_NOW; } @@ -20353,25 +20353,13 @@ void Player::StopCastingCharm() } } -inline void Player::BuildPlayerChat(WorldPacket* data, uint8 msgtype, const std::string& text, uint32 language) const -{ - *data << uint8(msgtype); - *data << uint32(language); - *data << uint64(GetGUID()); - *data << uint32(0); // constant unknown time - *data << uint64(GetGUID()); - *data << uint32(text.length() + 1); - *data << text; - *data << uint8(GetChatTag()); -} - void Player::Say(const std::string& text, const uint32 language) { std::string _text(text); sScriptMgr->OnPlayerChat(this, CHAT_MSG_SAY, language, _text); - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildPlayerChat(&data, CHAT_MSG_SAY, _text, language); + WorldPacket data; + ChatHandler::BuildChatPacket(data, CHAT_MSG_SAY, Language(language), this, this, text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true); } @@ -20380,8 +20368,8 @@ void Player::Yell(const std::string& text, const uint32 language) std::string _text(text); sScriptMgr->OnPlayerChat(this, CHAT_MSG_YELL, language, _text); - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildPlayerChat(&data, CHAT_MSG_YELL, _text, language); + WorldPacket data; + ChatHandler::BuildChatPacket(data, CHAT_MSG_YELL, Language(language), this, this, text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), true); } @@ -20390,8 +20378,8 @@ void Player::TextEmote(const std::string& text) std::string _text(text); sScriptMgr->OnPlayerChat(this, CHAT_MSG_EMOTE, LANG_UNIVERSAL, _text); - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildPlayerChat(&data, CHAT_MSG_EMOTE, _text, LANG_UNIVERSAL); + WorldPacket data; + ChatHandler::BuildChatPacket(data, CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT)); } @@ -20407,16 +20395,15 @@ void Player::Whisper(const std::string& text, uint32 language, uint64 receiver) std::string _text(text); sScriptMgr->OnPlayerChat(this, CHAT_MSG_WHISPER, language, _text, rPlayer); - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildPlayerChat(&data, CHAT_MSG_WHISPER, _text, language); + WorldPacket data; + ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, Language(language), this, this, text); rPlayer->GetSession()->SendPacket(&data); // rest stuff shouldn't happen in case of addon message if (isAddonMessage) return; - data.Initialize(SMSG_MESSAGECHAT, 200); - rPlayer->BuildPlayerChat(&data, CHAT_MSG_WHISPER_INFORM, _text, language); + ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER_INFORM, Language(language), rPlayer, rPlayer, text); GetSession()->SendPacket(&data); if (!isAcceptWhispers() && !IsGameMaster() && !rPlayer->IsGameMaster()) @@ -21065,7 +21052,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc } // not let cheating with start flight in time of logout process || if casting not finished || while in combat || if not use Spell's with EffectSendTaxi - if (IsNonMeleeSpellCasted(false)) + if (IsNonMeleeSpellCast(false)) { GetSession()->SendActivateTaxiReply(ERR_TAXIPLAYERBUSY); return false; @@ -23557,7 +23544,7 @@ void Player::RemoveItemDependentAurasAndCasts(Item* pItem) RemoveOwnedAura(itr); } - // currently casted spells can be dependent from item + // currently cast spells can be dependent from item for (uint32 i = 0; i < CURRENT_MAX_SPELL; ++i) if (Spell* spell = GetCurrentSpell(CurrentSpellTypes(i))) if (spell->getState() != SPELL_STATE_DELAYED && !HasItemFitToSpellRequirements(spell->m_spellInfo, pItem)) @@ -25818,7 +25805,7 @@ void Player::ActivateSpec(uint8 spec) if (spec > GetSpecsCount()) return; - if (IsNonMeleeSpellCasted(false)) + if (IsNonMeleeSpellCast(false)) InterruptNonMeleeSpells(false); SQLTransaction trans = CharacterDatabase.BeginTransaction(); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c445bd9027a..44b35c9482f 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1021,7 +1021,7 @@ class TradeData uint32 m_money; // m_player place money to trade uint32 m_spell; // m_player apply spell to non-traded slot item - uint64 m_spellCastItem; // applied spell casted by item use + uint64 m_spellCastItem; // applied spell cast by item use uint64 m_items[TRADE_SLOT_COUNT]; // traded items from m_player side including non-traded slot }; @@ -1187,8 +1187,6 @@ class Player : public Unit, public GridObject<Player> void TextEmote(std::string const& text); /// Handles whispers from Addons and players based on sender, receiver's guid and language. void Whisper(std::string const& text, const uint32 language, uint64 receiver); - /// Constructs the player Chat data for the specific functions to use - void BuildPlayerChat(WorldPacket* data, uint8 msgtype, std::string const& text, uint32 language) const; /*********************************************************/ /*** STORAGE SYSTEM ***/ diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 386a36ae1f0..04e388cc3ac 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -90,8 +90,7 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa SetPeriod(tInfo->pathTime); SetEntry(goinfo->entry); SetDisplayId(goinfo->displayId); - SetGoState(GO_STATE_READY); - _pendingStop = goinfo->moTransport.canBeStopped != 0; + SetGoState(!goinfo->moTransport.canBeStopped ? GO_STATE_READY : GO_STATE_ACTIVE); SetGoType(GAMEOBJECT_TYPE_MO_TRANSPORT); SetGoAnimProgress(animprogress); SetName(goinfo->name); @@ -111,7 +110,8 @@ void Transport::Update(uint32 diff) if (GetKeyFrames().size() <= 1) return; - m_goValue.Transport.PathProgress += diff; + if (IsMoving() || !_pendingStop) + m_goValue.Transport.PathProgress += diff; uint32 timer = m_goValue.Transport.PathProgress % GetPeriod(); @@ -132,31 +132,23 @@ void Transport::Update(uint32 diff) if (timer < _currentFrame->DepartureTime) { SetMoving(false); - if (_pendingStop) + if (_pendingStop && GetGoState() != GO_STATE_READY) + { SetGoState(GO_STATE_READY); + m_goValue.Transport.PathProgress = (m_goValue.Transport.PathProgress / GetPeriod()); + m_goValue.Transport.PathProgress *= GetPeriod(); + m_goValue.Transport.PathProgress += _currentFrame->ArriveTime; + } break; // its a stop frame and we are waiting } } - if (_pendingStop && timer >= _currentFrame->DepartureTime && GetGoState() == GO_STATE_READY) - { - m_goValue.Transport.PathProgress = (m_goValue.Transport.PathProgress / GetPeriod()); - m_goValue.Transport.PathProgress *= GetPeriod(); - m_goValue.Transport.PathProgress += _currentFrame->ArriveTime; - break; - } - if (timer >= _currentFrame->DepartureTime && !_triggeredDepartureEvent) { DoEventIfAny(*_currentFrame, true); // departure event _triggeredDepartureEvent = true; } - if (timer >= _currentFrame->DepartureTime && timer < _currentFrame->NextArriveTime) - break; // found current waypoint - - MoveToNextWaypoint(); - // not waiting anymore SetMoving(true); @@ -164,13 +156,18 @@ void Transport::Update(uint32 diff) if (GetGOInfo()->moTransport.canBeStopped) SetGoState(GO_STATE_ACTIVE); + if (timer >= _currentFrame->DepartureTime && timer < _currentFrame->NextArriveTime) + break; // found current waypoint + + MoveToNextWaypoint(); + sScriptMgr->OnRelocate(this, _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); TC_LOG_DEBUG("entities.transport", "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName().c_str(), _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); // Departure event if (_currentFrame->IsTeleportFrame()) - if (TeleportTransport(_nextFrame->Node->mapid, _nextFrame->Node->x, _nextFrame->Node->y, _nextFrame->Node->z)) + if (TeleportTransport(_nextFrame->Node->mapid, _nextFrame->Node->x, _nextFrame->Node->y, _nextFrame->Node->z, _nextFrame->InitialOrientation)) return; // Update more in new map thread } @@ -185,7 +182,18 @@ void Transport::Update(uint32 diff) G3D::Vector3 pos, dir; _currentFrame->Spline->evaluate_percent(_currentFrame->Index, t, pos); _currentFrame->Spline->evaluate_derivative(_currentFrame->Index, t, dir); - UpdatePosition(pos.x, pos.y, pos.z, atan2(dir.x, dir.y)); + UpdatePosition(pos.x, pos.y, pos.z, atan2(dir.y, dir.x) + M_PI); + } + else + { + /* There are four possible scenarios that trigger loading/unloading passengers: + 1. transport moves from inactive to active grid + 2. the grid that transport is currently in becomes active + 3. transport moves from active to inactive grid + 4. the grid that transport is currently in unloads + */ + if (_staticPassengers.empty() && GetMap()->IsGridLoaded(GetPositionX(), GetPositionY())) // 2. + LoadStaticPassengers(); } } @@ -314,7 +322,7 @@ void Transport::UpdatePosition(float x, float y, float z, float o) 3. transport moves from active to inactive grid 4. the grid that transport is currently in unloads */ - if (_staticPassengers.empty() && newActive) // 1. and 2. + if (_staticPassengers.empty() && newActive) // 1. LoadStaticPassengers(); else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3. UnloadStaticPassengers(); @@ -404,52 +412,24 @@ float Transport::CalculateSegmentPos(float now) return segmentPos / frame.NextDistFromPrev; } -bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) +bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, float o) { Map const* oldMap = GetMap(); if (oldMap->GetId() != newMapid) { Map* newMap = sMapMgr->CreateBaseMap(newMapid); - Map::PlayerList const& oldPlayers = GetMap()->GetPlayers(); - if (!oldPlayers.isEmpty()) - { - UpdateData data; - BuildOutOfRangeUpdateBlock(&data); - WorldPacket packet; - data.BuildPacket(&packet); - for (Map::PlayerList::const_iterator itr = oldPlayers.begin(); itr != oldPlayers.end(); ++itr) - if (itr->GetSource()->GetTransport() != this) - itr->GetSource()->SendDirectMessage(&packet); - } - UnloadStaticPassengers(); GetMap()->RemoveFromMap<Transport>(this, false); SetMap(newMap); - Map::PlayerList const& newPlayers = GetMap()->GetPlayers(); - if (!newPlayers.isEmpty()) - { - for (Map::PlayerList::const_iterator itr = newPlayers.begin(); itr != newPlayers.end(); ++itr) - { - if (itr->GetSource()->GetTransport() != this) - { - UpdateData data; - BuildCreateUpdateBlockForPlayer(&data, itr->GetSource()); - WorldPacket packet; - data.BuildPacket(&packet); - itr->GetSource()->SendDirectMessage(&packet); - } - } - } - for (std::set<WorldObject*>::iterator itr = _passengers.begin(); itr != _passengers.end();) { WorldObject* obj = (*itr++); float destX, destY, destZ, destO; obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO); - TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, GetOrientation()); + TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o); switch (obj->GetTypeId()) { @@ -475,7 +455,7 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) } } - Relocate(x, y, z, GetOrientation()); + Relocate(x, y, z, o); GetMap()->AddToMap<Transport>(this); return true; } @@ -488,13 +468,13 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) { float destX, destY, destZ, destO; (*itr)->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO); - TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, GetOrientation()); + TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o); (*itr)->ToUnit()->NearTeleportTo(destX, destY, destZ, destO); } } - UpdatePosition(x, y, z, GetOrientation()); + UpdatePosition(x, y, z, o); return false; } } diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index e290a5d5e00..b0e80ea27b3 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -78,7 +78,7 @@ class Transport : public GameObject, public TransportBase private: void MoveToNextWaypoint(); float CalculateSegmentPos(float perc); - bool TeleportTransport(uint32 newMapid, float x, float y, float z); + bool TeleportTransport(uint32 newMapid, float x, float y, float z, float o); void UpdatePassengerPositions(std::set<WorldObject*>& passengers); void DoEventIfAny(KeyFrame const& node, bool departure); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 32dfee3409b..ea6eb49e99a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1936,7 +1936,7 @@ void Unit::AttackerStateUpdate (Unit* victim, WeaponAttackType attType, bool ext if (attType != BASE_ATTACK && attType != OFF_ATTACK) return; // ignore ranged case - // melee attack spell casted at main hand attack only - no normal melee dmg dealt + // melee attack spell cast at main hand attack only - no normal melee dmg dealt if (attType == BASE_ATTACK && m_currentSpells[CURRENT_MELEE_SPELL] && !extra) m_currentSpells[CURRENT_MELEE_SPELL]->cast(); else @@ -2673,7 +2673,7 @@ uint32 Unit::GetDefenseSkillValue(Unit const* target) const float Unit::GetUnitDodgeChance() const { - if (IsNonMeleeSpellCasted(false) || HasUnitState(UNIT_STATE_CONTROLLED)) + if (IsNonMeleeSpellCast(false) || HasUnitState(UNIT_STATE_CONTROLLED)) return 0.0f; if (GetTypeId() == TYPEID_PLAYER) @@ -2693,7 +2693,7 @@ float Unit::GetUnitDodgeChance() const float Unit::GetUnitParryChance() const { - if (IsNonMeleeSpellCasted(false) || HasUnitState(UNIT_STATE_CONTROLLED)) + if (IsNonMeleeSpellCast(false) || HasUnitState(UNIT_STATE_CONTROLLED)) return 0.0f; float chance = 0.0f; @@ -2739,7 +2739,7 @@ float Unit::GetUnitMissChance(WeaponAttackType attType) const float Unit::GetUnitBlockChance() const { - if (IsNonMeleeSpellCasted(false) || HasUnitState(UNIT_STATE_CONTROLLED)) + if (IsNonMeleeSpellCast(false) || HasUnitState(UNIT_STATE_CONTROLLED)) return 0.0f; if (Player const* player = ToPlayer()) @@ -2931,7 +2931,7 @@ void Unit::_UpdateSpells(uint32 time) void Unit::_UpdateAutoRepeatSpell() { // check "realtime" interrupts - if ((GetTypeId() == TYPEID_PLAYER && ToPlayer()->isMoving()) || IsNonMeleeSpellCasted(false, false, true, m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id == 75)) + if ((GetTypeId() == TYPEID_PLAYER && ToPlayer()->isMoving()) || IsNonMeleeSpellCast(false, false, true, m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id == 75)) { // cancel wand shoot if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != 75) @@ -2964,7 +2964,7 @@ void Unit::_UpdateAutoRepeatSpell() } } -void Unit::SetCurrentCastedSpell(Spell* pSpell) +void Unit::SetCurrentCastSpell(Spell* pSpell) { ASSERT(pSpell); // NULL may be never passed here, use InterruptSpell or InterruptNonMeleeSpells @@ -3077,16 +3077,16 @@ void Unit::FinishSpell(CurrentSpellTypes spellType, bool ok /*= true*/) spell->finish(ok); } -bool Unit::IsNonMeleeSpellCasted(bool withDelayed, bool skipChanneled, bool skipAutorepeat, bool isAutoshoot, bool skipInstant) const +bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAutorepeat, bool isAutoshoot, bool skipInstant) const { // We don't do loop here to explicitly show that melee spell is excluded. // Maybe later some special spells will be excluded too. - // if skipInstant then instant spells shouldn't count as being casted + // if skipInstant then instant spells shouldn't count as being cast if (skipInstant && m_currentSpells[CURRENT_GENERIC_SPELL] && !m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime()) return false; - // generic spells are casted when they are not finished and not delayed + // generic spells are cast when they are not finished and not delayed if (m_currentSpells[CURRENT_GENERIC_SPELL] && (m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_FINISHED) && (withDelayed || m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_DELAYED)) @@ -3094,14 +3094,14 @@ bool Unit::IsNonMeleeSpellCasted(bool withDelayed, bool skipChanneled, bool skip if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)) return true; } - // channeled spells may be delayed, but they are still considered casted + // channeled spells may be delayed, but they are still considered cast else if (!skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] && (m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() != SPELL_STATE_FINISHED)) { if (!isAutoshoot || !(m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)) return true; } - // autorepeat spells may be finished or delayed, but they are still considered casted + // autorepeat spells may be finished or delayed, but they are still considered cast else if (!skipAutorepeat && m_currentSpells[CURRENT_AUTOREPEAT_SPELL]) return true; @@ -5682,7 +5682,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere // Second Wind if (dummySpell->SpellIconID == 1697) { - // only for spells and hit/crit (trigger start always) and not start from self casted spells (5530 Mace Stun Effect for example) + // only for spells and hit/crit (trigger start always) and not start from self cast spells (5530 Mace Stun Effect for example) if (procSpell == 0 || !(procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) || this == victim) return false; // Need stun or root mechanic @@ -6352,7 +6352,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere { if (Player* member = itr->GetSource()) { - // check if it was heal by paladin which casted this beacon of light + // check if it was heal by paladin which cast this beacon of light if (member->GetAura(53563, victim->GetGUID())) { // do not proc when target of beacon of light is healed @@ -7304,7 +7304,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere // Runic Power Back on Snare/Root if (dummySpell->Id == 61257) { - // only for spells and hit/crit (trigger start always) and not start from self casted spells + // only for spells and hit/crit (trigger start always) and not start from self cast spells if (procSpell == 0 || !(procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) || this == victim) return false; // Need snare or root mechanic @@ -8026,7 +8026,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg { if (!procSpell) return false; - // procspell is triggered spell but we need mana cost of original casted spell + // procspell is triggered spell but we need mana cost of original cast spell uint32 originalSpellId = procSpell->Id; // Holy Shock heal if (procSpell->SpellFamilyFlags[1] & 0x00010000) @@ -9050,7 +9050,7 @@ bool Unit::AttackStop() void Unit::CombatStop(bool includingCast) { - if (includingCast && IsNonMeleeSpellCasted(false)) + if (includingCast && IsNonMeleeSpellCast(false)) InterruptNonMeleeSpells(false); AttackStop(); @@ -9605,7 +9605,7 @@ int32 Unit::DealHeal(Unit* victim, uint32 addhealth) if (gain) player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE, gain, 0, victim); - player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CASTED, addhealth); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST, addhealth); } if (Player* player = victim->ToPlayer()) @@ -12404,7 +12404,7 @@ void Unit::setDeathState(DeathState s) getHostileRefManager().deleteReferences(); ClearComboPointHolders(); // any combo points pointed to unit lost at it death - if (IsNonMeleeSpellCasted(false)) + if (IsNonMeleeSpellCast(false)) InterruptNonMeleeSpells(false); ExitVehicle(); // Exit vehicle before calling RemoveAllControlled @@ -12823,7 +12823,7 @@ int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, in } } - // Glyphs which increase duration of selfcasted buffs + // Glyphs which increase duration of selfcast buffs if (target == this) { switch (spellProto->SpellFamilyName) @@ -12884,7 +12884,7 @@ DiminishingLevels Unit::GetDiminishing(DiminishingGroup group) if (!i->hitTime) return DIMINISHING_LEVEL_1; - // If last spell was casted more than 15 seconds ago - reset the count. + // If last spell was cast more than 15 seconds ago - reset the count. if (i->stack == 0 && getMSTimeDiff(i->hitTime, getMSTime()) > 15000) { i->hitCount = DIMINISHING_LEVEL_1; @@ -13495,7 +13495,7 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup) if (finalCleanup) m_cleanupDone = true; - m_Events.KillAllEvents(false); // non-delatable (currently casted spells) will not deleted now but it will deleted at call in Map::RemoveAllObjectsInRemoveList + m_Events.KillAllEvents(false); // non-delatable (currently cast spells) will not deleted now but it will deleted at call in Map::RemoveAllObjectsInRemoveList CombatStop(); ClearComboPointHolders(); DeleteThreatList(); @@ -14652,7 +14652,7 @@ void Unit::ApplyCastTimePercentMod(float val, bool apply) uint32 Unit::GetCastingTimeForBonus(SpellInfo const* spellProto, DamageEffectType damagetype, uint32 CastingTime) const { - // Not apply this to creature casted spells with casttime == 0 + // Not apply this to creature cast spells with casttime == 0 if (CastingTime == 0 && GetTypeId() == TYPEID_UNIT && !ToCreature()->IsPet()) return 3500; @@ -17174,7 +17174,7 @@ void Unit::StopAttackFaction(uint32 faction_id) if (victim->GetFactionTemplateEntry()->faction == faction_id) { AttackStop(); - if (IsNonMeleeSpellCasted(false)) + if (IsNonMeleeSpellCast(false)) InterruptNonMeleeSpells(false); // melee and ranged forced attack cancel diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index d9e49ab6a4d..4508b1f0090 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1816,15 +1816,15 @@ class Unit : public WorldObject float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT0+stat); } float GetCreateStat(Stats stat) const { return m_createStats[stat]; } - void SetCurrentCastedSpell(Spell* pSpell); + void SetCurrentCastSpell(Spell* pSpell); virtual void ProhibitSpellSchool(SpellSchoolMask /*idSchoolMask*/, uint32 /*unTimeMs*/) { } void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed = true, bool withInstant = true); void FinishSpell(CurrentSpellTypes spellType, bool ok = true); - // set withDelayed to true to account delayed spells as casted - // delayed+channeled spells are always accounted as casted + // set withDelayed to true to account delayed spells as cast + // delayed+channeled spells are always accounted as cast // we can skip channeled or delayed checks using flags - bool IsNonMeleeSpellCasted(bool withDelayed, bool skipChanneled = false, bool skipAutorepeat = false, bool isAutoshoot = false, bool skipInstant = true) const; + bool IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled = false, bool skipAutorepeat = false, bool isAutoshoot = false, bool skipInstant = true) const; // set withDelayed to true to interrupt delayed spells too // delayed+channeled spells are always interrupted @@ -2170,8 +2170,8 @@ class Unit : public WorldObject uint32 m_removedAurasCount; AuraEffectList m_modAuras[TOTAL_AURAS]; - AuraList m_scAuras; // casted singlecast auras - AuraApplicationList m_interruptableAuras; // auras which have interrupt mask applied on unit + AuraList m_scAuras; // cast singlecast auras + AuraApplicationList m_interruptableAuras; // auras which have interrupt mask applied on unit AuraStateAurasMap m_auraStateAuras; // Used for improve performance of aura state checks on aura apply/remove uint32 m_interruptMask; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 3d56225bc00..38549a358a0 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1601,7 +1601,8 @@ void ObjectMgr::LoadCreatures() continue; } - if (data.spawnMask & ~spawnMasks[data.mapid]) + // Skip spawnMask check for transport maps + if (!_transportMaps.count(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid]) TC_LOG_ERROR("sql.sql", "Table `creature` have creature (GUID: %u) that have wrong spawn mask %u including not supported difficulty modes for map (Id: %u).", guid, data.spawnMask, data.mapid); bool ok = true; @@ -1936,7 +1937,7 @@ void ObjectMgr::LoadGameobjects() data.spawnMask = fields[14].GetUInt8(); - if (data.spawnMask & ~spawnMasks[data.mapid]) + if (!_transportMaps.count(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid]) TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: %u Entry: %u) that has wrong spawn mask %u including not supported difficulty modes for map (Id: %u), skip", guid, data.id, data.spawnMask, data.mapid); data.phaseMask = fields[15].GetUInt32(); @@ -4234,21 +4235,21 @@ void ObjectMgr::LoadQuests() { TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpellCast` = %u but spell %u does not exist, quest will not have a spell reward.", qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast); - qinfo->RewardSpellCast = 0; // no spell will be casted on player + qinfo->RewardSpellCast = 0; // no spell will be cast on player } else if (!SpellMgr::IsSpellValid(spellInfo)) { TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpellCast` = %u but spell %u is broken, quest will not have a spell reward.", qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast); - qinfo->RewardSpellCast = 0; // no spell will be casted on player + qinfo->RewardSpellCast = 0; // no spell will be cast on player } else if (GetTalentSpellCost(qinfo->RewardSpellCast)) { TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.", qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast); - qinfo->RewardSpellCast = 0; // no spell will be casted on player + qinfo->RewardSpellCast = 0; // no spell will be cast on player } } @@ -6480,6 +6481,8 @@ void ObjectMgr::LoadGameObjectTemplate() TC_LOG_ERROR("sql.sql", "GameObject (Entry: %u GoType: %u) have data0=%u but TaxiPath (Id: %u) not exist.", entry, got.type, got.moTransport.taxiPathId, got.moTransport.taxiPathId); } + if (uint32 transportMap = got.moTransport.mapID) + _transportMaps.insert(transportMap); break; } case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18 diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index bf835ed6c4e..a99140d4572 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1384,6 +1384,8 @@ class ObjectMgr GO_TO_GO, GO_TO_CREATURE // GO is dependant on creature }; + + std::set<uint32> _transportMaps; // Helper container storing map ids that are for transports only, loaded from gameobject_template }; #define sObjectMgr ACE_Singleton<ObjectMgr, ACE_Null_Mutex>::instance() diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h index dc0e99aaded..44de663b169 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h +++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h @@ -517,15 +517,17 @@ void Trinity::LocalizedPacketDo<Builder>::operator()(Player* p) WorldPacket* data; // create if not cached yet - if (i_data_cache.size() < cache_idx+1 || !i_data_cache[cache_idx]) + if (i_data_cache.size() < cache_idx + 1 || !i_data_cache[cache_idx]) { - if (i_data_cache.size() < cache_idx+1) - i_data_cache.resize(cache_idx+1); + if (i_data_cache.size() < cache_idx + 1) + i_data_cache.resize(cache_idx + 1); - data = new WorldPacket(SMSG_MESSAGECHAT, 200); + data = new WorldPacket(); i_builder(*data, loc_idx); + ASSERT(data->GetOpcode() != MSG_NULL_ACTION); + i_data_cache[cache_idx] = data; } else diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 10bce9e2d51..312e1f38a68 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2151,7 +2151,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK)) { WorldPacket data; - ChatHandler::FillMessageData(&data, session, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, language, NULL, 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, Language(language), session->GetPlayer(), NULL, msg); for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr) if (Player* player = itr->second->FindPlayer()) if (player->GetSession() && _HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) && diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index bea3fc76cf2..d6d21820515 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -313,7 +313,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group); WorldPacket data; - ChatHandler::FillMessageData(&data, this, uint8(type), lang, NULL, 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, ChatMsg(type), Language(lang), _player, NULL, msg); group->BroadcastPacket(&data, false, group->GetMemberGroup(GetPlayer()->GetGUID())); } break; case CHAT_MSG_GUILD: @@ -354,7 +354,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group); WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID, lang, "", 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID, Language(lang), _player, NULL, msg); group->BroadcastPacket(&data, false); } break; case CHAT_MSG_RAID_LEADER: @@ -371,7 +371,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group); WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_LEADER, lang, "", 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_LEADER, Language(lang), _player, NULL, msg); group->BroadcastPacket(&data, false); } break; case CHAT_MSG_RAID_WARNING: @@ -384,7 +384,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) WorldPacket data; //in battleground, raid warning is sent only to players in battleground - code is ok - ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_WARNING, lang, "", 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_WARNING, Language(lang), _player, NULL, msg); group->BroadcastPacket(&data, false); } break; case CHAT_MSG_BATTLEGROUND: @@ -397,7 +397,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group); WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND, lang, "", 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_BATTLEGROUND, Language(lang), _player, NULL, msg); group->BroadcastPacket(&data, false); } break; case CHAT_MSG_BATTLEGROUND_LEADER: @@ -410,7 +410,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group); WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND_LEADER, lang, "", 0, msg.c_str(), NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_BATTLEGROUND_LEADER, Language(lang), _player, NULL, msg);; group->BroadcastPacket(&data, false); } break; case CHAT_MSG_CHANNEL: @@ -605,7 +605,7 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData) return; WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_IGNORED, LANG_UNIVERSAL, NULL, GetPlayer()->GetGUID(), GetPlayer()->GetName().c_str(), NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName()); player->GetSession()->SendPacket(&data); } diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 9a371178044..94578b83c20 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -229,7 +229,7 @@ void WorldSession::HandleLootOpcode(WorldPacket& recvData) GetPlayer()->SendLoot(guid, LOOT_CORPSE); // interrupt cast - if (GetPlayer()->IsNonMeleeSpellCasted(false)) + if (GetPlayer()->IsNonMeleeSpellCast(false)) GetPlayer()->InterruptNonMeleeSpells(false); } diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index a84d8e33812..c73a4c845bb 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -36,8 +36,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) { uint64 guid; recvData >> guid; - uint8 questStatus = DIALOG_STATUS_NONE; - uint8 defstatus = DIALOG_STATUS_NONE; + uint32 questStatus = DIALOG_STATUS_NONE; Object* questgiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); if (!questgiver) @@ -50,23 +49,23 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) { case TYPEID_UNIT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", uint32(GUID_LOPART(guid))); - Creature* cr_questgiver=questgiver->ToCreature(); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questgiver->GetGUIDLow()); + Creature* cr_questgiver = questgiver->ToCreature(); if (!cr_questgiver->IsHostileTo(_player)) // do not show quest status to enemies { questStatus = sScriptMgr->GetDialogStatus(_player, cr_questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, cr_questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, cr_questgiver); } break; } case TYPEID_GAMEOBJECT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", uint32(GUID_LOPART(guid))); - GameObject* go_questgiver=(GameObject*)questgiver; + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questgiver->GetGUIDLow()); + GameObject* go_questgiver = questgiver->ToGameObject(); questStatus = sScriptMgr->GetDialogStatus(_player, go_questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, go_questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, go_questgiver); break; } default: @@ -75,7 +74,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) } //inform client about status of quest - _player->PlayerTalkClass->SendQuestGiverStatus(questStatus, guid); + _player->PlayerTalkClass->SendQuestGiverStatus(uint8(questStatus), guid); } void WorldSession::HandleQuestgiverHelloOpcode(WorldPacket& recvData) @@ -639,9 +638,9 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) } } -uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver, uint32 defstatus) +uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver) { - uint32 result = defstatus; + uint32 result = DIALOG_STATUS_NONE; QuestRelationBounds qr; QuestRelationBounds qir; @@ -682,7 +681,7 @@ uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver, uint32 if ((status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(quest_id)) || (quest->IsAutoComplete() && player->CanTakeQuest(quest, false))) { - if (quest->IsAutoComplete() && quest->IsRepeatable()) + if (quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) result2 = DIALOG_STATUS_REWARD_REP; else result2 = DIALOG_STATUS_REWARD; @@ -713,11 +712,11 @@ uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver, uint32 { if (player->SatisfyQuestLevel(quest, false)) { - if (quest->IsAutoComplete() || (quest->IsRepeatable() && player->IsQuestRewarded(quest_id))) + if (quest->IsAutoComplete()) result2 = DIALOG_STATUS_REWARD_REP; else if (player->getLevel() <= ((player->GetQuestLevel(quest) == -1) ? player->getLevel() : player->GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF))) { - if (quest->HasFlag(QUEST_FLAGS_DAILY) || quest->HasFlag(QUEST_FLAGS_WEEKLY)) + if (quest->IsDaily()) result2 = DIALOG_STATUS_AVAILABLE_REP; else result2 = DIALOG_STATUS_AVAILABLE; @@ -748,8 +747,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket for (Player::ClientGUIDs::const_iterator itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr) { - uint8 questStatus = DIALOG_STATUS_NONE; - uint8 defstatus = DIALOG_STATUS_NONE; + uint32 questStatus = DIALOG_STATUS_NONE; if (IS_CRE_OR_VEH_OR_PET_GUID(*itr)) { @@ -759,9 +757,10 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket continue; if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) continue; + questStatus = sScriptMgr->GetDialogStatus(_player, questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, questgiver); data << uint64(questgiver->GetGUID()); data << uint8(questStatus); @@ -770,13 +769,12 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket else if (IS_GAMEOBJECT_GUID(*itr)) { GameObject* questgiver = GetPlayer()->GetMap()->GetGameObject(*itr); - if (!questgiver) - continue; - if (questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) + if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) continue; + questStatus = sScriptMgr->GetDialogStatus(_player, questgiver); - if (questStatus > 6) - questStatus = getDialogStatus(_player, questgiver, defstatus); + if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) + questStatus = getDialogStatus(_player, questgiver); data << uint64(questgiver->GetGUID()); data << uint8(questStatus); diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index b264b0d2fff..62c4dfe5497 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -67,10 +67,10 @@ void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket) return; uint8 bagIndex, slot, castFlags; - uint8 castCount; // next cast if exists (single or not) + uint8 castCount; // next cast if exists (single or not) uint64 itemGUID; uint32 glyphIndex; // something to do with glyphs? - uint32 spellId; // casted spell id + uint32 spellId; // cast spell id recvPacket >> bagIndex >> slot >> castCount >> spellId >> itemGUID >> glyphIndex >> castFlags; @@ -357,7 +357,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) return; } - // Client is resending autoshot cast opcode when other spell is casted during shoot rotation + // Client is resending autoshot cast opcode when other spell is cast during shoot rotation // Skip it to prevent "interrupt" message if (spellInfo->IsAutoRepeatRangedSpell() && caster->GetCurrentSpell(CURRENT_AUTOREPEAT_SPELL) && caster->GetCurrentSpell(CURRENT_AUTOREPEAT_SPELL)->m_spellInfo == spellInfo) @@ -383,7 +383,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) { SpellInfo const* actualSpellInfo = spellInfo->GetAuraRankForLevel(targets.GetUnitTarget()->getLevel()); - // if rank not found then function return NULL but in explicit cast case original spell can be casted and later failed with appropriate error message + // if rank not found then function return NULL but in explicit cast case original spell can be cast and later failed with appropriate error message if (actualSpellInfo) spellInfo = actualSpellInfo; } @@ -400,7 +400,7 @@ void WorldSession::HandleCancelCastOpcode(WorldPacket& recvPacket) recvPacket.read_skip<uint8>(); // counter, increments with every CANCEL packet, don't use for now recvPacket >> spellId; - if (_player->IsNonMeleeSpellCasted(false)) + if (_player->IsNonMeleeSpellCast(false)) _player->InterruptNonMeleeSpells(false, spellId, false); } @@ -417,7 +417,7 @@ void WorldSession::HandleCancelAuraOpcode(WorldPacket& recvPacket) if (spellInfo->Attributes & SPELL_ATTR0_CANT_CANCEL) return; - // channeled spell case (it currently casted then) + // channeled spell case (it currently cast then) if (spellInfo->IsChanneled()) { if (Spell* curSpell = _player->GetCurrentSpell(CURRENT_CHANNELED_SPELL)) diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 8befde46550..7acd599eda3 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -90,7 +90,7 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/) data << uint32(TRADE_SLOT_COUNT); // trade slots count/number?, = next field in most cases data << uint32(TRADE_SLOT_COUNT); // trade slots count/number?, = prev field in most cases data << uint32(view_trade->GetMoney()); // trader gold - data << uint32(view_trade->GetSpell()); // spell casted on lowest slot item + data << uint32(view_trade->GetSpell()); // spell cast on lowest slot item for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) { @@ -351,7 +351,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) Spell* his_spell = NULL; SpellCastTargets his_targets; - // not accept if spell can't be casted now (cheating) + // not accept if spell can't be cast now (cheating) if (uint32 my_spell_id = my_trade->GetSpell()) { SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(my_spell_id); @@ -386,7 +386,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) } } - // not accept if spell can't be casted now (cheating) + // not accept if spell can't be cast now (cheating) if (uint32 his_spell_id = his_trade->GetSpell()) { SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(his_spell_id); diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index acc8012bbbc..ade08b3a35d 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -243,6 +243,16 @@ AI* GetInstanceAI(T* obj, char const* scriptName) return new AI(obj); return NULL; -} +}; + +template<class AI, class T> +AI* GetInstanceAI(T* obj) +{ + if (InstanceMap* instance = obj->GetMap()->ToInstanceMap()) + if (instance->GetInstanceScript()) + return new AI(obj); + + return NULL; +}; #endif // TRINITY_INSTANCE_DATA_H diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 367e512d4bb..9e4ef152ed3 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -63,15 +63,6 @@ Map::~Map() obj->ResetMap(); } - for (TransportsContainer::iterator itr = _transports.begin(); itr != _transports.end();) - { - Transport* transport = *itr; - ++itr; - - transport->RemoveFromWorld(); - delete transport; - } - if (!m_scriptSchedule.empty()) sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); @@ -568,6 +559,22 @@ bool Map::AddToMap(Transport* obj) obj->AddToWorld(); _transports.insert(obj); + // Broadcast creation to players + if (!GetPlayers().isEmpty()) + { + for (Map::PlayerList::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) + { + if (itr->GetSource()->GetTransport() != obj) + { + UpdateData data; + obj->BuildCreateUpdateBlockForPlayer(&data, itr->GetSource()); + WorldPacket packet; + data.BuildPacket(&packet); + itr->GetSource()->SendDirectMessage(&packet); + } + } + } + return true; } @@ -816,6 +823,18 @@ void Map::RemoveFromMap(Transport* obj, bool remove) { obj->RemoveFromWorld(); + Map::PlayerList const& players = GetPlayers(); + if (!players.isEmpty()) + { + UpdateData data; + obj->BuildOutOfRangeUpdateBlock(&data); + WorldPacket packet; + data.BuildPacket(&packet); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + if (itr->GetSource()->GetTransport() != obj) + itr->GetSource()->SendDirectMessage(&packet); + } + if (_transportsUpdateIter != _transports.end()) { TransportsContainer::iterator itr = _transports.find(obj); @@ -1363,6 +1382,17 @@ void Map::UnloadAll() ++i; UnloadGrid(grid, true); // deletes the grid and removes it from the GridRefManager } + + for (TransportsContainer::iterator itr = _transports.begin(); itr != _transports.end();) + { + Transport* transport = *itr; + ++itr; + + transport->RemoveFromWorld(); + delete transport; + } + + _transports.clear(); } // ***************************** diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index 11798201397..8e768924eb8 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -87,28 +87,60 @@ void TransportMgr::LoadTransportTemplates() TC_LOG_INFO("server.loading", ">> Loaded %u transport templates in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } +class SplineRawInitializer +{ +public: + SplineRawInitializer(Movement::PointsArray& points) : _points(points) { } + + void operator()(uint8& mode, bool& cyclic, Movement::PointsArray& points, int& lo, int& hi) const + { + mode = Movement::SplineBase::ModeCatmullrom; + cyclic = false; + points.assign(_points.begin(), _points.end()); + lo = 1; + hi = points.size(); + } + + Movement::PointsArray& _points; +}; + void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTemplate* transport) { uint32 pathId = goInfo->moTransport.taxiPathId; TaxiPathNodeList const& path = sTaxiPathNodesByPath[pathId]; std::vector<KeyFrame>& keyFrames = transport->keyFrames; - Movement::PointsArray splinePath; + Movement::PointsArray splinePath, allPoints; bool mapChange = false; - bool cyclic = true; + for (size_t i = 0; i < path.size(); ++i) + allPoints.push_back(G3D::Vector3(path[i].x, path[i].y, path[i].z)); + + // Add extra points to allow derivative calculations for all path nodes + allPoints.insert(allPoints.begin(), allPoints.front().lerp(allPoints[1], -0.2f)); + allPoints.push_back(allPoints.back().lerp(allPoints[allPoints.size() - 2], -0.2f)); + allPoints.push_back(allPoints.back().lerp(allPoints[allPoints.size() - 2], -1.0f)); + + SplineRawInitializer initer(allPoints); + TransportSpline orientationSpline; + orientationSpline.init_spline_custom(initer); + orientationSpline.initLengths(); + for (size_t i = 0; i < path.size(); ++i) { if (!mapChange) { TaxiPathNodeEntry const& node_i = path[i]; - if (i != path.size() - 1 && (node_i.actionFlag == 1 || node_i.mapid != path[i + 1].mapid)) + if (i != path.size() - 1 && (node_i.actionFlag & 1 || node_i.mapid != path[i + 1].mapid)) { - cyclic = false; keyFrames.back().Teleport = true; mapChange = true; } else { KeyFrame k(node_i); + G3D::Vector3 h; + orientationSpline.evaluate_derivative(i + 1, 0.0f, h); + k.InitialOrientation = Position::NormalizeOrientation(atan2(h.y, h.x) + M_PI); + keyFrames.push_back(k); splinePath.push_back(G3D::Vector3(node_i.x, node_i.y, node_i.z)); transport->mapsUsed.insert(k.Node->mapid); @@ -118,16 +150,15 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl mapChange = false; } - // Not sure if data8 means the transport can be stopped or that its path in dbc does not contain extra spline points - if (!goInfo->moTransport.canBeStopped && splinePath.size() >= 2) + if (splinePath.size() >= 2) { // Remove special catmull-rom spline points - splinePath.erase(splinePath.begin()); - keyFrames.erase(keyFrames.begin()); - splinePath.pop_back(); - keyFrames.pop_back(); - // Cyclic spline has one more extra point - if (cyclic && !splinePath.empty()) + if (!keyFrames.front().IsStopFrame() && !keyFrames.front().Node->arrivalEventID && !keyFrames.front().Node->departureEventID) + { + splinePath.erase(splinePath.begin()); + keyFrames.erase(keyFrames.begin()); + } + if (!keyFrames.back().IsStopFrame() && !keyFrames.back().Node->arrivalEventID && !keyFrames.back().Node->departureEventID) { splinePath.pop_back(); keyFrames.pop_back(); @@ -170,67 +201,41 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl // find the rest of the distances between key points // Every path segment has its own spline - if (cyclic) - { - TransportSpline* spline = new TransportSpline(); - spline->init_cyclic_spline(&splinePath[0], splinePath.size(), Movement::SplineBase::ModeCatmullrom, 0); - spline->initLengths(); - keyFrames[0].DistFromPrev = spline->length(spline->last() - 2, spline->last() - 1); - keyFrames[0].Spline = spline; - for (size_t i = 0; i < keyFrames.size(); ++i) - { - keyFrames[i].Index = i + 1; - keyFrames[i].DistFromPrev = spline->length(i, i + 1); - if (i > 0) - keyFrames[i - 1].NextDistFromPrev = keyFrames[i].DistFromPrev; - keyFrames[i].Spline = spline; - if (keyFrames[i].IsStopFrame()) - { - // remember first stop frame - if (firstStop == -1) - firstStop = i; - lastStop = i; - } - } - } - else + size_t start = 0; + for (size_t i = 1; i < keyFrames.size(); ++i) { - size_t start = 0; - for (size_t i = 1; i < keyFrames.size(); ++i) + if (keyFrames[i - 1].Teleport || i + 1 == keyFrames.size()) { - if (keyFrames[i - 1].Teleport || i + 1 == keyFrames.size()) + size_t extra = !keyFrames[i - 1].Teleport ? 1 : 0; + TransportSpline* spline = new TransportSpline(); + spline->init_spline(&splinePath[start], i - start + extra, Movement::SplineBase::ModeCatmullrom); + spline->initLengths(); + for (size_t j = start; j < i + extra; ++j) { - size_t extra = !keyFrames[i - 1].Teleport ? 1 : 0; - TransportSpline* spline = new TransportSpline(); - spline->init_spline(&splinePath[start], i - start + extra, Movement::SplineBase::ModeCatmullrom); - spline->initLengths(); - for (size_t j = start; j < i + extra; ++j) - { - keyFrames[j].Index = j - start + 1; - keyFrames[j].DistFromPrev = spline->length(j - start, j + 1 - start); - if (j > 0) - keyFrames[j - 1].NextDistFromPrev = keyFrames[j].DistFromPrev; - keyFrames[j].Spline = spline; - } - - if (keyFrames[i - 1].Teleport) - { - keyFrames[i].Index = i - start + 1; - keyFrames[i].DistFromPrev = 0.0f; - keyFrames[i - 1].NextDistFromPrev = 0.0f; - keyFrames[i].Spline = spline; - } - - start = i; + keyFrames[j].Index = j - start + 1; + keyFrames[j].DistFromPrev = spline->length(j - start, j + 1 - start); + if (j > 0) + keyFrames[j - 1].NextDistFromPrev = keyFrames[j].DistFromPrev; + keyFrames[j].Spline = spline; } - if (keyFrames[i].IsStopFrame()) + if (keyFrames[i - 1].Teleport) { - // remember first stop frame - if (firstStop == -1) - firstStop = i; - lastStop = i; + keyFrames[i].Index = i - start + 1; + keyFrames[i].DistFromPrev = 0.0f; + keyFrames[i - 1].NextDistFromPrev = 0.0f; + keyFrames[i].Spline = spline; } + + start = i; + } + + if (keyFrames[i].IsStopFrame()) + { + // remember first stop frame + if (firstStop == -1) + firstStop = i; + lastStop = i; } } @@ -373,7 +378,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* float x = startNode->x; float y = startNode->y; float z = startNode->z; - float o = 0.0f; + float o = tInfo->keyFrames.begin()->InitialOrientation; // initialize the gameobject base uint32 guidLow = guid ? guid : sObjectMgr->GenerateLowGuid(HIGHGUID_MO_TRANSPORT); diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index 205a614eabb..c2f82069b30 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -38,7 +38,7 @@ typedef UNORDERED_MAP<uint32, std::set<uint32> > TransportInstanceMap; struct KeyFrame { - explicit KeyFrame(TaxiPathNodeEntry const& _node) : Index(0), Node(&_node), + explicit KeyFrame(TaxiPathNodeEntry const& _node) : Index(0), Node(&_node), InitialOrientation(0.0f), DistSinceStop(-1.0f), DistUntilStop(-1.0f), DistFromPrev(-1.0f), TimeFrom(0.0f), TimeTo(0.0f), Teleport(false), ArriveTime(0), DepartureTime(0), Spline(NULL), NextDistFromPrev(0.0f), NextArriveTime(0) { @@ -46,6 +46,7 @@ struct KeyFrame uint32 Index; TaxiPathNodeEntry const* Node; + float InitialOrientation; float DistSinceStop; float DistUntilStop; float DistFromPrev; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 81748f59b46..20f8efe5dfa 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -386,7 +386,7 @@ enum SpellAttr3 SPELL_ATTR3_ONLY_TARGET_PLAYERS = 0x00000100, // 8 can only target players SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 = 0x00000200, // 9 triggered from effect? SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required - SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground + SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can only be cast in battleground SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // 12 SPELL_ATTR3_UNK13 = 0x00002000, // 13 SPELL_ATTR3_IS_HONORLESS_TARGET = 0x00004000, // 14 "Honorless Target" only this spells have this flag diff --git a/src/server/game/Movement/Spline/Spline.cpp b/src/server/game/Movement/Spline/Spline.cpp index 887541e2289..6424afc5d6e 100644 --- a/src/server/game/Movement/Spline/Spline.cpp +++ b/src/server/game/Movement/Spline/Spline.cpp @@ -156,7 +156,7 @@ float SplineBase::SegLengthLinear(index_type index) const return (points[index] - points[index+1]).length(); } -float SplineBase::SegLengthCatmullRom( index_type index ) const +float SplineBase::SegLengthCatmullRom(index_type index) const { ASSERT(index >= index_lo && index < index_hi); diff --git a/src/server/game/Movement/Spline/Spline.h b/src/server/game/Movement/Spline/Spline.h index dab31e957f1..1444b2872d1 100644 --- a/src/server/game/Movement/Spline/Spline.h +++ b/src/server/game/Movement/Spline/Spline.h @@ -118,7 +118,7 @@ public: /** As i can see there are a lot of ways how spline can be initialized would be no harm to have some custom initializers. */ - template<class Init> inline void init_spline(Init& initializer) + template<class Init> inline void init_spline_custom(Init& initializer) { initializer(m_mode, cyclic, points, index_lo, index_hi); } diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 88a4ddfcad9..f763777fe15 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -118,7 +118,10 @@ enum QuestGiverStatus DIALOG_STATUS_AVAILABLE_REP = 7, DIALOG_STATUS_AVAILABLE = 8, DIALOG_STATUS_REWARD2 = 9, // no yellow dot on minimap - DIALOG_STATUS_REWARD = 10 // yellow dot on minimap + DIALOG_STATUS_REWARD = 10, // yellow dot on minimap + + // Custom value meaning that script call did not return any valid quest status + DIALOG_STATUS_SCRIPTED_NO_STATUS = 0x1000, }; enum QuestFlags diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index 41c18b850a1..b9765bbbdc2 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -166,7 +166,7 @@ inline Unit* Map::_GetScriptUnit(Object* obj, bool isSource, const ScriptInfo* s { unit = obj->ToUnit(); if (!unit) - TC_LOG_ERROR("scripts", "%s %s object could not be casted to unit.", + TC_LOG_ERROR("scripts", "%s %s object could not be cast to unit.", scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target"); } return unit; @@ -242,7 +242,7 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script { WorldObject* wSource = dynamic_cast <WorldObject*> (source); if (!wSource) - TC_LOG_ERROR("scripts", "%s source object could not be casted to world object (TypeId: %u, Entry: %u, GUID: %u), skipping.", + TC_LOG_ERROR("scripts", "%s source object could not be cast to world object (TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow()); else { @@ -335,7 +335,7 @@ void Map::ScriptsProcess() } } - Object* target = NULL; + WorldObject* target = NULL; if (step.targetGUID) { switch (GUID_HIPART(step.targetGUID)) @@ -421,28 +421,28 @@ void Map::ScriptsProcess() switch (step.script->Talk.ChatType) { case CHAT_TYPE_SAY: - cSource->Say(step.script->Talk.TextID, LANG_UNIVERSAL, targetGUID); + cSource->MonsterSay(step.script->Talk.TextID, LANG_UNIVERSAL, target); break; case CHAT_TYPE_YELL: - cSource->Yell(step.script->Talk.TextID, LANG_UNIVERSAL, targetGUID); + cSource->MonsterYell(step.script->Talk.TextID, LANG_UNIVERSAL, target); break; case CHAT_TYPE_TEXT_EMOTE: - cSource->TextEmote(step.script->Talk.TextID, targetGUID); + cSource->MonsterTextEmote(step.script->Talk.TextID, target); break; case CHAT_TYPE_BOSS_EMOTE: - cSource->MonsterTextEmote(step.script->Talk.TextID, targetGUID, true); + cSource->MonsterTextEmote(step.script->Talk.TextID, target, true); break; case CHAT_TYPE_WHISPER: if (!targetGUID || !IS_PLAYER_GUID(targetGUID)) TC_LOG_ERROR("scripts", "%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str()); else - cSource->Whisper(step.script->Talk.TextID, targetGUID); + cSource->MonsterWhisper(step.script->Talk.TextID, target->ToPlayer()); break; case CHAT_MSG_RAID_BOSS_WHISPER: if (!targetGUID || !IS_PLAYER_GUID(targetGUID)) TC_LOG_ERROR("scripts", "%s attempt to raidbosswhisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str()); else - cSource->MonsterWhisper(step.script->Talk.TextID, targetGUID, true); + cSource->MonsterWhisper(step.script->Talk.TextID, target->ToPlayer(), true); break; default: break; // must be already checked at load diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 3674f8fe15e..6a1ab28efed 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -778,8 +778,7 @@ uint32 ScriptMgr::GetDialogStatus(Player* player, Creature* creature) ASSERT(player); ASSERT(creature); - /// @todo 100 is a funny magic number to have hanging around here... - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, 100); + GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, DIALOG_STATUS_SCRIPTED_NO_STATUS); player->PlayerTalkClass->ClearMenus(); return tmpscript->GetDialogStatus(player, creature); } @@ -864,8 +863,7 @@ uint32 ScriptMgr::GetDialogStatus(Player* player, GameObject* go) ASSERT(player); ASSERT(go); - /// @todo 100 is a funny magic number to have hanging around here... - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, 100); + GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, DIALOG_STATUS_SCRIPTED_NO_STATUS); player->PlayerTalkClass->ClearMenus(); return tmpscript->GetDialogStatus(player, go); } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 401be45a4e1..18ed549029d 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -24,6 +24,7 @@ #include <ace/Atomic_Op.h> #include "DBCStores.h" +#include "QuestDef.h" #include "SharedDefines.h" #include "World.h" #include "Weather.h" @@ -447,7 +448,7 @@ class CreatureScript : public UnitScript, public UpdatableScript<Creature> virtual bool OnQuestReward(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } // Called when the dialog status between a player and the creature is requested. - virtual uint32 GetDialogStatus(Player* /*player*/, Creature* /*creature*/) { return 100; } + virtual uint32 GetDialogStatus(Player* /*player*/, Creature* /*creature*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } // Called when a CreatureAI object is needed for the creature. virtual CreatureAI* GetAI(Creature* /*creature*/) const { return NULL; } @@ -482,7 +483,7 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject> virtual bool OnQuestReward(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } // Called when the dialog status between a player and the gameobject is requested. - virtual uint32 GetDialogStatus(Player* /*player*/, GameObject* /*go*/) { return 100; } + virtual uint32 GetDialogStatus(Player* /*player*/, GameObject* /*go*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } // Called when the game object is destroyed (destructible buildings only). virtual void OnDestroyed(GameObject* /*go*/, Player* /*player*/) { } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 2d7ec9c68c6..4aef02206c4 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -357,7 +357,7 @@ class WorldSession uint32 GetLatency() const { return m_latency; } void SetLatency(uint32 latency) { m_latency = latency; } void ResetClientTimeDelay() { m_clientTimeDelay = 0; } - uint32 getDialogStatus(Player* player, Object* questgiver, uint32 defstatus); + uint32 getDialogStatus(Player* player, Object* questgiver); ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime; void UpdateTimeOutTime(uint32 diff) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 2a6d53089b9..9ac1862c016 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -709,7 +709,7 @@ void AuraEffect::ApplySpellMod(Unit* target, bool apply) { Aura* aura = iter->second->GetBase(); // only passive and permament auras-active auras should have amount set on spellcast and not be affected - // if aura is casted by others, it will not be affected + // if aura is cast by others, it will not be affected if ((aura->IsPassive() || aura->IsPermanent()) && aura->GetCasterGUID() == guid && aura->GetSpellInfo()->IsAffectedBySpellMod(m_spellmod)) { if (GetMiscValue() == SPELLMOD_ALL_EFFECTS) @@ -4531,7 +4531,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool if (target->GetTypeId() != TYPEID_PLAYER) return; // ..while they are casting - if (target->IsNonMeleeSpellCasted(false, false, true, false, true)) + if (target->IsNonMeleeSpellCast(false, false, true, false, true)) if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_WARRIOR, 2775, 0)) switch (aurEff->GetId()) { @@ -4727,7 +4727,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool case 42783: // Wrath of the Astromancer target->CastSpell(target, GetAmount(), true, NULL, this); break; - case 46308: // Burning Winds casted only at creatures at spawn + case 46308: // Burning Winds cast only at creatures at spawn target->CastSpell(target, 47287, true, NULL, this); break; case 52172: // Coyote Spirit Despawn Aura diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 70769b50b29..90679ad17b6 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -114,12 +114,12 @@ void AuraApplication::_Remove() void AuraApplication::_InitFlags(Unit* caster, uint8 effMask) { - // mark as selfcasted if needed + // mark as selfcast if needed _flags |= (GetBase()->GetCasterGUID() == GetTarget()->GetGUID()) ? AFLAG_CASTER : AFLAG_NONE; - // aura is casted by self or an enemy + // aura is cast by self or an enemy // one negative effect and we know aura is negative - if (IsSelfcasted() || !caster || !caster->IsFriendlyTo(GetTarget())) + if (IsSelfcast() || !caster || !caster->IsFriendlyTo(GetTarget())) { bool negativeFound = false; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) @@ -132,7 +132,7 @@ void AuraApplication::_InitFlags(Unit* caster, uint8 effMask) } _flags |= negativeFound ? AFLAG_NEGATIVE : AFLAG_POSITIVE; } - // aura is casted by friend + // aura is cast by friend // one positive effect and we know aura is positive else { @@ -306,7 +306,7 @@ Aura* Aura::Create(SpellInfo const* spellproto, uint8 effMask, WorldObject* owne // check if aura can be owned by owner if (owner->isType(TYPEMASK_UNIT)) if (!owner->IsInWorld() || ((Unit*)owner)->IsDuringRemoveFromWorld()) - // owner not in world so don't allow to own not self casted single target auras + // owner not in world so don't allow to own not self cast single target auras if (casterGUID != owner->GetGUID() && spellproto->IsSingleTarget()) return NULL; @@ -1279,7 +1279,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b } break; case SPELLFAMILY_ROGUE: - // Sprint (skip non player casted spells by category) + // Sprint (skip non player cast spells by category) if (GetSpellInfo()->SpellFamilyFlags[0] & 0x40 && GetSpellInfo()->GetCategory() == 44) // in official maybe there is only one icon? if (target->HasAura(58039)) // Glyph of Blurred Speed @@ -1675,7 +1675,7 @@ bool Aura::CanBeAppliedOn(Unit* target) // area auras mustn't be applied if (GetOwner() != target) return false; - // not selfcasted single target auras mustn't be applied + // do not apply non-selfcast single target auras if (GetCasterGUID() != GetOwner()->GetGUID() && GetSpellInfo()->IsSingleTarget()) return false; return true; diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 9e7d0cce82c..123ad9d5a8a 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -69,7 +69,7 @@ class AuraApplication uint8 GetEffectMask() const { return _flags & (AFLAG_EFF_INDEX_0 | AFLAG_EFF_INDEX_1 | AFLAG_EFF_INDEX_2); } bool HasEffect(uint8 effect) const { ASSERT(effect < MAX_SPELL_EFFECTS); return _flags & (1<<effect); } bool IsPositive() const { return _flags & AFLAG_POSITIVE; } - bool IsSelfcasted() const { return _flags & AFLAG_CASTER; } + bool IsSelfcast() const { return _flags & AFLAG_CASTER; } uint8 GetEffectsToApply() const { return _effectsToApply; } void SetRemoveMode(AuraRemoveMode mode) { _removeMode = mode; } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index b4353f3a620..200564e1f8d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2412,7 +2412,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) m_spellAura = NULL; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied - //Spells with this flag cannot trigger if effect is casted on self + //Spells with this flag cannot trigger if effect is cast on self bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && CanExecuteTriggersOnHit(mask); Unit* spellHitTarget = NULL; @@ -3007,7 +3007,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered m_caster->m_Events.AddEvent(Event, m_caster->m_Events.CalculateTime(1)); //Prevent casting at cast another spell (ServerSide check) - if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CAST_IN_PROGRESS) && m_caster->IsNonMeleeSpellCasted(false, true, true) && m_cast_count) + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CAST_IN_PROGRESS) && m_caster->IsNonMeleeSpellCast(false, true, true) && m_cast_count) { SendCastResult(SPELL_FAILED_SPELL_IN_PROGRESS); finish(false); @@ -3070,7 +3070,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered else m_casttime = m_spellInfo->CalcCastTime(this); - // don't allow channeled spells / spells with cast time to be casted while moving + // don't allow channeled spells / spells with cast time to be cast while moving // (even if they are interrupted on moving, spells with almost immediate effect get to have their effect processed before movement interrupter kicks in) if ((m_spellInfo->IsChanneled() || m_casttime) && m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->isMoving() && m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_MOVEMENT) { @@ -3085,7 +3085,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered TC_LOG_DEBUG("spells", "Spell::prepare: spell id %u source %u caster %d customCastFlags %u mask %u", m_spellInfo->Id, m_caster->GetEntry(), m_originalCaster ? m_originalCaster->GetEntry() : -1, _triggeredCastFlags, m_targets.GetTargetMask()); //Containers for channeled spells have to be set - /// @todoApply this to all casted spells if needed + /// @todoApply this to all cast spells if needed // Why check duration? 29350: channelled triggers channelled if ((_triggeredCastFlags & TRIGGERED_CAST_DIRECTLY) && (!m_spellInfo->IsChanneled() || !m_spellInfo->GetMaxDuration())) cast(true); @@ -3104,7 +3104,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered } } - m_caster->SetCurrentCastedSpell(this); + m_caster->SetCurrentCastSpell(this); SendSpellStart(); // set target for proper facing @@ -3214,7 +3214,7 @@ void Spell::cast(bool skipCheck) if (m_caster->GetTypeId() == TYPEID_PLAYER) { // Set spell which will drop charges for triggered cast spells - // if not successfully casted, will be remove in finish(false) + // if not successfully cast, will be remove in finish(false) m_caster->ToPlayer()->SetSpellModTakingSpell(this, true); } @@ -3251,7 +3251,7 @@ void Spell::cast(bool skipCheck) { if (!my_trade->IsInAcceptProcess()) { - // Spell will be casted at completing the trade. Silently ignore at this place + // Spell will be cast after completing the trade. Silently ignore at this place my_trade->SetSpell(m_spellInfo->Id, m_CastItem); SendCastResult(SPELL_FAILED_DONT_REPORT); SendInterrupted(0); @@ -3341,7 +3341,7 @@ void Spell::cast(bool skipCheck) m_spellState = SPELL_STATE_DELAYED; SetDelayStart(0); - if (m_caster->HasUnitState(UNIT_STATE_CASTING) && !m_caster->IsNonMeleeSpellCasted(false, false, true)) + if (m_caster->HasUnitState(UNIT_STATE_CASTING) && !m_caster->IsNonMeleeSpellCast(false, false, true)) m_caster->ClearUnitState(UNIT_STATE_CASTING); } else @@ -3663,7 +3663,7 @@ void Spell::finish(bool ok) if (m_spellInfo->IsChanneled()) m_caster->UpdateInterruptMask(); - if (m_caster->HasUnitState(UNIT_STATE_CASTING) && !m_caster->IsNonMeleeSpellCasted(false, false, true)) + if (m_caster->HasUnitState(UNIT_STATE_CASTING) && !m_caster->IsNonMeleeSpellCast(false, false, true)) m_caster->ClearUnitState(UNIT_STATE_CASTING); // Unsummon summon as possessed creatures on spell cancel @@ -3999,7 +3999,7 @@ void Spell::SendSpellGo() if (castFlags & CAST_FLAG_RUNE_LIST) // rune cooldowns list { - /// @todo There is a crash caused by a spell with CAST_FLAG_RUNE_LIST casted by a creature + /// @todo There is a crash caused by a spell with CAST_FLAG_RUNE_LIST cast by a creature //The creature is the mover of a player, so HandleCastSpellOpcode uses it as the caster if (Player* player = m_caster->ToPlayer()) { @@ -4920,7 +4920,7 @@ SpellCastResult Spell::CheckCast(bool strict) if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER) && !target->HasInArc(static_cast<float>(M_PI), m_caster)) return SPELL_FAILED_NOT_INFRONT; - if (m_caster->GetEntry() != WORLD_TRIGGER) // Ignore LOS for gameobjects casts (wrongly casted by a trigger) + if (m_caster->GetEntry() != WORLD_TRIGGER) // Ignore LOS for gameobjects casts (wrongly cast by a trigger) if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOSInMap(target)) return SPELL_FAILED_LINE_OF_SIGHT; } @@ -4952,7 +4952,7 @@ SpellCastResult Spell::CheckCast(bool strict) } } - // Spell casted only on battleground + // Spell cast only in battleground if ((m_spellInfo->AttributesEx3 & SPELL_ATTR3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER) if (!m_caster->ToPlayer()->InBattleground()) return SPELL_FAILED_ONLY_BATTLEGROUNDS; @@ -5500,7 +5500,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (!m_targets.GetUnitTarget()) return SPELL_FAILED_BAD_IMPLICIT_TARGETS; - // can be casted at non-friendly unit or own pet/charm + // can be cast at non-friendly unit or own pet/charm if (m_caster->IsFriendlyTo(m_targets.GetUnitTarget())) return SPELL_FAILED_TARGET_FRIENDLY; @@ -5728,7 +5728,7 @@ SpellCastResult Spell::CheckCasterAuras() const } } } - // You are prevented from casting and the spell casted does not grant immunity. Return a failed error. + // You are prevented from casting and the spell cast does not grant immunity. Return a failed error. else return prevented_reason; } @@ -6122,19 +6122,39 @@ SpellCastResult Spell::CheckItems() } } - SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(m_spellInfo->Effects[i].MiscValue); + SpellItemEnchantmentEntry const* enchantEntry = sSpellItemEnchantmentStore.LookupEntry(m_spellInfo->Effects[i].MiscValue); // do not allow adding usable enchantments to items that have use effect already - if (pEnchant && isItemUsable) + if (enchantEntry) + { for (uint8 s = 0; s < MAX_ITEM_ENCHANTMENT_EFFECTS; ++s) - if (pEnchant->type[s] == ITEM_ENCHANTMENT_TYPE_USE_SPELL) - return SPELL_FAILED_ON_USE_ENCHANT; + { + switch (enchantEntry->type[s]) + { + case ITEM_ENCHANTMENT_TYPE_USE_SPELL: + if (isItemUsable) + return SPELL_FAILED_ON_USE_ENCHANT; + break; + case ITEM_ENCHANTMENT_TYPE_PRISMATIC_SOCKET: + { + uint32 numSockets = 0; + for (uint32 socket = 0; socket < MAX_ITEM_PROTO_SOCKETS; ++socket) + if (targetItem->GetTemplate()->Socket[socket].Color) + ++numSockets; + + if (numSockets == MAX_ITEM_PROTO_SOCKETS || targetItem->GetEnchantmentId(PRISMATIC_ENCHANTMENT_SLOT)) + return SPELL_FAILED_MAX_SOCKETS; + break; + } + } + } + } // Not allow enchant in trade slot for some enchant type if (targetItem->GetOwner() != m_caster) { - if (!pEnchant) + if (!enchantEntry) return SPELL_FAILED_ERROR; - if (pEnchant->slot & ENCHANTMENT_CAN_SOULBOUND) + if (enchantEntry->slot & ENCHANTMENT_CAN_SOULBOUND) return SPELL_FAILED_NOT_TRADEABLE; } break; @@ -6644,11 +6664,11 @@ bool SpellEvent::Execute(uint64 e_time, uint32 p_time) /* if (m_Spell->m_spellInfo->IsChanneled()) { - // evented channeled spell is processed separately, casted once after delay, and not destroyed till finish + // evented channeled spell is processed separately, cast once after delay, and not destroyed till finish // check, if we have casting anything else except this channeled spell and autorepeat - if (m_Spell->GetCaster()->IsNonMeleeSpellCasted(false, true, true)) + if (m_Spell->GetCaster()->IsNonMeleeSpellCast(false, true, true)) { - // another non-melee non-delayed spell is casted now, abort + // another non-melee non-delayed spell is cast now, abort m_Spell->cancel(); } else @@ -6877,7 +6897,7 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk 0 : m_caster->ToPlayer()->GetSkillValue(skillId); // skill bonus provided by casting spell (mostly item spells) - // add the effect base points modifier from the spell casted (cheat lock / skeleton key etc.) + // add the effect base points modifier from the spell cast (cheat lock / skeleton key etc.) if (m_spellInfo->Effects[effIndex].TargetA.GetTarget() == TARGET_GAMEOBJECT_ITEM_TARGET || m_spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_GAMEOBJECT_ITEM_TARGET) skillValue += m_spellInfo->Effects[effIndex].CalcValue(); @@ -7178,7 +7198,7 @@ bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToC bool Spell::CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* triggeredByAura) const { bool only_on_caster = (triggeredByAura && (triggeredByAura->AttributesEx4 & SPELL_ATTR4_PROC_ONLY_ON_CASTER)); - // If triggeredByAura has SPELL_ATTR4_PROC_ONLY_ON_CASTER then it can only proc on a casted spell with TARGET_UNIT_CASTER + // If triggeredByAura has SPELL_ATTR4_PROC_ONLY_ON_CASTER then it can only proc on a cast spell with TARGET_UNIT_CASTER for (uint8 i = 0;i < MAX_SPELL_EFFECTS; ++i) { if ((effMask & (1 << i)) && (!only_on_caster || (m_spellInfo->Effects[i].TargetA.GetTarget() == TARGET_UNIT_CASTER))) @@ -7268,7 +7288,7 @@ void Spell::TriggerGlobalCooldown() return; // Global cooldown can't leave range 1..1.5 secs - // There are some spells (mostly not casted directly by player) that have < 1 sec and > 1.5 sec global cooldowns + // There are some spells (mostly not cast directly by player) that have < 1 sec and > 1.5 sec global cooldowns // but as tests show are not affected by any spell mods. if (m_spellInfo->StartRecoveryTime >= MIN_GCD && m_spellInfo->StartRecoveryTime <= MAX_GCD) { diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 927ecd32f29..6fc0c9b749d 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -209,7 +209,7 @@ enum SpellEffectHandleMode class Spell { - friend void Unit::SetCurrentCastedSpell(Spell* pSpell); + friend void Unit::SetCurrentCastSpell(Spell* pSpell); friend class SpellScript; public: diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 6e2bc0c76e1..90334281a8a 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3833,7 +3833,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) if (m_caster->getGender() > 0) gender = "her"; sprintf(buf, "%s rubs %s [Decahedral Dwarven Dice] between %s hands and rolls. One %u and one %u.", m_caster->GetName().c_str(), gender, gender, urand(1, 10), urand(1, 10)); - m_caster->MonsterTextEmote(buf, 0); + m_caster->MonsterTextEmote(buf, NULL); break; } // Roll 'dem Bones - Worn Troll Dice @@ -3844,7 +3844,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) if (m_caster->getGender() > 0) gender = "her"; sprintf(buf, "%s causually tosses %s [Worn Troll Dice]. One %u and one %u.", m_caster->GetName().c_str(), gender, urand(1, 6), urand(1, 6)); - m_caster->MonsterTextEmote(buf, 0); + m_caster->MonsterTextEmote(buf, NULL); break; } // Death Knight Initiate Visual @@ -4901,8 +4901,8 @@ void Spell::EffectKnockBack(SpellEffIndex effIndex) if (unitTarget->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) return; - // Instantly interrupt non melee spells being casted - if (unitTarget->IsNonMeleeSpellCasted(true)) + // Instantly interrupt non melee spells being cast + if (unitTarget->IsNonMeleeSpellCast(true)) unitTarget->InterruptNonMeleeSpells(true); float ratio = 0.1f; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 6b54df27596..bd10f484f64 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1311,10 +1311,10 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const uint32 stanceMask = (form ? 1 << (form - 1) : 0); - if (stanceMask & StancesNot) // can explicitly not be casted in this stance + if (stanceMask & StancesNot) // can explicitly not be cast in this stance return SPELL_FAILED_NOT_SHAPESHIFT; - if (stanceMask & Stances) // can explicitly be casted in this stance + if (stanceMask & Stances) // can explicitly be cast in this stance return SPELL_CAST_OK; bool actAsShifted = false; @@ -2518,12 +2518,12 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const case SPELL_AURA_PREVENT_RESURRECTION: return false; case SPELL_AURA_PERIODIC_DAMAGE: // used in positive spells also. - // part of negative spell if casted at self (prevent cancel) + // part of negative spell if cast at self (prevent cancel) if (Effects[effIndex].TargetA.GetTarget() == TARGET_UNIT_CASTER) return false; break; case SPELL_AURA_MOD_DECREASE_SPEED: // used in positive spells also - // part of positive spell if casted at self + // part of positive spell if cast at self if (Effects[effIndex].TargetA.GetTarget() != TARGET_UNIT_CASTER) return false; // but not this if this first effect (didn't find better check) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 730f89a7b6b..ff9c57d8521 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1534,8 +1534,8 @@ void SpellMgr::LoadSpellLearnSpells() if (!GetSpellInfo(dbc_node.spell)) continue; - // talent or passive spells or skill-step spells auto-casted and not need dependent learning, - // pet teaching spells must not be dependent learning (casted) + // talent or passive spells or skill-step spells auto-cast and not need dependent learning, + // pet teaching spells must not be dependent learning (cast) // other required explicit dependent learning dbc_node.autoLearned = entry->Effects[i].TargetA.GetTarget() == TARGET_UNIT_PET || GetTalentSpellCost(spell) > 0 || entry->IsPassive() || entry->HasEffect(SPELL_EFFECT_SKILL_STEP); @@ -3719,7 +3719,7 @@ void SpellMgr::LoadSpellInfoCorrections() break; // This would never crit on retail and it has attribute for SPELL_ATTR3_NO_DONE_BONUS because is handled from player, // until someone figures how to make scions not critting without hack and without making them main casters this should stay here. - case 63934: // Arcane Barrage (casted by players and NONMELEEDAMAGELOG with caster Scion of Eternity (original caster)). + case 63934: // Arcane Barrage (cast by players and NONMELEEDAMAGELOG with caster Scion of Eternity (original caster)). spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT; break; // ENDOF EYE OF ETERNITY SPELLS diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 0d5643bc50c..4c25adb0476 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -775,11 +775,11 @@ class AuraScript : public _SpellScript // returns spellid of the spell uint32 GetId() const; - // returns guid of object which casted the aura (m_originalCaster of the Spell class) + // returns guid of object which cast the aura (m_originalCaster of the Spell class) uint64 GetCasterGUID() const; - // returns unit which casted the aura or NULL if not avalible (caster logged out for example) + // returns unit which cast the aura or NULL if not avalible (caster logged out for example) Unit* GetCaster() const; - // returns object on which aura was casted, target for non-area auras, area aura source for area auras + // returns object on which aura was cast, target for non-area auras, area aura source for area auras WorldObject* GetOwner() const; // returns owner if it's unit or unit derived object, NULL otherwise (only for persistent area auras NULL is returned) Unit* GetUnitOwner() const; diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 264b69750f0..e0f37624a7a 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -20,6 +20,7 @@ #include "ObjectMgr.h" #include "Cell.h" #include "CellImpl.h" +#include "Chat.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "CreatureTextMgr.h" @@ -27,34 +28,16 @@ class CreatureTextBuilder { public: - CreatureTextBuilder(WorldObject* obj, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, uint64 targetGUID) - : _source(obj), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _targetGUID(targetGUID) + CreatureTextBuilder(WorldObject* obj, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) + : _source(obj), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale); - std::string const& localizedName = _source->GetNameForLocaleIdx(locale); - - *data << uint8(_msgType); - *data << uint32(_language); - *data << uint64(_source->GetGUID()); - *data << uint32(1); // 2.1.0 - *data << uint32(localizedName.size() + 1); - *data << localizedName; - size_t whisperGUIDpos = data->wpos(); - *data << uint64(_targetGUID); // Unit Target - if (_targetGUID && !IS_PLAYER_GUID(_targetGUID)) - { - *data << uint32(1); // target name length - *data << uint8(0); // target name - } - *data << uint32(text.length() + 1); - *data << text; - *data << uint8(0); // ChatTag - return whisperGUIDpos; + return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale); } WorldObject* _source; @@ -62,14 +45,14 @@ class CreatureTextBuilder uint8 _textGroup; uint32 _textId; uint32 _language; - uint64 _targetGUID; + WorldObject const* _target; }; class PlayerTextBuilder { public: - PlayerTextBuilder(WorldObject* obj, WorldObject* speaker, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, uint64 targetGUID) - : _source(obj), _talker(speaker), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _targetGUID(targetGUID) + PlayerTextBuilder(WorldObject* obj, WorldObject* speaker, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) + : _source(obj), _talker(speaker), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } @@ -77,24 +60,7 @@ class PlayerTextBuilder { std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale); - *data << uint8(_msgType); - *data << uint32(_language); - *data << uint64(_talker->GetGUID()); - *data << uint32(1); // 2.1.0 - *data << uint32(_talker->GetName().size() + 1); - *data << _talker->GetName(); - size_t whisperGUIDpos = data->wpos(); - *data << uint64(_targetGUID); // Unit Target - if (_targetGUID && !IS_PLAYER_GUID(_targetGUID)) - { - *data << uint32(1); // target name length - *data << uint8(0); // target name - } - *data << uint32(text.length() + 1); - *data << text; - *data << uint8(0); // ChatTag - - return whisperGUIDpos; + return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _talker, _target, text, 0, "", locale); } WorldObject* _source; @@ -103,7 +69,7 @@ class PlayerTextBuilder uint8 _textGroup; uint32 _textId; uint32 _language; - uint64 _targetGUID; + WorldObject const* _target; }; void CreatureTextMgr::LoadCreatureTexts() @@ -211,7 +177,7 @@ void CreatureTextMgr::LoadCreatureTextLocales() } -uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, uint64 whisperGuid /*= 0*/, ChatMsg msgType /*= CHAT_MSG_ADDON*/, Language language /*= LANG_ADDON*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, uint32 sound /*= 0*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/, Player* srcPlr /*= NULL*/) +uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget /*= NULL*/, ChatMsg msgType /*= CHAT_MSG_ADDON*/, Language language /*= LANG_ADDON*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, uint32 sound /*= 0*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/, Player* srcPlr /*= NULL*/) { if (!source) return 0; @@ -293,7 +259,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, uint64 whisp uint32 finalSound = sound ? sound : iter->sound; if (finalSound) - SendSound(source, finalSound, finalType, whisperGuid, range, team, gmOnly); + SendSound(source, finalSound, finalType, whisperTarget, range, team, gmOnly); Unit* finalSource = source; if (srcPlr) @@ -304,13 +270,13 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, uint64 whisp if (srcPlr) { - PlayerTextBuilder builder(source, finalSource, finalType, iter->group, iter->id, finalLang, whisperGuid); - SendChatPacket(finalSource, builder, finalType, whisperGuid, range, team, gmOnly); + PlayerTextBuilder builder(source, finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget); + SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } else { - CreatureTextBuilder builder(finalSource, finalType, iter->group, iter->id, finalLang, whisperGuid); - SendChatPacket(finalSource, builder, finalType, whisperGuid, range, team, gmOnly); + CreatureTextBuilder builder(finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget); + SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f)) SetRepeatId(source, textGroup, iter->id); @@ -337,17 +303,17 @@ float CreatureTextMgr::GetRangeForChatType(ChatMsg msgType) const return dist; } -void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType, uint64 whisperGuid, CreatureTextRange range, Team team, bool gmOnly) +void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) { if (!sound || !source) return; WorldPacket data(SMSG_PLAY_SOUND, 4); data << uint32(sound); - SendNonChatPacket(source, &data, msgType, whisperGuid, range, team, gmOnly); + SendNonChatPacket(source, &data, msgType, whisperTarget, range, team, gmOnly); } -void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, uint64 whisperGuid, CreatureTextRange range, Team team, bool gmOnly) const +void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const { float dist = GetRangeForChatType(msgType); @@ -358,10 +324,10 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, { if (range == TEXT_RANGE_NORMAL)//ignores team and gmOnly { - Player* player = ObjectAccessor::FindPlayer(whisperGuid); - if (!player || !player->GetSession()) + if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER) return; - player->GetSession()->SendPacket(data); + + whisperTarget->ToPlayer()->GetSession()->SendPacket(data); return; } break; diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 198877bfe86..f2f7a229e50 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -90,21 +90,21 @@ class CreatureTextMgr void LoadCreatureTextLocales(); CreatureTextMap const& GetTextMap() const { return mTextMap; } - void SendSound(Creature* source, uint32 sound, ChatMsg msgType, uint64 whisperGuid, CreatureTextRange range, Team team, bool gmOnly); + void SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly); void SendEmote(Unit* source, uint32 emote); //if sent, returns the 'duration' of the text else 0 if error - uint32 SendChat(Creature* source, uint8 textGroup, uint64 whisperGuid = 0, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = NULL); + uint32 SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget = NULL, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = NULL); bool TextExist(uint32 sourceEntry, uint8 textGroup); std::string GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const; - template<class Builder> - void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, uint64 whisperGuid = 0, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const; + template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = NULL, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const; + private: CreatureTextRepeatIds GetRepeatGroup(Creature* source, uint8 textGroup); void SetRepeatId(Creature* source, uint8 textGroup, uint8 id); - void SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, uint64 whisperGuid, CreatureTextRange range, Team team, bool gmOnly) const; + void SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const; float GetRangeForChatType(ChatMsg msgType) const; CreatureTextMap mTextMap; @@ -142,8 +142,9 @@ class CreatureTextLocalizer // create if not cached yet if (!_packetCache[loc_idx]) { - messageTemplate = new WorldPacket(SMSG_MESSAGECHAT, 200); + messageTemplate = new WorldPacket(); whisperGUIDpos = _builder(messageTemplate, loc_idx); + ASSERT(messageTemplate->GetOpcode() != MSG_NULL_ACTION); _packetCache[loc_idx] = new std::pair<WorldPacket*, size_t>(messageTemplate, whisperGUIDpos); } else @@ -173,7 +174,7 @@ class CreatureTextLocalizer }; template<class Builder> -void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, uint64 whisperGuid, CreatureTextRange range, Team team, bool gmOnly) const +void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget /*= NULL*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/) const { if (!source) return; @@ -187,11 +188,10 @@ void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder { if (range == TEXT_RANGE_NORMAL) //ignores team and gmOnly { - Player* player = ObjectAccessor::FindPlayer(whisperGuid); - if (!player || !player->GetSession()) + if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER) return; - localizer(player); + localizer(const_cast<Player*>(whisperTarget->ToPlayer())); return; } break; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 3e64b1c67da..e0f3d83ae77 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2199,23 +2199,10 @@ namespace Trinity void do_helper(WorldPacketList& data_list, char* text) { char* pos = text; - while (char* line = lineFromMessage(pos)) { WorldPacket* data = new WorldPacket(); - - uint32 lineLength = strlen(line) + 1; - - data->Initialize(SMSG_MESSAGECHAT, 100); // guess size - *data << uint8(CHAT_MSG_SYSTEM); - *data << uint32(LANG_UNIVERSAL); - *data << uint64(0); - *data << uint32(0); // can be chat msg group or something - *data << uint64(0); - *data << uint32(lineLength); - *data << line; - *data << uint8(0); - + ChatHandler::BuildChatPacket(*data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); data_list.push_back(data); } } @@ -2281,7 +2268,7 @@ void World::SendGlobalText(const char* text, WorldSession* self) while (char* line = ChatHandler::LineFromMessage(pos)) { - ChatHandler::FillMessageData(&data, NULL, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, 0, line, NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); SendGlobalMessage(&data, self); } @@ -2310,7 +2297,7 @@ void World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self void World::SendZoneText(uint32 zone, const char* text, WorldSession* self, uint32 team) { WorldPacket data; - ChatHandler::FillMessageData(&data, NULL, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, 0, text, NULL); + ChatHandler::BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, text); SendZoneMessage(zone, &data, self, team); } diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index d84cf140ac1..433e8e5a66b 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -481,7 +481,7 @@ public: char const* msg = "testtest"; uint8 type = atoi(args); WorldPacket data; - ChatHandler::FillMessageData(&data, handler->GetSession(), type, 0, "chan", handler->GetSession()->GetPlayer()->GetGUID(), msg, handler->GetSession()->GetPlayer()); + ChatHandler::BuildChatPacket(data, ChatMsg(type), LANG_UNIVERSAL, handler->GetSession()->GetPlayer(), handler->GetSession()->GetPlayer(), msg, 0, "chan"); handler->GetSession()->SendPacket(&data); return true; } @@ -1382,7 +1382,10 @@ public: } else { + Position pos; + transport->GetPosition(&pos); handler->PSendSysMessage("Transport %s is %s", transport->GetName().c_str(), transport->GetGoState() == GO_STATE_READY ? "stopped" : "moving"); + handler->PSendSysMessage("Transport position: %s", pos.ToString().c_str()); return true; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 06a97d91250..ce3f62e38dd 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -2280,7 +2280,7 @@ public: // stop combat + make player unattackable + duel stop + stop some spells player->setFaction(35); player->CombatStop(); - if (player->IsNonMeleeSpellCasted(true)) + if (player->IsNonMeleeSpellCast(true)) player->InterruptNonMeleeSpells(true); player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index b472ba48a5c..0306aed184d 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -275,7 +275,11 @@ public: uint32 db_guid = creature->GetDBTableGUIDLow(); - // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); + // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells() + // current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior + creature->CleanupsBeforeDelete(); + delete creature; + creature = new Creature(); if (!creature->LoadCreatureFromDB(db_guid, map)) { delete creature; @@ -1204,7 +1208,7 @@ public: return false; } - creature->MonsterSay(args, LANG_UNIVERSAL, 0); + creature->MonsterSay(args, LANG_UNIVERSAL, NULL); // make some emotes char lastchar = args[strlen(args) - 1]; @@ -1291,10 +1295,11 @@ public: uint64 receiver_guid = atol(receiver_str); // check online security - if (handler->HasLowerSecurity(ObjectAccessor::FindPlayer(receiver_guid), 0)) + Player* receiver = ObjectAccessor::FindPlayer(receiver_guid); + if (handler->HasLowerSecurity(receiver, 0)) return false; - creature->MonsterWhisper(text, receiver_guid); + creature->MonsterWhisper(text, receiver); return true; } @@ -1311,7 +1316,7 @@ public: return false; } - creature->MonsterYell(args, LANG_UNIVERSAL, 0); + creature->MonsterYell(args, LANG_UNIVERSAL, NULL); // make an emote creature->HandleEmoteCommand(EMOTE_ONESHOT_SHOUT); diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 83e65d2f01f..cdae7a88387 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -201,7 +201,7 @@ public: } } - // All creature/GO slain/casted (not required, but otherwise it will display "Creature slain 0/10") + // All creature/GO slain/cast (not required, but otherwise it will display "Creature slain 0/10") for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) { int32 creature = quest->RequiredNpcOrGo[i]; diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index daa760c9c56..52a080ea16b 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -214,7 +214,7 @@ public: target->LoadPath(pathid); target->SetDefaultMovementType(WAYPOINT_MOTION_TYPE); target->GetMotionMaster()->Initialize(); - target->MonsterSay("Path loaded.", 0, 0); + target->MonsterSay("Path loaded.", LANG_UNIVERSAL, NULL); return true; } @@ -270,7 +270,7 @@ public: target->SetDefaultMovementType(IDLE_MOTION_TYPE); target->GetMotionMaster()->MoveTargetedHome(); target->GetMotionMaster()->Initialize(); - target->MonsterSay("Path unloaded.", 0, 0); + target->MonsterSay("Path unloaded.", LANG_UNIVERSAL, NULL); return true; } handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target have no loaded path."); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index ee8f22ca66c..6949c73a1f3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -117,7 +117,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_grimstoneAI(creature); + return GetInstanceAI<npc_grimstoneAI>(creature); } struct npc_grimstoneAI : public npc_escortAI @@ -1237,7 +1237,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_rocknotAI(creature); + return GetInstanceAI<npc_rocknotAI>(creature); } struct npc_rocknotAI : public npc_escortAI diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp index 25f93a2b6b7..ecdfafea641 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp @@ -39,7 +39,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_draganthaurissanAI(creature); + return GetInstanceAI<boss_draganthaurissanAI>(creature); } struct boss_draganthaurissanAI : public ScriptedAI @@ -92,7 +92,7 @@ public: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_HANDOFTHAURISSAN); - //3 Hands of Thaurissan will be casted + //3 Hands of Thaurissan will be cast //if (Counter < 3) //{ // HandOfThaurissan_Timer = 1000; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp index 55e6862bda7..aa0d0810a08 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp @@ -140,7 +140,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_doomrelAI(creature); + return GetInstanceAI<boss_doomrelAI>(creature); } struct boss_doomrelAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp index dbc3056b1ff..b2d496501ff 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp @@ -162,7 +162,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gythAI(creature); + return GetInstanceAI<boss_gythAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp index 26540eb38a6..5a34bffca6f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp @@ -128,7 +128,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lord_valthalakAI(creature); + return GetInstanceAI<boss_lord_valthalakAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index 1c40385c0fd..0e14eedc813 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -316,7 +316,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_pyroguard_emberseerAI(creature); + return GetInstanceAI<boss_pyroguard_emberseerAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index ff839e3cacb..efe53d0825a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -438,7 +438,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_rend_blackhandAI(creature); + return GetInstanceAI<boss_rend_blackhandAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp index ccd74b204ce..5849ab1442c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp @@ -23,11 +23,11 @@ enum Spells { SPELL_SNAPKICK = 15618, - SPELL_CLEAVE = 15579, + SPELL_CLEAVE = 15284, SPELL_UPPERCUT = 10966, SPELL_MORTALSTRIKE = 16856, SPELL_PUMMEL = 15615, - SPELL_THROWAXE = 16075, + SPELL_THROWAXE = 16075 }; enum Events @@ -37,7 +37,7 @@ enum Events EVENT_UPPERCUT = 3, EVENT_MORTAL_STRIKE = 4, EVENT_PUMMEL = 5, - EVENT_THROW_AXE = 6, + EVENT_THROW_AXE = 6 }; class boss_warmaster_voone : public CreatureScript @@ -45,11 +45,6 @@ class boss_warmaster_voone : public CreatureScript public: boss_warmaster_voone() : CreatureScript("boss_warmaster_voone") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_warmastervooneAI(creature); - } - struct boss_warmastervooneAI : public BossAI { boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { } @@ -119,6 +114,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new boss_warmastervooneAI(creature); + } }; void AddSC_boss_warmastervoone() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp index c9dc3d8f134..77afea4b656 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp @@ -116,7 +116,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_broodlordAI(creature); + return GetInstanceAI<boss_broodlordAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index 05effabe557..9878720b1dd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -282,7 +282,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_chromaggusAI(creature); + return GetInstanceAI<boss_chromaggusAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp index 0d79f3faeee..222bd6f80ea 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp @@ -92,7 +92,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ebonrocAI(creature); + return GetInstanceAI<boss_ebonrocAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp index 369e4e02f5a..983fe60a2d0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp @@ -94,7 +94,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_firemawAI(creature); + return GetInstanceAI<boss_firemawAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp index 060bfeb60b3..63b43d81ae4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp @@ -100,7 +100,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_flamegorAI(creature); + return GetInstanceAI<boss_flamegorAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 4e0c79509fc..5e0f17b2330 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -376,7 +376,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_victor_nefariusAI(creature); + return GetInstanceAI<boss_victor_nefariusAI>(creature); } }; @@ -423,7 +423,7 @@ public: if (rand()%5) return; - Talk(SAY_SLAY, victim->GetGUID()); + Talk(SAY_SLAY, victim); } void MovementInform(uint32 type, uint32 id) OVERRIDE @@ -572,7 +572,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_nefarianAI(creature); + return GetInstanceAI<boss_nefarianAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index caf2719eff9..c2e7b7a091c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -156,7 +156,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_razorgoreAI(creature); + return GetInstanceAI<boss_razorgoreAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index c595f3acaff..bcca6246cd8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -114,7 +114,7 @@ public: if (rand()%5) return; - Talk(SAY_KILLTARGET, victim->GetGUID()); + Talk(SAY_KILLTARGET, victim); } void UpdateAI(uint32 diff) OVERRIDE diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp index 0fdb88923b3..bc94f1b0267 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp @@ -179,7 +179,7 @@ class npc_core_rager : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_core_ragerAI(creature); + return GetInstanceAI<npc_core_ragerAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index 1001516d42e..4c1ae6b302f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -207,7 +207,7 @@ class boss_majordomo : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_majordomoAI(creature); + return GetInstanceAI<boss_majordomoAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index d03f756f366..165c33573bd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -306,7 +306,7 @@ class boss_ragnaros : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ragnarosAI(creature); + return GetInstanceAI<boss_ragnarosAI>(creature); } }; @@ -342,7 +342,7 @@ class npc_son_of_flame : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_son_of_flameAI(creature); + return GetInstanceAI<npc_son_of_flameAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp index 8a7836b310e..16142215e9f 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp @@ -45,7 +45,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_mr_smiteAI(creature); + return GetInstanceAI<boss_mr_smiteAI>(creature); } struct boss_mr_smiteAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index f029e8505d4..122a66356db 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -101,7 +101,7 @@ class instance_deadmines : public InstanceMapScript CannonBlast_Timer = DATA_CANNON_BLAST_TIMER; // it's a hack - Mr. Smite should do that but his too far away pIronCladDoor->SetName("Mr. Smite"); - pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, 0); + pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, NULL); DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM1); State = CANNON_BLAST_INITIATED; break; @@ -113,7 +113,7 @@ class instance_deadmines : public InstanceMapScript ShootCannon(); BlastOutDoor(); LeverStucked(); - pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, 0); + pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, NULL); DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM2); State = PIRATES_ATTACK; } else CannonBlast_Timer -= diff; diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index 46683442a60..3fe806e09a8 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -90,7 +90,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_blastmaster_emi_shortfuseAI(creature); + return GetInstanceAI<npc_blastmaster_emi_shortfuseAI>(creature); } bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 071a5e83d2f..30416aca1b5 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -149,7 +149,7 @@ public: if (Phase == 2) { if (Unit* unit = Unit::GetUnit(*me, Attumen)) - Talk(SAY_MIDNIGHT_KILL, unit->GetGUID()); + Talk(SAY_MIDNIGHT_KILL, unit); } } @@ -166,7 +166,7 @@ public: Attumen = attumen->GetGUID(); attumen->AI()->AttackStart(me->GetVictim()); SetMidnight(attumen, me->GetGUID()); - Talk(SAY_APPEAR, Attumen); + Talk(SAY_APPEAR, attumen); } } else if (Phase == 2 && HealthBelowPct(25)) @@ -204,7 +204,7 @@ public: void Mount(Unit* pAttumen) { - Talk(SAY_MOUNT, pAttumen->GetGUID()); + Talk(SAY_MOUNT, pAttumen); Phase = 3; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pAttumen->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index fc37c42be85..006f619d3ab 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -98,7 +98,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_moroesAI(creature); + return GetInstanceAI<boss_moroesAI>(creature); } struct boss_moroesAI : public ScriptedAI @@ -393,7 +393,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_baroness_dorothea_millstipeAI(creature); + return GetInstanceAI<boss_baroness_dorothea_millstipeAI>(creature); } struct boss_baroness_dorothea_millstipeAI : public boss_moroes_guestAI @@ -456,7 +456,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_baron_rafe_dreugerAI(creature); + return GetInstanceAI<boss_baron_rafe_dreugerAI>(creature); } struct boss_baron_rafe_dreugerAI : public boss_moroes_guestAI @@ -513,7 +513,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lady_catriona_von_indiAI(creature); + return GetInstanceAI<boss_lady_catriona_von_indiAI>(creature); } struct boss_lady_catriona_von_indiAI : public boss_moroes_guestAI @@ -583,7 +583,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lady_keira_berrybuckAI(creature); + return GetInstanceAI<boss_lady_keira_berrybuckAI>(creature); } struct boss_lady_keira_berrybuckAI : public boss_moroes_guestAI @@ -657,7 +657,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lord_robin_darisAI(creature); + return GetInstanceAI<boss_lord_robin_darisAI>(creature); } struct boss_lord_robin_darisAI : public boss_moroes_guestAI @@ -713,7 +713,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lord_crispin_ferenceAI(creature); + return GetInstanceAI<boss_lord_crispin_ferenceAI>(creature); } struct boss_lord_crispin_ferenceAI : public boss_moroes_guestAI diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index f80ff5b6028..52bec6dbf27 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -71,7 +71,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_netherspiteAI(creature); + return GetInstanceAI<boss_netherspiteAI>(creature); } struct boss_netherspiteAI : public ScriptedAI @@ -172,7 +172,7 @@ public: for (int j=0; j<3; ++j) // j = color if (Creature* portal = Unit::GetCreature(*me, PortalGUID[j])) { - // the one who's been casted upon before + // the one who's been cast upon before Unit* current = Unit::GetUnit(*portal, BeamTarget[j]); // temporary store for the best suitable beam reciever Unit* target = me; @@ -308,7 +308,7 @@ public: if (PhaseTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { SwitchToBanishPhase(); return; @@ -327,7 +327,7 @@ public: if (PhaseTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { SwitchToPortalPhase(); return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index 984ef902f05..5f3156ccc5a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -71,7 +71,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_nightbaneAI(creature); + return GetInstanceAI<boss_nightbaneAI>(creature); } struct boss_nightbaneAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 7c6cdd4cb3e..d8901174d62 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -179,7 +179,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_malchezaarAI(creature); + return GetInstanceAI<boss_malchezaarAI>(creature); } struct boss_malchezaarAI : public ScriptedAI @@ -569,7 +569,7 @@ public: void DoMeleeAttacksIfReady() { - if (me->IsWithinMeleeRange(me->GetVictim()) && !me->IsNonMeleeSpellCasted(false)) + if (me->IsWithinMeleeRange(me->GetVictim()) && !me->IsNonMeleeSpellCast(false)) { //Check for base attack if (me->isAttackReady() && me->GetVictim()) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 2d3fabb810b..b2c74fc45f8 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -86,7 +86,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_aranAI(creature); + return GetInstanceAI<boss_aranAI>(creature); } struct boss_aranAI : public ScriptedAI @@ -305,7 +305,7 @@ public: //Normal casts if (NormalCastTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (!target) @@ -486,10 +486,10 @@ public: void SpellHit(Unit* /*pAttacker*/, const SpellInfo* Spell) OVERRIDE { - //We only care about interrupt effects and only if they are durring a spell currently being casted + //We only care about interrupt effects and only if they are durring a spell currently being cast if ((Spell->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && Spell->Effects[1].Effect != SPELL_EFFECT_INTERRUPT_CAST && - Spell->Effects[2].Effect != SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCasted(false)) + Spell->Effects[2].Effect != SPELL_EFFECT_INTERRUPT_CAST) || !me->IsNonMeleeSpellCast(false)) return; //Interrupt effect diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 9e7897cd56a..68ba0a3fd01 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -72,7 +72,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_kilrekAI(creature); + return GetInstanceAI<npc_kilrekAI>(creature); } struct npc_kilrekAI : public ScriptedAI @@ -257,7 +257,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_terestianAI(creature); + return GetInstanceAI<boss_terestianAI>(creature); } struct boss_terestianAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 504b3bc6e97..c6f37b15a54 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -118,7 +118,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_dorotheeAI(creature); + return GetInstanceAI<boss_dorotheeAI>(creature); } struct boss_dorotheeAI : public ScriptedAI @@ -259,7 +259,7 @@ public: if (Dorothee && Dorothee->IsAlive()) { CAST_AI(boss_dorothee::boss_dorotheeAI, Dorothee->AI())->TitoDied = true; - Talk(SAY_DOROTHEE_TITO_DEATH, Dorothee->GetGUID()); + Talk(SAY_DOROTHEE_TITO_DEATH, Dorothee); } } } @@ -299,7 +299,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_strawmanAI(creature); + return GetInstanceAI<boss_strawmanAI>(creature); } struct boss_strawmanAI : public ScriptedAI @@ -414,7 +414,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_tinheadAI(creature); + return GetInstanceAI<boss_tinheadAI>(creature); } struct boss_tinheadAI : public ScriptedAI @@ -524,7 +524,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_roarAI(creature); + return GetInstanceAI<boss_roarAI>(creature); } struct boss_roarAI : public ScriptedAI @@ -633,7 +633,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_croneAI(creature); + return GetInstanceAI<boss_croneAI>(creature); } struct boss_croneAI : public ScriptedAI @@ -813,7 +813,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_bigbadwolfAI(creature); + return GetInstanceAI<boss_bigbadwolfAI>(creature); } struct boss_bigbadwolfAI : public ScriptedAI @@ -1015,7 +1015,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_julianneAI(creature); + return GetInstanceAI<boss_julianneAI>(creature); } struct boss_julianneAI : public ScriptedAI @@ -1138,7 +1138,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_romuloAI(creature); + return GetInstanceAI<boss_romuloAI>(creature); } struct boss_romuloAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 91127f2db0d..ed010124d6f 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -412,7 +412,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_barnesAI(creature); + return GetInstanceAI<npc_barnesAI>(creature); } }; @@ -476,7 +476,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_image_of_medivhAI(creature); + return GetInstanceAI<npc_image_of_medivhAI>(creature); } struct npc_image_of_medivhAI : public ScriptedAI @@ -535,7 +535,7 @@ public: return; ArcanagosGUID = Arcanagos->GetGUID(); Arcanagos->SetDisableGravity(true); - (*Arcanagos).GetMotionMaster()->MovePoint(0, ArcanagosPos[0], ArcanagosPos[1], ArcanagosPos[2]); + Arcanagos->GetMotionMaster()->MovePoint(0, ArcanagosPos[0], ArcanagosPos[1], ArcanagosPos[2]); Arcanagos->SetOrientation(ArcanagosPos[3]); me->SetOrientation(MedivPos[3]); YellTimer = 10000; @@ -549,25 +549,25 @@ public: { case 0: return 9999999; case 1: - me->MonsterYell(SAY_DIALOG_MEDIVH_1, LANG_UNIVERSAL, 0); + me->MonsterYell(SAY_DIALOG_MEDIVH_1, LANG_UNIVERSAL, NULL); return 10000; case 2: if (arca) - arca->MonsterYell(SAY_DIALOG_ARCANAGOS_2, LANG_UNIVERSAL, 0); + arca->MonsterYell(SAY_DIALOG_ARCANAGOS_2, LANG_UNIVERSAL, NULL); return 20000; case 3: - me->MonsterYell(SAY_DIALOG_MEDIVH_3, LANG_UNIVERSAL, 0); + me->MonsterYell(SAY_DIALOG_MEDIVH_3, LANG_UNIVERSAL, NULL); return 10000; case 4: if (arca) - arca->MonsterYell(SAY_DIALOG_ARCANAGOS_4, LANG_UNIVERSAL, 0); + arca->MonsterYell(SAY_DIALOG_ARCANAGOS_4, LANG_UNIVERSAL, NULL); return 20000; case 5: - me->MonsterYell(SAY_DIALOG_MEDIVH_5, LANG_UNIVERSAL, 0); + me->MonsterYell(SAY_DIALOG_MEDIVH_5, LANG_UNIVERSAL, NULL); return 20000; case 6: if (arca) - arca->MonsterYell(SAY_DIALOG_ARCANAGOS_6, LANG_UNIVERSAL, 0); + arca->MonsterYell(SAY_DIALOG_ARCANAGOS_6, LANG_UNIVERSAL, NULL); return 10000; case 7: FireArcanagosTimer = 500; @@ -577,7 +577,7 @@ public: DoCast(me, SPELL_MANA_SHIELD); return 10000; case 9: - me->MonsterTextEmote(EMOTE_DIALOG_MEDIVH_7, 0, false); + me->MonsterTextEmote(EMOTE_DIALOG_MEDIVH_7, NULL, false); return 10000; case 10: if (arca) @@ -585,7 +585,7 @@ public: return 1000; case 11: if (arca) - arca->MonsterYell(SAY_DIALOG_ARCANAGOS_8, LANG_UNIVERSAL, 0); + arca->MonsterYell(SAY_DIALOG_ARCANAGOS_8, LANG_UNIVERSAL, NULL); return 5000; case 12: arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f); @@ -594,7 +594,7 @@ public: arca->SetSpeed(MOVE_FLIGHT, 2.0f); return 10000; case 13: - me->MonsterYell(SAY_DIALOG_MEDIVH_9, LANG_UNIVERSAL, 0); + me->MonsterYell(SAY_DIALOG_MEDIVH_9, LANG_UNIVERSAL, NULL); return 10000; case 14: me->SetVisible(false); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 074ad3f1b96..15b3e6833c6 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -96,7 +96,7 @@ public: CreatureAI* GetAI(Creature* c) const OVERRIDE { - return new boss_felblood_kaelthasAI(c); + return GetInstanceAI<boss_felblood_kaelthasAI>(c); } struct boss_felblood_kaelthasAI : public ScriptedAI @@ -482,7 +482,7 @@ public: CreatureAI* GetAI(Creature* c) const OVERRIDE { - return new npc_felkael_phoenixAI(c); + return GetInstanceAI<npc_felkael_phoenixAI>(c); } struct npc_felkael_phoenixAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index c8ab4a147ff..b5110c3c3c7 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -110,7 +110,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_priestess_delrissaAI(creature); + return GetInstanceAI<boss_priestess_delrissaAI>(creature); } struct boss_priestess_delrissaAI : public ScriptedAI @@ -504,7 +504,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kagani_nightstrikeAI(creature); + return GetInstanceAI<boss_kagani_nightstrikeAI>(creature); } struct boss_kagani_nightstrikeAI : public boss_priestess_lackey_commonAI @@ -608,7 +608,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ellris_duskhallowAI(creature); + return GetInstanceAI<boss_ellris_duskhallowAI>(creature); } struct boss_ellris_duskhallowAI : public boss_priestess_lackey_commonAI @@ -699,7 +699,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_eramas_brightblazeAI(creature); + return GetInstanceAI<boss_eramas_brightblazeAI>(creature); } struct boss_eramas_brightblazeAI : public boss_priestess_lackey_commonAI @@ -760,7 +760,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_yazzaiAI(creature); + return GetInstanceAI<boss_yazzaiAI>(creature); } struct boss_yazzaiAI : public boss_priestess_lackey_commonAI @@ -890,7 +890,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_warlord_salarisAI(creature); + return GetInstanceAI<boss_warlord_salarisAI>(creature); } struct boss_warlord_salarisAI : public boss_priestess_lackey_commonAI @@ -1010,7 +1010,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_garaxxasAI(creature); + return GetInstanceAI<boss_garaxxasAI>(creature); } struct boss_garaxxasAI : public boss_priestess_lackey_commonAI @@ -1068,7 +1068,7 @@ public: if (Freezing_Trap_Timer <= diff) { - //attempt find go summoned from spell (casted by me) + //attempt find go summoned from spell (cast by me) GameObject* go = me->GetGameObject(SPELL_FREEZING_TRAP); //if we have a go, we need to wait (only one trap at a time) @@ -1121,7 +1121,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_apokoAI(creature); + return GetInstanceAI<boss_apokoAI>(creature); } struct boss_apokoAI : public boss_priestess_lackey_commonAI @@ -1219,7 +1219,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_zelfanAI(creature); + return GetInstanceAI<boss_zelfanAI>(creature); } struct boss_zelfanAI : public boss_priestess_lackey_commonAI diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 849713d72bf..bcb321cab2e 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -66,7 +66,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_selin_fireheartAI(creature); + return GetInstanceAI<boss_selin_fireheartAI>(creature); }; struct boss_selin_fireheartAI : public ScriptedAI @@ -271,7 +271,7 @@ public: if (FelExplosionTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCast(me, SPELL_FEL_EXPLOSION); FelExplosionTimer = 2000; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp index 24b48112bb6..553107b2e82 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp @@ -76,7 +76,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_vexallusAI(creature); + return GetInstanceAI<boss_vexallusAI>(creature); }; struct boss_vexallusAI : public BossAI diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 4dc62cc431d..4141b1a3aaa 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -144,7 +144,7 @@ public: me->CastSpell(me, SPELL_DK_INITIATE_VISUAL, true); if (Player* starter = ObjectAccessor::GetPlayer(*me, playerGUID)) - sCreatureTextMgr->SendChat(me, SAY_EVENT_ATTACK, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, starter); + sCreatureTextMgr->SendChat(me, SAY_EVENT_ATTACK, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, starter); phase = PHASE_TO_ATTACK; } @@ -371,7 +371,7 @@ public: creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); - sCreatureTextMgr->SendChat(creature, SAY_DUEL, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); + sCreatureTextMgr->SendChat(creature, SAY_DUEL, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); player->CastSpell(creature, SPELL_DUEL, false); player->CastSpell(player, SPELL_DUEL_FLAG, true); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 20a7ccedb17..c1c103fbab3 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -83,7 +83,7 @@ public: me->SetReactState(REACT_PASSIVE); DoCastAOE(SPELL_THREAT_PULSE, true); - sCreatureTextMgr->SendChat(me, SAY_PERSUADE_RAND, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); + sCreatureTextMgr->SendChat(me, SAY_PERSUADE_RAND, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); Talk(SAY_CRUSADER); } } @@ -126,7 +126,7 @@ public: break; case 5: - sCreatureTextMgr->SendChat(me, SAY_PERSUADED5, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); + sCreatureTextMgr->SendChat(me, SAY_PERSUADED5, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); speechTimer = 8000; break; @@ -698,25 +698,25 @@ public: case RACE_HUMAN: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_5, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_1, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_5, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_7, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_5, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_1, player); break; + case 5: Talk(SAY_EXEC_NOREM_5, player); break; + case 6: Talk(SAY_EXEC_THINK_7, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_6, player->GetGUID()); + Talk(SAY_EXEC_TIME_6, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -728,25 +728,25 @@ public: case RACE_ORC: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_6, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_1, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_7, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_8, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_6, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_1, player); break; + case 5: Talk(SAY_EXEC_NOREM_7, player); break; + case 6: Talk(SAY_EXEC_THINK_8, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_8, player->GetGUID()); + Talk(SAY_EXEC_TIME_8, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -758,25 +758,25 @@ public: case RACE_DWARF: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_2, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_2, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_2, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_3, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_2, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_5, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_2, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_2, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_3, player); break; + case 5: Talk(SAY_EXEC_NOREM_2, player); break; + case 6: Talk(SAY_EXEC_THINK_5, player); break; + case 7: Talk(SAY_EXEC_LISTEN_2, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_3, player->GetGUID()); + Talk(SAY_EXEC_TIME_3, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -788,25 +788,25 @@ public: case RACE_NIGHTELF: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_5, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_1, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_6, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_2, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_5, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_1, player); break; + case 5: Talk(SAY_EXEC_NOREM_6, player); break; + case 6: Talk(SAY_EXEC_THINK_2, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_7, player->GetGUID()); + Talk(SAY_EXEC_TIME_7, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -818,25 +818,25 @@ public: case RACE_UNDEAD_PLAYER: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_3, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_4, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_3, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_1, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_3, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_3, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_4, player); break; + case 5: Talk(SAY_EXEC_NOREM_3, player); break; + case 6: Talk(SAY_EXEC_THINK_1, player); break; + case 7: Talk(SAY_EXEC_LISTEN_3, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_4, player->GetGUID()); + Talk(SAY_EXEC_TIME_4, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -848,25 +848,25 @@ public: case RACE_TAUREN: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_1, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_5, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_8, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_9, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_1, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_5, player); break; + case 5: Talk(SAY_EXEC_NOREM_8, player); break; + case 6: Talk(SAY_EXEC_THINK_9, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_9, player->GetGUID()); + Talk(SAY_EXEC_TIME_9, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -878,25 +878,25 @@ public: case RACE_GNOME: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_4, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_1, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_4, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_6, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_4, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_1, player); break; + case 5: Talk(SAY_EXEC_NOREM_4, player); break; + case 6: Talk(SAY_EXEC_THINK_6, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_5, player->GetGUID()); + Talk(SAY_EXEC_TIME_5, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -908,25 +908,25 @@ public: case RACE_TROLL: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_3, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_3, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_7, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_2, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_6, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_9, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_10, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_4, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_7, player); break; + case 3: Talk(SAY_EXEC_NAME_2, player); break; + case 4: Talk(SAY_EXEC_RECOG_6, player); break; + case 5: Talk(SAY_EXEC_NOREM_9, player); break; + case 6: Talk(SAY_EXEC_THINK_10, player); break; + case 7: Talk(SAY_EXEC_LISTEN_4, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_10, player->GetGUID()); + Talk(SAY_EXEC_TIME_10, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -938,25 +938,25 @@ public: case RACE_BLOODELF: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_1, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_1, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_1, player); break; //case 5: //unknown - case 6: Talk(SAY_EXEC_THINK_3, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 6: Talk(SAY_EXEC_THINK_3, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_1, player->GetGUID()); + Talk(SAY_EXEC_TIME_1, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); @@ -968,25 +968,25 @@ public: case RACE_DRAENEI: switch (ExecuteSpeech_Counter) { - case 0: Talk(SAY_EXEC_START_1, player->GetGUID()); break; + case 0: Talk(SAY_EXEC_START_1, player); break; case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: Talk(SAY_EXEC_PROG_1, player->GetGUID()); break; - case 3: Talk(SAY_EXEC_NAME_1, player->GetGUID()); break; - case 4: Talk(SAY_EXEC_RECOG_2, player->GetGUID()); break; - case 5: Talk(SAY_EXEC_NOREM_1, player->GetGUID()); break; - case 6: Talk(SAY_EXEC_THINK_4, player->GetGUID()); break; - case 7: Talk(SAY_EXEC_LISTEN_1, player->GetGUID()); break; + case 2: Talk(SAY_EXEC_PROG_1, player); break; + case 3: Talk(SAY_EXEC_NAME_1, player); break; + case 4: Talk(SAY_EXEC_RECOG_2, player); break; + case 5: Talk(SAY_EXEC_NOREM_1, player); break; + case 6: Talk(SAY_EXEC_THINK_4, player); break; + case 7: Talk(SAY_EXEC_LISTEN_1, player); break; case 8: if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player->GetGUID()); + Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player); break; case 9: - Talk(SAY_EXEC_TIME_2, player->GetGUID()); + Talk(SAY_EXEC_TIME_2, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); break; case 10: - Talk(SAY_EXEC_WAITING, player->GetGUID()); + Talk(SAY_EXEC_WAITING, player); break; case 11: Talk(EMOTE_DIES); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index 2bb187692fa..6234d7341e1 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -103,7 +103,7 @@ public: { me->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_01); DoCast(player, SPELL_REVIVE, true); - Talk(WHISPER_REVIVE, player->GetGUID()); + Talk(WHISPER_REVIVE, player); } FlyBackTimer = 5000; break; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp index 694fdf9d84e..7389d9afbff 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp @@ -93,7 +93,7 @@ public: if (!bShielded && !HealthAbovePct(50)) { //wait if we already casting - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; Talk(SAY_SPECIALAE); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp index 6f028e33726..274be80b7b0 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp @@ -66,7 +66,7 @@ public: return; //If we are <50% hp cast Soul Siphon rank 1 - if (!HealthAbovePct(50) && !me->IsNonMeleeSpellCasted(false)) + if (!HealthAbovePct(50) && !me->IsNonMeleeSpellCast(false)) { //SoulSiphon_Timer if (SoulSiphon_Timer <= diff) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 0810d5ca2b8..07a5a906f5b 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -258,10 +258,7 @@ public: void SaySound(uint8 textEntry, Unit* target = 0) { - if (target) - Talk(textEntry, target->GetGUID()); - else - Talk(textEntry); + Talk(textEntry, target); //DoCast(me, SPELL_HEAD_SPEAKS, true); if (Creature* speaker = DoSpawnCreature(HELPER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 1000)) @@ -348,7 +345,7 @@ public: Creature* speaker = DoSpawnCreature(HELPER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 1000); if (speaker) speaker->CastSpell(speaker, SPELL_HEAD_SPEAKS, false); - me->MonsterTextEmote(EMOTE_LAUGHS, 0); + me->MonsterTextEmote(EMOTE_LAUGHS, NULL); } else laugh -= diff; } @@ -377,7 +374,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_headless_horsemanAI(creature); + return GetInstanceAI<boss_headless_horsemanAI>(creature); } struct boss_headless_horsemanAI : public ScriptedAI @@ -528,10 +525,7 @@ public: void SaySound(uint8 textEntry, Unit* target = 0) { - if (target) - Talk(textEntry, target->GetGUID()); - else - Talk(textEntry); + Talk(textEntry, target); laugh += 4000; } @@ -728,7 +722,7 @@ public: if (laugh <= diff) { laugh = urand(11000, 22000); - me->MonsterTextEmote(EMOTE_LAUGHS, 0); + me->MonsterTextEmote(EMOTE_LAUGHS, NULL); DoPlaySoundToSet(me, RandomLaugh[rand()%3]); } else laugh -= diff; @@ -806,8 +800,8 @@ public: float x, y, z; me->GetPosition(x, y, z); //this visual aura some under ground me->SetPosition(x, y, z + 0.35f, 0.0f); - Despawn(); debuffGUID = 0; + Despawn(); Creature* debuff = DoSpawnCreature(HELPER, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 14500); if (debuff) { diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp index 40fe93155a5..e4974ef7eb0 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp @@ -99,7 +99,7 @@ public: return; //If we are <30% hp goes Enraged - if (!Enrage && !HealthAbovePct(30) && !me->IsNonMeleeSpellCasted(false)) + if (!Enrage && !HealthAbovePct(30) && !me->IsNonMeleeSpellCast(false)) { Talk(EMOTE_ENRAGE); Talk(SAY_ENRAGE); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp index 46680730f7e..ea624576dbc 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp @@ -83,7 +83,7 @@ public: return; //If we are <25% hp cast Heal - if (!HealthAbovePct(25) && !me->IsNonMeleeSpellCasted(false) && Heal_Timer <= diff) + if (!HealthAbovePct(25) && !me->IsNonMeleeSpellCast(false) && Heal_Timer <= diff) { DoCast(me, SPELL_HEAL); Heal_Timer = 30000; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp index a57c237c21a..48b133081bd 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp @@ -48,7 +48,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_interrogator_vishasAI(creature); + return GetInstanceAI<boss_interrogator_vishasAI>(creature); } struct boss_interrogator_vishasAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index 403416bb202..41e961360b5 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -65,7 +65,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_scarlet_commander_mograineAI(creature); + return GetInstanceAI<boss_scarlet_commander_mograineAI>(creature); } struct boss_scarlet_commander_mograineAI : public ScriptedAI @@ -145,7 +145,7 @@ public: me->SetHealth(0); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); me->ClearComboPointHolders(); @@ -231,7 +231,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_high_inquisitor_whitemaneAI(creature); + return GetInstanceAI<boss_high_inquisitor_whitemaneAI>(creature); } struct boss_high_inquisitor_whitemaneAI : public ScriptedAI @@ -313,7 +313,7 @@ public: //Cast Deep sleep when health is less than 50% if (!_bCanResurrectCheck && !HealthAbovePct(50)) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); DoCastVictim(SPELL_DEEPSLEEP); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp index 2277c53ae6b..558dc030eaf 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp @@ -128,7 +128,7 @@ class boss_darkmaster_gandling : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_darkmaster_gandlingAI(creature); + return GetInstanceAI<boss_darkmaster_gandlingAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp index 88f95df69c4..0f3929bda36 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp @@ -99,7 +99,7 @@ class boss_instructor_malicia : public CreatureScript events.ScheduleEvent(EVENT_RENEW, 10000); break; case EVENT_FLASHHEAL: - //5 Flashheals will be casted + //5 Flashheals will be cast DoCast(me, SPELL_FLASHHEAL); if (FlashCounter < 2) { @@ -113,7 +113,7 @@ class boss_instructor_malicia : public CreatureScript } break; case EVENT_HEALINGTOUCH: - //3 Healing Touch will be casted + //3 Healing Touch will be cast DoCast(me, SPELL_HEALINGTOUCH); if (TouchCounter < 2) { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index 2663146317a..cbd996d04fc 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -32,7 +32,7 @@ enum Spells //SPELL_ILLUSION = 17773, // Spells of Illusion of Jandice Barov - SPELL_CLEAVE = 15584 + SPELL_CLEAVE = 15284 }; class boss_jandice_barov : public CreatureScript diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 2433390f8f5..e485db94e42 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -253,7 +253,7 @@ class boss_kirtonos_the_herald : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kirtonos_the_heraldAI(creature); + return GetInstanceAI<boss_kirtonos_the_heraldAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp index e06c0d6bfbb..17524ddf2b2 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp @@ -28,8 +28,9 @@ EndScriptData */ enum Spells { - SPELL_IMMOLATE = 20294, // Old ID was 15570 - SPELL_VEILOFSHADOW = 17820 + SPELL_IMMOLATE = 20294, + SPELL_VEILOFSHADOW = 17820, + SPELL_UNHOLY_AURA = 17467 }; enum Events @@ -49,7 +50,9 @@ class boss_lord_alexei_barov : public CreatureScript void Reset() OVERRIDE { _Reset(); - me->LoadCreaturesAddon(); + + if (!me->HasAura(SPELL_UNHOLY_AURA)) + DoCast(me, SPELL_UNHOLY_AURA); } void EnterCombat(Unit* /*who*/) OVERRIDE diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 8d89592090e..b8f3df2da60 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -72,7 +72,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_shadowfang_prisonerAI(creature); + return GetInstanceAI<npc_shadowfang_prisonerAI>(creature); } bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE @@ -158,7 +158,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_arugal_voidwalkerAI(creature); + return GetInstanceAI<npc_arugal_voidwalkerAI>(creature); } struct npc_arugal_voidwalkerAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index 16ec442d963..04edf4e3f43 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -68,7 +68,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_baron_rivendareAI(creature); + return GetInstanceAI<boss_baron_rivendareAI>(creature); } struct boss_baron_rivendareAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp index 1812e2efd8d..2f5750b6141 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp @@ -42,7 +42,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_baroness_anastariAI(creature); + return GetInstanceAI<boss_baroness_anastariAI>(creature); } struct boss_baroness_anastariAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp index 5847f7b132b..951cb8e2659 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp @@ -162,7 +162,7 @@ public: //BalnazzarTransform if (HealthBelowPct(40)) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); //restore hp, mana and stun diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp index 0f8340891a8..57bd138e7e1 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp @@ -43,7 +43,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_maleki_the_pallidAI(creature); + return GetInstanceAI<boss_maleki_the_pallidAI>(creature); } struct boss_maleki_the_pallidAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp index 2cacf80e27c..2eb5d6024d4 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp @@ -42,7 +42,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_nerubenkanAI(creature); + return GetInstanceAI<boss_nerubenkanAI>(creature); } struct boss_nerubenkanAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp index 706c2e7b6fb..b5d03ae9261 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp @@ -58,7 +58,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_silver_hand_bossesAI(creature); + return GetInstanceAI<boss_silver_hand_bossesAI>(creature); } struct boss_silver_hand_bossesAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp index 79b8dd7dfe2..17eebf227e8 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp @@ -45,7 +45,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ramstein_the_gorgerAI(creature); + return GetInstanceAI<boss_ramstein_the_gorgerAI>(creature); } struct boss_ramstein_the_gorgerAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 3fd346d6816..5fc27b971a0 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -190,12 +190,12 @@ public: case 1: me->SetInFront(Madrigosa); Madrigosa->SetInFront(me); - Madrigosa->AI()->Talk(YELL_MADR_INTRO, me->GetGUID()); + Madrigosa->AI()->Talk(YELL_MADR_INTRO, me); IntroPhaseTimer = 9000; ++IntroPhase; break; case 2: - Talk(YELL_INTRO, Madrigosa->GetGUID()); + Talk(YELL_INTRO, Madrigosa); IntroPhaseTimer = 13000; ++IntroPhase; break; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index e68d834b20d..d80196f79ee 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -217,7 +217,7 @@ public: { if (ConflagrationTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { me->InterruptSpell(CURRENT_GENERIC_SPELL); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) @@ -230,7 +230,7 @@ public: { if (ShadownovaTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0); if (target) @@ -239,7 +239,7 @@ public: if (!SisterDeath) { if (target) - Talk(EMOTE_SHADOW_NOVA, target->GetGUID()); + Talk(EMOTE_SHADOW_NOVA, target); Talk(YELL_SHADOW_NOVA); } ShadownovaTimer = 30000+(rand()%5000); @@ -249,7 +249,7 @@ public: if (ConfoundingblowTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_CONFOUNDING_BLOW); @@ -276,7 +276,7 @@ public: if (ShadowbladesTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCast(me, SPELL_SHADOW_BLADES); ShadowbladesTimer = 10000; @@ -291,7 +291,7 @@ public: Enraged = true; } else EnrageTimer -= diff; - if (me->isAttackReady() && !me->IsNonMeleeSpellCasted(false)) + if (me->isAttackReady() && !me->IsNonMeleeSpellCast(false)) { //If we are within range melee the target if (me->IsWithinMeleeRange(me->GetVictim())) @@ -548,7 +548,7 @@ public: { if (ShadownovaTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_SHADOW_NOVA); @@ -560,7 +560,7 @@ public: { if (ConflagrationTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { me->InterruptSpell(CURRENT_GENERIC_SPELL); Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0); @@ -571,7 +571,7 @@ public: if (!SisterDeath) { if (target) - Talk(EMOTE_CONFLAGRATION, target->GetGUID()); + Talk(EMOTE_CONFLAGRATION, target); Talk(YELL_CANFLAGRATION); } @@ -582,7 +582,7 @@ public: if (FlamesearTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCast(me, SPELL_FLAME_SEAR); FlamesearTimer = 15000; @@ -591,7 +591,7 @@ public: if (PyrogenicsTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCast(me, SPELL_PYROGENICS, true); PyrogenicsTimer = 15000; @@ -600,7 +600,7 @@ public: if (BlazeTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCastVictim(SPELL_BLAZE); BlazeTimer = 3800; @@ -691,7 +691,7 @@ public: if (DarkstrikeTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { //If we are within range melee the target if (me->IsWithinMeleeRange(me->GetVictim())) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 80b4b98b0a4..a52c008a16c 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -404,7 +404,7 @@ public: events.Update(diff); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; if (phase == PHASE_GROUND) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 2a2574ea256..92d5c3121ed 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -441,7 +441,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kalecAI(creature); + return GetInstanceAI<boss_kalecAI>(creature); } struct boss_kalecAI : public ScriptedAI @@ -575,7 +575,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_sathrovarrAI(creature); + return GetInstanceAI<boss_sathrovarrAI>(creature); } struct boss_sathrovarrAI : public ScriptedAI @@ -755,7 +755,7 @@ public: } else { - me->MonsterTextEmote(EMOTE_UNABLE_TO_FIND, 0); + me->MonsterTextEmote(EMOTE_UNABLE_TO_FIND, NULL); EnterEvadeMode(); return; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index b3982200a10..d3e1661aca9 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -236,7 +236,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kalecgos_kjAI(creature); + return GetInstanceAI<boss_kalecgos_kjAI>(creature); } struct boss_kalecgos_kjAI : public ScriptedAI @@ -389,7 +389,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_kiljaeden_controllerAI(creature); + return GetInstanceAI<npc_kiljaeden_controllerAI>(creature); } struct npc_kiljaeden_controllerAI : public ScriptedAI @@ -710,7 +710,7 @@ public: SpeechTimer += diff; break; case TIMER_SOUL_FLAY: - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCastVictim(SPELL_SOUL_FLAY_SLOW, false); DoCastVictim(SPELL_SOUL_FLAY, false); @@ -718,7 +718,7 @@ public: } break; case TIMER_LEGION_LIGHTNING: - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { Unit* pRandomPlayer = NULL; @@ -740,7 +740,7 @@ public: } break; case TIMER_FIRE_BLOOM: - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { me->RemoveAurasDueToSpell(SPELL_SOUL_FLAY); DoCastAOE(SPELL_FIRE_BLOOM, false); @@ -760,7 +760,7 @@ public: Timer[TIMER_SOUL_FLAY] = 2000; break; case TIMER_SHADOW_SPIKE: //Phase 3 - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { CastSinisterReflection(); DoCastAOE(SPELL_SHADOW_SPIKE, false); @@ -774,7 +774,7 @@ public: Timer[TIMER_FLAME_DART] = 3000; /// @todo Timer break; case TIMER_DARKNESS: //Phase 3 - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { // Begins to channel for 8 seconds, then deals 50'000 damage to all raid members. if (!IsInDarkness) @@ -1150,7 +1150,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_shield_orbAI(creature); + return GetInstanceAI<npc_shield_orbAI>(creature); } struct npc_shield_orbAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 8da162bae14..add0885a8a2 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -371,7 +371,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_muru_portalAI(creature); + return GetInstanceAI<npc_muru_portalAI>(creature); } struct npc_muru_portalAI : public ScriptedAI @@ -571,7 +571,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_blackholeAI(creature); + return GetInstanceAI<npc_blackholeAI>(creature); } struct npc_blackholeAI : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index 69ee53f0762..bae21721634 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -206,7 +206,7 @@ class boss_archaedas : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_archaedasAI(creature); + return GetInstanceAI<boss_archaedasAI>(creature); } }; @@ -305,7 +305,7 @@ class npc_archaedas_minions : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_archaedas_minionsAI(creature); + return GetInstanceAI<npc_archaedas_minionsAI>(creature); } }; @@ -368,7 +368,7 @@ class npc_stonekeepers : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_stonekeepersAI(creature); + return GetInstanceAI<npc_stonekeepersAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp index 830942ae2c3..8ab31cc08fa 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp @@ -48,14 +48,14 @@ class boss_ironaya : public CreatureScript boss_ironayaAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiArcingTimer; - bool bHasCastedWstomp; - bool bHasCastedKnockaway; + bool bHasCastWstomp; + bool bHasCastKnockaway; void Reset() OVERRIDE { uiArcingTimer = 3000; - bHasCastedKnockaway = false; - bHasCastedWstomp = false; + bHasCastKnockaway = false; + bHasCastWstomp = false; } void EnterCombat(Unit* /*who*/) OVERRIDE @@ -70,7 +70,7 @@ class boss_ironaya : public CreatureScript return; //If we are <50% hp do knockaway ONCE - if (!bHasCastedKnockaway && HealthBelowPct(50)) + if (!bHasCastKnockaway && HealthBelowPct(50)) { DoCastVictim(SPELL_KNOCKAWAY, true); @@ -84,7 +84,7 @@ class boss_ironaya : public CreatureScript me->TauntApply(target); //Shouldn't cast this agian - bHasCastedKnockaway = true; + bHasCastKnockaway = true; } //uiArcingTimer @@ -94,10 +94,10 @@ class boss_ironaya : public CreatureScript uiArcingTimer = 13000; } else uiArcingTimer -= uiDiff; - if (!bHasCastedWstomp && HealthBelowPct(25)) + if (!bHasCastWstomp && HealthBelowPct(25)) { DoCast(me, SPELL_WSTOMP); - bHasCastedWstomp = true; + bHasCastWstomp = true; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index 526daaffee1..f9470f89209 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -126,9 +126,10 @@ class boss_akilzon : public CreatureScript _JustDied(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void SetWeather(uint32 weather, float grade) @@ -362,7 +363,7 @@ class boss_akilzon : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_akilzonAI(creature); + return GetInstanceAI<boss_akilzonAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index a174b4833b4..116c450ddab 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -130,7 +130,7 @@ class boss_halazzi : public CreatureScript if (instance) instance->SetData(DATA_HALAZZIEVENT, IN_PROGRESS); - me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_AGGRO); EnterPhase(PHASE_LYNX); @@ -182,7 +182,7 @@ class boss_halazzi : public CreatureScript TotemTimer = 12000; break; case PHASE_SPLIT: - me->MonsterYell(YELL_SPLIT, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_SPLIT, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_SPLIT); DoCast(me, SPELL_TRANSFORM_SPLIT, true); break; @@ -197,7 +197,7 @@ class boss_halazzi : public CreatureScript case PHASE_MERGE: if (Unit* pLynx = Unit::GetUnit(*me, LynxGUID)) { - me->MonsterYell(YELL_MERGE, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_MERGE, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_MERGE); pLynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pLynx->GetMotionMaster()->Clear(); @@ -220,7 +220,7 @@ class boss_halazzi : public CreatureScript if (BerserkTimer <= diff) { - me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_BERSERK); DoCast(me, SPELL_BERSERK, true); BerserkTimer = 60000; @@ -266,7 +266,7 @@ class boss_halazzi : public CreatureScript { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - if (target->IsNonMeleeSpellCasted(false)) + if (target->IsNonMeleeSpellCast(false)) DoCast(target, SPELL_EARTHSHOCK); else DoCast(target, SPELL_FLAMESHOCK); @@ -320,12 +320,12 @@ class boss_halazzi : public CreatureScript switch (urand(0, 1)) { case 0: - me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_KILL_ONE); break; case 1: - me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_KILL_TWO); break; } @@ -336,14 +336,14 @@ class boss_halazzi : public CreatureScript if (instance) instance->SetData(DATA_HALAZZIEVENT, DONE); - me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_DEATH); } }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_halazziAI(creature); + return GetInstanceAI<boss_halazziAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index c2975bdf9da..42f8837ac81 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -300,7 +300,7 @@ class boss_hexlord_malacrass : public CreatureScript instance->SetData(DATA_HEXLORDEVENT, IN_PROGRESS); DoZoneInCombat(); - me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_AGGRO); for (uint8 i = 0; i < 4; ++i) @@ -321,11 +321,11 @@ class boss_hexlord_malacrass : public CreatureScript switch (urand(0, 1)) { case 0: - me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); break; case 1: - me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_KILL_TWO); break; } @@ -336,7 +336,7 @@ class boss_hexlord_malacrass : public CreatureScript if (instance) instance->SetData(DATA_HEXLORDEVENT, DONE); - me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_DEATH); for (uint8 i = 0; i < 4; ++i) @@ -410,7 +410,7 @@ class boss_hexlord_malacrass : public CreatureScript if (DrainPower_Timer <= diff) { DoCast(me, SPELL_DRAIN_POWER, true); - me->MonsterYell(YELL_DRAIN_POWER, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_DRAIN_POWER, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_DRAIN_POWER); DrainPower_Timer = urand(40000, 55000); // must cast in 60 sec, or buff/debuff will disappear } else DrainPower_Timer -= diff; @@ -422,7 +422,7 @@ class boss_hexlord_malacrass : public CreatureScript else { DoCast(me, SPELL_SPIRIT_BOLTS, false); - me->MonsterYell(YELL_SPIRIT_BOLTS, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_SPIRIT_BOLTS, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_SPIRIT_BOLTS); SpiritBolts_Timer = 40000; SiphonSoul_Timer = 10000; // ready to drain @@ -510,7 +510,7 @@ class boss_hexlord_malacrass : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_hex_lord_malacrassAI(creature); + return GetInstanceAI<boss_hex_lord_malacrassAI>(creature); } }; @@ -567,7 +567,7 @@ class boss_thurg : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_thurgAI(creature); + return GetInstanceAI<boss_thurgAI>(creature); } }; @@ -664,7 +664,7 @@ class boss_alyson_antille : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_alyson_antilleAI(creature); + return GetInstanceAI<boss_alyson_antilleAI>(creature); } }; @@ -757,7 +757,7 @@ class boss_lord_raadan : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lord_raadanAI(creature); + return GetInstanceAI<boss_lord_raadanAI>(creature); } }; @@ -798,7 +798,7 @@ class boss_darkheart : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_darkheartAI(creature); + return GetInstanceAI<boss_darkheartAI>(creature); } }; @@ -857,7 +857,7 @@ class boss_slither : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_slitherAI(creature); + return GetInstanceAI<boss_slitherAI>(creature); } }; @@ -900,7 +900,7 @@ class boss_fenstalker : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_fenstalkerAI(creature); + return GetInstanceAI<boss_fenstalkerAI>(creature); } }; @@ -950,7 +950,7 @@ class boss_koragg : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_koraggAI(creature); + return GetInstanceAI<boss_koraggAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index e429f27aa48..5d119b1d86a 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -324,7 +324,7 @@ class boss_janalai : public CreatureScript { if (isFlameBreathing) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) isFlameBreathing = false; else return; @@ -442,7 +442,7 @@ class boss_janalai : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_janalaiAI(creature); + return GetInstanceAI<boss_janalaiAI>(creature); } }; @@ -612,7 +612,7 @@ class npc_janalai_hatcher : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_janalai_hatcherAI(creature); + return GetInstanceAI<npc_janalai_hatcherAI>(creature); } }; @@ -671,7 +671,7 @@ class npc_janalai_hatchling : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_janalai_hatchlingAI(creature); + return GetInstanceAI<npc_janalai_hatchlingAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 24b043775b1..e97456b3e7d 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -217,7 +217,7 @@ class boss_nalorakk : public CreatureScript case 0: if (me->IsWithinDistInMap(who, 50)) { - me->MonsterYell(YELL_NALORAKK_WAVE1, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_NALORAKK_WAVE1, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE1); (*me).GetMotionMaster()->MovePoint(1, NalorakkWay[1][0], NalorakkWay[1][1], NalorakkWay[1][2]); @@ -230,7 +230,7 @@ class boss_nalorakk : public CreatureScript case 2: if (me->IsWithinDistInMap(who, 40)) { - me->MonsterYell(YELL_NALORAKK_WAVE2, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_NALORAKK_WAVE2, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE2); (*me).GetMotionMaster()->MovePoint(3, NalorakkWay[3][0], NalorakkWay[3][1], NalorakkWay[3][2]); @@ -243,7 +243,7 @@ class boss_nalorakk : public CreatureScript case 5: if (me->IsWithinDistInMap(who, 40)) { - me->MonsterYell(YELL_NALORAKK_WAVE3, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_NALORAKK_WAVE3, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE3); (*me).GetMotionMaster()->MovePoint(6, NalorakkWay[6][0], NalorakkWay[6][1], NalorakkWay[6][2]); @@ -258,7 +258,7 @@ class boss_nalorakk : public CreatureScript { SendAttacker(who); - me->MonsterYell(YELL_NALORAKK_WAVE4, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_NALORAKK_WAVE4, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE4); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -278,7 +278,7 @@ class boss_nalorakk : public CreatureScript if (instance) instance->SetData(DATA_NALORAKKEVENT, IN_PROGRESS); - me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_AGGRO); DoZoneInCombat(); } @@ -288,7 +288,7 @@ class boss_nalorakk : public CreatureScript if (instance) instance->SetData(DATA_NALORAKKEVENT, DONE); - me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_DEATH); } @@ -297,11 +297,11 @@ class boss_nalorakk : public CreatureScript switch (urand(0, 1)) { case 0: - me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); break; case 1: - me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_KILL_TWO); break; } @@ -365,7 +365,7 @@ class boss_nalorakk : public CreatureScript if (Berserk_Timer <= diff) { DoCast(me, SPELL_BERSERK, true); - me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_BERSERK); Berserk_Timer = 600000; } else Berserk_Timer -= diff; @@ -375,7 +375,7 @@ class boss_nalorakk : public CreatureScript if (inBearForm) { // me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 5122); - me->MonsterYell(YELL_SHIFTEDTOTROLL, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_SHIFTEDTOTROLL, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_TOTROLL); me->RemoveAurasDueToSpell(SPELL_BEARFORM); Surge_Timer = urand(15000, 20000); @@ -387,7 +387,7 @@ class boss_nalorakk : public CreatureScript else { // me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); - me->MonsterYell(YELL_SHIFTEDTOBEAR, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_SHIFTEDTOBEAR, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_TOBEAR); DoCast(me, SPELL_BEARFORM, true); LaceratingSlash_Timer = 2000; // dur 18s @@ -418,7 +418,7 @@ class boss_nalorakk : public CreatureScript if (Surge_Timer <= diff) { - me->MonsterYell(YELL_SURGE, LANG_UNIVERSAL, 0); + me->MonsterYell(YELL_SURGE, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_YELL_SURGE); Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 45, true); if (target) @@ -453,7 +453,7 @@ class boss_nalorakk : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_nalorakkAI(creature); + return GetInstanceAI<boss_nalorakkAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index 6281bcef5df..ce1c434bb96 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -246,7 +246,7 @@ class boss_zuljin : public CreatureScript void DoMeleeAttackIfReady() { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { if (me->isAttackReady() && me->IsWithinMeleeRange(me->GetVictim())) { @@ -555,7 +555,7 @@ class boss_zuljin : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_zuljinAI(creature); + return GetInstanceAI<boss_zuljinAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index a4176322288..6e375114fc6 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -116,7 +116,7 @@ class npc_forest_frog : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_forest_frogAI(creature); + return GetInstanceAI<npc_forest_frogAI>(creature); } }; @@ -460,7 +460,7 @@ class npc_harrison_jones : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_harrison_jonesAI(creature); + return GetInstanceAI<npc_harrison_jonesAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 7fe80c12fd2..3b7d773b0eb 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -228,7 +228,7 @@ class boss_arlokk : public CreatureScript if (target) { DoCast(target, SPELL_MARK_OF_ARLOKK, true); - Talk(SAY_FEAST_PROWLER, target->GetGUID()); + Talk(SAY_FEAST_PROWLER, target); } events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(120000, 130000)); break; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp index b25daf85a7c..d35e9bd31f6 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp @@ -169,7 +169,7 @@ class boss_hakkar : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_hakkarAI(creature); + return GetInstanceAI<boss_hakkarAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp index 50b7d277a70..16cdfc6c10a 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp @@ -286,7 +286,7 @@ class npc_batrider : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_batriderAI(creature); + return GetInstanceAI<npc_batriderAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index 4a37f3cf597..0bd97ec3bf4 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -232,7 +232,7 @@ class npc_healing_ward : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_healing_wardAI(creature); + return GetInstanceAI<npc_healing_wardAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index 08215f6a9de..392b405b0a8 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -257,7 +257,7 @@ class boss_mandokir : public CreatureScript if (Unit* player = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) { DoCast(player, SPELL_WATCH); - Talk(SAY_WATCH, player->GetGUID()); + Talk(SAY_WATCH, player); } events.ScheduleEvent(EVENT_WATCH_PLAYER, urand(12000, 15000)); break; @@ -393,7 +393,7 @@ class npc_vilebranch_speaker : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_vilebranch_speakerAI(creature); + return GetInstanceAI<npc_vilebranch_speakerAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index d20414705cf..c784b2c65ad 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -251,7 +251,7 @@ class boss_thekal : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_thekalAI(creature); + return GetInstanceAI<boss_thekalAI>(creature); } }; @@ -406,7 +406,7 @@ class npc_zealot_lorkhan : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_zealot_lorkhanAI(creature); + return GetInstanceAI<npc_zealot_lorkhanAI>(creature); } }; @@ -559,7 +559,7 @@ class npc_zealot_zath : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_zealot_zathAI(creature); + return GetInstanceAI<npc_zealot_zathAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp index 5c760a36e70..f5fe9b4046c 100644 --- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp @@ -39,32 +39,27 @@ EndContentData */ enum ProfessorPhizzlethorpe { // Yells - SAY_PROGRESS_1 = 0, - SAY_PROGRESS_2 = 1, - SAY_PROGRESS_3 = 2, - EMOTE_PROGRESS_4 = 3, - SAY_AGGRO = 4, - SAY_PROGRESS_5 = 5, - SAY_PROGRESS_6 = 6, - SAY_PROGRESS_7 = 7, - EMOTE_PROGRESS_8 = 8, - SAY_PROGRESS_9 = 9, - + SAY_PROGRESS_1 = 0, + SAY_PROGRESS_2 = 1, + SAY_PROGRESS_3 = 2, + EMOTE_PROGRESS_4 = 3, + SAY_AGGRO = 4, + SAY_PROGRESS_5 = 5, + SAY_PROGRESS_6 = 6, + SAY_PROGRESS_7 = 7, + EMOTE_PROGRESS_8 = 8, + SAY_PROGRESS_9 = 9, // Quests QUEST_SUNKEN_TREASURE = 665, - // Creatures - NPC_VENGEFUL_SURGE = 2776 + NPC_VENGEFUL_SURGE = 2776, + FACTION_SUNKEN_TREASURE = 113 }; class npc_professor_phizzlethorpe : public CreatureScript { public: - - npc_professor_phizzlethorpe() - : CreatureScript("npc_professor_phizzlethorpe") - { - } + npc_professor_phizzlethorpe() : CreatureScript("npc_professor_phizzlethorpe") { } struct npc_professor_phizzlethorpeAI : public npc_escortAI { @@ -79,10 +74,10 @@ class npc_professor_phizzlethorpe : public CreatureScript switch (waypointId) { case 4: - Talk(SAY_PROGRESS_2, player->GetGUID()); + Talk(SAY_PROGRESS_2, player); break; case 5: - Talk(SAY_PROGRESS_3, player->GetGUID()); + Talk(SAY_PROGRESS_3, player); break; case 8: Talk(EMOTE_PROGRESS_4); @@ -92,18 +87,18 @@ class npc_professor_phizzlethorpe : public CreatureScript me->SummonCreature(NPC_VENGEFUL_SURGE, -2052.96f, -2142.49f, 20.15f, 1.0f, TEMPSUMMON_CORPSE_DESPAWN, 0); break; case 10: - Talk(SAY_PROGRESS_5, player->GetGUID()); + Talk(SAY_PROGRESS_5, player); break; case 11: - Talk(SAY_PROGRESS_6, player->GetGUID()); + Talk(SAY_PROGRESS_6, player); SetRun(); break; case 19: - Talk(SAY_PROGRESS_7, player->GetGUID()); + Talk(SAY_PROGRESS_7, player); break; case 20: Talk(EMOTE_PROGRESS_8); - Talk(SAY_PROGRESS_9, player->GetGUID()); + Talk(SAY_PROGRESS_9, player); player->GroupEventHappens(QUEST_SUNKEN_TREASURE, me); break; } @@ -119,29 +114,26 @@ class npc_professor_phizzlethorpe : public CreatureScript Talk(SAY_AGGRO); } + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_SUNKEN_TREASURE) + { + Talk(SAY_PROGRESS_1, player); + npc_escortAI::Start(false, false, player->GetGUID(), quest); + me->setFaction(FACTION_SUNKEN_TREASURE); + } + } + void UpdateAI(uint32 diff) OVERRIDE { npc_escortAI::UpdateAI(diff); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_professor_phizzlethorpeAI(creature); - } - - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_SUNKEN_TREASURE) - { - creature->AI()->Talk(SAY_PROGRESS_1, player->GetGUID()); - if (npc_escortAI* pEscortAI = CAST_AI(npc_professor_phizzlethorpeAI, (creature->AI()))) - pEscortAI->Start(false, false, player->GetGUID(), quest); - - creature->setFaction(113); - } - return true; - } + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_professor_phizzlethorpeAI(creature); + } }; void AddSC_arathi_highlands() diff --git a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp index b102873e940..c212592d49b 100644 --- a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,28 +15,26 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Blasted_Lands -SD%Complete: 90 -SDComment: Quest support: 3628. Teleporter to Rise of the Defiler missing group support. -SDCategory: Blasted Lands -EndScriptData */ +/* +Blasted_Lands +Quest support: 3628. Teleporter to Rise of the Defiler. +*/ -/* ContentData +/* npc_deathly_usher -EndContentData */ +*/ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" +#include "SpellScript.h" #include "Player.h" +#include "Group.h" /*###### ## npc_deathly_usher ######*/ -#define GOSSIP_ITEM_USHER "I wish to to visit the Rise of the Defiler." - enum DeathlyUsher { SPELL_TELEPORT_SINGLE = 12885, @@ -50,30 +47,72 @@ class npc_deathly_usher : public CreatureScript public: npc_deathly_usher() : CreatureScript("npc_deathly_usher") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + struct npc_deathly_usherAI : public ScriptedAI { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF) + npc_deathly_usherAI(Creature* creature) : ScriptedAI(creature) { } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE { player->CLOSE_GOSSIP_MENU(); - creature->CastSpell(player, SPELL_TELEPORT_SINGLE, true); + me->CastSpell(player, SPELL_TELEPORT_GROUP, true); } + }; - return true; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_deathly_usherAI(creature); } +}; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->GetQuestStatus(3628) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(10757)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_USHER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); +/*##### +# spell_razelikh_teleport_group +#####*/ + +class spell_razelikh_teleport_group : public SpellScriptLoader +{ + public: spell_razelikh_teleport_group() : SpellScriptLoader("spell_razelikh_teleport_group") { } + + class spell_razelikh_teleport_group_SpellScript : public SpellScript + { + PrepareSpellScript(spell_razelikh_teleport_group_SpellScript); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); + bool Validate(SpellInfo const* /*spell*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_SINGLE) && !sSpellMgr->GetSpellInfo(SPELL_TELEPORT_SINGLE_IN_GROUP)) + return false; + return true; + } - return true; - } + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* player = GetHitPlayer()) + { + if (Group* group = player->GetGroup()) + { + for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) + if (Player* member = itr->GetSource()) + if (member->IsWithinDistInMap(player, 20.0f) && !member->isDead()) + member->CastSpell(member, SPELL_TELEPORT_SINGLE_IN_GROUP, true); + } + else + player->CastSpell(player, SPELL_TELEPORT_SINGLE, true); + } + } + + void Register() OVERRIDE + { + OnEffectHitTarget += SpellEffectFn(spell_razelikh_teleport_group_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const OVERRIDE + { + return new spell_razelikh_teleport_group_SpellScript(); + } }; void AddSC_blasted_lands() { new npc_deathly_usher(); + new spell_razelikh_teleport_group(); } diff --git a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp index 5a61663a0bb..c5e0c5a1391 100644 --- a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp +++ b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp @@ -49,11 +49,43 @@ EndContentData */ #define GOSSIP_SELECT10 "Ahh... Ironfoe" #define GOSSIP_SELECT11 "Thanks, Ragged John. Your story was very uplifting and informative" +enum RaggedJohn +{ + QUEST_THE_TRUE_MASTERS = 4224, + QUEST_MOTHERS_MILK = 4866, + SPELL_MOTHERS_MILK = 16468, + SPELL_WICKED_MILKING = 16472 +}; + class npc_ragged_john : public CreatureScript { public: npc_ragged_john() : CreatureScript("npc_ragged_john") { } + struct npc_ragged_johnAI : public ScriptedAI + { + npc_ragged_johnAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() OVERRIDE { } + + void MoveInLineOfSight(Unit* who) OVERRIDE + { + if (who->HasAura(SPELL_MOTHERS_MILK)) + { + if (who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 15) && who->isInAccessiblePlaceFor(me)) + { + DoCast(who, SPELL_WICKED_MILKING); + if (Player* player = who->ToPlayer()) + player->AreaExploredOrEventHappens(QUEST_MOTHERS_MILK); + } + } + + ScriptedAI::MoveInLineOfSight(who); + } + + void EnterCombat(Unit* /*who*/) OVERRIDE { } + }; + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE { player->PlayerTalkClass->ClearMenus(); @@ -105,7 +137,7 @@ public: break; case GOSSIP_ACTION_INFO_DEF+11: player->CLOSE_GOSSIP_MENU(); - player->AreaExploredOrEventHappens(4224); + player->AreaExploredOrEventHappens(QUEST_THE_TRUE_MASTERS); break; } return true; @@ -116,7 +148,7 @@ public: if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->GetQuestStatus(4224) == QUEST_STATUS_INCOMPLETE) + if (player->GetQuestStatus(QUEST_THE_TRUE_MASTERS) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); player->SEND_GOSSIP_MENU(2713, creature->GetGUID()); @@ -127,31 +159,6 @@ public: { return new npc_ragged_johnAI(creature); } - - struct npc_ragged_johnAI : public ScriptedAI - { - npc_ragged_johnAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() OVERRIDE { } - - void MoveInLineOfSight(Unit* who) OVERRIDE - - { - if (who->HasAura(16468)) - { - if (who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 15) && who->isInAccessiblePlaceFor(me)) - { - DoCast(who, 16472); - if (Player* player = who->ToPlayer()) - player->AreaExploredOrEventHappens(4866); - } - } - - ScriptedAI::MoveInLineOfSight(who); - } - - void EnterCombat(Unit* /*who*/) OVERRIDE { } - }; }; void AddSC_burning_steppes() diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index 8f7865dbf71..7c9e33c98b7 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -27,81 +27,45 @@ EndScriptData */ #include "ScriptedCreature.h" #include "Player.h" -enum Yells -{ - YELL_TWILIGHTCORRUPTOR_RESPAWN = 0, - YELL_TWILIGHTCORRUPTOR_AGGRO = 1, - YELL_TWILIGHTCORRUPTOR_KILL = 2, -}; - - -/*###### -# at_twilight_grove -######*/ - -class at_twilight_grove : public AreaTriggerScript +enum TwilightCorrupter { -public: - at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { } + ITEM_FRAGMENT = 21149, + NPC_TWILIGHT_CORRUPTER = 15625, + YELL_TWILIGHTCORRUPTOR_RESPAWN = 0, + YELL_TWILIGHTCORRUPTOR_AGGRO = 1, + YELL_TWILIGHTCORRUPTOR_KILL = 2, + SPELL_SOUL_CORRUPTION = 25805, + SPELL_CREATURE_OF_NIGHTMARE = 25806, + SPELL_LEVEL_UP = 24312, - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE - { - if (player->HasQuestForItem(21149)) - { - if (Unit* TCorrupter = player->SummonCreature(15625, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000)) - { - TCorrupter->setFaction(14); - TCorrupter->SetMaxHealth(832750); - } - if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000)) - { - CorrupterSpeaker->SetName("Twilight Corrupter"); - CorrupterSpeaker->SetVisible(true); - CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player->GetGUID()); - } - } - return false; - }; + EVENT_SOUL_CORRUPTION = 1, + EVENT_CREATURE_OF_NIGHTMARE = 2, + FACTION_HOSTILE = 14 }; /*###### # boss_twilight_corrupter ######*/ -enum TwilightCorrupter -{ - SPELL_SOUL_CORRUPTION = 25805, - SPELL_CREATURE_OF_NIGHTMARE = 25806, - SPELL_LEVEL_UP = 24312 -}; - class boss_twilight_corrupter : public CreatureScript { public: boss_twilight_corrupter() : CreatureScript("boss_twilight_corrupter") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_twilight_corrupterAI(creature); - } - struct boss_twilight_corrupterAI : public ScriptedAI { boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) { } - uint32 SoulCorruption_Timer; - uint32 CreatureOfNightmare_Timer; - uint8 KillCount; - void Reset() OVERRIDE { - SoulCorruption_Timer = 15000; - CreatureOfNightmare_Timer = 30000; - KillCount = 0; + KillCount = 0; } + void EnterCombat(Unit* /*who*/) OVERRIDE { Talk(YELL_TWILIGHTCORRUPTOR_AGGRO); + _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, 15000); + _events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 30000); } void KilledUnit(Unit* victim) OVERRIDE @@ -109,7 +73,7 @@ public: if (victim->GetTypeId() == TYPEID_PLAYER) { ++KillCount; - Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim->GetGUID()); + Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim); if (KillCount == 3) { @@ -123,19 +87,63 @@ public: { if (!UpdateVictim()) return; - if (SoulCorruption_Timer <= diff) - { - DoCastVictim(SPELL_SOUL_CORRUPTION); - SoulCorruption_Timer = rand()%4000+15000; //gotta confirm Timers - } else SoulCorruption_Timer-=diff; - if (CreatureOfNightmare_Timer <= diff) + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) { - DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE); - CreatureOfNightmare_Timer = 45000; //gotta confirm Timers - } else CreatureOfNightmare_Timer-=diff; + switch (eventId) + { + case EVENT_SOUL_CORRUPTION: + DoCastVictim(SPELL_SOUL_CORRUPTION); + _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, rand()%4000+15000); + break; + case EVENT_CREATURE_OF_NIGHTMARE: + DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE); + _events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 45000); + break; + default: + break; + } + } DoMeleeAttackIfReady(); - }; + } + + private: + EventMap _events; + uint8 KillCount; + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new boss_twilight_corrupterAI(creature); + } +}; + +/*###### +# at_twilight_grove +######*/ + +class at_twilight_grove : public AreaTriggerScript +{ +public: + at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { } + + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + { + if (player->HasQuestForItem(ITEM_FRAGMENT)) + { + if (Unit* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000)) + corrupter->setFaction(FACTION_HOSTILE); + + if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000)) + { + CorrupterSpeaker->SetName("Twilight Corrupter"); + CorrupterSpeaker->SetVisible(true); + CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player); + } + } + return false; }; }; diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index cf7ea882135..1d4769cd716 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -19,14 +19,11 @@ /* ScriptData SDName: Ghostlands SD%Complete: 100 -SDComment: Quest support: 9692, 9212. Obtain Budd's Guise of Zul'aman. Vendor Rathis Tomber +SDComment: Quest support: 9212. SDCategory: Ghostlands EndScriptData */ /* ContentData -npc_blood_knight_dawnstar -npc_budd_nedreck -npc_rathis_tomber npc_ranger_lilatha EndContentData */ @@ -38,80 +35,11 @@ EndContentData */ #include "WorldSession.h" /*###### -## npc_budd_nedreck -######*/ - -#define GOSSIP_HBN "You gave the crew disguises?" - -class npc_budd_nedreck : public CreatureScript -{ -public: - npc_budd_nedreck() : CreatureScript("npc_budd_nedreck") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF) - { - player->CLOSE_GOSSIP_MENU(); - creature->CastSpell(player, 42540, false); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(11166) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HBN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } -}; - -/*###### -## npc_rathis_tomber -######*/ - -class npc_rathis_tomber : public CreatureScript -{ -public: - npc_rathis_tomber() : CreatureScript("npc_rathis_tomber") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_TRADE) - player->GetSession()->SendListInventory(creature->GetGUID()); - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (creature->IsVendor() && player->GetQuestRewardStatus(9152)) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - player->SEND_GOSSIP_MENU(8432, creature->GetGUID()); - }else - player->SEND_GOSSIP_MENU(8431, creature->GetGUID()); - - return true; - } -}; - -/*###### ## npc_ranger_lilatha ######*/ enum RangerLilatha { - // Yells SAY_START = 0, SAY_PROGRESS1 = 1, SAY_PROGRESS2 = 2, @@ -119,18 +47,12 @@ enum RangerLilatha SAY_END1 = 4, SAY_END2 = 5, SAY_CAPTAIN_ANSWER = 0, - - // Quests QUEST_ESCAPE_FROM_THE_CATACOMBS = 9212, - - // Gameobjects GO_CAGE = 181152, - - // Creature NPC_CAPTAIN_HELIOS = 16220, - - // Factions - FACTION_SMOON_E = 1603 + NPC_MUMMIFIED_HEADHUNTER = 16342, + NPC_SHADOWPINE_ORACLE = 16343, + FACTION_QUEST_ESCAPE = 113 }; class npc_ranger_lilatha : public CreatureScript @@ -154,20 +76,20 @@ public: me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) Cage->SetGoState(GO_STATE_ACTIVE); - Talk(SAY_START, player->GetGUID()); + Talk(SAY_START, player); break; case 5: - Talk(SAY_PROGRESS1, player->GetGUID()); + Talk(SAY_PROGRESS1, player); break; case 11: - Talk(SAY_PROGRESS2, player->GetGUID()); + Talk(SAY_PROGRESS2, player); me->SetFacingTo(4.762841f); break; case 18: { - Talk(SAY_PROGRESS3, player->GetGUID()); - Creature* Summ1 = me->SummonCreature(16342, 7627.083984f, -7532.538086f, 152.128616f, 1.082733f, TEMPSUMMON_DEAD_DESPAWN, 0); - Creature* Summ2 = me->SummonCreature(16343, 7620.432129f, -7532.550293f, 152.454865f, 0.827478f, TEMPSUMMON_DEAD_DESPAWN, 0); + Talk(SAY_PROGRESS3, player); + Creature* Summ1 = me->SummonCreature(NPC_MUMMIFIED_HEADHUNTER, 7627.083984f, -7532.538086f, 152.128616f, 1.082733f, TEMPSUMMON_DEAD_DESPAWN, 0); + Creature* Summ2 = me->SummonCreature(NPC_SHADOWPINE_ORACLE, 7620.432129f, -7532.550293f, 152.454865f, 0.827478f, TEMPSUMMON_DEAD_DESPAWN, 0); if (Summ1 && Summ2) { Summ1->Attack(me, true); @@ -187,14 +109,14 @@ public: break; case 32: me->SetFacingTo(2.978281f); - Talk(SAY_END1, player->GetGUID()); + Talk(SAY_END1, player); break; case 33: me->SetFacingTo(5.858011f); - Talk(SAY_END2, player->GetGUID()); + Talk(SAY_END2, player); Creature* CaptainHelios = me->FindNearestCreature(NPC_CAPTAIN_HELIOS, 50); if (CaptainHelios) - CaptainHelios->AI()->Talk(SAY_CAPTAIN_ANSWER, player->GetGUID()); + CaptainHelios->AI()->Talk(SAY_CAPTAIN_ANSWER, player); break; } } @@ -210,7 +132,7 @@ public: { if (quest->GetQuestId() == QUEST_ESCAPE_FROM_THE_CATACOMBS) { - creature->setFaction(113); + creature->setFaction(FACTION_QUEST_ESCAPE); if (npc_escortAI* pEscortAI = CAST_AI(npc_ranger_lilatha::npc_ranger_lilathaAI, creature->AI())) pEscortAI->Start(true, false, player->GetGUID()); @@ -227,7 +149,5 @@ public: void AddSC_ghostlands() { - new npc_budd_nedreck(); - new npc_rathis_tomber(); new npc_ranger_lilatha(); } diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index 257e3c21688..718e69f78f0 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -24,7 +24,7 @@ SDCategory: The Hinterlands EndScriptData */ /* ContentData -npc_00x09hl +npc_oox09hl npc_rinji EndContentData */ @@ -34,7 +34,7 @@ EndContentData */ #include "Player.h" /*###### -## npc_00x09hl +## npc_oox09hl ######*/ enum OOX @@ -44,50 +44,47 @@ enum OOX SAY_OOX_AMBUSH = 2, SAY_OOX_AMBUSH_REPLY = 3, SAY_OOX_END = 4, - QUEST_RESQUE_OOX_09 = 836, - NPC_MARAUDING_OWL = 7808, NPC_VILE_AMBUSHER = 7809, - FACTION_ESCORTEE_A = 774, FACTION_ESCORTEE_H = 775 }; -class npc_00x09hl : public CreatureScript +class npc_oox09hl : public CreatureScript { public: - npc_00x09hl() : CreatureScript("npc_00x09hl") { } + npc_oox09hl() : CreatureScript("npc_oox09hl") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + struct npc_oox09hlAI : public npc_escortAI { - if (quest->GetQuestId() == QUEST_RESQUE_OOX_09) - { - creature->SetStandState(UNIT_STAND_STATE_STAND); + npc_oox09hlAI(Creature* creature) : npc_escortAI(creature) { } - if (player->GetTeam() == ALLIANCE) - creature->setFaction(FACTION_ESCORTEE_A); - else if (player->GetTeam() == HORDE) - creature->setFaction(FACTION_ESCORTEE_H); + void Reset() OVERRIDE { } - creature->AI()->Talk(SAY_OOX_START, player->GetGUID()); + void EnterCombat(Unit* who) OVERRIDE + { + if (who->GetEntry() == NPC_MARAUDING_OWL || who->GetEntry() == NPC_VILE_AMBUSHER) + return; - if (npc_00x09hlAI* pEscortAI = CAST_AI(npc_00x09hl::npc_00x09hlAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); + Talk(SAY_OOX_AGGRO); } - return true; - } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_00x09hlAI(creature); - } - - struct npc_00x09hlAI : public npc_escortAI - { - npc_00x09hlAI(Creature* creature) : npc_escortAI(creature) { } + void JustSummoned(Creature* summoned) OVERRIDE + { + summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); + } - void Reset() OVERRIDE { } + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_RESQUE_OOX_09) + { + me->SetStandState(UNIT_STAND_STATE_STAND); + me->setFaction(player->GetTeam() == ALLIANCE ? FACTION_ESCORTEE_A : FACTION_ESCORTEE_H); + Talk(SAY_OOX_START, player); + npc_escortAI::Start(false, false, player->GetGUID(), quest); + } + } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -107,9 +104,9 @@ public: } } - void WaypointStart(uint32 uiPointId) OVERRIDE + void WaypointStart(uint32 pointId) OVERRIDE { - switch (uiPointId) + switch (pointId) { case 27: for (uint8 i = 0; i < 3; ++i) @@ -131,20 +128,12 @@ public: break; } } - - void EnterCombat(Unit* who) OVERRIDE - { - if (who->GetEntry() == NPC_MARAUDING_OWL || who->GetEntry() == NPC_VILE_AMBUSHER) - return; - - Talk(SAY_OOX_AGGRO); - } - - void JustSummoned(Creature* summoned) OVERRIDE - { - summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); - } }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_oox09hlAI(creature); + } }; /*###### @@ -154,13 +143,11 @@ public: enum Rinji { SAY_RIN_BY_OUTRUNNER = 0, - - SAY_RIN_FREE = 0, //from here + SAY_RIN_FREE = 0, // from here SAY_RIN_HELP = 1, SAY_RIN_COMPLETE = 2, SAY_RIN_PROGRESS_1 = 3, SAY_RIN_PROGRESS_2 = 4, - QUEST_RINJI_TRAPPED = 2742, NPC_RANGER = 2694, NPC_OUTRUNNER = 2691, @@ -169,19 +156,19 @@ enum Rinji struct Location { - float m_fX, m_fY, m_fZ; + float posX, posY, posZ; }; -Location m_afAmbushSpawn[] = +Location AmbushSpawn[] = { - {191.296204f, -2839.329346f, 107.388f}, - {70.972466f, -2848.674805f, 109.459f} + { 191.296204f, -2839.329346f, 107.388f }, + { 70.972466f, -2848.674805f, 109.459f } }; -Location m_afAmbushMoveTo[] = +Location AmbushMoveTo[] = { - {166.630386f, -2824.780273f, 108.153f}, - {70.886589f, -2874.335449f, 116.675f} + { 166.630386f, -2824.780273f, 108.153f }, + { 70.886589f, -2874.335449f, 116.675f } }; class npc_rinji : public CreatureScript @@ -189,47 +176,24 @@ class npc_rinji : public CreatureScript public: npc_rinji() : CreatureScript("npc_rinji") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_RINJI_TRAPPED) - { - if (GameObject* go = creature->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE)) - go->UseDoorOrButton(); - - if (npc_rinjiAI* pEscortAI = CAST_AI(npc_rinji::npc_rinjiAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); - } - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_rinjiAI(creature); - } - struct npc_rinjiAI : public npc_escortAI { npc_rinjiAI(Creature* creature) : npc_escortAI(creature) { - m_bIsByOutrunner = false; - m_iSpawnId = 0; + _IsByOutrunner = false; + spawnId = 0; } - bool m_bIsByOutrunner; - uint32 m_uiPostEventCount; - uint32 m_uiPostEventTimer; - int m_iSpawnId; - void Reset() OVERRIDE { - m_uiPostEventCount = 0; - m_uiPostEventTimer = 3000; + postEventCount = 0; + postEventTimer = 3000; } void JustRespawned() OVERRIDE { - m_bIsByOutrunner = false; - m_iSpawnId = 0; + _IsByOutrunner = false; + spawnId = 0; npc_escortAI::JustRespawned(); } @@ -238,11 +202,11 @@ public: { if (HasEscortState(STATE_ESCORT_ESCORTING)) { - if (who->GetEntry() == NPC_OUTRUNNER && !m_bIsByOutrunner) + if (who->GetEntry() == NPC_OUTRUNNER && !_IsByOutrunner) { if (Creature* talker = who->ToCreature()) talker->AI()->Talk(SAY_RIN_BY_OUTRUNNER); - m_bIsByOutrunner = true; + _IsByOutrunner = true; } if (rand()%4) @@ -253,19 +217,17 @@ public: } } - void DoSpawnAmbush(bool bFirst) + void DoSpawnAmbush(bool _first) { - if (!bFirst) - m_iSpawnId = 1; + if (!_first) + spawnId = 1; - me->SummonCreature(NPC_RANGER, - m_afAmbushSpawn[m_iSpawnId].m_fX, m_afAmbushSpawn[m_iSpawnId].m_fY, m_afAmbushSpawn[m_iSpawnId].m_fZ, 0.0f, + me->SummonCreature(NPC_RANGER, AmbushSpawn[spawnId].posX, AmbushSpawn[spawnId].posY, AmbushSpawn[spawnId].posZ, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); for (int i = 0; i < 2; ++i) { - me->SummonCreature(NPC_OUTRUNNER, - m_afAmbushSpawn[m_iSpawnId].m_fX, m_afAmbushSpawn[m_iSpawnId].m_fY, m_afAmbushSpawn[m_iSpawnId].m_fZ, 0.0f, + me->SummonCreature(NPC_OUTRUNNER, AmbushSpawn[spawnId].posX, AmbushSpawn[spawnId].posY, AmbushSpawn[spawnId].posZ, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); } } @@ -273,7 +235,18 @@ public: void JustSummoned(Creature* summoned) OVERRIDE { summoned->SetWalk(false); - summoned->GetMotionMaster()->MovePoint(0, m_afAmbushMoveTo[m_iSpawnId].m_fX, m_afAmbushMoveTo[m_iSpawnId].m_fY, m_afAmbushMoveTo[m_iSpawnId].m_fZ); + summoned->GetMotionMaster()->MovePoint(0, AmbushMoveTo[spawnId].posX, AmbushMoveTo[spawnId].posY, AmbushMoveTo[spawnId].posZ); + } + + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_RINJI_TRAPPED) + { + if (GameObject* go = me->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE)) + go->UseDoorOrButton(); + + npc_escortAI::Start(false, false, player->GetGUID(), quest); + } } void WaypointReached(uint32 waypointId) OVERRIDE @@ -285,7 +258,7 @@ public: switch (waypointId) { case 1: - Talk(SAY_RIN_FREE, player->GetGUID()); + Talk(SAY_RIN_FREE, player); break; case 7: DoSpawnAmbush(true); @@ -294,36 +267,36 @@ public: DoSpawnAmbush(false); break; case 17: - Talk(SAY_RIN_COMPLETE, player->GetGUID()); + Talk(SAY_RIN_COMPLETE, player); player->GroupEventHappens(QUEST_RINJI_TRAPPED, me); SetRun(); - m_uiPostEventCount = 1; + postEventCount = 1; break; } } - void UpdateEscortAI(const uint32 uiDiff) OVERRIDE + void UpdateEscortAI(const uint32 diff) OVERRIDE { //Check if we have a current target if (!UpdateVictim()) { - if (HasEscortState(STATE_ESCORT_ESCORTING) && m_uiPostEventCount) + if (HasEscortState(STATE_ESCORT_ESCORTING) && postEventCount) { - if (m_uiPostEventTimer <= uiDiff) + if (postEventTimer <= diff) { - m_uiPostEventTimer = 3000; + postEventTimer = 3000; if (Player* player = GetPlayerForEscort()) { - switch (m_uiPostEventCount) + switch (postEventCount) { case 1: - Talk(SAY_RIN_PROGRESS_1, player->GetGUID()); - ++m_uiPostEventCount; + Talk(SAY_RIN_PROGRESS_1, player); + ++postEventCount; break; case 2: - Talk(SAY_RIN_PROGRESS_2, player->GetGUID()); - m_uiPostEventCount = 0; + Talk(SAY_RIN_PROGRESS_2, player); + postEventCount = 0; break; } } @@ -334,19 +307,28 @@ public: } } else - m_uiPostEventTimer -= uiDiff; + postEventTimer -= diff; } - return; } - DoMeleeAttackIfReady(); } + + private: + uint32 postEventCount; + uint32 postEventTimer; + int spawnId; + bool _IsByOutrunner; }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_rinjiAI(creature); + } }; void AddSC_hinterlands() { - new npc_00x09hl(); + new npc_oox09hl(); new npc_rinji(); } diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index 604d51f9d8f..8369c3c5560 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -29,15 +29,13 @@ Script Data End */ enum CorporalKeeshan { QUEST_MISSING_IN_ACTION = 219, - - SAY_CORPORAL_1 = 0, - SAY_CORPORAL_2 = 1, - SAY_CORPORAL_3 = 2, - SAY_CORPORAL_4 = 3, - SAY_CORPORAL_5 = 4, - - SPELL_MOCKING_BLOW = 21008, - SPELL_SHIELD_BASH = 11972, + SAY_CORPORAL_1 = 0, + SAY_CORPORAL_2 = 1, + SAY_CORPORAL_3 = 2, + SAY_CORPORAL_4 = 3, + SAY_CORPORAL_5 = 4, + SPELL_MOCKING_BLOW = 21008, + SPELL_SHIELD_BASH = 11972 }; class npc_corporal_keeshan : public CreatureScript @@ -45,37 +43,25 @@ class npc_corporal_keeshan : public CreatureScript public: npc_corporal_keeshan() : CreatureScript("npc_corporal_keeshan") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_MISSING_IN_ACTION) - { - CAST_AI(npc_corporal_keeshan::npc_corporal_keeshanAI, creature->AI())->Start(true, false, player->GetGUID(), quest); - creature->AI()->Talk(SAY_CORPORAL_1); - } - - return false; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_corporal_keeshanAI(creature); - } - struct npc_corporal_keeshanAI : public npc_escortAI { npc_corporal_keeshanAI(Creature* creature) : npc_escortAI(creature) { } - uint32 uiPhase; - uint32 uiTimer; - uint32 uiMockingBlowTimer; - uint32 uiShieldBashTimer; - void Reset() OVERRIDE { - uiTimer = 0; - uiPhase = 0; - uiMockingBlowTimer = 5000; - uiShieldBashTimer = 8000; + timer = 0; + phase = 0; + mockingBlowTimer = 5000; + shieldBashTimer = 8000; + } + + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_MISSING_IN_ACTION) + { + Talk(SAY_CORPORAL_1, player); + npc_escortAI::Start(true, false, player->GetGUID(), quest); + } } void WaypointReached(uint32 waypointId) OVERRIDE @@ -91,82 +77,93 @@ public: { case 39: SetEscortPaused(true); - uiTimer = 2000; - uiPhase = 1; + timer = 2000; + phase = 1; break; case 65: me->SetWalk(false); break; case 115: player->AreaExploredOrEventHappens(QUEST_MISSING_IN_ACTION); - uiTimer = 2000; - uiPhase = 4; + timer = 2000; + phase = 4; break; } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { if (HasEscortState(STATE_ESCORT_NONE)) return; - npc_escortAI::UpdateAI(uiDiff); + npc_escortAI::UpdateAI(diff); - if (uiPhase) + if (phase) { - if (uiTimer <= uiDiff) + if (timer <= diff) { - switch (uiPhase) + switch (phase) { case 1: me->SetStandState(UNIT_STAND_STATE_SIT); - uiTimer = 1000; - uiPhase = 2; + timer = 1000; + phase = 2; break; case 2: Talk(SAY_CORPORAL_2); - uiTimer = 15000; - uiPhase = 3; + timer = 15000; + phase = 3; break; case 3: Talk(SAY_CORPORAL_3); me->SetStandState(UNIT_STAND_STATE_STAND); SetEscortPaused(false); - uiTimer = 0; - uiPhase = 0; + timer = 0; + phase = 0; break; case 4: Talk(SAY_CORPORAL_4); - uiTimer = 2500; - uiPhase = 5; + timer = 2500; + phase = 5; break; case 5: Talk(SAY_CORPORAL_5); - uiTimer = 0; - uiPhase = 0; + timer = 0; + phase = 0; break; } - } else uiTimer -= uiDiff; + } else timer -= diff; } if (!UpdateVictim()) return; - if (uiMockingBlowTimer <= uiDiff) + if (mockingBlowTimer <= diff) { DoCastVictim(SPELL_MOCKING_BLOW); - uiMockingBlowTimer = 5000; - } else uiMockingBlowTimer -= uiDiff; + mockingBlowTimer = 5000; + } else mockingBlowTimer -= diff; - if (uiShieldBashTimer <= uiDiff) + if (shieldBashTimer <= diff) { DoCastVictim(SPELL_MOCKING_BLOW); - uiShieldBashTimer = 8000; - } else uiShieldBashTimer -= uiDiff; + shieldBashTimer = 8000; + } else shieldBashTimer -= diff; DoMeleeAttackIfReady(); } + + private: + uint32 phase; + uint32 timer; + uint32 mockingBlowTimer; + uint32 shieldBashTimer; }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_corporal_keeshanAI(creature); + } }; void AddSC_redridge_mountains() diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index 757f2bcff2c..37fd32566e1 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -76,13 +76,13 @@ public: switch (waypointId) { case 1: - Talk(SAY_START, player->GetGUID()); + Talk(SAY_START, player); break; case 10: Talk(SAY_PROGRESS); break; case 13: - Talk(SAY_LAST, player->GetGUID()); + Talk(SAY_LAST, player); player->GroupEventHappens(QUEST_ESCORTING, me); break; case 15: @@ -112,7 +112,7 @@ public: void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_AGGRO, who->GetGUID()); + Talk(SAY_AGGRO, who); } }; @@ -120,7 +120,7 @@ public: { if (quest->GetQuestId() == QUEST_ESCORTING) { - creature->AI()->Talk(SAY_QUESTACCEPT, player->GetGUID()); + creature->AI()->Talk(SAY_QUESTACCEPT, player); if (npc_escortAI* pEscortAI = CAST_AI(npc_deathstalker_erland::npc_deathstalker_erlandAI, creature->AI())) pEscortAI->Start(true, false, player->GetGUID()); @@ -273,7 +273,7 @@ public: { case 0: if (WaitTimer == WAIT_SECS) - me->MonsterSay(NPCSAY_INIT, LANG_UNIVERSAL, 0); //no blizzlike + me->MonsterSay(NPCSAY_INIT, LANG_UNIVERSAL, NULL); //no blizzlike if (WaitTimer <= diff) { @@ -303,7 +303,7 @@ public: { if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) { - me->MonsterSay(NPCSAY_END, LANG_UNIVERSAL, 0); //not blizzlike + me->MonsterSay(NPCSAY_END, LANG_UNIVERSAL, NULL); //not blizzlike player->GroupEventHappens(QUEST_PYREWOOD_AMBUSH, me); } } diff --git a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp index bec49e0f15c..740200d3fdc 100644 --- a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp +++ b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp @@ -28,59 +28,46 @@ enum Galen { QUEST_GALENS_ESCAPE = 1393, - GO_GALENS_CAGE = 37118, - SAY_PERIODIC = 0, SAY_QUEST_ACCEPTED = 1, SAY_ATTACKED = 2, SAY_QUEST_COMPLETE = 3, EMOTE_WHISPER = 4, - EMOTE_DISAPPEAR = 5, + EMOTE_DISAPPEAR = 5 }; class npc_galen_goodward : public CreatureScript { public: - npc_galen_goodward() : CreatureScript("npc_galen_goodward") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_GALENS_ESCAPE) - { - CAST_AI(npc_galen_goodward::npc_galen_goodwardAI, creature->AI())->Start(false, false, player->GetGUID()); - creature->setFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE); - creature->AI()->Talk(SAY_QUEST_ACCEPTED); - } - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_galen_goodwardAI(creature); - } - struct npc_galen_goodwardAI : public npc_escortAI { npc_galen_goodwardAI(Creature* creature) : npc_escortAI(creature) { - m_uiGalensCageGUID = 0; + galensCageGUID = 0; Reset(); } - uint64 m_uiGalensCageGUID; - uint32 m_uiPeriodicSay; - void Reset() OVERRIDE { - m_uiPeriodicSay = 6000; + periodicSay = 6000; } void EnterCombat(Unit* who) OVERRIDE { if (HasEscortState(STATE_ESCORT_ESCORTING)) - Talk(SAY_ATTACKED, who->GetGUID()); + Talk(SAY_ATTACKED, who); + } + + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_GALENS_ESCAPE) + { + Talk(SAY_QUEST_ACCEPTED, player); + npc_escortAI::Start(false, false, player->GetGUID(), quest); + } } void WaypointStart(uint32 uiPointId) OVERRIDE @@ -89,15 +76,15 @@ public: { case 0: { - GameObject* pCage = NULL; - if (m_uiGalensCageGUID) - pCage = me->GetMap()->GetGameObject(m_uiGalensCageGUID); + GameObject* cage = NULL; + if (galensCageGUID) + cage = me->GetMap()->GetGameObject(galensCageGUID); else - pCage = GetClosestGameObjectWithEntry(me, GO_GALENS_CAGE, INTERACTION_DISTANCE); - if (pCage) + cage = GetClosestGameObjectWithEntry(me, GO_GALENS_CAGE, INTERACTION_DISTANCE); + if (cage) { - pCage->UseDoorOrButton(); - m_uiGalensCageGUID = pCage->GetGUID(); + cage->UseDoorOrButton(); + galensCageGUID = cage->GetGUID(); } break; } @@ -112,15 +99,15 @@ public: switch (waypointId) { case 0: - if (GameObject* pCage = me->GetMap()->GetGameObject(m_uiGalensCageGUID)) - pCage->ResetDoorOrButton(); + if (GameObject* cage = me->GetMap()->GetGameObject(galensCageGUID)) + cage->ResetDoorOrButton(); break; case 20: if (Player* player = GetPlayerForEscort()) { me->SetFacingToObject(player); - Talk(SAY_QUEST_COMPLETE, player->GetGUID()); - Talk(EMOTE_WHISPER, player->GetGUID()); + Talk(SAY_QUEST_COMPLETE, player); + Talk(EMOTE_WHISPER, player); player->GroupEventHappens(QUEST_GALENS_ESCAPE, me); } SetRun(true); @@ -128,25 +115,34 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - npc_escortAI::UpdateAI(uiDiff); + npc_escortAI::UpdateAI(diff); if (HasEscortState(STATE_ESCORT_NONE)) return; - if (m_uiPeriodicSay < uiDiff) + if (periodicSay < diff) { if (!HasEscortState(STATE_ESCORT_ESCORTING)) Talk(SAY_PERIODIC); - m_uiPeriodicSay = 15000; + periodicSay = 15000; } else - m_uiPeriodicSay -= uiDiff; + periodicSay -= diff; DoMeleeAttackIfReady(); } + + private: + uint64 galensCageGUID; + uint32 periodicSay; }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_galen_goodwardAI(creature); + } }; void AddSC_swamp_of_sorrows() diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 6b409012cb0..f7577d49114 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -371,18 +371,18 @@ public: if (Ughost) { Ughost->SetDisableGravity(true); - Ughost->AI()->Talk(SAY_WP_4, me->GetGUID()); + Ughost->AI()->Talk(SAY_WP_4, me); } m_uiChatTimer = 4000; break; case 24: if (Ughost) - Ughost->AI()->Talk(SAY_WP_5, me->GetGUID()); + Ughost->AI()->Talk(SAY_WP_5, me); m_uiChatTimer = 4000; break; case 25: if (Ughost) - Ughost->AI()->Talk(SAY_WP_6, me->GetGUID()); + Ughost->AI()->Talk(SAY_WP_6, me); m_uiChatTimer = 4000; break; case 26: diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp index 3869ee5bbb5..2dd5c1fbb3b 100644 --- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp +++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp @@ -228,7 +228,7 @@ public: if (npc_escortAI* pEscortAI = CAST_AI(npc_defias_traitor::npc_defias_traitorAI, creature->AI())) pEscortAI->Start(true, true, player->GetGUID()); - creature->AI()->Talk(SAY_START, player->GetGUID()); + creature->AI()->Talk(SAY_START, player); } return true; @@ -255,10 +255,10 @@ public: SetRun(false); break; case 36: - Talk(SAY_PROGRESS, player->GetGUID()); + Talk(SAY_PROGRESS, player); break; case 44: - Talk(SAY_END, player->GetGUID()); + Talk(SAY_END, player); player->GroupEventHappens(QUEST_DEFIAS_BROTHERHOOD, me); break; } @@ -266,7 +266,7 @@ public: void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_AGGRO, who->GetGUID()); + Talk(SAY_AGGRO, who); } void Reset() OVERRIDE { } diff --git a/src/server/scripts/Examples/example_creature.cpp b/src/server/scripts/Examples/example_creature.cpp index b13ec1e1503..3a675389d1e 100644 --- a/src/server/scripts/Examples/example_creature.cpp +++ b/src/server/scripts/Examples/example_creature.cpp @@ -128,7 +128,7 @@ class example_creature : public CreatureScript void EnterCombat(Unit* who) OVERRIDE { //Say some stuff - Talk(SAY_AGGRO, who->GetGUID()); + Talk(SAY_AGGRO, who); } // *** HANDLED FUNCTION *** @@ -236,7 +236,7 @@ class example_creature : public CreatureScript if (m_uiBeserkTimer <= uiDiff) { //Say our line then cast uber death spell - Talk(SAY_BERSERK, me->GetVictim() ? me->GetVictim()->GetGUID() : 0); + Talk(SAY_BERSERK, me->GetVictim()); DoCastVictim(SPELL_BERSERK); //Cast our beserk spell agian in 12 seconds if we didn't kill everyone diff --git a/src/server/scripts/Examples/example_escort.cpp b/src/server/scripts/Examples/example_escort.cpp index 8cbd2fc4933..e6afc690faf 100644 --- a/src/server/scripts/Examples/example_escort.cpp +++ b/src/server/scripts/Examples/example_escort.cpp @@ -100,9 +100,9 @@ class example_escort : public CreatureScript if (Player* player = GetPlayerForEscort()) { //pTmpPlayer is the target of the text - Talk(SAY_WP_3, player->GetGUID()); + Talk(SAY_WP_3, player); //pTmpPlayer is the source of the text - sCreatureTextMgr->SendChat(me, SAY_WP_4, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); + sCreatureTextMgr->SendChat(me, SAY_WP_4, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); } break; } @@ -113,7 +113,7 @@ class example_escort : public CreatureScript if (HasEscortState(STATE_ESCORT_ESCORTING)) { if (Player* player = GetPlayerForEscort()) - Talk(SAY_AGGRO1, player->GetGUID()); + Talk(SAY_AGGRO1, player); } else Talk(SAY_AGGRO2); @@ -133,9 +133,9 @@ class example_escort : public CreatureScript { // not a likely case, code here for the sake of example if (killer == me) - Talk(SAY_DEATH_1, player->GetGUID()); + Talk(SAY_DEATH_1, player); else - Talk(SAY_DEATH_2, player->GetGUID()); + Talk(SAY_DEATH_2, player); } } else diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp index 2c76d9a40b0..af028d539f0 100644 --- a/src/server/scripts/Examples/example_spell.cpp +++ b/src/server/scripts/Examples/example_spell.cpp @@ -220,7 +220,7 @@ class spell_ex_66244 : public SpellScriptLoader // we initialize local variables if needed bool Load() OVERRIDE { - // do not load script if aura is casted by player or caster not avalible + // do not load script if aura is cast by player or caster not avalible if (Unit* caster = GetCaster()) if (caster->GetTypeId() == TYPEID_PLAYER) return true; diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index e74ed93bc66..f76bf2925ee 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -73,7 +73,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_blackfathom_deeps_eventAI(creature); + return GetInstanceAI<npc_blackfathom_deeps_eventAI>(creature); } struct npc_blackfathom_deeps_eventAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp index 139eed963c1..092156b632a 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp @@ -31,7 +31,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gelihastAI(creature); + return GetInstanceAI<boss_gelihastAI>(creature); } struct boss_gelihastAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp index 8eeedb6e15f..d224fa2f06c 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp @@ -36,7 +36,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kelrisAI(creature); + return GetInstanceAI<boss_kelrisAI>(creature); } struct boss_kelrisAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index 52f706d5626..fc3252484db 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -47,7 +47,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_anetheronAI(creature); + return GetInstanceAI<boss_anetheronAI>(creature); } struct boss_anetheronAI : public hyjal_trashAI @@ -83,9 +83,10 @@ public: Talk(SAY_ONAGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_ONSLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_ONSLAY); } void WaypointReached(uint32 waypointId) OVERRIDE @@ -179,7 +180,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_towering_infernalAI(creature); + return GetInstanceAI<npc_towering_infernalAI>(creature); } struct npc_towering_infernalAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index 41cc1d0241d..cd434f4aefd 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -83,7 +83,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ancient_wispAI(creature); + return GetInstanceAI<npc_ancient_wispAI>(creature); } struct npc_ancient_wispAI : public ScriptedAI @@ -239,7 +239,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_archimondeAI(creature); + return GetInstanceAI<boss_archimondeAI>(creature); } struct boss_archimondeAI : public hyjal_trashAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index dd486df16ed..91581ac7e92 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -48,7 +48,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_azgalorAI(creature); + return GetInstanceAI<boss_azgalorAI>(creature); } struct boss_azgalorAI : public hyjal_trashAI @@ -186,7 +186,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_lesser_doomguardAI(creature); + return GetInstanceAI<npc_lesser_doomguardAI>(creature); } struct npc_lesser_doomguardAI : public hyjal_trashAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index 66e276d25b6..ea5e641347c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -49,7 +49,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kazrogalAI(creature); + return GetInstanceAI<boss_kazrogalAI>(creature); } struct boss_kazrogalAI : public hyjal_trashAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp index c163e7c0f1f..6b413ec847b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp @@ -44,7 +44,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_rage_winterchillAI(creature); + return GetInstanceAI<boss_rage_winterchillAI>(creature); } struct boss_rage_winterchillAI : public hyjal_trashAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp index f4d3f559585..a352c3493ee 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp @@ -102,6 +102,9 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { + if (!creature->GetInstanceScript()) + return NULL; + hyjalAI* ai = new hyjalAI(creature); ai->Reset(); @@ -184,6 +187,9 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { + if (!creature->GetInstanceScript()) + return NULL; + hyjalAI* ai = new hyjalAI(creature); ai->Reset(); @@ -209,6 +215,9 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { + if (!creature->GetInstanceScript()) + return NULL; + hyjalAI* ai = new hyjalAI(creature); ai->Reset(); ai->EnterEvadeMode(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 4a491803cb4..0b84911bb96 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -858,7 +858,7 @@ void hyjalAI::UpdateAI(uint32 diff) { if (SpellTimer[i] <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); Unit* target = NULL; @@ -953,7 +953,7 @@ void hyjalAI::WaypointReached(uint32 waypointId) { if (waypointId == 1 || (waypointId == 0 && me->GetEntry() == THRALL)) { - me->MonsterYell(YELL_HURRY, 0, 0); + me->MonsterYell(YELL_HURRY, LANG_UNIVERSAL, NULL); WaitForTeleport = true; TeleportTimer = 20000; if (me->GetEntry() == JAINA) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp index 9245a0c648f..6ca5bfd10d5 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp @@ -537,7 +537,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_giant_infernalAI(creature); + return GetInstanceAI<npc_giant_infernalAI>(creature); } }; @@ -548,7 +548,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_abominationAI(creature); + return GetInstanceAI<npc_abominationAI>(creature); } struct npc_abominationAI : public hyjal_trashAI @@ -646,7 +646,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ghoulAI(creature); + return GetInstanceAI<npc_ghoulAI>(creature); } struct npc_ghoulAI : public hyjal_trashAI @@ -748,7 +748,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_necromancerAI(creature); + return GetInstanceAI<npc_necromancerAI>(creature); } struct npc_necromancerAI : public hyjal_trashAI @@ -875,7 +875,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_bansheeAI(creature); + return GetInstanceAI<npc_bansheeAI>(creature); } struct npc_bansheeAI : public hyjal_trashAI @@ -978,7 +978,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_crypt_fiendAI(creature); + return GetInstanceAI<npc_crypt_fiendAI>(creature); } struct npc_crypt_fiendAI : public hyjal_trashAI @@ -1068,7 +1068,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_fel_stalkerAI(creature); + return GetInstanceAI<npc_fel_stalkerAI>(creature); } struct npc_fel_stalkerAI : public hyjal_trashAI @@ -1158,7 +1158,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_frost_wyrmAI(creature); + return GetInstanceAI<npc_frost_wyrmAI>(creature); } struct npc_frost_wyrmAI : public hyjal_trashAI @@ -1270,7 +1270,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_gargoyleAI(creature); + return GetInstanceAI<npc_gargoyleAI>(creature); } struct npc_gargoyleAI : public hyjal_trashAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index d54ef0c5168..97aadae3f98 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -30,6 +30,7 @@ EndScriptData */ #include "Player.h" #include "WorldPacket.h" #include "Opcodes.h" +#include "Chat.h" /* Battle of Mount Hyjal encounters: 0 - Rage Winterchill event @@ -185,8 +186,8 @@ public: { if (i->GetSource()) { - WorldPacket packet(SMSG_MESSAGECHAT, 200); - unit->BuildMonsterChat(&packet, CHAT_MSG_MONSTER_YELL, YELL_EFFORTS, 0, YELL_EFFORTS_NAME, i->GetSource()->GetGUID()); + WorldPacket packet; + ChatHandler::BuildChatPacket(packet, CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, unit, i->GetSource(), YELL_EFFORTS); i->GetSource()->GetSession()->SendPacket(&packet); WorldPacket data2(SMSG_PLAY_SOUND, 4); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index c049be0309b..15f0df5fae6 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -52,7 +52,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_epochAI(creature); + return GetInstanceAI<boss_epochAI>(creature); } struct boss_epochAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp index 54438e3b8a9..b12986c72ff 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -39,7 +39,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_infinite_corruptorAI(creature); + return GetInstanceAI<boss_infinite_corruptorAI>(creature); } struct boss_infinite_corruptorAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index e16ed882171..0ab5f49fb34 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -66,7 +66,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_mal_ganisAI(creature); + return GetInstanceAI<boss_mal_ganisAI>(creature); } struct boss_mal_ganisAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp index aff076f4763..490e93ec090 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp @@ -51,7 +51,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_meathookAI(creature); + return GetInstanceAI<boss_meathookAI>(creature); } struct boss_meathookAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp index fc5b3c4a8b0..ffc0c73ecfa 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp @@ -56,7 +56,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_salrammAI(creature); + return GetInstanceAI<boss_salrammAI>(creature); } struct boss_salrammAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index dbead663cff..91a7ca9ab0d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -344,7 +344,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_arthasAI(creature); + return GetInstanceAI<npc_arthasAI>(creature); } struct npc_arthasAI : public npc_escortAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 9af1486275c..6264f02f6c9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -187,8 +187,7 @@ class instance_culling_of_stratholme : public InstanceMapScript // Summon Chromie and global whisper if (Creature* chromie = instance->SummonCreature(NPC_CHROMIE_2, ChromieSummonPos)) if (!instance->GetPlayers().isEmpty()) - if (Player* player = instance->GetPlayers().getFirst()->GetSource()) - sCreatureTextMgr->SendChat(chromie, SAY_CRATES_COMPLETED, player->GetGUID(), CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); + sCreatureTextMgr->SendChat(chromie, SAY_CRATES_COMPLETED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); } DoUpdateWorldState(WORLDSTATE_CRATES_REVEALED, _crateCount); break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp index 3b51f6d0f8f..d69137060e0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp @@ -54,7 +54,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_captain_skarlocAI(creature); + return GetInstanceAI<boss_captain_skarlocAI>(creature); } struct boss_captain_skarlocAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp index 3e650bf4fe9..0c20669775c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp @@ -52,7 +52,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_epoch_hunterAI(creature); + return GetInstanceAI<boss_epoch_hunterAI>(creature); } struct boss_epoch_hunterAI : public ScriptedAI @@ -104,7 +104,7 @@ public: //Sand Breath if (SandBreath_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); DoCastVictim(SPELL_SAND_BREATH); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 46978366224..031a0f2792e 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -188,7 +188,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_thrall_old_hillsbradAI(creature); + return GetInstanceAI<npc_thrall_old_hillsbradAI>(creature); } bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE @@ -407,7 +407,7 @@ public: if (uint64 TarethaGUID = instance->GetData64(DATA_TARETHA)) { if (Creature* Taretha = Creature::GetCreature(*me, TarethaGUID)) - Taretha->AI()->Talk(SAY_TA_ESCAPED, me->GetGUID()); + Taretha->AI()->Talk(SAY_TA_ESCAPED, me); } break; case 95: @@ -573,7 +573,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tarethaAI(creature); + return GetInstanceAI<npc_tarethaAI>(creature); } bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index c929a1b6a55..a26b8f5556b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -97,9 +97,10 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void UpdateAI(uint32 diff) OVERRIDE @@ -140,7 +141,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_aeonusAI(creature); + return GetInstanceAI<boss_aeonusAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp index fe91f3ab712..aa5fb22a24a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp @@ -145,7 +145,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_chrono_lord_dejaAI(creature); + return GetInstanceAI<boss_chrono_lord_dejaAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp index 4d94edf7339..d496a9a79ab 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp @@ -143,7 +143,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_temporusAI(creature); + return GetInstanceAI<boss_temporusAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index cc3cf8192dc..10cd2068f72 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -70,7 +70,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_medivh_bmAI(creature); + return GetInstanceAI<npc_medivh_bmAI>(creature); } struct npc_medivh_bmAI : public ScriptedAI @@ -268,7 +268,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_time_riftAI(creature); + return GetInstanceAI<npc_time_riftAI>(creature); } struct npc_time_riftAI : public ScriptedAI @@ -358,7 +358,7 @@ public: TimeRiftWave_Timer = 15000; } else TimeRiftWave_Timer -= diff; - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; TC_LOG_DEBUG("scripts", "npc_time_rift: not casting anylonger, i need to die."); diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 79421ffe37e..c610760a289 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -404,7 +404,7 @@ public: case EVENT_DEEP_BREATH: // Phase PHASE_BREATH if (!IsMoving) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); Talk(EMOTE_BREATH); @@ -469,7 +469,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_onyxiaAI(creature); + return GetInstanceAI<boss_onyxiaAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp index 323fd92a8f6..952ed5679f9 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp @@ -69,9 +69,10 @@ public: Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void JustDied(Unit* /*killer*/) OVERRIDE diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index 3300f0d811b..28e7759a16f 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -178,14 +178,14 @@ public: { if (channeling) { - Talk(SAY_WATCH_OUT, who->GetGUID()); + Talk(SAY_WATCH_OUT, who); } else { events.ScheduleEvent(EVENT_FIREBALL, 1000); events.ScheduleEvent(EVENT_FROST_NOVA, urand(8000, 12000)); if (urand(0, 100) > 40) - Talk(SAY_AGGRO, who->GetGUID()); + Talk(SAY_AGGRO, who); } } @@ -321,7 +321,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_belnistraszAI(creature); + return GetInstanceAI<npc_belnistraszAI>(creature); } }; @@ -362,7 +362,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_idol_room_spawnerAI(creature); + return GetInstanceAI<npc_idol_room_spawnerAI>(creature); } }; @@ -433,7 +433,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tomb_creatureAI(creature); + return GetInstanceAI<npc_tomb_creatureAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index 35fea896a10..1715bd693b4 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -52,7 +52,7 @@ public: if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER) { CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); - creature->AI()->Talk(SAY_READY, player->GetGUID()); + creature->AI()->Talk(SAY_READY, player); creature->setFaction(113); } @@ -78,42 +78,42 @@ public: { case 3: me->HandleEmoteCommand(EMOTE_STATE_POINT); - Talk(SAY_POINT, player->GetGUID()); + Talk(SAY_POINT, player); break; case 4: me->SummonCreature(ENTRY_BOAR, 2137.66f, 1843.98f, 48.08f, 1.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); break; case 8: - Talk(SAY_BLUELEAF, player->GetGUID()); + Talk(SAY_BLUELEAF, player); break; case 9: - Talk(SAY_DANGER, player->GetGUID()); + Talk(SAY_DANGER, player); break; case 13: - Talk(SAY_BAD, player->GetGUID()); + Talk(SAY_BAD, player); break; case 14: me->SummonCreature(ENTRY_BOAR, 2078.91f, 1704.54f, 56.77f, 1.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); break; case 25: - Talk(SAY_THINK, player->GetGUID()); + Talk(SAY_THINK, player); break; case 31: - Talk(SAY_SOON, player->GetGUID()); + Talk(SAY_SOON, player); break; case 42: - Talk(SAY_FINALY, player->GetGUID()); + Talk(SAY_FINALY, player); break; case 43: me->SummonCreature(ENTRY_BOAR, 1956.43f, 1596.97f, 81.75f, 1.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); break; case 45: - Talk(SAY_WIN, player->GetGUID()); + Talk(SAY_WIN, player); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); player->GroupEventHappens(QUEST_WILLIX_THE_IMPORTER, me); break; case 46: - Talk(SAY_END, player->GetGUID()); + Talk(SAY_END, player); break; } } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp index 327fe0d1358..1cdcfae1139 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp @@ -232,7 +232,7 @@ class boss_ayamiss : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ayamissAI(creature); + return GetInstanceAI<boss_ayamissAI>(creature); } }; @@ -286,7 +286,7 @@ class npc_hive_zara_larva : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_hive_zara_larvaAI(creature); + return GetInstanceAI<npc_hive_zara_larvaAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp index a0a093246b6..ae4b42a4221 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp @@ -85,7 +85,7 @@ class boss_buru : public CreatureScript void EnterCombat(Unit* who) OVERRIDE { _EnterCombat(); - Talk(EMOTE_TARGET, who->GetGUID()); + Talk(EMOTE_TARGET, who); DoCast(me, SPELL_THORNS); events.ScheduleEvent(EVENT_DISMEMBER, 5000); @@ -122,7 +122,7 @@ class boss_buru : public CreatureScript { DoResetThreat(); AttackStart(victim); - Talk(EMOTE_TARGET, victim->GetGUID()); + Talk(EMOTE_TARGET, victim); } } @@ -236,7 +236,7 @@ class npc_buru_egg : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_buru_eggAI(creature); + return GetInstanceAI<npc_buru_eggAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp index c13ae5aa9c8..09c4734dc49 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp @@ -78,7 +78,7 @@ class boss_kurinnaxx : public CreatureScript { _JustDied(); if (Creature* Ossirian = me->GetMap()->GetCreature(instance->GetData64(DATA_OSSIRIAN))) - sCreatureTextMgr->SendChat(Ossirian, SAY_KURINAXX_DEATH, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_ZONE); + sCreatureTextMgr->SendChat(Ossirian, SAY_KURINAXX_DEATH, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_ZONE); } void UpdateAI(uint32 diff) OVERRIDE @@ -127,7 +127,7 @@ class boss_kurinnaxx : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kurinnaxxAI(creature); + return GetInstanceAI<boss_kurinnaxxAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 366f74f469e..6db8b3dde85 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -273,7 +273,7 @@ class boss_ossirian : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ossirianAI(creature); + return GetInstanceAI<boss_ossirianAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index 8dd009cdb32..e00b46d3ed1 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -32,7 +32,7 @@ enum Spells SPELL_CLEAVE = 26350, SPELL_TOXIC_VOLLEY = 25812, SPELL_POISON_CLOUD = 38718, //Only Spell with right dmg. - SPELL_ENRAGE = 34624, //Changed cause 25790 is casted on gamers too. Same prob with old explosion of twin emperors. + SPELL_ENRAGE = 34624, //Changed cause 25790 is cast on gamers too. Same prob with old explosion of twin emperors. SPELL_CHARGE = 26561, SPELL_KNOCKBACK = 26027, @@ -48,7 +48,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kriAI(creature); + return GetInstanceAI<boss_kriAI>(creature); } struct boss_kriAI : public ScriptedAI @@ -145,7 +145,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_vemAI(creature); + return GetInstanceAI<boss_vemAI>(creature); } struct boss_vemAI : public ScriptedAI @@ -238,7 +238,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_yaujAI(creature); + return GetInstanceAI<boss_yaujAI>(creature); } struct boss_yaujAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index d2b5b5eaf8c..73eb9a8163b 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -153,7 +153,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new eye_of_cthunAI(creature); + return GetInstanceAI<eye_of_cthunAI>(creature); } struct eye_of_cthunAI : public ScriptedAI @@ -459,7 +459,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new cthunAI(creature); + return GetInstanceAI<cthunAI>(creature); } struct cthunAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp index a3edd9ad83d..f640173efb2 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp @@ -160,7 +160,7 @@ public: //If she is 20% enrage if (!Enraged) { - if (!HealthAbovePct(20) && !me->IsNonMeleeSpellCasted(false)) + if (!HealthAbovePct(20) && !me->IsNonMeleeSpellCast(false)) { DoCast(me, SPELL_ENRAGE); Enraged = true; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 1d888f3ce8b..e63c2b8545b 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -80,7 +80,7 @@ struct boss_twinemperorsAI : public ScriptedAI uint32 AfterTeleportTimer; bool DontYellWhenDead; uint32 Abuse_Bug_Timer, BugsTimer; - bool tspellcasted; + bool tspellcast; uint32 EnrageTimer; virtual bool IAmVeklor() = 0; @@ -92,7 +92,7 @@ struct boss_twinemperorsAI : public ScriptedAI Heal_Timer = 0; // first heal immediately when they get close together Teleport_Timer = TELEPORTTIME; AfterTeleport = false; - tspellcasted = false; + tspellcast = false; AfterTeleportTimer = 0; Abuse_Bug_Timer = urand(10000, 17000); BugsTimer = 2000; @@ -243,21 +243,21 @@ struct boss_twinemperorsAI : public ScriptedAI me->AddUnitState(UNIT_STATE_STUNNED); AfterTeleport = true; AfterTeleportTimer = 2000; - tspellcasted = false; + tspellcast = false; } bool TryActivateAfterTTelep(uint32 diff) { if (AfterTeleport) { - if (!tspellcasted) + if (!tspellcast) { me->ClearUnitState(UNIT_STATE_STUNNED); DoCast(me, SPELL_TWIN_TELEPORT); me->AddUnitState(UNIT_STATE_STUNNED); } - tspellcasted = true; + tspellcast = true; if (AfterTeleportTimer <= diff) { @@ -378,7 +378,7 @@ struct boss_twinemperorsAI : public ScriptedAI { if (EnrageTimer <= diff) { - if (!me->IsNonMeleeSpellCasted(true)) + if (!me->IsNonMeleeSpellCast(true)) { DoCast(me, SPELL_BERSERK); EnrageTimer = 60*60000; @@ -394,7 +394,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_veknilashAI(creature); + return GetInstanceAI<boss_veknilashAI>(creature); } struct boss_veknilashAI : public boss_twinemperorsAI @@ -480,7 +480,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_veklorAI(creature); + return GetInstanceAI<boss_veklorAI>(creature); } struct boss_veklorAI : public boss_twinemperorsAI diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp index 706c6e1804d..fa1b780b258 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp @@ -81,7 +81,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_disciple_of_naralexAI(creature); + return GetInstanceAI<npc_disciple_of_naralexAI>(creature); } bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE @@ -189,7 +189,7 @@ public: void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_ATTACKED, who->GetGUID()); + Talk(SAY_ATTACKED, who); } void JustDied(Unit* /*slayer*/) OVERRIDE diff --git a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp index bc31fd118be..95e2c298af7 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp @@ -150,7 +150,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_zum_rahAI(creature); + return GetInstanceAI<boss_zum_rahAI>(creature); } }; diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp index a2f98b21589..72715c49b8f 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp @@ -97,7 +97,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_sergeant_blyAI(creature); + return GetInstanceAI<npc_sergeant_blyAI>(creature); } struct npc_sergeant_blyAI : public ScriptedAI @@ -296,7 +296,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_weegli_blastfuseAI(creature); + return GetInstanceAI<npc_weegli_blastfuseAI>(creature); } struct npc_weegli_blastfuseAI : public ScriptedAI diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index dbcf054f8f4..8304f5ba9e4 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -37,133 +37,118 @@ EndContentData */ # npc_torek ####*/ -enum TorekSays +enum Torek { SAY_READY = 0, SAY_MOVE = 1, SAY_PREPARE = 2, SAY_WIN = 3, SAY_END = 4, + SPELL_REND = 11977, + SPELL_THUNDERCLAP = 8078, + QUEST_TOREK_ASSULT = 6544, + NPC_SPLINTERTREE_RAIDER = 12859, + NPC_DURIEL = 12860, + NPC_SILVERWING_SENTINEL = 12896, + NPC_SILVERWING_WARRIOR = 12897, + FACTION_QUEST = 113 }; -enum TorekSpells +class npc_torek : public CreatureScript { - SPELL_REND = 11977, - SPELL_THUNDERCLAP = 8078, -}; +public: + npc_torek() : CreatureScript("npc_torek") { } -enum TorekMisc -{ - QUEST_TOREK_ASSULT = 6544, + struct npc_torekAI : public npc_escortAI + { + npc_torekAI(Creature* creature) : npc_escortAI(creature) { } - ENTRY_SPLINTERTREE_RAIDER = 12859, - ENTRY_DURIEL = 12860, - ENTRY_SILVERWING_SENTINEL = 12896, - ENTRY_SILVERWING_WARRIOR = 12897, -}; + void Reset() OVERRIDE + { + rend_Timer = 5000; + thunderclap_Timer = 8000; + _completed = false; + } -class npc_torek : public CreatureScript -{ - public: + void EnterCombat(Unit* /*who*/) OVERRIDE { } - npc_torek() : CreatureScript("npc_torek") + void JustSummoned(Creature* summoned) OVERRIDE { + summoned->AI()->AttackStart(me); } - struct npc_torekAI : public npc_escortAI + void sQuestAccept(Player* player, Quest const* quest) { - npc_torekAI(Creature* creature) : npc_escortAI(creature) { } - - uint32 Rend_Timer; - uint32 Thunderclap_Timer; - bool Completed; + if (quest->GetQuestId() == QUEST_TOREK_ASSULT) + { + /// @todo find companions, make them follow Torek, at any time (possibly done by core/database in future?) + Talk(SAY_READY, player); + me->setFaction(FACTION_QUEST); + npc_escortAI::Start(true, true, player->GetGUID()); + } + } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) OVERRIDE + { + if (Player* player = GetPlayerForEscort()) { - if (Player* player = GetPlayerForEscort()) + switch (waypointId) { - switch (waypointId) - { - case 1: - Talk(SAY_MOVE, player->GetGUID()); - break; - case 8: - Talk(SAY_PREPARE, player->GetGUID()); - break; - case 19: - /// @todo verify location and creatures amount. - me->SummonCreature(ENTRY_DURIEL, 1776.73f, -2049.06f, 109.83f, 1.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - me->SummonCreature(ENTRY_SILVERWING_SENTINEL, 1774.64f, -2049.41f, 109.83f, 1.40f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - me->SummonCreature(ENTRY_SILVERWING_WARRIOR, 1778.73f, -2049.50f, 109.83f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - break; - case 20: - Talk(SAY_WIN, player->GetGUID()); - Completed = true; - player->GroupEventHappens(QUEST_TOREK_ASSULT, me); - break; - case 21: - Talk(SAY_END, player->GetGUID()); - break; - } + case 1: + Talk(SAY_MOVE, player); + break; + case 8: + Talk(SAY_PREPARE, player); + break; + case 19: + /// @todo verify location and creatures amount. + me->SummonCreature(NPC_DURIEL, 1776.73f, -2049.06f, 109.83f, 1.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + me->SummonCreature(NPC_SILVERWING_SENTINEL, 1774.64f, -2049.41f, 109.83f, 1.40f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + me->SummonCreature(NPC_SILVERWING_WARRIOR, 1778.73f, -2049.50f, 109.83f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + break; + case 20: + Talk(SAY_WIN, player); + _completed = true; + player->GroupEventHappens(QUEST_TOREK_ASSULT, me); + break; + case 21: + Talk(SAY_END, player); + break; } } + } - void Reset() OVERRIDE - { - Rend_Timer = 5000; - Thunderclap_Timer = 8000; - Completed = false; - } + void UpdateAI(uint32 diff) OVERRIDE + { + npc_escortAI::UpdateAI(diff); - void EnterCombat(Unit* /*who*/) OVERRIDE - { - } + if (!UpdateVictim()) + return; - void JustSummoned(Creature* summoned) OVERRIDE + if (rend_Timer <= diff) { - summoned->AI()->AttackStart(me); - } + DoCastVictim(SPELL_REND); + rend_Timer = 20000; + } else rend_Timer -= diff; - void UpdateAI(uint32 diff) OVERRIDE + if (thunderclap_Timer <= diff) { - npc_escortAI::UpdateAI(diff); - - if (!UpdateVictim()) - return; - - if (Rend_Timer <= diff) - { - DoCastVictim(SPELL_REND); - Rend_Timer = 20000; - } else Rend_Timer -= diff; - - if (Thunderclap_Timer <= diff) - { - DoCast(me, SPELL_THUNDERCLAP); - Thunderclap_Timer = 30000; - } else Thunderclap_Timer -= diff; - } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_torekAI(creature); + DoCast(me, SPELL_THUNDERCLAP); + thunderclap_Timer = 30000; + } else thunderclap_Timer -= diff; } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_TOREK_ASSULT) - { - /// @todo find companions, make them follow Torek, at any time (possibly done by core/database in future?) - creature->AI()->Talk(SAY_READY, player->GetGUID()); - creature->setFaction(113); + private: + uint32 rend_Timer; + uint32 thunderclap_Timer; + bool _completed; - if (npc_escortAI* pEscortAI = CAST_AI(npc_torekAI, creature->AI())) - pEscortAI->Start(true, true, player->GetGUID()); - } + }; - return true; - } + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_torekAI(creature); + } }; /*#### @@ -175,96 +160,90 @@ enum RuulSnowhoof NPC_THISTLEFUR_URSA = 3921, NPC_THISTLEFUR_TOTEMIC = 3922, NPC_THISTLEFUR_PATHFINDER = 3926, - QUEST_FREEDOM_TO_RUUL = 6482, - GO_CAGE = 178147 }; Position const RuulSnowhoofSummonsCoord[6] = { - {3449.218018f, -587.825073f, 174.978867f, 4.714445f}, - {3446.384521f, -587.830872f, 175.186279f, 4.714445f}, - {3444.218994f, -587.835327f, 175.380600f, 4.714445f}, - {3508.344482f, -492.024261f, 186.929031f, 4.145029f}, - {3506.265625f, -490.531006f, 186.740128f, 4.239277f}, - {3503.682373f, -489.393799f, 186.629684f, 4.349232f} + { 3449.218018f, -587.825073f, 174.978867f, 4.714445f }, + { 3446.384521f, -587.830872f, 175.186279f, 4.714445f }, + { 3444.218994f, -587.835327f, 175.380600f, 4.714445f }, + { 3508.344482f, -492.024261f, 186.929031f, 4.145029f }, + { 3506.265625f, -490.531006f, 186.740128f, 4.239277f }, + { 3503.682373f, -489.393799f, 186.629684f, 4.349232f } }; class npc_ruul_snowhoof : public CreatureScript { - public: - npc_ruul_snowhoof() : CreatureScript("npc_ruul_snowhoof") { } +public: + npc_ruul_snowhoof() : CreatureScript("npc_ruul_snowhoof") { } - struct npc_ruul_snowhoofAI : public npc_escortAI - { - npc_ruul_snowhoofAI(Creature* creature) : npc_escortAI(creature) { } + struct npc_ruul_snowhoofAI : public npc_escortAI + { + npc_ruul_snowhoofAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE - { - Player* player = GetPlayerForEscort(); - if (!player) - return; + void Reset() OVERRIDE + { + if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) + Cage->SetGoState(GO_STATE_READY); + } - switch (waypointId) - { - case 0: - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) - Cage->SetGoState(GO_STATE_ACTIVE); - break; - case 13: - me->SummonCreature(NPC_THISTLEFUR_TOTEMIC, RuulSnowhoofSummonsCoord[0], TEMPSUMMON_DEAD_DESPAWN, 60000); - me->SummonCreature(NPC_THISTLEFUR_URSA, RuulSnowhoofSummonsCoord[1], TEMPSUMMON_DEAD_DESPAWN, 60000); - me->SummonCreature(NPC_THISTLEFUR_PATHFINDER, RuulSnowhoofSummonsCoord[2], TEMPSUMMON_DEAD_DESPAWN, 60000); - break; - case 19: - me->SummonCreature(NPC_THISTLEFUR_TOTEMIC, RuulSnowhoofSummonsCoord[3], TEMPSUMMON_DEAD_DESPAWN, 60000); - me->SummonCreature(NPC_THISTLEFUR_URSA, RuulSnowhoofSummonsCoord[4], TEMPSUMMON_DEAD_DESPAWN, 60000); - me->SummonCreature(NPC_THISTLEFUR_PATHFINDER, RuulSnowhoofSummonsCoord[5], TEMPSUMMON_DEAD_DESPAWN, 60000); - break; - case 21: - player->GroupEventHappens(QUEST_FREEDOM_TO_RUUL, me); - break; - } - } + void EnterCombat(Unit* /*who*/) OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void JustSummoned(Creature* summoned) OVERRIDE + { + summoned->AI()->AttackStart(me); + } - void Reset() OVERRIDE + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_TOREK_ASSULT) { - if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) - Cage->SetGoState(GO_STATE_READY); + me->setFaction(FACTION_QUEST); + npc_escortAI::Start(true, false, player->GetGUID()); } + } - void JustSummoned(Creature* summoned) OVERRIDE - { - summoned->AI()->AttackStart(me); - } + void WaypointReached(uint32 waypointId) OVERRIDE + { + Player* player = GetPlayerForEscort(); + if (!player) + return; - void UpdateAI(uint32 diff) OVERRIDE + switch (waypointId) { - npc_escortAI::UpdateAI(diff); + case 0: + me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); + if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) + Cage->SetGoState(GO_STATE_ACTIVE); + break; + case 13: + me->SummonCreature(NPC_THISTLEFUR_TOTEMIC, RuulSnowhoofSummonsCoord[0], TEMPSUMMON_DEAD_DESPAWN, 60000); + me->SummonCreature(NPC_THISTLEFUR_URSA, RuulSnowhoofSummonsCoord[1], TEMPSUMMON_DEAD_DESPAWN, 60000); + me->SummonCreature(NPC_THISTLEFUR_PATHFINDER, RuulSnowhoofSummonsCoord[2], TEMPSUMMON_DEAD_DESPAWN, 60000); + break; + case 19: + me->SummonCreature(NPC_THISTLEFUR_TOTEMIC, RuulSnowhoofSummonsCoord[3], TEMPSUMMON_DEAD_DESPAWN, 60000); + me->SummonCreature(NPC_THISTLEFUR_URSA, RuulSnowhoofSummonsCoord[4], TEMPSUMMON_DEAD_DESPAWN, 60000); + me->SummonCreature(NPC_THISTLEFUR_PATHFINDER, RuulSnowhoofSummonsCoord[5], TEMPSUMMON_DEAD_DESPAWN, 60000); + break; + case 21: + player->GroupEventHappens(QUEST_FREEDOM_TO_RUUL, me); + break; } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_ruul_snowhoofAI(creature); } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - if (quest->GetQuestId() == QUEST_FREEDOM_TO_RUUL) - { - creature->setFaction(113); - - if (npc_escortAI* pEscortAI = CAST_AI(npc_ruul_snowhoofAI, (creature->AI()))) - pEscortAI->Start(true, false, player->GetGUID()); - } - - return true; + npc_escortAI::UpdateAI(diff); } + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_ruul_snowhoofAI(creature); + } }; enum Muglash @@ -298,37 +277,68 @@ enum Muglash Position const FirstNagaCoord[3] = { - {3603.504150f, 1122.631104f, 1.635f, 0.0f}, // rider - {3589.293945f, 1148.664063f, 5.565f, 0.0f}, // sorceress - {3609.925537f, 1168.759521f, -1.168f, 0.0f} // razortail + { 3603.504150f, 1122.631104f, 1.635f, 0.0f }, // rider + { 3589.293945f, 1148.664063f, 5.565f, 0.0f }, // sorceress + { 3609.925537f, 1168.759521f, -1.168f, 0.0f } // razortail }; Position const SecondNagaCoord[3] = { - {3609.925537f, 1168.759521f, -1.168f, 0.0f}, // witch - {3645.652100f, 1139.425415f, 1.322f, 0.0f}, // priest - {3583.602051f, 1128.405762f, 2.347f, 0.0f} // myrmidon + { 3609.925537f, 1168.759521f, -1.168f, 0.0f }, // witch + { 3645.652100f, 1139.425415f, 1.322f, 0.0f }, // priest + { 3583.602051f, 1128.405762f, 2.347f, 0.0f } // myrmidon }; Position const VorshaCoord = {3633.056885f, 1172.924072f, -5.388f, 0.0f}; class npc_muglash : public CreatureScript { - public: - npc_muglash() : CreatureScript("npc_muglash") { } +public: + npc_muglash() : CreatureScript("npc_muglash") { } + + struct npc_muglashAI : public npc_escortAI + { + npc_muglashAI(Creature* creature) : npc_escortAI(creature) { } + + void Reset() OVERRIDE + { + eventTimer = 10000; + waveId = 0; + _isBrazierExtinguished = false; + } + + void EnterCombat(Unit* /*who*/) OVERRIDE + { + if (Player* player = GetPlayerForEscort()) + if (HasEscortState(STATE_ESCORT_PAUSED)) + { + if (urand(0, 1)) + Talk(SAY_MUG_ON_GUARD, player); + return; + } + } - struct npc_muglashAI : public npc_escortAI + void JustDied(Unit* /*killer*/) OVERRIDE { - npc_muglashAI(Creature* creature) : npc_escortAI(creature) { } + if (HasEscortState(STATE_ESCORT_ESCORTING)) + if (Player* player = GetPlayerForEscort()) + player->FailQuest(QUEST_VORSHA); + } - uint8 WaveId; - uint32 EventTimer; - bool IsBrazierExtinguished; + void JustSummoned(Creature* summoned) OVERRIDE + { + summoned->AI()->AttackStart(me); + } - void JustSummoned(Creature* summoned) OVERRIDE + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_VORSHA) { - summoned->AI()->AttackStart(me); + Talk(SAY_MUG_START1); + me->setFaction(FACTION_QUEST); + npc_escortAI::Start(true, false, player->GetGUID()); } + } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -337,10 +347,10 @@ class npc_muglash : public CreatureScript switch (waypointId) { case 0: - Talk(SAY_MUG_START2, player->GetGUID()); + Talk(SAY_MUG_START2, player); break; case 24: - Talk(SAY_MUG_BRAZIER, player->GetGUID()); + Talk(SAY_MUG_BRAZIER, player); if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_NAGA_BRAZIER, INTERACTION_DISTANCE*2)) { @@ -362,34 +372,9 @@ class npc_muglash : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - if (Player* player = GetPlayerForEscort()) - if (HasEscortState(STATE_ESCORT_PAUSED)) - { - if (urand(0, 1)) - Talk(SAY_MUG_ON_GUARD, player->GetGUID()); - return; - } - } - - void Reset() OVERRIDE - { - EventTimer = 10000; - WaveId = 0; - IsBrazierExtinguished = false; - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (HasEscortState(STATE_ESCORT_ESCORTING)) - if (Player* player = GetPlayerForEscort()) - player->FailQuest(QUEST_VORSHA); - } - void DoWaveSummon() { - switch (WaveId) + switch (waveId) { case 1: me->SummonCreature(NPC_WRATH_RIDER, FirstNagaCoord[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); @@ -411,48 +396,40 @@ class npc_muglash : public CreatureScript } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - npc_escortAI::UpdateAI(uiDiff); + npc_escortAI::UpdateAI(diff); if (!me->GetVictim()) { - if (HasEscortState(STATE_ESCORT_PAUSED) && IsBrazierExtinguished) + if (HasEscortState(STATE_ESCORT_PAUSED) && _isBrazierExtinguished) { - if (EventTimer < uiDiff) + if (eventTimer < diff) { - ++WaveId; + ++waveId; DoWaveSummon(); - EventTimer = 10000; + eventTimer = 10000; } else - EventTimer -= uiDiff; + eventTimer -= diff; } return; } DoMeleeAttackIfReady(); } - }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_muglashAI(creature); - } + private: + uint32 eventTimer; + uint8 waveId; + public: + bool _isBrazierExtinguished; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_VORSHA) - { - if (npc_muglashAI* pEscortAI = CAST_AI(npc_muglashAI, creature->AI())) - { - creature->AI()->Talk(SAY_MUG_START1); - creature->setFaction(113); + }; - pEscortAI->Start(true, false, player->GetGUID()); - } - } - return true; - } + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_muglashAI(creature); + } }; class go_naga_brazier : public GameObjectScript @@ -468,7 +445,7 @@ class go_naga_brazier : public GameObjectScript { creature->AI()->Talk(SAY_MUG_BRAZIER_WAIT); - pEscortAI->IsBrazierExtinguished = true; + pEscortAI->_isBrazierExtinguished = true; return false; } } diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index 58829abc940..5d28c7f018e 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -40,16 +40,22 @@ EndContentData */ ## npc_spitelashes ######*/ +enum Spitelashes +{ + SPELL_POLYMORPH_RANK1 = 118, + SPELL_POLYMORPH_RANK2 = 12824, + SPELL_POLYMORPH_RANK3 = 12825, + SPELL_POLYMORPH_RANK4 = 12826, + SPELL_POLYMORPH = 29124, + SPELL_POLYMORPH_BACKFIRE = 28406, + SPELL_REMOVE_POLYMORPH = 6924 +}; + class npc_spitelashes : public CreatureScript { public: npc_spitelashes() : CreatureScript("npc_spitelashes") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_spitelashesAI(creature); - } - struct npc_spitelashesAI : public ScriptedAI { npc_spitelashesAI(Creature* creature) : ScriptedAI(creature) { } @@ -72,15 +78,15 @@ public: switch (spell->Id) { - case 118: - case 12824: - case 12825: - case 12826: + case SPELL_POLYMORPH_RANK1: + case SPELL_POLYMORPH_RANK2: + case SPELL_POLYMORPH_RANK3: + case SPELL_POLYMORPH_RANK4: if (Player* player = unit->ToPlayer()) if (player->GetQuestStatus(9364) == QUEST_STATUS_INCOMPLETE) { spellhit = true; - DoCast(me, 29124); + DoCast(me, SPELL_POLYMORPH); } break; default: @@ -102,8 +108,8 @@ public: morphtimer+=diff; if (morphtimer >= 5000) { - DoCast(me, 28406); //summon copies - DoCast(me, 6924); //visual explosion + DoCast(me, SPELL_POLYMORPH_BACKFIRE); // summon copies + DoCast(me, SPELL_REMOVE_POLYMORPH); // visual explosion } } if (!UpdateVictim()) @@ -114,6 +120,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_spitelashesAI(creature); + } }; /*###### @@ -219,7 +229,7 @@ Position const WPs[58] = {3675.02f, -3960.49f, 35.9118f, 3.67f}, {3653.19f, -3958.33f, 33.9118f, 3.59f}, {3621.12f, -3958.51f, 29.9118f, 3.48f}, - {3604.86f, -3963, 29.9118f, 3.48f}, + {3604.86f, -3963, 29.9118f, 3.48f}, {3569.94f, -3970.25f, 29.9118f, 3.44f}, {3541.03f, -3975.64f, 29.9118f, 3.41f}, {3510.84f, -3978.71f, 29.9118f, 3.41f}, @@ -260,14 +270,14 @@ Position const WPs[58] = {2521.05f, -3716.6f, 31.9118f, 2.55f}, {2485.26f, -3706.67f, 31.9118f, 2.51f}, {2458.93f, -3696.67f, 31.9118f, 2.51f}, - {2432, -3692.03f, 31.9118f, 2.46f}, + {2432, -3692.03f, 31.9118f, 2.46f}, {2399.59f, -3681.97f, 31.9118f, 2.45f}, {2357.75f, -3666.6f, 31.9118f, 2.44f}, {2311.99f, -3656.88f, 31.9118f, 2.94f}, {2263.41f, -3649.55f, 31.9118f, 3.02f}, {2209.05f, -3641.76f, 31.9118f, 2.99f}, {2164.83f, -3637.64f, 31.9118f, 3.15f}, - {2122.42f, -3639, 31.9118f, 3.21f}, + {2122.42f, -3639, 31.9118f, 3.21f}, {2075.73f, -3643.59f, 31.9118f, 3.22f}, {2033.59f, -3649.52f, 31.9118f, 3.42f}, {1985.22f, -3662.99f, 31.9118f, 3.42f}, @@ -280,51 +290,10 @@ class npc_rizzle_sprysprocket : public CreatureScript public: npc_rizzle_sprysprocket() : CreatureScript("npc_rizzle_sprysprocket") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF + 1 && player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) == QUEST_STATUS_INCOMPLETE) - { - player->CLOSE_GOSSIP_MENU(); - creature->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true); - CAST_AI(npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI, creature->AI())->MustDieTimer = 3000; - CAST_AI(npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI, creature->AI())->MustDie = true; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE) - return true; - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_GET_MOONSTONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(10811, creature->GetGUID()); - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_rizzle_sprysprocketAI(creature); - } - struct npc_rizzle_sprysprocketAI : public ScriptedAI { npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) { } - uint32 SpellEscapeTimer; - uint32 TeleportTimer; - uint32 CheckTimer; - uint32 GrenadeTimer; - uint32 MustDieTimer; - uint32 CurrWP; - - uint64 PlayerGUID; - - bool MustDie; - bool Escape; - bool ContinueWP; - bool Reached; - void Reset() OVERRIDE { SpellEscapeTimer = 1300; @@ -342,6 +311,47 @@ public: Reached = false; } + void EnterCombat(Unit* /*who*/) OVERRIDE { } + + void AttackStart(Unit* who) OVERRIDE + { + if (!who || PlayerGUID) + return; + + Player* player = who->ToPlayer(); + + if (player && player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) == QUEST_STATUS_INCOMPLETE) + { + PlayerGUID = who->GetGUID(); + Talk(SAY_RIZZLE_START); + DoCast(who, SPELL_RIZZLE_BLACKJACK, false); + return; + } + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + { + player->CLOSE_GOSSIP_MENU(); + me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true); + MustDieTimer = 3000; + MustDie = true; + } + + void MovementInform(uint32 type, uint32 id) OVERRIDE + { + if (type != POINT_MOTION_TYPE) + return; + + if (id == 57) + { + me->DespawnOrUnsummon(); + return; + } + + ++CurrWP; + ContinueWP = true; + } + void UpdateAI(uint32 diff) OVERRIDE { if (MustDie) @@ -374,7 +384,7 @@ public: if (!player) return; - Talk(MSG_ESCAPE_NOTICE, player->GetGUID()); + Talk(MSG_ESCAPE_NOTICE, player); DoCast(me, SPELL_PERIODIC_DEPTH_CHARGE); me->SetHover(true); me->SetSwim(true); @@ -397,7 +407,7 @@ public: { if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) { - Talk(SAY_RIZZLE_GRENADE, player->GetGUID()); + Talk(SAY_RIZZLE_GRENADE, player); DoCast(player, SPELL_RIZZLE_FROST_GRENADE, true); } GrenadeTimer = 30000; @@ -424,42 +434,35 @@ public: CheckTimer = 1000; } else CheckTimer -= diff; - - } - - void AttackStart(Unit* who) OVERRIDE - { - if (!who || PlayerGUID) - return; - - Player* player = who->ToPlayer(); - - if (player && player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) == QUEST_STATUS_INCOMPLETE) - { - PlayerGUID = who->GetGUID(); - Talk(SAY_RIZZLE_START); - DoCast(who, SPELL_RIZZLE_BLACKJACK, false); - return; - } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - - void MovementInform(uint32 type, uint32 id) OVERRIDE - { - if (type != POINT_MOTION_TYPE) - return; + private: + uint64 PlayerGUID; + uint32 SpellEscapeTimer; + uint32 TeleportTimer; + uint32 CheckTimer; + uint32 GrenadeTimer; + uint32 MustDieTimer; + uint32 CurrWP; + bool MustDie; + bool Escape; + bool ContinueWP; + bool Reached; + }; - if (id == 57) - { - me->DespawnOrUnsummon(); - return; - } + bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + { + if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE) + return true; + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_GET_MOONSTONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + player->SEND_GOSSIP_MENU(10811, creature->GetGUID()); + return true; + } - ++CurrWP; - ContinueWP = true; - } - }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_rizzle_sprysprocketAI(creature); + } }; /*#### @@ -470,11 +473,6 @@ class npc_depth_charge : public CreatureScript public: npc_depth_charge() : CreatureScript("npc_depth_charge") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_depth_chargeAI(creature); - } - struct npc_depth_chargeAI : public ScriptedAI { npc_depth_chargeAI(Creature* creature) : ScriptedAI(creature) { } @@ -491,20 +489,11 @@ public: WeMustDieTimer = 1000; } - void UpdateAI(uint32 diff) OVERRIDE - { - if (WeMustDie) - { - if (WeMustDieTimer <= diff) - me->DespawnOrUnsummon(); - else - WeMustDieTimer -= diff; - } - return; - } + void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void AttackStart(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* who) OVERRIDE { if (!who) return; @@ -517,10 +506,23 @@ public: } } - void AttackStart(Unit* /*who*/) OVERRIDE { } - - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void UpdateAI(uint32 diff) OVERRIDE + { + if (WeMustDie) + { + if (WeMustDieTimer <= diff) + me->DespawnOrUnsummon(); + else + WeMustDieTimer -= diff; + } + return; + } }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_depth_chargeAI(creature); + } }; void AddSC_azshara() diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 812aa5a139f..2d588508b3f 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -49,9 +49,7 @@ EndContentData */ enum draeneiSurvivor { SAY_HEAL = 0, - SAY_HELP = 1, - SPELL_IRRIDATION = 35046, SPELL_STUNNED = 28630 }; @@ -61,11 +59,6 @@ class npc_draenei_survivor : public CreatureScript public: npc_draenei_survivor() : CreatureScript("npc_draenei_survivor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_draenei_survivorAI(creature); - } - struct npc_draenei_survivorAI : public ScriptedAI { npc_draenei_survivorAI(Creature* creature) : ScriptedAI(creature) { } @@ -99,12 +92,11 @@ public: void EnterCombat(Unit* /*who*/) OVERRIDE { } void MoveInLineOfSight(Unit* who) OVERRIDE - { if (CanSayHelp && who->GetTypeId() == TYPEID_PLAYER && me->IsFriendlyTo(who) && me->IsWithinDistInMap(who, 25.0f)) { //Random switch between 4 texts - Talk(SAY_HELP, who->GetGUID()); + Talk(SAY_HELP, who); SayHelpTimer = 20000; CanSayHelp = false; @@ -136,7 +128,7 @@ public: if (Player* player = ObjectAccessor::GetPlayer(*me, pCaster)) { - Talk(SAY_HEAL, player->GetGUID()); + Talk(SAY_HEAL, player); player->TalkedToCreature(me->GetEntry(), me->GetGUID()); } @@ -169,6 +161,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_draenei_survivorAI(creature); + } }; /*###### @@ -188,39 +184,11 @@ enum Overgrind SPELL_DYNAMITE = 7978 }; -#define GOSSIP_FIGHT "Traitor! You will be brought to justice!" - class npc_engineer_spark_overgrind : public CreatureScript { public: npc_engineer_spark_overgrind() : CreatureScript("npc_engineer_spark_overgrind") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF) - { - player->CLOSE_GOSSIP_MENU(); - creature->setFaction(FACTION_HOSTILE); - CAST_AI(npc_engineer_spark_overgrind::npc_engineer_spark_overgrindAI, creature->AI())->AttackStart(player); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->GetQuestStatus(QUEST_GNOMERCY) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FIGHT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_engineer_spark_overgrindAI(creature); - } - struct npc_engineer_spark_overgrindAI : public ScriptedAI { npc_engineer_spark_overgrindAI(Creature* creature) : ScriptedAI(creature) @@ -232,14 +200,6 @@ public: IsTreeEvent = true; } - uint32 NormFaction; - uint32 NpcFlags; - - uint32 DynamiteTimer; - uint32 EmoteTimer; - - bool IsTreeEvent; - void Reset() OVERRIDE { DynamiteTimer = 8000; @@ -253,7 +213,14 @@ public: void EnterCombat(Unit* who) OVERRIDE { - Talk(ATTACK_YELL, who->GetGUID()); + Talk(ATTACK_YELL, who); + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + { + player->CLOSE_GOSSIP_MENU(); + me->setFaction(FACTION_HOSTILE); + me->Attack(player, true); } void UpdateAI(uint32 diff) OVERRIDE @@ -281,8 +248,19 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 NormFaction; + uint32 NpcFlags; + uint32 DynamiteTimer; + uint32 EmoteTimer; + bool IsTreeEvent; }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_engineer_spark_overgrindAI(creature); + } }; /*###### @@ -294,11 +272,6 @@ class npc_injured_draenei : public CreatureScript public: npc_injured_draenei() : CreatureScript("npc_injured_draenei") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_injured_draeneiAI(creature); - } - struct npc_injured_draeneiAI : public ScriptedAI { npc_injured_draeneiAI(Creature* creature) : ScriptedAI(creature) { } @@ -323,10 +296,13 @@ public: void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_injured_draeneiAI(creature); + } }; /*###### @@ -341,8 +317,8 @@ enum Magwin SAY_END1 = 3, SAY_END2 = 4, EMOTE_HUG = 5, - - QUEST_A_CRY_FOR_SAY_HELP = 9528 + QUEST_A_CRY_FOR_SAY_HELP = 9528, + FACTION_QUEST = 113 }; class npc_magwin : public CreatureScript @@ -350,25 +326,25 @@ class npc_magwin : public CreatureScript public: npc_magwin() : CreatureScript("npc_magwin") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + struct npc_magwinAI : public npc_escortAI { - if (quest->GetQuestId() == QUEST_A_CRY_FOR_SAY_HELP) + npc_magwinAI(Creature* creature) : npc_escortAI(creature) { } + + void Reset() OVERRIDE { } + + void EnterCombat(Unit* who) OVERRIDE { - creature->setFaction(113); - if (npc_escortAI* pEscortAI = CAST_AI(npc_escortAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); + Talk(SAY_AGGRO, who); } - return true; - } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_magwinAI(creature); - } - - struct npc_magwinAI : public npc_escortAI - { - npc_magwinAI(Creature* creature) : npc_escortAI(creature) { } + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_A_CRY_FOR_SAY_HELP) + { + me->setFaction(FACTION_QUEST); + npc_escortAI::Start(true, false, player->GetGUID()); + } + } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -377,31 +353,28 @@ public: switch (waypointId) { case 0: - Talk(SAY_START, player->GetGUID()); + Talk(SAY_START, player); break; case 17: - Talk(SAY_PROGRESS, player->GetGUID()); + Talk(SAY_PROGRESS, player); break; case 28: - Talk(SAY_END1, player->GetGUID()); + Talk(SAY_END1, player); break; case 29: - Talk(EMOTE_HUG, player->GetGUID()); - Talk(SAY_END2, player->GetGUID()); + Talk(EMOTE_HUG, player); + Talk(SAY_END2, player); player->GroupEventHappens(QUEST_A_CRY_FOR_SAY_HELP, me); break; } } } - - void EnterCombat(Unit* who) OVERRIDE - { - Talk(SAY_AGGRO, who->GetGUID()); - } - - void Reset() OVERRIDE { } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_magwinAI(creature); + } }; /*###### @@ -435,11 +408,6 @@ class npc_geezle : public CreatureScript public: npc_geezle() : CreatureScript("npc_geezle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_geezleAI(creature); - } - struct npc_geezleAI : public ScriptedAI { npc_geezleAI(Creature* creature) : ScriptedAI(creature) { } @@ -490,7 +458,7 @@ public: Spark->AI()->Talk(EMOTE_SPARK); return 1000; case 2: - Talk(GEEZLE_SAY_1, SparkGUID); + Talk(GEEZLE_SAY_1, Spark); Spark->SetInFront(me); me->SetInFront(Spark); return 5000; @@ -501,7 +469,7 @@ public: Spark->AI()->Talk(SPARK_SAY_3); return 8000; case 5: - Talk(GEEZLE_SAY_4, SparkGUID); + Talk(GEEZLE_SAY_4, Spark); return 8000; case 6: Spark->AI()->Talk(SPARK_SAY_5); @@ -510,11 +478,11 @@ public: Spark->AI()->Talk(SPARK_SAY_6); return 8000; case 8: - Talk(GEEZLE_SAY_7, SparkGUID); + Talk(GEEZLE_SAY_7, Spark); return 2000; case 9: me->GetMotionMaster()->MoveTargetedHome(); - Spark->GetMotionMaster()->MovePoint(0, SparkPos); + Spark->GetMotionMaster()->MovePoint(0, SparkPos); CompleteQuest(); return 9000; case 10: @@ -570,6 +538,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_geezleAI(creature); + } }; enum RavegerCage @@ -608,11 +580,6 @@ class npc_death_ravager : public CreatureScript public: npc_death_ravager() : CreatureScript("npc_death_ravager") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_death_ravagerAI(creature); - } - struct npc_death_ravagerAI : public ScriptedAI { npc_death_ravagerAI(Creature* creature) : ScriptedAI(creature){ } @@ -652,6 +619,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_death_ravagerAI(creature); + } }; /*######## @@ -695,7 +666,7 @@ class npc_stillpine_capitive : public CreatureScript { if (owner) { - Talk(CAPITIVE_SAY, owner->GetGUID()); + Talk(CAPITIVE_SAY, owner); _player = owner; } Position pos; diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 694d63d5295..f71c07b5c7d 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -19,18 +19,18 @@ /* ScriptData SDName: Bloodmyst_Isle SD%Complete: 80 -SDComment: Quest support: 9670, 9756(gossip items text needed). +SDComment: Quest support: 9670, 9667 SDCategory: Bloodmyst Isle EndScriptData */ /* ContentData npc_webbed_creature -npc_captured_sunhawk_agent +npc_princess_stillpine +go_princess_stillpines_cage EndContentData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "ScriptedGossip.h" #include "Player.h" /*###### @@ -40,16 +40,16 @@ EndContentData */ //possible creatures to be spawned uint32 const possibleSpawns[32] = {17322, 17661, 17496, 17522, 17340, 17352, 17333, 17524, 17654, 17348, 17339, 17345, 17359, 17353, 17336, 17550, 17330, 17701, 17321, 17680, 17325, 17320, 17683, 17342, 17715, 17334, 17341, 17338, 17337, 17346, 17344, 17327}; +enum WebbedCreature +{ + NPC_EXPEDITION_RESEARCHER = 17681 +}; + class npc_webbed_creature : public CreatureScript { public: npc_webbed_creature() : CreatureScript("npc_webbed_creature") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_webbed_creatureAI(creature); - } - struct npc_webbed_creatureAI : public ScriptedAI { npc_webbed_creatureAI(Creature* creature) : ScriptedAI(creature) { } @@ -65,9 +65,8 @@ public: switch (urand(0, 2)) { case 0: - spawnCreatureID = 17681; if (Player* player = killer->ToPlayer()) - player->KilledMonsterCredit(spawnCreatureID, 0); + player->KilledMonsterCredit(NPC_EXPEDITION_RESEARCHER, 0); break; case 1: case 2: @@ -80,72 +79,10 @@ public: } }; -}; - -/*###### -## npc_captured_sunhawk_agent -######*/ - -#define C_SUNHAWK_TRIGGER 17974 - -#define GOSSIP_HELLO_CSA "[PH] " -#define GOSSIP_SELECT_CSA1 "[PH] " -#define GOSSIP_SELECT_CSA2 "[PH] " -#define GOSSIP_SELECT_CSA3 "[PH] " -#define GOSSIP_SELECT_CSA4 "[PH] " -#define GOSSIP_SELECT_CSA5 "[PH] " - -class npc_captured_sunhawk_agent : public CreatureScript -{ -public: - npc_captured_sunhawk_agent() : CreatureScript("npc_captured_sunhawk_agent") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_CSA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - player->SEND_GOSSIP_MENU(9137, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_CSA2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3); - player->SEND_GOSSIP_MENU(9138, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_CSA3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4); - player->SEND_GOSSIP_MENU(9139, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+4: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_CSA4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); - player->SEND_GOSSIP_MENU(9140, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+5: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_CSA5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); - player->SEND_GOSSIP_MENU(9141, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+6: - player->CLOSE_GOSSIP_MENU(); - player->TalkedToCreature(C_SUNHAWK_TRIGGER, creature->GetGUID()); - break; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + CreatureAI* GetAI(Creature* creature) const OVERRIDE { - if (player->HasAura(31609) && player->GetQuestStatus(9756) == QUEST_STATUS_INCOMPLETE) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_CSA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(9136, creature->GetGUID()); - } - else - player->SEND_GOSSIP_MENU(9134, creature->GetGUID()); - - return true; + return new npc_webbed_creatureAI(creature); } - }; /*###### @@ -206,7 +143,6 @@ public: void AddSC_bloodmyst_isle() { new npc_webbed_creature(); - new npc_captured_sunhawk_agent(); new npc_princess_stillpine(); new go_princess_stillpines_cage(); } diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index 99a693a0eb6..5bb1a937035 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -63,26 +63,6 @@ class npc_kerlonian : public CreatureScript public: npc_kerlonian() : CreatureScript("npc_kerlonian") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_SLEEPER_AWAKENED) - { - if (npc_kerlonianAI* pKerlonianAI = CAST_AI(npc_kerlonian::npc_kerlonianAI, creature->AI())) - { - creature->SetStandState(UNIT_STAND_STATE_STAND); - creature->AI()->Talk(SAY_KER_START, player->GetGUID()); - pKerlonianAI->StartFollow(player, FACTION_KER_ESCORTEE, quest); - } - } - - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_kerlonianAI(creature); - } - struct npc_kerlonianAI : public FollowerAI { npc_kerlonianAI(Creature* creature) : FollowerAI(creature) { } @@ -144,7 +124,7 @@ public: SetFollowPaused(false); } - void UpdateFollowerAI(uint32 Diff) OVERRIDE + void UpdateFollowerAI(uint32 diff) OVERRIDE { if (!UpdateVictim()) { @@ -153,13 +133,13 @@ public: if (!HasFollowState(STATE_FOLLOW_PAUSED)) { - if (FallAsleepTimer <= Diff) + if (FallAsleepTimer <= diff) { SetSleeping(); FallAsleepTimer = urand(25000, 90000); } else - FallAsleepTimer -= Diff; + FallAsleepTimer -= diff; } return; @@ -169,6 +149,25 @@ public: } }; + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + { + if (quest->GetQuestId() == QUEST_SLEEPER_AWAKENED) + { + if (npc_kerlonianAI* pKerlonianAI = CAST_AI(npc_kerlonian::npc_kerlonianAI, creature->AI())) + { + creature->SetStandState(UNIT_STAND_STATE_STAND); + creature->AI()->Talk(SAY_KER_START, player); + pKerlonianAI->StartFollow(player, FACTION_KER_ESCORTEE, quest); + } + } + + return true; + } + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_kerlonianAI(creature); + } }; /*#### @@ -203,27 +202,23 @@ class npc_prospector_remtravel : public CreatureScript public: npc_prospector_remtravel() : CreatureScript("npc_prospector_remtravel") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + struct npc_prospector_remtravelAI : public npc_escortAI { - if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2) - { - if (npc_escortAI* pEscortAI = CAST_AI(npc_prospector_remtravel::npc_prospector_remtravelAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID()); - - creature->setFaction(FACTION_ESCORTEE); - } + npc_prospector_remtravelAI(Creature* creature) : npc_escortAI(creature) { } - return true; - } + void Reset() OVERRIDE { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_prospector_remtravelAI(creature); - } + void EnterCombat(Unit* who) OVERRIDE + { + if (urand(0, 1)) + Talk(SAY_REM_AGGRO, who); + } - struct npc_prospector_remtravelAI : public npc_escortAI - { - npc_prospector_remtravelAI(Creature* creature) : npc_escortAI(creature) { } + void JustSummoned(Creature* /*pSummoned*/) OVERRIDE + { + //unsure if it should be any + //pSummoned->AI()->AttackStart(me); + } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -232,40 +227,40 @@ public: switch (waypointId) { case 0: - Talk(SAY_REM_START, player->GetGUID()); + Talk(SAY_REM_START, player); break; case 5: - Talk(SAY_REM_RAMP1_1, player->GetGUID()); + Talk(SAY_REM_RAMP1_1, player); break; case 6: DoSpawnCreature(NPC_GRAVEL_SCOUT, -10.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_GRAVEL_BONE, -10.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 9: - Talk(SAY_REM_RAMP1_2, player->GetGUID()); + Talk(SAY_REM_RAMP1_2, player); break; case 14: //depend quest rewarded? - Talk(SAY_REM_BOOK, player->GetGUID()); + Talk(SAY_REM_BOOK, player); break; case 15: - Talk(SAY_REM_TENT1_1, player->GetGUID()); + Talk(SAY_REM_TENT1_1, player); break; case 16: DoSpawnCreature(NPC_GRAVEL_SCOUT, -10.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_GRAVEL_BONE, -10.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 17: - Talk(SAY_REM_TENT1_2, player->GetGUID()); + Talk(SAY_REM_TENT1_2, player); break; case 26: - Talk(SAY_REM_MOSS, player->GetGUID()); + Talk(SAY_REM_MOSS, player); break; case 27: - Talk(EMOTE_REM_MOSS, player->GetGUID()); + Talk(EMOTE_REM_MOSS, player); break; case 28: - Talk(SAY_REM_MOSS_PROGRESS, player->GetGUID()); + Talk(SAY_REM_MOSS_PROGRESS, player); break; case 29: DoSpawnCreature(NPC_GRAVEL_SCOUT, -15.0f, 3.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); @@ -273,34 +268,37 @@ public: DoSpawnCreature(NPC_GRAVEL_GEO, -15.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 31: - Talk(SAY_REM_PROGRESS, player->GetGUID()); + Talk(SAY_REM_PROGRESS, player); break; case 41: - Talk(SAY_REM_REMEMBER, player->GetGUID()); + Talk(SAY_REM_REMEMBER, player); break; case 42: - Talk(EMOTE_REM_END, player->GetGUID()); + Talk(EMOTE_REM_END, player); player->GroupEventHappens(QUEST_ABSENT_MINDED_PT2, me); break; } } } + }; - void Reset() OVERRIDE { } - - void EnterCombat(Unit* who) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + { + if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2) { - if (urand(0, 1)) - Talk(SAY_REM_AGGRO, who->GetGUID()); - } + if (npc_escortAI* pEscortAI = CAST_AI(npc_prospector_remtravel::npc_prospector_remtravelAI, creature->AI())) + pEscortAI->Start(false, false, player->GetGUID()); - void JustSummoned(Creature* /*pSummoned*/) OVERRIDE - { - //unsure if it should be any - //pSummoned->AI()->AttackStart(me); + creature->setFaction(FACTION_ESCORTEE); } - }; + return true; + } + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_prospector_remtravelAI(creature); + } }; /*#### @@ -323,37 +321,6 @@ class npc_threshwackonator : public CreatureScript public: npc_threshwackonator() : CreatureScript("npc_threshwackonator") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF+1) - { - player->CLOSE_GOSSIP_MENU(); - - if (npc_threshwackonatorAI* pThreshAI = CAST_AI(npc_threshwackonator::npc_threshwackonatorAI, creature->AI())) - { - creature->AI()->Talk(EMOTE_START); - pThreshAI->StartFollow(player); - } - } - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->GetQuestStatus(QUEST_GYROMAST_REV) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_INSERT_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_threshwackonatorAI(creature); - } - struct npc_threshwackonatorAI : public FollowerAI { npc_threshwackonatorAI(Creature* creature) : FollowerAI(creature) { } @@ -369,7 +336,7 @@ public: { if (me->IsWithinDistInMap(who, 10.0f)) { - Talk(SAY_AT_CLOSE, who->GetGUID()); + Talk(SAY_AT_CLOSE, who); DoAtEnd(); } } @@ -386,6 +353,36 @@ public: } }; + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + { + player->PlayerTalkClass->ClearMenus(); + if (action == GOSSIP_ACTION_INFO_DEF+1) + { + player->CLOSE_GOSSIP_MENU(); + + if (npc_threshwackonatorAI* pThreshAI = CAST_AI(npc_threshwackonator::npc_threshwackonatorAI, creature->AI())) + { + creature->AI()->Talk(EMOTE_START); + pThreshAI->StartFollow(player); + } + } + + return true; + } + + bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + { + if (player->GetQuestStatus(QUEST_GYROMAST_REV) == QUEST_STATUS_INCOMPLETE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_INSERT_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + + player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); + return true; + } + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_threshwackonatorAI(creature); + } }; void AddSC_darkshore() diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index b748db4592c..07609dac61f 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -61,18 +61,6 @@ class npc_aged_dying_ancient_kodo : public CreatureScript public: npc_aged_dying_ancient_kodo() : CreatureScript("npc_aged_dying_ancient_kodo") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) - { - player->TalkedToCreature(creature->GetEntry(), 0); - player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF); - } - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - struct npc_aged_dying_ancient_kodoAI : public ScriptedAI { npc_aged_dying_ancient_kodoAI(Creature* creature) : ScriptedAI(creature) { } @@ -111,6 +99,18 @@ public: } }; + bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + { + if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) + { + player->TalkedToCreature(creature->GetEntry(), 0); + player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF); + } + + player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); + return true; + } + CreatureAI* GetAI(Creature* creature) const OVERRIDE { return new npc_aged_dying_ancient_kodoAI(creature); @@ -126,7 +126,7 @@ public: enum Iruxos { QUEST_HAND_IRUXOS = 5381, - NPC_DEMON_SPIRIT = 11876, + NPC_DEMON_SPIRIT = 11876 }; class go_iruxos : public GameObjectScript @@ -157,28 +157,21 @@ class npc_dalinda : public CreatureScript public: npc_dalinda() : CreatureScript("npc_dalinda") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_RETURN_TO_VAHLARRIEL) - { - if (npc_escortAI* escortAI = CAST_AI(npc_dalinda::npc_dalindaAI, creature->AI())) - { - escortAI->Start(true, false, player->GetGUID()); - creature->setFaction(113); - } - } - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_dalindaAI(creature); - } - struct npc_dalindaAI : public npc_escortAI { npc_dalindaAI(Creature* creature) : npc_escortAI(creature) { } + void Reset() OVERRIDE { } + + void EnterCombat(Unit* /*who*/) OVERRIDE { } + + void JustDied(Unit* /*killer*/) OVERRIDE + { + if (Player* player = GetPlayerForEscort()) + player->FailQuest(QUEST_RETURN_TO_VAHLARRIEL); + return; + } + void WaypointReached(uint32 waypointId) OVERRIDE { Player* player = GetPlayerForEscort(); @@ -195,25 +188,34 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - - void Reset() OVERRIDE { } - - void JustDied(Unit* /*killer*/) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - if (Player* player = GetPlayerForEscort()) - player->FailQuest(QUEST_RETURN_TO_VAHLARRIEL); - return; - } + npc_escortAI::UpdateAI(diff); - void UpdateAI(uint32 Diff) OVERRIDE - { - npc_escortAI::UpdateAI(Diff); if (!UpdateVictim()) return; + DoMeleeAttackIfReady(); } }; + + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + { + if (quest->GetQuestId() == QUEST_RETURN_TO_VAHLARRIEL) + { + if (npc_escortAI* escortAI = CAST_AI(npc_dalinda::npc_dalindaAI, creature->AI())) + { + escortAI->Start(true, false, player->GetGUID()); + creature->setFaction(113); + } + } + return true; + } + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_dalindaAI(creature); + } }; /*###### @@ -223,8 +225,7 @@ public: enum DemonPortal { NPC_DEMON_GUARDIAN = 11937, - - QUEST_PORTAL_OF_THE_LEGION = 5581, + QUEST_PORTAL_OF_THE_LEGION = 5581 }; class go_demon_portal : public GameObjectScript diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index ff96d5e8465..2074598e304 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -80,24 +80,24 @@ public: if (player && player->GetQuestStatus(QUEST_LAZY_PEONS) == QUEST_STATUS_INCOMPLETE) { player->KilledMonsterCredit(me->GetEntry(), me->GetGUID()); - Talk(SAY_SPELL_HIT, caster->GetGUID()); + Talk(SAY_SPELL_HIT, caster); me->RemoveAllAuras(); if (GameObject* Lumberpile = me->FindNearestGameObject(GO_LUMBERPILE, 20)) me->GetMotionMaster()->MovePoint(1, Lumberpile->GetPositionX()-1, Lumberpile->GetPositionY(), Lumberpile->GetPositionZ()); } } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { if (work == true) me->HandleEmoteCommand(EMOTE_ONESHOT_WORK_CHOPWOOD); - if (RebuffTimer <= Diff) + if (RebuffTimer <= diff) { DoCast(me, SPELL_BUFF_SLEEP); RebuffTimer = 300000; //Rebuff agian in 5 minutes } else - RebuffTimer -= Diff; + RebuffTimer -= diff; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); @@ -208,7 +208,7 @@ class npc_tiger_matriarch_credit : public CreatureScript me->AddAura(SPELL_NO_SUMMON_AURA, summoner); me->AddAura(SPELL_DETECT_INVIS, summoner); summoner->CastSpell(summoner, SPELL_SUMMON_MATRIARCH, true); - Talk(SAY_MATRIARCH_AGGRO, summoner->GetGUID()); + Talk(SAY_MATRIARCH_AGGRO, summoner); } } } diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index 9ad9b8dc835..5ee0a60e95a 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -527,29 +527,29 @@ public: switch (waypointId) { case 7: - Talk(SAY_STAY_1, player->GetGUID()); + Talk(SAY_STAY_1, player); break; case 11: - Talk(SAY_STAY_2, player->GetGUID()); + Talk(SAY_STAY_2, player); break; case 25: - Talk(SAY_STAY_3, player->GetGUID()); + Talk(SAY_STAY_3, player); break; case 26: - Talk(SAY_STAY_4, player->GetGUID()); + Talk(SAY_STAY_4, player); break; case 27: - Talk(SAY_STAY_5, player->GetGUID()); + Talk(SAY_STAY_5, player); break; case 28: - Talk(SAY_STAY_6, player->GetGUID()); + Talk(SAY_STAY_6, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); break; case 29: me->SetStandState(UNIT_STAND_STATE_STAND); break; case 37: - Talk(SAY_QUEST_COMPLETE, player->GetGUID()); + Talk(SAY_QUEST_COMPLETE, player); me->SetSpeed(MOVE_RUN, 1.2f, true); me->SetWalk(false); if (player->GetQuestStatus(QUEST_STINKYS_ESCAPE_H)) @@ -565,7 +565,7 @@ public: void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_ATTACKED_1, who->GetGUID()); + Talk(SAY_ATTACKED_1, who); } void Reset() OVERRIDE { } diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 7fb423f53ee..cf326752112 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -420,7 +420,7 @@ public: switch (Step) { case 0: - Talk(CLINTAR_SPIRIT_SAY_START, PlayerGUID); + Talk(CLINTAR_SPIRIT_SAY_START, player); EventTimer = 8000; Step = 1; break; diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index ef1f6466d3b..50c1056e349 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -470,11 +470,11 @@ public: switch (AnimationCount) { case 0: - Talk(ANACHRONOS_SAY_1, Fandral->GetGUID()); + Talk(ANACHRONOS_SAY_1, Fandral); break; case 1: Fandral->SetTarget(me->GetGUID()); - Fandral->AI()->Talk(FANDRAL_SAY_1, me->GetGUID()); + Fandral->AI()->Talk(FANDRAL_SAY_1, me); break; case 2: Fandral->SetTarget(0); @@ -544,7 +544,7 @@ public: case 21: break; case 22: - Caelestrasz->AI()->Talk(CAELESTRASZ_SAY_2, Fandral->GetGUID()); + Caelestrasz->AI()->Talk(CAELESTRASZ_SAY_2, Fandral); break; case 23: Caelestrasz->GetMotionMaster()->MoveCharge(-8065, 1530, 2.61f, 10); @@ -566,7 +566,7 @@ public: Caelestrasz->CastSpell(Caelestrasz, 54293, false); break; case 28: - Talk(ANACHRONOS_SAY_2, Fandral->GetGUID()); + Talk(ANACHRONOS_SAY_2, Fandral); break; case 29: Caelestrasz->GetMotionMaster()->MoveCharge(-8095, 1530, 50, 42); @@ -575,7 +575,7 @@ public: case 30: break; case 31: - Talk(ANACHRONOS_SAY_3, Fandral->GetGUID()); + Talk(ANACHRONOS_SAY_3, Fandral); break; case 32: Caelestrasz->SetVisible(false); @@ -604,7 +604,7 @@ public: me->SummonGameObject(GO_GLYPH_OF_AHN_QIRAJ, -8130, 1525, 17.5f, 0, 0, 0, 0, 0, 0); break; case 39: - Talk(ANACHRONOS_SAY_5, Fandral->GetGUID()); + Talk(ANACHRONOS_SAY_5, Fandral); break; case 40: Fandral->CastSpell(me, 25167, true); @@ -634,10 +634,10 @@ public: Talk(ANACHRONOS_EMOTE_1); break; case 48: - Fandral->AI()->Talk(FANDRAL_SAY_4, me->GetGUID()); + Fandral->AI()->Talk(FANDRAL_SAY_4, me); break; case 49: - Fandral->AI()->Talk(FANDRAL_SAY_5, me->GetGUID()); + Fandral->AI()->Talk(FANDRAL_SAY_5, me); break; case 50: Fandral->AI()->Talk(FANDRAL_EMOTE_2); @@ -660,7 +660,7 @@ public: } case 52: Fandral->GetMotionMaster()->MoveCharge(-8028.75f, 1538.795f, 2.61f, 4); - Fandral->AI()->Talk(ANACHRONOS_SAY_9, me->GetGUID()); + Fandral->AI()->Talk(ANACHRONOS_SAY_9, me); break; case 53: Fandral->AI()->Talk(FANDRAL_SAY_6); @@ -686,7 +686,7 @@ public: break; case 60: if (player) - Talk(ANACHRONOS_SAY_10, player->GetGUID()); + Talk(ANACHRONOS_SAY_10, player); me->GetMotionMaster()->MoveCharge(-8113.46f, 1524.16f, 2.89f, 4); break; case 61: diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp index 5e27d71ea07..4ba246a18aa 100644 --- a/src/server/scripts/Kalimdor/zone_tanaris.cpp +++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp @@ -103,7 +103,7 @@ public: void EnterCombat(Unit* who) OVERRIDE { - Talk(AGGRO_YELL_AQUE, who->GetGUID()); + Talk(AGGRO_YELL_AQUE, who); } void UpdateAI(uint32 diff) OVERRIDE @@ -191,58 +191,58 @@ public: switch (waypointId) { case 0: - Talk(WHISPER_CUSTODIAN_1, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_1, player); break; case 1: - Talk(WHISPER_CUSTODIAN_2, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_2, player); break; case 2: - Talk(WHISPER_CUSTODIAN_3, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_3, player); break; case 3: - Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_4, player); break; case 5: - Talk(WHISPER_CUSTODIAN_5, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_5, player); break; case 6: - Talk(WHISPER_CUSTODIAN_6, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_6, player); break; case 7: - Talk(WHISPER_CUSTODIAN_7, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_7, player); break; case 8: - Talk(WHISPER_CUSTODIAN_8, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_8, player); break; case 9: - Talk(WHISPER_CUSTODIAN_9, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_9, player); break; case 10: - Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_4, player); break; case 13: - Talk(WHISPER_CUSTODIAN_10, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_10, player); break; case 14: - Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_4, player); break; case 16: - Talk(WHISPER_CUSTODIAN_11, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_11, player); break; case 17: - Talk(WHISPER_CUSTODIAN_12, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_12, player); break; case 18: - Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_4, player); break; case 22: - Talk(WHISPER_CUSTODIAN_13, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_13, player); break; case 23: - Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_4, player); break; case 24: - Talk(WHISPER_CUSTODIAN_14, player->GetGUID()); + Talk(WHISPER_CUSTODIAN_14, player); DoCast(player, 34883); // below here is temporary workaround, to be removed when spell works properly player->AreaExploredOrEventHappens(10277); diff --git a/src/server/scripts/Kalimdor/zone_teldrassil.cpp b/src/server/scripts/Kalimdor/zone_teldrassil.cpp index 14f8f2a9dac..96326febcac 100644 --- a/src/server/scripts/Kalimdor/zone_teldrassil.cpp +++ b/src/server/scripts/Kalimdor/zone_teldrassil.cpp @@ -79,7 +79,7 @@ public: { if (me->IsWithinDistInMap(who, 10.0f)) { - Talk(SAY_AT_HOME, who->GetGUID()); + Talk(SAY_AT_HOME, who); DoComplete(); } } diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 292017d2cc4..5b057f27a48 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -109,7 +109,7 @@ public: creature->setFaction(FACTION_ESCORTEE); creature->SetStandState(UNIT_STAND_STATE_STAND); - creature->AI()->Talk(SAY_GIL_START, player->GetGUID()); + creature->AI()->Talk(SAY_GIL_START, player); if (npc_giltharesAI* pEscortAI = CAST_AI(npc_gilthares::npc_giltharesAI, creature->AI())) pEscortAI->Start(false, false, player->GetGUID(), quest); @@ -137,22 +137,22 @@ public: switch (waypointId) { case 16: - Talk(SAY_GIL_AT_LAST, player->GetGUID()); + Talk(SAY_GIL_AT_LAST, player); break; case 17: - Talk(SAY_GIL_PROCEED, player->GetGUID()); + Talk(SAY_GIL_PROCEED, player); break; case 18: - Talk(SAY_GIL_FREEBOOTERS, player->GetGUID()); + Talk(SAY_GIL_FREEBOOTERS, player); break; case 37: - Talk(SAY_GIL_ALMOST, player->GetGUID()); + Talk(SAY_GIL_ALMOST, player); break; case 47: - Talk(SAY_GIL_SWEET, player->GetGUID()); + Talk(SAY_GIL_SWEET, player); break; case 53: - Talk(SAY_GIL_FREED, player->GetGUID()); + Talk(SAY_GIL_FREED, player); player->GroupEventHappens(QUEST_FREE_FROM_HOLD, me); break; } @@ -168,7 +168,7 @@ public: if (who->GetTypeId() != TYPEID_PLAYER && me->GetAreaId() == AREA_MERCHANT_COAST) { //appears to be pretty much random (possible only if escorter not in combat with who yet?) - Talk(SAY_GIL_AGGRO, who->GetGUID()); + Talk(SAY_GIL_AGGRO, who); } } }; @@ -345,10 +345,7 @@ public: BigWill = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* who) OVERRIDE - { if (!who || !who->IsAlive() || EventInProgress) return; @@ -362,8 +359,6 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE { } - void UpdateAI(uint32 diff) OVERRIDE { if (EventInProgress) @@ -408,7 +403,7 @@ public: if (x >= -1684 && x <= -1674 && y >= -4334 && y <= -4324) { warrior->AreaExploredOrEventHappens(1719); - Talk(SAY_TWIGGY_FLATHEAD_BEGIN, warrior->GetGUID()); + Talk(SAY_TWIGGY_FLATHEAD_BEGIN, warrior); for (uint8 i = 0; i < 6; ++i) { @@ -577,10 +572,10 @@ public: switch (PointId) { case 9: - Talk(SAY_STARTUP2, player->GetGUID()); + Talk(SAY_STARTUP2, player); break; case 18: - Talk(SAY_PROGRESS_1, player->GetGUID()); + Talk(SAY_PROGRESS_1, player); SetRun(); break; } diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp index 1ba9bf2cb54..a4af7c75e6a 100644 --- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp +++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp @@ -146,7 +146,7 @@ public: { if (quest->GetQuestId() == QUEST_FREE_AT_LAST) { - creature->AI()->Talk(SAY_LAKO_START, player->GetGUID()); + creature->AI()->Talk(SAY_LAKO_START, player); creature->setFaction(FACTION_ESCORTEE_LAKO); if (npc_lakota_windsongAI* pEscortAI = CAST_AI(npc_lakota_windsong::npc_lakota_windsongAI, creature->AI())) @@ -229,7 +229,7 @@ public: { if (quest->GetQuestId() == QUEST_HOMEWARD) { - creature->AI()->Talk(SAY_START, player->GetGUID()); + creature->AI()->Talk(SAY_START, player); creature->setFaction(FACTION_ESCORTEE); if (npc_paoka_swiftmountainAI* pEscortAI = CAST_AI(npc_paoka_swiftmountain::npc_paoka_swiftmountainAI, creature->AI())) diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp index 5f19e838c8a..2d29ed361e9 100644 --- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp +++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp @@ -62,7 +62,7 @@ public: if (quest->GetQuestId() == QUEST_CHASING_AME) { CAST_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID()); - creature->AI()->Talk(SAY_READY, player->GetGUID()); + creature->AI()->Talk(SAY_READY, player); creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); // Change faction so mobs attack creature->setFaction(113); @@ -89,21 +89,21 @@ public: { case 19: me->SummonCreature(ENTRY_STOMPER, -6391.69f, -1730.49f, -272.83f, 4.96f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - Talk(SAY_AGGRO1, player->GetGUID()); + Talk(SAY_AGGRO1, player); break; case 28: - Talk(SAY_SEARCH, player->GetGUID()); + Talk(SAY_SEARCH, player); break; case 38: me->SummonCreature(ENTRY_TARLORD, -6370.75f, -1382.84f, -270.51f, 6.06f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - Talk(SAY_AGGRO2, player->GetGUID()); + Talk(SAY_AGGRO2, player); break; case 49: me->SummonCreature(ENTRY_TARLORD1, -6324.44f, -1181.05f, -270.17f, 4.34f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - Talk(SAY_AGGRO3, player->GetGUID()); + Talk(SAY_AGGRO3, player); break; case 55: - Talk(SAY_FINISH, player->GetGUID()); + Talk(SAY_FINISH, player); player->GroupEventHappens(QUEST_CHASING_AME, me); break; } diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 18df584e64a..c9a526c6306 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -524,7 +524,7 @@ public: if (Player* player = GetPlayerForEscort()) { me->SetFacingToObject(player); - Talk(SAY_RANSHALLA_END_1, player->GetGUID()); + Talk(SAY_RANSHALLA_END_1, player); } break; case SAY_RANSHALLA_END_2: @@ -538,7 +538,7 @@ public: if (Player* player = GetPlayerForEscort()) { player->GroupEventHappens(QUEST_GUARDIANS_ALTAR, me); - Talk(SAY_RANSHALLA_END_2, player->GetGUID()); + Talk(SAY_RANSHALLA_END_2, player); } me->DespawnOrUnsummon(4000); break; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp index a670e14338e..40c65374bd3 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp @@ -147,7 +147,7 @@ class boss_elder_nadox : public CreatureScript if (me->HealthBelowPct(100 - AmountHealthModifier * 25)) { - Talk(EMOTE_HATCHES, me->GetGUID()); + Talk(EMOTE_HATCHES, me); DoCast(me, SPELL_SUMMON_SWARM_GUARD); ++AmountHealthModifier; } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 5bb68a4c886..e43d0846b75 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -33,7 +33,7 @@ enum Spells SPELL_MIND_FLAY = 57941, SPELL_SHADOW_BOLT_VOLLEY = 57942, SPELL_SHIVER = 57949, - SPELL_CLONE_PLAYER = 57507, //casted on player during insanity + SPELL_CLONE_PLAYER = 57507, //cast on player during insanity SPELL_INSANITY_PHASING_1 = 57508, SPELL_INSANITY_PHASING_2 = 57509, SPELL_INSANITY_PHASING_3 = 57510, @@ -302,15 +302,16 @@ public: ResetPlayersPhaseMask(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_volazjAI(creature); + return GetInstanceAI<boss_volazjAI>(creature); } }; 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 a68a122bc31..a80b6fda636 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -337,7 +337,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_jedoga_shadowseekerAI(creature); + return GetInstanceAI<boss_jedoga_shadowseekerAI>(creature); } }; @@ -503,7 +503,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_jedoga_initiandAI(creature); + return GetInstanceAI<npc_jedoga_initiandAI>(creature); } }; @@ -528,8 +528,8 @@ public: instance = creature->GetInstanceScript(); bRemoved = false; bRemoved2 = false; - bCasted = false; - bCasted2 = false; + bCast = false; + bCast2 = false; SetCombatMovement(false); } @@ -538,8 +538,8 @@ public: bool bRemoved; bool bRemoved2; - bool bCasted; - bool bCasted2; + bool bCast; + bool bCast2; void Reset() OVERRIDE { } void EnterCombat(Unit* /*who*/) OVERRIDE { } @@ -560,23 +560,23 @@ public: bRemoved = true; return; } - if (!bCasted) + if (!bCast) { DoCast(me, SPELL_BEAM_VISUAL_JEDOGAS_AUFSEHER_1, false); - bCasted = true; + bCast = true; } } if (!bRemoved2 && me->GetPositionX() < 440.0f) { - if (!bCasted2 && instance->GetData(DATA_JEDOGA_TRIGGER_SWITCH)) + if (!bCast2 && instance->GetData(DATA_JEDOGA_TRIGGER_SWITCH)) { DoCast(me, SPELL_BEAM_VISUAL_JEDOGAS_AUFSEHER_2, false); - bCasted2 = true; + bCast2 = true; } - if (bCasted2 && !instance->GetData(DATA_JEDOGA_TRIGGER_SWITCH)) + if (bCast2 && !instance->GetData(DATA_JEDOGA_TRIGGER_SWITCH)) { me->InterruptNonMeleeSpells(true); - bCasted2 = false; + bCast2 = false; } if (!bRemoved2 && instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == DONE) { @@ -589,7 +589,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_jedogas_aufseher_triggerAI(creature); + return GetInstanceAI<npc_jedogas_aufseher_triggerAI>(creature); } }; diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 81530265617..155b8aa20b5 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -355,7 +355,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_anub_arakAI(creature); + return GetInstanceAI<boss_anub_arakAI>(creature); } }; diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index 1664a1375ae..39aaae06ff5 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -192,7 +192,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_hadronoxAI(creature); + return GetInstanceAI<boss_hadronoxAI>(creature); } }; diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 143ccc29e0d..86fb0260cc5 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -195,7 +195,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_krik_thirAI(creature); + return GetInstanceAI<boss_krik_thirAI>(creature); } }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index a212a74df86..9c5415375b7 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -37,9 +37,6 @@ enum Enums SAY_SARTHARION_SLAY = 8, WHISPER_LAVA_CHURN = 9, - WHISPER_SHADRON_DICIPLE = 7, - WHISPER_VESPERON_DICIPLE = 7, - //Sartharion Spells 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. @@ -48,7 +45,7 @@ enum Enums 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 casted should be 57578) 57571 then trigger visual missile, then summon Lava Blaze on impact(spell 57572) + 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, NPC_FIRE_CYCLONE = 30648, @@ -81,44 +78,34 @@ enum Misc DATA_CAN_LOOT = 0 }; -struct Location -{ - float x, y, z; -}; - -static Location FlameRight1Spawn = { 3200.00f, 573.211f, 57.1551f }; -static Location FlameRight1Direction = { 3289.28f, 573.211f, 57.1551f }; -static Location FlameRight2Spawn = { 3200.00f, 532.211f, 57.1551f }; -static Location FlameRight2Direction = { 3289.28f, 532.211f, 57.1551f }; -static Location FlameRight3Spawn = { 3200.00f, 491.211f, 57.1551f }; -static Location FlameRight3Direction = { 3289.28f, 491.211f, 57.1551f }; -static Location FlameLeft1Spawn = { 3289.28f, 511.711f, 57.1551f }; -static Location FlameLeft1Direction = { 3200.00f, 511.711f, 57.1551f }; -static Location FlameLeft2Spawn = { 3289.28f, 552.711f, 57.1551f }; -static Location FlameLeft2Direction = { 3200.00f, 552.711f, 57.1551f }; - -struct Waypoint -{ - float m_fX, m_fY, m_fZ; -}; +Position const FlameRight1Spawn = { 3200.00f, 573.211f, 57.1551f, 0.0f }; +Position const FlameRight1Direction = { 3289.28f, 573.211f, 57.1551f, 0.0f }; +Position const FlameRight2Spawn = { 3200.00f, 532.211f, 57.1551f, 0.0f }; +Position const FlameRight2Direction = { 3289.28f, 532.211f, 57.1551f, 0.0f }; +Position const FlameRight3Spawn = { 3200.00f, 491.211f, 57.1551f, 0.0f }; +Position const FlameRight3Direction = { 3289.28f, 491.211f, 57.1551f, 0.0f }; +Position const FlameLeft1Spawn = { 3289.28f, 511.711f, 57.1551f, 0.0f }; +Position const FlameLeft1Direction = { 3200.00f, 511.711f, 57.1551f, 0.0f }; +Position const FlameLeft2Spawn = { 3289.28f, 552.711f, 57.1551f, 0.0f }; +Position const FlameLeft2Direction = { 3200.00f, 552.711f, 57.1551f, 0.0f }; //each dragons special points. First where fly to before connect to connon, second where land point is. -Waypoint m_aTene[]= +Position const TenebronPositions[] = { - {3212.854f, 575.597f, 109.856f}, // init - {3246.425f, 565.367f, 61.249f} // end + { 3212.854f, 575.597f, 109.856f, 0.0f }, // init + { 3246.425f, 565.367f, 61.249f, 0.0f } // end }; -Waypoint m_aShad[]= +Position const ShadronPositions[] = { - {3293.238f, 472.223f, 106.968f}, - {3271.669f, 526.907f, 61.931f} + { 3293.238f, 472.223f, 106.968f, 0.0f }, + { 3271.669f, 526.907f, 61.931f, 0.0f } }; -Waypoint m_aVesp[]= +Position const VesperonPositions[] = { - {3193.310f, 472.861f, 102.697f}, - {3227.268f, 533.238f, 59.995f} + { 3193.310f, 472.861f, 102.697f, 0.0f }, + { 3227.268f, 533.238f, 59.995f, 0.0f } }; enum SartharionEvents @@ -159,11 +146,8 @@ public: me->SetHomePosition(3246.57f, 551.263f, 58.6164f, 4.66003f); - if (instance) - { - DrakeRespawn(); - instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); - } + DrakeRespawn(); + instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); } void JustReachedHome() OVERRIDE @@ -177,8 +161,7 @@ public: _EnterCombat(); DoZoneInCombat(); - if (instance) - FetchDragons(); + FetchDragons(); events.ScheduleEvent(EVENT_LAVA_STRIKE, 5000); events.ScheduleEvent(EVENT_CLEAVE_ATTACK, 7000); @@ -195,25 +178,23 @@ public: Talk(SAY_SARTHARION_DEATH); _JustDied(); - if (instance) - { - if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) - if (tenebron->IsAlive()) - tenebron->DisappearAndDie(); + if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) + if (tenebron->IsAlive()) + tenebron->DisappearAndDie(); - if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON))) - if (shadron->IsAlive()) - shadron->DisappearAndDie(); + if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON))) + if (shadron->IsAlive()) + shadron->DisappearAndDie(); - if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON))) - if (vesperon->IsAlive()) - vesperon->DisappearAndDie(); - } + if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON))) + if (vesperon->IsAlive()) + vesperon->DisappearAndDie(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SARTHARION_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SARTHARION_SLAY); } // me->ResetLootMode() is called from Reset() @@ -310,7 +291,7 @@ public: AddDrakeLootMode(); ++drakeCount; } - fetchTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aTene[0].m_fX, m_aTene[0].m_fY, m_aTene[0].m_fZ); + fetchTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, TenebronPositions[0]); if (!fetchTene->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) fetchTene->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -328,7 +309,7 @@ public: AddDrakeLootMode(); ++drakeCount; } - fetchShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aShad[0].m_fX, m_aShad[0].m_fY, m_aShad[0].m_fZ); + fetchShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, ShadronPositions[0]); if (!fetchShad->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) fetchShad->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -346,7 +327,7 @@ public: AddDrakeLootMode(); ++drakeCount; } - fetchVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aVesp[0].m_fX, m_aVesp[0].m_fY, m_aVesp[0].m_fZ); + fetchVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, VesperonPositions[0]); if (!fetchVesp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) fetchVesp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -370,24 +351,24 @@ public: if (temp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - int32 textId = 0; + uint8 textId = 0; switch (temp->GetEntry()) { case NPC_TENEBRON: textId = SAY_SARTHARION_CALL_TENEBRON; temp->AddAura(SPELL_POWER_OF_TENEBRON, temp); - temp->GetMotionMaster()->MovePoint(POINT_ID_LAND, m_aTene[1].m_fX, m_aTene[1].m_fY, m_aTene[1].m_fZ); + temp->GetMotionMaster()->MovePoint(POINT_ID_LAND, TenebronPositions[1]); break; case NPC_SHADRON: textId = SAY_SARTHARION_CALL_SHADRON; temp->AddAura(SPELL_POWER_OF_SHADRON, temp); - temp->GetMotionMaster()->MovePoint(POINT_ID_LAND, m_aShad[1].m_fX, m_aShad[1].m_fY, m_aShad[1].m_fZ); + temp->GetMotionMaster()->MovePoint(POINT_ID_LAND, ShadronPositions[1]); break; case NPC_VESPERON: textId = SAY_SARTHARION_CALL_VESPERON; temp->AddAura(SPELL_POWER_OF_VESPERON, temp); - temp->GetMotionMaster()->MovePoint(POINT_ID_LAND, m_aVesp[1].m_fX, m_aVesp[1].m_fY, m_aVesp[1].m_fZ); + temp->GetMotionMaster()->MovePoint(POINT_ID_LAND, VesperonPositions[1]); break; } @@ -405,20 +386,6 @@ public: return 0; } - void SendFlameTsunami() - { - if (Map* map = me->GetMap()) - if (map->IsDungeon()) - { - Map::PlayerList const &PlayerList = map->GetPlayers(); - - if (!PlayerList.isEmpty()) - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - if (i->GetSource() && i->GetSource()->IsAlive()) - Talk(WHISPER_LAVA_CHURN, i->GetSource()->GetGUID()); - } - } - // Selects a random Fire Cyclone and makes it cast Lava Strike. // FIXME: Frequency of the casts reduced to compensate 100% chance of spawning a Lava Blaze add void CastLavaStrikeOnTarget(Unit* target) @@ -431,13 +398,7 @@ public: if (fireCyclonesList.empty()) return; - std::list<Creature*>::iterator itr = fireCyclonesList.begin(); - uint32 rnd = rand()%fireCyclonesList.size(); - - for (uint32 i = 0; i < rnd; ++i) - ++itr; - - (*itr)->CastSpell(target, SPELL_LAVA_STRIKE, true); + Trinity::Containers::SelectRandomContainerElement(fireCyclonesList)->CastSpell(target, SPELL_LAVA_STRIKE, true); } void UpdateAI(uint32 diff) OVERRIDE @@ -459,25 +420,25 @@ public: } break; case EVENT_FLAME_TSUNAMI: - SendFlameTsunami(); + Talk(WHISPER_LAVA_CHURN); switch (urand(0, 1)) { case 0: { - if (Creature* right1 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameRight1Spawn.x, FlameRight1Spawn.y, FlameRight1Spawn.z, 0, TEMPSUMMON_TIMED_DESPAWN, 12000)) - right1->GetMotionMaster()->MovePoint(0, FlameRight1Direction.x, FlameRight1Direction.y, FlameRight1Direction.z); - if (Creature* right2 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameRight2Spawn.x, FlameRight2Spawn.y, FlameRight2Spawn.z, 0, TEMPSUMMON_TIMED_DESPAWN, 12000)) - right2->GetMotionMaster()->MovePoint(0, FlameRight2Direction.x, FlameRight2Direction.y, FlameRight2Direction.z); - if (Creature* right3 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameRight3Spawn.x, FlameRight3Spawn.y, FlameRight3Spawn.z, 0, TEMPSUMMON_TIMED_DESPAWN, 12000)) - right3->GetMotionMaster()->MovePoint(0, FlameRight3Direction.x, FlameRight3Direction.y, FlameRight3Direction.z); + if (Creature* right1 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameRight1Spawn, TEMPSUMMON_TIMED_DESPAWN, 12000)) + right1->GetMotionMaster()->MovePoint(0, FlameRight1Direction); + if (Creature* right2 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameRight2Spawn, TEMPSUMMON_TIMED_DESPAWN, 12000)) + right2->GetMotionMaster()->MovePoint(0, FlameRight2Direction); + if (Creature* right3 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameRight3Spawn, TEMPSUMMON_TIMED_DESPAWN, 12000)) + right3->GetMotionMaster()->MovePoint(0, FlameRight3Direction); break; } case 1: { - if (Creature* left1 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameLeft1Spawn.x, FlameLeft1Spawn.y, FlameLeft1Spawn.z, 0, TEMPSUMMON_TIMED_DESPAWN, 12000)) - left1->GetMotionMaster()->MovePoint(0, FlameLeft1Direction.x, FlameLeft1Direction.y, FlameLeft1Direction.z); - if (Creature* left2 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameLeft2Spawn.x, FlameLeft2Spawn.y, FlameLeft2Spawn.z, 0, TEMPSUMMON_TIMED_DESPAWN, 12000)) - left2->GetMotionMaster()->MovePoint(0, FlameLeft2Direction.x, FlameLeft2Direction.y, FlameLeft2Direction.z); + if (Creature* left1 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameLeft1Spawn, TEMPSUMMON_TIMED_DESPAWN, 12000)) + left1->GetMotionMaster()->MovePoint(0, FlameLeft1Direction); + if (Creature* left2 = me->SummonCreature(NPC_FLAME_TSUNAMI, FlameLeft2Spawn, TEMPSUMMON_TIMED_DESPAWN, 12000)) + left2->GetMotionMaster()->MovePoint(0, FlameLeft2Direction); break; } } @@ -550,7 +511,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_sartharionAI(creature); + return GetObsidianSanctumAI<boss_sartharionAI>(creature); } }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index 5fc4869c4af..9476f4161aa 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -25,9 +25,6 @@ enum Enums { - WHISPER_HATCH_EGGS = 6, - WHISPER_OPEN_PORTAL = 6, // whisper, shared by two dragons - //Mini bosses common spells SPELL_TWILIGHT_RESIDUE = 61885, // makes immune to shadow damage, applied when leave phase @@ -97,73 +94,73 @@ enum Misc DATA_CAN_LOOT = 0 }; -struct Location -{ - float x, y, z; -}; - -struct Locations -{ - float x, y, z; -}; - -struct Waypoint -{ - float m_fX, m_fY, m_fZ; -}; - #define MAX_WAYPOINT 6 //points around raid "isle", counter clockwise. should probably be adjusted to be more alike -Waypoint dragonCommon[MAX_WAYPOINT]= +Position const dragonCommon[MAX_WAYPOINT]= { - {3214.012f, 468.932f, 98.652f}, - {3244.950f, 468.427f, 98.652f}, - {3283.520f, 496.869f, 98.652f}, - {3287.316f, 555.875f, 98.652f}, - {3250.479f, 585.827f, 98.652f}, - {3209.969f, 566.523f, 98.652f} + { 3214.012f, 468.932f, 98.652f, 0.0f }, + { 3244.950f, 468.427f, 98.652f, 0.0f }, + { 3283.520f, 496.869f, 98.652f, 0.0f }, + { 3287.316f, 555.875f, 98.652f, 0.0f }, + { 3250.479f, 585.827f, 98.652f, 0.0f }, + { 3209.969f, 566.523f, 98.652f, 0.0f } }; -static Location AcolyteofShadron = { 3363.92f, 534.703f, 97.2683f }; -static Location AcolyteofShadron2 = { 3246.57f, 551.263f, 58.6164f }; -static Location AcolyteofVesperon = { 3145.68f, 520.71f, 89.7f }; -static Location AcolyteofVesperon2 = { 3246.57f, 551.263f, 58.6164f }; +Position const AcolyteofShadron = { 3363.92f, 534.703f, 97.2683f, 0.0f }; +Position const AcolyteofShadron2 = { 3246.57f, 551.263f, 58.6164f, 0.0f }; +Position const AcolyteofVesperon = { 3145.68f, 520.71f, 89.7f, 0.0f }; +Position const AcolyteofVesperon2 = { 3246.57f, 551.263f, 58.6164f, 0.0f }; -Locations TwilightEggs[] = +Position const TwilightEggs[] = { - {3219.28f, 669.121f, 88.5549f}, - {3221.55f, 682.852f, 90.5361f}, - {3239.77f, 685.94f, 90.3168f}, - {3250.33f, 669.749f, 88.7637f}, - {3246.6f, 642.365f, 84.8752f}, - {3233.68f, 653.117f, 85.7051f} + { 3219.28f, 669.121f, 88.5549f, 0.0f }, + { 3221.55f, 682.852f, 90.5361f, 0.0f }, + { 3239.77f, 685.94f, 90.3168f, 0.0f }, + { 3250.33f, 669.749f, 88.7637f, 0.0f }, + { 3246.6f, 642.365f, 84.8752f, 0.0f }, + { 3233.68f, 653.117f, 85.7051f, 0.0f } }; -Locations TwilightEggsSarth[] = + +Position const TwilightEggsSarth[] = { - {3252.73f, 515.762f, 58.5501f}, - {3256.56f, 521.119f, 58.6061f}, - {3255.63f, 527.513f, 58.7568f}, - {3264.90f, 525.865f, 58.6436f}, - {3264.26f, 516.364f, 58.8011f}, - {3257.54f, 502.285f, 58.2077f} + { 3252.73f, 515.762f, 58.5501f, 0.0f }, + { 3256.56f, 521.119f, 58.6061f, 0.0f }, + { 3255.63f, 527.513f, 58.7568f, 0.0f }, + { 3264.90f, 525.865f, 58.6436f, 0.0f }, + { 3264.26f, 516.364f, 58.8011f, 0.0f }, + { 3257.54f, 502.285f, 58.2077f, 0.0f } }; -enum SharedTextIDs +enum SharedTextIds { SAY_AGGRO = 0, SAY_SLAY = 1, SAY_DEATH = 2, SAY_BREATH = 3, SAY_RESPOND = 4, - SAY_SPECIAL = 5 + SAY_SPECIAL = 5, + WHISPER_OPEN_PORTAL = 6, + WHISPER_OPENED_PORTAL = 7 }; -enum DummyDragonEvents +enum DragonEvents { - EVENT_FREE_MOVEMENT = 1 + // Shared Events + EVENT_FREE_MOVEMENT = 1, + EVENT_SHADOW_FISSURE = 2, + EVENT_SHADOW_BREATH = 3, + + // Tenebron + EVENT_HATCH_EGGS = 4, + + // Shadron + EVENT_ACOLYTE_SHADRON = 5, + + // Vesperon + EVENT_ACOLYTE_VESPERON = 6 }; -//to control each dragons common abilities +// to control each dragons common abilities struct dummy_dragonAI : public ScriptedAI { dummy_dragonAI(Creature* creature) : ScriptedAI(creature) @@ -176,12 +173,22 @@ struct dummy_dragonAI : public ScriptedAI if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + events.Reset(); waypointId = 0; portalRespawnTime = 30000; _canMoveFree = false; _canLoot = true; } + void EnterCombat(Unit* /*who*/) OVERRIDE + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + + events.ScheduleEvent(EVENT_SHADOW_FISSURE, 5000); + events.ScheduleEvent(EVENT_SHADOW_BREATH, 20000); + } + void SetData(uint32 type, uint32 value) OVERRIDE { if (type == DATA_CAN_LOOT) @@ -218,14 +225,11 @@ struct dummy_dragonAI : public ScriptedAI return; } - // get amount of common points - uint32 commonWPCount = sizeof(dragonCommon)/sizeof(Waypoint); - // increase - waypointId = pointId+1; + waypointId = pointId + 1; // if we have reached a point bigger or equal to count, it mean we must reset to point 0 - if (waypointId >= commonWPCount) + if (waypointId >= MAX_WAYPOINT) { if (!_canMoveFree) _canMoveFree = true; @@ -236,28 +240,9 @@ struct dummy_dragonAI : public ScriptedAI events.ScheduleEvent(EVENT_FREE_MOVEMENT, 500); } - // used when open portal and spawn mobs in phase - void DoRaidWhisper(int32 iTextId) - { - Map* map = me->GetMap(); - - if (map && map->IsDungeon()) - { - Map::PlayerList const &PlayerList = map->GetPlayers(); - - if (!PlayerList.isEmpty()) - { - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - Talk(iTextId, i->GetSource()->GetGUID()); - } - } - } - // "opens" the portal and does the "opening" whisper void OpenPortal() { - int32 textId = 0; - // there are 4 portal spawn locations, each are expected to be spawned with negative spawntimesecs in database // using a grid search here seem to be more efficient than caching all four guids @@ -268,35 +253,32 @@ struct dummy_dragonAI : public ScriptedAI { case NPC_TENEBRON: { - textId = WHISPER_HATCH_EGGS; if (instance && !instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) { for (uint32 i = 0; i < 6; ++i) - me->SummonCreature(NPC_TWILIGHT_EGG, TwilightEggs[i].x, TwilightEggs[i].y, TwilightEggs[i].z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000); + me->SummonCreature(NPC_TWILIGHT_EGG, TwilightEggs[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000); } else { for (uint32 i = 0; i < 6; ++i) - me->SummonCreature(NPC_SARTHARION_TWILIGHT_EGG, TwilightEggsSarth[i].x, TwilightEggsSarth[i].y, TwilightEggsSarth[i].z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000); + me->SummonCreature(NPC_SARTHARION_TWILIGHT_EGG, TwilightEggsSarth[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000); } break; } case NPC_SHADRON: { - textId = WHISPER_OPEN_PORTAL; if (instance && !instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) - me->SummonCreature(NPC_ACOLYTE_OF_SHADRON, AcolyteofShadron.x, AcolyteofShadron.y, AcolyteofShadron.z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 28000); + me->SummonCreature(NPC_ACOLYTE_OF_SHADRON, AcolyteofShadron, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 28000); else - me->SummonCreature(NPC_ACOLYTE_OF_SHADRON, AcolyteofShadron2.x, AcolyteofShadron2.y, AcolyteofShadron2.z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 28000); + me->SummonCreature(NPC_ACOLYTE_OF_SHADRON, AcolyteofShadron2, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 28000); break; } case NPC_VESPERON: { - textId = WHISPER_OPEN_PORTAL; if (instance && !instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) { - if (Creature* acolyte = me->SummonCreature(NPC_ACOLYTE_OF_VESPERON, AcolyteofVesperon.x, AcolyteofVesperon.y, AcolyteofVesperon.z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000)) + if (Creature* acolyte = me->SummonCreature(NPC_ACOLYTE_OF_VESPERON, AcolyteofVesperon, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000)) { me->InterruptNonMeleeSpells(true); acolyte->InterruptNonMeleeSpells(true); @@ -305,7 +287,7 @@ struct dummy_dragonAI : public ScriptedAI } else { - if (Creature* acolyte = me->SummonCreature(NPC_ACOLYTE_OF_VESPERON, AcolyteofVesperon2.x, AcolyteofVesperon2.y, AcolyteofVesperon2.z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000)) + if (Creature* acolyte = me->SummonCreature(NPC_ACOLYTE_OF_VESPERON, AcolyteofVesperon2, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000)) { me->InterruptNonMeleeSpells(true); acolyte->InterruptNonMeleeSpells(true); @@ -313,11 +295,12 @@ struct dummy_dragonAI : public ScriptedAI } } - break; + break; } } - DoRaidWhisper(textId); + Talk(WHISPER_OPEN_PORTAL); + Talk(WHISPER_OPENED_PORTAL); // By using SetRespawnTime() we will actually "spawn" the object with our defined time. // Once time is up, portal will disappear again. @@ -328,6 +311,12 @@ struct dummy_dragonAI : public ScriptedAI // Refresh respawnTime so time again are set to 30secs? } + void KilledUnit(Unit* who) OVERRIDE + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + void JustDied(Unit* /*killer*/) OVERRIDE { if (!_canLoot) @@ -370,7 +359,7 @@ struct dummy_dragonAI : public ScriptedAI return; // Twilight Revenge to main boss - if (Unit* sartharion = Unit::GetUnit(*me, instance->GetData64(DATA_SARTHARION))) + if (Unit* sartharion = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_SARTHARION))) if (sartharion->IsAlive()) { sartharion->RemoveAurasDueToSpell(spellId); @@ -386,11 +375,30 @@ struct dummy_dragonAI : public ScriptedAI if (events.ExecuteEvent() == EVENT_FREE_MOVEMENT) { if (_canMoveFree && waypointId < MAX_WAYPOINT) - me->GetMotionMaster()->MovePoint(waypointId, dragonCommon[waypointId].m_fX, dragonCommon[waypointId].m_fY, dragonCommon[waypointId].m_fZ); + me->GetMotionMaster()->MovePoint(waypointId, dragonCommon[waypointId]); } } - private: + void ExecuteEvent(uint32 eventId) + { + switch (eventId) + { + 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)); + events.ScheduleEvent(eventId, urand(15000, 20000)); + break; + case EVENT_SHADOW_BREATH: + Talk(SAY_BREATH); + DoCastVictim(RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); + events.ScheduleEvent(eventId, urand(20000, 25000)); + break; + default: + break; + } + } + + protected: InstanceScript* instance; EventMap events; uint32 waypointId; @@ -403,13 +411,6 @@ struct dummy_dragonAI : public ScriptedAI ## Tenebron ######*/ -enum TenebronEvents -{ - EVENT_SHADOW_FISSURE_TENEBRON = 2, - EVENT_HATCH_EGGS = 3, - EVENT_SHADOW_BREATH_TENEBRON = 4 -}; - class npc_tenebron : public CreatureScript { public: @@ -424,23 +425,16 @@ public: dummy_dragonAI::Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_AGGRO); - DoZoneInCombat(); - events.ScheduleEvent(EVENT_SHADOW_FISSURE_TENEBRON, 5000); - events.ScheduleEvent(EVENT_HATCH_EGGS, 30000); - events.ScheduleEvent(EVENT_SHADOW_BREATH_TENEBRON, 20000); - } + dummy_dragonAI::EnterCombat(who); - void KilledUnit(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_SLAY); + events.ScheduleEvent(EVENT_HATCH_EGGS, 30000); } void UpdateAI(uint32 diff) OVERRIDE { - //if no target, update dummy and return + // if no target, update dummy and return if (!UpdateVictim()) { dummy_dragonAI::UpdateAI(diff); @@ -453,32 +447,23 @@ public: { switch (eventId) { - case EVENT_SHADOW_FISSURE_TENEBRON: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE)); - events.ScheduleEvent(EVENT_SHADOW_FISSURE_TENEBRON, urand(15000, 20000)); - break; case EVENT_HATCH_EGGS: OpenPortal(); events.ScheduleEvent(EVENT_HATCH_EGGS, 30000); break; - case EVENT_SHADOW_BREATH_TENEBRON: - Talk(SAY_BREATH); - DoCastVictim(RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); - events.ScheduleEvent(EVENT_SHADOW_BREATH_TENEBRON, urand(20000, 25000)); + default: + dummy_dragonAI::ExecuteEvent(eventId); break; } } + DoMeleeAttackIfReady(); } - - private: - EventMap events; }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tenebronAI(creature); + return GetObsidianSanctumAI<npc_tenebronAI>(creature); } }; @@ -486,13 +471,6 @@ public: ## Shadron ######*/ -enum ShadronEvents -{ - EVENT_SHADOW_FISSURE_SHADRON = 5, - EVENT_ACOLYTE_SHADRON = 6, - EVENT_SHADOW_BREATH_SHADRON = 7 -}; - class npc_shadron : public CreatureScript { public: @@ -500,10 +478,7 @@ public: struct npc_shadronAI : public dummy_dragonAI { - npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) - { - instance = creature->GetInstanceScript(); - } + npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) { } void Reset() OVERRIDE { @@ -515,27 +490,19 @@ public: if (me->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA)) me->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA); - if (instance) - instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); + instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_AGGRO); - DoZoneInCombat(); - events.ScheduleEvent(EVENT_SHADOW_FISSURE_SHADRON, 5000); - events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 60000); - events.ScheduleEvent(EVENT_SHADOW_BREATH_SHADRON, 20000); - } + dummy_dragonAI::EnterCombat(who); - void KilledUnit(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_SLAY); + events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 60000); } void UpdateAI(uint32 diff) OVERRIDE { - //if no target, update dummy and return + // if no target, update dummy and return if (!UpdateVictim()) { dummy_dragonAI::UpdateAI(diff); @@ -548,11 +515,6 @@ public: { switch (eventId) { - case EVENT_SHADOW_FISSURE_SHADRON: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE_H)); - events.ScheduleEvent(EVENT_SHADOW_FISSURE_SHADRON, urand(15000, 20000)); - break; case EVENT_ACOLYTE_SHADRON: if (instance->GetBossState(DATA_PORTAL_OPEN) == NOT_STARTED) events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 10000); @@ -563,30 +525,24 @@ public: OpenPortal(); - if (instance) - instance->SetBossState(DATA_PORTAL_OPEN, IN_PROGRESS); + instance->SetBossState(DATA_PORTAL_OPEN, IN_PROGRESS); events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, urand(60000, 65000)); } break; - case EVENT_SHADOW_BREATH_SHADRON: - Talk(SAY_BREATH); - DoCastVictim(RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); - events.ScheduleEvent(EVENT_SHADOW_BREATH_SHADRON, urand(20000, 25000)); + default: + dummy_dragonAI::ExecuteEvent(eventId); break; } } + DoMeleeAttackIfReady(); } - - private: - InstanceScript* instance; - EventMap events; }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_shadronAI(creature); + return GetObsidianSanctumAI<npc_shadronAI>(creature); } }; @@ -594,13 +550,6 @@ public: ## Vesperon ######*/ -enum VesperonEvents -{ - EVENT_SHADOW_FISSURE_VESPERON = 8, - EVENT_ACOLYTE_VESPERON = 9, - EVENT_SHADOW_BREATH_VESPERON = 10 -}; - class npc_vesperon : public CreatureScript { public: @@ -608,33 +557,23 @@ public: struct npc_vesperonAI : public dummy_dragonAI { - npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) - { - instance = creature->GetInstanceScript(); - } + npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) { } void Reset() OVERRIDE { dummy_dragonAI::Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* who) OVERRIDE { - Talk(SAY_AGGRO); - DoZoneInCombat(); - events.ScheduleEvent(EVENT_SHADOW_FISSURE_VESPERON, 5000); - events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 60000); - events.ScheduleEvent(EVENT_SHADOW_BREATH_VESPERON, 20000); - } + dummy_dragonAI::EnterCombat(who); - void KilledUnit(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_SLAY); + events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 60000); } void UpdateAI(uint32 diff) OVERRIDE { - //if no target, update dummy and return + // if no target, update dummy and return if (!UpdateVictim()) { dummy_dragonAI::UpdateAI(diff); @@ -647,11 +586,6 @@ public: { switch (eventId) { - case EVENT_SHADOW_FISSURE_VESPERON: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE_H)); - events.ScheduleEvent(EVENT_SHADOW_FISSURE_VESPERON, urand(15000, 20000)); - break; case EVENT_ACOLYTE_VESPERON: if (instance->GetBossState(DATA_PORTAL_OPEN) == IN_PROGRESS) events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 10000); @@ -662,24 +596,19 @@ public: events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, urand(60000, 70000)); } break; - case EVENT_SHADOW_BREATH_VESPERON: - Talk(SAY_BREATH); - DoCastVictim(RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); - events.ScheduleEvent(EVENT_SHADOW_BREATH_VESPERON, urand(20000, 25000)); + default: + dummy_dragonAI::ExecuteEvent(eventId); break; } } + DoMeleeAttackIfReady(); } - - private: - InstanceScript* instance; - EventMap events; }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_vesperonAI(creature); + return GetObsidianSanctumAI<npc_vesperonAI>(creature); } }; @@ -689,23 +618,21 @@ public: class npc_acolyte_of_shadron : public CreatureScript { -public: - npc_acolyte_of_shadron() : CreatureScript("npc_acolyte_of_shadron") { } - - struct npc_acolyte_of_shadronAI : public ScriptedAI - { - npc_acolyte_of_shadronAI(Creature* creature) : ScriptedAI(creature) - { - instance = creature->GetInstanceScript(); - } + public: + npc_acolyte_of_shadron() : CreatureScript("npc_acolyte_of_shadron") { } - void Reset() OVERRIDE + struct npc_acolyte_of_shadronAI : public ScriptedAI { - // Despawn the NPC automatically after 28 seconds - me->DespawnOrUnsummon(28000); + npc_acolyte_of_shadronAI(Creature* creature) : ScriptedAI(creature) + { + instance = creature->GetInstanceScript(); + } - if (instance) + void Reset() OVERRIDE { + // Despawn the NPC automatically after 28 seconds + me->DespawnOrUnsummon(28000); + //if not solo fight, buff main boss, else place debuff on mini-boss. both spells TARGET_SCRIPT if (instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) { @@ -717,14 +644,11 @@ public: if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON))) shadron->AddAura(SPELL_GIFT_OF_TWILIGTH_SHA, shadron); } - } - me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); - } + me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); + } - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (instance) + void JustDied(Unit* /*killer*/) OVERRIDE { if (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON))) instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); @@ -732,7 +656,7 @@ public: Map* map = me->GetMap(); if (map->IsDungeon()) { - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const& PlayerList = map->GetPlayers(); if (PlayerList.isEmpty()) return; @@ -746,7 +670,7 @@ public: i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT); i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER); } - } + } } // not solo fight, so main boss has debuff @@ -759,24 +683,23 @@ public: if (debuffTarget->IsAlive() && debuffTarget->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA)) debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA); } - } - void UpdateAI(uint32 /*diff*/) OVERRIDE - { - if (!UpdateVictim()) - return; + void UpdateAI(uint32 /*diff*/) OVERRIDE + { + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } + DoMeleeAttackIfReady(); + } - private: - InstanceScript* instance; - }; + private: + InstanceScript* instance; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_acolyte_of_shadronAI(creature); - } + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return GetObsidianSanctumAI<npc_acolyte_of_shadronAI>(creature); + } }; /*###### @@ -785,34 +708,31 @@ public: class npc_acolyte_of_vesperon : public CreatureScript { -public: - npc_acolyte_of_vesperon() : CreatureScript("npc_acolyte_of_vesperon") { } + public: + npc_acolyte_of_vesperon() : CreatureScript("npc_acolyte_of_vesperon") { } - struct npc_acolyte_of_vesperonAI : public ScriptedAI - { - npc_acolyte_of_vesperonAI(Creature* creature) : ScriptedAI(creature) + struct npc_acolyte_of_vesperonAI : public ScriptedAI { - instance = creature->GetInstanceScript(); - } + npc_acolyte_of_vesperonAI(Creature* creature) : ScriptedAI(creature) + { + instance = creature->GetInstanceScript(); + } - void Reset() OVERRIDE - { - // Despawn the NPC automatically after 28 seconds - me->DespawnOrUnsummon(28000); + void Reset() OVERRIDE + { + // Despawn the NPC automatically after 28 seconds + me->DespawnOrUnsummon(28000); - if (instance) me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); - DoCast(me, SPELL_TWILIGHT_TORMENT_VESP_ACO); - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP_ACO); + DoCast(me, SPELL_TWILIGHT_TORMENT_VESP_ACO); + } - // remove twilight torment on Vesperon - if (instance) + void JustDied(Unit* /*killer*/) OVERRIDE { + me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP_ACO); + + // remove twilight torment on Vesperon if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON))) { instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); @@ -847,24 +767,23 @@ public: instance->DoRemoveAurasDueToSpellOnPlayers(57935); instance->DoRemoveAurasDueToSpellOnPlayers(58835); // Components of spell Twilight Torment } - } - void UpdateAI(uint32 /*diff*/) OVERRIDE - { - if (!UpdateVictim()) - return; + void UpdateAI(uint32 /*diff*/) OVERRIDE + { + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } + DoMeleeAttackIfReady(); + } - private: - InstanceScript* instance; - }; + private: + InstanceScript* instance; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_acolyte_of_vesperonAI(creature); - } + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return GetObsidianSanctumAI<npc_acolyte_of_vesperonAI>(creature); + } }; /*###### @@ -891,8 +810,7 @@ public: void Reset() OVERRIDE { - if (instance) - me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); + me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); events.ScheduleEvent(EVENT_TWILIGHT_EGGS, 20000); } @@ -933,7 +851,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_twilight_eggsAI(creature); + return GetObsidianSanctumAI<npc_twilight_eggsAI>(creature); } }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h index 8cfb3931372..d8f49a06578 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h @@ -15,8 +15,8 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef DEF_OBSIDIAN_SANCTUM_H -#define DEF_OBSIDIAN_SANCTUM_H +#ifndef OBSIDIAN_SANCTUM_H_ +#define OBSIDIAN_SANCTUM_H_ #define OSScriptName "instance_obsidian_sanctum" @@ -45,4 +45,10 @@ enum GameObjectIds GO_TWILIGHT_PORTAL = 193988 }; -#endif +template<class AI> +AI* GetObsidianSanctumAI(Creature* creature) +{ + return GetInstanceAI<AI>(creature, OSScriptName); +} + +#endif // OBSIDIAN_SANCTUM_H_ diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index f968add0b5b..3b706cdef25 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -852,9 +852,9 @@ class npc_halion_controller : public CreatureScript halion->CastSpell(halion, GetSpell(_materialCorporealityValue, itr == DATA_TWILIGHT_HALION), true); if (itr == DATA_TWILIGHT_HALION) - halion->AI()->Talk(oldValue < _materialCorporealityValue ? EMOTE_CORPOREALITY_TOT : EMOTE_CORPOREALITY_TIT, halion->GetGUID()); + halion->AI()->Talk(oldValue < _materialCorporealityValue ? EMOTE_CORPOREALITY_TOT : EMOTE_CORPOREALITY_TIT, halion); else // if (itr == DATA_HALION) - halion->AI()->Talk(oldValue > _materialCorporealityValue ? EMOTE_CORPOREALITY_POT : EMOTE_CORPOREALITY_PIP, halion->GetGUID()); + halion->AI()->Talk(oldValue > _materialCorporealityValue ? EMOTE_CORPOREALITY_POT : EMOTE_CORPOREALITY_PIP, halion); } } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index f6fd1c14a9b..39be0eebf60 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -248,7 +248,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_eadricAI(creature); + return GetInstanceAI<boss_eadricAI>(creature); } }; @@ -406,7 +406,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_paletressAI(creature); + return GetInstanceAI<boss_paletressAI>(creature); } }; @@ -589,7 +589,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_argent_soldierAI(creature); + return GetInstanceAI<npc_argent_soldierAI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 1922ad26060..468ab681389 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -300,7 +300,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_black_knightAI(creature); + return GetInstanceAI<boss_black_knightAI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 8bff123af75..3f86e75a410 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -300,7 +300,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new generic_vehicleAI_toc5AI(creature); + return GetInstanceAI<generic_vehicleAI_toc5AI>(creature); } }; @@ -433,7 +433,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_warrior_toc5AI(creature); + return GetInstanceAI<boss_warrior_toc5AI>(creature); } }; @@ -572,7 +572,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_mage_toc5AI(creature); + return GetInstanceAI<boss_mage_toc5AI>(creature); } }; @@ -719,7 +719,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_shaman_toc5AI(creature); + return GetInstanceAI<boss_shaman_toc5AI>(creature); } }; @@ -875,7 +875,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_hunter_toc5AI(creature); + return GetInstanceAI<boss_hunter_toc5AI>(creature); } }; @@ -996,7 +996,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_rouge_toc5AI(creature); + return GetInstanceAI<boss_rouge_toc5AI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index 00b312aa407..2add4e9a1dd 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -472,7 +472,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_announcer_toc5AI(creature); + return GetInstanceAI<npc_announcer_toc5AI>(creature); } bool OnGossipHello(Player* player, Creature* creature) OVERRIDE 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 53b11de921a..ddd906c790c 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -257,7 +257,7 @@ class boss_anubarak_trial : public CreatureScript case NPC_SPIKE: summoned->CombatStart(target); summoned->SetDisplayId(summoned->GetCreatureTemplate()->Modelid1); - Talk(EMOTE_SPIKE, target->GetGUID()); + Talk(EMOTE_SPIKE, target); break; default: break; @@ -423,7 +423,7 @@ class boss_anubarak_trial : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_anubarak_trialAI(creature); + return GetInstanceAI<boss_anubarak_trialAI>(creature); }; }; @@ -495,7 +495,7 @@ class npc_swarm_scarab : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_swarm_scarabAI(creature); + return GetInstanceAI<npc_swarm_scarabAI>(creature); }; }; @@ -583,7 +583,7 @@ class npc_nerubian_burrower : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_nerubian_burrowerAI(creature); + return GetInstanceAI<npc_nerubian_burrowerAI>(creature); }; }; @@ -689,7 +689,7 @@ class npc_anubarak_spike : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { StartChase(target); - Talk(EMOTE_SPIKE, who->GetGUID()); + Talk(EMOTE_SPIKE, who); } } @@ -719,7 +719,7 @@ class npc_anubarak_spike : public CreatureScript if (Unit* target2 = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { StartChase(target2); - Talk(EMOTE_SPIKE, target2->GetGUID()); + Talk(EMOTE_SPIKE, target2); } _phaseSwitchTimer = 7*IN_MILLISECONDS; return; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 4c73d1a5f55..db926c32f96 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -539,7 +539,7 @@ class boss_toc_champion_controller : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_toc_champion_controllerAI(creature); + return GetInstanceAI<boss_toc_champion_controllerAI>(creature); } }; @@ -839,7 +839,7 @@ class npc_toc_druid : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_druidAI(creature); + return GetInstanceAI<npc_toc_druidAI>(creature); } }; @@ -932,7 +932,7 @@ class npc_toc_shaman : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_shamanAI(creature); + return GetInstanceAI<npc_toc_shamanAI>(creature); } }; @@ -1036,7 +1036,7 @@ class npc_toc_paladin : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_paladinAI(creature); + return GetInstanceAI<npc_toc_paladinAI>(creature); } }; @@ -1121,7 +1121,7 @@ class npc_toc_priest : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_priestAI(creature); + return GetInstanceAI<npc_toc_priestAI>(creature); } }; @@ -1219,7 +1219,7 @@ class npc_toc_shadow_priest : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_shadow_priestAI(creature); + return GetInstanceAI<npc_toc_shadow_priestAI>(creature); } }; @@ -1310,7 +1310,7 @@ class npc_toc_warlock : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_warlockAI(creature); + return GetInstanceAI<npc_toc_warlockAI>(creature); } }; @@ -1404,7 +1404,7 @@ class npc_toc_mage : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_mageAI(creature); + return GetInstanceAI<npc_toc_mageAI>(creature); } }; @@ -1506,7 +1506,7 @@ class npc_toc_hunter : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_hunterAI(creature); + return GetInstanceAI<npc_toc_hunterAI>(creature); } }; @@ -1598,7 +1598,7 @@ class npc_toc_boomkin : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_boomkinAI(creature); + return GetInstanceAI<npc_toc_boomkinAI>(creature); } }; @@ -1702,7 +1702,7 @@ class npc_toc_warrior : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_warriorAI(creature); + return GetInstanceAI<npc_toc_warriorAI>(creature); } }; @@ -1798,7 +1798,7 @@ class npc_toc_dk : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_dkAI(creature); + return GetInstanceAI<npc_toc_dkAI>(creature); } }; @@ -1903,7 +1903,7 @@ class npc_toc_rogue : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_rogueAI(creature); + return GetInstanceAI<npc_toc_rogueAI>(creature); } }; @@ -2029,7 +2029,7 @@ class npc_toc_enh_shaman : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_enh_shamanAI(creature); + return GetInstanceAI<npc_toc_enh_shamanAI>(creature); } }; @@ -2135,7 +2135,7 @@ class npc_toc_retro_paladin : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_retro_paladinAI(creature); + return GetInstanceAI<npc_toc_retro_paladinAI>(creature); } }; @@ -2187,7 +2187,7 @@ class npc_toc_pet_warlock : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_pet_warlockAI(creature); + return GetInstanceAI<npc_toc_pet_warlockAI>(creature); } }; @@ -2227,7 +2227,7 @@ class npc_toc_pet_hunter : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toc_pet_hunterAI(creature); + return GetInstanceAI<npc_toc_pet_hunterAI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 4cea1ea5b06..55372e73721 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -175,7 +175,7 @@ class boss_jaraxxus : public CreatureScript case EVENT_INCINERATE_FLESH: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_LORD_HITTIN)) { - Talk(EMOTE_INCINERATE, target->GetGUID()); + Talk(EMOTE_INCINERATE, target); Talk(SAY_INCINERATE); DoCast(target, SPELL_INCINERATE_FLESH); } @@ -188,7 +188,7 @@ class boss_jaraxxus : public CreatureScript case EVENT_LEGION_FLAME: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_LORD_HITTIN)) { - Talk(EMOTE_LEGION_FLAME, target->GetGUID()); + Talk(EMOTE_LEGION_FLAME, target); DoCast(target, SPELL_LEGION_FLAME); } events.ScheduleEvent(EVENT_LEGION_FLAME, 30*IN_MILLISECONDS); @@ -214,7 +214,7 @@ class boss_jaraxxus : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_jaraxxusAI(creature); + return GetInstanceAI<boss_jaraxxusAI>(creature); } }; @@ -250,7 +250,7 @@ class npc_legion_flame : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_legion_flameAI(creature); + return GetInstanceAI<npc_legion_flameAI>(creature); } }; @@ -355,7 +355,7 @@ class npc_fel_infernal : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_fel_infernalAI(creature); + return GetInstanceAI<npc_fel_infernalAI>(creature); } }; @@ -488,7 +488,7 @@ class npc_mistress_of_pain : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_mistress_of_painAI(creature); + return GetInstanceAI<npc_mistress_of_painAI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 3fdfc0c8ae3..3784c69225f 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -284,7 +284,7 @@ class boss_gormok : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gormokAI(creature); + return GetInstanceAI<boss_gormokAI>(creature); } }; @@ -454,7 +454,7 @@ class npc_snobold_vassal : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_snobold_vassalAI(creature); + return GetInstanceAI<npc_snobold_vassalAI>(creature); } }; @@ -490,7 +490,7 @@ class npc_firebomb : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_firebombAI(creature); + return GetInstanceAI<npc_firebombAI>(creature); } }; @@ -712,7 +712,7 @@ class boss_acidmaw : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_acidmawAI(creature); + return GetInstanceAI<boss_acidmawAI>(creature); } }; @@ -779,7 +779,7 @@ class boss_dreadscale : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_dreadscaleAI(creature); + return GetInstanceAI<boss_dreadscaleAI>(creature); } }; @@ -820,7 +820,7 @@ class npc_slime_pool : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_slime_poolAI(creature); + return GetInstanceAI<npc_slime_poolAI>(creature); } }; @@ -873,7 +873,7 @@ class boss_icehowl : public CreatureScript events.ScheduleEvent(EVENT_MASSIVE_CRASH, 30*IN_MILLISECONDS); _movementStarted = false; _movementFinish = false; - _trampleCasted = false; + _trampleCast = false; _trampleTargetGUID = 0; _trampleTargetX = 0; _trampleTargetY = 0; @@ -961,10 +961,10 @@ class boss_icehowl : public CreatureScript { if (spell->Id == SPELL_TRAMPLE && target->GetTypeId() == TYPEID_PLAYER) { - if (!_trampleCasted) + if (!_trampleCast) { DoCast(me, SPELL_FROTHING_RAGE, true); - _trampleCasted = true; + _trampleCast = true; } } } @@ -1025,7 +1025,7 @@ class boss_icehowl : public CreatureScript me->AttackStop(); _trampleTargetGUID = target->GetGUID(); me->SetTarget(_trampleTargetGUID); - _trampleCasted = false; + _trampleCast = false; SetCombatMovement(false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); me->GetMotionMaster()->Clear(); @@ -1047,7 +1047,7 @@ class boss_icehowl : public CreatureScript { me->StopMoving(); me->AttackStop(); - _trampleCasted = false; + _trampleCast = false; _movementStarted = true; _trampleTargetX = target->GetPositionX(); _trampleTargetY = target->GetPositionY(); @@ -1068,7 +1068,8 @@ class boss_icehowl : public CreatureScript case 4: me->StopMoving(); me->AttackStop(); - Talk(EMOTE_TRAMPLE_START, _trampleTargetGUID); + if (Player* target = ObjectAccessor::GetPlayer(*me, _trampleTargetGUID)) + Talk(EMOTE_TRAMPLE_START, target); me->GetMotionMaster()->MoveCharge(_trampleTargetX, _trampleTargetY, _trampleTargetZ, 42, 1); me->SetTarget(0); _stage = 5; @@ -1099,7 +1100,7 @@ class boss_icehowl : public CreatureScript } break; case 6: - if (!_trampleCasted) + if (!_trampleCast) { DoCast(me, SPELL_STAGGERED_DAZE); Talk(EMOTE_TRAMPLE_CRASH); @@ -1130,13 +1131,13 @@ class boss_icehowl : public CreatureScript uint64 _trampleTargetGUID; bool _movementStarted; bool _movementFinish; - bool _trampleCasted; + bool _trampleCast; uint8 _stage; }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_icehowlAI(creature); + return GetInstanceAI<boss_icehowlAI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 0674696a033..88a404e8dfd 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -451,7 +451,7 @@ class boss_fjola : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_fjolaAI(creature); + return GetInstanceAI<boss_fjolaAI>(creature); } }; @@ -486,7 +486,7 @@ class boss_eydis : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_eydisAI(creature); + return GetInstanceAI<boss_eydisAI>(creature); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index ff7092590e7..cd3a4e26924 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -357,7 +357,7 @@ class boss_lich_king_toc : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lich_king_tocAI(creature); + return GetInstanceAI<boss_lich_king_tocAI>(creature); } }; @@ -375,7 +375,7 @@ class npc_fizzlebang_toc : public CreatureScript void JustDied(Unit* killer) OVERRIDE { - Talk(SAY_STAGE_1_06, killer->GetGUID()); + Talk(SAY_STAGE_1_06, killer); _instance->SetData(TYPE_EVENT, 1180); if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) { @@ -531,7 +531,7 @@ class npc_fizzlebang_toc : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_fizzlebang_tocAI(creature); + return GetInstanceAI<npc_fizzlebang_tocAI>(creature); } }; @@ -819,7 +819,7 @@ class npc_tirion_toc : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tirion_tocAI(creature); + return GetInstanceAI<npc_tirion_tocAI>(creature); } }; @@ -903,7 +903,7 @@ class npc_garrosh_toc : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_garrosh_tocAI(creature); + return GetInstanceAI<npc_garrosh_tocAI>(creature); } }; @@ -987,7 +987,7 @@ class npc_varian_toc : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_varian_tocAI(creature); + return GetInstanceAI<npc_varian_tocAI>(creature); } }; diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index f8f0752184e..42f408861e1 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -27,7 +27,7 @@ enum Spells { SPELL_BELLOWING_ROAR = 22686, // fears the group, can be resisted/dispelled SPELL_GRIEVOUS_BITE = 48920, - SPELL_MANGLING_SLASH = 48873, // casted on the current tank, adds debuf + SPELL_MANGLING_SLASH = 48873, // cast on the current tank, adds debuf SPELL_FEARSOME_ROAR = 48849, SPELL_PIERCING_SLASH = 48878, // debuff --> Armor reduced by 75% SPELL_RAPTOR_CALL = 59416, // dummy diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index efca060b67c..78399749fe6 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -32,7 +32,7 @@ enum Spells SPELL_CURSE_OF_LIFE = 49527, SPELL_RAIN_OF_FIRE = 49518, SPELL_SHADOW_VOLLEY = 49528, - SPELL_DECAY_FLESH = 49356, // casted at end of phase 1, starts phase 2 + SPELL_DECAY_FLESH = 49356, // cast at end of phase 1, starts phase 2 // Flesh Spells (phase 2) SPELL_GIFT_OF_THARON_JA = 52509, SPELL_CLEAR_GIFT_OF_THARON_JA = 53242, diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 2dedc986b0c..7d1fbc752be 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -188,7 +188,7 @@ class boss_bronjahm : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_bronjahmAI(creature); + return GetInstanceAI<boss_bronjahmAI>(creature); } }; @@ -231,7 +231,7 @@ class npc_corrupted_soul_fragment : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_corrupted_soul_fragmentAI(creature); + return GetInstanceAI<npc_corrupted_soul_fragmentAI>(creature); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index 7d923e7686f..52ab910fb9e 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -345,7 +345,7 @@ class boss_devourer_of_souls : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_devourer_of_soulsAI(creature); + return GetInstanceAI<boss_devourer_of_soulsAI>(creature); } }; @@ -480,9 +480,7 @@ class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScript class achievement_three_faced : public AchievementCriteriaScript { public: - achievement_three_faced() : AchievementCriteriaScript("achievement_three_faced") - { - } + achievement_three_faced() : AchievementCriteriaScript("achievement_three_faced") { } bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE { diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index cfa149c134f..0fc5ee29ca0 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -193,7 +193,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_sylvanas_fosAI(creature); + return GetInstanceAI<npc_sylvanas_fosAI>(creature); } }; @@ -330,7 +330,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_jaina_fosAI(creature); + return GetInstanceAI<npc_jaina_fosAI>(creature); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index e2d285f7306..fbdd7f96fbe 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -52,7 +52,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_falricAI(creature); + return GetInstanceAI<boss_falricAI>(creature); } struct boss_falricAI : public boss_horAI diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index a87b7b6d93d..b13cae79434 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -51,7 +51,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_marwynAI(creature); + return GetInstanceAI<boss_marwynAI>(creature); } struct boss_marwynAI : public boss_horAI diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 96b772df5a9..2561dca0a4a 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1283,7 +1283,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ghostly_priestAI(creature); + return GetInstanceAI<npc_ghostly_priestAI>(creature); } }; @@ -1355,7 +1355,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_phantom_mageAI(creature); + return GetInstanceAI<npc_phantom_mageAI>(creature); } }; @@ -1447,7 +1447,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_shadowy_mercenaryAI(creature); + return GetInstanceAI<npc_shadowy_mercenaryAI>(creature); } }; @@ -1499,7 +1499,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_spectral_footmanAI(creature); + return GetInstanceAI<npc_spectral_footmanAI>(creature); } }; @@ -1558,7 +1558,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tortured_riflemanAI(creature); + return GetInstanceAI<npc_tortured_riflemanAI>(creature); } }; @@ -1674,7 +1674,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_frostworn_generalAI(creature); + return GetInstanceAI<npc_frostworn_generalAI>(creature); } }; @@ -1901,7 +1901,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_raging_ghoulAI(creature); + return GetInstanceAI<npc_raging_ghoulAI>(creature); } }; @@ -2021,7 +2021,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_risen_witch_doctorAI(creature); + return GetInstanceAI<npc_risen_witch_doctorAI>(creature); } }; @@ -2111,7 +2111,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_lumbering_abominationAI(creature); + return GetInstanceAI<npc_lumbering_abominationAI>(creature); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 4a9a41f6f8e..5bf50cbb46f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -189,7 +189,7 @@ class boss_garfrost : public CreatureScript case EVENT_THROW_SARONITE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { - Talk(SAY_THROW_SARONITE, target->GetGUID()); + Talk(SAY_THROW_SARONITE, target); DoCast(target, SPELL_THROW_SARONITE); } events.ScheduleEvent(EVENT_THROW_SARONITE, urand(12500, 20000)); @@ -201,7 +201,7 @@ class boss_garfrost : public CreatureScript case EVENT_DEEP_FREEZE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { - Talk(SAY_CAST_DEEP_FREEZE, target->GetGUID()); + Talk(SAY_CAST_DEEP_FREEZE, target); DoCast(target, SPELL_DEEP_FREEZE); } events.ScheduleEvent(EVENT_DEEP_FREEZE, 35000, 0, PHASE_THREE); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 3b3f65c7704..f2ee24f5b86 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -622,7 +622,7 @@ class spell_krick_pursuit : public SpellScriptLoader { if (Unit* target = ick->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true)) { - ick->AI()->Talk(SAY_ICK_CHASE_1, target->GetGUID()); + ick->AI()->Talk(SAY_ICK_CHASE_1, target); ick->AddAura(GetSpellInfo()->Id, target); CAST_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->getThreatManager().getThreat(target)); ick->AddThreat(target, float(GetEffectValue())); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 48cc6f89a13..5a58dfa1b4a 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -265,7 +265,7 @@ class boss_tyrannus : public CreatureScript Talk(SAY_MARK_RIMEFANG_1); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) { - Talk(SAY_MARK_RIMEFANG_2, target->GetGUID()); + Talk(SAY_MARK_RIMEFANG_2, target); DoCast(target, SPELL_MARK_OF_RIMEFANG); } events.ScheduleEvent(EVENT_MARK_OF_RIMEFANG, urand(24000, 26000)); diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 93030492caf..f6973581a59 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -248,7 +248,7 @@ class boss_drakkari_colossus : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_drakkari_colossusAI(creature); + return GetInstanceAI<boss_drakkari_colossusAI>(creature); } }; @@ -381,7 +381,7 @@ class boss_drakkari_elemental : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_drakkari_elementalAI(creature); + return GetInstanceAI<boss_drakkari_elementalAI>(creature); } }; @@ -392,7 +392,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_living_mojoAI(creature); + return GetInstanceAI<npc_living_mojoAI>(creature); } struct npc_living_mojoAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index c11db7146d1..e597c4c9e96 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -37,7 +37,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_eckAI(creature); + return GetInstanceAI<boss_eckAI>(creature); } struct boss_eckAI : public ScriptedAI @@ -141,7 +141,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ruins_dwellerAI(creature); + return GetInstanceAI<npc_ruins_dwellerAI>(creature); } struct npc_ruins_dwellerAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 7a5520ab145..0337dc07d8a 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -70,7 +70,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gal_darahAI(creature); + return GetInstanceAI<boss_gal_darahAI>(creature); } struct boss_gal_darahAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index 0ccaea316ef..2b621a70a68 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -54,7 +54,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_moorabiAI(creature); + return GetInstanceAI<boss_moorabiAI>(creature); } struct boss_moorabiAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 441149c6dd8..0dcc2ca9c6e 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -76,7 +76,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_slad_ranAI(creature); + return GetInstanceAI<boss_slad_ranAI>(creature); } struct boss_slad_ranAI : public ScriptedAI @@ -184,9 +184,10 @@ public: instance->SetData(DATA_SLAD_RAN_EVENT, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void JustSummoned(Creature* summoned) OVERRIDE diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 0c859236965..5df69097f9b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -666,7 +666,7 @@ class boss_prince_taldaram_icc : public CreatureScript target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); // too bad for you raiders, its going to boom if (summon->GetEntry() == NPC_BALL_OF_INFERNO_FLAME && target) - Talk(EMOTE_TALDARAM_FLAME, target->GetGUID()); + Talk(EMOTE_TALDARAM_FLAME, target); if (target) summon->AI()->SetGUID(target->GetGUID()); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 1e5919536f3..65622411623 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -412,7 +412,7 @@ class boss_blood_queen_lana_thel : public CreatureScript case EVENT_SWARMING_SHADOWS: if (Player* target = SelectRandomTarget(false)) { - Talk(EMOTE_SWARMING_SHADOWS, target->GetGUID()); + Talk(EMOTE_SWARMING_SHADOWS, target); Talk(SAY_SWARMING_SHADOWS); DoCast(target, SPELL_SWARMING_SHADOWS); } @@ -601,7 +601,7 @@ class spell_blood_queen_frenzied_bloodthirst : public SpellScriptLoader { if (InstanceScript* instance = GetTarget()->GetInstanceScript()) if (Creature* bloodQueen = ObjectAccessor::GetCreature(*GetTarget(), instance->GetData64(DATA_BLOOD_QUEEN_LANA_THEL))) - bloodQueen->AI()->Talk(EMOTE_BLOODTHIRST, GetTarget()->GetGUID()); + bloodQueen->AI()->Talk(EMOTE_BLOODTHIRST, GetTarget()); } void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index cdcd8ed796a..92c97ce6abf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -739,7 +739,7 @@ class npc_putricide_oozeAI : public ScriptedAI if (!UpdateVictim() && !_newTargetSelectTimer) return; - if (!_newTargetSelectTimer && !me->IsNonMeleeSpellCasted(false, false, true, false, true)) + if (!_newTargetSelectTimer && !me->IsNonMeleeSpellCast(false, false, true, false, true)) _newTargetSelectTimer = 1000; DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index eddc67b5f5e..88a00e78aae 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -538,7 +538,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader { if (Creature* caster = GetCaster()->ToCreature()) if (Unit* target = GetHitUnit()) - caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target->GetGUID()); + caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target); } void Register() OVERRIDE diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 1b03022c9bd..64e87ac8873 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -484,7 +484,7 @@ class boss_sindragosa : public CreatureScript case EVENT_ICE_TOMB: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, FrostBeaconSelector(me))) { - Talk(EMOTE_WARN_FROZEN_ORB, target->GetGUID()); + Talk(EMOTE_WARN_FROZEN_ORB, target); DoCast(target, SPELL_ICE_TOMB_DUMMY, true); } events.ScheduleEvent(EVENT_ICE_TOMB, urand(16000, 23000)); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index d8a95d5c1fb..5d1bd1ff934 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -934,7 +934,7 @@ class boss_the_lich_king : public CreatureScript case EVENT_NECROTIC_PLAGUE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, NecroticPlagueTargetCheck(me, NECROTIC_PLAGUE_LK, NECROTIC_PLAGUE_PLR))) { - Talk(EMOTE_NECROTIC_PLAGUE_WARNING, target->GetGUID()); + Talk(EMOTE_NECROTIC_PLAGUE_WARNING, target); DoCast(target, SPELL_NECROTIC_PLAGUE); } events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, urand(30000, 33000), 0, PHASE_ONE); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index bbd700b7edd..9684c7d9cdf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -666,7 +666,7 @@ class npc_the_lich_king_controller : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_the_lich_king_controllerAI(creature); + return GetInstanceAI<npc_the_lich_king_controllerAI>(creature); } }; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 9116222a4e0..a04e98e74bc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -628,7 +628,7 @@ class npc_rotting_frost_giant : public CreatureScript case EVENT_DEATH_PLAGUE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) { - Talk(EMOTE_DEATH_PLAGUE_WARNING, target->GetGUID()); + Talk(EMOTE_DEATH_PLAGUE_WARNING, target); DoCast(target, SPELL_DEATH_PLAGUE); } _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000); @@ -841,7 +841,7 @@ class boss_sister_svalna : public CreatureScript if (spell->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) { me->RemoveAurasDueToSpell(SPELL_AETHER_SHIELD); - Talk(EMOTE_SVALNA_BROKEN_SHIELD, caster->GetGUID()); + Talk(EMOTE_SVALNA_BROKEN_SHIELD, caster); } } @@ -867,7 +867,7 @@ class boss_sister_svalna : public CreatureScript case SPELL_IMPALING_SPEAR: if (TempSummon* summon = target->SummonCreature(NPC_IMPALING_SPEAR, *target)) { - Talk(EMOTE_SVALNA_IMPALE, target->GetGUID()); + Talk(EMOTE_SVALNA_IMPALE, target); summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false); summon->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index b873b3ee15c..f6d4b5f786e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -59,7 +59,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_anubrekhanAI(creature); + return GetInstanceAI<boss_anubrekhanAI>(creature); } struct boss_anubrekhanAI : public BossAI diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index b723c2f4139..2d216c78ea8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -216,7 +216,7 @@ class npc_faerlina_add : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_faerlina_addAI(creature); + return GetInstanceAI<npc_faerlina_addAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 9b336a77e26..04dba1d9fab 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -89,7 +89,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_four_horsemenAI(creature); + return GetInstanceAI<boss_four_horsemenAI>(creature); } struct boss_four_horsemenAI : public BossAI diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index 8980cd063c0..3f751e86149 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -76,7 +76,7 @@ public: { SetGazeOn(who); /// @todo use a script text - me->MonsterTextEmote(EMOTE_NEARBY, 0, true); + me->MonsterTextEmote(EMOTE_NEARBY, NULL, true); } else BossAI::MoveInLineOfSight(who); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index f76c46d96ff..46c16320547 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -500,7 +500,7 @@ class boss_gothik : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gothikAI(creature); + return GetInstanceAI<boss_gothikAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index a8e2783602f..3dad2798d2f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -61,7 +61,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_heiganAI(creature); + return GetInstanceAI<boss_heiganAI>(creature); } struct boss_heiganAI : public BossAI diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index f9efdfce28b..e112be27b21 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -649,7 +649,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kelthuzadAI(creature); + return GetInstanceAI<boss_kelthuzadAI>(creature); } }; @@ -769,7 +769,7 @@ class npc_kelthuzad_abomination : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_kelthuzad_abominationAI(creature); + return GetInstanceAI<npc_kelthuzad_abominationAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index d90db5e077e..d653be216dc 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -37,23 +37,20 @@ enum Noth NPC_GUARDIAN = 16981 }; -#define SPELL_BLINK RAND(29208, 29209, 29210, 29211) +#define SPELL_BLINK RAND(29208, 29209, 29210, 29211) // Teleport position of Noth on his balcony -#define TELE_X 2631.370f -#define TELE_Y -3529.680f -#define TELE_Z 274.040f -#define TELE_O 6.277f +Position const Teleport = { 2631.370f, -3529.680f, 274.040f, 6.277f }; #define MAX_SUMMON_POS 5 -const float SummonPos[MAX_SUMMON_POS][4] = +Position const SummonPos[MAX_SUMMON_POS] = { - {2728.12f, -3544.43f, 261.91f, 6.04f}, - {2729.05f, -3544.47f, 261.91f, 5.58f}, - {2728.24f, -3465.08f, 264.20f, 3.56f}, - {2704.11f, -3456.81f, 265.53f, 4.51f}, - {2663.56f, -3464.43f, 262.66f, 5.20f}, + { 2728.12f, -3544.43f, 261.91f, 6.04f }, + { 2729.05f, -3544.47f, 261.91f, 5.58f }, + { 2728.24f, -3465.08f, 264.20f, 3.56f }, + { 2704.11f, -3456.81f, 265.53f, 4.51f }, + { 2663.56f, -3464.43f, 262.66f, 5.20f } }; enum Events @@ -65,7 +62,7 @@ enum Events EVENT_WARRIOR, EVENT_BALCONY, EVENT_WAVE, - EVENT_GROUND, + EVENT_GROUND }; class boss_noth : public CreatureScript @@ -73,17 +70,10 @@ class boss_noth : public CreatureScript public: boss_noth() : CreatureScript("boss_noth") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_nothAI(creature); - } - struct boss_nothAI : public BossAI { boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) { } - uint32 waveCount, balconyCount; - void Reset() OVERRIDE { me->SetReactState(REACT_AGGRESSIVE); @@ -104,6 +94,7 @@ public: me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); DoZoneInCombat(); + if (me->getThreatManager().isThreatListEmpty()) EnterEvadeMode(); else @@ -138,11 +129,7 @@ public: void SummonUndead(uint32 entry, uint32 num) { for (uint32 i = 0; i < num; ++i) - { - uint32 pos = rand()%MAX_SUMMON_POS; - me->SummonCreature(entry, SummonPos[pos][0], SummonPos[pos][1], SummonPos[pos][2], - SummonPos[pos][3], TEMPSUMMON_CORPSE_DESPAWN, 60000); - } + me->SummonCreature(entry, SummonPos[rand()%MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000); } void UpdateAI(uint32 diff) OVERRIDE @@ -152,6 +139,9 @@ public: events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) @@ -176,7 +166,7 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->AttackStop(); me->RemoveAllAuras(); - me->NearTeleportTo(TELE_X, TELE_Y, TELE_Z, TELE_O); + me->NearTeleportTo(Teleport.GetPositionX(), Teleport.GetPositionY(), Teleport.GetPositionZ(), Teleport.GetOrientation()); events.Reset(); events.ScheduleEvent(EVENT_WAVE, urand(2000, 5000)); waveCount = 0; @@ -185,12 +175,20 @@ public: Talk(SAY_SUMMON); switch (balconyCount) { - case 0: SummonUndead(NPC_CHAMPION, RAID_MODE(2, 4)); break; - case 1: SummonUndead(NPC_CHAMPION, RAID_MODE(1, 2)); - SummonUndead(NPC_GUARDIAN, RAID_MODE(1, 2)); break; - case 2: SummonUndead(NPC_GUARDIAN, RAID_MODE(2, 4)); break; - default:SummonUndead(NPC_CHAMPION, RAID_MODE(5, 10)); - SummonUndead(NPC_GUARDIAN, RAID_MODE(5, 10));break; + case 0: + SummonUndead(NPC_CHAMPION, RAID_MODE(2, 4)); + break; + case 1: + SummonUndead(NPC_CHAMPION, RAID_MODE(1, 2)); + SummonUndead(NPC_GUARDIAN, RAID_MODE(1, 2)); + break; + case 2: + SummonUndead(NPC_GUARDIAN, RAID_MODE(2, 4)); + break; + default: + SummonUndead(NPC_CHAMPION, RAID_MODE(5, 10)); + SummonUndead(NPC_GUARDIAN, RAID_MODE(5, 10)); + break; } ++waveCount; events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, urand(30000, 45000)); @@ -211,8 +209,16 @@ public: if (me->HasReactState(REACT_AGGRESSIVE)) DoMeleeAttackIfReady(); } + + private: + uint32 waveCount; + uint32 balconyCount; }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return GetInstanceAI<boss_nothAI>(creature); + } }; void AddSC_boss_noth() diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index 96f2d743cac..f6e91d51af1 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -57,7 +57,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_patchwerkAI(creature); + return GetInstanceAI<boss_patchwerkAI>(creature); } struct boss_patchwerkAI : public BossAI diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 60620804db8..761529ab0f2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -96,6 +96,8 @@ class boss_sapphiron : public CreatureScript void InitializeAI() OVERRIDE { + _canTheHundredClub = true; + float x, y, z; me->GetPosition(x, y, z); me->SummonGameObject(GO_BIRTH, x, y, z, 0, 0, 0, 0, 0, 0); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 3d121887471..5548e5b7ad4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -110,7 +110,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_thaddiusAI(creature); + return GetInstanceAI<boss_thaddiusAI>(creature); } struct boss_thaddiusAI : public BossAI @@ -285,7 +285,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_stalaggAI(creature); + return GetInstanceAI<npc_stalaggAI>(creature); } struct npc_stalaggAI : public ScriptedAI @@ -379,7 +379,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_feugenAI(creature); + return GetInstanceAI<npc_feugenAI>(creature); } struct npc_feugenAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 4a1670d1048..81f14206d65 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -106,8 +106,8 @@ enum Spells SPELL_ARCANE_STORM_P_I = 61693, SPELL_VORTEX_1 = 56237, // seems that frezze object animation SPELL_VORTEX_2 = 55873, // visual effect - SPELL_VORTEX_3 = 56105, // this spell must handle all the script - casted by the boss and to himself - SPELL_VORTEX_6 = 73040, // teleport - (casted to all raid), caster vortex bunnies, targets players. + SPELL_VORTEX_3 = 56105, // this spell must handle all the script - cast by the boss and to himself + SPELL_VORTEX_6 = 73040, // teleport - (cast to all raid), caster vortex bunnies, targets players. // Phase II SPELL_TELEPORT_VISUAL_ONLY = 41232, // Light blue animation cast by arcane NPCs when spawned on Hover Disks @@ -117,7 +117,7 @@ enum Spells SPELL_SUMMON_ARCANE_BOMB = 56429, SPELL_ARCANE_BOMB_TRIGGER = 56430, SPELL_ARCANE_BOMB_KNOCKBACK_DAMAGE = 56431, - SPELL_ARCANE_OVERLOAD_1 = 56432, // casted by npc Arcane Overload ID: 30282 + SPELL_ARCANE_OVERLOAD_1 = 56432, // cast by npc Arcane Overload ID: 30282 // SPELL_ARCANE_OVERLOAD_2 = 56435, // Triggered by 56432 - resizing target // SPELL_ARCANE_OVERLOAD_3 = 56438, // Triggered by 56432 - damage reduction SPELL_SURGE_OF_POWER_P_II = 56505, @@ -670,7 +670,7 @@ public: Talk(SAY_BUFF_SPARK); } else if (spell->Id == SPELL_MALYGOS_BERSERK) - sCreatureTextMgr->SendChat(me, EMOTE_HIT_BERSERKER_TIMER, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); + sCreatureTextMgr->SendChat(me, EMOTE_HIT_BERSERKER_TIMER, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); } void MoveInLineOfSight(Unit* who) OVERRIDE @@ -963,7 +963,7 @@ public: { if (passenger->GetTypeId() == TYPEID_PLAYER) { - Talk(EMOTE_SURGE_OF_POWER_WARNING_P3, passenger->GetGUID()); + Talk(EMOTE_SURGE_OF_POWER_WARNING_P3, passenger); DoCast(tempSurgeTarget, SPELL_SURGE_OF_POWER_PHASE_3_10, true); } } @@ -1074,7 +1074,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_malygosAI(creature); + return GetInstanceAI<boss_malygosAI>(creature); } }; @@ -1127,7 +1127,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_portal_eoeAI(creature); + return GetInstanceAI<npc_portal_eoeAI>(creature); } }; @@ -1142,7 +1142,7 @@ public: { _instance = creature->GetInstanceScript(); // Talk range was not enough for this encounter - sCreatureTextMgr->SendChat(me, EMOTE_POWER_SPARK_SUMMONED, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); + sCreatureTextMgr->SendChat(me, EMOTE_POWER_SPARK_SUMMONED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); MoveToMalygos(); } @@ -1190,7 +1190,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_power_sparkAI(creature); + return GetInstanceAI<npc_power_sparkAI>(creature); } }; @@ -1292,7 +1292,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_melee_hover_diskAI(creature); + return GetInstanceAI<npc_melee_hover_diskAI>(creature); } }; @@ -1374,7 +1374,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_caster_hover_diskAI(creature); + return GetInstanceAI<npc_caster_hover_diskAI>(creature); } }; @@ -1450,7 +1450,7 @@ class npc_nexus_lord : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_nexus_lordAI(creature); + return GetInstanceAI<npc_nexus_lordAI>(creature); } }; @@ -1517,7 +1517,7 @@ class npc_scion_of_eternity : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_scion_of_eternityAI(creature); + return GetInstanceAI<npc_scion_of_eternityAI>(creature); } }; @@ -1575,7 +1575,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_arcane_overloadAI(creature); + return GetInstanceAI<npc_arcane_overloadAI>(creature); } }; @@ -1907,7 +1907,7 @@ class spell_malygos_vortex_visual : public SpellScriptLoader if (InstanceScript* instance = caster->GetInstanceScript()) { - // Teleport spell - I'm not sure but might be it must be casted by each vehicle when it's passenger leaves it. + // Teleport spell - I'm not sure but might be it must be cast by each vehicle when it's passenger leaves it. if (Creature* trigger = caster->GetMap()->GetCreature(instance->GetData64(DATA_TRIGGER))) trigger->CastSpell(targetPlayer, SPELL_VORTEX_6, true); } @@ -2351,7 +2351,7 @@ class spell_malygos_surge_of_power_warning_selector_25 : public SpellScriptLoade if (Vehicle* vehicle = target->GetVehicleKit()) if (Unit* passenger = vehicle->GetPassenger(0)) if (passenger->GetTypeId() == TYPEID_PLAYER) - caster->AI()->Talk(EMOTE_SURGE_OF_POWER_WARNING_P3, passenger->GetGUID()); + caster->AI()->Talk(EMOTE_SURGE_OF_POWER_WARNING_P3, passenger); } } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index fdc4927763e..5d4167cc053 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -25,9 +25,9 @@ enum Spells SPELL_SPARK = 47751, H_SPELL_SPARK = 57062, SPELL_RIFT_SHIELD = 47748, - SPELL_CHARGE_RIFT = 47747, //Works wrong (affect players, not rifts) - SPELL_CREATE_RIFT = 47743, //Don't work, using WA - SPELL_ARCANE_ATTRACTION = 57063, //No idea, when it's used + SPELL_CHARGE_RIFT = 47747, // Works wrong (affect players, not rifts) + SPELL_CREATE_RIFT = 47743, // Don't work, using WA + SPELL_ARCANE_ATTRACTION = 57063, // No idea, when it's used }; enum Adds @@ -41,14 +41,16 @@ enum Yells SAY_AGGRO = 0, SAY_DEATH = 1, SAY_RIFT = 2, - SAY_SHIELD = 3 + SAY_SHIELD = 3, + SAY_RIFT_EMOTE = 4, // Needs to be added to script + SAY_SHIELD_EMOTE = 5 // Needs to be added to script }; enum RiftSpells { SPELL_CHAOTIC_ENERGY_BURST = 47688, SPELL_CHARGED_CHAOTIC_ENERGY_BURST = 47737, - SPELL_ARCANEFORM = 48019, //Chaotic Rift visual + SPELL_ARCANEFORM = 48019, // Chaotic Rift visual }; Position const RiftLocation[6] = @@ -185,7 +187,7 @@ class boss_anomalus : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_anomalusAI(creature); + return GetInstanceAI<boss_anomalusAI>(creature); } }; @@ -253,7 +255,7 @@ class npc_chaotic_rift : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_chaotic_riftAI(creature); + return GetInstanceAI<npc_chaotic_riftAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index ef8f5c2d3c4..4d58a3449b9 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -44,7 +44,8 @@ enum Yells SAY_SLAY = 1, SAY_ENRAGE = 2, SAY_DEATH = 3, - SAY_CRYSTAL_NOVA = 4 + SAY_CRYSTAL_NOVA = 4, + SAY_FRENZY = 5 }; enum Misc @@ -60,7 +61,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_keristraszaAI(creature); + return GetInstanceAI<boss_keristraszaAI>(creature); } struct boss_keristraszaAI : public ScriptedAI @@ -115,9 +116,10 @@ public: instance->SetData(DATA_KERISTRASZA_EVENT, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } bool CheckContainmentSpheres(bool remove_prison = false) @@ -175,6 +177,7 @@ public: if (!bEnrage && HealthBelowPct(25)) { Talk(SAY_ENRAGE); + Talk(SAY_FRENZY); DoCast(me, SPELL_ENRAGE); bEnrage = true; } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 8a01c40186e..96c8f8c0ec5 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -65,7 +65,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_magus_telestraAI(creature); + return GetInstanceAI<boss_magus_telestraAI>(creature); } struct boss_magus_telestraAI : public ScriptedAI @@ -138,9 +138,10 @@ public: instance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void DoAction(int32 action) OVERRIDE diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 423937303b5..4321a5846df 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -36,6 +36,7 @@ enum Yells SAY_REFLECT = 3, SAY_CRYSTAL_SPIKES = 4, SAY_KILL = 5, + SAY_FRENZY = 6 }; enum Events @@ -89,6 +90,7 @@ public: { if (!frenzy && HealthBelowPct(25)) { + Talk(SAY_FRENZY); DoCast(me, SPELL_FRENZY); frenzy = true; } @@ -104,9 +106,10 @@ public: instance->SetData(DATA_ORMOROK_EVENT, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void UpdateAI(uint32 diff) OVERRIDE @@ -157,7 +160,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ormorokAI(creature); + return GetInstanceAI<boss_ormorokAI>(creature); } }; @@ -188,7 +191,11 @@ public: struct npc_crystal_spike_triggerAI : public ScriptedAI { - npc_crystal_spike_triggerAI(Creature* creature) : ScriptedAI(creature) { } + npc_crystal_spike_triggerAI(Creature* creature) : ScriptedAI(creature) + { + _count = 0; + _despawntimer = 0; + } void IsSummonedBy(Unit* owner) OVERRIDE { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index ca6f580633c..1f7d47ccc31 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -99,9 +99,10 @@ class boss_eregos : public CreatureScript DoAction(ACTION_SET_NORMAL_EVENTS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void EnterCombat(Unit* /*who*/) OVERRIDE @@ -165,7 +166,7 @@ class boss_eregos : public CreatureScript if (summon->GetEntry() != NPC_PLANAR_ANOMALY) return; - /// @todo: See why the spell is not casted + /// @todo: See why the spell is not cast summon->CastSpell(summon, SPELL_PLANAR_BLAST, true); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index f7c558879d1..db1bb342286 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -248,7 +248,7 @@ class boss_urom : public CreatureScript arcaneExplosionTimer -= diff; } - if (!me->IsNonMeleeSpellCasted(false, true, true)) + if (!me->IsNonMeleeSpellCast(false, true, true)) { if (frostBombTimer <= diff) { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index 385f80ae37d..3d1872e3f80 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -241,7 +241,7 @@ class npc_azure_ring_captain : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_ring_captainAI(creature); + return GetInstanceAI<npc_azure_ring_captainAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 1230868c020..c565f71320d 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -310,17 +310,21 @@ class npc_ruby_emerald_amber_drake : public CreatureScript switch (eventId) { case EVENT_WELCOME: - Talk(WHISPER_DRAKES_WELCOME, me->GetCreatorGUID()); + if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) + Talk(WHISPER_DRAKES_WELCOME, creator); _events.ScheduleEvent(EVENT_ABILITIES, 5 * IN_MILLISECONDS); break; case EVENT_ABILITIES: - Talk(WHISPER_DRAKES_ABILITIES, me->GetCreatorGUID()); + if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) + Talk(WHISPER_DRAKES_ABILITIES, creator); break; case EVENT_SPECIAL_ATTACK: - Talk(WHISPER_DRAKES_SPECIAL, me->GetCreatorGUID()); + if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) + Talk(WHISPER_DRAKES_SPECIAL, creator); break; case EVENT_LOW_HEALTH: - Talk(WHISPER_DRAKES_LOWHEALTH, me->GetCreatorGUID()); + if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID())) + Talk(WHISPER_DRAKES_LOWHEALTH, creator); _healthWarning = false; _events.ScheduleEvent(EVENT_RESET_LOW_HEALTH, 25000); break; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index 944eacda34e..b2cdfe0c854 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -99,7 +99,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_bjarngrimAI(creature); + return GetInstanceAI<boss_bjarngrimAI>(creature); } struct boss_bjarngrimAI : public ScriptedAI @@ -245,7 +245,7 @@ public: if (m_uiChangeStance_Timer <= uiDiff) { //wait for current spell to finish before change stance - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; DoRemoveStanceAura(m_uiStance); @@ -391,7 +391,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_stormforged_lieutenantAI(creature); + return GetInstanceAI<npc_stormforged_lieutenantAI>(creature); } struct npc_stormforged_lieutenantAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index af6beca608d..350a036e861 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -72,7 +72,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ionarAI(creature); + return GetInstanceAI<boss_ionarAI>(creature); } struct boss_ionarAI : public ScriptedAI @@ -137,9 +137,10 @@ public: instance->SetBossState(DATA_IONAR, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE @@ -278,7 +279,7 @@ public: Talk(SAY_SPLIT); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); DoCast(me, SPELL_DISPERSE, false); @@ -301,7 +302,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_spark_of_ionarAI(creature); + return GetInstanceAI<npc_spark_of_ionarAI>(creature); } struct npc_spark_of_ionarAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index 61687de1b58..a2aceb92832 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -69,7 +69,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lokenAI(creature); + return GetInstanceAI<boss_lokenAI>(creature); } struct boss_lokenAI : public ScriptedAI @@ -124,9 +124,10 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void UpdateAI(uint32 uiDiff) OVERRIDE diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index b6790a088ad..c916bd06d1f 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -75,7 +75,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_volkhanAI(creature); + return GetInstanceAI<boss_volkhanAI>(creature); } struct boss_volkhanAI : public ScriptedAI @@ -154,9 +154,10 @@ public: instance->SetBossState(DATA_VOLKHAN, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void DespawnGolem() @@ -286,7 +287,7 @@ public: { ++m_uiHealthAmountModifier; - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); Talk(SAY_FORGE); @@ -411,7 +412,7 @@ public: me->AttackStop(); // me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); //Set in DB // me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //Set in DB - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index e2a8ab25cac..d7fccf22d72 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -315,7 +315,7 @@ class npc_auriaya_seeping_trigger : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_auriaya_seeping_triggerAI(creature); + return GetInstanceAI<npc_auriaya_seeping_triggerAI>(creature); } }; @@ -390,7 +390,7 @@ class npc_sanctum_sentry : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_sanctum_sentryAI(creature); + return GetInstanceAI<npc_sanctum_sentryAI>(creature); } }; @@ -466,7 +466,7 @@ class npc_feral_defender : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_feral_defenderAI(creature); + return GetInstanceAI<npc_feral_defenderAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 554556e4084..14588087e83 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -619,7 +619,7 @@ class boss_flame_leviathan_seat : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_flame_leviathan_seatAI(creature); + return GetInstanceAI<boss_flame_leviathan_seatAI>(creature); } }; @@ -898,7 +898,7 @@ class npc_colossus : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_colossusAI(creature); + return GetInstanceAI<npc_colossusAI>(creature); } }; @@ -1530,7 +1530,7 @@ class spell_auto_repair : public SpellScriptLoader if (!driver) return; - driver->MonsterTextEmote(EMOTE_REPAIR, driver->GetGUID(), true); + driver->MonsterTextEmote(EMOTE_REPAIR, driver, true); InstanceScript* instance = driver->GetInstanceScript(); if (!instance) @@ -1690,9 +1690,9 @@ class spell_pursue : public SpellScriptLoader for (SeatMap::const_iterator itr = caster->GetVehicleKit()->Seats.begin(); itr != caster->GetVehicleKit()->Seats.end(); ++itr) { - if (IS_PLAYER_GUID(itr->second.Passenger.Guid)) + if (Player* passenger = ObjectAccessor::GetPlayer(*caster, itr->second.Passenger.Guid)) { - caster->AI()->Talk(EMOTE_PURSUE, itr->second.Passenger.Guid); + caster->AI()->Talk(EMOTE_PURSUE, passenger); return; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 549d496f19d..19f22947b7c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -433,7 +433,7 @@ class boss_freya : public CreatureScript case EVENT_STRENGTHENED_IRON_ROOTS: Talk(EMOTE_IRON_ROOTS); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_ROOTS_FREYA)) - target->CastSpell(target, SPELL_ROOTS_FREYA, true); // This must be casted by Target self + target->CastSpell(target, SPELL_ROOTS_FREYA, true); // This must be cast by Target self events.ScheduleEvent(EVENT_STRENGTHENED_IRON_ROOTS, urand(12000, 20000)); break; case EVENT_GROUND_TREMOR: @@ -1146,7 +1146,7 @@ class npc_ancient_water_spirit : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ancient_water_spiritAI(creature); + return GetInstanceAI<npc_ancient_water_spiritAI>(creature); } }; @@ -1213,7 +1213,7 @@ class npc_storm_lasher : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_storm_lasherAI(creature); + return GetInstanceAI<npc_storm_lasherAI>(creature); } }; @@ -1258,7 +1258,7 @@ class npc_snaplasher : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_snaplasherAI(creature); + return GetInstanceAI<npc_snaplasherAI>(creature); } }; @@ -1522,7 +1522,7 @@ class npc_unstable_sun_beam : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_unstable_sun_beamAI(creature); + return GetInstanceAI<npc_unstable_sun_beamAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 46776ae9b96..d4ef496dba0 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -369,7 +369,7 @@ class boss_saronite_animus : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_saronite_animusAI(creature); + return GetInstanceAI<boss_saronite_animusAI>(creature); } }; @@ -439,7 +439,7 @@ class npc_saronite_vapors : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_saronite_vaporsAI(creature); + return GetInstanceAI<npc_saronite_vaporsAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 2fb165b935e..344fd7d3e85 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -235,7 +235,7 @@ class npc_flash_freeze : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_flash_freezeAI(creature); + return GetInstanceAI<npc_flash_freezeAI>(creature); } }; @@ -296,7 +296,7 @@ class npc_ice_block : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ice_blockAI(creature); + return GetInstanceAI<npc_ice_blockAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 31c635c7de5..30b0e41f52a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -300,7 +300,7 @@ class boss_razorscale_controller : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_razorscale_controllerAI(creature); + return GetInstanceAI<boss_razorscale_controllerAI>(creature); } }; @@ -735,7 +735,7 @@ class npc_expedition_commander : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_expedition_commanderAI(creature); + return GetInstanceAI<npc_expedition_commanderAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 12925f1c6e1..f8a78975117 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -232,7 +232,7 @@ class boss_xt002 : public CreatureScript events.ScheduleEvent(EVENT_ENRAGE, TIMER_ENRAGE); events.ScheduleEvent(EVENT_GRAVITY_BOMB, TIMER_GRAVITY_BOMB); events.ScheduleEvent(EVENT_SEARING_LIGHT, TIMER_SEARING_LIGHT); - //Tantrum is casted a bit slower the first time. + //Tantrum is cast a bit slower the first time. events.ScheduleEvent(EVENT_TYMPANIC_TANTRUM, urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX) * 2); if (!instance) @@ -477,7 +477,7 @@ class npc_xt002_heart : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_xt002_heartAI(creature); + return GetInstanceAI<npc_xt002_heartAI>(creature); } }; @@ -493,7 +493,7 @@ class npc_scrapbot : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_scrapbotAI(creature); + return GetInstanceAI<npc_scrapbotAI>(creature); } struct npc_scrapbotAI : public ScriptedAI @@ -550,7 +550,7 @@ class npc_pummeller : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_pummellerAI(creature); + return GetInstanceAI<npc_pummellerAI>(creature); } struct npc_pummellerAI : public ScriptedAI @@ -652,7 +652,7 @@ class npc_boombot : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_boombotAI(creature); + return GetInstanceAI<npc_boombotAI>(creature); } struct npc_boombotAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 4ba6d948f1a..96a2a52714a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -108,7 +108,7 @@ enum Spells SPELL_SANITY = 63050, SPELL_INSANE_PERIODIC = 64554, SPELL_INSANE = 63120, - //SPELL_CLEAR_INSANE = 63122, // when it should be casted? + //SPELL_CLEAR_INSANE = 63122, // when should it be cast? SPELL_CONSTRICTOR_TENTACLE = 64132, SPELL_CRUSHER_TENTACLE_SUMMON = 64139, SPELL_CORRUPTOR_TENTACLE_SUMMON = 64143, @@ -452,7 +452,7 @@ class boss_voice_of_yogg_saron : public CreatureScript if (Player* player = itr->GetSource()) { if (events.IsInPhase(PHASE_ONE)) - Talk(WHISPER_VOICE_PHASE_1_WIPE, player->GetGUID()); + Talk(WHISPER_VOICE_PHASE_1_WIPE, player); player->RemoveAurasDueToSpell(SPELL_SANITY); player->RemoveAurasDueToSpell(SPELL_INSANE); @@ -531,7 +531,7 @@ class boss_voice_of_yogg_saron : public CreatureScript case EVENT_EXTINGUISH_ALL_LIFE: if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_YOGG_SARON))) { - yogg->AI()->Talk(EMOTE_YOGG_SARON_EXTINGUISH_ALL_LIFE, me->GetGUID()); + yogg->AI()->Talk(EMOTE_YOGG_SARON_EXTINGUISH_ALL_LIFE, me); yogg->CastSpell((Unit*)NULL, SPELL_EXTINGUISH_ALL_LIFE, true); } events.ScheduleEvent(EVENT_EXTINGUISH_ALL_LIFE, 10000); // cast it again after a short while, players can survive @@ -799,7 +799,7 @@ class boss_sara : public CreatureScript DoCast(yogg, SPELL_RIDE_YOGG_SARON_VEHICLE); DoCast(me, SPELL_SHADOWY_BARRIER_SARA); _events.SetPhase(PHASE_TWO); - _events.ScheduleEvent(EVENT_DEATH_RAY, 20000, 0, PHASE_TWO); // almost never casted at scheduled time, why? + _events.ScheduleEvent(EVENT_DEATH_RAY, 20000, 0, PHASE_TWO); // almost never cast at scheduled time, why? _events.ScheduleEvent(EVENT_MALADY_OF_THE_MIND, 18000, 0, PHASE_TWO); _events.ScheduleEvent(EVENT_PSYCHOSIS, 1, 0, PHASE_TWO); _events.ScheduleEvent(EVENT_BRAIN_LINK, 23000, 0, PHASE_TWO); @@ -1071,7 +1071,7 @@ class boss_brain_of_yogg_saron : public CreatureScript uint8 illusion = _instance->GetData(DATA_ILLUSION); if (++_tentaclesKilled >= (illusion == ICECROWN_ILLUSION ? 9 : 8)) { - sCreatureTextMgr->SendChat(me, EMOTE_BRAIN_ILLUSION_SHATTERED, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_AREA); + sCreatureTextMgr->SendChat(me, EMOTE_BRAIN_ILLUSION_SHATTERED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_AREA); _summons.DespawnAll(); DoCastAOE(SPELL_SHATTERED_ILLUSION, true); _instance->HandleGameObject(_instance->GetData64(GO_BRAIN_ROOM_DOOR_1 + illusion), true); @@ -1524,8 +1524,8 @@ class npc_observation_ring_keeper : public CreatureScript me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->DespawnOrUnsummon(2000); DoCast(SPELL_TELEPORT); - Talk(SAY_KEEPER_CHOSEN_1, player->GetGUID()); - Talk(SAY_KEEPER_CHOSEN_2, player->GetGUID()); + Talk(SAY_KEEPER_CHOSEN_1, player); + Talk(SAY_KEEPER_CHOSEN_2, player); switch (me->GetEntry()) { @@ -2234,7 +2234,7 @@ class spell_yogg_saron_boil_ominously : public SpellScriptLoader // 63030 if (!target->HasAura(SPELL_FLASH_FREEZE) && !GetCaster()->HasAura(SPELL_SUMMON_GUARDIAN_1) && !GetCaster()->HasAura(SPELL_SUMMON_GUARDIAN_2)) { if (Creature* caster = GetCaster()->ToCreature()) - caster->AI()->Talk(EMOTE_OMINOUS_CLOUD_PLAYER_TOUCH, target->GetGUID()); + caster->AI()->Talk(EMOTE_OMINOUS_CLOUD_PLAYER_TOUCH, target); GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_GUARDIAN_1, true); } @@ -2905,7 +2905,7 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120 { if (Unit* caster = GetCaster()) if (Creature* yogg = caster->ToCreature()) - yogg->AI()->Talk(WHISPER_VOICE_INSANE, GetTarget()->GetGUID()); + yogg->AI()->Talk(WHISPER_VOICE_INSANE, GetTarget()); GetTarget()->CastSpell(GetTarget(), SPELL_INSANE_VISUAL, true); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index 75aa2994dbc..68f59419998 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -194,7 +194,7 @@ class boss_keleseth : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_FROST_TOMB)) { Talk(SAY_FROST_TOMB); - Talk(SAY_FROST_TOMB_EMOTE, target->GetGUID()); + Talk(SAY_FROST_TOMB_EMOTE, target); DoCast(target, SPELL_FROST_TOMB_STUN, true); // checked from sniffs - the player casts the spell @@ -212,7 +212,7 @@ class boss_keleseth : public CreatureScript void SummonSkeletons() { - // I could not found any spell casted for this + // I could not found any spell cast for this for (uint8 i = 0; i < 4; ++i) me->SummonCreature(NPC_SKELETON, SkeletonSpawnPoint[0][0], SkeletonSpawnPoint[0][1], SKELETONSPAWN_Z, 0); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 5247f9019da..42fa0242df2 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -358,7 +358,7 @@ class boss_dalronn_the_controller : public CreatureScript if (ShadowBolt_Timer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) DoCast(target, SPELL_SHADOW_BOLT); @@ -370,7 +370,7 @@ class boss_dalronn_the_controller : public CreatureScript if (Debilitate_Timer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) DoCast(target, SPELL_DEBILITATE); @@ -384,7 +384,7 @@ class boss_dalronn_the_controller : public CreatureScript { if (Summon_Timer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCast(me, H_SPELL_SUMMON_SKELETONS); Summon_Timer = (rand()%10000) + 20000; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index 77c19422da0..5666c701807 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -193,9 +193,10 @@ public: //Talk(SAY_DEATH); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void DoAction(int32 actionId) OVERRIDE @@ -255,7 +256,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ravenous_furbolgAI(creature); + return GetInstanceAI<npc_ravenous_furbolgAI>(creature); } struct npc_ravenous_furbolgAI : public ScriptedAI @@ -363,7 +364,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_frenzied_worgenAI(creature); + return GetInstanceAI<npc_frenzied_worgenAI>(creature); } struct npc_frenzied_worgenAI : public ScriptedAI @@ -474,7 +475,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ferocious_rhinoAI(creature); + return GetInstanceAI<npc_ferocious_rhinoAI>(creature); } struct npc_ferocious_rhinoAI : public ScriptedAI @@ -589,7 +590,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_massive_jormungarAI(creature); + return GetInstanceAI<npc_massive_jormungarAI>(creature); } struct npc_massive_jormungarAI : public ScriptedAI @@ -690,7 +691,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_palehoof_orbAI(creature); + return GetInstanceAI<npc_palehoof_orbAI>(creature); } struct npc_palehoof_orbAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 01fcd9a665d..6bbecb35cfb 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -133,7 +133,7 @@ enum Spells { // Skadi Spells SPELL_CRUSH = 50234, - SPELL_POISONED_SPEAR = 50225, //isn't being casted =/ + SPELL_POISONED_SPEAR = 50225, //isn't being cast SPELL_WHIRLWIND = 50228, //random target, but not the tank approx. every 20s SPELL_RAPID_FIRE = 56570, SPELL_HARPOON_DAMAGE = 56578, @@ -162,7 +162,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_skadiAI(creature); + return GetInstanceAI<boss_skadiAI>(creature); } struct boss_skadiAI : public ScriptedAI @@ -415,9 +415,10 @@ public: instance->SetBossState(DATA_SKADI_THE_RUTHLESS, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void SpawnMobs() diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index 1ceddd4bd66..6fc0ffa2d45 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -268,7 +268,7 @@ class npc_tempest_minion : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tempest_minionAI(creature); + return GetInstanceAI<npc_tempest_minionAI>(creature); } }; diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index e8e54184cb3..7a42983d4e8 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -277,7 +277,7 @@ class npc_frozen_orb_stalker : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_frozen_orb_stalkerAI(creature); + return GetInstanceAI<npc_frozen_orb_stalkerAI>(creature); } }; diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp index 80ebc01debc..5a2bdaad803 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp @@ -50,7 +50,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_cyanigosaAI(creature); + return GetInstanceAI<boss_cyanigosaAI>(creature); } struct boss_cyanigosaAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index 883ea8fa0c0..eb129bcc774 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -49,7 +49,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_erekemAI(creature); + return GetInstanceAI<boss_erekemAI>(creature); } struct boss_erekemAI : public ScriptedAI @@ -266,7 +266,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_erekem_guardAI(creature); + return GetInstanceAI<npc_erekem_guardAI>(creature); } struct npc_erekem_guardAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 4852b6cea07..d190c8ae90d 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -78,7 +78,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ichoronAI(creature); + return GetInstanceAI<boss_ichoronAI>(creature); } struct boss_ichoronAI : public ScriptedAI @@ -342,7 +342,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ichor_globuleAI(creature); + return GetInstanceAI<npc_ichor_globuleAI>(creature); } struct npc_ichor_globuleAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp index 964f6b75e72..f8b21707a7a 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp @@ -37,7 +37,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lavanthorAI(creature); + return GetInstanceAI<boss_lavanthorAI>(creature); } struct boss_lavanthorAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp index d5dd41e7a90..7da9f75ffe6 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp @@ -33,7 +33,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_moraggAI(creature); + return GetInstanceAI<boss_moraggAI>(creature); } struct boss_moraggAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 8b39c48fb92..a3e4bfe43f6 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -63,7 +63,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_xevozzAI(creature); + return GetInstanceAI<boss_xevozzAI>(creature); } struct boss_xevozzAI : public ScriptedAI @@ -231,7 +231,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ethereal_sphereAI(creature); + return GetInstanceAI<npc_ethereal_sphereAI>(creature); } struct npc_ethereal_sphereAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index 3db389ac703..bcb1a60c744 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -58,7 +58,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_zuramatAI(creature); + return GetInstanceAI<boss_zuramatAI>(creature); } struct boss_zuramatAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 4ff0f2d36e9..3e16f38001b 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -160,7 +160,7 @@ public: bool bActive; bool bWiped; - bool bIsDoorSpellCasted; + bool bIsDoorSpellCast; bool bCrystalActivated; bool defenseless; @@ -210,7 +210,7 @@ public: uiCyanigosaEventTimer = 3*IN_MILLISECONDS; bActive = false; - bIsDoorSpellCasted = false; + bIsDoorSpellCast = false; bCrystalActivated = false; defenseless = true; uiMainEventPhase = NOT_STARTED; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index c78a1ee1740..491d3bd38ac 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -307,7 +307,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_sinclariAI(creature); + return GetInstanceAI<npc_sinclariAI>(creature); } struct npc_sinclariAI : public ScriptedAI @@ -428,7 +428,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_saboteurAI(creature); + return GetInstanceAI<npc_azure_saboteurAI>(creature); } struct npc_azure_saboteurAI : public npc_escortAI @@ -552,7 +552,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_teleportation_portalAI(creature); + return GetInstanceAI<npc_teleportation_portalAI>(creature); } struct npc_teleportation_portalAI : public ScriptedAI @@ -649,7 +649,7 @@ public: uiSpawnTimer = SPAWN_TIME; } else uiSpawnTimer -= diff; - if (bPortalGuardianOrKeeperOrEliteSpawn && !me->IsNonMeleeSpellCasted(false)) + if (bPortalGuardianOrKeeperOrEliteSpawn && !me->IsNonMeleeSpellCast(false)) { me->Kill(me, false); me->RemoveCorpse(); @@ -809,7 +809,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_invaderAI(creature); + return GetInstanceAI<npc_azure_invaderAI>(creature); } struct npc_azure_invaderAI : public violet_hold_trashAI @@ -887,7 +887,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_binderAI(creature); + return GetInstanceAI<npc_azure_binderAI>(creature); } struct npc_azure_binderAI : public violet_hold_trashAI @@ -965,7 +965,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_mage_slayerAI(creature); + return GetInstanceAI<npc_azure_mage_slayerAI>(creature); } struct npc_azure_mage_slayerAI : public violet_hold_trashAI @@ -1025,7 +1025,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_raiderAI(creature); + return GetInstanceAI<npc_azure_raiderAI>(creature); } struct npc_azure_raiderAI : public violet_hold_trashAI @@ -1131,7 +1131,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_stalkerAI(creature); + return GetInstanceAI<npc_azure_stalkerAI>(creature); } }; @@ -1210,7 +1210,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_spellbreakerAI(creature); + return GetInstanceAI<npc_azure_spellbreakerAI>(creature); } }; @@ -1221,7 +1221,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_captainAI(creature); + return GetInstanceAI<npc_azure_captainAI>(creature); } struct npc_azure_captainAI : public violet_hold_trashAI @@ -1273,7 +1273,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_azure_sorcerorAI(creature); + return GetInstanceAI<npc_azure_sorcerorAI>(creature); } struct npc_azure_sorcerorAI : public violet_hold_trashAI diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index f5700358150..420b01d3564 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -51,6 +51,9 @@ EndContentData */ enum Sinkhole { + GO_EXPLOSIVES_CART = 188160, + NPC_SCOURGED_BURROWER = 26250, + QUEST_PLUG_THE_SINKHOLES = 11897, SPELL_SET_CART = 46797, SPELL_EXPLODE_CART = 46799, SPELL_SUMMON_CART = 46798, @@ -83,7 +86,7 @@ public: return; Player* player = caster->ToPlayer(); - if (player && player->GetQuestStatus(11897) == QUEST_STATUS_INCOMPLETE) + if (player && player->GetQuestStatus(QUEST_PLUG_THE_SINKHOLES) == QUEST_STATUS_INCOMPLETE) { phase = 1; casterGuid = caster->GetGUID(); @@ -104,13 +107,13 @@ public: case 1: DoCast(me, SPELL_EXPLODE_CART, true); DoCast(me, SPELL_SUMMON_CART, true); - if (GameObject* cart = me->FindNearestGameObject(188160, 3)) + if (GameObject* cart = me->FindNearestGameObject(GO_EXPLOSIVES_CART, 3.0f)) cart->SetUInt32Value(GAMEOBJECT_FACTION, 14); phaseTimer = 3000; phase = 2; break; case 2: - if (GameObject* cart = me->FindNearestGameObject(188160, 3)) + if (GameObject* cart = me->FindNearestGameObject(GO_EXPLOSIVES_CART, 3.0f)) cart->UseDoorOrButton(); DoCast(me, SPELL_EXPLODE_CART, true); phaseTimer = 3000; @@ -123,7 +126,7 @@ public: break; case 5: DoCast(me, SPELL_SUMMON_WORM, true); - if (Unit* worm = me->FindNearestCreature(26250, 3)) + if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f)) { worm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); worm->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); @@ -133,7 +136,7 @@ public: break; case 6: DoCast(me, SPELL_EXPLODE_CART, true); - if (Unit* worm = me->FindNearestCreature(26250, 3)) + if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f)) { me->Kill(worm); worm->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); @@ -168,6 +171,12 @@ public: ## npc_khunok_the_behemoth ######*/ +enum Khunok +{ + NPC_ORPHANED_MAMMOTH_CALF = 25861, + SPELL_MAMMOTH_CALF_ESCORT_CREDIT = 46231 +}; + class npc_khunok_the_behemoth : public CreatureScript { public: @@ -185,13 +194,13 @@ public: if (who->GetTypeId() != TYPEID_UNIT) return; - if (who->GetEntry() == 25861 && me->IsWithinDistInMap(who, 10.0f)) + if (who->GetEntry() == NPC_ORPHANED_MAMMOTH_CALF && me->IsWithinDistInMap(who, 10.0f)) { if (Unit* owner = who->GetOwner()) { if (owner->GetTypeId() == TYPEID_PLAYER) { - owner->CastSpell(owner, 46231, true); + owner->CastSpell(owner, SPELL_MAMMOTH_CALF_ESCORT_CREDIT, true); who->ToCreature()->DespawnOrUnsummon(); } } @@ -341,11 +350,19 @@ public: ## npc_nerubar_victim ######*/ -#define WARSONG_PEON 25270 +enum Nerubar +{ + NPC_WARSONG_PEON = 25270, + QUEST_TAKEN_BY_THE_SCOURGE = 11611, + SPELL_FREED_WARSONG_MAGE = 45526, + SPELL_FREED_WARSONG_SHAMAN = 45527, + SPELL_FREED_WARSONG_WARRIOR = 45514, + SPELL_FREED_WARSONG_PEON = 45532 +}; const uint32 nerubarVictims[3] = { - 45526, 45527, 45514 + SPELL_FREED_WARSONG_MAGE, SPELL_FREED_WARSONG_SHAMAN, SPELL_FREED_WARSONG_WARRIOR }; class npc_nerubar_victim : public CreatureScript @@ -368,13 +385,13 @@ public: if (!player) return; - if (player->GetQuestStatus(11611) == QUEST_STATUS_INCOMPLETE) + if (player->GetQuestStatus(QUEST_TAKEN_BY_THE_SCOURGE) == QUEST_STATUS_INCOMPLETE) { uint8 uiRand = urand(0, 99); if (uiRand < 25) { - player->CastSpell(me, 45532, true); - player->KilledMonsterCredit(WARSONG_PEON, 0); + player->CastSpell(me, SPELL_FREED_WARSONG_PEON, true); + player->KilledMonsterCredit(NPC_WARSONG_PEON, 0); } else if (uiRand < 75) player->CastSpell(me, nerubarVictims[urand(0, 2)], true); @@ -411,7 +428,10 @@ public: struct npc_jennyAI : public ScriptedAI { - npc_jennyAI(Creature* creature) : ScriptedAI(creature) { } + npc_jennyAI(Creature* creature) : ScriptedAI(creature) + { + setCrateNumber = false; + } bool setCrateNumber; @@ -422,6 +442,9 @@ public: me->SetReactState(REACT_PASSIVE); + if (!me->GetOwner()) + return; + switch (me->GetOwner()->ToPlayer()->GetTeamId()) { case TEAM_ALLIANCE: @@ -1026,9 +1049,9 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - npc_escortAI::UpdateAI(uiDiff); + npc_escortAI::UpdateAI(diff); if (arthasInPosition && talbotInPosition) { @@ -1045,7 +1068,7 @@ public: SetEscortPaused(false); } - if (phaseTimer <= uiDiff) + if (phaseTimer <= diff) { Creature* talbot = me->GetCreature(*me, talbotGUID); Creature* arthas = me->GetCreature(*me, arthasGUID); @@ -1196,7 +1219,7 @@ public: phaseTimer = 0; phase = 0; } - } else phaseTimer -= uiDiff; + } else phaseTimer -= diff; if (!UpdateVictim()) return; @@ -1369,7 +1392,7 @@ public: CAST_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->talbotInPosition = true; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { if (bCheck) { @@ -1385,23 +1408,23 @@ public: if (me->GetAreaId() == 4125) { - if (shadowBoltTimer <= uiDiff) + if (shadowBoltTimer <= diff) { DoCastVictim(SPELL_SHADOW_BOLT); shadowBoltTimer = urand(5000, 12000); - } else shadowBoltTimer -= uiDiff; + } else shadowBoltTimer -= diff; - if (deflectionTimer <= uiDiff) + if (deflectionTimer <= diff) { DoCastVictim(SPELL_DEFLECTION); deflectionTimer = urand(20000, 25000); - } else deflectionTimer -= uiDiff; + } else deflectionTimer -= diff; - if (soulBlastTimer <= uiDiff) + if (soulBlastTimer <= diff) { DoCastVictim(SPELL_SOUL_BLAST); soulBlastTimer = urand(12000, 18000); - } else soulBlastTimer -= uiDiff; + } else soulBlastTimer -= diff; } DoMeleeAttackIfReady(); @@ -1491,11 +1514,11 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - ScriptedAI::UpdateAI(uiDiff); + ScriptedAI::UpdateAI(diff); - if (phaseTimer <= uiDiff) + if (phaseTimer <= diff) { switch (phase) { @@ -1551,7 +1574,7 @@ public: phase = 0; break; } - } else phaseTimer -= uiDiff; + } else phaseTimer -= diff; if (!UpdateVictim()) return; @@ -1632,7 +1655,7 @@ public: } } - void UpdateAI(uint32 /*uiDiff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) OVERRIDE { if (!UpdateVictim()) return; @@ -1728,7 +1751,7 @@ public: Talk(SAY_IMPRISIONED_BERYL_1); break; case 2: - Talk(SAY_IMPRISIONED_BERYL_2, caster->GetGUID()); + Talk(SAY_IMPRISIONED_BERYL_2, caster); break; case 3: Talk(SAY_IMPRISIONED_BERYL_3); @@ -1740,7 +1763,7 @@ public: Talk(SAY_IMPRISIONED_BERYL_5); break; case 6: - Talk(SAY_IMPRISIONED_BERYL_6, caster->GetGUID()); + Talk(SAY_IMPRISIONED_BERYL_6, caster); break; case 7: Talk(SAY_IMPRISIONED_BERYL_7); @@ -1872,7 +1895,7 @@ public: if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE) { creature->SetStandState(UNIT_STAND_STATE_STAND); - creature->AI()->Talk(SAY_BONKER_2, player->GetGUID()); + creature->AI()->Talk(SAY_BONKER_2, player); CAST_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID()); } return true; diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp index 34a217b6418..4c45bed1af8 100644 --- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp +++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp @@ -56,21 +56,21 @@ public: SetCombatMovement(false); } - uint64 uiTargetGUID; + uint64 targetGUID; void Reset() OVERRIDE { - uiTargetGUID = 0; + targetGUID = 0; } - void UpdateAI(uint32 /*uiDiff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) OVERRIDE { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; if (me->GetEntry() == NPC_WARMAGE_SARINA) { - if (!uiTargetGUID) + if (!targetGUID) { std::list<Creature*> orbList; GetCreatureListWithEntryInGrid(orbList, me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f); @@ -82,7 +82,7 @@ public: { if (pOrb->GetPositionY() < 1000) { - uiTargetGUID = pOrb->GetGUID(); + targetGUID = pOrb->GetGUID(); break; } } @@ -91,13 +91,13 @@ public: } }else { - if (!uiTargetGUID) + if (!targetGUID) if (Creature* pOrb = GetClosestCreatureWithEntry(me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f)) - uiTargetGUID = pOrb->GetGUID(); + targetGUID = pOrb->GetGUID(); } - if (Creature* pOrb = me->GetCreature(*me, uiTargetGUID)) + if (Creature* pOrb = me->GetCreature(*me, targetGUID)) DoCast(pOrb, SPELL_TRANSITUS_SHIELD_BEAM); } diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index 083b4f879ee..cf66ef4fb47 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -35,8 +35,8 @@ Script Data End */ enum Spells { - SPELL_TRESPASSER_A = 54028, - SPELL_TRESPASSER_H = 54029, + SPELL_TRESPASSER_A = 54028, + SPELL_TRESPASSER_H = 54029, SPELL_SUNREAVER_DISGUISE_FEMALE = 70973, SPELL_SUNREAVER_DISGUISE_MALE = 70974, @@ -46,8 +46,10 @@ enum Spells enum NPCs // All outdoor guards are within 35.0f of these NPCs { - NPC_APPLEBOUGH_A = 29547, - NPC_SWEETBERRY_H = 29715, + NPC_APPLEBOUGH_A = 29547, + NPC_SWEETBERRY_H = 29715, + NPC_SILVER_COVENANT_GUARDIAN_MAGE = 29254, + NPC_SUNREAVER_GUARDIAN_MAGE = 29255, }; class npc_mageguard_dalaran : public CreatureScript @@ -89,7 +91,7 @@ public: switch (me->GetEntry()) { - case 29254: + case NPC_SILVER_COVENANT_GUARDIAN_MAGE: if (player->GetTeam() == HORDE) // Horde unit found in Alliance area { if (GetClosestCreatureWithEntry(me, NPC_APPLEBOUGH_A, 32.0f)) @@ -101,7 +103,7 @@ public: DoCast(who, SPELL_TRESPASSER_A); // Teleport the Horde unit out } break; - case 29255: + case NPC_SUNREAVER_GUARDIAN_MAGE: if (player->GetTeam() == ALLIANCE) // Alliance unit found in Horde area { if (GetClosestCreatureWithEntry(me, NPC_SWEETBERRY_H, 32.0f)) @@ -133,7 +135,7 @@ public: enum HiraSnowdawn { - SPELL_COLD_WEATHER_FLYING = 54197 + SPELL_COLD_WEATHER_FLYING = 54197 }; #define GOSSIP_TEXT_TRAIN_HIRA "I seek training to ride a steed." diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 2c311e20a79..9673fef0a1e 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -446,12 +446,12 @@ public: if (roll == 1) // friendly version { tree->CastSpell(player, SPELL_CREATE_ITEM_BARK); - tree->AI()->Talk(SAY_WALKER_FRIENDLY, player->GetGUID()); + tree->AI()->Talk(SAY_WALKER_FRIENDLY, player); tree->DespawnOrUnsummon(1000); } else if (roll == 0) // enemy version { - tree->AI()->Talk(SAY_WALKER_ENEMY, player->GetGUID()); + tree->AI()->Talk(SAY_WALKER_ENEMY, player); tree->setFaction(FACTION_WALKER_ENEMY); tree->Attack(player, true); } @@ -517,7 +517,7 @@ enum WyrmDefenderEnum // Spells data SPELL_CHARACTER_SCRIPT = 49213, SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE = 52421, // ID - 52421 Wyrmrest Defender: On Low Health Boss Emote to Controller - Random /self/ - SPELL_RENEW = 49263, // casted to heal drakes + SPELL_RENEW = 49263, // cast to heal drakes SPELL_WYRMREST_DEFENDER_MOUNT = 49256, // Texts data @@ -603,13 +603,13 @@ class npc_wyrmrest_defender : public CreatureScript switch (spell->Id) { case SPELL_WYRMREST_DEFENDER_MOUNT: - Talk(WHISPER_MOUNTED, me->GetCharmerOrOwnerGUID()); + Talk(WHISPER_MOUNTED, me->GetCharmerOrOwner()); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); break; // Both below are for checking low hp warning case SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE: - Talk(BOSS_EMOTE_ON_LOW_HEALTH, me->GetCharmerOrOwnerGUID()); + Talk(BOSS_EMOTE_ON_LOW_HEALTH, me->GetCharmerOrOwner()); break; case SPELL_RENEW: if (!hpWarningReady && RenewRecoveryChecker <= 100) @@ -663,7 +663,7 @@ class npc_torturer_lecraft : public CreatureScript _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(12000, 15000)); if (Player* player = who->ToPlayer()) - Talk (SAY_AGGRO, player->GetGUID()); + Talk (SAY_AGGRO, player); } void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE @@ -679,7 +679,7 @@ class npc_torturer_lecraft : public CreatureScript if (_playerGUID != player->GetGUID()) return; - Talk(_textCounter, player->GetGUID()); + Talk(_textCounter, player); if (_textCounter == 5) player->KilledMonsterCredit(NPC_TORTURER_LECRAFT, 0); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 6587f0536b3..1f04089af87 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -160,7 +160,7 @@ public: if (player) { player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me); - Talk(SAY_QUEST_COMPLETE, player->GetGUID()); + Talk(SAY_QUEST_COMPLETE, player); } me->SetWalk(false); break; diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index a0b6524bd89..04331a88cca 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -225,7 +225,7 @@ public: break; case GOSSIP_ACTION_INFO_DEF+2: player->CLOSE_GOSSIP_MENU(); - creature->AI()->Talk(SAY_TEXTID_VEKJIK1, player->GetGUID()); + creature->AI()->Talk(SAY_TEXTID_VEKJIK1, player); player->AreaExploredOrEventHappens(QUEST_MAKING_PEACE); creature->CastSpell(player, SPELL_FREANZYHEARTS_FURY, false); break; @@ -772,7 +772,7 @@ public: { if (Creature* presence = caster->FindNearestCreature(NPC_PRESENCE, 50.0f)) { - presence->AI()->Talk(WHISPER_ACTIVATE, caster->GetGUID()); + presence->AI()->Talk(WHISPER_ACTIVATE, caster); presence->CastSpell(presence, SPELL_FREYA_DUMMY, true); // will target plants // Freya Dummy could be scripted with the following code @@ -1110,10 +1110,10 @@ public: switch (GetSpellInfo()->Id) { case SPELL_CORRECT_TRACKS: - player->MonsterSay(sObjectMgr->GetTrinityStringForDBCLocale(SAY_CORRECT_TRACKS), LANG_UNIVERSAL, player->GetGUID()); + player->MonsterSay(sObjectMgr->GetTrinityStringForDBCLocale(SAY_CORRECT_TRACKS), LANG_UNIVERSAL, player); break; case SPELL_INCORRECT_TRACKS: - player->MonsterSay(sObjectMgr->GetTrinityStringForDBCLocale(SAY_INCORRECT_TRACKS), LANG_UNIVERSAL, player->GetGUID()); + player->MonsterSay(sObjectMgr->GetTrinityStringForDBCLocale(SAY_INCORRECT_TRACKS), LANG_UNIVERSAL, player); break; default: break; diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index c09c817a2bf..e089d736992 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -57,7 +57,7 @@ public: switch (waypointId) { case 26: - Talk(SAY_END_WP_REACHED, player->GetGUID()); + Talk(SAY_END_WP_REACHED, player); break; case 27: player->GroupEventHappens(QUEST_BITTER_DEPARTURE, me); @@ -282,7 +282,7 @@ public: if (Vehicle* vehicle = me->GetVehicleKit()) if (Unit* passenger = vehicle->GetPassenger(0)) { - Talk(TEXT_EMOTE, passenger->GetGUID()); + Talk(TEXT_EMOTE, passenger); me->GetMotionMaster()->MovePath(NPC_DRAKE, false); } } @@ -339,17 +339,9 @@ public: } } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE - { - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - } - - void OnCharmed(bool /*apply*/) OVERRIDE - { - } + void WaypointReached(uint32 /*waypointId*/) OVERRIDE { } + void JustDied(Unit* /*killer*/) OVERRIDE { } + void OnCharmed(bool /*apply*/) OVERRIDE { } void UpdateAI(uint32 diff) OVERRIDE { @@ -414,7 +406,6 @@ class npc_hyldsmeet_protodrake : public CreatureScript } }; - /*##### # npc_brann_bronzebeard for Quest 13285 "Forging the Keystone" #####*/ @@ -438,19 +429,19 @@ enum BrannBronzebeard SAY_VOICE_4 = 3, SAY_VOICE_5 = 4, - EVENT_SCRIPT_1 = 1, - EVENT_SCRIPT_2 = 2, - EVENT_SCRIPT_3 = 3, - EVENT_SCRIPT_4 = 4, - EVENT_SCRIPT_5 = 5, - EVENT_SCRIPT_6 = 6, - EVENT_SCRIPT_7 = 7, - EVENT_SCRIPT_8 = 8, - EVENT_SCRIPT_9 = 9, - EVENT_SCRIPT_10 = 10, - EVENT_SCRIPT_11 = 11, - EVENT_SCRIPT_12 = 12, - EVENT_SCRIPT_13 = 13 + EVENT_SCRIPT_1 = 3, + EVENT_SCRIPT_2 = 4, + EVENT_SCRIPT_3 = 5, + EVENT_SCRIPT_4 = 6, + EVENT_SCRIPT_5 = 7, + EVENT_SCRIPT_6 = 8, + EVENT_SCRIPT_7 = 9, + EVENT_SCRIPT_8 = 10, + EVENT_SCRIPT_9 = 11, + EVENT_SCRIPT_10 = 12, + EVENT_SCRIPT_11 = 13, + EVENT_SCRIPT_12 = 14, + EVENT_SCRIPT_13 = 15 }; class npc_brann_bronzebeard_keystone : public CreatureScript @@ -486,7 +477,8 @@ public: switch (eventId) { case EVENT_SCRIPT_1: - Talk(SAY_BRANN_1, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + Talk(SAY_BRANN_1, player); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); if (Creature* voice = me->SummonCreature(NPC_A_DISTANT_VOICE, 7863.43f, -1396.585f, 1538.076f, 2.949606f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 49000)) voiceGUID = voice->GetGUID(); @@ -506,36 +498,41 @@ public: if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) { voice->AI()->DoCast(voice, SPELL_RESURRECTION); - voice->AI()->Talk(SAY_VOICE_1, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + voice->AI()->Talk(SAY_VOICE_1, player); } if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_1, 7860.273f, -1383.622f, 1538.302f, -1.658062f, 0, 0, -0.737277f, 0.6755905f, 0)) objectGUID[objectCounter++] = go->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_5, 6000); break; case EVENT_SCRIPT_5: - if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) - voice->AI()->Talk(SAY_VOICE_2, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_2, player); if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_2, 7875.67f, -1387.266f, 1538.323f, -2.373644f, 0, 0, -0.9271832f, 0.3746083f, 0)) objectGUID[objectCounter++] = go->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_6, 6000); break; case EVENT_SCRIPT_6: - if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) - voice->AI()->Talk(SAY_VOICE_3, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_3, player); if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_3, 7879.212f, -1401.175f, 1538.279f, 2.967041f, 0, 0, 0.9961939f, 0.08716504f, 0)) objectGUID[objectCounter++] = go->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_7, 6000); break; case EVENT_SCRIPT_7: - if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) - voice->AI()->Talk(SAY_VOICE_4, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_4, player); if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_4, 7868.944f, -1411.18f, 1538.213f, 2.111848f, 0, 0, 0.8703556f, 0.4924237f, 0)) objectGUID[objectCounter++] = go->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_8, 6000); break; case EVENT_SCRIPT_8: - if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) - voice->AI()->Talk(SAY_VOICE_5, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_5, player); if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_5, 7855.11f, -1406.839f, 1538.42f, 1.151916f, 0, 0, 0.5446386f, 0.8386708f, 0)) objectGUID[objectCounter] = go->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_9, 6000); @@ -546,14 +543,17 @@ public: events.ScheduleEvent(EVENT_SCRIPT_10, 6000); break; case EVENT_SCRIPT_10: - Talk(SAY_BRANN_2, playerGUID); if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + { + Talk(SAY_BRANN_2, player); player->KilledMonsterCredit(me->GetEntry()); + } events.ScheduleEvent(EVENT_SCRIPT_11, 6000); break; case EVENT_SCRIPT_11: me->SetFacingTo(2.932153f); - Talk(SAY_BRANN_3, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + Talk(SAY_BRANN_3, player); for (uint8 i = 0; i < 5; ++i) if (GameObject* go = ObjectAccessor::GetGameObject(*me, objectGUID[i])) @@ -588,64 +588,131 @@ public: } }; -enum CloseRift +/*##### +# Quest 13010 Krolmir, Hammer of Storms +#####*/ + +enum JokkumScriptcast { - SPELL_DESPAWN_RIFT = 61665 + NPC_KINGJOKKUM = 30331, + NPC_THORIM = 30390, + PATH_JOKKUM = 2072200, + PATH_JOKKUM_END = 2072201, + SAY_HOLD_ON = 0, + SAY_JOKKUM_1 = 1, + SAY_JOKKUM_2 = 2, + SAY_JOKKUM_3 = 3, + SAY_JOKKUM_4 = 4, + SAY_JOKKUM_5 = 5, + SAY_JOKKUM_6 = 6, + SAY_JOKKUM_7 = 7, + SAY_JOKKUM_8 = 8, + SAY_THORIM_1 = 0, + SAY_THORIM_2 = 1, + SAY_THORIM_3 = 2, + SAY_THORIM_4 = 3, + SPELL_JOKKUM_SUMMON = 56541, + SPELL_JOKKUM_KILL_CREDIT = 56545, + SPELL_EJECT_ALL_PASSENGERS = 50630, + SPELL_PLAYER_CAST_VERANUS_SUMMON = 56650, + SPELL_SUMMON_VERANUS_AND_THORIM = 56649, + EVENT_KROLMIR_1 = 16, + EVENT_KROLMIR_2 = 17, + EVENT_KROLMIR_3 = 18, + EVENT_KROLMIR_4 = 19, + EVENT_KROLMIR_5 = 20, + EVENT_KROLMIR_6 = 21, + EVENT_KROLMIR_7 = 22, + EVENT_KROLMIR_8 = 23, + EVENT_KROLMIR_9 = 24, }; -class spell_close_rift : public SpellScriptLoader +class npc_king_jokkum_vehicle : public CreatureScript { - public: - spell_close_rift() : SpellScriptLoader("spell_close_rift") { } +public: + npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { } - class spell_close_rift_AuraScript : public AuraScript + struct npc_king_jokkum_vehicleAI : public VehicleAI + { + npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) { } + + void Reset() OVERRIDE { - PrepareAuraScript(spell_close_rift_AuraScript); + playerGUID = 0; + pathEnd = false; + } - bool Load() OVERRIDE - { - _counter = 0; - return true; - } + void OnCharmed(bool /*apply*/) OVERRIDE { } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE + { + if (apply) { - return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT); + playerGUID = who->GetGUID(); + Talk(SAY_HOLD_ON, who); + me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); + me->GetMotionMaster()->MovePath(PATH_JOKKUM, false); } + } - void HandlePeriodic(AuraEffect const* /* aurEff */) + void MovementInform(uint32 type, uint32 id) OVERRIDE + { + if (type != WAYPOINT_MOTION_TYPE) + return; + + if (pathEnd) { - if (++_counter == 5) - GetTarget()->CastSpell((Unit*)NULL, SPELL_DESPAWN_RIFT, true); - } + if (id == 4) + { - void Register() OVERRIDE + } + } + else { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_close_rift_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + if (id == 19) + { + pathEnd = true; + me->SetFacingTo(0.418879f); + Talk(SAY_JOKKUM_1); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + me->CastSpell(player, SPELL_PLAYER_CAST_VERANUS_SUMMON); + me->CastSpell(me, SPELL_EJECT_ALL_PASSENGERS); + + } } + } - private: - uint8 _counter; + void UpdateAI(uint32 diff) OVERRIDE + { + if (!pathEnd) + return; - }; + events.Update(diff); - AuraScript* GetAuraScript() const OVERRIDE - { - return new spell_close_rift_AuraScript(); + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_KROLMIR_1: + Talk(SAY_JOKKUM_2); + events.ScheduleEvent(EVENT_KROLMIR_2, 4000); + break; + } + } } -}; -/*##### -# Krolmir, Hammer of Storms -#####*/ + private: + EventMap events; + uint64 playerGUID; + bool pathEnd; -enum JokkumScriptcast -{ - SPELL_JOKKUM_KILL_CREDIT = 56545, - SPELL_JOKKUM_SUMMON = 56541, - NPC_KINGJOKKUM = 30331, - SAY_HOLD_ON = 0, - PATH_JOKKUM = 2072200 + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_king_jokkum_vehicleAI(creature); + } }; class spell_jokkum_scriptcast : public SpellScriptLoader @@ -665,8 +732,8 @@ class spell_jokkum_scriptcast : public SpellScriptLoader void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_JOKKUM_SUMMON, true); + if (Unit* target = GetTarget()) + target->CastSpell(target, SPELL_JOKKUM_SUMMON, true); } void Register() OVERRIDE @@ -681,42 +748,114 @@ class spell_jokkum_scriptcast : public SpellScriptLoader } }; -class npc_king_jokkum_vehicle : public CreatureScript +class spell_veranus_summon : public SpellScriptLoader +{ + public: spell_veranus_summon() : SpellScriptLoader("spell_veranus_summon") { } + + class spell_veranus_summon_AuraScript : public AuraScript + { + PrepareAuraScript(spell_veranus_summon_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VERANUS_AND_THORIM)) + return false; + return true; + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* target = GetTarget()) + target->CastSpell(target, SPELL_SUMMON_VERANUS_AND_THORIM, true); + } + + void Register() OVERRIDE + { + OnEffectApply += AuraEffectApplyFn(spell_veranus_summon_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_veranus_summon_AuraScript(); + } +}; + +/*##### +# spell_jokkum_eject_all +#####*/ + +class spell_jokkum_eject_all : public SpellScriptLoader +{ + public: spell_jokkum_eject_all() : SpellScriptLoader("spell_jokkum_eject_all") { } + + class spell_jokkum_eject_all_SpellScript : public SpellScript + { + PrepareSpellScript(spell_jokkum_eject_all_SpellScript); + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Unit* caster = GetCaster()) + if (caster->IsVehicle()) + caster->GetVehicleKit()->RemoveAllPassengers(); + } + + void Register() OVERRIDE + { + OnEffectHitTarget += SpellEffectFn(spell_jokkum_eject_all_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const OVERRIDE + { + return new spell_jokkum_eject_all_SpellScript(); + } +}; + +enum CloseRift +{ + SPELL_DESPAWN_RIFT = 61665 +}; + +class spell_close_rift : public SpellScriptLoader { public: - npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { } + spell_close_rift() : SpellScriptLoader("spell_close_rift") { } - struct npc_king_jokkum_vehicleAI : public VehicleAI + class spell_close_rift_AuraScript : public AuraScript { - npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) { } + PrepareAuraScript(spell_close_rift_AuraScript); - void OnCharmed(bool /*apply*/) OVERRIDE { } + bool Load() OVERRIDE + { + _counter = 0; + return true; + } - void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) OVERRIDE { - if (apply) - { - Talk(SAY_HOLD_ON, who->GetGUID()); - me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); - me->GetMotionMaster()->MovePath(PATH_JOKKUM, false); - } + return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void HandlePeriodic(AuraEffect const* /* aurEff */) { - if (type != WAYPOINT_MOTION_TYPE) - return; + if (++_counter == 5) + GetTarget()->CastSpell((Unit*)NULL, SPELL_DESPAWN_RIFT, true); + } - // PointId in WaypointMovementGenerator doesn't match with PointId in DB - if (id == 19) - me->GetVehicleKit()->RemoveAllPassengers(); + void Register() OVERRIDE + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_close_rift_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } + + private: + uint8 _counter; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + AuraScript* GetAuraScript() const OVERRIDE { - return new npc_king_jokkum_vehicleAI(creature); + return new spell_close_rift_AuraScript(); } }; @@ -729,7 +868,9 @@ void AddSC_storm_peaks() new npc_icefang(); new npc_hyldsmeet_protodrake(); new npc_brann_bronzebeard_keystone(); - new spell_close_rift(); - new spell_jokkum_scriptcast(); new npc_king_jokkum_vehicle(); + new spell_jokkum_scriptcast(); + new spell_veranus_summon(); + new spell_jokkum_eject_all(); + new spell_close_rift(); } diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index a27ce0324ff..311b18524b2 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -237,11 +237,47 @@ class npc_wg_spirit_guide : public CreatureScript } }; +enum WGQueue +{ + SPELL_FROST_ARMOR = 12544 +}; + class npc_wg_queue : public CreatureScript { public: npc_wg_queue() : CreatureScript("npc_wg_queue") { } + struct npc_wg_queueAI : public ScriptedAI + { + npc_wg_queueAI(Creature* creature) : ScriptedAI(creature) { } + + uint32 FrostArmor_Timer; + + void Reset() OVERRIDE + { + FrostArmor_Timer = 0; + } + + void EnterCombat(Unit* /*who*/) OVERRIDE { } + + void UpdateAI(uint32 diff) OVERRIDE + { + if (FrostArmor_Timer <= diff) + { + DoCast(me, SPELL_FROST_ARMOR); + FrostArmor_Timer = 180000; + } + else FrostArmor_Timer -= diff; + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_wg_queueAI(creature); + } + bool OnGossipHello(Player* player, Creature* creature) OVERRIDE { if (creature->IsQuestGiver()) diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 1137c86f287..c2ce0201565 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -506,7 +506,7 @@ public: case EVENT_EASY_123: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) { - Talk(SAY_EASY_123, _playerGUID); + Talk(SAY_EASY_123, player); DoCast(player, SPELL_RANDOM_INGREDIENT_EASY_AURA); ++_getingredienttry; } @@ -514,7 +514,7 @@ public: case EVENT_MEDIUM_4: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) { - Talk(SAY_MEDIUM_4, _playerGUID); + Talk(SAY_MEDIUM_4, player); DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA); ++_getingredienttry; } @@ -522,7 +522,7 @@ public: case EVENT_MEDIUM_5: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) { - Talk(SAY_MEDIUM_5, _playerGUID); + Talk(SAY_MEDIUM_5, player); DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA); ++_getingredienttry; } @@ -530,7 +530,7 @@ public: case EVENT_HARD_6: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) { - Talk(SAY_HARD_6, _playerGUID); + Talk(SAY_HARD_6, player); DoCast(player, SPELL_RANDOM_INGREDIENT_HARD_AURA); ++_getingredienttry; } @@ -693,7 +693,7 @@ class spell_random_ingredient : public SpellScriptLoader if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) { finklestein->CastSpell(player, FetchIngredients[ingredient][0], true, NULL); - finklestein->AI()->Talk(FetchIngredients[ingredient][3], player->GetGUID()); + finklestein->AI()->Talk(FetchIngredients[ingredient][3], player); } } } @@ -776,7 +776,7 @@ class spell_pot_check : public SpellScriptLoader RemoveItems(player); player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f)) - finklestein->AI()->Talk(SAY_RUINED, player->GetGUID()); + finklestein->AI()->Talk(SAY_RUINED, player); return; } } @@ -823,7 +823,7 @@ class spell_fetch_ingredient_aura : public SpellScriptLoader if (Creature* finklestein = GetClosestCreatureWithEntry(target, NPC_FINKLESTEIN, 100.0f)) { target->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); - finklestein->AI()->Talk(SAY_RUINED, target->GetGUID()); + finklestein->AI()->Talk(SAY_RUINED, target); } } diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 783e7b9f09b..9b96255fde0 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -250,7 +250,7 @@ public: if (!Avatar_summoned && HealthBelowPct(25)) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); Talk(SAY_SUMMON); @@ -266,7 +266,7 @@ public: { if (target->GetTypeId() == TYPEID_PLAYER) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); Talk(SAY_ROAR); diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index 9f7a27ecdef..2c0c42e6092 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -149,7 +149,7 @@ public: { FocusedTargetGUID = target->GetGUID(); me->SummonCreature(NPC_FOCUS_FIRE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 5500); - Talk(EMOTE_FOCUSED, FocusedTargetGUID); + Talk(EMOTE_FOCUSED, target); } FocusFire_Timer = 15000+(rand()%5000); } else FocusFire_Timer -= diff; diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp index 862fe76decd..db69ca6c892 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp @@ -170,7 +170,7 @@ public: if (FrostNova_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); DoCast(me, SPELL_FROSTNOVA); @@ -194,7 +194,7 @@ public: { if (Blink_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); //expire movement, will prevent from running right back to victim after cast @@ -210,7 +210,7 @@ public: if (Beacon_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); if (!urand(0, 3)) @@ -301,7 +301,7 @@ public: if (Apprentice_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); DoCast(me, SPELL_ETHEREAL_APPRENTICE, true); diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp index 3a845842934..6f2b05a73c0 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp @@ -107,7 +107,7 @@ public: { if (DarkShell_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); Talk(EMOTE_DARK_SHELL); diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp index af8a4390d96..e36e80f8c14 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -140,7 +140,7 @@ class boss_anzu : public CreatureScript if (target->getPowerType() == POWER_MANA) { DoCast(target, SPELL_SPELL_BOMB); - Talk(SAY_SPELL_BOMB, target->GetGUID()); + Talk(SAY_SPELL_BOMB, target); } } break; diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp index c077cec3c04..6adfdf7c885 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -115,7 +115,7 @@ public: { Talk(SAY_SUMMON); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); DoCast(me, SPELL_SUMMON_SYTH_ARCANE, true); //front diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp index 022ac3e9e4d..217eb2ea004 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp @@ -167,7 +167,7 @@ public: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); //Spell doesn't work, but we use for visual effect at least diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp index 57c494756e5..0f13a03f568 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp @@ -207,7 +207,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_wrathbone_flayerAI(creature); + return GetInstanceAI<npc_wrathbone_flayerAI>(creature); } }; diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp index 3a33885144d..9029a8bd2cd 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp @@ -64,7 +64,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gurtogg_bloodboilAI(creature); + return GetInstanceAI<boss_gurtogg_bloodboilAI>(creature); } struct boss_gurtogg_bloodboilAI : public ScriptedAI diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 3f90118ec8b..2b312aeacde 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -608,7 +608,7 @@ public: if (Conversation[count].emote) creature->HandleEmoteCommand(Conversation[count].emote); // Make the Creature do some animation! if (Conversation[count].text.size()) - creature->MonsterYell(Conversation[count].text.c_str(), LANG_UNIVERSAL, 0); // Have the Creature yell out some text + creature->MonsterYell(Conversation[count].text.c_str(), LANG_UNIVERSAL, NULL); // Have the Creature yell out some text if (Conversation[count].sound) DoPlaySoundToSet(creature, Conversation[count].sound); // Play some sound on the creature } @@ -764,7 +764,7 @@ public: if (!MaievGUID) // If Maiev cannot be summoned, reset the encounter and post some errors to the console. { EnterEvadeMode(); - me->MonsterTextEmote(EMOTE_UNABLE_TO_SUMMON, 0); + me->MonsterTextEmote(EMOTE_UNABLE_TO_SUMMON, NULL); TC_LOG_ERROR("scripts", "SD2 ERROR: Unable to summon Maiev Shadowsong (entry: 23197). Check your database to see if you have the proper SQL for Maiev Shadowsong (entry: 23197)"); } } @@ -974,7 +974,7 @@ public: break; } - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; if (Phase == PHASE_NORMAL || Phase == PHASE_NORMAL_2 || (Phase == PHASE_NORMAL_MAIEV && !me->HasAura(SPELL_CAGED))) @@ -1126,7 +1126,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_illidan_stormrageAI(creature); + return GetInstanceAI<boss_illidan_stormrageAI>(creature); } }; @@ -1794,7 +1794,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_akama_illidanAI(creature); + return GetInstanceAI<npc_akama_illidanAI>(creature); } }; @@ -2228,7 +2228,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_parasitic_shadowfiendAI(creature); + return GetInstanceAI<npc_parasitic_shadowfiendAI>(creature); } }; diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp index aafe5f365b2..6691d04441b 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp @@ -84,7 +84,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_shahrazAI(creature); + return GetInstanceAI<boss_shahrazAI>(creature); } struct boss_shahrazAI : public ScriptedAI diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index ad913a45071..0c8d7a7206c 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -134,7 +134,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_reliquary_of_soulsAI(creature); + return GetInstanceAI<boss_reliquary_of_soulsAI>(creature); } struct boss_reliquary_of_soulsAI : public ScriptedAI diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 1a2a55e6d00..0f67ba822a1 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -405,7 +405,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_shade_of_akamaAI(creature); + return GetInstanceAI<boss_shade_of_akamaAI>(creature); } }; @@ -550,7 +550,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_akamaAI(creature); + return GetInstanceAI<npc_akamaAI>(creature); } }; @@ -622,7 +622,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ashtongue_channelerAI(creature); + return GetInstanceAI<npc_ashtongue_channelerAI>(creature); } }; @@ -730,7 +730,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_creature_generator_akamaAI(creature); + return GetInstanceAI<npc_creature_generator_akamaAI>(creature); } }; @@ -851,7 +851,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ashtongue_sorcererAI(creature); + return GetInstanceAI<npc_ashtongue_sorcererAI>(creature); } }; @@ -941,7 +941,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ashtongue_defenderAI(creature); + return GetInstanceAI<npc_ashtongue_defenderAI>(creature); } }; @@ -1021,7 +1021,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ashtongue_rogueAI(creature); + return GetInstanceAI<npc_ashtongue_rogueAI>(creature); } }; @@ -1101,7 +1101,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ashtongue_elementalistAI(creature); + return GetInstanceAI<npc_ashtongue_elementalistAI>(creature); } }; @@ -1198,7 +1198,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ashtongue_spiritbinderAI(creature); + return GetInstanceAI<npc_ashtongue_spiritbinderAI>(creature); } }; diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index b62e7b35a3c..0ba2a16e9df 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -90,7 +90,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_supremusAI(creature); + return GetInstanceAI<boss_supremusAI>(creature); } struct boss_supremusAI : public ScriptedAI diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index 7d445e23053..e8f2f75abc1 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -217,7 +217,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_teron_gorefiendAI(creature); + return GetInstanceAI<boss_teron_gorefiendAI>(creature); } struct boss_teron_gorefiendAI : public ScriptedAI diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp index 1f4a36afad6..c3dceaffd91 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp @@ -78,7 +78,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_najentusAI(creature); + return GetInstanceAI<boss_najentusAI>(creature); } struct boss_najentusAI : public ScriptedAI diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index 057bb725c32..1ac413f237d 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -218,7 +218,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_illidari_councilAI(creature); + return GetInstanceAI<npc_illidari_councilAI>(creature); } struct npc_illidari_councilAI : public ScriptedAI @@ -476,7 +476,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_gathios_the_shattererAI(creature); + return GetInstanceAI<boss_gathios_the_shattererAI>(creature); } struct boss_gathios_the_shattererAI : public boss_illidari_councilAI @@ -608,7 +608,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_high_nethermancer_zerevorAI(creature); + return GetInstanceAI<boss_high_nethermancer_zerevorAI>(creature); } struct boss_high_nethermancer_zerevorAI : public boss_illidari_councilAI @@ -712,7 +712,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lady_malandeAI(creature); + return GetInstanceAI<boss_lady_malandeAI>(creature); } struct boss_lady_malandeAI : public boss_illidari_councilAI @@ -790,7 +790,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_veras_darkshadowAI(creature); + return GetInstanceAI<boss_veras_darkshadowAI>(creature); } struct boss_veras_darkshadowAI : public boss_illidari_councilAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index a27677f60f5..b31afd1cdc9 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -104,7 +104,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_fathomlord_karathressAI(creature); + return GetInstanceAI<boss_fathomlord_karathressAI>(creature); } struct boss_fathomlord_karathressAI : public ScriptedAI @@ -293,7 +293,7 @@ public: if (continueTriggering) { DoCast(me, SPELL_BLESSING_OF_THE_TIDES); - me->MonsterYell(SAY_GAIN_BLESSING_OF_TIDES, LANG_UNIVERSAL, 0); + me->MonsterYell(SAY_GAIN_BLESSING_OF_TIDES, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_GAIN_BLESSING_OF_TIDES); } } @@ -312,7 +312,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_fathomguard_sharkkisAI(creature); + return GetInstanceAI<boss_fathomguard_sharkkisAI>(creature); } struct boss_fathomguard_sharkkisAI : public ScriptedAI @@ -459,7 +459,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_fathomguard_tidalvessAI(creature); + return GetInstanceAI<boss_fathomguard_tidalvessAI>(creature); } struct boss_fathomguard_tidalvessAI : public ScriptedAI @@ -582,7 +582,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_fathomguard_caribdisAI(creature); + return GetInstanceAI<boss_fathomguard_caribdisAI>(creature); } struct boss_fathomguard_caribdisAI : public ScriptedAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index d6205cb3ec7..26119e0eb31 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -86,7 +86,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_hydross_the_unstableAI(creature); + return GetInstanceAI<boss_hydross_the_unstableAI>(creature); } struct boss_hydross_the_unstableAI : public ScriptedAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 1d233aa6da4..53ed13e8515 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -140,7 +140,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lady_vashjAI(creature); + return GetInstanceAI<boss_lady_vashjAI>(creature); } struct boss_lady_vashjAI : public ScriptedAI @@ -556,7 +556,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_enchanted_elementalAI(creature); + return GetInstanceAI<npc_enchanted_elementalAI>(creature); } struct npc_enchanted_elementalAI : public ScriptedAI @@ -651,7 +651,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_tainted_elementalAI(creature); + return GetInstanceAI<npc_tainted_elementalAI>(creature); } struct npc_tainted_elementalAI : public ScriptedAI @@ -720,7 +720,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_toxic_sporebatAI(creature); + return GetInstanceAI<npc_toxic_sporebatAI>(creature); } struct npc_toxic_sporebatAI : public ScriptedAI @@ -819,7 +819,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_shield_generator_channelAI(creature); + return GetInstanceAI<npc_shield_generator_channelAI>(creature); } struct npc_shield_generator_channelAI : public ScriptedAI @@ -831,12 +831,12 @@ public: InstanceScript* instance; uint32 CheckTimer; - bool Casted; + bool Cast; void Reset() OVERRIDE { CheckTimer = 0; - Casted = false; + Cast = false; me->SetDisplayId(11686); // invisible me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -857,10 +857,10 @@ public: if (vashj && vashj->IsAlive()) { // start visual channel - if (!Casted || !vashj->HasAura(SPELL_MAGIC_BARRIER)) + if (!Cast || !vashj->HasAura(SPELL_MAGIC_BARRIER)) { DoCast(vashj, SPELL_MAGIC_BARRIER, true); - Casted = true; + Cast = true; } } CheckTimer = 1000; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index 83ec5e053c0..bfe63b80e48 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -181,7 +181,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_leotheras_the_blindAI(creature); + return GetInstanceAI<boss_leotheras_the_blindAI>(creature); } struct boss_leotheras_the_blindAI : public ScriptedAI @@ -677,7 +677,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_greyheart_spellbinderAI(creature); + return GetInstanceAI<npc_greyheart_spellbinderAI>(creature); } struct npc_greyheart_spellbinderAI : public ScriptedAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 0393379d26a..392ad2fe2b4 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -81,7 +81,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_the_lurker_belowAI(creature); + return GetInstanceAI<boss_the_lurker_belowAI>(creature); } struct boss_the_lurker_belowAI : public ScriptedAI @@ -240,7 +240,7 @@ public: if (SpoutTimer <= diff) { - me->MonsterTextEmote(EMOTE_SPOUT, 0, true); + me->MonsterTextEmote(EMOTE_SPOUT, NULL, true); me->SetReactState(REACT_PASSIVE); me->GetMotionMaster()->MoveRotate(20000, urand(0, 1) ? ROTATE_DIRECTION_LEFT : ROTATE_DIRECTION_RIGHT); SpoutTimer = 45000; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index 48a4a1e5ecd..6f507a3c50f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -91,7 +91,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_morogrim_tidewalkerAI(creature); + return GetInstanceAI<boss_morogrim_tidewalkerAI>(creature); } struct boss_morogrim_tidewalkerAI : public ScriptedAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp index d6162fd1ea4..c7d99b8da85 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -41,7 +41,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_thespiaAI(creature); + return GetInstanceAI<boss_thespiaAI>(creature); } struct boss_thespiaAI : public ScriptedAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp index 241d0f8fec2..6a94fc7ff00 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp @@ -57,7 +57,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_mekgineer_steamriggerAI(creature); + return GetInstanceAI<boss_mekgineer_steamriggerAI>(creature); } struct boss_mekgineer_steamriggerAI : public ScriptedAI @@ -197,7 +197,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_steamrigger_mechanicAI(creature); + return GetInstanceAI<npc_steamrigger_mechanicAI>(creature); } struct npc_steamrigger_mechanicAI : public ScriptedAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index 887d51a43bf..7deed59f8c4 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -50,7 +50,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_naga_distillerAI(creature); + return GetInstanceAI<npc_naga_distillerAI>(creature); } struct npc_naga_distillerAI : public ScriptedAI @@ -108,7 +108,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_warlord_kalithreshAI(creature); + return GetInstanceAI<boss_warlord_kalithreshAI>(creature); } struct boss_warlord_kalithreshAI : public ScriptedAI diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index be4cac80adb..d238bf98041 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -71,7 +71,8 @@ class boss_broggok : public CreatureScript PoisonSpawn_Timer = 5000; PoisonBolt_Timer = 7000; DoAction(ACTION_RESET_BROGGOK); - instance->SetData(TYPE_BROGGOK_EVENT, NOT_STARTED); + if (instance) + instance->SetData(TYPE_BROGGOK_EVENT, NOT_STARTED); } void EnterCombat(Unit* /*who*/) OVERRIDE @@ -154,7 +155,7 @@ class boss_broggok : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_broggokAI(creature); + return GetInstanceAI<boss_broggokAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index f6bceb78a14..0aec396afdd 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -115,7 +115,7 @@ class boss_kelidan_the_breaker : public CreatureScript void EnterCombat(Unit* who) OVERRIDE { Talk(SAY_WAKE); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); DoStartMovement(who); if (instance) @@ -207,7 +207,7 @@ class boss_kelidan_the_breaker : public CreatureScript { if (check_Timer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) DoCast(me, SPELL_EVOCATION); check_Timer = 5000; } @@ -248,7 +248,7 @@ class boss_kelidan_the_breaker : public CreatureScript if (BurningNova_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); Talk(SAY_NOVA); @@ -275,7 +275,7 @@ class boss_kelidan_the_breaker : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kelidan_the_breakerAI(creature); + return GetInstanceAI<boss_kelidan_the_breakerAI>(creature); } }; @@ -311,7 +311,7 @@ class npc_shadowmoon_channeler : public CreatureScript ShadowBolt_Timer = 1000+rand()%1000; MarkOfShadow_Timer = 5000+rand()%2000; check_Timer = 0; - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); } @@ -319,7 +319,7 @@ class npc_shadowmoon_channeler : public CreatureScript { if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100)) CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerEngaged(who); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); DoStartMovement(who); } @@ -336,7 +336,7 @@ class npc_shadowmoon_channeler : public CreatureScript { if (check_Timer <= diff) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100)) { uint64 channeler = CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->GetChanneled(me); @@ -373,7 +373,7 @@ class npc_shadowmoon_channeler : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_shadowmoon_channelerAI(creature); + return GetInstanceAI<npc_shadowmoon_channelerAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp index 33e23c12d14..b41b21c5d17 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp @@ -156,7 +156,7 @@ class boss_the_maker : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_the_makerAI(creature); + return GetInstanceAI<boss_the_makerAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp index 7e80182f1e8..6f8eac88c66 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp @@ -224,7 +224,7 @@ class boss_omor_the_unscarred : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_omor_the_unscarredAI(creature); + return GetInstanceAI<boss_omor_the_unscarredAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index f4ee716dc67..5657880cbb6 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -71,7 +71,7 @@ enum Spells SPELL_SHADOW_CAGE = 30168, SPELL_SHADOW_GRASP = 30410, SPELL_SHADOW_GRASP_VISUAL = 30166, - SPELL_MIND_EXHAUSTION = 44032, //Casted by the cubes when channeling ends + SPELL_MIND_EXHAUSTION = 44032, //Cast by the cubes when channeling ends SPELL_SHADOW_CAGE_C = 30205, SPELL_SHADOW_GRASP_C = 30207, SPELL_SHADOW_BOLT_VOLLEY = 30510, @@ -392,7 +392,7 @@ class boss_magtheridon : public CreatureScript if (Quake_Timer <= diff) { // to avoid blastnova interruption - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { DoCast(me, SPELL_QUAKE_TRIGGER, true); Quake_Timer = 50000; @@ -421,7 +421,7 @@ class boss_magtheridon : public CreatureScript Blaze_Timer -= diff; if (!Phase3 && HealthBelowPct(30) - && !me->IsNonMeleeSpellCasted(false) // blast nova + && !me->IsNonMeleeSpellCast(false) // blast nova && !me->HasUnitState(UNIT_STATE_STUNNED)) // shadow cage and earthquake { Phase3 = true; @@ -457,7 +457,7 @@ class boss_magtheridon : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_magtheridonAI(creature); + return GetInstanceAI<boss_magtheridonAI>(creature); } }; @@ -576,7 +576,7 @@ class npc_hellfire_channeler : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_hellfire_channelerAI(creature); + return GetInstanceAI<npc_hellfire_channelerAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp index bfe829de9fd..37a37d2197e 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp @@ -180,7 +180,7 @@ class instance_magtheridons_lair : public InstanceMapScript Creature* Magtheridon = instance->GetCreature(MagtheridonGUID); if (Magtheridon && Magtheridon->IsAlive()) { - Magtheridon->MonsterTextEmote(EMOTE_BONDS_WEAKEN, 0); + Magtheridon->MonsterTextEmote(EMOTE_BONDS_WEAKEN, NULL); CageTimer = 120000; } HandleGameObject(DoorGUID, false); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index 981774a677b..93f8b4f5030 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -297,7 +297,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_grand_warlock_nethekurseAI(creature); + return GetInstanceAI<boss_grand_warlock_nethekurseAI>(creature); } }; @@ -369,7 +369,7 @@ class npc_fel_orc_convert : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_fel_orc_convertAI(creature); + return GetInstanceAI<npc_fel_orc_convertAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index 9c4be7c0b1b..d5e56e13f24 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -388,7 +388,7 @@ class boss_warbringer_omrogg : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_warbringer_omroggAI(creature); + return GetInstanceAI<boss_warbringer_omroggAI>(creature); } }; @@ -438,7 +438,7 @@ class npc_omrogg_heads : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_omrogg_headsAI(creature); + return GetInstanceAI<npc_omrogg_headsAI>(creature); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp index f9ec3edb362..4aab27024c1 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp @@ -311,7 +311,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_warchief_kargath_bladefistAI(creature); + return GetInstanceAI<boss_warchief_kargath_bladefistAI>(creature); } }; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 5d789359864..4659c7bc627 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -426,7 +426,7 @@ class boss_alar : public CreatureScript void DoMeleeAttackIfReady() { - if (me->isAttackReady() && !me->IsNonMeleeSpellCasted(false)) + if (me->isAttackReady() && !me->IsNonMeleeSpellCast(false)) { if (me->IsWithinMeleeRange(me->GetVictim())) { @@ -451,7 +451,7 @@ class boss_alar : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_alarAI(creature); + return GetInstanceAI<boss_alarAI>(creature); } }; @@ -528,7 +528,7 @@ class npc_ember_of_alar : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ember_of_alarAI(creature); + return GetInstanceAI<npc_ember_of_alarAI>(creature); } }; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index c5c3f6deb12..aede4a6cefc 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -419,7 +419,7 @@ class boss_high_astromancer_solarian : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_high_astromancer_solarianAI(creature); + return GetInstanceAI<boss_high_astromancer_solarianAI>(creature); } }; @@ -506,7 +506,7 @@ class npc_solarium_priest : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_solarium_priestAI(creature); + return GetInstanceAI<npc_solarium_priestAI>(creature); } }; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 2f9e882d176..5651707985c 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -308,7 +308,7 @@ class boss_kaelthas : public CreatureScript uint32 Phase; uint32 PhaseSubphase; //generic uint32 Phase_Timer; //generic timer - uint32 PyrosCasted; + uint32 PyrosCast; bool InGravityLapse; bool IsCastingFireball; @@ -330,7 +330,7 @@ class boss_kaelthas : public CreatureScript GravityLapse_Phase = 0; NetherBeam_Timer = 8000; NetherVapor_Timer = 10000; - PyrosCasted = 0; + PyrosCast = 0; Phase = 0; InGravityLapse = false; IsCastingFireball = false; @@ -750,7 +750,7 @@ class boss_kaelthas : public CreatureScript { if (!IsCastingFireball) { - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { //interruptable me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); @@ -844,19 +844,19 @@ class boss_kaelthas : public CreatureScript { DoCast(me, SPELL_SHOCK_BARRIER); ChainPyros = true; - PyrosCasted = 0; + PyrosCast = 0; ShockBarrier_Timer = 60000; } else ShockBarrier_Timer -= diff; //Chain Pyros (3 of them max) - if (ChainPyros && !me->IsNonMeleeSpellCasted(false)) + if (ChainPyros && !me->IsNonMeleeSpellCast(false)) { - if (PyrosCasted < 3) + if (PyrosCast < 3) { DoCastVictim(SPELL_PYROBLAST); - ++PyrosCasted; + ++PyrosCast; } else { @@ -1011,7 +1011,7 @@ class boss_kaelthas : public CreatureScript }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_kaelthasAI(creature); + return GetInstanceAI<boss_kaelthasAI>(creature); } }; @@ -1078,7 +1078,7 @@ class boss_thaladred_the_darkener : public CreatureScript { DoResetThreat(); me->AddThreat(target, 5000000.0f); - Talk(EMOTE_THALADRED_GAZE, target->GetGUID()); + Talk(EMOTE_THALADRED_GAZE, target); Gaze_Timer = 8500; } } @@ -1109,7 +1109,7 @@ class boss_thaladred_the_darkener : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_thaladred_the_darkenerAI(creature); + return GetInstanceAI<boss_thaladred_the_darkenerAI>(creature); } }; @@ -1177,7 +1177,7 @@ class boss_lord_sanguinar : public CreatureScript }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_lord_sanguinarAI(creature); + return GetInstanceAI<boss_lord_sanguinarAI>(creature); } }; //Grand Astromancer Capernian AI @@ -1321,7 +1321,7 @@ class boss_grand_astromancer_capernian : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_grand_astromancer_capernianAI(creature); + return GetInstanceAI<boss_grand_astromancer_capernianAI>(creature); } }; @@ -1404,7 +1404,7 @@ class boss_master_engineer_telonicus : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_master_engineer_telonicusAI(creature); + return GetInstanceAI<boss_master_engineer_telonicusAI>(creature); } }; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index f842ed19f3c..ef53d8fed92 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -172,7 +172,7 @@ class boss_void_reaver : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_void_reaverAI(creature); + return GetInstanceAI<boss_void_reaverAI>(creature); } }; diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index b5172245b49..7e4fc5c9bb5 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -223,7 +223,7 @@ class npc_ragin_flames : public CreatureScript }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_ragin_flamesAI(creature); + return GetInstanceAI<npc_ragin_flamesAI>(creature); } }; diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index ff3145c5c78..741b1378e4a 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -116,11 +116,10 @@ class npc_millhouse_manastorm : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) OVERRIDE { - Talk(SAY_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); } void JustDied(Unit* /*killer*/) OVERRIDE @@ -191,7 +190,7 @@ class npc_millhouse_manastorm : public CreatureScript if (Pyroblast_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; Talk(SAY_PYRO); diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h index 1ebfad4dfeb..c3b7d754a0d 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h @@ -32,11 +32,11 @@ enum DataTypes // Additional Data DATA_CONVERSATION = 4, - DATA_WARDEN_1 = 5, // used by EventAI - DATA_WARDEN_2 = 6, // used by EventAI - DATA_WARDEN_3 = 7, // used by EventAI - DATA_WARDEN_4 = 8, // used by EventAI - DATA_WARDEN_5 = 9, // used by EventAI + DATA_WARDEN_1 = 5, // used by SmartAI + DATA_WARDEN_2 = 6, // used by SmartAI + DATA_WARDEN_3 = 7, // used by SmartAI + DATA_WARDEN_4 = 8, // used by SmartAI + DATA_WARDEN_5 = 9, // used by SmartAI DATA_MELLICHAR = 10, DATA_WARDENS_SHIELD = 11 }; diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index 48d955acbc3..d590093de56 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -137,7 +137,7 @@ class boss_harbinger_skyriss : public CreatureScript void DoSplit(uint32 val) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(false); Talk(SAY_IMAGE); @@ -211,7 +211,7 @@ class boss_harbinger_skyriss : public CreatureScript if (Fear_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; Talk(SAY_FEAR); @@ -228,7 +228,7 @@ class boss_harbinger_skyriss : public CreatureScript if (Domination_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; Talk(SAY_MIND); @@ -247,7 +247,7 @@ class boss_harbinger_skyriss : public CreatureScript { if (ManaBurn_Timer <= diff) { - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) return; if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)) diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp index 1b362fe8a5a..fe072b437eb 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp @@ -126,7 +126,7 @@ class boss_high_botanist_freywinn : public CreatureScript { Talk(SAY_TREE); - if (me->IsNonMeleeSpellCasted(false)) + if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); me->RemoveAllAuras(); diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index acc3317d7bd..39a97bd4d8a 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -19,16 +19,15 @@ /* ScriptData SDName: Blades_Edge_Mountains SD%Complete: 90 -SDComment: Quest support: 10503, 10504, 10556, 10594, 10609, 10682, 10821, 10980. Ogri'la->Skettis Flight. (npc_daranelle needs bit more work before consider complete) +SDComment: Quest support: 10503, 10504, 10556, 10594, 10609, 10821. Ogri'la->Skettis Flight. (npc_daranelle needs bit more work before consider complete) SDCategory: Blade's Edge Mountains EndScriptData */ /* ContentData -npc_bladespire_ogre +npc_bloodmaul_brutebane +npc_bloodmaul_brute npc_nether_drake npc_daranelle -npc_overseer_nuaar -npc_saikkal_the_elder go_legion_obelisk go_thunderspike EndContentData */ @@ -45,14 +44,174 @@ EndContentData */ #include "SpellAuras.h" #include "SpellAuraEffects.h" -//Support for quest: You're Fired! (10821) -bool obelisk_one, obelisk_two, obelisk_three, obelisk_four, obelisk_five; +/*###### +## npc_bloodmaul_brutebane +######*/ + +enum Bloodmaul +{ + NPC_OGRE_BRUTE = 19995, + NPC_QUEST_CREDIT = 21241, + GO_KEG = 184315, + QUEST_GETTING_THE_BLADESPIRE_TANKED = 10512, + QUEST_BLADESPIRE_KEGGER = 10545 +}; + +class npc_bloodmaul_brutebane : public CreatureScript +{ +public: + npc_bloodmaul_brutebane() : CreatureScript("npc_bloodmaul_brutebane") { } -#define LEGION_OBELISK_ONE 185193 -#define LEGION_OBELISK_TWO 185195 -#define LEGION_OBELISK_THREE 185196 -#define LEGION_OBELISK_FOUR 185197 -#define LEGION_OBELISK_FIVE 185198 + struct npc_bloodmaul_brutebaneAI : public ScriptedAI + { + npc_bloodmaul_brutebaneAI(Creature* creature) : ScriptedAI(creature) + { + if (Creature* Ogre = me->FindNearestCreature(NPC_OGRE_BRUTE, 50, true)) + { + Ogre->SetReactState(REACT_DEFENSIVE); + Ogre->GetMotionMaster()->MovePoint(1, me->GetPositionX()-1, me->GetPositionY()+1, me->GetPositionZ()); + } + } + + uint64 OgreGUID; + + void Reset() OVERRIDE + { + OgreGUID = 0; + } + + void UpdateAI(uint32 /*diff*/) OVERRIDE { } + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_bloodmaul_brutebaneAI(creature); + } +}; + +/*###### +## npc_bloodmaul_brute +######*/ + +enum BloodmaulBrute +{ + EVENT_CLEAVE = 1, + EVENT_DEBILITATING_STRIKE = 2, + SAY_AGGRO = 0, + SAY_DEATH = 1, + SAY_ENRAGE = 2, + SPELL_CLEAVE = 15496, + SPELL_DEBILITATING_STRIKE = 37577, + SPELL_ENRAGE = 8599, + QUEST_INTO_THE_SOULGRINDER = 11000 +}; + +class npc_bloodmaul_brute : public CreatureScript +{ +public: + npc_bloodmaul_brute() : CreatureScript("npc_bloodmaul_brute") { } + + struct npc_bloodmaul_bruteAI : public ScriptedAI + { + npc_bloodmaul_bruteAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() OVERRIDE + { + PlayerGUID = 0; + hp30 = false; + } + + void EnterCombat(Unit* /*who*/) OVERRIDE + { + if (urand (0, 100) < 35) + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_CLEAVE, urand(9000,12000)); + events.ScheduleEvent(EVENT_DEBILITATING_STRIKE, 15000); + } + + void JustDied(Unit* killer) OVERRIDE + { + if (killer->GetTypeId() == TYPEID_PLAYER) + if (killer->ToPlayer()->GetQuestRewardStatus(QUEST_INTO_THE_SOULGRINDER)) + Talk(SAY_DEATH); + } + + void MoveInLineOfSight(Unit* who) OVERRIDE + { + if (!who || (!who->IsAlive())) + return; + + if (me->IsWithinDistInMap(who, 50.0f)) + { + if (who->GetTypeId() == TYPEID_PLAYER) + if (who->ToPlayer()->GetQuestStatus(QUEST_GETTING_THE_BLADESPIRE_TANKED) == QUEST_STATUS_INCOMPLETE + || who->ToPlayer()->GetQuestStatus(QUEST_BLADESPIRE_KEGGER) == QUEST_STATUS_INCOMPLETE) + PlayerGUID = who->GetGUID(); + } + } + + void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE + { + if (id == 1) + { + if (GameObject* Keg = me->FindNearestGameObject(GO_KEG, 20)) + Keg->Delete(); + + me->HandleEmoteCommand(7); + me->SetReactState(REACT_AGGRESSIVE); + me->GetMotionMaster()->MoveTargetedHome(); + + Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); + Creature* Credit = me->FindNearestCreature(NPC_QUEST_CREDIT, 50, true); + if (player && Credit) + player->KilledMonster(Credit->GetCreatureTemplate(), Credit->GetGUID()); + } + } + + void UpdateAI(uint32 diff) OVERRIDE + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CLEAVE: + DoCast(me, SPELL_CLEAVE); + events.ScheduleEvent(EVENT_CLEAVE, urand(9000,12000)); + break; + case EVENT_DEBILITATING_STRIKE: + DoCastVictim(SPELL_DEBILITATING_STRIKE); + events.ScheduleEvent(EVENT_DEBILITATING_STRIKE, urand(18000,22000)); + break; + } + } + + if (!hp30 && HealthBelowPct(30)) + { + hp30 = true; + Talk(SAY_ENRAGE); + DoCast(me, SPELL_ENRAGE); + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap events; + uint64 PlayerGUID; + bool hp30; + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_bloodmaul_bruteAI(creature); + } +}; /*###### ## npc_nether_drake @@ -85,11 +244,6 @@ class npc_nether_drake : public CreatureScript public: npc_nether_drake() : CreatureScript("npc_nether_drake") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_nether_drakeAI(creature); - } - struct npc_nether_drakeAI : public ScriptedAI { npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature) { } @@ -233,6 +387,11 @@ public: DoMeleeAttackIfReady(); } }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_nether_drakeAI(creature); + } }; /*###### @@ -241,8 +400,9 @@ public: enum Daranelle { - SAY_SPELL_INFLUENCE = 0, - SPELL_LASHHAN_CHANNEL = 36904 + SAY_SPELL_INFLUENCE = 0, + SPELL_LASHHAN_CHANNEL = 36904, + SPELL_DISPELLING_ANALYSIS = 37028 }; class npc_daranelle : public CreatureScript @@ -250,11 +410,6 @@ class npc_daranelle : public CreatureScript public: npc_daranelle() : CreatureScript("npc_daranelle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_daranelleAI(creature); - } - struct npc_daranelleAI : public ScriptedAI { npc_daranelleAI(Creature* creature) : ScriptedAI(creature) { } @@ -270,88 +425,34 @@ public: { if (who->HasAura(SPELL_LASHHAN_CHANNEL) && me->IsWithinDistInMap(who, 10.0f)) { - Talk(SAY_SPELL_INFLUENCE, who->GetGUID()); + Talk(SAY_SPELL_INFLUENCE, who); /// @todo Move the below to updateAI and run if this statement == true - DoCast(who, 37028, true); + DoCast(who, SPELL_DISPELLING_ANALYSIS, true); } } ScriptedAI::MoveInLineOfSight(who); } }; -}; -/*###### -## npc_overseer_nuaar -######*/ - -#define GOSSIP_HELLO_ON "Overseer, I am here to negotiate on behalf of the Cenarion Expedition." - -class npc_overseer_nuaar : public CreatureScript -{ -public: - npc_overseer_nuaar() : CreatureScript("npc_overseer_nuaar") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF+1) - { - player->SEND_GOSSIP_MENU(10533, creature->GetGUID()); - player->AreaExploredOrEventHappens(10682); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + CreatureAI* GetAI(Creature* creature) const OVERRIDE { - if (player->GetQuestStatus(10682) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(10532, creature->GetGUID()); - - return true; + return new npc_daranelleAI(creature); } }; -/*###### -## npc_saikkal_the_elder -######*/ - -#define GOSSIP_HELLO_STE "Yes... yes, it's me." -#define GOSSIP_SELECT_STE "Yes elder. Tell me more of the book." +//Support for quest: You're Fired! (10821) +bool obelisk_one, obelisk_two, obelisk_three, obelisk_four, obelisk_five; -class npc_saikkal_the_elder : public CreatureScript +enum LegionObelisk { -public: - npc_saikkal_the_elder() : CreatureScript("npc_saikkal_the_elder") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_STE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - player->SEND_GOSSIP_MENU(10795, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->TalkedToCreature(creature->GetEntry(), creature->GetGUID()); - player->SEND_GOSSIP_MENU(10796, creature->GetGUID()); - break; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->GetQuestStatus(10980) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_STE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(10794, creature->GetGUID()); - - return true; - } + GO_LEGION_OBELISK_ONE = 185193, + GO_LEGION_OBELISK_TWO = 185195, + GO_LEGION_OBELISK_THREE = 185196, + GO_LEGION_OBELISK_FOUR = 185197, + GO_LEGION_OBELISK_FIVE = 185198, + NPC_DOOMCRYER = 19963, + QUEST_YOURE_FIRED = 10821 }; /*###### @@ -365,30 +466,30 @@ public: bool OnGossipHello(Player* player, GameObject* go) OVERRIDE { - if (player->GetQuestStatus(10821) == QUEST_STATUS_INCOMPLETE) + if (player->GetQuestStatus(QUEST_YOURE_FIRED) == QUEST_STATUS_INCOMPLETE) { switch (go->GetEntry()) { - case LEGION_OBELISK_ONE: + case GO_LEGION_OBELISK_ONE: obelisk_one = true; break; - case LEGION_OBELISK_TWO: + case GO_LEGION_OBELISK_TWO: obelisk_two = true; break; - case LEGION_OBELISK_THREE: + case GO_LEGION_OBELISK_THREE: obelisk_three = true; break; - case LEGION_OBELISK_FOUR: + case GO_LEGION_OBELISK_FOUR: obelisk_four = true; break; - case LEGION_OBELISK_FIVE: + case GO_LEGION_OBELISK_FIVE: obelisk_five = true; break; } if (obelisk_one == true && obelisk_two == true && obelisk_three == true && obelisk_four == true && obelisk_five == true) { - go->SummonCreature(19963, 2943.40f, 4778.20f, 284.49f, 0.94f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000); + go->SummonCreature(NPC_DOOMCRYER, 2943.40f, 4778.20f, 284.49f, 0.94f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000); //reset global var obelisk_one = false; obelisk_two = false; @@ -403,117 +504,6 @@ public: }; /*###### -## npc_bloodmaul_brutebane -######*/ - -enum Bloodmaul -{ - NPC_OGRE_BRUTE = 19995, - NPC_QUEST_CREDIT = 21241, - GO_KEG = 184315, - QUEST_GETTING_THE_BLADESPIRE_TANKED = 10512, - QUEST_BLADESPIRE_KEGGER = 10545, -}; - -class npc_bloodmaul_brutebane : public CreatureScript -{ -public: - npc_bloodmaul_brutebane() : CreatureScript("npc_bloodmaul_brutebane") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_bloodmaul_brutebaneAI(creature); - } - - struct npc_bloodmaul_brutebaneAI : public ScriptedAI - { - npc_bloodmaul_brutebaneAI(Creature* creature) : ScriptedAI(creature) - { - if (Creature* Ogre = me->FindNearestCreature(NPC_OGRE_BRUTE, 50, true)) - { - Ogre->SetReactState(REACT_DEFENSIVE); - Ogre->GetMotionMaster()->MovePoint(1, me->GetPositionX()-1, me->GetPositionY()+1, me->GetPositionZ()); - } - } - - uint64 OgreGUID; - - void Reset() OVERRIDE - { - OgreGUID = 0; - } - - void UpdateAI(uint32 /*uiDiff*/) OVERRIDE { } - }; -}; - -/*###### -## npc_ogre_brute -######*/ - -class npc_ogre_brute : public CreatureScript -{ -public: - npc_ogre_brute() : CreatureScript("npc_ogre_brute") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_ogre_bruteAI(creature); - } - - struct npc_ogre_bruteAI : public ScriptedAI - { - npc_ogre_bruteAI(Creature* creature) : ScriptedAI(creature) { } - - uint64 PlayerGUID; - - void Reset() OVERRIDE - { - PlayerGUID = 0; - } - - void MoveInLineOfSight(Unit* who) OVERRIDE - { - if (!who || (!who->IsAlive())) - return; - - if (me->IsWithinDistInMap(who, 50.0f)) - { - if (who->GetTypeId() == TYPEID_PLAYER) - if (who->ToPlayer()->GetQuestStatus(QUEST_GETTING_THE_BLADESPIRE_TANKED) == QUEST_STATUS_INCOMPLETE - || who->ToPlayer()->GetQuestStatus(QUEST_BLADESPIRE_KEGGER) == QUEST_STATUS_INCOMPLETE) - PlayerGUID = who->GetGUID(); - } - } - - void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE - { - if (id == 1) - { - if (GameObject* Keg = me->FindNearestGameObject(GO_KEG, 20)) - Keg->Delete(); - - me->HandleEmoteCommand(7); - me->SetReactState(REACT_AGGRESSIVE); - me->GetMotionMaster()->MoveTargetedHome(); - - Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); - Creature* Credit = me->FindNearestCreature(NPC_QUEST_CREDIT, 50, true); - if (player && Credit) - player->KilledMonster(Credit->GetCreatureTemplate(), Credit->GetGUID()); - } - } - - void UpdateAI(uint32 /*diff*/) OVERRIDE - { - if (!UpdateVictim()) - return; - DoMeleeAttackIfReady(); - } - }; -}; - -/*###### ## go_thunderspike ######*/ @@ -892,7 +882,7 @@ class npc_simon_bunny : public CreatureScript /* Called when AI is playing the sequence for player. We cast the visual spell and then remove the - casted color from the casting sequence. + cast color from the casting sequence. */ void PlayNextColor() { @@ -1123,6 +1113,7 @@ class go_apexis_relic : public GameObjectScript enum ScannerMasterBunny { NPC_OSCILLATING_FREQUENCY_SCANNER_TOP_BUNNY = 21759, + GO_OSCILLATING_FREQUENCY_SCANNER = 184926, SPELL_OSCILLATION_FIELD = 37408, QUEST_GAUGING_THE_RESONANT_FREQUENCY = 10594 }; @@ -1134,7 +1125,10 @@ public: struct npc_oscillating_frequency_scanner_master_bunnyAI : public ScriptedAI { - npc_oscillating_frequency_scanner_master_bunnyAI(Creature* creature) : ScriptedAI(creature) { } + npc_oscillating_frequency_scanner_master_bunnyAI(Creature* creature) : ScriptedAI(creature) + { + playerGuid = 0; + } void Reset() OVERRIDE { @@ -1143,8 +1137,8 @@ public: else { // Spell 37392 does not exist in dbc, manually spawning - me->SummonCreature(21759, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.5f, me->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 50000); - me->SummonGameObject(184926, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 50000); + 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->DespawnOrUnsummon(50000); } @@ -1211,13 +1205,11 @@ class spell_oscillating_field : public SpellScriptLoader void AddSC_blades_edge_mountains() { + new npc_bloodmaul_brutebane(); + new npc_bloodmaul_brute(); new npc_nether_drake(); new npc_daranelle(); - new npc_overseer_nuaar(); - new npc_saikkal_the_elder(); new go_legion_obelisk(); - new npc_bloodmaul_brutebane(); - new npc_ogre_brute(); new go_thunderspike(); new npc_simon_bunny(); new go_simon_cluster(); diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 0aad4973000..5e70b7f9fc4 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -19,18 +19,15 @@ /* ScriptData SDName: Hellfire_Peninsula SD%Complete: 100 -SDComment: Quest support: 9375, 9410, 9418, 10129, 10146, 10162, 10163, 10340, 10346, 10347, 10382 (Special flight paths) +SDComment: Quest support: 9375, 9410, 9418, 10129, 10146, 10162, 10163, 10340, 10346, 10347, 10382 (Special flight paths) "Needs update" SDCategory: Hellfire Peninsula EndScriptData */ /* ContentData npc_aeranas npc_ancestral_wolf -go_haaleshi_altar -npc_naladu -npc_tracy_proudwell -npc_trollbane npc_wounded_blood_elf +npc_fel_guard_hound EndContentData */ #include "ScriptMgr.h" @@ -46,14 +43,12 @@ EndContentData */ enum Aeranas { - SAY_SUMMON = 0, - SAY_FREE = 1, - - FACTION_HOSTILE = 16, - FACTION_FRIENDLY = 35, - - SPELL_ENVELOPING_WINDS = 15535, - SPELL_SHOCK = 12553 + SAY_SUMMON = 0, + SAY_FREE = 1, + FACTION_HOSTILE = 16, + FACTION_FRIENDLY = 35, + SPELL_ENVELOPING_WINDS = 15535, + SPELL_SHOCK = 12553 }; class npc_aeranas : public CreatureScript @@ -61,24 +56,15 @@ class npc_aeranas : public CreatureScript public: npc_aeranas() : CreatureScript("npc_aeranas") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_aeranasAI(creature); - } - struct npc_aeranasAI : public ScriptedAI { npc_aeranasAI(Creature* creature) : ScriptedAI(creature) { } - uint32 Faction_Timer; - uint32 EnvelopingWinds_Timer; - uint32 Shock_Timer; - void Reset() OVERRIDE { - Faction_Timer = 8000; - EnvelopingWinds_Timer = 9000; - Shock_Timer = 5000; + faction_Timer = 8000; + envelopingWinds_Timer = 9000; + shock_Timer = 5000; me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); me->setFaction(FACTION_FRIENDLY); @@ -88,13 +74,13 @@ public: void UpdateAI(uint32 diff) OVERRIDE { - if (Faction_Timer) + if (faction_Timer) { - if (Faction_Timer <= diff) + if (faction_Timer <= diff) { me->setFaction(FACTION_HOSTILE); - Faction_Timer = 0; - } else Faction_Timer -= diff; + faction_Timer = 0; + } else faction_Timer -= diff; } if (!UpdateVictim()) @@ -111,21 +97,31 @@ public: return; } - if (Shock_Timer <= diff) + if (shock_Timer <= diff) { DoCastVictim(SPELL_SHOCK); - Shock_Timer = 10000; - } else Shock_Timer -= diff; + shock_Timer = 10000; + } else shock_Timer -= diff; - if (EnvelopingWinds_Timer <= diff) + if (envelopingWinds_Timer <= diff) { DoCastVictim(SPELL_ENVELOPING_WINDS); - EnvelopingWinds_Timer = 25000; - } else EnvelopingWinds_Timer -= diff; + envelopingWinds_Timer = 25000; + } else envelopingWinds_Timer -= diff; DoMeleeAttackIfReady(); } + + private: + uint32 faction_Timer; + uint32 envelopingWinds_Timer; + uint32 shock_Timer; }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_aeranasAI(creature); + } }; /*###### @@ -134,13 +130,11 @@ public: enum AncestralWolf { - EMOTE_WOLF_LIFT_HEAD = 0, - EMOTE_WOLF_HOWL = 1, - SAY_WOLF_WELCOME = 2, - - SPELL_ANCESTRAL_WOLF_BUFF = 29981, - - NPC_RYGA = 17123 + EMOTE_WOLF_LIFT_HEAD = 0, + EMOTE_WOLF_HOWL = 1, + SAY_WOLF_WELCOME = 2, + SPELL_ANCESTRAL_WOLF_BUFF = 29981, + NPC_RYGA = 17123 }; class npc_ancestral_wolf : public CreatureScript @@ -148,11 +142,6 @@ class npc_ancestral_wolf : public CreatureScript public: npc_ancestral_wolf() : CreatureScript("npc_ancestral_wolf") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_ancestral_wolfAI(creature); - } - struct npc_ancestral_wolfAI : public npc_escortAI { npc_ancestral_wolfAI(Creature* creature) : npc_escortAI(creature) @@ -166,20 +155,18 @@ public: Reset(); } - Creature* pRyga; - void Reset() OVERRIDE { - pRyga = NULL; + ryga = NULL; DoCast(me, SPELL_ANCESTRAL_WOLF_BUFF, true); } void MoveInLineOfSight(Unit* who) OVERRIDE { - if (!pRyga && who->GetEntry() == NPC_RYGA && me->IsWithinDistInMap(who, 15.0f)) + if (!ryga && who->GetEntry() == NPC_RYGA && me->IsWithinDistInMap(who, 15.0f)) if (Creature* temp = who->ToCreature()) - pRyga = temp; + ryga = temp; npc_escortAI::MoveInLineOfSight(who); } @@ -195,154 +182,19 @@ public: Talk(EMOTE_WOLF_HOWL); break; case 50: - if (pRyga && pRyga->IsAlive() && !pRyga->IsInCombat()) - pRyga->AI()->Talk(SAY_WOLF_WELCOME); + if (ryga && ryga->IsAlive() && !ryga->IsInCombat()) + ryga->AI()->Talk(SAY_WOLF_WELCOME); break; } } - }; -}; - -/*###### -## npc_naladu -######*/ - -#define GOSSIP_NALADU_ITEM1 "Why don't you escape?" - -enum Naladu -{ - GOSSIP_TEXTID_NALADU1 = 9788 -}; - -class npc_naladu : public CreatureScript -{ -public: - npc_naladu() : CreatureScript("npc_naladu") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF+1) - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_NALADU1, creature->GetGUID()); - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_NALADU_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } -}; - -/*###### -## npc_tracy_proudwell -######*/ - -#define GOSSIP_TEXT_REDEEM_MARKS "I have marks to redeem!" -#define GOSSIP_TRACY_PROUDWELL_ITEM1 "I heard that your dog Fei Fei took Klatu's prayer beads..." -#define GOSSIP_TRACY_PROUDWELL_ITEM2 "<back>" - -enum Tracy -{ - GOSSIP_TEXTID_TRACY_PROUDWELL1 = 10689, - QUEST_DIGGING_FOR_PRAYER_BEADS = 10916 -}; - -class npc_tracy_proudwell : public CreatureScript -{ -public: - npc_tracy_proudwell() : CreatureScript("npc_tracy_proudwell") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TRACY_PROUDWELL_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_TRACY_PROUDWELL1, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - break; - case GOSSIP_ACTION_TRADE: - player->GetSession()->SendListInventory(creature->GetGUID()); - break; - } - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (creature->IsVendor()) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_REDEEM_MARKS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - - if (player->GetQuestStatus(QUEST_DIGGING_FOR_PRAYER_BEADS) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TRACY_PROUDWELL_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } -}; - -/*###### -## npc_trollbane -######*/ - -#define GOSSIP_TROLLBANE_ITEM1 "Tell me of the Sons of Lothar." -#define GOSSIP_TROLLBANE_ITEM2 "<more>" -#define GOSSIP_TROLLBANE_ITEM3 "Tell me of your homeland." - -enum Trollbane -{ - GOSSIP_TEXTID_TROLLBANE1 = 9932, - GOSSIP_TEXTID_TROLLBANE2 = 9933, - GOSSIP_TEXTID_TROLLBANE3 = 8772 -}; -class npc_trollbane : public CreatureScript -{ -public: - npc_trollbane() : CreatureScript("npc_trollbane") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TROLLBANE_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_TROLLBANE1, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_TROLLBANE2, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_TROLLBANE3, creature->GetGUID()); - break; - } - - return true; - } + private: + Creature* ryga; + }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + CreatureAI* GetAI(Creature* creature) const OVERRIDE { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TROLLBANE_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TROLLBANE_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; + return new npc_ancestral_wolfAI(creature); } }; @@ -358,8 +210,10 @@ enum WoundedBloodElf SAY_ELF_SUMMON2 = 3, SAY_ELF_COMPLETE = 4, SAY_ELF_AGGRO = 5, - - QUEST_ROAD_TO_FALCON_WATCH = 9375 + QUEST_ROAD_TO_FALCON_WATCH = 9375, + NPC_HAALESHI_WINDWALKER = 16966, + NPC_HAALESHI_TALONGUARD = 16967, + FACTION_FALCON_WATCH_QUEST = 775 }; class npc_wounded_blood_elf : public CreatureScript @@ -367,28 +221,31 @@ class npc_wounded_blood_elf : public CreatureScript public: npc_wounded_blood_elf() : CreatureScript("npc_wounded_blood_elf") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + struct npc_wounded_blood_elfAI : public npc_escortAI { - if (quest->GetQuestId() == QUEST_ROAD_TO_FALCON_WATCH) - { - if (npc_escortAI* pEscortAI = CAST_AI(npc_wounded_blood_elf::npc_wounded_blood_elfAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); + npc_wounded_blood_elfAI(Creature* creature) : npc_escortAI(creature) { } - // Change faction so mobs attack - creature->setFaction(775); - } + void Reset() OVERRIDE { } - return true; - } + void EnterCombat(Unit* /*who*/) OVERRIDE + { + if (HasEscortState(STATE_ESCORT_ESCORTING)) + Talk(SAY_ELF_AGGRO); + } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_wounded_blood_elfAI(creature); - } + void JustSummoned(Creature* summoned) OVERRIDE + { + summoned->AI()->AttackStart(me); + } - struct npc_wounded_blood_elfAI : public npc_escortAI - { - npc_wounded_blood_elfAI(Creature* creature) : npc_escortAI(creature) { } + void sQuestAccept(Player* player, Quest const* quest) + { + if (quest->GetQuestId() == QUEST_ROAD_TO_FALCON_WATCH) + { + me->setFaction(FACTION_FALCON_WATCH_QUEST); + npc_escortAI::Start(true, false, player->GetGUID()); + } + } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -399,44 +256,36 @@ public: switch (waypointId) { case 0: - Talk(SAY_ELF_START, player->GetGUID()); + Talk(SAY_ELF_START, player); break; case 9: - Talk(SAY_ELF_SUMMON1, player->GetGUID()); + Talk(SAY_ELF_SUMMON1, player); // Spawn two Haal'eshi Talonguard - DoSpawnCreature(16967, -15, -15, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); - DoSpawnCreature(16967, -17, -17, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); + DoSpawnCreature(NPC_HAALESHI_TALONGUARD, -15, -15, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); + DoSpawnCreature(NPC_HAALESHI_TALONGUARD, -17, -17, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 13: - Talk(SAY_ELF_RESTING, player->GetGUID()); + Talk(SAY_ELF_RESTING, player); break; case 14: - Talk(SAY_ELF_SUMMON2, player->GetGUID()); + Talk(SAY_ELF_SUMMON2, player); // Spawn two Haal'eshi Windwalker - DoSpawnCreature(16966, -15, -15, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); - DoSpawnCreature(16966, -17, -17, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); + DoSpawnCreature(NPC_HAALESHI_WINDWALKER, -15, -15, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); + DoSpawnCreature(NPC_HAALESHI_WINDWALKER, -17, -17, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 27: - Talk(SAY_ELF_COMPLETE, player->GetGUID()); + Talk(SAY_ELF_COMPLETE, player); // Award quest credit player->GroupEventHappens(QUEST_ROAD_TO_FALCON_WATCH, me); break; } } - - void Reset() OVERRIDE { } - - void EnterCombat(Unit* /*who*/) OVERRIDE - { - if (HasEscortState(STATE_ESCORT_ESCORTING)) - Talk(SAY_ELF_AGGRO); - } - - void JustSummoned(Creature* summoned) OVERRIDE - { - summoned->AI()->AttackStart(me); - } }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_wounded_blood_elfAI(creature); + } }; /*###### @@ -445,9 +294,8 @@ public: enum FelGuard { - SPELL_SUMMON_POO = 37688, - - NPC_DERANGED_HELBOAR = 16863 + SPELL_SUMMON_POO = 37688, + NPC_DERANGED_HELBOAR = 16863 }; class npc_fel_guard_hound : public CreatureScript @@ -455,32 +303,24 @@ class npc_fel_guard_hound : public CreatureScript public: npc_fel_guard_hound() : CreatureScript("npc_fel_guard_hound") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_fel_guard_houndAI(creature); - } - struct npc_fel_guard_houndAI : public ScriptedAI { npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) { } - uint32 uiCheckTimer; - uint64 uiHelboarGUID; - void Reset() OVERRIDE { - uiCheckTimer = 5000; //check for creature every 5 sec - uiHelboarGUID = 0; + checkTimer = 5000; //check for creature every 5 sec + helboarGUID = 0; } - void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE + void MovementInform(uint32 type, uint32 id) OVERRIDE { - if (uiType != POINT_MOTION_TYPE || uiId != 1) + if (type != POINT_MOTION_TYPE || id != 1) return; - if (Creature* pHelboar = me->GetCreature(*me, uiHelboarGUID)) + if (Creature* helboar = me->GetCreature(*me, helboarGUID)) { - pHelboar->RemoveCorpse(); + helboar->RemoveCorpse(); DoCast(SPELL_SUMMON_POO); if (Player* owner = me->GetCharmerOrOwnerPlayerOrPlayerItself()) @@ -488,36 +328,43 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) OVERRIDE { - if (uiCheckTimer <= uiDiff) + if (checkTimer <= diff) { - if (Creature* pHelboar = me->FindNearestCreature(NPC_DERANGED_HELBOAR, 10.0f, false)) + if (Creature* helboar = me->FindNearestCreature(NPC_DERANGED_HELBOAR, 10.0f, false)) { - if (pHelboar->GetGUID() != uiHelboarGUID && me->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE && !me->FindCurrentSpellBySpellId(SPELL_SUMMON_POO)) + if (helboar->GetGUID() != helboarGUID && me->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE && !me->FindCurrentSpellBySpellId(SPELL_SUMMON_POO)) { - uiHelboarGUID = pHelboar->GetGUID(); - me->GetMotionMaster()->MovePoint(1, pHelboar->GetPositionX(), pHelboar->GetPositionY(), pHelboar->GetPositionZ()); + helboarGUID = helboar->GetGUID(); + me->GetMotionMaster()->MovePoint(1, helboar->GetPositionX(), helboar->GetPositionY(), helboar->GetPositionZ()); } } - uiCheckTimer = 5000; - }else uiCheckTimer -= uiDiff; + checkTimer = 5000; + } + else checkTimer -= diff; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); } + + private: + uint32 checkTimer; + uint64 helboarGUID; }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_fel_guard_houndAI(creature); + } }; void AddSC_hellfire_peninsula() { new npc_aeranas(); new npc_ancestral_wolf(); - new npc_naladu(); - new npc_tracy_proudwell(); - new npc_trollbane(); new npc_wounded_blood_elf(); new npc_fel_guard_hound(); } diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index c8e4241974e..4f30638d707 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -688,7 +688,7 @@ class go_warmaul_prison : public GameObjectScript { player->KilledMonsterCredit(NPC_MAGHAR_PRISONER, 0); - prisoner->AI()->Talk(SAY_FREE, player->GetGUID()); + prisoner->AI()->Talk(SAY_FREE, player); prisoner->DespawnOrUnsummon(6000); } return true; diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index e1b95aea972..64b0901b720 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -245,7 +245,7 @@ public: { Unit* u = Unit::GetUnit(*me, someplayer); if (u && u->GetTypeId() == TYPEID_PLAYER) - Talk(EMOTE_START, u->GetGUID()); + Talk(EMOTE_START, u); } Event_Timer = 60000; Wave = true; @@ -667,7 +667,7 @@ public: //OnQuestAccept: //if (quest->GetQuestId() == QUEST_DIMENSIUS) - //creature->AI()->Talk(WHISPER_DABIRI, player->GetGUID()); + //creature->AI()->Talk(WHISPER_DABIRI, player); bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE { @@ -896,7 +896,7 @@ public: break; case 13: if (me->FindNearestCreature(N_THADELL, 30)) - Talk(SAY_THADELL_2, player->GetGUID()); + Talk(SAY_THADELL_2, player); break; } } diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index c8a2dfe03cd..73f044be7e6 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -693,7 +693,7 @@ public: { Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); if (player) - Talk(OVERLORD_SAY_1, player->GetGUID()); + Talk(OVERLORD_SAY_1, player); } ConversationTimer = 4200; Step = 0; @@ -721,7 +721,7 @@ public: return 9000; break; case 2: - Talk(OVERLORD_YELL_1, player->GetGUID()); + Talk(OVERLORD_YELL_1, player); return 4500; break; case 3: @@ -729,7 +729,7 @@ public: return 3200; break; case 4: - Talk(OVERLORD_SAY_2, player->GetGUID()); + Talk(OVERLORD_SAY_2, player); return 2000; break; case 5: @@ -768,7 +768,7 @@ public: return 5000; break; case 11: - Talk(OVERLORD_SAY_4, player->GetGUID()); + Talk(OVERLORD_SAY_4, player); return 6000; break; case 12: @@ -867,7 +867,7 @@ public: case 29: { if (Creature* Yarzill = me->FindNearestCreature(C_YARZILL, 50.0f)) - Yarzill->AI()->Talk(YARZILL_THE_MERC_SAY, player->GetGUID()); + Yarzill->AI()->Talk(YARZILL_THE_MERC_SAY, player); return 5000; } break; @@ -947,7 +947,7 @@ public: { if (quest->GetQuestId() == QUEST_ESCAPE_COILSCAR) { - creature->AI()->Talk(SAY_WIL_START, player->GetGUID()); + creature->AI()->Talk(SAY_WIL_START, player); creature->setFaction(FACTION_EARTHEN); if (npc_earthmender_wildaAI* pEscortAI = CAST_AI(npc_earthmender_wilda::npc_earthmender_wildaAI, creature->AI())) @@ -981,14 +981,14 @@ public: switch (waypointId) { case 13: - Talk(SAY_WIL_PROGRESS1, player->GetGUID()); + Talk(SAY_WIL_PROGRESS1, player); DoSpawnAssassin(); break; case 14: DoSpawnAssassin(); break; case 15: - Talk(SAY_WIL_FIND_EXIT, player->GetGUID()); + Talk(SAY_WIL_FIND_EXIT, player); break; case 19: DoRandomSay(); @@ -1015,7 +1015,7 @@ public: DoSpawnAssassin(); break; case 39: - Talk(SAY_WIL_JUST_AHEAD, player->GetGUID()); + Talk(SAY_WIL_JUST_AHEAD, player); break; case 43: DoRandomSay(); @@ -1024,7 +1024,7 @@ public: DoSpawnAssassin(); break; case 50: - Talk(SAY_WIL_END, player->GetGUID()); + Talk(SAY_WIL_END, player); player->GroupEventHappens(QUEST_ESCAPE_COILSCAR, me); break; } diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index adbec22ca2d..bb595d82a34 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -342,70 +342,70 @@ public: switch (waypointId) { case 0: - Talk(SAY1, player->GetGUID()); + Talk(SAY1, player); break; case 4: - Talk(WHISP1, player->GetGUID()); + Talk(WHISP1, player); break; case 6: - Talk(WHISP2, player->GetGUID()); + Talk(WHISP2, player); break; case 7: - Talk(WHISP3, player->GetGUID()); + Talk(WHISP3, player); break; case 8: - Talk(WHISP4, player->GetGUID()); + Talk(WHISP4, player); break; case 17: - Talk(WHISP5, player->GetGUID()); + Talk(WHISP5, player); break; case 18: - Talk(WHISP6, player->GetGUID()); + Talk(WHISP6, player); break; case 19: - Talk(WHISP7, player->GetGUID()); + Talk(WHISP7, player); break; case 33: - Talk(WHISP8, player->GetGUID()); + Talk(WHISP8, player); break; case 34: - Talk(WHISP9, player->GetGUID()); + Talk(WHISP9, player); break; case 35: - Talk(WHISP10, player->GetGUID()); + Talk(WHISP10, player); break; case 36: - Talk(WHISP11, player->GetGUID()); + Talk(WHISP11, player); break; case 43: - Talk(WHISP12, player->GetGUID()); + Talk(WHISP12, player); break; case 44: - Talk(WHISP13, player->GetGUID()); + Talk(WHISP13, player); break; case 49: - Talk(WHISP14, player->GetGUID()); + Talk(WHISP14, player); break; case 50: - Talk(WHISP15, player->GetGUID()); + Talk(WHISP15, player); break; case 51: - Talk(WHISP16, player->GetGUID()); + Talk(WHISP16, player); break; case 52: - Talk(WHISP17, player->GetGUID()); + Talk(WHISP17, player); break; case 53: - Talk(WHISP18, player->GetGUID()); + Talk(WHISP18, player); break; case 54: - Talk(WHISP19, player->GetGUID()); + Talk(WHISP19, player); break; case 55: - Talk(WHISP20, player->GetGUID()); + Talk(WHISP20, player); break; case 56: - Talk(WHISP21, player->GetGUID()); + Talk(WHISP21, player); player->GroupEventHappens(10211, me); break; } diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index ec7f5f976fd..261640f3379 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -373,7 +373,7 @@ public: { player->CLOSE_GOSSIP_MENU(); creature->setFaction(FACTION_HOSTILE_FL); - creature->AI()->Talk(SAY_FLOON_ATTACK, player->GetGUID()); + creature->AI()->Talk(SAY_FLOON_ATTACK, player); creature->AI()->AttackStart(player); } return true; @@ -482,16 +482,16 @@ public: Cage->SetGoState(GO_STATE_ACTIVE); break; case 2: - Talk(SAY_PROGRESS_1, player->GetGUID()); + Talk(SAY_PROGRESS_1, player); break; case 5: - Talk(SAY_PROGRESS_2, player->GetGUID()); + Talk(SAY_PROGRESS_2, player); break; case 6: - Talk(SAY_PROGRESS_3, player->GetGUID()); + Talk(SAY_PROGRESS_3, player); break; case 29: - Talk(SAY_PROGRESS_4, player->GetGUID()); + Talk(SAY_PROGRESS_4, player); if (player->GetTeam() == ALLIANCE) player->GroupEventHappens(QUEST_EFTW_A, me); else if (player->GetTeam() == HORDE) diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index 2497df76bb1..7c8c81b3672 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -355,16 +355,16 @@ public: switch (waypointId) { case 4: - Talk(SAY_AMBUSH1, player->GetGUID()); + Talk(SAY_AMBUSH1, player); DoSpawnCreature(NPC_SLAVEBINDER, -10.0f, -5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_SLAVEBINDER, -8.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 5: - Talk(SAY_PROGRESS, player->GetGUID()); + Talk(SAY_PROGRESS, player); SetRun(); break; case 16: - Talk(SAY_AMBUSH2, player->GetGUID()); + Talk(SAY_AMBUSH2, player); DoSpawnCreature(NPC_SLAVEBINDER, -10.0f, -5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_SLAVEBINDER, -8.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; @@ -372,7 +372,7 @@ public: SetRun(false); break; case 25: - Talk(SAY_END, player->GetGUID()); + Talk(SAY_END, player); player->GroupEventHappens(QUEST_ESCAPE_FROM, me); break; } @@ -383,7 +383,7 @@ public: { if (quest->GetQuestId() == QUEST_ESCAPE_FROM) { - creature->AI()->Talk(SAY_START, player->GetGUID()); + creature->AI()->Talk(SAY_START, player); if (npc_escortAI* pEscortAI = CAST_AI(npc_kayra_longmane::npc_kayra_longmaneAI, creature->AI())) pEscortAI->Start(false, false, player->GetGUID()); diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 31a6af2fc1c..799aaf5d0a2 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -47,13 +47,14 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript void InitializeAI() OVERRIDE { + // Not needed to be despawned now + _despawnTimer = 0; + CasterAI::InitializeAI(); uint64 ownerGuid = me->GetOwnerGUID(); if (!ownerGuid) return; - - // Not needed to be despawned now - _despawnTimer = 0; + // Find victim of Summon Gargoyle spell std::list<Unit*> targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f); diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index f10a14716c6..f59f850c20b 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -62,7 +62,7 @@ class npc_pet_gen_mojo : public CreatureScript return; } - Talk(SAY_MOJO, player->GetGUID()); + Talk(SAY_MOJO, player); if (_victimGUID) if (Player* victim = ObjectAccessor::GetPlayer(*me, _victimGUID)) diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 85247b29f84..7ac50f4313c 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -49,7 +49,7 @@ class npc_pet_mage_mirror_image : public CreatureScript // Inherit Master's Threat List (not yet implemented) owner->CastSpell((Unit*)NULL, SPELL_MAGE_MASTERS_THREAT_LIST, true); // here mirror image casts on summoner spell (not present in client dbc) 49866 - // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcasted by mirror images (stats related?) + // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcast by mirror images (stats related?) // Clone Me! owner->CastSpell(me, SPELL_MAGE_CLONE_ME, false); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 98ed2c8b331..f2c3473d8c6 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -475,20 +475,20 @@ class spell_gen_bonked : public SpellScriptLoader + EFFECT_0: SCRIPT_EFFECT + EFFECT_1: NONE + EFFECT_2: NONE - - Spells casted by players triggered by script: + - Spells cast by players triggered by script: + EFFECT_0: SCHOOL_DAMAGE + EFFECT_1: SCRIPT_EFFECT + EFFECT_2: FORCE_CAST - - Spells casted by NPCs on players: + - Spells cast by NPCs on players: + EFFECT_0: SCHOOL_DAMAGE + EFFECT_1: SCRIPT_EFFECT + EFFECT_2: NONE In the following script we handle the SCRIPT_EFFECT for effIndex EFFECT_0 and EFFECT_1. - When handling EFFECT_0 we're in the "Spells on vehicle bar used by players" case - and we'll trigger "Spells casted by players triggered by script" - - When handling EFFECT_1 we're in the "Spells casted by players triggered by script" - or "Spells casted by NPCs on players" so we'll search for the first defend layer and drop it. + and we'll trigger "Spells cast by players triggered by script" + - When handling EFFECT_1 we're in the "Spells cast by players triggered by script" + or "Spells cast by NPCs on players" so we'll search for the first defend layer and drop it. */ enum BreakShieldSpells @@ -1193,7 +1193,7 @@ class spell_gen_defend : public SpellScriptLoader { SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId); - // Defend spells casted by NPCs (add visuals) + // Defend spells cast by NPCs (add visuals) if (spell->Effects[EFFECT_0].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN) { AfterEffectApply += AuraEffectApplyFn(spell_gen_defend_AuraScript::RefreshVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); @@ -1204,7 +1204,7 @@ class spell_gen_defend : public SpellScriptLoader if (spell->Effects[EFFECT_2].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN) OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveDummyFromDriver, EFFECT_2, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL); - // Defend spells casted by players (add/remove visuals) + // Defend spells cast by players (add/remove visuals) if (spell->Effects[EFFECT_1].ApplyAuraName == SPELL_AURA_DUMMY) { AfterEffectApply += AuraEffectApplyFn(spell_gen_defend_AuraScript::RefreshVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); @@ -2039,15 +2039,15 @@ class spell_gen_mount : public SpellScriptLoader + EFFECT_0: SCRIPT_EFFECT + EFFECT_1: TRIGGER_SPELL + EFFECT_2: NONE - - Spells casted by player's mounts triggered by script: + - Spells cast by player's mounts triggered by script: + EFFECT_0: CHARGE + EFFECT_1: TRIGGER_SPELL + EFFECT_2: APPLY_AURA - - Spells casted by players on the target triggered by script: + - Spells cast by players on the target triggered by script: + EFFECT_0: SCHOOL_DAMAGE + EFFECT_1: SCRIPT_EFFECT + EFFECT_2: NONE - - Spells casted by NPCs on players: + - Spells cast by NPCs on players: + EFFECT_0: SCHOOL_DAMAGE + EFFECT_1: CHARGE + EFFECT_2: SCRIPT_EFFECT @@ -2055,12 +2055,12 @@ class spell_gen_mount : public SpellScriptLoader In the following script we handle the SCRIPT_EFFECT and CHARGE - When handling SCRIPT_EFFECT: + EFFECT_0: Corresponds to "Spells on vehicle bar used by players" and we make player's mount cast - the charge effect on the current target ("Spells casted by player's mounts triggered by script"). - + EFFECT_1 and EFFECT_2: Triggered when "Spells casted by player's mounts triggered by script" hits target, - corresponding to "Spells casted by players on the target triggered by script" and "Spells casted by + the charge effect on the current target ("Spells cast by player's mounts triggered by script"). + + EFFECT_1 and EFFECT_2: Triggered when "Spells cast by player's mounts triggered by script" hits target, + corresponding to "Spells cast by players on the target triggered by script" and "Spells cast by NPCs on players" and we check Defend layers and drop a charge of the first found. - When handling CHARGE: - + Only launched for "Spells casted by player's mounts triggered by script", makes the player cast the + + Only launched for "Spells cast by player's mounts triggered by script", makes the player cast the damaging spell on target with a small chance of failing it. */ diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 3d84d9bbca9..cfb43e8a3f8 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1137,9 +1137,9 @@ public: // player must cast kill credit and do emote text, according to sniff if (Player* target = GetTarget()->ToPlayer()) { - target->MonsterWhisper(SAY_1, target->GetGUID(), true); + target->MonsterWhisper(SAY_1, target, true); target->KilledMonsterCredit(NPC_KILLCREDIT, 0); - target->MonsterWhisper(SAY_2, target->GetGUID(), true); + target->MonsterWhisper(SAY_2, target, true); } } @@ -1367,7 +1367,7 @@ class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoad } }; -// ID - 50287 Azure Dragon: On Death Force Cast Wyrmrest Defender to Whisper to Controller - Random (casted from Azure Dragons and Azure Drakes on death) +// ID - 50287 Azure Dragon: On Death Force Cast Wyrmrest Defender to Whisper to Controller - Random (cast from Azure Dragons and Azure Drakes on death) class spell_q12372_azure_on_death_force_whisper : public SpellScriptLoader { public: @@ -1380,7 +1380,7 @@ class spell_q12372_azure_on_death_force_whisper : public SpellScriptLoader void HandleScript(SpellEffIndex /*effIndex*/) { if (Creature* defender = GetHitCreature()) - defender->AI()->Talk(WHISPER_ON_HIT_BY_FORCE_WHISPER, defender->GetCharmerOrOwnerGUID()); + defender->AI()->Talk(WHISPER_ON_HIT_BY_FORCE_WHISPER, defender->GetCharmerOrOwner()); } void Register() OVERRIDE @@ -1823,7 +1823,7 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader if (failed) { player->CastSpell(creature, SPELL_BEAR_FLANK_FAIL); - creature->AI()->Talk(0, player->GetGUID()); + creature->AI()->Talk(0, player); } else player->CastSpell(player, SPELL_CREATE_BEAR_FLANK); diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 2f8d5fa2ce4..ac3ef5e59e5 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -342,11 +342,11 @@ class AreaTrigger_at_brewfest : public AreaTriggerScript { case AT_BREWFEST_DUROTAR: if (Creature* tapper = player->FindNearestCreature(NPC_TAPPER_SWINDLEKEG, 20.0f)) - tapper->AI()->Talk(SAY_WELCOME, player->GetGUID()); + tapper->AI()->Talk(SAY_WELCOME, player); break; case AT_BREWFEST_DUN_MOROGH: if (Creature* ipfelkofer = player->FindNearestCreature(NPC_IPFELKOFER_IRONKEG, 20.0f)) - ipfelkofer->AI()->Talk(SAY_WELCOME, player->GetGUID()); + ipfelkofer->AI()->Talk(SAY_WELCOME, player); break; default: break; diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp index 95f97b1dc84..b629fd06b32 100644 --- a/src/server/scripts/World/guards.cpp +++ b/src/server/scripts/World/guards.cpp @@ -65,7 +65,7 @@ public: void EnterCombat(Unit* who) OVERRIDE { if (me->GetEntry() == NPC_CENARION_HOLD_INFANTRY) - Talk(SAY_GUARD_SIL_AGGRO, who->GetGUID()); + Talk(SAY_GUARD_SIL_AGGRO, who); if (SpellInfo const* spell = me->reachWithSpellAttack(who)) DoCast(who, spell->Id); } @@ -106,7 +106,7 @@ public: return; // Make sure our attack is ready and we arn't currently casting - if (me->isAttackReady() && !me->IsNonMeleeSpellCasted(false)) + if (me->isAttackReady() && !me->IsNonMeleeSpellCast(false)) { //If we are within range melee the target if (me->IsWithinMeleeRange(me->GetVictim())) @@ -145,7 +145,7 @@ public: else { //Only run this code if we arn't already casting - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { bool healing = false; SpellInfo const* info = NULL; diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp index ed086712ca2..5cc9e68eb9b 100644 --- a/src/server/scripts/World/mob_generic_creature.cpp +++ b/src/server/scripts/World/mob_generic_creature.cpp @@ -93,7 +93,7 @@ public: if (me->IsWithinMeleeRange(me->GetVictim())) { //Make sure our attack is ready and we arn't currently casting - if (me->isAttackReady() && !me->IsNonMeleeSpellCasted(false)) + if (me->isAttackReady() && !me->IsNonMeleeSpellCast(false)) { bool Healing = false; SpellInfo const* info = NULL; @@ -124,7 +124,7 @@ public: else { //Only run this code if we arn't already casting - if (!me->IsNonMeleeSpellCasted(false)) + if (!me->IsNonMeleeSpellCast(false)) { bool Healing = false; SpellInfo const* info = NULL; diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index bf742d606f2..08be2595c0e 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -54,8 +54,6 @@ EndScriptData #define GOSSIP_TORASTRASZA1 "I would like to see Lord Of Afrasastrasz, in the middle of the temple." #define GOSSIP_TORASTRASZA2 "Yes, Please. I would like to return to the ground floor of the temple." #define GOSSIP_CRIMSONWING "<Ride the gryphons to Survey Alcaz Island>" -#define GOSSIP_THRICESTAR1 "Do you think I could take a ride on one of those flying machines?" -#define GOSSIP_THRICESTAR2 "Kara, I need to be flown out the Dens of Dying to find Bixie." #define GOSSIP_WILLIAMKEILAR1 "Take me to Northpass Tower." #define GOSSIP_WILLIAMKEILAR2 "Take me to Eastwall Tower." #define GOSSIP_WILLIAMKEILAR3 "Take me to Crown Guard Tower." @@ -163,13 +161,6 @@ public: if (player->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); break; - case 26602: - if (creature->IsTaxi()) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, GOSSIP_THRICESTAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 26); - - if (player->GetQuestStatus(11692) == QUEST_STATUS_COMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_THRICESTAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 27); - break; case 17209: player->SetTaxiCheater(true); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 28); @@ -299,21 +290,14 @@ public: player->CastSpell(player, 42295, true); break; case GOSSIP_ACTION_INFO_DEF + 26: - player->GetSession()->SendTaxiMenu(creature); - break; - case GOSSIP_ACTION_INFO_DEF + 27: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 51446, false); - break; - case GOSSIP_ACTION_INFO_DEF + 28: player->CLOSE_GOSSIP_MENU(); player->ActivateTaxiPathTo(494); break; - case GOSSIP_ACTION_INFO_DEF + 29: + case GOSSIP_ACTION_INFO_DEF + 27: player->CLOSE_GOSSIP_MENU(); player->ActivateTaxiPathTo(495); break; - case GOSSIP_ACTION_INFO_DEF + 30: + case GOSSIP_ACTION_INFO_DEF + 28: player->CLOSE_GOSSIP_MENU(); player->ActivateTaxiPathTo(496); break; diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index d7d18d5d36a..44898d41f38 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -965,14 +965,14 @@ public: { if (IsHealed && !CanRun && spell->Id == SPELL_FORTITUDE_R1) { - Talk(SAY_THANKS, caster->GetGUID()); + Talk(SAY_THANKS, caster); CanRun = true; } else if (!IsHealed && spell->Id == SPELL_LESSER_HEAL_R2) { CasterGUID = caster->GetGUID(); me->SetStandState(UNIT_STAND_STATE_STAND); - Talk(SAY_HEALED, caster->GetGUID()); + Talk(SAY_HEALED, caster); IsHealed = true; } } @@ -982,14 +982,14 @@ public: { if (IsHealed && !CanRun && spell->Id == SPELL_FORTITUDE_R1) { - Talk(SAY_THANKS, caster->GetGUID()); + Talk(SAY_THANKS, caster); CanRun = true; } else if (!IsHealed && spell->Id == SPELL_LESSER_HEAL_R2) { CasterGUID = caster->GetGUID(); me->SetStandState(UNIT_STAND_STATE_STAND); - Talk(SAY_HEALED, caster->GetGUID()); + Talk(SAY_HEALED, caster); IsHealed = true; } } @@ -999,14 +999,14 @@ public: { if (IsHealed && !CanRun && spell->Id == SPELL_FORTITUDE_R1) { - Talk(SAY_THANKS, caster->GetGUID()); + Talk(SAY_THANKS, caster); CanRun = true; } else if (!IsHealed && spell->Id == SPELL_LESSER_HEAL_R2) { CasterGUID = caster->GetGUID(); me->SetStandState(UNIT_STAND_STATE_STAND); - Talk(SAY_HEALED, caster->GetGUID()); + Talk(SAY_HEALED, caster); IsHealed = true; } } @@ -1016,14 +1016,14 @@ public: { if (IsHealed && !CanRun && spell->Id == SPELL_FORTITUDE_R1) { - Talk(SAY_THANKS, caster->GetGUID()); + Talk(SAY_THANKS, caster); CanRun = true; } else if (!IsHealed && spell->Id == SPELL_LESSER_HEAL_R2) { CasterGUID = caster->GetGUID(); me->SetStandState(UNIT_STAND_STATE_STAND); - Talk(SAY_HEALED, caster->GetGUID()); + Talk(SAY_HEALED, caster); IsHealed = true; } } @@ -1033,14 +1033,14 @@ public: { if (IsHealed && !CanRun && spell->Id == SPELL_FORTITUDE_R1) { - Talk(SAY_THANKS, caster->GetGUID()); + Talk(SAY_THANKS, caster); CanRun = true; } else if (!IsHealed && spell->Id == SPELL_LESSER_HEAL_R2) { CasterGUID = caster->GetGUID(); me->SetStandState(UNIT_STAND_STATE_STAND); - Talk(SAY_HEALED, caster->GetGUID()); + Talk(SAY_HEALED, caster); IsHealed = true; } } @@ -1070,19 +1070,11 @@ public: switch (me->GetEntry()) { case ENTRY_SHAYA: - Talk(SAY_GOODBYE, unit->GetGUID()); - break; case ENTRY_ROBERTS: - Talk(SAY_GOODBYE, unit->GetGUID()); - break; case ENTRY_DOLF: - Talk(SAY_GOODBYE, unit->GetGUID()); - break; case ENTRY_KORJA: - Talk(SAY_GOODBYE, unit->GetGUID()); - break; case ENTRY_DG_KEL: - Talk(SAY_GOODBYE, unit->GetGUID()); + Talk(SAY_GOODBYE, unit); break; } diff --git a/src/server/shared/Database/Field.cpp b/src/server/shared/Database/Field.cpp index 51d918e716e..87151f7a9be 100644 --- a/src/server/shared/Database/Field.cpp +++ b/src/server/shared/Database/Field.cpp @@ -35,7 +35,7 @@ void Field::SetByteValue(const void* newValue, const size_t newSize, enum_field_ if (data.value) CleanUp(); - // This value stores raw bytes that have to be explicitly casted later + // This value stores raw bytes that have to be explicitly cast later if (newValue) { data.value = new char[newSize]; diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index f6754629e38..4e876a8567b 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -24,7 +24,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH); PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC); - PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC); + PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_IP_BANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban')", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_IP_BANNED_ALL, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) ORDER BY unbandate", CONNECTION_SYNCH); diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp index 3fcd4c28f0f..eebf46f3831 100644 --- a/src/server/worldserver/Master.cpp +++ b/src/server/worldserver/Master.cpp @@ -251,7 +251,7 @@ int Master::Run() { CPU_ZERO(&mask); sched_getaffinity(0, sizeof(mask), &mask); - TC_LOG_INFO("server.worldserver", "Using processors (bitmask, hex): %x", *(uint32*)(&mask)); + TC_LOG_INFO("server.worldserver", "Using processors (bitmask, hex): %lx", *(__cpu_mask*)(&mask)); } } |