aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Instances/InstanceScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Instances/InstanceScript.cpp')
-rw-r--r--src/server/game/Instances/InstanceScript.cpp38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index 3deec5a880a..bfd9bd62647 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -20,6 +20,7 @@
#include "CreatureAI.h"
#include "DatabaseEnv.h"
#include "GameObject.h"
+#include "Group.h"
#include "InstanceScript.h"
#include "LFGMgr.h"
#include "Log.h"
@@ -422,28 +423,41 @@ void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit /*= NULL*/, uint8
instance->SendToPlayers(&data);
}
-void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Unit* source)
+void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Unit* /*source*/)
{
DungeonEncounterList const* encounters = sObjectMgr->GetDungeonEncounterList(instance->GetId(), instance->GetDifficulty());
if (!encounters)
return;
+ uint32 dungeonId = 0;
+
for (DungeonEncounterList::const_iterator itr = encounters->begin(); itr != encounters->end(); ++itr)
{
- if ((*itr)->creditType == type && (*itr)->creditEntry == creditEntry)
+ DungeonEncounter const* encounter = *itr;
+ if (encounter->creditType == type && encounter->creditEntry == creditEntry)
{
- completedEncounters |= 1 << (*itr)->dbcEntry->encounterIndex;
- sLog->outDebug(LOG_FILTER_TSCR, "Instance %s (instanceId %u) completed encounter %s", instance->GetMapName(), instance->GetInstanceId(), (*itr)->dbcEntry->encounterName[0]);
- if (uint32 dungeonId = (*itr)->lastEncounterDungeon)
+ completedEncounters |= 1 << encounter->dbcEntry->encounterIndex;
+ if (encounter->lastEncounterDungeon)
{
- Map::PlayerList const& players = instance->GetPlayers();
- if (!players.isEmpty())
- for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
- if (Player* player = i->getSource())
- if (!source || player->IsAtGroupRewardDistance(source))
- sLFGMgr->RewardDungeonDoneFor(dungeonId, player);
+ dungeonId = encounter->lastEncounterDungeon;
+ sLog->outDebug(LOG_FILTER_LFG, "UpdateEncounterState: Instance %s (instanceId %u) completed encounter %s. Credit Dungeon: %u", instance->GetMapName(), instance->GetInstanceId(), encounter->dbcEntry->encounterName[0], dungeonId);
+ break;
}
- return;
+ }
+ }
+
+ if (dungeonId)
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+ for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
+ {
+ if (Player* player = i->getSource())
+ if (Group* grp = player->GetGroup())
+ if (grp->isLFGGroup())
+ {
+ sLFGMgr->FinishDungeon(grp->GetGUID(), dungeonId);
+ return;
+ }
}
}
}