示例#1
0
void Group::UpdateAllOutOfRangePlayersFor(Player * pPlayer)
{
	WorldPacket data(150);
	WorldPacket data2(150);

	/* tell the other players about us */
	UpdateOutOfRangePlayer(pPlayer, GROUP_UPDATE_TYPE_FULL_CREATE, true, &data2);

	/* tell us any other players we don't know about */
	Player * plr;
	for(uint32 i = 0; i < m_SubGroupCount; ++i)
	{
		for(GroupMembersSet::iterator itr = m_SubGroups[i]->GetGroupMembersBegin(); itr != m_SubGroups[i]->GetGroupMembersEnd(); ++itr)
		{
			plr = *itr;
			if(plr == pPlayer) continue;

			if(!plr->IsVisible(pPlayer))
			{
				UpdateOutOfRangePlayer(plr, GROUP_UPDATE_TYPE_FULL_CREATE, false, &data);
				pPlayer->GetSession()->SendPacket(&data);
			}
		}
	}
}
示例#2
0
void Group::HandleUpdateFieldChange(uint32 Index, Player * pPlayer)
{
	uint32 Flags = 0;
	switch(Index)
	{
	case UNIT_FIELD_HEALTH:
		Flags = GROUP_UPDATE_FLAG_HEALTH;
		break;
		
	case UNIT_FIELD_MAXHEALTH:
		Flags = GROUP_UPDATE_FLAG_MAXHEALTH;
		break;

	case UNIT_FIELD_POWER1:
	case UNIT_FIELD_POWER2:
	case UNIT_FIELD_POWER3:
	case UNIT_FIELD_POWER4:
		Flags = GROUP_UPDATE_FLAG_POWER;
		break;

	case UNIT_FIELD_MAXPOWER1:
	case UNIT_FIELD_MAXPOWER2:
	case UNIT_FIELD_MAXPOWER3:
	case UNIT_FIELD_MAXPOWER4:
		Flags = GROUP_UPDATE_FLAG_MAXPOWER;
		break;

	case UNIT_FIELD_LEVEL:
		Flags = GROUP_UPDATE_FLAG_LEVEL;
		break;
	}

	if(Flags)
		UpdateOutOfRangePlayer(pPlayer, Flags, true, 0);
}
示例#3
0
void Group::HandlePartialChange(uint32 Type, Player * pPlayer)
{
	uint32 Flags = 0;
	switch(Type)
	{
	case PARTY_UPDATE_FLAG_POSITION:
		Flags = GROUP_UPDATE_FLAG_POSITION;
		break;

	case PARTY_UPDATE_FLAG_ZONEID:
		Flags = GROUP_UPDATE_FLAG_ZONEID;
		break;
	}

	if(Flags)
		UpdateOutOfRangePlayer(pPlayer, Flags, true, 0);
}
示例#4
0
void Group::HandleUpdateFieldChange(uint32 Index, Player* pPlayer)
{
	uint32 Flags = 0;
	switch(Index)
	{
		case UNIT_FIELD_HEALTH:
			Flags = GROUP_UPDATE_FLAG_HEALTH;
			break;

		case UNIT_FIELD_MAXHEALTH:
			Flags = GROUP_UPDATE_FLAG_MAXHEALTH;
			break;

		case UNIT_FIELD_POWER1:
		case UNIT_FIELD_POWER2:
		case UNIT_FIELD_POWER3:
		case UNIT_FIELD_POWER4:
		case UNIT_FIELD_POWER7:
			Flags = GROUP_UPDATE_FLAG_POWER;
			break;

		case UNIT_FIELD_MAXPOWER1:
		case UNIT_FIELD_MAXPOWER2:
		case UNIT_FIELD_MAXPOWER3:
		case UNIT_FIELD_MAXPOWER4:
		case UNIT_FIELD_MAXPOWER7:
			Flags = GROUP_UPDATE_FLAG_MAXPOWER;
			break;

		case UNIT_FIELD_LEVEL:
			Flags = GROUP_UPDATE_FLAG_LEVEL;
			break;
		default:
			break;
	}

	if(Flags != 0)
	{
		m_groupLock.Acquire();
		UpdateOutOfRangePlayer(pPlayer, Flags, true, 0);
		m_groupLock.Release();
	}
}
示例#5
0
文件: Group.cpp 项目: vata/wowice
void Group::UpdateAllOutOfRangePlayersFor(Player * pPlayer)
{
	WorldPacket data(150);
	WorldPacket data2(150);

	if(m_SubGroupCount>8)
		return;

	/* tell the other players about us */
	UpdateOutOfRangePlayer(pPlayer, GROUP_UPDATE_TYPE_FULL_CREATE, true, &data2);

	/* tell us any other players we don't know about */
	Player * plr;
	bool u1, u2;
	UpdateMask myMask;
	myMask.SetCount(PLAYER_END);
	UpdateMask hisMask;
	hisMask.SetCount(PLAYER_END);

	m_groupLock.Acquire();
	for(uint32 i = 0; i < m_SubGroupCount; ++i)
	{
		if(m_SubGroups[i]== NULL)
			continue;

		for(GroupMembersSet::iterator itr = m_SubGroups[i]->GetGroupMembersBegin(); itr != m_SubGroups[i]->GetGroupMembersEnd(); ++itr)
		{
			plr = (*itr)->m_loggedInPlayer;
			if(!plr || plr == pPlayer) continue;

			if(!plr->IsVisible(pPlayer->GetGUID()))
			{
				UpdateOutOfRangePlayer(plr, GROUP_UPDATE_TYPE_FULL_CREATE, false, &data);
				pPlayer->GetSession()->SendPacket(&data);
			}
			else
			{
				if(pPlayer->GetSubGroup() == plr->GetSubGroup())
				{
					/* distribute quest fields to other players */
					hisMask.Clear();
					myMask.Clear();
					u1 = u2 = false;
					for(uint32 j = PLAYER_QUEST_LOG_1_1; j <= PLAYER_QUEST_LOG_25_5; ++j)
					{
						if(plr->GetUInt32Value(j))
						{
							hisMask.SetBit(j);
							u1 = true;
						}

						if(pPlayer->GetUInt32Value(j))
						{
							u2 = true;
							myMask.SetBit(j);
						}
					}

					if(u1)
					{
						data.clear();
						plr->BuildValuesUpdateBlockForPlayer(&data, &hisMask);
						pPlayer->PushUpdateData(&data, 1);
					}

					if(u2)
					{
						data.clear();
						pPlayer->BuildValuesUpdateBlockForPlayer(&data, &myMask);
						plr->PushUpdateData(&data, 1);
					}
				}
			}
		}
	}

	m_groupLock.Release();
}