Old School Ops

RF455-062 RF 4.55 v0.3.0: the Honor Guild list is still always empty (RF455-059 follow-up: 1B/6F stub, no 1B/71, no 1B/7A)

Game server RF Online: Dragonborn v0.3.0 low · filed by cybercyber
on Ron Released

Follow-up to [RF455-059Released](https://oldschoolops.com/bugs/RF455-059), which is marked released for v0.3.0.

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

Summary

Thanks for v0.3.0. Two of RF455-059Released's three parts work now: a guild master can buy an emblem (guildManageBuyEmblem, 1B/7B type 3), and guilds get a grade from the new daily guildGradePass. The third part, Honor Guild, is unchanged:

  • The HUD's Honor Guild panel shows "1st None … 5th None" on every server, forever. The guild window's honor board is empty the same way.
  • No one can choose an honor guild, and no player ever shows the "1st"…"5th" tag after their guild name.

All addresses below are from the stock v0.3.0 gameserver.exe (read with a Go symbol disassembler) and the client above. We saw the empty panel in game on v0.3.0.

1. 1B/6F always answers with an empty 1B/70

(*Server).handleGuildHonorList (0x1407c96a0, 160 bytes; registered for 1B/6F in registerClientStateHandlers) calls protocol.GuildHonorListResult (0x14065f480) with a nil slice:

1407c96c6: xor ebx, ebx      ; entries = nil
1407c96c8: xor ecx, ecx      ; len = 0
1407c96ca: mov rdi, rcx      ; cap = 0
1407c96cd: call protocol.GuildHonorListResult

The encoder itself (protocol/guildhonor.go) looks complete. It clamps to 5 entries and writes each 0x38-byte entry: u32 +0, u32 +4 and +8, Go strings at +0x10 and +0x20, u8 +0x30, and u32 +0x34 (0 is replaced by the index). Nothing in the binary stores honor guilds (no table, server_config key or file), so there is nothing to hand it.

2. Nothing sets an honor guild, and nothing tells the members

  • 1B/71 (honor set; the client sends 0x6F bytes, client sender 0x5b618e) has no handler: only 1B/6F is registered among these ids. Neither do 1B/73 (0x5b6309) or 1B/76 (next list, 0x56fec3).
  • No encoder exists for 1B/7A guild_honorguild_mark_zocl {u8 rank, u32 avatar serial, u8 kind}, 1B/72, 1B/75, 1B/77 or 1B/78. The only honor symbol in the protocol package is GuildHonorListResult.

What the client expects (all read from the client)

  • 1B/70 (handler 0x5b5f70): u8 count, then count × 0x3B entries. Per entry it reads: | Offset | Field | |---|---| | 0x05 | u32 emblem back (same u32 as guilds.emblem_back) | | 0x09 | u32 emblem mark | | 0x0D | guild name, char[17] | | 0x1E | guild master name, char[17] (shown as "Guild Master : %s", language string 0xBAE) | | 0x2F | u8, shown as "%d%%" on the guild window's board (we think this is the race tax rate; not checked) | | 0x30 | rank 0–4, read as a u32 (it also indexes a 5-byte array, so the three bytes above must be 0) |

Bytes 0x00–0x04 and 0x34–0x3A are not read. We assume 0x00–0x03 is the guild serial, which matches the encoder's u32 +0. The handler fills each slot on the avatar (0x40b410, avatar +0x4DC4 + rank × 0x34) and pushes it to the guild cache board, the guild window and the HUD (0x40b730). Ranks left out show language string 0x67 "None".

  • 1B/7A (0x5b6ac0) sets the honor tag on that avatar (0x44d860, rank 0–4 = "1st".."5th", 0xFF none). For your own avatar it also prints 0x1B0D "Chosen as an honor guild." / 0x1B0E "No longer an honor guild." / 0x1B0F "Honor guild info updated.".

Expected

  • The patriarch (Archon) of a race chooses up to five honor guilds with 1B/71 (→ 1B/72), as in the original game. The choice is stored per race.
  • 1B/6F returns that race's list in 1B/70.
  • Members of a chosen guild get 1B/7A, and the rank goes out wherever the client reads it (1B/7A, and the honor byte of 03/1F / 03/04), so everyone sees "Genocide 1st" over their heads.
  • A small admin path to set or clear a rank would also help servers with no patriarch elected (an offline server). That could be a GM command or a server_config / table row read at startup.

What we do locally (not a fix)

A client mod fills our own client's panel. It builds a 1B/70 body from our GM tool's honor settings and calls the client's 1B/70 handler. It also sets the honor tag. Only our own client sees it.

Where to look

  • Server: handleGuildHonorList 0x1407c96a0, protocol.GuildHonorListResult 0x14065f480, registerClientStateHandlers 0x1407c7f60 (1B/6F registered at 0x1407c81e7).
  • Client: 1B/70 0x5b5f70, slot setter 0x40b410, slot push 0x40b730, 1B/7A 0x5b6ac0, honor tag 0x44d860; senders 1B/6F 0x56fefb, 1B/71 0x5b618e, 1B/73 0x5b6309, 1B/76 0x56fec3.
Reported on version 0.3.0
❤️ Ron

Replies 3

Ron Administrator
9h ago

Amazing legwork buddy. I appreciate you.

❤️ cybercyber
OSO AI Staff
8h ago

Reported: In RF Online: Dragonborn 0.3.0 the Honor Guild panel and the guild window's honor board show "None" in all five places, no one can choose an honor guild, and no player shows the "1st" to "5th" tag after their guild name.

Found: The report is correct. The server answered every request for the honor list with an empty list and kept no honor guilds. The patriarch's request to set them, the race's guild list and the next honor list all went unanswered, nothing told a guild's members they were an honor guild, and every player was sent with no honor rank.

Fix: in the next RF 4.55 update, following the original game's rules:

  • The patriarch chooses up to five guilds of their race in the Honor Guild window, each in its rank and with its share, and the shares total at most 50%. Anyone else who tries is told only the race leader can. A guild given 0% leaves the list.
  • The choice is the race's next list, which the window shows when the patriarch opens it again, and it takes effect at midnight, as the client says when the patriarch confirms.
  • The window's guild list shows the race's guilds four to a page and can be searched.
  • At midnight the new list goes to every player of the race, and the HUD panel and the guild window's board show each guild's emblem, name and guild master. Members of a chosen guild are told and carry the "1st" to "5th" tag after the guild name, seen by everyone around them. Members of a guild that leaves the list are told and lose the tag.
  • A player who logs in, joins a guild or leaves one later gets the right tag, a guild that disbands leaves the list, and the lists are kept across restarts.
  • A GM command, %honorguild, reports the lists, sets or clears a rank at once and applies the waiting choices, for a server with no patriarch elected.

The share each guild is given is shown on the board. It pays nothing on this server, because the auction house here charges a fixed tax that no one receives.

Also affected: the Golden Age, Age of Patron and RF Online 1.5 servers get the same change, each built on its own client's messages. The Golden Age and Age of Patron clients' Honor Guild window sends no guild names, so on those two a GM chooses the honor guilds with %honorguild.

To verify: on a 4.55 server, on a character that is the patriarch (a GM can make one with %race boss 0):

  • Open the Honor Guild window, put a guild of your race in the 1st slot with a share, and confirm. The window should say the setting request succeeded.
  • Run %honorguild apply, or wait until midnight. The HUD panel should show that guild in 1st, and a member of it should be told and show "1st" after the guild name, to themselves and to another player standing nearby.
  • Have that member leave the guild. The tag should go.
OSO AI Staff
3h ago

Fix: released in RF Online: Dragonborn 0.3.1, available now on the download page. The Honor Guild window, the midnight changeover, the "1st" to "5th" tags and %honorguild work as described in the reply above.

If any of the three checks under To verify fails on 0.3.1, please file a new report naming it.

This report is Released, so only staff can reply. If the problem is back, file a new report.

Top xp sources

How xp works
Loading…

Open the full search page