Skip to content

Recover pt quest/script files lost in the #55 flip - #61

Merged
Zintixx merged 1 commit into
mainfrom
recover-pt-quest-files
Jul 28, 2026
Merged

Recover pt quest/script files lost in the #55 flip#61
Zintixx merged 1 commit into
mainfrom
recover-pt-quest-files

Conversation

@Zintixx

@Zintixx Zintixx commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Follow-up to #60. That PR stopped further loss; this restores what was already gone.

The in-place flip (#55) deleted pt's questdescription_* / scriptquest_* fragments even though pt has no combined questdescription_final.json / scriptquest.json to replace them — the bug #60 fixed. So pt's quest data was lost entirely.

Restores the 29 files from 3b7ec8a3 (last commit before #55): 5,864 quest entries, 4,755 of them real Portuguese translations (the rest are KMS placeholders).

Verified:

Scope: pt only. en/cn/jp/kr are unaffected — their fragments were correctly absorbed into the committed combined outputs, so restoring their individuals would duplicate and re-introduce untranslated-source overrides.

🤖 Generated with Claude Code


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

Summary by CodeRabbit

  • New Features
    • Added extensive Portuguese localization for quest descriptions across daily missions, story content, events, tutorials, guilds, fame systems, items, fields, and world quests.
    • Added Portuguese dialogue and script text for tutorials, events, guild activities, fame content, item interactions, and NPC conversations.
    • Added supporting localization resources for previously unavailable quest and script categories.

The in-place flip's RemoveAbsorbedSourceFiles deleted pt's questdescription_*/
scriptquest_* fragments even though pt has no combined questdescription_final.json/
scriptquest.json to replace them (the bug fixed in #60), so the data was lost.

Restores the 29 files from 3b7ec8a (last commit before #55): ~5,864 quest entries,
of which 4,755 are real Portuguese translations. Verified: they parse as valid XML,
and with the #60 fix in place a full json-to-xml-all no longer deletes them
(pt has no combined output). verify-all passes.

Other locales (en/cn/jp/kr) are not affected — their fragments were correctly
absorbed into the committed combined outputs, so their data is preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review Change Stack

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: aa27d2d7-e3d3-4662-9b8b-65b326768b79

📥 Commits

Reviewing files that changed from the base of the PR and between 6ff7abf and 9a8736a.

📒 Files selected for processing (29)
  • Xml/string/pt/questdescription_dailymission.xml
  • Xml/string/pt/questdescription_epic.xml
  • Xml/string/pt/questdescription_eventcn.xml
  • Xml/string/pt/questdescription_eventcommon.xml
  • Xml/string/pt/questdescription_eventkr.xml
  • Xml/string/pt/questdescription_eventna.xml
  • Xml/string/pt/questdescription_famecontents.xml
  • Xml/string/pt/questdescription_famefield .xml
  • Xml/string/pt/questdescription_famemission.xml
  • Xml/string/pt/questdescription_field.xml
  • Xml/string/pt/questdescription_guide.xml
  • Xml/string/pt/questdescription_guild.xml
  • Xml/string/pt/questdescription_item.xml
  • Xml/string/pt/questdescription_levelguide.xml
  • Xml/string/pt/questdescription_mentoring.xml
  • Xml/string/pt/questdescription_tutorial.xml
  • Xml/string/pt/questdescription_wedding.xml
  • Xml/string/pt/questdescription_world.xml
  • Xml/string/pt/scriptquest_epic.xml
  • Xml/string/pt/scriptquest_eventcommon.xml
  • Xml/string/pt/scriptquest_eventna.xml
  • Xml/string/pt/scriptquest_famecontents.xml
  • Xml/string/pt/scriptquest_famefield.xml
  • Xml/string/pt/scriptquest_famemission.xml
  • Xml/string/pt/scriptquest_guide.xml
  • Xml/string/pt/scriptquest_guild.xml
  • Xml/string/pt/scriptquest_item.xml
  • Xml/string/pt/scriptquest_tutorial.xml
  • Xml/string/pt/scriptquest_world.xml
👮 Files not reviewed due to content moderation or server errors (1)
  • Xml/string/pt/scriptquest_epic.xml

📝 Walkthrough

Walkthrough

Adds Portuguese XML localization resources for quest descriptions and scripted dialogue across daily, epic, event, FameContents, guild, world, guide, item, tutorial, and related content categories.

Changes

Portuguese quest descriptions

Layer / File(s) Summary
Quest description datasets
Xml/string/pt/questdescription_*.xml
Adds Portuguese quest records with localized names, descriptions, objectives, metadata, feature flags, and dynamic game placeholders across world, daily, epic, event, guide, guild, item, level, tutorial, and related quest families.
Fame quest descriptions
Xml/string/pt/questdescription_fame*.xml
Adds FameContents and Kritias quest records with Portuguese mission text, completion metadata, UI descriptions, feature variants, and templated references.

Portuguese scripted dialogue

Layer / File(s) Summary
Event and feature dialogues
Xml/string/pt/scriptquest_event*.xml, Xml/string/pt/scriptquest_fame*.xml, Xml/string/pt/scriptquest_guild.xml, Xml/string/pt/scriptquest_item.xml
Adds Portuguese event, FameContents, FameField, guild, and item-related dialogue keys with NPC, quest, item, map, gender, and formatting placeholders.
Guide and tutorial dialogues
Xml/string/pt/scriptquest_guide.xml, Xml/string/pt/scriptquest_tutorial.xml
Adds Portuguese guide and tutorial dialogue covering occupations, Dynamic Actions, class stories, content systems, mascot mechanics, survival training, and Colosseum interactions.

Estimated code review effort: 5 (Critical) | ~120 minutes

🚥 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 accurately summarizes the main change: restoring Portuguese quest/script XML files deleted by the #55 flip.
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
  • Commit unit tests in branch recover-pt-quest-files

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: 11

🤖 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 `@Xml/string/pt/questdescription_famecontents.xml`:
- Line 125: Correct the dynamic IDs in the quest entries: update quest
91000520’s descFameUI to use $npcName:23000301$, and update the dungeonTitle
reference on line 139 from $dungeonTitle:230410031$ to $dungeonTitle:23041003$
to match the corresponding objectives.

In `@Xml/string/pt/questdescription_guide.xml`:
- Line 77: Update the desc attribute of quest 90000442 to reference NPC
11001629, matching the existing manual and complete objectives; leave all other
quest attributes unchanged.

In `@Xml/string/pt/questdescription_guild.xml`:
- Around line 4-5: Close every encoded bold tag in the affected quest
descriptions by adding the matching &lt;/b&gt; after each requirement text
beginning with &lt;b&gt;, including quest entries 73000002 and 73000003 and all
similarly affected neighboring rows. Preserve the existing Portuguese text and
XML encoding.

In `@Xml/string/pt/questdescription_tutorial.xml`:
- Line 25: Correct the malformed item token in quest 10001330’s desc attribute
by adding the missing opening dollar sign before item:30000054$, preserving the
rest of the quest text unchanged.

In `@Xml/string/pt/questdescription_world.xml`:
- Line 509: Update quest 30000032’s references to match its objectives: change
the description’s target NPC from 23100006 to 23000006, and change the map
reference at the related entry around line 582 from 02000347 to 02000348,
preserving the existing quest text and formatting.
- Line 709: In the quest entry identified by questID 40001820, correct the
inline markup in the desc attribute by replacing the mismatched closing font tag
after “seis” with the matching italic closing tag, while preserving the
surrounding text.
- Around line 293-294: Update the manual attribute of quest 20001001 to use item
placeholder ID 20000055 instead of 020000055, matching the item ID used in the
quest description and the surrounding quest chain.

In `@Xml/string/pt/scriptquest_famemission.xml`:
- Line 4653: Update the embedded font markup in key 1228173721028574 so the
color value uses the same quoted attribute format as sibling notices, preserving
the existing `#909090` color and message text.

In `@Xml/string/pt/scriptquest_guide.xml`:
- Around line 411-412: Correct the Portuguese sentence in both entries
identified by keys 1204024704000421 and 1124232104000373 by adding the missing
subject after “Mesmo que”, while keeping the remainder of the dialogue
unchanged.
- Line 220: Update the affected dialogue name attributes identified by keys at
lines 220, 472, 1024, and 1111: replace the invalid `#pp2` color token with the
intended valid color token, and remove stray closing </font> or </b> markup from
the attribute values while preserving the intended inline formatting and XML
validity.

In `@Xml/string/pt/scriptquest_world.xml`:
- Line 2107: Clean up the specified restored PT dialogue entries in the string
data: fix the mismatched closing tag for 0831175903000320, remove the editorial
prefix from 0831175903000891, remove orphan or misplaced italic markup in
1228034903001929 and 1228034903002016, and correct the malformed bold markup in
0831175903000124. Preserve the intended dialogue text while ensuring all
rendered rich-text tags are valid and balanced.
🪄 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: aa27d2d7-e3d3-4662-9b8b-65b326768b79

📥 Commits

Reviewing files that changed from the base of the PR and between 6ff7abf and 9a8736a.

📒 Files selected for processing (29)
  • Xml/string/pt/questdescription_dailymission.xml
  • Xml/string/pt/questdescription_epic.xml
  • Xml/string/pt/questdescription_eventcn.xml
  • Xml/string/pt/questdescription_eventcommon.xml
  • Xml/string/pt/questdescription_eventkr.xml
  • Xml/string/pt/questdescription_eventna.xml
  • Xml/string/pt/questdescription_famecontents.xml
  • Xml/string/pt/questdescription_famefield .xml
  • Xml/string/pt/questdescription_famemission.xml
  • Xml/string/pt/questdescription_field.xml
  • Xml/string/pt/questdescription_guide.xml
  • Xml/string/pt/questdescription_guild.xml
  • Xml/string/pt/questdescription_item.xml
  • Xml/string/pt/questdescription_levelguide.xml
  • Xml/string/pt/questdescription_mentoring.xml
  • Xml/string/pt/questdescription_tutorial.xml
  • Xml/string/pt/questdescription_wedding.xml
  • Xml/string/pt/questdescription_world.xml
  • Xml/string/pt/scriptquest_epic.xml
  • Xml/string/pt/scriptquest_eventcommon.xml
  • Xml/string/pt/scriptquest_eventna.xml
  • Xml/string/pt/scriptquest_famecontents.xml
  • Xml/string/pt/scriptquest_famefield.xml
  • Xml/string/pt/scriptquest_famemission.xml
  • Xml/string/pt/scriptquest_guide.xml
  • Xml/string/pt/scriptquest_guild.xml
  • Xml/string/pt/scriptquest_item.xml
  • Xml/string/pt/scriptquest_tutorial.xml
  • Xml/string/pt/scriptquest_world.xml
👮 Files not reviewed due to content moderation or server errors (1)
  • Xml/string/pt/scriptquest_epic.xml

<quest questID="91000490" name="Vendo Fantasmas" desc="Até você descobrir quais são as habilidades do seu novo inimigo, é muito arriscado enfrentá-lo. Volte ao QG da Aliança para definir qual será a sua próxima missão." manual="" complete="Fale com o $npcName:11004316$ em $map:02020041$" count="" feature="Kritias_2018_12" locale="" locking="0" descFameUI="Volte a $map:02020041$ para ver quais são suas opções" />
<quest questID="91000500" name="O Preço do Poder" desc="O $npcName:11004316$ fala que invocou o Olho do Destino para descobrir a localização do $npcName:23000301$. &#x0A;&#x0A;Parece que você deve ir para a $map:02020032$." manual="" complete='Aperte o botão &quot;Encerrar&quot;' count="" feature="Kritias_2018_12" locale="" locking="0" descFameUI="O $npcName:11004316$ fala que invocou o Olho do Destino para descobrir a localização do $npcName:23000301$. &#x0A;&#x0A;Parece que você deve ir para a $map:02020032$." />
<quest questID="91000510" name="O Preço do Poder" desc='Você levou o &quot;Detector de Ondas das Trevas&quot; da Nairin para a $map:02020032$ com a esperança de conseguir rastrear o $npcName:23000301$, mas parece que o aparelho quebrou. Enquanto espera os reparos, diminua o Exército Daemon.&#x0A;&#x0A;Derrote os $npcNamePlural:25020701$, os $npcNamePlural:25020702$ e os $npcNamePlural:25020703$ na $map:02020032$.' manual="Derrote os $npcNamePlural:25020701$, os $npcNamePlural:25020702$ e os $npcNamePlural:25020703$." complete='Aperte o botão &quot;Encerrar&quot;' count="1" feature="Kritias_2018_12" locale="" locking="0" descFameUI="Enquanto espera notícias do $npcName:11004316$, diminua o número dos Soldados dos Daemons na região." />
<quest questID="91000520" name="O Preço do Poder" desc="Como não é possível consertar o Detector de Ondas das Trevas, o $npcName:11004316$ invocou mais uma vez o Olho do Destino para encontrar o $npcName:23000301$. &#x0A;&#x0A;Parece que o seu próximo destino é o $map:02020016$." manual="" complete='Aperte o botão &quot;Encerrar&quot;' count="" feature="Kritias_2018_12" locale="" locking="0" descFameUI="O $npcName:23000130$ foi localizado no $map:02020016$. Vá para lá imediatamente." />

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 | 🟡 Minor | ⚡ Quick win

Correct the inconsistent dynamic IDs.

  • Line 125 references $npcName:23000130$ in descFameUI, while the quest description and surrounding chain use $npcName:23000301$.
  • Line 139 uses $dungeonTitle:230410031$, but the corresponding objectives use $dungeonTitle:23041003$.
Proposed fixes
- $npcName:23000130$ foi localizado
+ $npcName:23000301$ foi localizado

- $dungeonTitle:230410031$
+ $dungeonTitle:23041003$

Also applies to: 139-139

🤖 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 `@Xml/string/pt/questdescription_famecontents.xml` at line 125, Correct the
dynamic IDs in the quest entries: update quest 91000520’s descFameUI to use
$npcName:23000301$, and update the dungeonTitle reference on line 139 from
$dungeonTitle:230410031$ to $dungeonTitle:23041003$ to match the corresponding
objectives.

<quest questID="90000439" name="Uma Lição sobre Confiança" desc="Após desmaiar no meio da sua luta, você aprende da pior maneira que aceitar bebidas de pessoas suspeitas, como o chefe do crime $npc:11001629$, pode não ser uma boa ideia.&#x0A;&#x0A;Volte para o $map:63000019$ e confronte $npc:11001629$." manual="Fale com $npc:11001629$ no $map:63000019$" complete="Confronte $npc:11001629$ no $map:63000019$" count="0" feature="Striker" locale="" locking="0" />
<quest questID="90000440" name="O que é Justo é Justo" desc="Não está claro como as coisas chegaram a esse ponto, mas você acabou tendo que trabalhar para o seu pior inimigo, $npc:11001629$. Ele tem um serviço para você, que envolve a Imperatriz e $map:02000001$.&#x0A;&#x0A;Para mais informações sobre o serviço, fale com seus encarregados no $map:63000023$." manual="Viaje até o $map:63000023$" complete="Fale com seus encarregados no $map:63000023$" count="0" feature="Striker" locale="" locking="0" />
<quest questID="90000441" name="Porto de Lith" desc="Acabou que seus novos encarregados são $npc:11001545$ e $npc:11001546$, que você conheceu na sede da Estrela Negra.&#x0A;&#x0A;De acordo com $npcName:11001631$, a organização está planejando vender mercadorias no evento da Imperatriz por muito dinheiro e é seu trabalho defender o carregamento.&#x0A;&#x0A;Você não gosta de ajudar bandidos, mas agora está difícil enxergar outra opção. Entre no carro e viaje até o $map:02000062$." manual="Viaje até o $map:02000062$" complete="Fale com $npcName:11003180$" count="0" feature="Striker" locale="" locking="0" />
<quest questID="90000442" name="Suco ou Algo do Tipo" desc="Você tomou a bebida que pegou com a $npc:11001624$. É melhor falar com $npc:11001623$." manual="Diga a $npc:11001629$ o que achou da bebida" complete="Diga a $npc:11001629$ o que achou da bebida" count="0" feature="Striker" locale="" locking="0" />

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 | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate and inspect the referenced XML file and matching quest object.
fd -a 'questdescription_guide.xml' . || true
if [ -f "Xml/string/pt/questdescription_guide.xml" ]; then
  echo '--- target line ---'
  nl -ba "Xml/string/pt/questdescription_guide.xml" | sed -n '70,82p'
  echo '--- quest references ---'
  rg -n 'questID="90000442"|<quest questID="90000442"|1100162(3|4|9)|Suco ou Algo do Tipo' "Xml/string/pt/questdescription_guide.xml" "Xml" || true
fi

Repository: MS2Community/MapleStory2-XML

Length of output: 346


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- target line and surrounding context ---'
awk 'NR>=70 && NR<=82 { printf "%6d\t%s\n", NR, $0 }' "Xml/string/pt/questdescription_guide.xml"

echo '--- quest and NPC references in target file ---'
grep -nE 'questID="90000442"|1100162(3|4|9)|Suco ou Algo do Tipo' "Xml/string/pt/questdescription_guide.xml" || true

echo '--- matching quest definition in quest files ---'
find Xml -type f \( -name '*.xml' \) -exec grep -l '90000442' {} \; | while read -r f; do
  echo "### $f"
  grep -nE '90000442|1100162(3|4|9)|Suco ou Algo do Tipo|Sucos ou Algo do Tipo' "$f" || true
done

Repository: MS2Community/MapleStory2-XML

Length of output: 158


🏁 Script executed:

#!/bin/bash
set -u
shopt -s nullglob

echo '--- target file line count ---'
wc -l "Xml/string/pt/questdescription_guide.xml"

echo '--- target line and surrounding context ---'
awk 'NR>=70 && NR<=82 { printf "%6d\t%s\n", NR, $0 }' "Xml/string/pt/questdescription_guide.xml"

echo '--- quest/objective NPC references in target file ---'
grep -n -E 'questID="90000442"|npc:1100162(3|4|9)|Suco ou Algo do Tipo' "Xml/string/pt/questdescription_guide.xml" || true

echo '--- files mentioning quest 90000442 ---'
mapfile -t files < <(grep -Rl -E '90000442' Xml 2>/dev/null | head -50)
for f in "${files[@]}"; do
  echo "### $f"
  grep -n -E '90000442|npc:1100162(3|4|9)|Suco ou Algo do Tipo' "$f" || true
done

Repository: MS2Community/MapleStory2-XML

Length of output: 7659


Align the description with the reported NPC.

Quest 90000442’s objectives are to tell $npc:11001629$ how the drink was, but desc currently sends the player to $npc:11001623$. Update the description to match the objective NPC.

🤖 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 `@Xml/string/pt/questdescription_guide.xml` at line 77, Update the desc
attribute of quest 90000442 to reference NPC 11001629, matching the existing
manual and complete objectives; leave all other quest attributes unchanged.

Comment on lines +4 to +5
<quest questID="73000002" name="Mundo Maple em Harmonia!" desc="Derrote monstros mecânicos &lt;b&gt;(Requer pelo menos 3 membros da guilda)&#x0A;&#x0A;$npcName:11200005$ lhe deu uma missão de guilda. Forme uma equipe com pelo menos 3 membros da guilda e derrote monstros mecânicos." manual="Derrote inimigos do tipo máquina junto com membros de sua guilda" complete="Fale com $npcName:11200005$ na sede de sua guilda" count="1" feature="Season1" locale="" locking="0" />
<quest questID="73000003" name="Mundo Maple em Harmonia!" desc="Derrote monstros insetos &lt;b&gt;(Requer pelo menos 3 membros da guilda)&#x0A;&#x0A;$npcName:11200005$ lhe deu uma missão de guilda. Forme uma equipe com pelo menos 3 membros da guilda e derrote monstros insetos." manual="Derrote monstros insetos junto com membros de sua guilda" complete="Fale com $npcName:11200005$ na sede de sua guilda" count="1" feature="Season1" locale="" locking="0" />

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 | 🟡 Minor | ⚡ Quick win

Close the encoded <b> tags in these descriptions.

These rows contain &lt;b&gt; without the matching &lt;/b&gt;, unlike the neighboring entries. After decoding, the requirement text may leave the rest of the quest description bold or produce inconsistent rich-text rendering.

Proposed fix pattern
- ... &lt;b&gt;(Requer pelo menos 3 membros da guilda)&`#x0A`;
+ ... &lt;b&gt;(Requer pelo menos 3 membros da guilda)&lt;/b&gt;&`#x0A`;

Also applies to: 8-11, 13-13, 15-22, 24-25, 28-31, 33-33, 35-42

🤖 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 `@Xml/string/pt/questdescription_guild.xml` around lines 4 - 5, Close every
encoded bold tag in the affected quest descriptions by adding the matching
&lt;/b&gt; after each requirement text beginning with &lt;b&gt;, including quest
entries 73000002 and 73000003 and all similarly affected neighboring rows.
Preserve the existing Portuguese text and XML encoding.

<quest questID="10001121" name="Unusual Circumstances" desc="Poor $npc:11000118$…&#x0A;She needs some assistance after injuring her hand. Someone needs to help her harvest the clams that hold pearls in $map:63000002$!&#x0A;Start searching for $item:30000008$!" manual="Collect $item:30000008$ in $map:63000002$" complete="Meet $npc:11000118$ at $map:63000002$" count="1" locale="" locking="1" />
<quest questID="10001130" name="O Turtle! My Turtle!" desc="$npc:11000053$ made a request to bring $item:20000013$, which is located at Turtle Hill where $npc:22300149$ appears.&#x0A;It&apos;s not going to be easy...but nothing worthwhile ever is, right?" manual="Save $item:20000013$ in $map:63000002$" complete="Meet $npc:11000053$ at $map:63000002$" count="1" locale="" locking="1" />
<quest questID="10001140" name="Leaving Lith Harbor" desc="Are there not enough ships because so many people are trying to go to $map:02000062$? &#x0A;If that&apos;s the case, it&apos;ll probably be best to go to $map:63000002$ port and speak with $npc:11000016$ personally to see if a ship is available." manual="" complete="Meet $npc:11000016$ the oarsman at $map:63000002$" count="" locale="" locking="1" />
<quest questID="10001330" name="The Fates That Bind Us" desc="I met $npc:11000110$ again in Victoria Island and he made another request. I don&apos;t hesitate to help those who I&apos;ve only met once, so there&apos;s no reason why I can&apos;t help someone I&apos;ve known since Maple Island.&#x0A;Let&apos;s defeat the monsters in the grass underneath the $map:02000114$ bridge, and find item:30000054$ that $npc:11000110$ lost." manual="Defeat the monsters in $map:02000114$ and recover $item:30000054$" complete="Meet $npc:11000110$ at $map:02000114$" count="1" locale="" locking="1" />

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 | 🟡 Minor | ⚡ Quick win

Fix the malformed item token.

item:30000054$ is missing the opening $, so the item reference cannot be resolved.

Proposed fix
- ... find item:30000054$ that ...
+ ... find $item:30000054$ that ...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<quest questID="10001330" name="The Fates That Bind Us" desc="I met $npc:11000110$ again in Victoria Island and he made another request. I don&apos;t hesitate to help those who I&apos;ve only met once, so there&apos;s no reason why I can&apos;t help someone I&apos;ve known since Maple Island.&#x0A;Let&apos;s defeat the monsters in the grass underneath the $map:02000114$ bridge, and find item:30000054$ that $npc:11000110$ lost." manual="Defeat the monsters in $map:02000114$ and recover $item:30000054$" complete="Meet $npc:11000110$ at $map:02000114$" count="1" locale="" locking="1" />
<quest questID="10001330" name="The Fates That Bind Us" desc="I met $npc:11000110$ again in Victoria Island and he made another request. I don&apos;t hesitate to help those who I&apos;ve only met once, so there&apos;s no reason why I can&apos;t help someone I&apos;ve known since Maple Island.&`#x0A`;Let&apos;s defeat the monsters in the grass underneath the $map:02000114$ bridge, and find $item:30000054$ that $npc:11000110$ lost." manual="Defeat the monsters in $map:02000114$ and recover $item:30000054$" complete="Meet $npc:11000110$ at $map:02000114$" count="1" locale="" locking="1" />
🤖 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 `@Xml/string/pt/questdescription_tutorial.xml` at line 25, Correct the
malformed item token in quest 10001330’s desc attribute by adding the missing
opening dollar sign before item:30000054$, preserving the rest of the quest text
unchanged.

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 11

🤖 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 `@Xml/string/pt/questdescription_famecontents.xml`:
- Line 125: Correct the dynamic IDs in the quest entries: update quest
91000520’s descFameUI to use $npcName:23000301$, and update the dungeonTitle
reference on line 139 from $dungeonTitle:230410031$ to $dungeonTitle:23041003$
to match the corresponding objectives.

In `@Xml/string/pt/questdescription_guide.xml`:
- Line 77: Update the desc attribute of quest 90000442 to reference NPC
11001629, matching the existing manual and complete objectives; leave all other
quest attributes unchanged.

In `@Xml/string/pt/questdescription_guild.xml`:
- Around line 4-5: Close every encoded bold tag in the affected quest
descriptions by adding the matching &lt;/b&gt; after each requirement text
beginning with &lt;b&gt;, including quest entries 73000002 and 73000003 and all
similarly affected neighboring rows. Preserve the existing Portuguese text and
XML encoding.

In `@Xml/string/pt/questdescription_tutorial.xml`:
- Line 25: Correct the malformed item token in quest 10001330’s desc attribute
by adding the missing opening dollar sign before item:30000054$, preserving the
rest of the quest text unchanged.

In `@Xml/string/pt/questdescription_world.xml`:
- Line 509: Update quest 30000032’s references to match its objectives: change
the description’s target NPC from 23100006 to 23000006, and change the map
reference at the related entry around line 582 from 02000347 to 02000348,
preserving the existing quest text and formatting.
- Line 709: In the quest entry identified by questID 40001820, correct the
inline markup in the desc attribute by replacing the mismatched closing font tag
after “seis” with the matching italic closing tag, while preserving the
surrounding text.
- Around line 293-294: Update the manual attribute of quest 20001001 to use item
placeholder ID 20000055 instead of 020000055, matching the item ID used in the
quest description and the surrounding quest chain.

In `@Xml/string/pt/scriptquest_famemission.xml`:
- Line 4653: Update the embedded font markup in key 1228173721028574 so the
color value uses the same quoted attribute format as sibling notices, preserving
the existing `#909090` color and message text.

In `@Xml/string/pt/scriptquest_guide.xml`:
- Around line 411-412: Correct the Portuguese sentence in both entries
identified by keys 1204024704000421 and 1124232104000373 by adding the missing
subject after “Mesmo que”, while keeping the remainder of the dialogue
unchanged.
- Line 220: Update the affected dialogue name attributes identified by keys at
lines 220, 472, 1024, and 1111: replace the invalid `#pp2` color token with the
intended valid color token, and remove stray closing </font> or </b> markup from
the attribute values while preserving the intended inline formatting and XML
validity.

In `@Xml/string/pt/scriptquest_world.xml`:
- Line 2107: Clean up the specified restored PT dialogue entries in the string
data: fix the mismatched closing tag for 0831175903000320, remove the editorial
prefix from 0831175903000891, remove orphan or misplaced italic markup in
1228034903001929 and 1228034903002016, and correct the malformed bold markup in
0831175903000124. Preserve the intended dialogue text while ensuring all
rendered rich-text tags are valid and balanced.
🪄 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: aa27d2d7-e3d3-4662-9b8b-65b326768b79

📥 Commits

Reviewing files that changed from the base of the PR and between 6ff7abf and 9a8736a.

📒 Files selected for processing (29)
  • Xml/string/pt/questdescription_dailymission.xml
  • Xml/string/pt/questdescription_epic.xml
  • Xml/string/pt/questdescription_eventcn.xml
  • Xml/string/pt/questdescription_eventcommon.xml
  • Xml/string/pt/questdescription_eventkr.xml
  • Xml/string/pt/questdescription_eventna.xml
  • Xml/string/pt/questdescription_famecontents.xml
  • Xml/string/pt/questdescription_famefield .xml
  • Xml/string/pt/questdescription_famemission.xml
  • Xml/string/pt/questdescription_field.xml
  • Xml/string/pt/questdescription_guide.xml
  • Xml/string/pt/questdescription_guild.xml
  • Xml/string/pt/questdescription_item.xml
  • Xml/string/pt/questdescription_levelguide.xml
  • Xml/string/pt/questdescription_mentoring.xml
  • Xml/string/pt/questdescription_tutorial.xml
  • Xml/string/pt/questdescription_wedding.xml
  • Xml/string/pt/questdescription_world.xml
  • Xml/string/pt/scriptquest_epic.xml
  • Xml/string/pt/scriptquest_eventcommon.xml
  • Xml/string/pt/scriptquest_eventna.xml
  • Xml/string/pt/scriptquest_famecontents.xml
  • Xml/string/pt/scriptquest_famefield.xml
  • Xml/string/pt/scriptquest_famemission.xml
  • Xml/string/pt/scriptquest_guide.xml
  • Xml/string/pt/scriptquest_guild.xml
  • Xml/string/pt/scriptquest_item.xml
  • Xml/string/pt/scriptquest_tutorial.xml
  • Xml/string/pt/scriptquest_world.xml
👮 Files not reviewed due to content moderation or server errors (1)
  • Xml/string/pt/scriptquest_epic.xml
🛑 Comments failed to post (7)
Xml/string/pt/questdescription_world.xml (3)

293-294: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the correct item placeholder ID.

020000055 has an extra leading zero; the same quest chain uses 20000055 on Lines 291-292. Keep the item ID consistent so the item reference resolves correctly.

Proposed fix
- $item:020000055$
+ $item:20000055$

- $itemPlural:020000055$
+ $itemPlural:20000055$
🤖 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 `@Xml/string/pt/questdescription_world.xml` around lines 293 - 294, Update the
manual attribute of quest 20001001 to use item placeholder ID 20000055 instead
of 020000055, matching the item ID used in the quest description and the
surrounding quest chain.

509-509: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep quest references consistent with their objectives.

  • Line 509 uses $npc:23100006$ in the description but $npc:23000006$ in complete.
  • Line 582 points to $map:02000347$, while the quest title/manual reference $map:02000348$.
Proposed fixes
- complete="Find $npc:23000006$&apos;s tracks at $map:02000183$"
+ complete="Find $npc:23100006$&apos;s tracks at $map:02000183$"

- ... go to $map:02000347$ ...
+ ... go to $map:02000348$ ...

Also applies to: 582-582

🤖 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 `@Xml/string/pt/questdescription_world.xml` at line 509, Update quest
30000032’s references to match its objectives: change the description’s target
NPC from 23100006 to 23000006, and change the map reference at the related entry
around line 582 from 02000347 to 02000348, preserving the existing quest text
and formatting.

709-709: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Close the inline tag with the matching element.

The text uses &lt;i&gt;seis&lt;/font&gt;; close it with &lt;/i&gt; instead.

Proposed fix
- &lt;i&gt;seis&lt;/font&gt;
+ &lt;i&gt;seis&lt;/i&gt;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

	<quest questID="40001820" name="As Ruas desta Cidade" desc="Ao viajar com os Allicari, $npcName:11001181$ teve muitas experiências e viu um monte de coisas estranhas desde muito jovem. Ele diz que perder seu rumo em uma cidade pode apagar suas frustrações e tristezas. Imagine o quão efetivo seria perder seu rumo em &lt;i&gt;seis&lt;/i&gt; cidades!" manual="Visite $map:02000001$ |Visite a $map:02000100$ |Visite a $map:02000076$ |Visite a $map:02000023$ |Visite a $map:02000051$ |Visite a $map:02000270$ " complete="Fale com $npcName:11001181$ na $map:02000064$ " count="1|1|1|1|1|1" locale="" locking="1" />
🤖 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 `@Xml/string/pt/questdescription_world.xml` at line 709, In the quest entry
identified by questID 40001820, correct the inline markup in the desc attribute
by replacing the mismatched closing font tag after “seis” with the matching
italic closing tag, while preserving the surrounding text.
Xml/string/pt/scriptquest_famemission.xml (1)

4653-4653: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Unquoted color attribute inside embedded markup, inconsistent with sibling notices.

&lt;font color=#909090&gt; is missing quotes around the color value. Several nearly-identical "missão semanal ... [Especial]" notice strings elsewhere in this same file (e.g. the Primeira/Segunda Legião and Batalha de Legião notices) consistently use &lt;font color=&quot;#909090&quot;&gt;. This one entry is the outlier and may not render the intended text color in-game.

🎨 Proposed fix
-	<key id="1228173721028574" feature="Kritias_2018_12" locale="" npc="블리체" name="Detenha aquele monstro antes que cause ainda mais danos!&`#x0A`;&lt;font color=`#909090`&gt;(Assim que você aceitar essa missão, não poderá começar nenhuma outra missão semanal da Gigântica [Especial] até o início da semana seguinte.)&lt;/font&gt;" />
+	<key id="1228173721028574" feature="Kritias_2018_12" locale="" npc="블리체" name="Detenha aquele monstro antes que cause ainda mais danos!&`#x0A`;&lt;font color=&quot;`#909090`&quot;&gt;(Assim que você aceitar essa missão, não poderá começar nenhuma outra missão semanal da Gigântica [Especial] até o início da semana seguinte.)&lt;/font&gt;" />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

	<key id="1228173721028574" feature="Kritias_2018_12" locale="" npc="블리체" name="Detenha aquele monstro antes que cause ainda mais danos!&`#x0A`;&lt;font color=&quot;`#909090`&quot;&gt;(Assim que você aceitar essa missão, não poderá começar nenhuma outra missão semanal da Gigântica [Especial] até o início da semana seguinte.)&lt;/font&gt;" />
🤖 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 `@Xml/string/pt/scriptquest_famemission.xml` at line 4653, Update the embedded
font markup in key 1228173721028574 so the color value uses the same quoted
attribute format as sibling notices, preserving the existing `#909090` color and
message text.
Xml/string/pt/scriptquest_guide.xml (2)

220-220: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== location/context =="
sed -n '210,225p' Xml/string/pt/scriptquest_guide.xml 2>/dev/null || true
sed -n '468,478p' Xml/string/pt/scriptquest_guide.xml 2>/dev/null || true
sed -n '1020,1028p' Xml/string/pt/scriptquest_guide.xml 2>/dev/null || true
sed -n '1106,1116p' Xml/string/pt/scriptquest_guide.xml 2>/dev/null || true

echo "== occurrences of potentially invalid close/formattings =="
python3 - <<'PY'
import re, xml.etree.ElementTree as ET
from pathlib import Path

path = Path("Xml/string/pt/scriptquest_guide.xml")
text = path.read_text(encoding="utf-8")

print("invalid-looking close tags in text:", re.findall(r'</(?:font|b)>', text))
print("color invalid-looking tokens:", re.findall(r'color=[^\\>]*#[A-Za-z0-9_#%]+', text))

# check XML validity without external deps; report first mismatch if parse available
try:
    ET.fromstring(text)
    print("xml.etree parsed document as well-formed XML")
except Exception as e:
    print("xml.etree parse error:", repr(e))

for i, line in enumerate(text.splitlines(), 1):
    if 220 in {i} or 472 <= i <= 475 or 1024 <= i <= 1024 or 1111 <= i <= 1111:
        print(f"line {i}: {line.strip()}")
PY

echo "== search for `#pp2/formattings` usage =="
rg -n 'color="[^"]*`#pp2`"|color=\'[^\'#]*`#pp2`\'|`#pp2`|</font>|</b>' Xml/string -S

Repository: MS2Community/MapleStory2-XML

Length of output: 46450


Balance the inline formatting markup.

Line [220] uses the invalid color token #pp2, while Lines [472], [1024], and [1111] contain stray </font>/</b> tags inside name attribute values. These pass XML validation but likely render badly in-game.

Proposed cleanup
- ...&lt;font color=&quot;`#pp2`&quot;&gt;$skill:10400011$&lt;/font&gt;...
+ ...&lt;font color=&quot;`#ffd200`&quot;&gt;$skill:10400011$&lt;/font&gt;...

- ...$npc:11001545[gender:0]$&lt;/font&gt;...
+ ...$npc:11001545[gender:0]$...

- name="Quê&lt;/b&gt;?"
+ name="Quê?"

- ...$item:40400001$&lt;/font&gt;...
+ ...$item:40400001$...

Also applies to: 472, 1024, 1111.

🤖 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 `@Xml/string/pt/scriptquest_guide.xml` at line 220, Update the affected
dialogue name attributes identified by keys at lines 220, 472, 1024, and 1111:
replace the invalid `#pp2` color token with the intended valid color token, and
remove stray closing </font> or </b> markup from the attribute values while
preserving the intended inline formatting and XML validity.

411-412: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix the incomplete Portuguese sentence.

Lines [411]-[412] say Mesmo que o atrase um pouco, which is missing the subject. For example: Mesmo que isso o atrase um pouco...

🤖 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 `@Xml/string/pt/scriptquest_guide.xml` around lines 411 - 412, Correct the
Portuguese sentence in both entries identified by keys 1204024704000421 and
1124232104000373 by adding the missing subject after “Mesmo que”, while keeping
the remainder of the dialogue unchanged.
Xml/string/pt/scriptquest_world.xml (1)

2107-2107: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check for imbalanced inline rich-text tags (<i>, <b>, <font>) per line in restored pt fragments
fd -e xml . Xml/string/pt --exec awk '
{
  i_open = gsub(/&lt;i&gt;/, "&lt;i&gt;");
  i_close = gsub(/&lt;\/i&gt;/, "&lt;\/i&gt;");
  b_open = gsub(/&lt;b&gt;/, "&lt;b&gt;");
  b_close = gsub(/&lt;\/b&gt;/, "&lt;\/b&gt;");
  if (i_open != i_close || b_open != b_close) print FILENAME":"FNR": "$0
}' {}

Repository: MS2Community/MapleStory2-XML

Length of output: 45814


🏁 Script executed:

#!/bin/bash
set -u

python3 - <<'PY'
from pathlib import Path
import xml.etree.ElementTree as ET

base = Path("Xml/string/pt")
files = sorted(base.glob("*.xml"))
mappings = set()
imbalanced = []
bad_entity_patterns = []
for path in files:
    try:
        tree = ET.parse(path)
    except ET.ParseError as exc:
        print(path, "XML_PARSE_ERROR", exc)
        continue
    for key in ("0831175903000320", "0831175903000891", "1228034903001929", "1228034903002016", "0831175903000124"):
        elem = tree.find(f'.//*[`@id`="{key}"]')
        if elem is not None:
            print(f"{path}:{elem.sourceline}: {key}: {elem.get('name', elem.get('value', 'key'))}")
    # Count unescaped < and > within the file text and attribute values for this file
    for e in tree.iter():
        for attr in ("name", "value", "desc", "manual", "complete"):
            val = e.get(attr)
            if val is None: continue
            if len(val) - len(val.replace("<", "")) > 0 or len(val) - len(val.replace(">", "")) > 0:
                bad_entity_patterns.append((str(path), e.sourceline, attr, val[:200]))
    # Lightweight line-level malformed markup scan for the three exact patterns plus variant b/i closing artifact
    text = path.read_text()
    for i, line in enumerate(text.splitlines(), 1):
        if ("&lt;i&gt;Vamos lá, você consegue.&lt;/b&gt;" in line or
            "&lt;/i&gt;lt;/i&lt;/i&gt;gt;" in line or
            "&lt;b/&gt;cruciais&lt;/b&gt;lt;/b&lt;/b&gt;gt;" in line or
            "&lt;i&gt;lt;i&lt;i&gt;gt;" in line):
            imbalanced.append((str(path), i, line[:240]))
print("bad_entity_pattern_count", len(bad_entity_patterns))

for path, linenum, attr, val in bad_entity_patterns[:10]:
    print("ENTITY:", path, linenum, attr, repr(val[:120]))
for path, linenum, line in imbalanced:
    print("MATCH:", path, linenum, line[:240])
PY

Repository: MS2Community/MapleStory2-XML

Length of output: 325


🏁 Script executed:

#!/bin/bash
set -u

python3 - <<'PY'
from pathlib import Path
import xml.etree.ElementTree as ET
import re

base = Path("Xml/string/pt")
for path in sorted(base.glob("*.xml")):
    try:
        tree = ET.parse(path)
    except ET.ParseError as exc:
        print(path, "XML_PARSE_ERROR", exc)
        continue
# Target specific IDs
target_keys = ["0831175903000320", "0831175903000891", "1228034903001929", "1228034903002016", "0831175903000124"]
xml = base.joinpath("scriptquest_world.xml").read_text(encoding="utf-8").splitlines()
for key in target_keys:
    for lineno, line in enumerate(xml, 1):
        if f'id="{key}"' in line:
            print(f"scriptquest_world.xml:{lineno}: {key}: {line.strip()}")

# Lightweight text-level scan for the exact problematic patterns.
mismatches = []
for path in sorted(base.glob("*.xml")):
    text = path.read_text(encoding="utf-8")
    for i, line in enumerate(text.splitlines(), 1):
        if ("&lt;i&gt;Vamos lá, você consegue.&lt;/b&gt;" in line or
            "&lt;/i&gt;lt;/i&lt;/i&gt;gt;" in line or
            "&lt;b/&gt;cruciais&lt;/b&gt;lt;/b&lt;/b&gt;gt;" in line or
            "&lt;i&gt;lt;i&lt;i&gt;gt;" in line or
            "&lt;b&gt;lt;b&lt;b&gt;gt;" in line or
            "I&apos;ll change to O pessoal daqui" in line or
            "lt;&lt;g&gt;" in line or
            "&lt;I&gt;Fomos capazes de confirmar que alguns indivíduos receberam poderes incomuns por meio do uso de lapentitas. Ao analisar esses poderes, chegamos a uma conclusão.&lt;/i&gt;lt;/i&lt;/i&gt;gt;" in line):
            mismatches.append((str(path), i, line[:220]+("..." if len(line) > 220 else "")))

for m in mismatches:
    print("MISMATCH:", m[0], m[1], m[2])

# Count malformed closing markup across text; avoid relying on XML parser source lines.
count = 0
for path in sorted(base.glob("*.xml")):
    text = path.read_text(encoding="utf-8")
    for pat in [r"&lt;/i&gt;lt;/i&lt;/i&gt;gt;", r"&lt;/b&gt;lt;/b&lt;/b&gt;gt;", r"&lt;b/&gt;"]:
        count += len(re.findall(pat, text))
    count += text.count(r"lt;&lt;g&gt;")
    count += text.count(r"lt;/&lt;g&gt;gt;")
    count += len(re.findall(r"&lt;(i|b|/i|/b)&gt;lt;(?:/?(?:i|b))&lt;(?:/?(?:i|b))&gt;gt;", text))
print("TOTAL_MISMATCH_COUNT", count)
PY

Repository: MS2Community/MapleStory2-XML

Length of output: 1724


🏁 Script executed:

#!/bin/bash
set -u

python3 - <<'PY'
from pathlib import Path
import re

for path in sorted(Path("Xml/string/pt").glob("*.xml")):
    text = path.read_text(encoding="utf-8")
    for pat in [r"&lt;/i&gt;lt;/i&lt;/i&gt;gt;", r"&lt;/b&gt;lt;/b&lt;/b&gt;gt;", r"&lt;b/&gt;"]:
        count = len(re.findall(pat, text))
        if count:
            print(path, pat, count)
PY

Repository: MS2Community/MapleStory2-XML

Length of output: 215


Clean up malformed rich-text markup in the restored PT strings.

The targeted entries need fixes, with additional related artifacts in Xml/string/pt/scriptquest_world.xml:

  • 0831175903000320 closes <i> with </b>.
  • 0831175903000891 leaves the editorial prefix I’ll change to in the dialogue.
  • 1228034903001929 has an orphan </i> before normal text.
  • 1228034903002016 ends E então with </i> before text.
  • 0831175903000124 uses stray <b/>cruciais</b> markup.

Correct the actual rendered tags in these strings so the text is not left with leftover editor markup or invalid rich-text tokens.

🤖 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 `@Xml/string/pt/scriptquest_world.xml` at line 2107, Clean up the specified
restored PT dialogue entries in the string data: fix the mismatched closing tag
for 0831175903000320, remove the editorial prefix from 0831175903000891, remove
orphan or misplaced italic markup in 1228034903001929 and 1228034903002016, and
correct the malformed bold markup in 0831175903000124. Preserve the intended
dialogue text while ensuring all rendered rich-text tags are valid and balanced.

@Zintixx
Zintixx merged commit 589c030 into main Jul 28, 2026
4 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.

1 participant