Для доступа в
новые подземелья, введены отдельные квесты для алов и орды, попытка реализовать.)
Код:
diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp
index a598130..ca25c32 100644
--- a/src/game/MiscHandler.cpp
+++ b/src/game/MiscHandler.cpp
@@ -781,16 +781,28 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
uint32 missingQuest = 0;
if (!isRegularTargetMap)
{
- if (at->requiredQuestHeroic && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic))
+ if (at->requiredQuestHeroic2 && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic2))
+ missingQuest = at->requiredQuestHeroic2;
+ }
+ else
+ {
+ if (at->requiredQuestHeroic && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic))
missingQuest = at->requiredQuestHeroic;
}
+
+ uint32 missingQuest2 = 0;
+ if (!isRegularTargetMap)
+ {
+ if (at->requiredQuest2 && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest2))
+ missingQuest2 = at->requiredQuest2;
+ }
else
{
if (at->requiredQuest && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest))
- missingQuest = at->requiredQuest;
+ missingQuest2 = at->requiredQuest;
}
- if(missingLevel || missingItem || missingKey || missingQuest)
+ if(missingLevel || missingItem || missingKey || missingQuest || missingQuest2)
{
// TODO: all this is probably wrong
if(missingItem)
@@ -799,6 +811,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
GetPlayer()->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_DIFFICULTY, isRegularTargetMap ? DUNGEON_DIFFICULTY_NORMAL : DUNGEON_DIFFICULTY_HEROIC);
else if(missingQuest)
SendAreaTriggerMessage("%s", at->requiredFailedText.c_str());
+ else if(missingQuest2)
+ SendAreaTriggerMessage("%s", at->requiredFailedText.c_str());
else if(missingLevel)
SendAreaTriggerMessage(GetMangosString(LANG_LEVEL_MINREQUIRED), missingLevel);
return;
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index b5ca24c..1f4873d 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -5454,7 +5454,7 @@ void ObjectMgr::LoadAreaTriggerTeleports()
uint32 count = 0;
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
- QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, required_quest_done, required_quest_done_heroic, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport");
+ QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, required_quest_done, required_quest_done2, required_quest_done_heroic, required_quest_done_heroic2, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport");
if (!result)
{
@@ -5487,13 +5487,15 @@ void ObjectMgr::LoadAreaTriggerTeleports()
at.heroicKey = fields[4].GetUInt32();
at.heroicKey2 = fields[5].GetUInt32();
at.requiredQuest = fields[6].GetUInt32();
- at.requiredQuestHeroic = fields[7].GetUInt32();
- at.requiredFailedText = fields[8].GetCppString();
- at.target_mapId = fields[9].GetUInt32();
- at.target_X = fields[10].GetFloat();
- at.target_Y = fields[11].GetFloat();
- at.target_Z = fields[12].GetFloat();
- at.target_Orientation = fields[13].GetFloat();
+ at.requiredQuest2 = fields[7].GetUInt32();
+ at.requiredQuestHeroic = fields[8].GetUInt32();
+ at.requiredQuestHeroic2 = fields[9].GetUInt32();
+ at.requiredFailedText = fields[10].GetCppString();
+ at.target_mapId = fields[11].GetUInt32();
+ at.target_X = fields[12].GetFloat();
+ at.target_Y = fields[13].GetFloat();
+ at.target_Z = fields[14].GetFloat();
+ at.target_Orientation = fields[15].GetFloat();
AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID);
if (!atEntry)
@@ -5552,6 +5554,16 @@ void ObjectMgr::LoadAreaTriggerTeleports()
}
}
+ if (at.requiredQuest2)
+ {
+ QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuest2);
+ if (qReqItr == mQuestTemplates.end())
+ {
+ sLog.outErrorDb("Table `areatrigger_teleport` has not existed required second quest %u for trigger %u, remove quest done requirement.",at.requiredQuest2,Trigger_ID);
+ at.requiredQuest2 = 0;
+ }
+ }
+
if (at.requiredQuestHeroic)
{
QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuestHeroic);
@@ -5562,6 +5574,16 @@ void ObjectMgr::LoadAreaTriggerTeleports()
}
}
+ if (at.requiredQuestHeroic2)
+ {
+ QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuestHeroic2);
+ if (qReqItr == mQuestTemplates.end())
+ {
+ sLog.outErrorDb("Table `areatrigger_teleport` has not existed required heroic second quest %u for trigger %u, remove quest done requirement.",at.requiredQuestHeroic2,Trigger_ID);
+ at.requiredQuestHeroic2 = 0;
+ }
+ }
+
MapEntry const* mapEntry = sMapStore.LookupEntry(at.target_mapId);
if (!mapEntry)
{
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index a989f26..cac4e2b 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -117,7 +117,9 @@ struct AreaTrigger
uint32 heroicKey;
uint32 heroicKey2;
uint32 requiredQuest;
+ uint32 requiredQuest2;
uint32 requiredQuestHeroic;
+ uint32 requiredQuestHeroic2;
std::string requiredFailedText;
uint32 target_mapId;
float target_X;
Код:
ALTER TABLE areatrigger_teleport
ADD COLUMN required_quest_done2 int(11) unsigned NOT NULL default '0' AFTER required_quest_done,
ADD COLUMN required_quest_done_heroic2 int(11) unsigned NOT NULL default '0' AFTER required_quest_done_heroic;