Carrying & Attach Points
How carrying works
When a player stows a lantern, the resource hands it to the game's own lantern attach point rather than spawning a fake prop.
That matters for three reasons:
- it lights the world like a real lantern, because it is one
- it survives weapon switches and holstering
- that attach point is inside the engine's replicated range, so other players see it with no custom networking at all
If the engine ever refuses — it happens in a few interiors and scripted states — the resource falls back to a prop on the same bone and tells other clients to render it too. The player never loses their lantern either way.
On the player
Two positions, chosen automatically:
| Profile | Bone | Available on |
|---|---|---|
satchel | PH_Lantern | Every ped model |
gunbelt | MH_L_BeltSide | player_zero and player_three only |
Most RedM servers will always get the satchel
MH_L_BeltSide is part of Arthur's and John's skeletons. It does not exist on mp_male / mp_female, so multiplayer peds use the satchel position. That is the game's limitation, not the resource's.
Config.PedCarryStyle = 'auto' -- gun belt if the ped has it, satchel if not
-- 'satchel' always the satchel
-- 'gunbelt' prefer the gun belt, satchel as fallbackOn the horse
RDR2 has no saddle entity. The saddle is a metaped component skinned onto the horse's skeleton, so there is nothing to parent to — but the bones below are the saddle's own prop hooks, which means attaching to them is attaching to the saddle. The lantern moves with it and sits correctly whichever saddle the horse wears.
Config.HorseAttachPoint = 'weightbag'| Value | Bone | Look |
|---|---|---|
weightbag (default) | ES_L_WeightBag0 | Hanging off the left bag |
saddle | PH_saddle_attach_L | On the saddle's left prop hook |
horn | PH_SaddleHorn | Front of the saddle |
rear | PH_SaddleRearGrip | Behind the rider |
weightbag is the default because it is the only one with measured offsets — they came from the original mod and look right out of the box. The other three start from the bare bone and may want a nudge.
A horse with no saddlebag
ES_L_WeightBag0 exists on the horse skeleton whether or not a saddlebag is equipped. On a bare-saddled horse the lantern hangs where the bag would be, with nothing behind it.
If your server has bare-saddled horses, saddle is the safer choice — that hook is part of the saddle itself, which every ridable horse has.
Dismounting
Config.KeepLanternOnHorse = falsefalse — stepping down brings the lantern back to the rider. true — it stays hanging until they take it off.
Either way, if the horse dies or streams out while carrying, the lantern is returned to the player rather than lost with the horse.
Reaching it from the ground
Config.HorseReachDistance = 3.5How close a dismounted player must be to take the lantern off the saddle.
Tuning the position
Offsets live in the bone's local space, and every offset set belongs to one specific bone.
Do not move offsets between bones
Putting one profile's numbers on another profile's bone is what buries a lantern inside a horse. If you change a bone, re-tune the offsets.
Turn the tuning commands on:
Config.TuningCommands = trueThen, with the lantern stowed:
/lanterntune keep it on the horse when you dismount, so you can look
/lanternmove 0 -0.2 0 move it in horse terms: side, forward, up (metres)
/lanternspin 0 0 15 turn it (pitch, roll, yaw in degrees)
/lanternreset undo everything, back to config.lua
/lanterntune off finish/lanternmove is the one to use. Nothing in the game files says which way a bone's local axes point, so the resource measures them: it attaches the prop a metre along each local axis, sees where it lands in the world, and solves for the offset that produces the movement you asked for.
side— positive to the horse's rightforward— positive toward its headup— positive upward
Every command prints a ready-to-paste config.lua line:
[rm_Lantern] Config.HorseAttachPoints.saddle = { bones = {...}, pos = vector3(0.200, 0.000, 0.000), rot = vector3(0.00, 0.00, 0.00) },Paste it in, restart, done.
/lanterntune matters more than it looks
With the default KeepLanternOnHorse = false, dismounting pulls the lantern back to the rider and deletes the saddle prop — so you cannot stand back and look at what you are tuning. /lanterntune pins it in place. The other tuning commands switch it on for you automatically.
Also available: /lanternbone <name> to try a different bone live, and /lanternpoint <saddle|weightbag|horn|rear> to switch attach point without a restart. /lanternaxis and /lanternnudge work in raw bone axes if you prefer that to /lanternmove.
Bone fallbacks
Each attach point lists several bones and uses the first one the model actually has:
Config.HorseAttachPoints = {
saddle = { bones = { 'PH_saddle_attach_L', 'CP_L_Saddle' }, ... },
weightbag = { bones = { 'ES_L_WeightBag0', 'ES_L_OpenBag0' }, ... },
}
Config.PedBones = {
satchel = { 'PH_Lantern' },
gunbelt = { 'MH_L_BeltSide', 'MH_L_BeltSide_JM_000' },
}Only the first entry in each list matches the measured offsets. The rest exist so an unusual skeleton still gets something sensible, and will want their own tuning.
If no bone in the list is found, the resource refuses to attach rather than falling back to the entity centre — a lantern floating inside a horse is worse than no lantern. With Config.Debug = true you will see why in the console.