RF455-074 RF 4.55: siege kits give none of their stats (ATK %, hit, HP/FP, defence, dodge, range): the server loads only 5 kit columns
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 : Update 4.15 "Age of Patron". Shining kits give ATK +60%, more accuracy and more max HP/FP,
with range 1–57. Sniper kits give ATK +75% with range 30–80, and less defence and dodge. Every kit's own stats
apply while in siege mode.
Summary
gamedata_rf455.dbsiegekititem(31 rows) gives each kit up to four effects (m_nEff1..4Code/m_fEff1..4Unit), plusm_fGAAF,m_nGACorSpd, a rangem_fMinDst–m_fMaxDst, a level limit and a mastery gate. For example (read from the DB):
| Kit | Code | Effects (code = value) | Range |
|---|---|---|---|
| Shining Sonium Siege Kit | sklu019 | 6 all attack = 0.60, 3 hit = 50, 5 max HP/FP = 0.15, 25 launcher delay = −800 | 1–57 |
| Sniper Sonium Siege Kit | sklu020 | 6 = 0.75, 7 defence = −0.15, 24 dodge = −100, 25 = +300 | 30–80 |
| Expert Shining Siege Kit | sklu009 | 6 = 0.60, 3 = 20, 31 = −0.15, 25 = −100 | — |
| Attack / Defence Beelzebub | sklu023 / sklu024 | 6 = 0.65 / 0.35, 3 = 20, 5 = 0.1 / 0.2, 21 = 0.1 / 0.4 | — |
- None of these does anything on the server (read). A kit only decides whether you can transform: weapon type, race and the remaining durability. Siege attack and defence come out the same whichever kit you wear.
Server side (all read, v0.3.1)
- The only query on the table is
gamedata.(*Data).SiegeKitByIndex0x140535be0. The string is at0x140be3979:SELECTm_nUsableTyoe,m_nSubType,m_strCivil,m_nDurUnit,m_nLevelLimFROMsiegekititemWHEREm_dwIndex= ?- That's 5 columns, scanned into a 0x30-byte struct.
- The table name appears once more, in
handleUseSoccerBall(itemRecordExists, at0x1409270ac). - The effect columns,
m_fGAAF,m_nGACorSpd,m_fMinDst/m_fMaxDstandm_nExpertID1/m_nExpertLim1are never read.
- Of the five, only three are used. Its only caller,
siegeKitField0x140926960, feedscheckSiegeKitFits0x140923720(transform) andsiegeKitFitsLiveWeapon0x140923a80(attack). Both compare UsableType/SubType with the weapon (code 6) and checkm_strCivil[race] == '1'(code 7).m_nDurUnitandm_nLevelLimare copied out and never compared. - Transform applies nothing. On a 1C/01 that passes,
handleTransformSiege0x140922aa0callscheckSiegeTransform,armSiegeState0x1409223c0,replyandbroadcastExcept.armSiegeStateonly fills the siege state: serial, the flag, kit serial and index, a deadline, the visual version.- No combat stats are recomputed on transform, on release (
handleReleaseSiege0x140923e00,forceReleaseSiege0x140925e60) or on death. - The kit never reaches the equip-effect path that worn gear uses.
- Siege attack:
(*client).siegeAttackParam0x1408d4a80= the weapon's attack (weaponAttackParam) × a mastery scale (genMasteryLevel) × (1 + combatEPrate[23]).rate[23]is a buff slot; no kit column feeds it.
- Siege defence: while
isSieging,(*client).defenceFC0x1407e2960multiplies by (1 + combatEPrate[24]), also a buff slot.- With no such buff, the siege factor is 1.0. That last point is inferred: we haven't searched every writer of
rate[23]andrate[24].
- With no such buff, the siege factor is 1.0. That last point is inferred: we haven't searched every writer of
- No range check.
handleAttackSiege0x140924440andresolveSiegeTarget0x140926120have no distance check, so the Sniper's 30-yard minimum isn't enforced by the server (only the client draws it). - No level or mastery gate.
checkSiegeTransform0x140923260checks the table, the lock, that you're not already in siege mode, live durability > 0, a loaded launcher, and thencheckSiegeKitFits. It never checksm_nLevelLim(Lv70 for the Expert kits) or the mastery gate (m_nExpertID1= 2, limit 99).
Suggested fix
- Load the four effect pairs (and
m_fGAAFif it's meant as the kit's attack factor). On a successful transform, apply them through the same effect-code routes worn gear uses:- 6 all attack;
- 3 hit;
- 5 max HP/FP;
- 7 and 21 defence;
- 24 dodge;
- 25 launcher delay (client-side);
- 31 debuff duration (inert for gear too, RF455-058Released).
- Remove them on release, on durability-out and on death.
- Optionally, gate transform on
m_nLevelLimand on the mastery limit. - Optionally, check
m_fMinDst/m_fMaxDston the siege attack.
Local workaround
None.
👍 DT