diff options
-rw-r--r-- | src/server/game/AI/CoreAI/GameObjectAI.h | 1 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 8 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.h | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Events/brewfest.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Events/hallows_end.cpp | 24 | ||||
-rw-r--r-- | src/server/scripts/Events/love_in_air.cpp | 24 | ||||
-rw-r--r-- | src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp | 13 |
8 files changed, 88 insertions, 7 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 4d317eef96..7a21b408c8 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -59,6 +59,7 @@ public: virtual void OnStateChanged(uint32 /*state*/, Unit* /*unit*/) {} virtual void EventInform(uint32 /*eventId*/) {} virtual void SpellHit(Unit* /*unit*/, const SpellInfo* /*spellInfo*/) {} + virtual bool CanBeSeen(Player const* /*seer*/) { return true; } }; class NullGameObjectAI : public GameObjectAI diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index cd69293265..277e7a879f 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -2655,13 +2655,13 @@ namespace lfg { switch (dungeonId) { - case 285: // The Headless Horseman + case LFG_DUNGEON_HEADLESS_HORSEMAN: return IsHolidayActive(HOLIDAY_HALLOWS_END); - case 286: // The Frost Lord Ahune + case LFG_DUNGEON_FROST_LORD_AHUNE: return IsHolidayActive(HOLIDAY_FIRE_FESTIVAL); - case 287: // Coren Direbrew + case LFG_DUNGEON_COREN_DIREBREW: return IsHolidayActive(HOLIDAY_BREWFEST); - case 288: // The Crown Chemical Co. + case LFG_DUNGEON_CROWN_CHEMICAL_CO: return IsHolidayActive(HOLIDAY_LOVE_IS_IN_THE_AIR); } return false; diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 53244d43e9..96773f24c2 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -140,6 +140,14 @@ namespace lfg LFG_UPDATE_FLAG_BINDED = 0x80 }; + enum LfgSeasonalDungeons + { + LFG_DUNGEON_HEADLESS_HORSEMAN = 285, + LFG_DUNGEON_FROST_LORD_AHUNE = 286, + LFG_DUNGEON_COREN_DIREBREW = 287, + LFG_DUNGEON_CROWN_CHEMICAL_CO = 288 + }; + struct RBEntryInfo { RBEntryInfo() {} diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index a53d9618bf..16a81af526 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -23,6 +23,7 @@ #include "Creature.h" #include "DynamicTree.h" #include "DynamicVisibility.h" +#include "GameObjectAI.h" #include "GridNotifiers.h" #include "Log.h" #include "MapMgr.h" @@ -1673,6 +1674,11 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo if (cObj->IsAIEnabled && this->ToPlayer() && !cObj->AI()->CanBeSeen(this->ToPlayer())) return false; + // Gameobject scripts + if (GameObject const* goObj = obj->ToGameObject()) + if (this->ToPlayer() && !goObj->AI()->CanBeSeen(this->ToPlayer())) + return false; + // pussywizard: arena spectator if (obj->GetTypeId() == TYPEID_PLAYER) if (((const Player*)obj)->IsSpectator() && ((const Player*)obj)->FindMap()->IsBattleArena()) diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 32c0a55e68..4d63636eeb 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -1753,6 +1753,17 @@ public: } } + bool CanBeSeen(Player const* player) override + { + if (player->IsGameMaster()) + { + return true; + } + + Group const* group = player->GetGroup(); + return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_COREN_DIREBREW; + } + void Reset() override { _events.Reset(); diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp index 93b298f7e3..2078a1105b 100644 --- a/src/server/scripts/Events/hallows_end.cpp +++ b/src/server/scripts/Events/hallows_end.cpp @@ -16,6 +16,7 @@ */ #include "CellImpl.h" +#include "GameObjectAI.h" #include "GossipDef.h" #include "GridNotifiers.h" #include "Group.h" @@ -987,7 +988,7 @@ public: Map::PlayerList const& players = me->GetMap()->GetPlayers(); if (!players.isEmpty() && players.begin()->GetSource() && players.begin()->GetSource()->GetGroup()) - sLFGMgr->FinishDungeon(players.begin()->GetSource()->GetGroup()->GetGUID(), 285, me->FindMap()); + sLFGMgr->FinishDungeon(players.begin()->GetSource()->GetGroup()->GetGUID(), lfg::LFG_DUNGEON_HEADLESS_HORSEMAN, me->FindMap()); } void KilledUnit(Unit* /*who*/) override @@ -1428,6 +1429,27 @@ public: return true; } + + struct go_loosely_turned_soilAI : public GameObjectAI + { + go_loosely_turned_soilAI(GameObject* gameObject) : GameObjectAI(gameObject) { } + + bool CanBeSeen(Player const* player) override + { + if (player->IsGameMaster()) + { + return true; + } + + Group const* group = player->GetGroup(); + return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_HEADLESS_HORSEMAN; + } + }; + + GameObjectAI* GetAI(GameObject* go) const override + { + return new go_loosely_turned_soilAI(go); + } }; void AddSC_event_hallows_end_scripts() diff --git a/src/server/scripts/Events/love_in_air.cpp b/src/server/scripts/Events/love_in_air.cpp index 4baa13e045..18d1d51ddd 100644 --- a/src/server/scripts/Events/love_in_air.cpp +++ b/src/server/scripts/Events/love_in_air.cpp @@ -345,6 +345,17 @@ public: EventMap events; uint32 speachTimer; + bool CanBeSeen(Player const* player) override + { + if (player->IsGameMaster()) + { + return true; + } + + Group const* group = player->GetGroup(); + return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_CROWN_CHEMICAL_CO; + } + void Reset() override { speachTimer = 0; @@ -366,7 +377,7 @@ public: me->AI()->Talk(SAY_HUMMEL_5); Map::PlayerList const& players = me->GetMap()->GetPlayers(); if (!players.isEmpty() && players.begin()->GetSource() && players.begin()->GetSource()->GetGroup()) - sLFGMgr->FinishDungeon(players.begin()->GetSource()->GetGroup()->GetGUID(), 288, me->FindMap()); + sLFGMgr->FinishDungeon(players.begin()->GetSource()->GetGroup()->GetGUID(), lfg::LFG_DUNGEON_CROWN_CHEMICAL_CO, me->FindMap()); } void JustSummoned(Creature* cr) override @@ -481,6 +492,17 @@ public: EventMap events; + bool CanBeSeen(Player const* player) override + { + if (player->IsGameMaster()) + { + return true; + } + + Group const* group = player->GetGroup(); + return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_CROWN_CHEMICAL_CO; + } + void Reset() override { } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp index b701fb1298..966754b111 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp @@ -105,6 +105,17 @@ public: SummonList summons; ObjectGuid InvokerGUID; + bool CanBeSeen(Player const* player) override + { + if (player->IsGameMaster()) + { + return true; + } + + Group const* group = player->GetGroup(); + return group && sLFGMgr->GetDungeon(group->GetGUID()) == lfg::LFG_DUNGEON_FROST_LORD_AHUNE; + } + void StartPhase1() { me->CastSpell(me, SPELL_AHUNES_SHIELD, true); @@ -300,7 +311,7 @@ public: if (player->GetGroup() && !finished) { finished = true; - sLFGMgr->FinishDungeon(player->GetGroup()->GetGUID(), 286, me->FindMap()); + sLFGMgr->FinishDungeon(player->GetGroup()->GetGUID(), lfg::LFG_DUNGEON_FROST_LORD_AHUNE, me->FindMap()); } } } |