Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Parse table/Server/defaultCharacterInfo.xml - #78

Merged
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser
Aug 5, 2026
Merged

Parse table/Server/defaultCharacterInfo.xml#78
AngeloTadeucci merged 1 commit into
masterfrom
feat/default-character-info-parser

Conversation

@AngeloTadeucci

@AngeloTadeucciAngeloTadeucci commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

table/Server/defaultCharacterInfo.xml had no type here, so a consumer that needs the per-gender default appearance (Maple2's gender-change voucher) had to hand-roll an XmlDocument walk over the entry. This adds the type and the parser method.

  • Xml/Table/Server/DefaultCharacterInfo.cs: DefaultCharacterInfoRootgender blocks, each with skin and items/item, each item optionally carrying controls/control (hair transform). value is [M2dEnum] Gender; position/rotation are [M2dVector3].
  • ServerTableParser.ParseDefaultCharacterInfo() returns (Gender, DefaultCharacterInfo), matching the other Parse* methods.
  • colorSN defaults to -1, not 0. The attribute is absent on slots that keep the palette's own swatch, and 0 is a real swatch index.
  • PackageVersion 2.4.20 → 2.4.21.

Verification

Ran a throwaway harness against the real Server.m2d and diffed the parsed tree against the raw XML entry. Every field round-trips:

gender=Male skin=(palette 1, sn 3)
item id=10200003 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.022728128 pos=<0, 0, 0> rot=<0, 0, 0>
control index=1 scale=1 pos=<0, 0, 0> rot=<0, 0, 0>
item id=10300002 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0
gender=Female skin=(palette 1, sn 2)
item id=10200012 slot=HR palette=2 sn=8 controls=2
control index=0 scale=0.9497216 pos=<38.34204, -15.128418, -25.4962> rot=<22.039236, -77.53772, 3.0630174>
control index=1 scale=0.9497216 pos=<38.308838, -15.503052, 25.071304> rot=<157.24625, -77.53734, -3.0525467>
item id=10300004 slot=FA palette=3 sn=9 controls=0
item id=10500001 slot=ER palette=0 sn=-1 controls=0
item id=10400000 slot=FD palette=0 sn=-1 controls=0

dotnet build clean (0 errors), dotnet format whitespace --verify-no-changes clean.

Not run: dotnet test Maple2.File.Tests. It cannot start on my machine - TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data folder, which fails every test in the project, including untouched ones like TestMaidRecipe. The new TestDefaultCharacterInfo is therefore unexecuted; it asserts the same structure the harness above confirmed.


View with [code]smithAutofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features

    • Added support for parsing default character information, including gender, skin palettes, equipped items, controls, and positioning data.
    • Updated the parser package to version 2.4.21.
  • Tests

    • Added coverage validating default character data, appearance slots, item identifiers, palette overrides, and character transforms.

Adds DefaultCharacterInfoRoot plus ServerTableParser.ParseDefaultCharacterInfo,
so consumers can read the per-gender default appearance (skin palette and the
HR/FA/FD/ER items with their hair controls) instead of hand-rolling an
XmlDocument walk over the entry.
colorSN defaults to -1 rather than 0: the attribute is absent on slots that keep
the palette's own swatch, and 0 is a real swatch index.
Verified against Server.m2d: both gender blocks, all four slots each, the two
hair controls with their Vector3 position/rotation, and the -1 sentinel on ER/FD
all round-trip to the raw XML. Maple2.File.Tests cannot run on this machine -
TestUtils' static constructor trips a Debug.Fail inside AssetIndex for this data
folder, which fails every test in the project including untouched ones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c462d680-b145-44a1-a812-6b9bb63131c9

📥 Commits

Reviewing files that changed from the base of the PR and between d12f8a2 and 2cefa54.

📒 Files selected for processing (4)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/ServerTableParser.cs
  • Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs
  • Maple2.File.Tests/ServerTableParserTest.cs

📝 Walkthrough

Walkthrough

Adds XML models and ServerTableParser support for defaultCharacterInfo.xml. The test suite validates parsed genders, skin palettes, equipment slots, item IDs, palette sentinels, and control transforms. The parser package version increases from 2.4.20 to 2.4.21.

Changes

Default character info parsing

Layer / File(s)Summary
XML model and parser support
Maple2.File.Parser/Xml/Table/Server/DefaultCharacterInfo.cs, Maple2.File.Parser/ServerTableParser.cs
Adds XML-mapped default character models and a ParseDefaultCharacterInfo() method that returns entries keyed by Gender.
Parser validation and package update
Maple2.File.Tests/ServerTableParserTest.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds assertions for parsed character data and updates the package version to 2.4.21.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
participant ServerTableParser
participant defaultCharacterInfo.xml
participant XmlSerializer
ServerTableParser->>defaultCharacterInfo.xml: Load table data
ServerTableParser->>XmlSerializer: Deserialize DefaultCharacterInfoRoot
XmlSerializer-->>ServerTableParser: Return gender entries
Loading

Possibly related PRs

Suggested reviewers:zintixx

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/default-character-info-parser

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AngeloTadeucci
AngeloTadeucci merged commit 523d1ed into masterAug 5, 2026
3 of 4 checks passed
@AngeloTadeucci
AngeloTadeucci deleted the feat/default-character-info-parser branch August 5, 2026 15:32
Sign up for freeto 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.

1 participant

@AngeloTadeucci