Old School Ops

RF455-067 RF 4.55 : PvP window's KILL/DEATH are always 0, kill points show as certain points, and temporary points never convert

Game server RF Online: Dragonborn v0.3.1 low · filed by cybercyber
Fixed

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

Summary

After killing players of another race, the PvP view window shows:

  • KILL 0 and DEATH 0, always: the server never counts them;
  • Temporary Point 0, while Certain Point shows the temporary total: the server sends temporary points in the certain-points message;
  • and the temporary points never become certain points: no code does the daily conversion the client describes.

A fourth, smaller issue: the chip-war kill_point / pvp_point counters are never added to.

How each part is known:

  • Server side: read in the stock v0.3.1 gameserver.exe (with a Go symbol disassembler).
  • Client side: read in RF_Online.bin (message handlers and the window's setup code).
  • Data: our server's gommo_rf455.db and history.log, 2026-10-11.
  • What the window showed: the user's report (kill count 0). Not captured as a screenshot.

1. KILL and DEATH are always 0 (read)

The client's 0D/7C pvp_order_view_inform (handler 0x58e040) is:

u32 kill, u32 death, double contribution variation, double current contribution

It prints "PVP KILL", "PVP DEATH", "Contribution Point variation" and "Current Contribution Point". At level ≥ 40 it also puts kill and death in the PvP view window (the KILL: and DEATH: lines).

The server sends 0D/7C from two places:

  • awardPvpPoint (0x140900720). It zeroes both u32s, then writes the variation and the total:
1409007d4: movups xmmword ptr [rsp + 0x40], xmm15   ; kill, death = 0
1409007da: movups xmmword ptr [rsp + 0x48], xmm15
1409007e1: movsd  qword ptr [rsp + 0x48], xmm0      ; pvp_point - client+0x838 (session start)
1409007e8: movsd  qword ptr [rsp + 0x50], xmm2      ; pvp_point
  • sendCreateCompleteInforms, at login: all zero but the total.

found no kill or death counter in the server, in memory or in the database.

2. Temporary points are sent as certain points (read)

  • In the client, 0B/0B alter_pvp_cash_zocl (0x5a7210) sets the Certain Point line, and 0B/0F alter_pvp_temp_cash_zocl (0x5a72d0) sets the Temporary Point line. (The window code puts each value right after its label: "Temporary Point:", then "Certain Point:".)
  • calcPvpCash (0x1408f1180) sends each side its new temp_cash as 0B/0B: the victim at 0x1408f1f25, the killer at 0x1408f2047. Body: double temp_cash, u8 0.
  • No code in the server sends 0B/0F. (spendTaliksForCash also sends 0B/0B, with the certain points; that one is right.)

3. Temporary points never become certain points (read)

The client's text (NDLanguage 5653) says: "Slaughter Point can be earned by killing other races. Acquired point will be reserved temporary and will be converted to actual point at 00:00 daily."

  • character_pvp_order is written only by calcPvpCash and spendTaliksForCash. PvpOrderOf is a plain SELECT cash, temp_cash, …, with no date check.
  • No timer or login path moves temp_cash into cash.

Our database on 2026-10-11 (rows dated 2026-10-09 23:43 to 2026-10-11 22:18, so two midnights have passed):

character_pvp_orderrows
all297
cash ≠ 00
temp_cash ≠ 0297

4. Chip-war kill and PvP points are never counted (read)

The HSK map on chipWarSystem (+0x1a8; entry: u8 quest code, i32 pvp point, u16 kill point, u8 mental count) has only three writers:

  • putHSK (loading from the DB);
  • onSceneBattleLocked (0x1407b31a2: all zero at battle start);
  • checkHolyMasterLocked (quest code 100).

Nothing adds to kill_point or pvp_point on a kill. All 173 character_holystone rows are 0. What the original game counted there is inferred from the column names.

Expected

Inferred from the client's handlers and texts; not checked against the original game.

  • KILL and DEATH count the kills and deaths (we don't know if the original counted per session, per day or in total).
  • A kill's temporary points arrive as 0B/0F. 0B/0B carries the certain points.
  • At 00:00 each character's temporary points move into certain points. (Negative temporary points, after deaths: we don't know whether they subtract.)

Suggested fix

  1. Keep a kill and death count per character, and send them in 0D/7C.
  2. Send temp_cash changes as 0B/0F.
  3. Add the daily conversion, and send 0B/0B and 0B/0F after it.
  4. Add to the HSK kill and PvP points on a kill during the battle, if that is what they are for.

How to reproduce in game

  1. Kill a player of another race (level 40 or above, so the window updates).
  2. Open the PvP view window. KILL and DEATH stay 0. Temporary Point stays 0, and Certain Point shows the temporary total from character_pvp_order.temp_cash.
  3. Wait past 00:00 and log in again. cash is still 0.

From our server: the user's character (serial 3162) killed 48 players on Sette (map 11) between 22:17:35 and 22:21:08 on 2026-10-11. All 48 are in history.log (pvp kill {"session": 1, "killer": 3162, …}) and in pvp_kill_log. Its row afterwards: cash 0, temp_cash 162.

What we do locally (not a fix)

Two server byte patches:

  • Kill and death counts: two u32 counters in the zeroed slack after the client object (+0xEA8, +0xEAC), increased in onPlayerKilled and sent by awardPvpPoint. They count per session and reset at relog.
  • 0B/0F: the two calcPvpCash headers changed from 0B/0B to 0B/0F.

The daily conversion isn't patched.

Where to look

  • Server (v0.3.1):
    • onPlayerKilled 0x1408efc40, calcPvP 0x1408f0320, awardPvpPoint 0x140900720, sendCreateCompleteInforms;
    • calcPvpCash 0x1408f1180, spendTaliksForCash, character.(*Repository).PvpOrderOf 0x140637be0;
    • chipWarSystem.putHSK 0x1407b7120, onSceneBattleLocked 0x1407b2e40, checkHolyMasterLocked 0x1407b4460.
  • Client: 0x58e040 (0D/7C), 0x5a7210 (0B/0B), 0x5a72d0 (0B/0F); window setters 0x76f7b0, 0x76f800, 0x76f850, 0x76f8d0.
Reported on version 0.3.1

Replies 1

OSO AI Staff
59m ago

Reported: The PvP window's KILL and DEATH always show 0. Kill points appear as certain points while temporary points stay 0. Temporary points never become certain points, and the chip-war kill and PvP points never count.

Found: All four are as described. The server kept no kill or death count, sent temporary points in the certain-points message, had no daily conversion, and never added to the chip-war counters.

Fix: in the next RF 4.55 update:

  • KILL and DEATH count the day's kills of, and deaths to, players of another race, and reset when the day changes, as on the original server.
  • Points from a kill arrive as temporary points; certain points show only certain points.
  • At 00:00 each character's temporary points are added to certain points, negative ones included, as on the original server. A character offline at midnight is converted at its next login.
  • Recovering talik now repays point debt from certain points, as on the original server.
  • During a chip war, a player holding a Holystone quest on the stone's map gains a kill point for each player kill, and PvP points from each gain in certain points.

Also affected: RF Golden Age and RF 4.15 had the same gaps and are fixed in their next updates. This also explains the "points reset to a fixed value" item in RF455-065.

Sign in to comment.

Top xp sources

How xp works
Loading…

Open the full search page