void Transport::Start() { DETAIL_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES, "Transport::StartMovement %s (%s) start moves, period %u/%u", GetObjectGuid().GetString().c_str(), GetName(), m_pathTime, GetPeriod() ); SetActiveObjectState(true); BuildStartMovePacket(GetMap()); }
void DynamicObject::RemoveFromWorld() { ///- Remove the dynamicObject from the accessor if(IsInWorld()) { GetMap()->GetObjectsStore().erase<DynamicObject>(GetObjectGuid(), (DynamicObject*)NULL); GetViewPoint().Event_RemovedFromWorld(); } Object::RemoveFromWorld(); }
// Though the client has the information in the item's data field, // we have to send SMSG_ITEM_TIME_UPDATE to display the remaining // time. void Item::SendTimeUpdate(Player* owner) { uint32 duration = GetUInt32Value(ITEM_FIELD_DURATION); if (!duration) return; WorldPacket data(SMSG_ITEM_TIME_UPDATE, (8 + 4)); data << ObjectGuid(GetObjectGuid()); data << uint32(duration); owner->GetSession()->SendPacket(&data); }
void MOTransport::Stop() { DETAIL_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES, "Transport::StartMovement %s (%s) stop moves, period %u/%u", GetObjectGuid().GetString().c_str(), GetName(), m_pathTime, GetPeriod() ); SetActiveObjectState(false); RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); SetGoState(GO_STATE_READY); SetLootState(GO_JUST_DEACTIVATED); }
void Corpse::DeleteBonesFromWorld() { MANGOS_ASSERT(GetType() == CORPSE_BONES); Corpse* corpse = GetMap()->GetCorpse(GetObjectGuid()); if (!corpse) { sLog.outError("Bones %u not found in world.", GetGUIDLow()); return; } AddObjectToRemoveList(); }
WorldPacket CPlayer::BuildNameQuery() { WorldPacket data(SMSG_NAME_QUERY_RESPONSE, (8 + 1 + 4 + 4 + 4 + 10)); data << GetObjectGuid(); // player guid data << GetName(); // player name data << uint8(0); // realm name data << uint32(getRace()); // player race data << uint32(getGender()); // player gender data << uint32(getClass()); // player class data << uint8(0); // is not declined return data; }
void Group::SendUpdate() { for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) { Player* player = sObjectMgr.GetPlayer(citr->guid); if (!player || !player->GetSession() || player->GetGroup() != this) continue; // guess size WorldPacket data(SMSG_GROUP_LIST, (1 + 1 + 1 + 1 + 8 + 4 + GetMembersCount() * 20)); data << uint8(m_groupType); // group type (flags in 3.3) data << uint8(citr->group); // groupid data << uint8(GetFlags(*citr)); // group flags data << uint8(isBGGroup() ? 1 : 0); // 2.0.x, isBattleGroundGroup? if (m_groupType & GROUPTYPE_LFD) { data << uint8(0); data << uint32(0); } data << GetObjectGuid(); // group guid data << uint32(0); // 3.3, this value increments every time SMSG_GROUP_LIST is sent data << uint32(GetMembersCount() - 1); for (member_citerator citr2 = m_memberSlots.begin(); citr2 != m_memberSlots.end(); ++citr2) { if (citr->guid == citr2->guid) continue; Player* member = sObjectMgr.GetPlayer(citr2->guid); uint8 onlineState = (member && member->GetSession() && !member->GetSession()->PlayerLogout()) ? MEMBER_STATUS_ONLINE : MEMBER_STATUS_OFFLINE; onlineState = onlineState | ((isBGGroup()) ? MEMBER_STATUS_PVP : 0); data << citr2->name; data << citr2->guid; data << uint8(onlineState); data << uint8(citr2->group); // groupid data << uint8(GetFlags(*citr2)); // group flags data << uint8(0); // 3.3, role? } ObjectGuid masterLootGuid = (m_lootMethod == MASTER_LOOT) ? m_masterLooterGuid : ObjectGuid(); data << m_leaderGuid; // leader guid if (GetMembersCount() - 1) { data << uint8(m_lootMethod); // loot method data << masterLootGuid; // master loot guid data << uint8(m_lootThreshold); // loot threshold data << uint8(m_dungeonDifficulty); // Dungeon Difficulty data << uint8(m_raidDifficulty); // Raid Difficulty data << uint8(0); // 3.3, dynamic difficulty? } player->GetSession()->SendPacket(&data); } }
void Bag::StoreItem(uint8 slot, Item* pItem, bool /*update*/) { MANGOS_ASSERT(slot < MAX_BAG_SIZE); if (pItem) { m_bagslot[slot] = pItem; SetGuidValue(CONTAINER_FIELD_SLOT_1 + (slot * 2), pItem->GetObjectGuid()); pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetObjectGuid()); pItem->SetGuidValue(ITEM_FIELD_OWNER, GetOwnerGuid()); pItem->SetContainer(this); pItem->SetSlot(slot); } }
void CPlayer::JoinBattleGround(BattleGround* bg) { if (bg->isArena()) return; if (!NativeTeam()) { m_FakedPlayers.push_back(GetObjectGuid()); SetByteValue(UNIT_FIELD_BYTES_0, 0, getFRace()); setFaction(getFFaction()); } SetRecache(); FakeDisplayID(); }
void Group::SendUpdate() { for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) { Player* player = sObjectMgr.GetPlayer(citr->guid); if (!player || !player->GetSession() || player->GetGroup() != this) continue; // guess size WorldPacket data(SMSG_GROUP_LIST, (1 + 1 + 1 + 1 + 8 + 4 + GetMembersCount() * 20)); data << uint8(m_groupType); // group type data << uint8(isBGGroup() ? 1 : 0); // 2.0.x, isBattleGroundGroup? data << uint8(citr->group); // groupid data << uint8(citr->assistant ? 0x01 : 0); // 0x2 main assist, 0x4 main tank data << GetObjectGuid(); // group guid data << uint32(GetMembersCount() - 1); for (member_citerator citr2 = m_memberSlots.begin(); citr2 != m_memberSlots.end(); ++citr2) { if (citr->guid == citr2->guid) continue; Player* member = sObjectMgr.GetPlayer(citr2->guid); uint8 onlineState = (member) ? MEMBER_STATUS_ONLINE : MEMBER_STATUS_OFFLINE; onlineState = onlineState | ((isBGGroup()) ? MEMBER_STATUS_PVP : 0); data << citr2->name; data << citr2->guid; // online-state data << uint8(sObjectMgr.GetPlayer(citr2->guid) ? 1 : 0); data << uint8(citr2->group); // groupid data << uint8(citr2->assistant ? 0x01 : 0); // 0x2 main assist, 0x4 main tank } ObjectGuid masterLootGuid = (m_lootMethod == MASTER_LOOT) ? m_masterLooterGuid : ObjectGuid(); data << m_leaderGuid; // leader guid if (GetMembersCount() - 1) { data << uint8(m_lootMethod); // loot method data << masterLootGuid; // master loot guid data << uint8(m_lootThreshold); // loot threshold data << uint8(m_difficulty); // Heroic Mod Group } player->GetSession()->SendPacket(&data); } }
void CPlayer::RecachePlayersFromBG() { BattleGround* bg = GetBattleGround(); if (!bg) return; for (auto& itr : bg->GetPlayers()) { if (Player* player = sObjectMgr.GetPlayer(itr.first)) { if (!player->ToCPlayer()->NativeTeam()) { // Erase bg players from source player cache WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); data << player->GetObjectGuid(); GetSession()->SendPacket(&data); // Send bg player data to source player data = player->ToCPlayer()->BuildNameQuery(); GetSession()->SendPacket(&data); } if (!NativeTeam()) { // Erase source player from bg players cache WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); data << GetObjectGuid(); player->GetSession()->SendPacket(&data); // Send new source data to bg players data = BuildNameQuery(); player->GetSession()->SendPacket(&data); } } else { // Couldn't find bgplayer, recache him for source player in case he logs in again. WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); data << itr.first; GetSession()->SendPacket(&data); } } }
void Group::SendUpdate() { for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) { Player* player = sObjectMgr.GetPlayer(citr->guid); if (!player || !player->GetSession() || player->GetGroup() != this) continue; // guess size WorldPacket data(SMSG_GROUP_LIST, (1 + 1 + 1 + 1 + 8 + 4 + GetMembersCount() * 20)); data << uint8(m_groupType); // group type data << uint8(isBattleGroup() ? 1 : 0); // 2.0.x, isBattleGroundGroup? data << uint8(citr->group); // groupid data << uint8(GetFlags(*citr)); // group flags data << GetObjectGuid(); // group guid data << uint32(GetMembersCount() - 1); for (member_citerator citr2 = m_memberSlots.begin(); citr2 != m_memberSlots.end(); ++citr2) { if (citr->guid == citr2->guid) continue; data << citr2->name; data << citr2->guid; data << uint8(GetGroupMemberStatus(sObjectMgr.GetPlayer(citr2->guid))); data << uint8(citr2->group); // groupid data << uint8(GetFlags(*citr2)); // group flags } ObjectGuid masterLootGuid = (m_lootMethod == MASTER_LOOT) ? m_masterLooterGuid : ObjectGuid(); data << m_leaderGuid; // leader guid if (GetMembersCount() - 1) { data << uint8(m_lootMethod); // loot method data << masterLootGuid; // master loot guid data << uint8(m_lootThreshold); // loot threshold data << uint8(m_difficulty); // Heroic Mod Group } player->GetSession()->SendPacket(data); } }
bool ProcessEventId_event_test_of_endurance(uint32 eventId, Object* pSource, Object* pTarget, bool isStart) { auto pGO = pTarget->ToGameObject(); auto pPlayer = pSource->ToPlayer(); if (!pGO || !pPlayer) return true; if (pGO->FindNearestCreature(NPC_GRENKA, 100.0f)) return true; if (auto pGrenka = pGO->SummonCreature(Harpies[4].entry, Harpies[4].x, Harpies[4].y, Harpies[4].z, Harpies[4].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, MINUTE*IN_MILLISECONDS)) { if (auto pGrenkaAI = static_cast<npc_grenka_bloodscreechAI*>(pGrenka->AI())) pGrenkaAI->m_PlayerGuid = pPlayer->GetObjectGuid(); } return true; }
bool Item::CanBeTraded() const { if (IsSoulBound()) return false; if (IsBag() && (Player::IsBagPos(GetPos()) || !((Bag const*)this)->IsEmpty())) return false; if (Player* owner = GetOwner()) { if (owner->CanUnequipItem(GetPos(), false) != EQUIP_ERR_OK) return false; if (owner->GetLootGuid() == GetObjectGuid()) return false; } if (HasGeneratedLoot()) return false; if (IsBoundByEnchant()) return false; return true; }
void Totem::UnSummon() { SendObjectDeSpawnAnim(GetObjectGuid()); CombatStop(); RemoveAurasDueToSpell(GetSpell()); if (Unit* owner = GetOwner()) { owner->_RemoveTotem(this); owner->RemoveAurasDueToSpell(GetSpell()); // remove aura all party members too if (owner->GetTypeId() == TYPEID_PLAYER) { // Not only the player can summon the totem (scripted AI) if (Group* pGroup = ((Player*)owner)->GetGroup()) { for (GroupReference* itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next()) { Player* Target = itr->getSource(); if (Target && pGroup->SameSubGroup((Player*)owner, Target)) Target->RemoveAurasDueToSpell(GetSpell()); } } } if (owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->AI()) ((Creature*)owner)->AI()->SummonedCreatureDespawn((Creature*)this); } // any totem unsummon look like as totem kill, req. for proper animation if (isAlive()) SetDeathState(DEAD); AddObjectToRemoveList(); }
bool Item::CanBeTraded(bool mail, bool trade) const { if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_BOP_TRADEABLE) || !trade))) return false; if (IsBag() && (Player::IsBagPos(GetPos()) || !((Bag const*)this)->IsEmpty())) return false; if (Player* owner = GetOwner()) { if (owner->CanUnequipItem(GetPos(), false) != EQUIP_ERR_OK) return false; if (owner->GetLootGuid() == GetObjectGuid()) return false; } if (HasGeneratedLoot()) return false; if (IsBoundByEnchant()) return false; return true; }
LDAPAUTH_API BOOL CUGP(char * userin,char *password,char *machine, char * groupin,int locdom) { OSVERSIONINFO ovi = { sizeof ovi }; GetVersionEx( &ovi ); if (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT && ovi.dwMajorVersion >= 5 ) { //Handle the command line arguments. LPOLESTR pszBuffer = new OLECHAR[MAX_PATH*2]; LPOLESTR pszBuffer2 = new OLECHAR[MAX_PATH*2]; LPOLESTR pszBuffer3 = new OLECHAR[MAX_PATH*2]; LPOLESTR pszBuffer4 = new OLECHAR[MAX_PATH*2]; mbstowcs( (wchar_t *) pszBuffer, userin, MAX_PATH ); mbstowcs( (wchar_t *) pszBuffer2, password, MAX_PATH ); mbstowcs( (wchar_t *) pszBuffer3, machine, MAX_PATH ); mbstowcs( (wchar_t *) pszBuffer4, groupin, MAX_PATH ); HRESULT hr = S_OK; //Get rootDSE and the domain container's DN. IADs *pObject = NULL; IADs *pObjectUser = NULL; IADs *pObjectGroup = NULL; IDirectorySearch *pDS = NULL; LPOLESTR szPath = new OLECHAR[MAX_PATH]; LPOLESTR myPath = new OLECHAR[MAX_PATH]; VARIANT var; wcscpy(szPath,L"LDAP://"); wcscat(szPath,L"rootDSE"); wprintf(szPath); wprintf(L"\n"); hr = ADsOpenObject(szPath, pszBuffer, pszBuffer2, ADS_SECURE_AUTHENTICATION, //Use Secure Authentication IID_IADs, (void**)&pObject); if (FAILED(hr)) { wprintf(L"Bind to domain failed %i\n",hr); if (pObject) pObject->Release(); delete [] pszBuffer; delete [] pszBuffer2; delete [] pszBuffer3; delete [] pszBuffer4; delete [] szPath; delete [] myPath; return false; } hr = pObject->Get(L"defaultNamingContext",&var); if (SUCCEEDED(hr)) { wcscpy(szPath,L"LDAP://"); wcscat(szPath,var.bstrVal); VariantClear(&var); if (pObject) { pObject->Release(); pObject = NULL; } wprintf( szPath); wprintf(L"\n"); //Bind to the root of the current domain. hr = ADsOpenObject(szPath,pszBuffer,pszBuffer2, ADS_SECURE_AUTHENTICATION,IID_IDirectorySearch,(void**)&pDS); if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) { hr = FindUserByName(pDS, pszBuffer, &pObjectUser); if (FAILED(hr)) { wprintf(L"User not found %i\n",hr); delete [] pszBuffer; delete [] pszBuffer2; delete [] pszBuffer3; delete [] szPath; delete [] myPath; if (pDS) pDS->Release(); if (pObjectUser) pObjectUser->Release(); return false; } if (pObjectUser) pObjectUser->Release(); ///////////////////// VNCACCESS hr = FindGroup(pDS, pszBuffer, &pObjectGroup,pszBuffer4); if (pObjectGroup) { pObjectGroup->Release(); pObjectGroup = NULL; } if (FAILED(hr)) wprintf(L"group not found\n"); if (SUCCEEDED(hr)) { wprintf(L"Group found OK\n"); IADsGroup * pIADsG; hr = ADsOpenObject( gbsGroup,pszBuffer, pszBuffer2, ADS_SECURE_AUTHENTICATION,IID_IADsGroup, (void**) &pIADsG); if (SUCCEEDED(hr)) { VARIANT_BOOL bMember = FALSE; hr = pIADsG->IsMember(gbsMember,&bMember); if (SUCCEEDED(hr)) { if (bMember == -1) { wprintf(L"Object \n\n%s\n\n IS a member of the following Group:\n\n%s\n\n",gbsMember,gbsGroup); delete [] pszBuffer; delete [] pszBuffer2; delete [] pszBuffer3; delete [] szPath; delete [] myPath; if (pDS) pDS->Release(); return true; } else { BSTR bsMemberGUID = NULL; IDirectoryObject * pDOMember = NULL; hr = ADsOpenObject( gbsMember,pszBuffer, pszBuffer2, ADS_SECURE_AUTHENTICATION,IID_IDirectoryObject, (void**) &pDOMember); if (SUCCEEDED(hr)) { hr = GetObjectGuid(pDOMember,bsMemberGUID); pDOMember->Release(); pDOMember = NULL; if (RecursiveIsMember(pIADsG,bsMemberGUID,gbsMember,true, pszBuffer, pszBuffer2)) { delete [] pszBuffer; delete [] pszBuffer2; delete [] pszBuffer3; delete [] szPath; delete [] myPath; if (pDS) pDS->Release(); return true; } } }//else bmember }//ismember }//iadsgroup }//Findgroup wprintf(L"USER not found in group\n"); }//user } if (pDS) pDS->Release(); } /*LOGFAILED(pszBuffer3,pszBuffer);*/ delete [] pszBuffer; delete [] pszBuffer2; delete [] pszBuffer3; delete [] szPath; delete [] myPath; return false; } return false; }
bool CPlayer::SendBattleGroundChat(ChatMsg msgtype, std::string message) { // Select distance to broadcast to. float distance = sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_SAY); if (msgtype == CHAT_MSG_YELL) sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_YELL); else if (msgtype == CHAT_MSG_EMOTE) sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_TEXTEMOTE); BattleGround* pBattleGround = GetBattleGround(); if (!pBattleGround || pBattleGround->isArena()) // Only fake chat in BG's. CFBG should not interfere with arenas. return false; for (auto& itr : pBattleGround->GetPlayers()) { if (Player* pPlayer = sObjectMgr.GetPlayer(itr.first)) { if (GetDistance2d(pPlayer->GetPositionX(), pPlayer->GetPositionY()) <= distance) { WorldPacket data(SMSG_MESSAGECHAT, 200); if (GetTeam() == pPlayer->GetTeam()) ChatHandler::BuildChatPacket(data, msgtype, message.c_str(), LANG_UNIVERSAL, GetChatTag(), GetObjectGuid(), GetName()); else if (msgtype != CHAT_MSG_EMOTE) ChatHandler::BuildChatPacket(data, msgtype, message.c_str(), pPlayer->GetOTeam() == ALLIANCE ? LANG_ORCISH : LANG_COMMON, GetChatTag(), GetObjectGuid(), GetName()); pPlayer->GetSession()->SendPacket(&data); } } } return true; }
void DynamicObject::Delete() { SendObjectDeSpawnAnim(GetObjectGuid()); AddObjectToRemoveList(); }
void Item::AddToClientUpdateList() { if (Player* pPlayer = GetOwner()) pPlayer->AddUpdateObject(GetObjectGuid()); }
void StartBossEncounter(uint8 uiBoss, bool bForceRespawn = true) { Creature* boss = nullptr; switch (uiBoss) { case BOSS_MORAGG: HandleGameObject(GetObjectGuid(DATA_MORAGG_CELL), bForceRespawn); boss = GetCreature(DATA_MORAGG); if (boss) boss->GetMotionMaster()->MovePoint(0, BossStartMove1); break; case BOSS_EREKEM: HandleGameObject(GetObjectGuid(DATA_EREKEM_CELL), bForceRespawn); HandleGameObject(GetObjectGuid(DATA_EREKEM_LEFT_GUARD_CELL), bForceRespawn); HandleGameObject(GetObjectGuid(DATA_EREKEM_RIGHT_GUARD_CELL), bForceRespawn); boss = GetCreature(DATA_EREKEM); if (boss) boss->GetMotionMaster()->MovePoint(0, BossStartMove2); if (Creature* pGuard1 = instance->GetCreature(uiErekemGuard[0])) { if (bForceRespawn) pGuard1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); else pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); pGuard1->GetMotionMaster()->MovePoint(0, BossStartMove21); } if (Creature* pGuard2 = instance->GetCreature(uiErekemGuard[1])) { if (bForceRespawn) pGuard2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); else pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); pGuard2->GetMotionMaster()->MovePoint(0, BossStartMove22); } break; case BOSS_ICHORON: HandleGameObject(GetObjectGuid(DATA_ICHORON_CELL), bForceRespawn); boss = GetCreature(DATA_ICHORON); if (boss) boss->GetMotionMaster()->MovePoint(0, BossStartMove3); break; case BOSS_LAVANTHOR: HandleGameObject(GetObjectGuid(DATA_LAVANTHOR_CELL), bForceRespawn); boss = GetCreature(DATA_LAVANTHOR); if (boss) boss->GetMotionMaster()->MovePoint(0, BossStartMove4); break; case BOSS_XEVOZZ: HandleGameObject(GetObjectGuid(DATA_XEVOZZ_CELL), bForceRespawn); boss = GetCreature(DATA_XEVOZZ); if (boss) boss->GetMotionMaster()->MovePoint(0, BossStartMove5); break; case BOSS_ZURAMAT: HandleGameObject(GetObjectGuid(DATA_ZURAMAT_CELL), bForceRespawn); boss = GetCreature(DATA_ZURAMAT); if (boss) boss->GetMotionMaster()->MovePoint(0, BossStartMove6); break; } // generic boss state changes if (boss) { boss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); boss->SetReactState(REACT_AGGRESSIVE); if (!bForceRespawn) { if (boss->isDead()) { // respawn but avoid to be looted again boss->Respawn(); boss->RemoveLootMode(1); } boss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); uiWaveCount = 0; } } }
void MOTransport::Update(uint32 update_diff, uint32 p_time) { UpdateSplineMovement(p_time); if (!movespline->Finalized()) return; if (m_WayPoints.size() <= 1) return; bool anchorage = !m_anchorageTimer.Passed(); if (anchorage) m_anchorageTimer.Update(update_diff); m_timer = WorldTimer::getMSTime() % GetPeriod(true); while (((m_timer - m_curr->first) % m_pathTime) > ((m_next->first - m_curr->first) % m_pathTime)) { DoEventIfAny(*m_curr,true); MoveToNextWayPoint(); // delay detect if (m_next->second.delay > 0) { m_anchorageTimer.SetInterval(m_next->first - m_next->second.delay); m_anchorageTimer.Reset(); } DoEventIfAny(*m_curr,false); if (!SetPosition(m_curr->second.loc, m_curr->second.teleport)) { if (m_curr->second.loc.GetMapId() == m_next->second.loc.GetMapId() && !m_curr->second.teleport && m_anchorageTimer.Passed() && !(m_curr->second.loc == m_next->second.loc)) { // FIXME - use MovementGenerator instead this DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES,"Transport::Update %s start spline movement to %f %f %f",GetObjectGuid().GetString().c_str(), m_next->second.loc.x, m_next->second.loc.y, m_next->second.loc.z); Movement::MoveSplineInit<GameObject*> init(*this); init.MoveTo((Vector3)m_next->second.loc); init.SetVelocity(GetGOInfo()->moTransport.moveSpeed); init.Launch(); } } m_nextNodeTime = m_curr->first; DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES, "Transport::Update %s moved to %f %f %f %d %s, next keyframe %u", GetObjectGuid().GetString().c_str(), m_curr->second.loc.x, m_curr->second.loc.y, m_curr->second.loc.z, m_curr->second.loc.GetMapId(), m_curr == m_WayPoints.begin() ? "begin move" : "", m_nextNodeTime); } }
void Item::RemoveFromClientUpdateList() { if (Player* pPlayer = GetOwner()) pPlayer->RemoveUpdateObject(GetObjectGuid()); }
void Transport::DoEventIfAny(WayPointMap::value_type const& node, bool departure) { if (uint32 eventid = departure ? node.second.departureEventID : node.second.arrivalEventID) { DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES, "Taxi %s event %u of node %u of %s (%s) path", departure ? "departure" : "arrival", eventid, node.first, GetName(), GetObjectGuid().GetString().c_str()); if (!Script->ProcessEventId(eventid, this, this, departure)) GetMap()->ScriptsStart(sEventScripts, eventid, this, this); } }
// Return true, only if transport has correct position! bool MOTransport::SetPosition(WorldLocation const& loc, bool teleport) { // prevent crash when a bad coord is sent by the client if (!MaNGOS::IsValidMapCoord(loc.getX(), loc.getY(), loc.getZ(), loc.getO())) { DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES, "Transport::SetPosition(%f, %f, %f, %f, %d) bad coordinates for transport %s!", loc.getX(), loc.getY(), loc.getZ(), loc.getO(), teleport, GetName()); return false; } if (teleport || GetMapId() != loc.GetMapId()) { Map* oldMap = GetMap(); Map* newMap = sMapMgr.CreateMap(loc.GetMapId(), this); if (!newMap) { sLog.outError("Transport::SetPosition cannot create map %u for transport %s!", loc.GetMapId(), GetName()); return false; } if (oldMap != newMap) { // Transport inserted in current map ActiveObjects list if (!GetTransportKit()->GetPassengers().empty()) { DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES,"Transport::SetPosition %s notify passengers (count " SIZEFMTD ") for change map from %u to %u",GetObjectGuid().GetString().c_str(), GetTransportKit()->GetPassengers().size(), GetPosition().GetMapId(), loc.GetMapId()); GetTransportKit()->CallForAllPassengers(NotifyMapChangeBegin(oldMap, GetPosition(), loc)); } oldMap->Remove((GameObject*)this, false); SkipUpdate(true); SetMap(newMap); Relocate(loc); SetLocationMapId(loc.GetMapId()); SetLocationInstanceId(loc.GetInstanceId()); newMap->Add((GameObject*)this); // Transport inserted in current map ActiveObjects list if (!GetTransportKit()->GetPassengers().empty()) { DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES,"Transport::SetPosition %s notify passengers (count " SIZEFMTD ") for finished change map to %u",GetObjectGuid().GetString().c_str(), GetTransportKit()->GetPassengers().size(), loc.GetMapId()); GetTransportKit()->CallForAllPassengers(NotifyMapChangeEnd(newMap,loc)); } DEBUG_FILTER_LOG(LOG_FILTER_TRANSPORT_MOVES, "Transport::SetPosition %s teleported to (%f, %f, %f, %f)", GetObjectGuid().GetString().c_str(), loc.x, loc.y, loc.z, loc.orientation); return true; } else if (!(GetPosition() == loc)) GetMap()->Relocation((GameObject*)this, loc); } else if (!(GetPosition() == loc)) GetMap()->Relocation((GameObject*)this, loc); return false; }
void DynamicObject::OnPersistentAreaAuraEnd() { switch (m_spellId) { case 30632: // Magtheridon - Debris if (Unit* owner = GetCaster()) owner->CastSpell(nullptr, 30631, TRIGGERED_OLD_TRIGGERED, nullptr, nullptr, GetObjectGuid()); break; case 32286: // Shirakk - Focus fire if (Unit* owner = GetCaster()) owner->CastSpell(nullptr, 32301, TRIGGERED_OLD_TRIGGERED, nullptr, nullptr, GetObjectGuid()); break; } }
BOOL RecursiveIsMember(IADsGroup * pADsGroup,LPWSTR pwszMemberGUID,LPWSTR pwszMemberPath, BOOL bVerbose, LPOLESTR pwszUser, LPOLESTR pwszPassword) { HRESULT hr = S_OK; // COM Result Code IADsMembers * pADsMembers = NULL; // Ptr to Members of the IADsGroup BOOL fContinue = TRUE; // Looping Variable IEnumVARIANT * pEnumVariant = NULL; // Ptr to the Enum variant IUnknown * pUnknown = NULL; // IUnknown for getting the ENUM initially VARIANT VariantArray[FETCH_NUM]; // Variant array for temp holding returned data ULONG ulElementsFetched = NULL; // Number of elements retrieved BSTR bsGroupPath = NULL; BOOL bRet = FALSE; if(!pADsGroup || !pwszMemberGUID || !pwszMemberPath) { return FALSE; } // Get the path of the object passed in hr = pADsGroup->get_ADsPath(&bsGroupPath); if (!SUCCEEDED(hr)) return hr; if (bVerbose) { WCHAR pwszOutput[2048]; wsprintf(pwszOutput,L"Checking the Group:\n\n%s\n\n for the member:\n\n%s\n\n",bsGroupPath,pwszMemberPath); PrintBanner(pwszOutput); } // Get an interface pointer to the IADsCollection of members hr = pADsGroup->Members(&pADsMembers); if (SUCCEEDED(hr)) { // Query the IADsCollection of members for a new ENUM Interface // Be aware that the enum comes back as an IUnknown * hr = pADsMembers->get__NewEnum(&pUnknown); if (SUCCEEDED(hr)) { // QI the IUnknown * for an IEnumVARIANT interface hr = pUnknown->QueryInterface(IID_IEnumVARIANT, (void **)&pEnumVariant); if (SUCCEEDED(hr)) { // While have not hit errors or end of data.... while (fContinue) { ulElementsFetched = 0; // Get a "batch" number of group members-number of rows specified by FETCH_NUM hr = ADsEnumerateNext(pEnumVariant, FETCH_NUM, VariantArray, &ulElementsFetched); if (ulElementsFetched ) { // Loop through the current batch-printing the path for each member. for (ULONG i = 0; i < ulElementsFetched; i++ ) { IDispatch * pDispatch = NULL; // ptr for holding dispath of element BSTR bstrCurrentPath = NULL; // Holds path of object BSTR bstrGuidCurrent = NULL; // Holds path of object IDirectoryObject * pIDOCurrent = NULL;// Holds the current object // Get the dispatch ptr for the variant pDispatch = VariantArray[i].pdispVal; // assert(HAS_BIT_STYLE(VariantArray[i].vt,VT_DISPATCH)); // Get the IADs interface for the "member" of this group hr = pDispatch->QueryInterface(IID_IDirectoryObject, (VOID **) &pIDOCurrent ) ; if (SUCCEEDED(hr)) { // Get the GUID for the current object hr = GetObjectGuid(pIDOCurrent,bstrGuidCurrent); if (FAILED(hr)) return hr; IADs * pIADsCurrent = NULL; // Retrieve the IADs Interface for the current object hr = pIDOCurrent->QueryInterface(IID_IADs,(void**)&pIADsCurrent); if (FAILED(hr)) return hr; // Get the ADsPath property for this member hr = pIADsCurrent->get_ADsPath(&bstrCurrentPath); if (SUCCEEDED(hr)) { if (bVerbose) wprintf(L"Comparing:\n\n%s\nWITH:\n%s\n\n",bstrGuidCurrent,pwszMemberGUID); // Verify that the member of this group is Equal to passed. if (_wcsicmp(bstrGuidCurrent,pwszMemberGUID)==0) { if (bVerbose) wprintf(L"!!!!!Object:\n\n%s\n\nIs a member of\n\n%s\n\n",pwszMemberPath,bstrGuidCurrent); bRet = TRUE; break; } else // Otherwise, bind to this and see if it is a group. { // If is it a group then the QI to IADsGroup succeeds IADsGroup * pIADsGroupAsMember = NULL; if (pwszUser) hr = ADsOpenObject( bstrCurrentPath, pwszUser, pwszPassword, ADS_SECURE_AUTHENTICATION, IID_IADsGroup, (void**) &pIADsGroupAsMember); else hr = ADsGetObject( bstrCurrentPath, IID_IADsGroup,(void **)&pIADsGroupAsMember); // If bind was completed, then this is a group. if (SUCCEEDED(hr)) { // Recursively call this group to verify this group. BOOL bRetRecurse; bRetRecurse = RecursiveIsMember(pIADsGroupAsMember,pwszMemberGUID,pwszMemberPath,bVerbose,pwszUser ,pwszPassword ); if (bRetRecurse) { bRet = TRUE; break; } pIADsGroupAsMember->Release(); pIADsGroupAsMember = NULL; } } SysFreeString(bstrCurrentPath); bstrCurrentPath = NULL; SysFreeString(bstrGuidCurrent); bstrGuidCurrent = NULL; } // Release pIDOCurrent->Release(); pIDOCurrent = NULL; if (pIADsCurrent) { pIADsCurrent->Release(); pIADsCurrent = NULL; } } } // Clear the variant array. memset(VariantArray, 0, sizeof(VARIANT)*FETCH_NUM); } else fContinue = FALSE; } pEnumVariant->Release(); pEnumVariant = NULL; } pUnknown->Release(); pUnknown = NULL; } pADsMembers ->Release(); pADsMembers = NULL; } // Free the group path if retrieved. if (bsGroupPath) { SysFreeString(bsGroupPath); bsGroupPath = NULL; } return bRet; }
GameObject* InstanceScript::GetGameObject(uint32 type) { return instance->GetGameObject(GetObjectGuid(type)); }
Creature* InstanceScript::GetCreature(uint32 type) { return instance->GetCreature(GetObjectGuid(type)); }
ObjectGuid InstanceScript::GetGuidData(uint32 type) const { return GetObjectGuid(type); }