Old School Ops

RF455-035 RF 4.55: the EXP bar never passes 1% because the server sends EXP as a fraction and the client expects a percentage

Game server RF Online: Dragonborn v0.2.0 normal · filed by cybercyber 23h ago
New

Game: RF 4.55 (Dragonborn), server v0.2.0, Windows build

Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (2025-07-16), Language=Taiwan.

Summary

  • Characters gain EXP and level up normally, but the EXP bar stays almost empty, and the % text next to it reads "0.xx%".
  • The server sends the EXP rate as (EXP this level ÷ EXP needed) × 1,000,000, which is a fraction in millionths.
  • The client reads that value as a percentage in millionths: it divides by 1,000,000 and treats the result as 0–100.
  • So every value comes out 100 times too small. The bar can never get past 1%.
  • Example: a level-19 character with 505,261 of the 906,353 EXP the level needs is at 55.7%. The server sends 557,469, and the client shows 0.56%.

Client side

  • 0B/04 exp_alter_zocl: the handler 0x5a67e0 (CNetMsgProcessor_Event) loads the u32, divides it by the float 1e6 at 0xad230c, and calls the avatar's exp-percent setter 0x41b1e0, which stores the result at +0x5de4.
  • 03/04 base_download_result_zocl: the handler (0x56bea0, at 0x56cb57) does the same with the float 1e6 at 0xab37b0.
  • The field holds a percentage. The client's other setter for it, 0x41b290, works out the value from raw EXP itself and stores exp / need × 100.0 (fmul qword [0xaa9b88], the double 100.0) at the same +0x5de4.
  • The gauge works in percent too. 0x41b1e0 passes (100.0, value) to the EXP gauge (0x66ac40 → 0x66ccb0). The gauge fills to value / 100.0 and prints value as the % text, capped at 99.99.

the client expects u32 = percent × 1,000,000, which is exp / need × 100,000,000.

Reported on version 0.2.0

History

  • cybercyber filed it · 23h ago

Replies

Nobody has replied yet.

Sign in to comment.

Loading…
Open the full search page