Repository navigation
feat(packets): add extended player shop price packets (0.9.11) - #1190
Merged
Merged
Conversation
Adds the protocol for player shop prices in other currencies than zen (see #1186), without changing any of the original packet layouts: - C3 3F 09 PlayerShopSetItemPriceExtended: sets a price with a currency. - C1 3F 0A PlayerShopCurrenciesExtended: tells the client which currencies are enabled, as a bit mask. - ShopCurrencyType common enum (Zen, five jewels, three account coins). - PlayerShopBuyResultExtended gets LackOfPriceCurrency. - Documents how PlayerShopItemExtended carries jewel and coin prices. Bumps the MUnique.OpenMU.Network.Packets package to 0.9.11, so the open source client can consume the new definitions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y7XufeAZ22z7ocXAXUqUsE
This was referenced Oct 11, 2026
The extended set-price packet carried a fixed currency enum, while the item list describes a price by MoneyPrice, PriceItemType and RequiredItemAmount. The enum limited prices to a hard-coded set of jewels and coins, and any other price item would have needed a protocol change. - C3 3F 09 PlayerShopSetItemPriceExtended now has the same three price fields as PlayerShopItemExtended (including the reserved account coin values), followed by the item slot. - C1 3F 0A is now PlayerShopPriceTypesExtended: the list of allowed PriceItemType values, instead of a bit mask over the enum. - The ShopCurrencyType enum is removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y7XufeAZ22z7ocXAXUqUsE
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.
Protocol part of #1186. It's split out so the
MUnique.OpenMU.Network.PacketsNuGet package (bumped to 0.9.11, published bypublish.ymlon merge) can be released before the open source client (MuMain) adopts it. The server-side implementation is #1191, stacked on this PR.Changes
All of these are XML changes; the C#, test and markdown files are regenerated from it. No original (non-
Extended) packet layout changes.A price uses the same three fields everywhere, as
PlayerShopItemExtendedalready defines them:MoneyPrice: zen, or account coins;PriceItemType: the price item (group << 12 | number), or a reserved coin value (0xFFF0WCoin C,0xFFF1WCoin P,0xFFF2Goblin Points);RequiredItemAmount: the number of item pieces; 0 when the price isn't paid in items.Packets:
C3 3F 09 PlayerShopSetItemPriceExtended(client → server, 13 bytes):MoneyPrice,PriceItemType,RequiredItemAmountandItemSlot. Any price the item list can show can also be set, and the protocol doesn't fix which items can be used as a price.C1 3F 0A PlayerShopPriceTypesExtended(server → client, variable length): a count and thePriceItemTypevalues that are allowed in addition to zen. It's only sent while the server feature is enabled.PlayerShopBuyResultExtended.ResultKind.LackOfPriceCurrency(10): lets the client tell "not enough items/coins" apart from "not enough zen".PlayerShopItemExtended: the field descriptions now spell out this encoding.The first commit used a fixed
ShopCurrencyTypeenum for the set-price packet. The second commit replaces it with the encoding above, so both packets describe a price the same way. Squashing on merge is fine.Testing
MUnique.OpenMU.Network.Packetslocally withoutci=true, so the structs, ref structs, connection extensions anddocs/Packetswere regenerated.CommonEnumsis unchanged compared tomaster.dotnet test tests/MUnique.OpenMU.Network.Packets.Tests: 628 passed.🤖 Generated with Claude Code
https://claude.ai/code/session_01Y7XufeAZ22z7ocXAXUqUsE