Bu uzantı, grup halinde exp kasan oyuncular arasında anti exp özelliğini etkinleştiren varsa bu oyuncuya giden exp akışını durdurarak diğer grup üyelerine dağıtmaktadır.
CommonDefines/Service.h (whatever you use)
#define ANTIEXP_GROUP_EX
char_battle.cpp
struct FPartyTotaler
{
int total;
int member_count;
int x, y;
FPartyTotaler(LPCHARACTER center)
: total(0), member_count(0), x(center->GetX()), y(center->GetY())
{};
void operator () (LPCHARACTER ch)
{
if (DISTANCE_APPROX(ch->GetX() - x, ch->GetY() - y) <= PARTY_DEFAULT_RANGE)
{
#ifdef ANTIEXP_GROUP_EX
if (!ch->block_exp)
{
total += __GetPartyExpNP(ch->GetLevel());
++member_count;
}
#else
total += __GetPartyExpNP(ch->GetLevel());
++member_count;
#endif
}
}
};
party.cpp
int CParty::ComputePartyBonusExpPercent()
{
if (GetNearMemberCount() <= 1)
return 0;
LPCHARACTER leader = GetLeaderCharacter();
int iBonusPartyExpFromItem = 0;
int iMemberCount=MIN(8, GetNearMemberCount());
#ifdef ANTIEXP_GROUP_EX
for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
{
TMember& rMember = it->second;
if (rMember.pCharacter && rMember.pCharacter->block_exp && rMember.bNear)
iMemberCount -= 1;
}
#endif
if (leader && (leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP) || leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_MALL)
|| leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_GIFT) || leader->IsEquipUniqueGroup(10010)))
{
iBonusPartyExpFromItem = 30;
}
return iBonusPartyExpFromItem + CHN_aiPartyBonusExpPercentByMemberCount[iMemberCount];
}