Example #1
0
CPartyDefinePacket::CPartyDefinePacket(CParty* PParty) 
{
	this->type = 0xC8;
	this->size = 0x7C;

	//party is an alliance do the double loop
	if (PParty != NULL)
	{
		if (PParty->m_PAlliance!= NULL)
		{
            uint8 offset = 0;
            
			for (uint8 a = 0; a < PParty->m_PAlliance->partyList.size(); ++a)
			{
				for (uint8 i = 0; i < PParty->m_PAlliance->partyList.at(a)->members.size(); ++i) 
				{
					CBattleEntity* PChar = PParty->m_PAlliance->partyList.at(a)->members.at(i);
                    
					WBUFL(data,12*offset+(0x08)-4) = PChar->id;
					WBUFW(data,12*offset+(0x0C)-4) = PChar->targid;
                    WBUFW(data,12*offset+(0x0E)-4) = PChar->PParty->GetMemberFlags(PChar);
					WBUFW(data,12*offset+(0x10)-4) = PChar->getZone();
                    
					offset++;
				}
			}
		}
        else //regular party
        {
			DSP_DEBUG_BREAK_IF(PParty->members.size() > 6);

			for (uint8 i = 0; i < PParty->members.size(); ++i) 
			{
				CBattleEntity* PChar = PParty->members.at(i);

				WBUFL(data,12*i+(0x08)-4) = PChar->id;
				WBUFW(data,12*i+(0x0C)-4) = PChar->targid;
				WBUFW(data,12*i+(0x0E)-4) = PChar->PParty->GetMemberFlags(PChar);
				WBUFW(data,12*i+(0x10)-4) = PChar->getZone();
			}
        }
	}
}
Example #2
0
CBattleEntity* CEnmityContainer::GetHighestEnmity()
{
    if (m_EnmityList.empty())
    {
        return nullptr;
    }
    uint32 HighestEnmity = 0;
    auto highest = m_EnmityList.end();
    bool active = false;

    for (auto it = m_EnmityList.begin(); it != m_EnmityList.end(); ++it)
    {
        const EnmityObject_t& PEnmityObject = it->second;
        uint32 Enmity = PEnmityObject.CE + PEnmityObject.VE;

        if (Enmity >= HighestEnmity && ((PEnmityObject.active == active) || (PEnmityObject.active && !active)))
        {
            auto POwner = PEnmityObject.PEnmityOwner;
            if (!POwner || (POwner->allegiance != m_EnmityHolder->allegiance))
            {
                active = PEnmityObject.active;
                HighestEnmity = Enmity;
                highest = it;
            }
        }
    }
    CBattleEntity* PEntity = nullptr;
    if (highest != m_EnmityList.end())
    {
        PEntity = highest->second.PEnmityOwner;
        if (!PEntity)
        {
            PEntity = zoneutils::GetChar(highest->first);
        }
        if (!PEntity || PEntity->getZone() != m_EnmityHolder->getZone() ||
            PEntity->PInstance != m_EnmityHolder->PInstance)
        {
            m_EnmityList.erase(highest);
            PEntity = GetHighestEnmity();
        }

    }
    return PEntity;
}