diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Utilities/Util.cpp | 7 | ||||
-rw-r--r-- | src/common/Utilities/Util.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 84 | ||||
-rw-r--r-- | src/server/game/PrecompiledHeaders/gamePCH.h | 1 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AllPackets.h | 74 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 48 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 4 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp | 140 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp | 5 |
14 files changed, 166 insertions, 243 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index ec67968f11e..0488978ae17 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -59,6 +59,13 @@ uint32 urand(uint32 min, uint32 max) return GetRng()->URandom(min, max); } +uint32 urandms(uint32 min, uint32 max) +{ + ASSERT(max >= min); + ASSERT(INT_MAX/IN_MILLISECONDS >= max); + return GetRng()->URandom(min * IN_MILLISECONDS, max * IN_MILLISECONDS); +} + float frand(float min, float max) { ASSERT(max >= min); diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index a48a3e42f3b..468b0201680 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -84,6 +84,9 @@ int32 irand(int32 min, int32 max); /* Return a random number in the range min..max (inclusive). */ uint32 urand(uint32 min, uint32 max); +/* Return a random millisecond value between min and max seconds. Functionally equivalent to urand(min*IN_MILLISECONDS, max*IN_MILLISECONDS). */ +uint32 urandms(uint32 min, uint32 max); + /* Return a random number in the range 0 .. UINT32_MAX. */ uint32 rand32(); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7f1306665e0..b44609d2c50 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2267,6 +2267,11 @@ void Player::SetGameMaster(bool on) UpdateObjectVisibility(); } +bool Player::CanBeGameMaster() const +{ + return m_session && m_session->HasPermission(rbac::RBAC_PERM_COMMAND_GM); +} + void Player::SetGMVisible(bool on) { if (on) @@ -18326,17 +18331,28 @@ bool Player::CheckInstanceLoginValid(Map* map) { // cannot be in raid instance without a group if (!GetGroup()) - return false; + return IsInstanceLoginGameMasterException(); } else { // cannot be in normal instance without a group and more players than 1 in instance if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1) - return false; + return IsInstanceLoginGameMasterException(); } // do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player - return sMapMgr->CanPlayerEnter(map->GetId(), this, true); + return sMapMgr->CanPlayerEnter(map->GetId(), this, true) || IsInstanceLoginGameMasterException(); +} + +bool Player::IsInstanceLoginGameMasterException() const +{ + if (CanBeGameMaster()) + { + ChatHandler(GetSession()).PSendSysMessage("You didn't get kicked out of the instance even if Player::CheckInstanceLoginValid() returned false and without .gm on flag"); + return true; + } + else + return false; } bool Player::CheckInstanceCount(uint32 instanceId) const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d28d870a777..ad212bbfc76 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1244,6 +1244,7 @@ class Player : public Unit, public GridObject<Player> bool isAcceptWhispers() const { return (m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS) != 0; } void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; } bool IsGameMaster() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_ON) != 0; } + bool CanBeGameMaster() const; void SetGameMaster(bool on); bool isGMChat() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT) != 0; } void SetGMChat(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; } @@ -2771,6 +2772,8 @@ class Player : public Unit, public GridObject<Player> bool IsHasDelayedTeleport() const { return m_bHasDelayedTeleport; } void SetDelayedTeleportFlag(bool setting) { m_bHasDelayedTeleport = setting; } void ScheduleDelayedOperation(uint32 operation) { if (operation < DELAYED_END) m_DelayedOperations |= operation; } + + bool IsInstanceLoginGameMasterException() const; MapReference m_mapRef; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 8a3e1191260..5d8a02bb4bd 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11900,7 +11900,7 @@ void CharmInfo::InitPossessCreateSpells() break; } - for (uint32 i = 0; i < CREATURE_MAX_SPELLS; ++i) + for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) { uint32 spellId = _unit->ToCreature()->m_spells[i]; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); @@ -11909,7 +11909,7 @@ void CharmInfo::InitPossessCreateSpells() if (spellInfo->IsPassive()) _unit->CastSpell(_unit, spellInfo, true); else - AddSpellToActionBar(spellInfo, ACT_PASSIVE); + AddSpellToActionBar(spellInfo, ACT_PASSIVE, i % MAX_UNIT_ACTION_BAR_INDEX); } } } @@ -11967,11 +11967,12 @@ void CharmInfo::InitCharmCreateSpells() } } -bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate) +bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate, uint8 preferredSlot) { uint32 spell_id = spellInfo->Id; uint32 first_id = spellInfo->GetFirstRankSpell()->Id; + ASSERT(preferredSlot < MAX_UNIT_ACTION_BAR_INDEX); // new spell rank can be already listed for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i) { @@ -11988,9 +11989,10 @@ bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates new // or use empty slot in other case for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i) { - if (!PetActionBar[i].GetAction() && PetActionBar[i].IsActionBarForSpell()) + uint8 j = (preferredSlot + i) % MAX_UNIT_ACTION_BAR_INDEX; + if (!PetActionBar[j].GetAction() && PetActionBar[j].IsActionBarForSpell()) { - SetActionBar(i, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate); + SetActionBar(j, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate); return true; } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 606e00d4474..232e5029ac6 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1209,7 +1209,7 @@ struct CharmInfo void InitEmptyActionBar(bool withAttack = true); //return true if successful - bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE); + bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE, uint8 preferredSlot = 0); bool RemoveSpellFromActionBar(uint32 spell_id); void LoadPetActionBar(const std::string& data); void BuildActionBar(WorldPacket* data); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 2cfdbcd4918..b9cce1018b3 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -4671,32 +4671,32 @@ enum SpellFamilyNames enum TradeStatus { - TRADE_STATUS_CURRENCY_NOT_TRADABLE = 0, - TRADE_STATUS_PROPOSED = 1, - TRADE_STATUS_COMPLETE = 2, - TRADE_STATUS_INITIATED = 3, - TRADE_STATUS_DEAD = 4, - TRADE_STATUS_RESTRICTED_ACCOUNT = 5, - TRADE_STATUS_TOO_FAR_AWAY = 6, - TRADE_STATUS_LOGGING_OUT = 7, - TRADE_STATUS_ACCEPTED = 8, - TRADE_STATUS_ALREADY_TRADING = 9, - TRADE_STATUS_PETITION = 10, - TRADE_STATUS_TARGET_DEAD = 11, - TRADE_STATUS_STATE_CHANGED = 12, - TRADE_STATUS_NOT_ON_TAPLIST = 14, - TRADE_STATUS_TARGET_LOGGING_OUT = 15, - TRADE_STATUS_WRONG_REALM = 17, - TRADE_STATUS_PLAYER_IGNORED = 18, - TRADE_STATUS_UNACCEPTED = 19, - TRADE_STATUS_TARGET_STUNNED = 21, - TRADE_STATUS_NO_TARGET = 22, - TRADE_STATUS_NOT_ENOUGH_CURRENCY = 23, - TRADE_STATUS_FAILED = 24, - TRADE_STATUS_CANCELLED = 25, - TRADE_STATUS_PLAYER_BUSY = 28, - TRADE_STATUS_WRONG_FACTION = 30, - TRADE_STATUS_STUNNED = 31, + TRADE_STATUS_LOGGING_OUT = 0, + TRADE_STATUS_CURRENCY_NOT_TRADABLE = 1, + TRADE_STATUS_RESTRICTED_ACCOUNT = 2, + TRADE_STATUS_DEAD = 3, + TRADE_STATUS_TARGET_LOGGING_OUT = 4, + TRADE_STATUS_UNACCEPTED = 5, + TRADE_STATUS_ALREADY_TRADING = 6, + TRADE_STATUS_FAILED = 10, + TRADE_STATUS_CANCELLED = 11, + TRADE_STATUS_TARGET_STUNNED = 12, + TRADE_STATUS_TARGET_DEAD = 15, + TRADE_STATUS_WRONG_REALM = 16, + TRADE_STATUS_ACCEPTED = 17, + TRADE_STATUS_NOT_ENOUGH_CURRENCY = 18, + TRADE_STATUS_NOT_ON_TAPLIST = 19, + TRADE_STATUS_WRONG_FACTION = 20, + TRADE_STATUS_STATE_CHANGED = 22, + TRADE_STATUS_PROPOSED = 23, + TRADE_STATUS_STUNNED = 24, + TRADE_STATUS_INITIATED = 25, + TRADE_STATUS_PLAYER_IGNORED = 26, + TRADE_STATUS_PETITION = 27, + TRADE_STATUS_COMPLETE = 28, + TRADE_STATUS_PLAYER_BUSY = 29, + TRADE_STATUS_TOO_FAR_AWAY = 30, + TRADE_STATUS_NO_TARGET = 31, }; enum XPColorChar @@ -4718,27 +4718,27 @@ enum RemoveMethod enum ActivateTaxiReply { - ERR_TAXINOVENDORNEARBY = 0, - ERR_TAXIPLAYERMOVING = 1, - ERR_TAXIPLAYERALREADYMOUNTED = 2, - ERR_TAXIPLAYERBUSY = 3, - ERR_TAXINOTENOUGHMONEY = 5, - ERR_TAXINOTSTANDING = 6, - ERR_TAXIPLAYERSHAPESHIFTED = 8, - ERR_TAXIUNSPECIFIEDSERVERERROR = 9, - ERR_TAXINOSUCHPATH = 11, - ERR_TAXIOK = 12, - ERR_TAXISAMENODE = 13, - ERR_TAXITOOFARAWAY = 14, - ERR_TAXINOTVISITED = 15 + ERR_TAXINOVENDORNEARBY = 13, + ERR_TAXIPLAYERMOVING = 10, + ERR_TAXIPLAYERALREADYMOUNTED = 5, + ERR_TAXIPLAYERBUSY = 14, + ERR_TAXINOTENOUGHMONEY = 2, + ERR_TAXINOTSTANDING = 11, + ERR_TAXIPLAYERSHAPESHIFTED = 4, + ERR_TAXIUNSPECIFIEDSERVERERROR = 1, + ERR_TAXINOSUCHPATH = 3, + ERR_TAXIOK = 8, + ERR_TAXISAMENODE = 12, + ERR_TAXITOOFARAWAY = 7, + ERR_TAXINOTVISITED = 9 }; enum TaxiNodeStatus { - TAXISTATUS_NOT_ELIGIBLE = 0, + TAXISTATUS_NOT_ELIGIBLE = 2, TAXISTATUS_UNLEARNED = 1, - TAXISTATUS_LEARNED = 2, - TAXISTATUS_NONE = 3 + TAXISTATUS_LEARNED = 3, + TAXISTATUS_NONE = 0 }; enum ProfessionUI diff --git a/src/server/game/PrecompiledHeaders/gamePCH.h b/src/server/game/PrecompiledHeaders/gamePCH.h index c7c6ca5d2d6..8a407de3a82 100644 --- a/src/server/game/PrecompiledHeaders/gamePCH.h +++ b/src/server/game/PrecompiledHeaders/gamePCH.h @@ -8,3 +8,4 @@ #include "Opcodes.h" #include "SharedDefines.h" #include "ObjectMgr.h" +#include "Packets/AllPackets.h" diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h new file mode 100644 index 00000000000..9fffcd2c58f --- /dev/null +++ b/src/server/game/Server/Packets/AllPackets.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * 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 + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef AllPackets_h__ +#define AllPackets_h__ + +#include "AchievementPackets.h" +#include "AuctionHousePackets.h" +#include "AuthenticationPackets.h" +#include "BankPackets.h" +#include "BattlefieldPackets.h" +#include "BattlegroundPackets.h" +#include "BattlePetPackets.h" +#include "BlackMarketPackets.h" +#include "CalendarPackets.h" +#include "ChannelPackets.h" +#include "CharacterPackets.h" +#include "ChatPackets.h" +#include "ClientConfigPackets.h" +#include "CombatLogPackets.h" +#include "CombatPackets.h" +#include "DuelPackets.h" +#include "EquipmentSetPackets.h" +#include "GameObjectPackets.h" +#include "GarrisonPackets.h" +#include "GuildFinderPackets.h" +#include "GuildPackets.h" +#include "InspectPackets.h" +#include "InstancePackets.h" +#include "ItemPackets.h" +#include "LFGPackets.h" +#include "LootPackets.h" +#include "MailPackets.h" +#include "MiscPackets.h" +#include "MovementPackets.h" +#include "NPCPackets.h" +#include "PacketUtilities.h" +#include "PartyPackets.h" +#include "PetitionPackets.h" +#include "QueryPackets.h" +#include "QuestPackets.h" +#include "ReferAFriendPackets.h" +#include "ReputationPackets.h" +#include "ScenePackets.h" +#include "SocialPackets.h" +#include "SpellPackets.h" +#include "SystemPackets.h" +#include "TalentPackets.h" +#include "TaxiPackets.h" +#include "TicketPackets.h" +#include "TokenPackets.h" +#include "TotemPackets.h" +#include "ToyPackets.h" +#include "TradePackets.h" +#include "VehiclePackets.h" +#include "VoidStoragePackets.h" +#include "WhoPackets.h" +#include "WorldStatePackets.h" + +#endif // AllPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index e37d9c7818c..972438a3f36 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -18,51 +18,7 @@ #include "Opcodes.h" #include "WorldSession.h" -#include "Packets/AchievementPackets.h" -#include "Packets/AuctionHousePackets.h" -#include "Packets/BankPackets.h" -#include "Packets/BattlefieldPackets.h" -#include "Packets/BattlegroundPackets.h" -#include "Packets/BattlePetPackets.h" -#include "Packets/BlackMarketPackets.h" -#include "Packets/CalendarPackets.h" -#include "Packets/ChannelPackets.h" -#include "Packets/CharacterPackets.h" -#include "Packets/ChatPackets.h" -#include "Packets/ClientConfigPackets.h" -#include "Packets/CombatPackets.h" -#include "Packets/DuelPackets.h" -#include "Packets/EquipmentSetPackets.h" -#include "Packets/GameObjectPackets.h" -#include "Packets/GarrisonPackets.h" -#include "Packets/GuildPackets.h" -#include "Packets/GuildFinderPackets.h" -#include "Packets/PartyPackets.h" -#include "Packets/InspectPackets.h" -#include "Packets/InstancePackets.h" -#include "Packets/ItemPackets.h" -#include "Packets/LootPackets.h" -#include "Packets/MailPackets.h" -#include "Packets/MiscPackets.h" -#include "Packets/MovementPackets.h" -#include "Packets/NPCPackets.h" -#include "Packets/PetitionPackets.h" -#include "Packets/QueryPackets.h" -#include "Packets/QuestPackets.h" -#include "Packets/ReferAFriendPackets.h" -#include "Packets/ReputationPackets.h" -#include "Packets/ScenePackets.h" -#include "Packets/SocialPackets.h" -#include "Packets/TalentPackets.h" -#include "Packets/TaxiPackets.h" -#include "Packets/TicketPackets.h" -#include "Packets/TokenPackets.h" -#include "Packets/TotemPackets.h" -#include "Packets/ToyPackets.h" -#include "Packets/TradePackets.h" -#include "Packets/VehiclePackets.h" -#include "Packets/VoidStoragePackets.h" -#include "Packets/WhoPackets.h" +#include "Packets/AllPackets.h" template<class PacketClass, void(WorldSession::*HandlerFunction)(PacketClass&)> class PacketHandler : public ClientOpcodeHandler @@ -717,7 +673,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Movement::SetActiveMover, &WorldSession::HandleSetActiveMoverOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ACTIVE_VOICE_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveVoiceChannel ); DEFINE_HANDLER(CMSG_SET_ADVANCED_COMBAT_LOGGING, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::ClientConfig::SetAdvancedCombatLogging, &WorldSession::HandleSetAdvancedCombatLogging); - DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Party::SetAssistantLeader, &WorldSession::HandleSetAssistantLeaderOpcode); + DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::SetAssistantLeader, &WorldSession::HandleSetAssistantLeaderOpcode); DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 784dc432f2a..b19cb7eeb40 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -473,8 +473,8 @@ enum AuraType SPELL_AURA_413 = 413, SPELL_AURA_414 = 414, SPELL_AURA_415 = 415, - SPELL_AURA_416 = 416, - SPELL_AURA_417 = 417, + SPELL_AURA_MOD_COOLDOWN_BY_HASTE_EFFECTS = 416, // NYI + SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE_EFFECTS = 417, // NYI SPELL_AURA_MOD_MAX_POWER = 418, // NYI SPELL_AURA_MOD_BASE_MANA_PCT = 419, SPELL_AURA_MOD_BATTLE_PET_XP_PCT = 420, // NYI diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 07a2c0227c2..a312616d403 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -475,8 +475,8 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //413 &AuraEffect::HandleNULL, //414 &AuraEffect::HandleNULL, //415 - &AuraEffect::HandleNULL, //416 - &AuraEffect::HandleNULL, //417 + &AuraEffect::HandleNULL, //416 SPELL_AURA_MOD_COOLDOWN_BY_HASTE_EFFECTS + &AuraEffect::HandleNULL, //417 SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE_EFFECTS &AuraEffect::HandleNULL, //418 SPELL_AURA_MOD_MAX_POWER &AuraEffect::HandleAuraModIncreaseBaseManaPercent, //419 SPELL_AURA_MOD_BASE_MANA_PCT &AuraEffect::HandleNULL, //420 SPELL_AURA_MOD_BATTLE_PET_XP_PCT diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 9cecbc31665..9af23f17dca 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -277,145 +277,6 @@ public: }; /*###### -## npc_anchorite_truuen -######*/ - -enum Truuen -{ - NPC_GHOST_UTHER = 17233, - NPC_THEL_DANIS = 1854, - NPC_GHOUL = 1791, //ambush - - QUEST_TOMB_LIGHTBRINGER = 9446, - - SAY_WP_0 = 0, //Beware! We are attacked! - SAY_WP_1 = 1, //It must be the purity of the Mark of the Lightbringer that is drawing forth the Scourge to attack us. We must proceed with caution lest we be overwhelmed! - SAY_WP_2 = 2, //This land truly needs to be cleansed by the Light! Let us continue on to the tomb. It isn't far now... - SAY_WP_3 = 0, //Be welcome, friends! - SAY_WP_4 = 0, //Thank you for coming here in remembrance of me. Your efforts in recovering that symbol, while unnecessary, are certainly touching to an old man's heart. - SAY_WP_5 = 1, //Please, rise my friend. Keep the Blessing as a symbol of the strength of the Light and how heroes long gone might once again rise in each of us to inspire. - SAY_WP_6 = 2 //Thank you my friend for making this possible. This is a day that I shall never forget! I think I will stay a while. Please return to High Priestess MacDonnell at the camp. I know that she'll be keenly interested to know of what has transpired here. -}; - -class npc_anchorite_truuen : public CreatureScript -{ -public: - npc_anchorite_truuen() : CreatureScript("npc_anchorite_truuen") { } - - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override - { - if (quest->GetQuestId() == QUEST_TOMB_LIGHTBRINGER) - { - npc_escortAI* pEscortAI = ENSURE_AI(npc_anchorite_truuen::npc_anchorite_truuenAI, creature->AI()); - pEscortAI->Start(true, true, player->GetGUID()); - } - return false; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_anchorite_truuenAI(creature); - } - - struct npc_anchorite_truuenAI : public npc_escortAI - { - npc_anchorite_truuenAI(Creature* creature) : npc_escortAI(creature) - { - Initialize(); - } - - void Initialize() - { - m_uiChatTimer = 7000; - } - - uint32 m_uiChatTimer; - - ObjectGuid UghostGUID; - - void Reset() override - { - Initialize(); - } - - void JustSummoned(Creature* summoned) override - { - if (summoned->GetEntry() == NPC_GHOUL) - summoned->AI()->AttackStart(me); - } - - void WaypointReached(uint32 waypointId) override - { - Player* player = GetPlayerForEscort(); - - switch (waypointId) - { - case 8: - Talk(SAY_WP_0); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+7.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+5.0f, me->GetPositionY()+5.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - break; - case 9: - Talk(SAY_WP_1); - break; - case 14: - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+7.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+5.0f, me->GetPositionY()+5.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+10.0f, me->GetPositionY()+10.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+8.0f, me->GetPositionY()+8.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - break; - case 15: - Talk(SAY_WP_2); - break; - case 21: - if (Creature* Theldanis = GetClosestCreatureWithEntry(me, NPC_THEL_DANIS, 150)) - Theldanis->AI()->Talk(SAY_WP_3); - break; - case 23: - if (Creature* Ughost = me->SummonCreature(NPC_GHOST_UTHER, 971.86f, -1825.42f, 81.99f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000)) - { - UghostGUID = Ughost->GetGUID(); - Ughost->SetDisableGravity(true); - Ughost->AI()->Talk(SAY_WP_4, me); - } - m_uiChatTimer = 4000; - break; - case 24: - if (Creature* Ughost = ObjectAccessor::GetCreature(*me, UghostGUID)) - Ughost->AI()->Talk(SAY_WP_5, me); - m_uiChatTimer = 4000; - break; - case 25: - if (Creature* Ughost = ObjectAccessor::GetCreature(*me, UghostGUID)) - Ughost->AI()->Talk(SAY_WP_6, me); - m_uiChatTimer = 4000; - break; - case 26: - if (player) - player->GroupEventHappens(QUEST_TOMB_LIGHTBRINGER, me); - break; - } - } - - void EnterCombat(Unit* /*who*/) override { } - - void JustDied(Unit* /*killer*/) override - { - if (Player* player = GetPlayerForEscort()) - player->FailQuest(QUEST_TOMB_LIGHTBRINGER); - } - - void UpdateAI(uint32 uiDiff) override - { - npc_escortAI::UpdateAI(uiDiff); - DoMeleeAttackIfReady(); - if (HasEscortState(STATE_ESCORT_ESCORTING)) - m_uiChatTimer = 6000; - } - }; -}; - -/*###### ## ######*/ @@ -425,5 +286,4 @@ void AddSC_western_plaguelands() new npc_myranda_the_hag(); new npc_the_scourge_cauldron(); new npc_andorhal_tower(); - new npc_anchorite_truuen(); } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 899dcc79a06..03ef46c204c 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -1244,8 +1244,9 @@ public: ++_wpCount; } else if (Vehicle* hoverDisk = me->GetVehicleKit()) - if (Unit* lordPassenger = hoverDisk->GetPassenger(0)) - lordPassenger->ToCreature()->AI()->DoAction(ACTION_SET_DISK_VICTIM_CHASE); + if (Unit* passenger = hoverDisk->GetPassenger(0)) + if (Creature* lordPassenger = passenger->ToCreature()) + lordPassenger->AI()->DoAction(ACTION_SET_DISK_VICTIM_CHASE); } private: |