Exemplo n.º 1
0
void PvpInternal::setNeutralMercenaryFaction(CreatureObject &dest, Pvp::FactionId align, Pvp::PvpType pvpType)
{
	// this only applies to neutral
	if (!PvpData::isNeutralFactionId(getAlignedFaction(dest)) && !PvpData::isNeutralFactionId(align))
		return;

	if ((dest.getPvpMercenaryFaction() != align) || (dest.getPvpMercenaryType() != pvpType))
	{
		if (!dest.isAuthoritative())
		{
			forwardPvpMessage(dest, PvpMessages::setMercenaryFaction.getCrc(), NetworkId::cms_invalid, align, pvpType);
			return;
		}

		bool const wasDeclared = (!PvpData::isNeutralFactionId(dest.getPvpMercenaryFaction()) && (dest.getPvpMercenaryType() == PvpType_Declared));

		PvpUpdateObserver o(&dest, Archive::ADOO_generic);

		dest.setPvpMercenaryFaction(align, pvpType);

		bool const isDeclared = (!PvpData::isNeutralFactionId(dest.getPvpMercenaryFaction()) && (dest.getPvpMercenaryType() == PvpType_Declared));

		if (wasDeclared != isDeclared)
			setPermFactionEnemyFlags(dest);
	}
}