RF455-083 RF 4.55 v0.3.1: race leader "wave" skills buff only the caster (the link effect never reaches allies)
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
The race leader and council skills (skill class 4, "Leader Effect": Bellato Union's Protection/Touch, Decem's
Protection/Touch, Conqueror's Protection/Roar) put their buff on the caster only. Each of them names a 10-second
"Link Effect" in m_strRangeEffCode that, going by the data and the names ("… wave"), should go out to race members
around the leader. The server never casts it, so nobody else gets a buff and nothing is seen around the leader.
How each part is known:
- Skill data: read from the bundled
db\gamedata_rf455.dband the client'sDataTable\SkillForce.edf. - Server side: read in the stock v0.3.1
gameserver.exe(with a Go symbol disassembler) and inhistory.log. - What retail did with the link effect: inferred from the data (a paired 10 s row named in the leader row's range-effect field) and the names. We have no retail server to compare with.
1. The skills (read, gamedata_rf455.db table skill)
Class 4 rows come in pairs. The leader row (ContEffectType 1, 1200 s) names the link row in m_strRangeEffCode:
| Leader row | Name | Slots | Link row (10 s) |
|---|---|---|---|
AF1F7 | Bellato Union's Protection | rate[33] +0.2, rate[32] +0.2, plus[33] −200 | AF1F8 (rate[33], rate[32]) |
AF1F9 | Bellato Union's Touch | rate[9] +0.2, rate[32] +0.2, plus[33] −200 | AF1FA |
AF1FB | Decem's Protection | as AF1F7 | AF1FC |
AF1FD | Decem's Touch | as AF1F9 | AF1FE |
AF1FF | Conquerer's Protection | as AF1F7 | AF200 |
AF201 | Conquerer's Roar | as AF1F9 | AF202 |
The client's SkillForce.edf skill rows carry the same link code at row +0x42c (for example AF1FF → 0xAF200).
2. What the server does with a cast
handleSkillCast (11/04, 0x140893f00) → castSFEffectAt (0x140895e00) → castTarget (0x1408993c0), which
returns one player: the caster when the target serial is its own, otherwise (*world).playerBySerial.
castSFEffectAt then calls applyContEffectTo (0x1408968e0) at one call site, 0x1408962b5, for that player.
The server loads the m_strRangeEffCode column (the name is in its table loader strings), but nothing on this path
reads it.
history.log, a Consul casting both skills:
recv {"session": 8, "op": "11/04", "body": "3b00e67e5a0c000008000000000000"}
continuous effect applied {"session": 8, "selector": 0, "index": 59, "effect_bit": 59, "cont_type": 1, "debuff": false, "on_target": false, "dur_s": 1200}
recv {"session": 8, "op": "11/04", "body": "3900e67e5a0c000002000000000000"}
continuous effect applied {"session": 8, "selector": 0, "index": 57, "effect_bit": 57, "cont_type": 1, "debuff": false, "on_target": false, "dur_s": 1200}One line per cast, for the caster only; nothing for skill 58 or 60 (the link rows).
3. The leader buffs themselves work
On v0.3.1 the leader's own slots are read: rate[32] by weaponAttackParam/forceAttackParam, rate[33] by
defenceFC, rate[9] by maxPointsWithGear. plus[33] (−200) has no reader. So the gap is only the link effect.
Expected
When a leader or council member casts a leader skill, race members within the skill's range also get its link
effect (m_strRangeEffCode, 10 s), refreshed while they stay near the leader.
Suggested fix
In castSFEffectAt (or after applyContEffectTo for a class-4 skill), when the skill row has a
m_strRangeEffCode, resolve that row and apply it with applyContEffectTo to every same-race player within range
of the caster (m_nContAreaType / the row's range field may say which). The 1200 s leader buff with a 10 s link
suggests the link is re-sent periodically while the leader buff lasts; that part is a guess.
How to reproduce in game
- Make a character a council member:
race boss 1 <name>(any rank 1–8, or 0). - Have a second character of the same race stand next to them.
- Cast Conqueror's Protection (or any leader skill).
- The caster gets the buff icon; the second character gets nothing, and
history.loghas a singlecontinuous effect appliedline for the caster.
Where to look
- Server (v0.3.1):
handleSkillCast0x140893f00,castSFEffectAt0x140895e00,castTarget0x1408993c0,applyContEffectTo0x1408968e0. - Data:
skillrowsAF1F7–AF202, columnsm_strRangeEffCode,m_nContAreaType.