void Group::SendLootUpdates( Object *o ){ // Build the actual update. ByteBuffer buf( 500 ); uint32 Flags = o->GetUInt32Value( UNIT_DYNAMIC_FLAGS ); Flags |= U_DYN_FLAG_LOOTABLE; Flags |= U_DYN_FLAG_TAPPED_BY_PLAYER; o->BuildFieldUpdatePacket( &buf, UNIT_DYNAMIC_FLAGS, Flags ); Lock(); switch( m_LootMethod ){ case PARTY_LOOT_RR: case PARTY_LOOT_FFA: case PARTY_LOOT_GROUP: case PARTY_LOOT_NBG:{ SubGroup *sGrp = NULL; GroupMembersSet::iterator itr2; for( uint32 Index = 0; Index < GetSubGroupCount(); ++Index ){ sGrp = GetSubGroup( Index ); itr2 = sGrp->GetGroupMembersBegin(); for( ; itr2 != sGrp->GetGroupMembersEnd(); ++itr2 ){ PlayerInfo *p = *itr2; if( p->m_loggedInPlayer != NULL && p->m_loggedInPlayer->IsVisible( o->GetGUID() ) ) // Save updates for non-existent creatures p->m_loggedInPlayer->PushUpdateData( &buf, 1 ); } } break;} case PARTY_LOOT_MASTER:{ Player * pLooter = GetLooter() ? GetLooter()->m_loggedInPlayer : NULL; if( pLooter == NULL ) pLooter = GetLeader()->m_loggedInPlayer; if( pLooter->IsVisible( o->GetGUID() ) ){ Unit *victim = static_cast< Unit* >( o ); victim->Tag( pLooter->GetGUID() ); pLooter->PushUpdateData( &buf, 1 ); } break;} } Unlock(); }
void Group::SendPacketToAllInRange(Player* plr, WorldPacket* packet) { Lock(); for(uint8 i = 0; i < GetSubGroupCount(); ++i) { SubGroup* sg = GetSubGroup(i); for(GroupMembersSet::iterator itr = sg->GetGroupMembersBegin(); itr != sg->GetGroupMembersEnd(); ++itr) { if((*itr)->m_loggedInPlayer && (*itr)->m_loggedInPlayer->GetDistance2dSq(plr) < 80.0f) (*itr)->m_loggedInPlayer->GetSession()->SendPacket(packet); } } Unlock(); }
void Group::SetDungeonDifficulty(uint32 diff){ m_difficulty = static_cast<uint8>( diff ); Lock(); for(uint32 i = 0; i < GetSubGroupCount(); ++i) { for(GroupMembersSet::iterator itr = GetSubGroup(i)->GetGroupMembersBegin(); itr != GetSubGroup(i)->GetGroupMembersEnd(); ++itr) { if((*itr)->m_loggedInPlayer) { (*itr)->m_loggedInPlayer->SetDungeonDifficulty( diff ); (*itr)->m_loggedInPlayer->SendDungeonDifficulty(); } } } Unlock(); }
void Group::UpdateAchievementCriteriaForInrange( Object *o, AchievementCriteriaTypes type, int32 miscvalue1, int32 miscvalue2, uint32 time ){ Lock(); SubGroup *sGrp = NULL; GroupMembersSet::iterator itr2; for( uint32 Index = 0; Index < GetSubGroupCount(); ++Index ){ sGrp = GetSubGroup( Index ); itr2 = sGrp->GetGroupMembersBegin(); for( ; itr2 != sGrp->GetGroupMembersEnd(); ++itr2 ){ PlayerInfo *p = *itr2; if( p->m_loggedInPlayer != NULL && p->m_loggedInPlayer->IsVisible( o->GetGUID() ) ) p->m_loggedInPlayer->GetAchievementMgr().UpdateAchievementCriteria( type, miscvalue1, miscvalue2, time ); } } Unlock(); }