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_order | rows |
|---|
| all | 297 |
cash ≠ 0 | 0 |
temp_cash ≠ 0 | 297 |
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
- Keep a kill and death count per character, and send them in 0D/7C.
- Send
temp_cash changes as 0B/0F. - Add the daily conversion, and send 0B/0B and 0B/0F after it.
- 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
- Kill a player of another race (level 40 or above, so the window updates).
- 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. - 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.