summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h1
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp8
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h8
-rw-r--r--src/server/game/Entities/Object/Object.cpp6
-rw-r--r--src/server/scripts/Events/brewfest.cpp11
-rw-r--r--src/server/scripts/Events/hallows_end.cpp24
-rw-r--r--src/server/scripts/Events/love_in_air.cpp24
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp13
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());
}
}
}