void WorldSession::_HandleAreaTriggerOpcode(uint32 id) { DEBUG_LOG("AreaTrigger: %u", id); // Are we REALLY here? if( !_player->IsInWorld() ) return; // Search quest log, find any exploration quests sQuestMgr.OnPlayerExploreArea(GetPlayer(),id); AreaTrigger* pAreaTrigger = AreaTriggerStorage.LookupEntry( id ); // if in BG handle is triggers if( _player->m_bg ) { _player->m_bg->HookOnAreaTrigger(_player, id); return; } // Hook for Scripted Areatriggers _player->GetMapMgr()->HookOnAreaTrigger(_player, id); if( _player->GetSession()->CanUseCommand('z') ) { if( pAreaTrigger != NULL ) sChatHandler.BlueSystemMessage( this, "[%sSystem%s] |rEntered areatrigger: %s%u (%s).", MSG_COLOR_WHITE, MSG_COLOR_LIGHTBLUE, MSG_COLOR_SUBWHITE, id, pAreaTrigger->Name ); else sChatHandler.BlueSystemMessage( this, "[%sSystem%s] |rEntered areatrigger: %s%u", MSG_COLOR_WHITE, MSG_COLOR_LIGHTBLUE, MSG_COLOR_SUBWHITE, id); } if( pAreaTrigger == NULL ) { DEBUG_LOG("Missing AreaTrigger: %u", id); return; } switch(pAreaTrigger->Type) { case ATTYPE_INSTANCE: { if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings { uint32 reason = CheckTriggerPrerequsites(pAreaTrigger, this, _player, WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid)); if(reason != AREA_TRIGGER_FAILURE_OK) { const char * pReason = AreaTriggerFailureMessages[reason]; char msg[200]; WorldPacket data(SMSG_AREA_TRIGGER_MESSAGE, 50); data << uint32(0); switch (reason) { case AREA_TRIGGER_FAILURE_LEVEL: snprintf(msg,200,pReason,pAreaTrigger->required_level); data << msg; break; case AREA_TRIGGER_FAILURE_NO_ATTUNE_I: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); ItemPrototype * pItem = ItemPrototypeStorage.LookupEntry(pMi->required_item); if(pItem) snprintf(msg,200,"You must have the item, `%s` to pass through here.",pItem->Name1); else snprintf(msg,200,"You must have the item, UNKNOWN to pass through here."); data << msg; }break; case AREA_TRIGGER_FAILURE_NO_ATTUNE_Q: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); Quest * pQuest = QuestStorage.LookupEntry(pMi->required_quest); if(pQuest) snprintf(msg,200,"You must have finished the quest, `%s` to pass through here.",pQuest->title); else snprintf(msg,200,"You must have finished the quest, UNKNOWN to pass through here."); data << msg; }break; default: data << pReason; break; } data << uint8(0); SendPacket(&data); return; } GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid); GetPlayer()->SafeTeleport(pAreaTrigger->Mapid, 0, LocationVector(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z, pAreaTrigger->o)); } }break; case ATTYPE_QUESTTRIGGER: { }break; case ATTYPE_INN: { // Inn if (!GetPlayer()->m_isResting) GetPlayer()->ApplyPlayerRestState(true); }break; case ATTYPE_TELEPORT: { if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings { GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid); GetPlayer()->SafeTeleport(pAreaTrigger->Mapid, 0, LocationVector(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z, pAreaTrigger->o)); } }break; default:break; } }
void WorldSession::_HandleAreaTriggerOpcode(uint32 id) { sLog.outDebug("AreaTrigger: %u", id); // Are we REALLY here? if( !_player->IsInWorld() ) return; // Search quest log, find any exploration quests sQuestMgr.OnPlayerExploreArea(GetPlayer(),id); AreaTriggerEntry* entry = dbcAreaTrigger.LookupEntry(id); AreaTrigger* pAreaTrigger = AreaTriggerStorage.LookupEntry(id); if( entry == NULL ) { sLog.outDebug("Missing AreaTrigger: %u", id); return; } sHookInterface.OnAreaTrigger(GetPlayer(), id); #ifdef GM_Z_DEBUG_DIRECTLY if( _player->GetSession() && _player->GetSession()->CanUseCommand('z') ) sChatHandler.BlueSystemMessage( this, "[%sSystem%s] |rEntered areatrigger: %s%u. (%s)", MSG_COLOR_WHITE, MSG_COLOR_LIGHTBLUE, MSG_COLOR_SUBWHITE, id, pAreaTrigger ? pAreaTrigger->Name : "Unknown name" ); #endif // if in BG handle is triggers if( _player->m_bg ) { _player->m_bg->HookOnAreaTrigger(_player, id); return; } // Hook for Scripted Areatriggers _player->GetMapMgr()->HookOnAreaTrigger(_player, id); if (pAreaTrigger == NULL) return; switch(pAreaTrigger->Type) { case ATTYPE_INSTANCE: { if(GetPlayer()->GetPlayerStatus() == TRANSFER_PENDING) //only ports if player is out of pendings return; if( sWorld.instance_CheckTriggerPrerequsites ) { uint32 reason = CheckTriggerPrerequsites(pAreaTrigger, this, _player, WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid)); if(reason != AREA_TRIGGER_FAILURE_OK) { const char * pReason = GetPlayer()->GetSession()->LocalizedWorldSrv(AreaTriggerFailureMessages[reason]); char msg[200]; WorldPacket data(SMSG_AREA_TRIGGER_MESSAGE, 50); data << uint32(0); switch (reason) { case AREA_TRIGGER_FAILURE_LEVEL: snprintf(msg, 200, pReason, pAreaTrigger->required_level); data << msg; break; case AREA_TRIGGER_FAILURE_NO_ATTUNE_I: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); ItemPrototype * pItem = ItemPrototypeStorage.LookupEntry(pMi->required_item); if(pItem) snprintf(msg, 200, GetPlayer()->GetSession()->LocalizedWorldSrv(35), pItem->Name1); else snprintf(msg, 200, GetPlayer()->GetSession()->LocalizedWorldSrv(36)); data << msg; }break; case AREA_TRIGGER_FAILURE_NO_ATTUNE_Q: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); Quest * pQuest = QuestStorage.LookupEntry(pMi->required_quest); if(pQuest) snprintf(msg, 200, GetPlayer()->GetSession()->LocalizedWorldSrv(35), pQuest->title); else snprintf(msg, 200, GetPlayer()->GetSession()->LocalizedWorldSrv(36)); data << msg; }break; default: data << pReason; break; } data << uint8(0); SendPacket(&data); return; } } GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid); GetPlayer()->SafeTeleport(pAreaTrigger->Mapid, 0, LocationVector(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z, pAreaTrigger->o)); }break; case ATTYPE_QUESTTRIGGER: { }break; case ATTYPE_INN: { // Inn if (!GetPlayer()->m_isResting) GetPlayer()->ApplyPlayerRestState(true); }break; case ATTYPE_TELEPORT: { if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings { GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid); GetPlayer()->SafeTeleport(pAreaTrigger->Mapid, 0, LocationVector(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z, pAreaTrigger->o)); } }break; default:break; } }
void WorldSession::_HandleAreaTriggerOpcode(uint32 id) { sLog.outDebug("AreaTrigger: %u", id); // Are we REALLY here? if( !_player || !_player->IsInWorld() ) return; // Search quest log, find any exploration quests sHookInterface.OnAreaTrigger(GetPlayer(), id); AreaTriggerEntry* entry = dbcAreaTrigger.LookupEntry(id); AreaTrigger* pAreaTrigger = AreaTriggerStorage.LookupEntry(id); if( entry == NULL || pAreaTrigger == NULL ) { //sLog.outDebug("Missing AreaTrigger: %u", id); return; } sHookInterface.OnAreaTrigger(GetPlayer(), id); //sun++ stuff - andy MapInfo * pMapInfo = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); if( pMapInfo == NULL ) return; if( _player->GetTaxiState() && pMapInfo->type != INSTANCE_NULL) { sLog.outString("%s entered trigger %u but was on a taxi, function returned.", _player->GetName(), id); return; } if( _player->RS_getAccess() == RS_ADMIN ) sChatHandler.BlueSystemMessage( this, "[%sSystem%s] |rEntered areatrigger: %s%u. (%s)", MSG_COLOR_WHITE, MSG_COLOR_LIGHTBLUE, MSG_COLOR_SUBWHITE, id, pAreaTrigger ? pAreaTrigger->Name : "Unknown name" ); sQuestMgr.OnPlayerExploreArea(GetPlayer(),id); // if in BG handle is triggers if( _player->m_bg ) { _player->m_bg->HookOnAreaTrigger(_player, id); return; } // Hook for Scripted Areatriggers _player->GetMapMgr()->HookOnAreaTrigger(_player, id); if (pAreaTrigger == NULL) return; switch(pAreaTrigger->Type) { case ATTYPE_INSTANCE: { if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings { uint32 reason = CheckTriggerPrerequsites(pAreaTrigger, this, _player, WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid)); if(reason != AREA_TRIGGER_FAILURE_OK) { const char * pReason = AreaTriggerFailureMessages[reason]; char msg[200]; WorldPacket data(SMSG_AREA_TRIGGER_MESSAGE, 50); data << uint32(0); switch (reason) { case AREA_TRIGGER_FAILURE_NO_SPELLHEROIC: SpellEntry * sp; if(pMapInfo) sp = dbcSpell.LookupEntryForced(pMapInfo->required_heroicspell); if( sp ) snprintf(msg,200,pReason,sp->Name); else { char sid[20]; snprintf(sid,20,"%u",pMapInfo->required_heroicspell); snprintf(msg,200,pReason, sid); } data << msg; break; case AREA_TRIGGER_FAILURE_NO_ACCESS: snprintf(msg, 200,pReason,GetPermissionsReq(pAreaTrigger) ); data << msg; break; case AREA_TRIGGER_FAILURE_LEVEL: snprintf(msg,200,pReason,pAreaTrigger->required_level); data << msg; break; case AREA_TRIGGER_FAILURE_NO_ATTUNE_I: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); ItemPrototype * pItem = ItemPrototypeStorage.LookupEntry(pMi->required_item); if(pItem) snprintf(msg,200,"You must have the item, `%s` to pass through here.",pItem->Name1); else snprintf(msg,200,"You must have the item, UNKNOWN to pass through here."); data << msg; }break; case AREA_TRIGGER_FAILURE_NO_ATTUNE_Q: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); Quest * pQuest = QuestStorage.LookupEntry(pMi->required_quest); if(pQuest) snprintf(msg,200,"You must have finished the quest, `%s` to pass through here.",pQuest->title); else snprintf(msg,200,"You must have finished the quest, UNKNOWN to pass through here."); data << msg; }break; case AREA_TRIGGER_FAILURE_NO_KEY: { MapInfo * pMi = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid); if(pMi->heroic_key_1 && pMi->heroic_key_2) { ItemPrototype * pKey1 = ItemPrototypeStorage.LookupEntry(pMi->heroic_key_1); ItemPrototype * pKey2 = ItemPrototypeStorage.LookupEntry(pMi->heroic_key_2); if(pKey1 && pKey2) snprintf(msg,200,"You must have the items, `%s` and `%s` to enter Heroic Mode.",pKey1->Name1,pKey2->Name1); else snprintf(msg,200,"You must have the item, UNKNOWN to pass through here."); } else if(pMi->heroic_key_1) { ItemPrototype * pKey1 = ItemPrototypeStorage.LookupEntry(pMi->heroic_key_1); if(pKey1) snprintf(msg,200,"You must have the item, `%s` to enter Heroic Mode.",pKey1->Name1); else snprintf(msg,200,"You must have the item, UNKNOWN to pass through here."); } else if(pMi->heroic_key_2) { ItemPrototype * pKey2 = ItemPrototypeStorage.LookupEntry(pMi->heroic_key_2); if(pKey2) snprintf(msg,200,"You must have the item, `%s` to enter Heroic Mode.",pKey2->Name1); else snprintf(msg,200,"You must have the item, UNKNOWN to pass through here."); } data << msg; }break; default: data << pReason; break; } data << uint8(0); SendPacket(&data); return; } GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid); GetPlayer()->SafeTeleport(pAreaTrigger->Mapid, 0, LocationVector(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z, pAreaTrigger->o)); } }break; case ATTYPE_QUESTTRIGGER: { }break; case ATTYPE_INN: { // Inn if (!GetPlayer()->m_isResting) GetPlayer()->ApplyPlayerRestState(true); }break; case ATTYPE_TELEPORT: { if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings { GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid); GetPlayer()->SafeTeleport(pAreaTrigger->Mapid, 0, LocationVector(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z, pAreaTrigger->o)); } }break; default:break; } }