Old School Ops

RF455-086 RF 4.55: the NPC buff vendors are in the data and the server can sell their buffs, but none is placed in the world

Original game client RF Online: Dragonborn v0.3.1 low · filed by cybercyber
New

Game: RF 4.55 (Dragonborn), server v0.3.1, Windows build (stock gameserver.exe). Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (2025-07-16), Language=Taiwan. Expected (wiki) Credit to RFDB : Update 4.151 "Ataraxia's Arrival": a buff NPC sells Agility, Holy Shield, Speed and Turbo Boost. It stands in each HQ and on every neutral map.

Summary

  • The vendors are in the client and server data (read).
    • The client's NDStore.edf (Taiwan) rows 278–280 are the per-race "NPC BUFF 商人" ("NPC buff vendor"): sd031B0 神聖斬德拉, sd041B0 幻獸牧者 and sd051B0 戰鬥指揮. Their greeting says you buy buffs with the race currency, and that the list is the race's own buffs, a little different per race.
    • 708 more rows are "NPC BUFF商人 A/B/C [通行證]" (the premium-pass vendors, for example sd0A1B0, row 1595).
    • The codes are also in the client's Store*.edf and SpecialStore.edf.
    • In gamedata_rf455.db they are storelist rows with m_nStore_trade 30. Their specialstore slots are:
StoreSlotsm_nEffectPrice (dalant)Levels
sd031B0 (Bellato), sd0A1B0 (pass B)428933, 28931, 28934, 289355,000 / 5,000 / 10,000 / 10,0001–81
sd041B0 (Cora)332768, 32773, 327742,500 / 5,000 / 10,0001–81
sd051B0 (Accretia)13240795,0001–81

That these are the wiki's four buffs is inferred from the vendor text and the slot count; we have not decoded which force each effect number names.

  • The server can sell a buff (read). (*Server).handleSpecialStoreBuy 0x1409276c0 → specialStoreBuy 0x140927920 → resolveSFEffectOK 0x140897e20 and castSFEffectAt 0x140895e00, which charges dalant.
  • No buff vendor is anywhere in the world (read).
    • None of the 1,071 trade-30 stores is in placement_npcs (293 rows, what the server loads; logs\history.log "npcs spawned {"count": 293, "from_db": true}"), in npcs, or in the data\maps\*.json NPC lists.
    • The trade types that are placed are 0–2, 4–6, 10, 12, 13, 16 and 18–26.
    • The vendors' storelist.m_strStore_MAPcode is empty, and npcharacter has no row for 031B0, 041B0, 051B0 or 0A1B0.
    • The map files' provenance says the placements are "from gamedata_rf455 (4.15 AoP content)", so the 4.151 vendors were never added.

Server side (v0.3.1)

  • Loader: gamedata.(*Data).loadSpecialStores 0x14052c3e0 loads all 711 specialstore rows. The buy path is above.
  • Placement: gamedata.ReadPlacementTables 0x140504300 / (*Data).UsePlacements 0x14050a020 read placement_npcs, which has no trade-30 store.
  • No client map file under Map\ names the vendors, so neither side has a position for them. The positions would have to be chosen (inferred: an HQ spot near the other HQ vendors, and one per neutral map).

Suggested fix

  • Add placement_npcs rows for sd031B0 / sd041B0 / sd051B0 in the three HQs, and for the neutral-map vendors (the [通行證] A/B/C rows, or the race vendors) on Sette, Elan, Beast Mountain, Outcast Land, Volcanic Cauldron, Cartella Bio Lab, Jetso Island and Novajan.
  • Add the matching npcharacter rows if the spawner needs one.
  • If the [通行證] vendors are meant to serve premium players only, gate them on isPremium (0x1408e8920).

Local workaround

None; a GM cannot spawn a store NPC.

Reported on version 0.3.1
👍 DT

Replies

Nobody has replied yet.

Sign in to comment.

Top xp sources

How xp works
Loading…

Open the full search page