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
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 handler0x5a67e0(CNetMsgProcessor_Event) loads the u32, divides it by the float1e6at0xad230c, and calls the avatar's exp-percent setter0x41b1e0, which stores the result at+0x5de4. - 03/04
base_download_result_zocl: the handler (0x56bea0, at0x56cb57) does the same with the float1e6at0xab37b0. - The field holds a percentage. The client's other setter for it,
0x41b290, works out the value from raw EXP itself and storesexp / need × 100.0(fmul qword [0xaa9b88], the double 100.0) at the same+0x5de4. - The gauge works in percent too.
0x41b1e0passes(100.0, value)to the EXP gauge (0x66ac40→0x66ccb0). The gauge fills tovalue / 100.0and printsvalueas the % text, capped at 99.99.
the client expects u32 = percent × 1,000,000, which is exp / need × 100,000,000.
History
-
cybercyber