Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@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

Custom Grade on ItemOptionRandom, Parse map xblock file - #75

Merged
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2
Jul 27, 2026
Merged

Custom Grade on ItemOptionRandom, Parse map xblock file#75
AngeloTadeucci merged 3 commits into
MS2Community:masterfrom
Zintixx:fixes2

Conversation

@Zintixx

@ZintixxZintixx commented Jul 27, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features
    • Added support for parsing map configuration data, including minimaps, cameras, screens, fog, height fog, and client properties.
    • Added support for reading item option random grades from XML data.
  • Improvements
    • Updated the parser package to version 2.4.18.

@coderabbitai

coderabbitaiBot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds XML-serializable models for map configuration data, exposes an ItemOptionRandom.grade XML attribute, and increments the parser package version from 2.4.17 to 2.4.18.

Changes

Parser model updates

Layer / File(s)Summary
Map XML serialization models
Maple2.File.Parser/Xml/Map/MapXBlock.cs
Adds models for the ms2 root, client properties, minimap sections, fog, and height fog XML data.
Table attribute and package version
Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs, Maple2.File.Parser/Maple2.File.Parser.csproj
Adds the serialized grade attribute to ItemOptionRandom and updates the package version to 2.4.18.

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

Possibly related PRs

Suggested reviewers:angelotadeucci

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs`:
- Around line 54-55: Update XmlVector3Generator so M2dVector3 serialization
formats all Vector3 components with invariant culture and parsing uses the same
invariant provider. Preserve the X,Y,Z representation used by
MapXBlockCamera.position and camera.rotation, and add a regression test that
exercises round-trip XML serialization/parsing under a culture using comma
decimal separators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f763c35-a322-4cd2-bc36-a0ba21e2b54e

📥 Commits

Reviewing files that changed from the base of the PR and between c64ffe8 and 0c75a3d.

📒 Files selected for processing (3)
  • Maple2.File.Parser/Maple2.File.Parser.csproj
  • Maple2.File.Parser/Xml/Map/MapXBlock.cs
  • Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs

Comment on lines +54 to +55
[M2dVector3] public Vector3 position;
[M2dVector3] public Vector3 rotation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml'||trueecho"== candidate file sizes =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');do
stat -c '%n %s bytes'"$f"doneecho"== outlines =="forfin$(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$');doecho"--- $f ---"
ast-grep outline "$f"||truedoneecho"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,120p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,240p'fi

Repository: MS2Community/Maple2.File

Length of output: 18515


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$'| head -n1)if [ -n"${f:-}" ];then
nl -ba "$f"| sed -n '1,140p'fiecho"== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$'| head -n1)if [ -n"${g:-}" ];then
nl -ba "$g"| sed -n '1,260p'fiecho"== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$'| head -n1)if [ -n"${p:-}" ];then
nl -ba "$p"| sed -n '1,220p'fiecho"== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'from decimal import Decimal, DecimalContextErrorvalues = ["123.45", "123,456"]for v in values: for locale_decimal in [".", ","]: # Simulate C# float.Split(' ') + decimal.Parse(string, currentCulture) # when currentCulture DecimalSeparator == "." if locale_decimal == ".": try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" else: try: parsed = float(v.replace(",", ".")) except ValueError as e: parsed = f"parse-fail-{type(e).__name__}" print(f"value={v}, locale_decimal={locale_decimal!r}, parsed={parsed}")PYecho"== behavioral probe of C# culture parsing in Python? only locale examples maybe sufficient =="

Repository: MS2Community/Maple2.File

Length of output: 226


🏁 Script executed:

#!/bin/env shset -euo pipefail
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/Xml/Map/MapXBlock.cs | sed -n '1,140p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Generator/XmlVector3Generator.cs | sed -n '1,260p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParser.cs | sed -n '1,240p'
awk '{ printf "%6d\t%s\n", NR, $0 }' Maple2.File.Parser/MapXBlock/XBlockParserTest.cs | sed -n '1,400p'

Repository: MS2Community/Maple2.File

Length of output: 15378


Make generated Vector3 XML serialization culture-invariant.

MapXBlockCamera.position and camera.rotation use M2dVector3, which emits X,Y,Z and parses components with float.Parse without an invariant provider. In a culture where , is the decimal separator, serialized values can split/misparse or reject valid xblock XML. Update XmlVector3Generator to use invariant formatting/parsing and add a regression test under such a culture.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Maple2.File.Parser/Xml/Map/MapXBlock.cs` around lines 54 - 55, Update
XmlVector3Generator so M2dVector3 serialization formats all Vector3 components
with invariant culture and parsing uses the same invariant provider. Preserve
the X,Y,Z representation used by MapXBlockCamera.position and camera.rotation,
and add a regression test that exercises round-trip XML serialization/parsing
under a culture using comma decimal separators.

@AngeloTadeucci
AngeloTadeucci merged commit 8d65e29 into MS2Community:masterJul 27, 2026
3 checks passed
@Zintixx
Zintixx deleted the fixes2 branch August 5, 2026 05:21
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.

2 participants

@Zintixx@AngeloTadeucci