You are viewing a potentially older version of this package. View all versions.
Vibecodeguy-ItemShare-1.7.0 icon

ItemShare

Co-op loot sharing. Every player walks over the same drop and collects it for themselves, and it only despawns once everyone has. Artifact of Command included. Every player in the lobby needs it.

Date uploaded 2 weeks ago
Version 1.7.0
Download link Vibecodeguy-ItemShare-1.7.0.zip
Downloads 245
Dependency string Vibecodeguy-ItemShare-1.7.0

This mod requires the following mods to function

bbepis-BepInExPack-5.4.2121 icon
bbepis-BepInExPack

Unified BepInEx all-in-one modding pack - plugin framework, detour library

Preferred version: 5.4.2121
RiskofThunder-HookGenPatcher-1.2.9 icon
RiskofThunder-HookGenPatcher

MMHOOK generation at runtime.

Preferred version: 1.2.9
RiskofThunder-R2API_Core-5.3.0 icon
RiskofThunder-R2API_Core

Core R2API module

Preferred version: 5.3.0
RiskofThunder-R2API_Networking-1.0.4 icon
RiskofThunder-R2API_Networking

Networking API around the Unity UNet Low Level API (LLAPI)

Preferred version: 1.0.4
Vibecodeguy-PickupShareApi-1.0.0 icon
Vibecodeguy-PickupShareApi

Library. Lets a loot-sharing mod publish which players have already collected which drop, so another mod can move that drop without the lobby losing track. Does nothing on its own.

Preferred version: 1.0.0

README

ItemShare

Stop racing your friends to the loot.

Every player collects the same drop for themselves. The orb stays on the ground until the last person has picked it up, then despawns like normal.

Everyone in the lobby needs this installed

The loot logic itself is all server-side, but a Command cube's interaction prompt is drawn by each player's own machine, so hiding a cube you are finished with can only happen there. The mod tells every client which cubes it is done with, and a lobby is refused if somebody is missing it or running a different version — better a clear message at the door than a game where half the players are fighting their own prompts.


Modes

Set General.PickupMode in the config file.

Individual — default

Everyone walks over the orb themselves.

  • First player touches it, gets the item, orb stays
  • Second, third player touch it, get the item, orb stays
  • Last player touches it, gets the item, orb despawns
  • Once you have collected one it stops being drawn for you, so a cluster of drops thins out as you work through it
  • Already collected it? Walking over it again does nothing
  • Playing solo? Behaves exactly like vanilla

You still have to go get your loot, you just are not competing for it.

Artifact of Command works too. Everyone opens the cube and picks their own item, so you are not stuck with whatever the fastest player chose. The cube stays until all players have picked, then disappears. Once you have taken your pick the cube stops responding to you, so you cannot open it twice by accident.

Ping a drop to see who still needs it. Ping a pickup or a Command cube somebody has already taken and the names of the players who have not appear in chat. Untouched drops say nothing, so pinging stays quiet until it actually tells you something.

Instant

The first player to touch the orb takes it and everyone else is handed a copy on the spot, wherever they are. Good if you would rather not run around collecting, or if someone is busy holding a boss and would otherwise miss out.


Config

BepInEx/config/com.majai.itemshare.cfg, created after your first launch.

Key Default What it does
General.PickupMode Individual See above. Read once at startup — restart the game after changing.
Tiers.White / Green / Red / Boss true Share that tier. Turn one off and it goes back to vanilla first-come-first-served.
Tiers.Lunar false Lunar (blue) items.
Tiers.Void false Void items. They corrupt their counterpart, so turning this on means everyone loses the corrupted item.
Tiers.Food false The new FoodTier. Untested, so it defaults to vanilla behaviour.
General.ShareToDead true Dead players are handed items automatically, since they cannot walk over an orb. Either way, a dead player never blocks an orb from despawning.
General.AnnounceProgress true Individual only. Chat line showing collection progress, e.g. [ItemShare] Bandit - 2/4.
General.ShareCommandPicks true Individual only. Artifact of Command: everyone picks their own item from the cube.
General.PingShowsPending true Individual only. Pinging a partly-collected drop lists who is still missing it.
General.HideCollectedOrbs true Individual only. A drop you have collected stops being drawn for you. Others still see it until everyone has it.
General.SilenceRemoteNotificationErrors true Suppresses a vanilla error logged for every pickup that belongs to another player. Leave it on; it is a large part of why multiplayer used to stutter on pickups.
General.ShareEquipment false Instant only. Gives equipment to players with a free slot. Never overwrites equipment someone is holding.

Every tier flag is read live, so you can change those mid-run without restarting.


Things to know

A drop you have collected disappears for you but not for anyone else. That is deliberate — the pickup is one networked object shared by the whole lobby, so it cannot actually despawn until the last player has it. Only your view of it is hidden. If you would rather see every drop until it really goes away, turn off HideCollectedOrbs.

Equipment is left completely vanilla in Individual mode. There is one equipment slot, so "everyone walks over and collects it" does not really mean anything. First to touch it takes it, same as always.

Instant mode does not charge other players for 3D printers. If someone spends an item at a printer or cauldron, only they pay for it, so inventories slowly drift apart over a run. This used to be handled, but the cost API changed shape in a recent game update and the old approach no longer applies. Individual mode is unaffected — it never assumed identical inventories in the first place.

The Scrapper, Meal Prep, the Hoard, the Solus vendor and Lemurian eggs are untouched. They run on the same controller as the Command cube, but they take items from you rather than hand them out, so sharing them would make no sense. Command cubes are identified specifically, and if that detection ever fails the cube just falls back to vanilla.

In Instant mode, Command already worked and is left alone — the cube spawns one orb and the normal instant sharing takes it from there.

Not covered yet: money.


Compatibility

Built and tested against the current Risk of Rain 2 release. It hooks exactly one method, GenericPickupController.AttemptGrant, and does not touch the item catalog, so it should sit fine next to content mods that add items — new items get shared according to their tier automatically.

If a game update breaks it, the pickup API almost certainly moved. Open an issue rather than assuming it is a conflict with another mod.


ภาษาไทย

ของ drop มาแล้วไม่ต้องแย่งกัน ทุกคนเดินไปเก็บของชิ้นเดียวกันได้เอง orb จะหายก็ต่อเมื่อคนสุดท้ายเก็บแล้ว

ทุกคนในห้องต้องลง — logic แชร์ของรันฝั่ง server ก็จริง แต่ปุ่ม interact ของกล่อง Command วาดโดยเครื่องของแต่ละคน การซ่อนกล่องที่ตัวเองเลือกไปแล้วเลยต้องทำที่เครื่องนั้น ถ้าเวอร์ชันไม่ตรงหรือมีคนไม่ได้ลง จะเข้าห้องไม่ได้

โหมด Instant (ตั้งใน config) = คนแรกเก็บแล้วคนอื่นได้ copy ทันทีโดยไม่ต้องเดินไปไหน

ข้อจำกัดที่ควรรู้: คนที่เก็บไปแล้วจะยังเห็น orb ลอยอยู่ จนกว่าคนสุดท้ายจะมาเก็บ เพราะ orb เป็น networked object ตัวเดียวที่ทุกคนเห็นเหมือนกัน จะซ่อนเฉพาะบางคนต้องให้ทุกคนลง mod ด้วย เลยเลือกใช้ข้อความในแชทบอกความคืบหน้าแทน


Credits

Made by majai. Built with BepInEx and HookGenPatcher.

CHANGELOG

Changelog

1.7.1

  • Fixed HideCollectedOrbs barely doing anything. It hid the item model and the outline and left the glow, which is most of what a drop looks like — so a collected drop still sat there looking collectable. The glow is a separate per-tier particle object that the vanilla "hide renderers" call never touches. Everything a drop draws, including its light, is now switched off, and re-applied on a timer because the game rebuilds that model on its own schedule and would otherwise turn it all back on.

1.7.0

  • A drop you have already collected stops being drawn for you, while staying visible to everyone who still needs it. This was the oldest limitation in the mod — it only became possible once every player had it installed in 1.6.0. Especially useful where drops end up clustered: a pile you are finished with no longer hides the one you are not. New HideCollectedOrbs config, on by default.
  • Only the visuals are touched. The collider, the trigger and every bit of the server-side collection logic are untouched, so hiding can never change who gets what.

1.6.1

  • Fixed stuttering while picking up items in multiplayer. Vanilla logs an error every time a pickup notification arrives for somebody else's character — a normal thing that happens on every machine for every pickup — and this mod made it far more frequent, because in Individual mode each player collects the same drop separately. A four-player session produced 1718 of them, 63% of every error logged in the run. Each one captures a stack trace and writes to disk, which is what you felt when items were being collected. They are now skipped; nothing else changes, since the original was about to return without doing anything anyway. New SilenceRemoteNotificationErrors config, on by default.

1.6.0

  • Every player now needs the mod installed. A lobby is refused if somebody is missing it or is on a different version.
  • Used Command cubes now disappear from every player's prompt, not just the host's. The server tells each client which cubes that player is finished with, so a cluster of cubes can be worked through one at a time from any machine. Previously only the host got this; remote players had to step around cubes they were done with.

1.5.1

  • A Command cube you are finished with no longer blocks the cube behind it. Used cubes now vanish from your interaction prompt entirely instead of greying out, so a cluster of them - what a gather mod tends to produce - can be worked through one at a time. Greyed-out interactables still compete to be your target in vanilla; hidden ones are skipped, which is what was wanted all along.
  • Dropped the GetContextString hook. A hidden prompt has no text to show, so it had nothing left to do, and every hook is a liability when the game updates.

1.5.0

  • New dependency: PickupShareApi. ItemShare now registers with it at startup and publishes which players have already collected which drop. That lets a companion mod relocate a drop without the lobby losing track of it — Risk of Rain 2 never synchronises the position of a spawned pickup, so moving one means destroying it and spawning a replacement, and the replacement would otherwise look untouched to everybody.
  • Command cube detection moved into PickupShareApi, so ItemShare and anything else that needs to tell a cube from a Scrapper now agree on the answer by construction.
  • No behaviour change for players. ItemShare only ever answers questions on the API; nothing in the mod works differently because of it.

1.4.0

  • A Command cube can no longer be opened again by someone who already took their pick. The interaction is refused server-side, so it holds for remote players too, and on the host the prompt greys out and reads ALREADY PICKED.
  • Ping a drop to see who is still missing it. Pinging a pickup or a Command cube that somebody has already taken posts the names of the players who have not. Untouched drops say nothing, so pinging stays quiet until the information is actually useful. New PingShowsPending config, on by default.

1.3.0

  • Artifact of Command is now supported in Individual mode. Every player opens the cube and picks their own item, instead of the first chooser deciding for everyone. The cube stays until all players have picked, then disappears. New ShareCommandPicks config, on by default.
  • Only Command cubes are affected. The Scrapper, Meal Prep, the Hoard, the Solus vendor and Lemurian eggs use the same controller but take items rather than give them, and are left completely untouched.

1.2.1

  • Fixed MissingMethodException: void RoR2.Stage.Start() at startup, which stopped the mod from loading at all. Stage.Start is a coroutine returning IEnumerator, but the MMHOOK assembly HookGenPatcher ships still describes the old void signature. Now uses the game's own Stage.onStageStartGlobal event, which cannot drift out of sync.

1.2.0

  • Rebuilt against the current pickup API. Grants now replay the vanilla PickupDef.GrantContext pipeline instead of writing to the inventory directly, so temp items, void corruption and per-item side effects all behave normally.
  • Temp items stay temp for everyone. A decaying pickup is replayed with its decayValue rather than becoming permanent for the players who did not touch it.
  • Added Tiers.Food for the new FoodTier. Off by default until it is tested.
  • Removed MirrorItemCosts. CostTypeDef.PayCost changed shape and the old implementation no longer applies. See the Limitations section of the README.

1.1.0

  • Added PickupMode. Individual (default) makes every player collect the orb themselves; Instant keeps the original behaviour.
  • Dead players are handed items automatically and never block an orb from despawning.
  • Added AnnounceProgress chat feedback.

1.0.0

  • First release. One player picks up a drop, everyone receives it.