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 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::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);