Backports from 400 branch.

This commit is contained in:
tomrus88 2010-11-15 18:01:45 +03:00
parent bf774f49ce
commit 76dfdd336f
32 changed files with 223 additions and 210 deletions

View file

@ -746,20 +746,22 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
if(!GetPlayer()->isGameMaster())
{
uint32 missingLevel = 0;
bool missingItem = false;
bool missingLevel = false;
bool missingQuest = false;
if(GetPlayer()->getLevel() < at->requiredLevel && !sWorld.getConfig(CONFIG_BOOL_INSTANCE_IGNORE_LEVEL))
missingLevel = at->requiredLevel;
missingLevel = true;
// must have one or the other, report the first one that's missing
uint32 missingItem = 0;
if(at->requiredItem)
{
if(!GetPlayer()->HasItemCount(at->requiredItem, 1) &&
(!at->requiredItem2 || !GetPlayer()->HasItemCount(at->requiredItem2, 1)))
missingItem = at->requiredItem;
missingItem = true;
}
else if(at->requiredItem2 && !GetPlayer()->HasItemCount(at->requiredItem2, 1))
missingItem = at->requiredItem2;
missingItem = true;
MapEntry const* mapEntry = sMapStore.LookupEntry(at->target_mapId);
if(!mapEntry)
@ -767,42 +769,39 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
bool isRegularTargetMap = GetPlayer()->GetDifficulty(mapEntry->IsRaid()) == REGULAR_DIFFICULTY;
uint32 missingKey = 0;
if (!isRegularTargetMap)
{
if(at->heroicKey)
{
if(!GetPlayer()->HasItemCount(at->heroicKey, 1) &&
(!at->heroicKey2 || !GetPlayer()->HasItemCount(at->heroicKey2, 1)))
missingKey = at->heroicKey;
missingItem = true;
}
else if(at->heroicKey2 && !GetPlayer()->HasItemCount(at->heroicKey2, 1))
missingKey = at->heroicKey2;
missingItem = true;
}
uint32 missingQuest = 0;
if (!isRegularTargetMap && mapEntry->IsDungeon())
{
if (at->requiredQuestHeroic && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic))
missingQuest = at->requiredQuestHeroic;
missingQuest = true;
}
else
{
if (at->requiredQuest && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest))
missingQuest = at->requiredQuest;
missingQuest = true;
}
if(missingLevel || missingItem || missingKey || missingQuest)
if(missingItem || missingLevel || missingQuest)
{
// TODO: all this is probably wrong
if(missingItem)
SendAreaTriggerMessage(GetMangosString(LANG_LEVEL_MINREQUIRED_AND_ITEM), at->requiredLevel, ObjectMgr::GetItemPrototype(missingItem)->Name1);
else if(missingKey)
GetPlayer()->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_DIFFICULTY, isRegularTargetMap ? DUNGEON_DIFFICULTY_NORMAL : DUNGEON_DIFFICULTY_HEROIC);
else if(missingQuest)
// hack for "Opening of the Dark Portal"
if(missingQuest && at->target_mapId == 269)
SendAreaTriggerMessage("%s", at->requiredFailedText.c_str());
else if(missingLevel)
SendAreaTriggerMessage(GetMangosString(LANG_LEVEL_MINREQUIRED), missingLevel);
// hack for TBC heroics
else if(missingLevel && !mapEntry->IsRaid() && GetPlayer()->GetDifficulty(false) == DUNGEON_DIFFICULTY_HEROIC && mapEntry->addon == 1)
SendAreaTriggerMessage(GetMangosString(LANG_LEVEL_MINREQUIRED), at->requiredLevel);
else
GetPlayer()->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_DIFFICULTY, GetPlayer()->GetDifficulty(mapEntry->IsRaid()));
return;
}
}