Repository navigation
feat(items): an item which finds no place when its storage is loaded waits for space in the inventory - #1487
Merged
Merged
Conversation
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 117 |
| Duplication | 67 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
This was referenced Nov 12, 2026
Open
Mosch0512
force-pushed
the
feat/waiting-items
branch
from
November 13, 2026 15:20
5c3006f to
8330f31
Compare
Mosch0512
marked this pull request as ready for review
November 13, 2026 15:21
sven-n
requested changes
Nov 14, 2026
sven-n
left a comment
Member
There was a problem hiding this comment.
This PR conflicts with current master, so I can't merge it. Please rebase it onto master. These files conflict:
src/GameLogic/Properties/PlugInResources.resx
Most of them are resource files (.resx / .Designer.cs) which other merged PRs also extended. When you resolve them, keep the entries of both sides, and regenerate the designer file instead of merging it by hand. I'll review it in full once it's rebased.
Generated by Claude Code
…e in the inventory A WaitingItem has the item, the reason why it waits (for now only NoSpaceWhenLoaded) and when it was added. It owns its item like a quest reward owns its item, so no other item changes how it's linked. Migration AddWaitingItems, compiled models of the EntityDataContext, AccountContext and TradeContext, and the account data source of the admin panel knows the new type. Captions and descriptions for the admin panel in English, German and Chinese.
…waits for space in the inventory Before, the storage threw and the character couldn't enter the game, e.g. when the size of an item definition grew. - The storage takes an optional function for such an item; when it takes the item, the item is removed from the item storage afterwards. The inventory (an item first tries the inventory extensions), the personal store and the vault put such items into the waiting items of the character. - The plug-in "Waiting items delivery" puts them into the inventory as soon as they fit: when the character enters the game or opens the vault, and then periodically while no dialog is open, holding the persistence lock of the player and the lock of the personal store. The oldest item comes first. Errors are logged, so they don't stop entering the game. Its interval and the number of named items are configurable. - The player is told which items wait, in short messages; the chat command /waiting lists them. - A character with waiting items can't be deleted, because an item from the vault belongs to the account. - A waiting item without an item definition is kept, but not delivered or listed.
…nds no place doesn't fail The placement check loads a detached copy of the inventory or vault, which threw for an item whose definition grew. In the game such an item waits for space in the inventory, so here it just takes no place.
Mosch0512
force-pushed
the
feat/waiting-items
branch
from
November 14, 2026 17:40
8330f31 to
bf2a9f6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Part of #1475 (the server-only part A, first PR of three).
When an item finds no free place while its storage is loaded, the
Storageconstructor throws "Some items do not fit into the storage", and the character can't enter the game until an admin moves the item. That happens whenever the size of an item definition grows in the data, e.g. the Scroll of Blood in #1473, which gets its original size 2x2 back.What
WaitingItems. Each has the item, the reason why it waits (for now onlyNoSpaceWhenLoaded) and when it was added. The item belongs to the waiting item like the item of a quest reward belongs to the reward, so no other item changes how it's linked. MigrationAddWaitingItems, compiled models ofEntityDataContext,AccountContextandTradeContextgenerated again; the account data source of the admin panel knows the new type. Captions and descriptions for the admin panel in English, German and Chinese.Storagetakes an optional function for an item which finds no place; when it takes the item, the item is removed from the item storage afterwards, so it isn't lost when putting it aside throws. The inventory (with its extensions and the personal store) and the vault use it to put the item into the waiting items of the character, instead of throwing. An inventory item first tries the other places of the inventory, including the extensions. AStoragewithout that function still throws. The placement check of the admin panel's "add item" ignores such an item instead of failing.WaitingItemsDeliveryPlugInputs waiting items into the inventory as soon as they fit: when the character entered the game or opened the vault, and then periodically while no dialog is open (no trade, chaos machine, merchant or vault). The client gets the item like any new inventory item, so nothing changes on the client side. The oldest item comes first; one which doesn't fit doesn't hold back a smaller one./waitingwhen that command is active), and when an item was put into the inventory. The chat command/waitinglists them, up to its setting (default 10). The texts are in English, German, Portuguese and Chinese.docs-website/docs/server-features/waiting-items.md.Not in this PR: quests which refuse their completion while the reward doesn't fit (#1491), and gifts from an admin into the list (#1493).
Testing
dotnet buildanddotnet test --no-buildwith-p:ci=true:MUnique.OpenMU.Tests: 3064 passed, 0 failed, 2 skipped (the opt-in PostgreSQL tests, like on master), incl.CompiledModelTestsandGameConfigurationLoaderGeneratorTestMUnique.OpenMU.Persistence.Initialization.Tests: 862 passed, 0 failed, 12 skippedMUnique.OpenMU.Web.Tests: translation and localization tests 44 passed; 16 NetworkAnalyzer tests fail on my machine only because they get German texts.WaitingItemsTest(23 tests): putting aside in a storage, the inventory, its extensions, the personal store and the vault; nothing is lost when putting aside throws; delivery when space gets free, smaller items first, items without definition; the periodic delivery only without dialog and while the store lock is free; errors don't stop entering the game; the delete refusal; the messages and the/waitinghint.