← All scenarios
STATUS-002resolveStatsOnly

Same buff applied twice — refresh policy resets duration but does NOT double the effect

When the same Effect is applied to an Actor that already has it active, with stackingPolicy='refresh', the duration restarts but Modifiers do NOT double. Tests that the library de-duplicates by Effect ID, not by Modifier identity.

stackingPolicyrefreshPolicynoDoubleApplication
Action
resolveStatsOnly
Stat resolution only — no damage computation

Actors

Player after second Blessing cast
player · knight · Lv60
attacker
Primary stats
str
60
agi
30
vit
50
int
5
dex
25
luk
10
Active effects
  • blessing_lv10(3 modifiers)
Expected output
From the scenario fixture. Numerical values marked as null are placeholders pending rAthena verification.

STR is 70 (+10), not 80. Even if the caller applied Blessing twice in succession, the activeEffects array should contain ONE entry with refreshed appliedAtTick. The resolveStats function reads the single entry once.

Show full expected JSON
{
  "resolvedPrimaries": {
    "str": 70,
    "agi": 30,
    "vit": 50,
    "int": 15,
    "dex": 35,
    "luk": 10
  },
  "_dedupResponsibility": "It's the caller's responsibility to enforce stacking policy when applying an Effect; the library trusts the activeEffects array as canonical."
}

Computed: ResolvedStats

Server-evaluated by resolveStats() from @ro/core.

Resolved primaries
After stat.* modifiers (D-005)
StatBaseResolvedΔ
STR6070+10
AGI30300
VIT50500
INT515+10
DEX2535+10
LUK10100
Combat secondaries
D-007
HIT98
FLEE92
Perfect Dodge1
CRIT4%
Crit damage2.00×
ASPDbase stubbed at 0156.00
MaxHP / MaxSPjob tables pending0 / 0
Physical ATK components
D-003
StatusATK159
WeaponATKPhase 3+0
EquipATK0
MasteryATK0
ATK%0.0%
Magical MATK components
D-007
StatusMATK40
WeaponMATKPhase 3+0
EquipMATK0
MATK%0.0%
Defenses
D-004
Hard DEF0
Soft DEF87
Hard MDEF0
Soft MDEF40
Conditional buckets
Pre-summed defender-keyed bonuses + deferred modifiers

No defender-keyed bonuses active.

Pending conditional modifiers: 0