if (!player->isAlive())
{
if(Corpse *corpse = player->GetCorpse())
{
if (corpse->GetMapId() != GetId())
{
player->GetSession()->SendAreaTriggerMessage("You cannot enter %s while in a ghost mode", GetMapName());
sLog.outDebug("MAP: Player '%s' doesn't has a corpse in instance '%s' and can't enter", player->GetName(), GetMapName());
return(false);
}
sLog.outDebug("MAP: Player '%s' has corpse in instance '%s' and can enter", player->GetName(), GetMapName());
}
else
{
sLog.outDebug("Map::CanEnter - player '%s' is dead but doesn't have a corpse!", player->GetName());
}
}
//Attunement system
uint32 RequiredItem;
uint32 RequiredQuest;
std::vector<std::string> RequiredQuests;
bool QuestCompleted;
//Attunement check
RequiredItem = 0;
RequiredQuest = 0;
QuestCompleted = false;
uint32 qmapid = GetId();
QueryResult* result = sDatabase.PQuery("SELECT `RequiredQuest`,`RequiredItem` FROM `instance_template` WHERE `map` = '%d'", qmapid);
Field *fields = result->Fetch();
RequiredQuests = StrSplit(fields[0].GetString(), ";");
RequiredItem = fields[1].GetUInt32();
delete result;
//Check for required quest
std::vector<std::string>::iterator iter;
int index;
for (iter = RequiredQuests.begin(), index = 0; index < RequiredQuests.size(); ++iter, ++index)
{
RequiredQuest = uint32(atoi((*iter).c_str()));
if (player->GetQuestRewardStatus(RequiredQuest) || RequiredQuest == 0)
QuestCompleted = true;
sLog.outDebug("Map: Instance attunement check: RequiredQuest: %d, RewardStatus: %d", RequiredQuest, player->GetQuestRewardStatus(RequiredQuest));
}
sLog.outDebug("Map: RequiredQuest array size: %d", RequiredQuests.size());
if (!QuestCompleted && !player->isGameMaster()) {
player->GetSession()->SendAreaTriggerMessage("You are not attuned to %s.", GetMapName());
return(false);
}
//Check for required item
if (!player->HasItemCount(RequiredItem, 1) && RequiredItem != 0 && !player->isGameMaster()) {
player->GetSession()->SendAreaTriggerMessage("You do not have the required key for this instance.", GetMapName());
return(false);
}
if(i_data && i_data->IsEncounterInProgress())
{
sLog.outDebug("MAP: Player '%s' can't enter instance '%s' while an encounter is in progress.", player->GetName(), GetMapName());
player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT);
return(false);
}
return(true);