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

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

coderabbitai Bot 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 name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the two main changes: adding a custom grade to ItemOptionRandom and parsing map xblock files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check 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.

@coderabbitai coderabbitai Bot 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/bash
set -euo pipefail

echo "== files =="
git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$|XBlockParser|Xml' || true

echo "== candidate file sizes =="
for f in $(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$'); do
  stat -c '%n %s bytes' "$f"
done

echo "== outlines =="
for f in $(git ls-files | rg '(^|/)MapXBlock\.cs$|(^|/)XmlVector3Generator\.cs$'); do
  echo "--- $f ---"
  ast-grep outline "$f" || true
done

echo "== MapXBlock excerpt =="
f=$(git ls-files | rg '(^|/)MapXBlock\.cs$' | head -n1)
if [ -n "${f:-}" ]; then
  nl -ba "$f" | sed -n '1,120p'
fi

echo "== 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/bash
set -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'
fi

echo "== XmlVector3Generator excerpt =="
g=$(git ls-files | rg '(^|/)XmlVector3Generator\.cs$' | head -n1)
if [ -n "${g:-}" ]; then
  nl -ba "$g" | sed -n '1,260p'
fi

echo "== XBlockParser relevant excerpts =="
p=$(git ls-files | rg '(^|/)XBlockParser\.cs$' | head -n1)
if [ -n "${p:-}" ]; then
  nl -ba "$p" | sed -n '1,220p'
fi

echo "== culture-sensitive parse/format behavior with fr-FR =="
python3 - <<'PY'
from decimal import Decimal, DecimalContextError

values = ["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}")
PY

echo "== 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 sh
set -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:master Jul 27, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants