Skip to content

feat(warps): send the warp list to the open source client - #1504

Draft
pllanosclaria wants to merge 3 commits into
MUnique:masterfrom
pllanosclaria:feat/warp-list-for-open-source-client
Draft

pllanosclaria wants to merge 3 commits into
MUnique:masterfrom
pllanosclaria:feat/warp-list-for-open-source-client

Conversation

@pllanosclaria

@pllanosclaria pllanosclaria commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Closes #1503

The open source client takes its warp list from its data files, which follow Webzen's Season 6, so it can't offer warps like Crywolf and Loren Market (see #1503, sven-n/MuMain#1057). With this change the server sends its warp list to the open source client when a character enters the game. Original clients don't get it.

Changes

  • Packet WarpListExtended (C2 F5 09, server to client), in the XML with the generated code, docs and tests: a count, then per warp the index, map number, level requirement (as configured), costs and the name (32 bytes, UTF-8).
  • View IShowWarpListPlugIn, implemented only by ShowWarpListExtendedPlugIn with [MinimumClient(106, 3, ClientLanguage.Invariant)], like ShowShopCurrenciesExtendedPlugIn. The name is WarpInfo.Name in the player's culture; a name which doesn't fit into the 32 bytes is shortened to whole characters instead of failing the message.
  • Plugin ShowWarpListAfterEnterWorldPlugIn (IPlayerStateChangedPlugIn, CharacterSelection → EnteredWorld, so not on map changes): sends the warps ordered by index, without warps whose gate has no map, and of warps with the same index only the first one, because that's the one WarpHandlerPlugIn uses.
  • Plugin names and descriptions in English and German.
  • The admin panel docs of the warp list say that the open source client shows it.
  • PlayerTestHelper.CreateGameConfiguration sets up an empty warp list, like its other collections. Without it, the existing tests which enter the world with that mock failed on the new plugin.

The client side is sven-n/MuMain#1110. It reads the message by hand, like the other F5 messages, so it doesn't need a new package version.

Testing

  • New WarpListTests: the fields of the message (including the translated name), the shortened names, that only client 106.3 gets the view plugin, the selection and order of the warps, and that the list is sent after entering the game but not after a map change.
  • dotnet build src/MUnique.OpenMU.sln, then dotnet test src/MUnique.OpenMU.sln --no-build: everything passed (MUnique.OpenMU.Tests 2893 passed, 2 skipped; Persistence.Initialization.Tests 851 passed, 12 skipped; the other projects passed without failures).
  • On a local server (docker image of this branch, Season 6 data) with the MuMain branch:
    • the warp window lists Crywolf and Loren Market after the warps of the client's data, and the client warps there through its warp list (MuMain's control socket warp, which takes the entry by name) and with /warp LorenMarket in the chat box;
    • after going back to the character list and entering again, the list is sent again;
    • with ShowWarpListExtendedPlugIn deactivated, the client falls back to its own list (no Crywolf), as with a server which doesn't know the message.
  • Not tested with the original 1.04d client. It doesn't get the view plugin (covered by the test above), so nothing new is sent to it.

Notes

  • The Season 6 data has two warps to LaCleon: 34 "Raklion" and 48 "LaCleon", both to gate 287. The original client only knew 34 (it calls it LaCleon), so the open source client now shows LaCleon twice. I left the data alone, since it's a separate question whether 48 should exist.
  • Building the packets project regenerates three docs which are already out of date on master (C1-11-ObjectHit*_by-server.md, C1-48-ShowEffect_by-server.md); I left them out of this PR.

…e client

The open source client takes its warp list from its data files, which follow
Webzen's Season 6. Warps which OpenMU has and Webzen doesn't, like Crywolf and
Loren Market, can't be selected there, and the client can't add them to its
files because it's used with Webzen's servers, too.

WarpListExtended (C2 F5 09) carries the warp list of the server: per warp the
index, map, level requirement, costs and the name in the player's language.
When a character enters the game, the server sends its warp list to the open
source client (WarpListExtended), so that its warp window offers the warps of
the server instead of the ones of its data files. Original clients don't get
it: the view plugin exists only for the open source client.

The warps are ordered by index; warps without a map are left out, and of warps
with the same index only the first one is sent, because it's the one which a
warp request uses. Names which don't fit into the 32 bytes of the field are
shortened to whole characters instead of failing the message.

The mocked game configuration of the tests gets an empty warp list, like its
other collections.
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 25 complexity · -1 duplication

Metric Results
Complexity 25
Duplication -1

View in Codacy

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.

@pllanosclaria
pllanosclaria marked this pull request as draft November 13, 2026 01:00

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Send the server's warp list to the open source client

1 participant