// Function to search for new tubber in range void DoFindNewTubber() { std::list<GameObject*> lTubbersInRange; GetGameObjectListWithEntryInGrid(lTubbersInRange, m_creature, GO_BLUELEAF_TUBBER, 40.0f); if (lTubbersInRange.empty()) return; lTubbersInRange.sort(ObjectDistanceOrder(m_creature)); GameObject* pNearestTubber = nullptr; // Always need to find new ones for (std::list<GameObject*>::const_iterator itr = lTubbersInRange.begin(); itr != lTubbersInRange.end(); ++itr) { if (!(*itr)->isSpawned() && (*itr)->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND) && (*itr)->IsWithinLOSInMap(m_creature)) { pNearestTubber = *itr; break; } } if (!pNearestTubber) return; m_targetTubberGuid = pNearestTubber->GetObjectGuid(); float fX, fY, fZ; pNearestTubber->GetContactPoint(m_creature, fX, fY, fZ); m_creature->GetMotionMaster()->MovePoint(1, fX, fY, fZ); m_bIsMovementActive = true; }
void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY"); uint32 count = 0; WorldPacket data(SMSG_QUESTGIVER_STATUS_MULTIPLE, 4); data << uint32(count); // placeholder for(ObjectGuidSet::const_iterator itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr) { uint8 dialogStatus = DIALOG_STATUS_NONE; if (itr->IsAnyTypeCreature()) { // need also pet quests case support Creature *questgiver = GetPlayer()->GetMap()->GetAnyTypeCreature(*itr); if (!questgiver || questgiver->IsHostileTo(_player)) continue; if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) continue; dialogStatus = sScriptMgr.GetDialogStatus(_player, questgiver); if (dialogStatus > DIALOG_STATUS_REWARD_REP) dialogStatus = getDialogStatus(_player, questgiver, DIALOG_STATUS_NONE); data << questgiver->GetObjectGuid(); data << uint8(dialogStatus); ++count; } else if (itr->IsGameObject()) { GameObject *questgiver = GetPlayer()->GetMap()->GetGameObject(*itr); if (!questgiver) continue; if (questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) continue; dialogStatus = sScriptMgr.GetDialogStatus(_player, questgiver); if (dialogStatus > DIALOG_STATUS_REWARD_REP) dialogStatus = getDialogStatus(_player, questgiver, DIALOG_STATUS_NONE); data << questgiver->GetObjectGuid(); data << uint8(dialogStatus); ++count; } } data.put<uint32>(0, count); // write real count SendPacket(&data); }
list<ObjectGuid> NearestGameObjects::Calculate() { list<GameObject*> targets; AnyGameObjectInObjectRangeCheck u_check(bot, range); GameObjectListSearcher<AnyGameObjectInObjectRangeCheck> searcher(targets, u_check); Cell::VisitAllObjects((const WorldObject*)bot, searcher, range); list<ObjectGuid> result; for(list<GameObject*>::iterator tIter = targets.begin(); tIter != targets.end(); ++tIter) { GameObject* go = *tIter; if(bot->IsWithinLOSInMap(go)) result.push_back(go->GetObjectGuid()); } return result; }
void OnCreatureEnterCombat(Creature * pCreature) { switch (pCreature->GetEntry()) { case NPC_CAPTAIN_QEEZ: case NPC_CAPTAIN_TUUBID: case NPC_CAPTAIN_DRENN: case NPC_CAPTAIN_XURREM: case NPC_MAJOR_YEGGETH: case NPC_MAJOR_PAKKON: case NPC_COLONEL_ZERRAN: case NPC_SWARMGUARD_NEEDLER: case NPC_QIRAJI_WARRIOR: /** Create Yeggeth list for Rajaxx Shield ability */ if (CreatureGroup* g = pCreature->GetCreatureGroup()) if (g->GetLeaderGuid().GetEntry() == NPC_MAJOR_YEGGETH) m_lYeggethShieldList.push_back(pCreature->GetGUID()); // If any creature from Rajaxx's wave enters combat, start Rajaxx event. if (m_auiEncounter[TYPE_RAJAXX] == NOT_STARTED) SetData(TYPE_RAJAXX, IN_PROGRESS); m_bRajaxxEventIsToReset = false; // no break case NPC_KURINNAXX: case NPC_RAJAXX: case NPC_BURU: case NPC_MOAM: case NPC_AYAMISS: case NPC_OSSIRIAN: if (!m_bIsAQDoorOn) { GameObject *pAQDoor = pCreature->SummonGameObject(176149, -8526, 1507.4f, 49, 4.20662f, 0, 0, 0.861534f, -0.5077f, -1, false); p_doorGuid = pAQDoor->GetObjectGuid(); m_bIsAQDoorOn = true; } break; default: break; } }