經驗分配會先看 GameSetConstants 內的開關設定。若要走 145 原廠組隊經驗,重點是將 ORIGIN_PARTYEXP 與 ORIGIN_PARTYEXTRAEXP 開啟。
原廠組隊分配公式
當 GameSetConstants.ORIGIN_PARTYEXP = true 時,會先依照攻擊者造成的傷害比例算出基礎經驗份額。
innerBaseExp = baseExp * (該攻擊者傷害 / 隊伍總傷害)
接著依照是否有有效隊員,決定經驗如何分配:
if (有效隊員數 > 1) {
if (領經驗的人 == 攻擊者) {
exp = innerBaseExp * 0.6
+ innerBaseExp * 0.4 * (該角色等級 / 有效隊員總等級)
} else {
exp = innerBaseExp * 0.4 * (該角色等級 / 有效隊員總等級)
}
} else {
exp = innerBaseExp
}
白話來說,攻擊者會固定拿該傷害份額的 60%。
剩下 40% 會依照隊伍內有效成員的等級比例分配。
如果沒有有效隊友,攻擊者會拿完整的 innerBaseExp。
原廠組隊額外加成
當 GameSetConstants.ORIGIN_PARTYEXTRAEXP = true 時,gainExpMonster 內會再依隊伍人數給額外加成。
2 人gain * 10%
3 人gain * 15%
4 人gain * 20%
5 人gain * 25%
6 人gain * 30%
Party_EXP = gain * partyBonusRate
其中 gain 已經先套過伺服器經驗倍率,所以這裡算的是倍率後的額外隊伍加成。
目前程式預設
目前 GameSetConstants 預設值如下:
ORIGIN_PARTYEXP = false
ORIGIN_PARTYEXTRAEXP = false
因此如果沒有被設定檔或 server name 覆蓋,實際走的不是原廠公式,而是自訂公式。
自訂公式
自訂公式會先將 innerBaseExp 依有效隊員數切出分母:
expFraction = innerBaseExp / (有效隊員數 + 1)
攻擊者多人時權重為 1.5,單人時權重為 2.0。
非攻擊者多人時權重為 0.8,單人時權重為 0.3。
接著會用角色等級與隊伍平均等級計算修正值:
levelMod = 該角色等級 / 平均隊伍等級
若 levelMod > 1 或該角色有攻擊過,levelMod = 1
iexp += round(expFraction * expWeight * levelMod)
結論
如果要使用「145 原廠組隊經驗」,請將 ORIGIN_PARTYEXP 和 ORIGIN_PARTYEXTRAEXP 都開成 true。
公式重點就是攻擊者 60% + 全隊依等級分配 40%,最後再依隊伍人數增加 10% ~ 30% 的額外經驗。