Repository navigation
Send the mini game results as the client expects them - #1000
Merged
Merged
Conversation
The client handles every C1 93 result with one struct (rank at 3, count at 4, rows of name, score, experience and money from 5) and chooses the result window by the byte at 4: 0xFF is the blood castle result, 0xFE the chaos castle result, a count below 200 the devil square rank table. - Chaos castle sent the blood castle result (0xFF), which the client ignores on the chaos castle map, so no result was shown. It now sends the new ChaosCastleScore (0xFE) with the killed monsters, the experience and the killed players where the client reads them, through the new IChaosCastleScoreTableViewPlugin; success is set for the winner only. - Blood castle and devil square swapped the bonus experience and money: the score tables are (name, score, experience, money), but were deconstructed or filled as (…, money, experience). - Devil square ranked the finishers by ascending score, so the lowest score got rank 1 and its rewards. - The devil square rank table sent the number of all scores as its count, but wrote at most 10 rows. The definitions describe the shared code; new tests check the written bytes at the client's offsets and the view plugins.
alandarev
marked this pull request as ready for review
September 29, 2026 06:58
Contributor
Author
Member
|
Okay, that's the open source MuMain, not the original closed-source season 6 episode 3 client. Like discussed in Discord, we have to make sure first, that it's also broken in the original client before we change it. If it's not broken in the original client, then it's a bug in the open source client. |
Contributor
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.










Fixes #999.
What
The client shows every mini game result from C1 93 and chooses the window by the byte at index 4
(
0xFFblood castle,0xFEchaos castle, a count below 200 the devil square table; details in#999).
ChaosCastleScore(C1 93, type0xFE) with the player name, the killedmonsters, the experience and the killed players at the offsets the client reads. The descriptions
of
BloodCastleScore.TypeandMiniGameScoreTable.ResultCountexplain the shared code. Structs,ConnectionExtensions, generated tests and packet docs are regenerated from the XML.ChaosCastleContextcounts the monsters and players each player killed and sends the resultthrough the new
IChaosCastleScoreTableViewPlugin; success is set for the winner only.BloodCastleContextandDevilSquareContextno longer swap experience and money.DevilSquareContextranks the finishers by descending score.ChaosCastleScoreTableViewPlugin(with itsPlugInResourcesentries);MiniGameScoreTableViewPluginsends the number of rows it writes(at most 10) as the count.
Open points (unchanged by this PR)
experience rewards actually given.
only when the rank is within the rows sent.
Testing
tests/MUnique.OpenMU.Network.Packets.Tests/MiniGameResultReceiveLayoutTests.cs: the bytes of thethree results at the client's offsets, including the type byte.
tests/MUnique.OpenMU.Tests/MiniGameScoreRemoteViewTests.cs: the view plugins, checked on the rawheader and type byte as sent (the chaos castle test fails if the plugin sends
BloodCastleScore),and the devil square count limited to 10 rows (fails on master).
MUnique.OpenMU.Network.Packets.Tests612/612,MUnique.OpenMU.Tests1103/1103 (on master 0db6db1).count: 99, Players Kill count: 0"); the same steps on master show no window. Blood castle and
devil square were checked by the tests only.
docs/Packets/C1-93-ChaosCastleScore_by-server.md. The markdown generator writes every packetdocument that way.
Written with AI assistance and tested by hand, per CONTRIBUTING.