Moin, ganz einfache Sache.
Gruppenmitglieder, die Anti EXP aktiviert haben, werden aus dem EXP Share der Gruppe ausgeschlossen.
Wie wird der EXP Share berechnet?
Die Basiserfahrungspunkte werden [...] durch die Anzahl der Gruppenmitglieder geteilt und erst dann werden andere Faktoren wie die Bonus-Exp (z.B. bei zwei Mitgliedern +12%) oder die relative Erfahrung (siehe oben) jeweils für jedes Mitglied verrechnet.
Um die Anti EXP Chars auszuschließen muss das FPartyTotaler struct in der char_battle.cpp angepasst werden. Meine Anti EXP Basis, also das System auf dem ich aufbaue, Bitte melden Sie sich an, um diesen Link zu sehen..
- 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
- }
- }
- };
Bei Fragen oder Problemen schreibt hier, ich habe das ganze eben nur kurz mit 2 Partymembern getestet:
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Update: Berechnung vom Gruppen-EXP Buff angepasst. (party.cpp). Der EXP Bonus wird auf Basis der Anzahl Gruppenmitglieder in der Nähe des Leaders ermittelt. Die Tabelle dazu ist in constants.cpp, ich benutze bei mir const int CHN_aiPartyBonusExpPercentByMemberCount[9].
Durch die Anpassung werden die Gruppenmitglieder, die Anti-EXP aktiviert haben aus der Anzahl wieder herausgenommen.
Dadurch wird unterbunden, dass man einfach eine volle Gruppe macht, bei 7 Chars EXP deaktiviert und dann den 100% Bonus durch die Gruppe bekommt.
- int CParty::ComputePartyBonusExpPercent()
- {
- if (GetNearMemberCount() <= 1)
- return 0;
- LPCHARACTER leader = GetLeaderCharacter();
- int iBonusPartyExpFromItem = 0;
- // UPGRADE_PARTY_BONUS
- int iMemberCount=MIN(8, GetNearMemberCount());
- #ifdef ANTIEXP_GROUP_EX
- //reduce member count for exp bonus when members have anti-exp enabled and are in range
- 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];
- // END_OF_UPGRADE_PARTY_BONUS
- }