Old School Ops

RF455-052 RF 4.55: some skill and force buffs are applied and shown but still change nothing (Precision, cooldown buffs, max HP/FP, DoTs, procs)

Game server RF Online: Dragonborn v0.2.0 low · filed by cybercyber
Review

Game: RF 4.55 (Dragonborn), server v0.2.0, Windows build (stock gameserver.exe, SHA-256 96452fbd…). Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (2025-07-16), Language=Taiwan.

Symptom

A timed skill or force always seems to work: the server logs "continuous effect applied", and the client shows the icon and timer. For the effects below nothing else changes. Example: Ranger Precision (AF00D, "increasing the accuracy of ranged attacks") gives no extra hits.

How buffs reach the game

(*client).combatEPLocked sums every live affect by (m_nContParamCode, m_nContParamIndex) into one struct: rate[62] (code 0), plus[42] (code 1), state[40] (code 2). The sums are right; a slot only matters if some function reads it. The readers below were found statically (every caller of combatEP / combatEPLocked / effRateBonus, their field reads, and indexed reads such as genRateIndex and elementTol).

Already working in v0.2.0

rate[0], rate[1..3] and the launcher row by weapon (genRateIndex), rate[4], rate[6], rate[14..16], rate[21..29] (rate[25..28] are the element attack rates in elementTol), rate[31..33] (attack/defence: the Archon wave skills, Howl of hero), rate[35] (PT), rate[34]/[36]/[37]/[38] (EXP, drop, mining), rate[41..44], rate[57..61], the elemental resists plus[15..18] (elementTol), plus[0], plus[3], plus[14], plus[19], plus[21], plus[22], plus[25], plus[28], plus[29], plus[37..39], plus[41], state[5], [10], [11], [15..17], [26].

Still never read

Slot(s)Meaning (from the data descriptions)Examples
plus[1], plus[30], plus[31]ranged hit rate (命中率 "when using ranged weapons"), extra hit ratePrecision, Strong, PreciseStriking, Celerity (part), SageForce
plus[12], plus[13]skill / force cooldownQuickCharge, QuickAttack, JudiciousBrain, Approaching
rate[9..11]max HP / FP / SPwave skills, Blood Capture
rate[7], rate[12..13]FP cost, damage → FPEffective Consume, Absorption
rate[18..20]regen downMentalAssault, Bleeding
plus[27]counter attackConcession
plus[32], plus[34]damage over time (nothing ticks)Hell Bless, RageBlow
state[9], state[12], state[13]on-hit stun / ignore defenceWinning Hit, Resist, Fainting

The hit roll. (*Server).rollsHit 0x1407b94a0 reads only plus[0] (struct offset 0x1f0): the melee hit-rate slot serves bows and guns too, and the ranged slot plus[1] is never used.

Cooldowns. (*client).sfCastBlocked 0x1408dbac0 and setSFDelay 0x1408dbd80 (via castOnDelay and armCastDelay) never call combatEP, so they use the table delay. The client does apply plus[12..13] to its own timer, so with QuickCharge on, the client's cooldown ends before the server's and early casts are refused.

Suggested fix

  • rollsHit: use plus[1] (plus plus[30..31]) for ranged weapons, as the client does.
  • sfCastBlocked / setSFDelay: apply plus[12..13].
  • Read rate[9..11] in max HP/FP/SP, rate[7] in FP cost, rate[12..13] in damage → FP, rate[18..20] in regen.
  • A DoT tick for plus[32..34], and the on-hit state[9/12/13] procs and plus[27] counter.

How to reproduce

  • Bow or gun on a monster 3–5 levels above you (hit chance under the 100% cap): Precision doesn't change the hit rate; Accurate (+10% on plus[0]) does.
  • Cast QuickCharge, then recast a skill as soon as the client allows it: the server refuses it.
Reported on version 0.2.0

Replies 1

OSO AI Staff
14h ago

Reported: some timed skills and forces apply and show their icon and timer but change nothing: Precision gives no extra hits with a bow or gun, cooldown buffs such as QuickCharge do not shorten the server's cooldown, and max HP/FP/SP, FP cost, damage absorb, recovery, damage-over-time and on-hit buffs have no effect.

Found: the server added every active buff into the character's stats correctly, but several parts of the game never looked at those stats. We traced each one to how the original RF server uses it. Three readings differ from the report: the slots read as regen-down scale how much recovery a character receives (potions and absorb), the slots read as damage over time are amounts added or drained on each recovery tick, and Concession's slot is a counter that cancels the incoming swing.

Fix: every effect in the report now does what its description says, except the on-hit stun:

  • the hit roll uses the original game's formula, with the ranged accuracy bonus for bows and guns, the launcher bonus for launchers, and the skill and force accuracy bonuses for skills and forces;
  • cooldown buffs shorten the server's skill and force cooldown to match your client;
  • buffs raise or lower max HP, FP and SP, and the bars drop back when the buff ends;
  • FP cost buffs change what a skill or force costs;
  • absorb buffs return part of the damage dealt as HP or FP, and recovery-reducing debuffs weaken potions and absorb;
  • drain and regeneration effects tick, and a drain never takes HP to a tenth of max or below;
  • Winning Hit always lands a critical, Resist ignores the target's defence, and Concession cancels attacks against you from monsters and players.

Because the hit roll now follows the original, every normal attack can miss (at least 5% of the time), and accuracy depends on mastery and the target's defence skill.

Still not done: the on-hit stun (Fainting), which needs a stun state the server does not have yet, and the reach check and animation of Concession's counter. These ship in the next RF 4.55 update.

Also affected: the Golden Age and Age of Patron servers get the same fix.

To verify:

  • With a bow or gun on a monster a few levels above you, cast Precision: more swings should hit.
  • Cast QuickCharge, then recast a skill as soon as the client allows it: the server should accept it.
  • Cast a max HP buff: the HP bar should grow, and shrink back when the buff ends.

Sign in to comment.

Top xp sources

How xp works
Loading…

Open the full search page