Skip to content

Waiting items: a per-character list for items which find no space (data changes, GM gifts) #1475

Open

Description

@Mosch0512

Problem

Some items reach a player while their inventory has no space for them, and OpenMU has no place to keep such an item:

  • Item size changes in the data. fix(illusion-temple): make the Scroll of Blood (13/51) the ticket again and give 13/50 back to the Illusion Sorcerer Covenant #1473 gives the Scroll of Blood (13/51) its original size 2x2 back; on the server it was 1x2. When an inventory or vault is loaded, Storage moves an item which doesn't fit at its slot to the first free place. If there is none, its constructor throws "Some items do not fit into the storage" (src/GameLogic/Storage.cs), and the character can't enter the game until an admin moves the item. Every later size change has the same risk.
  • Gifts from a GM or the server owner (an event prize, a compensation) have no way to reach a player who is offline or has a full inventory.

The Season 6 client has no event inventory, and the cash shop storage only holds cash shop products (product and price sequence numbers), not items.

Proposal

A list of waiting items per character, kept in the database, on the server only: the client doesn't change. Each entry has the item, its source (no space after a data change, gift, …) and an optional text (e.g. the gift message).

  • Loading a storage: an item which finds no free place goes into the list instead of failing the login.
  • Gifts: the admin panel (and later a GM command) can put an item into a character's list.
  • Delivery: automatic. As soon as the inventory has a free place where a waiting item fits (checked when the character enters the game and whenever the inventory gets free space: selling, dropping, moving, consuming), the server puts the item into the inventory with the packet which it sends for any new inventory item, so every client shows it.
  • Messages: the player gets system messages, e.g. "1 item is waiting for space in your inventory: Scroll of Blood +3 (2x2)" when something waits, and "Scroll of Blood +3 was put into your inventory" when it's delivered. A chat command /waiting lists the waiting items.

Quest rewards

Quest rewards don't use the list. Today QuestCompletionAction completes the quest and drops an item reward which doesn't fit at the player's feet, where it can be lost. In the Season 6 data, 338 quest rewards of the quest NPCs are items (CreateNewQuests in VersionSeasonSix/Quests.cs, mostly Jewels of Chaos, Bless and Soul); the old quests (Marlon, class changes) give none.

Instead, the quest isn't completed while the rewards don't fit, counting the space after the hand-in items are removed. That's what the original game did, and the Season 6 client already handles it: its answer to the quest completion request (F6 0D) carries a result byte, which the client reads as 0 = not completed, 1 = completed (the quest window closes), 2 = zen limit reached and 3 = inventory full. For 2 and 3 it shows the message ("Inventory is full") and disables the Complete button. See ReceiveQuestCompleteResult in MuMain's WSclient.cpp, which comes from the original client source.

For this, the field IsQuestCompleted of QuestCompletionResponse (F6 0D) becomes a result value (not completed, completed, zen limit reached, inventory full), and the server sends "inventory full" when the rewards don't fit. Today the server sends no answer at all when it refuses a completion (missing items or kills), which leaves the client's Complete button blocked until the quest window is opened again; with the result value it can answer "not completed" there too.

Considered and dropped

  • Dropping a no-fit item at the player's feet when they log in: they still have no space to pick it up, and after the owner time anyone can take it.
  • An overflow strip inside the inventory window: needs a new slot range and a change of the inventory layout in the client.

Possible follow-up

A client which wants to show the list (e.g. MuMain) could get packets to list the waiting items and take one, and a "Waiting items" window with a Take button per item. That's not part of this proposal; the server list above works without it.

Open questions

  • Gifts: an admin panel page per character, a GM command, or both?
  • A limit of waiting items per character?

Activity

  1. Mosch0512 commented on Nov 12, 2026

    @Mosch0512
    ContributorAuthor

    A correction to the quest section above: answering "not completed" (result 0) when the server refuses for other reasons (items or kills missing) wouldn't unblock the Complete button. The Season 6 client does nothing on result 0 (case 0: break; in ReceiveQuestCompleteResult), so the button stays blocked until the quest window is opened again either way. That's why #1491 leaves these refusals as they are and only answers 2 (zen limit reached) and 3 (inventory full), which the client shows and which disable the button.

    The PRs for part A: #1487 (waiting items for items which find no place when their storage is loaded) and #1491 (quests refuse completion while the rewards don't fit).

  2. Mosch0512 commented on Nov 12, 2026

    @Mosch0512
    ContributorAuthor

    The gifts part (admin panel / GM command, recipients, and whether MuMain should get its own window for waiting items) is split out into #1493 to discuss it there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions