From d33f0e43de92100aa296463360d9c0e1b1e3cfc2 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:07:48 +0100 Subject: [PATCH 01/62] Document multi-agent workspace and add Linux/Windows slot, check and symbol helpers; fix td disasm and runner notes --- AGENTS.md | 42 +++++++++++++++++++++++-- scripts/workspace/check.ps1 | 54 ++++++++++++++++++++++++++++++++ scripts/workspace/check.sh | 49 +++++++++++++++++++++++++++++ scripts/workspace/slot.ps1 | 62 +++++++++++++++++++++++++++++++++++++ scripts/workspace/slot.sh | 55 ++++++++++++++++++++++++++++++++ scripts/workspace/sym.py | 52 +++++++++++++++++++++++++++++++ 6 files changed, 311 insertions(+), 3 deletions(-) create mode 100644 scripts/workspace/check.ps1 create mode 100644 scripts/workspace/check.sh create mode 100644 scripts/workspace/slot.ps1 create mode 100644 scripts/workspace/slot.sh create mode 100644 scripts/workspace/sym.py diff --git a/AGENTS.md b/AGENTS.md index 1c9cf88..c138eb5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,7 +17,8 @@ current policy. It is up to date and takes precedence over this file. ## Setup (once per machine) `td_toolchain_install` tool (or `td toolchain install` CLI) downloads the compiler and -sets it up; on Linux it needs wine. Checks compile **on your machine**. The +sets it up. Windows runs it with `--runner native`; Linux needs `--runner wine` or +`--runner docker`. Checks compile **on your machine**. The server only compiles your submissions (to prove they build and to route each function) and once more before a merge. @@ -44,7 +45,7 @@ td sync any function of it, and the first accepted candidate of each function merges (the others are dropped, the rest of their batch goes on). Prefer a region nobody claimed; share only to help with a big or stuck one. -3. **Read the originals**: `td_disassemble` tool (or `td disassemble` CLI) (ground truth) and `td_decompile` tool (or `td decompile` CLI) +3. **Read the originals**: `td_disassemble` tool (or `td disasm` CLI) (ground truth) and `td_decompile` tool (or `td decompile` CLI) (imported IDA pseudocode where available, a starting point only). 4. **Write each function** in its file, directly preceded by its annotation: ```cpp @@ -158,6 +159,41 @@ other contributors' agents: a function merges once "same" leads Implement claimed functions and their single-caller helpers in the unit assigned by the claim; do not split their implementation into separate helper `.cpp` files. +## Multi-agent workspace + +Several agents can work in parallel on one machine, each in its own clone (a "slot"). +The container folder holds the main clone (this repository), `workers//` (one clone +per agent) and `_work//` (check logs and edit backups, outside every repository). + +- Each slot gets a copy of the main clone's `.td/` (`config.json`, `symbols.json`, + `target.exe`), hidden from git. Never print the token in `.td/config.json` or copy it + anywhere except a slot's `.td/`. +- `scripts/workspace/` has a Linux/Git Bash and a Windows (PowerShell 5.1+) version of each helper: + + | Purpose | Linux / Git Bash | Windows PowerShell | + |---|---|---| + | Create or refresh slots from `origin/main`; a dirty slot is skipped | `bash scripts/workspace/slot.sh w1 w2` | `powershell -ExecutionPolicy Bypass -File scripts/workspace/slot.ps1 w1 w2` | + | Save the slot's edits to `_work//pre-check-*.patch`, run `td check` there, print one line per function | `bash scripts/workspace/check.sh w1 [--includers] [--full]` | `powershell -ExecutionPolicy Bypass -File scripts/workspace/check.ps1 w1 [--includers] [--full]` | + | Offline lookup in `.td/symbols.json` | `python3 scripts/workspace/sym.py [--slot w1]` | `python scripts/workspace/sym.py [--slot w1]` | + + Run them from the main clone or from any slot. If the main clone is not named + `rodecomp`, set `RODECOMP_MAIN` to its path. +- MCP: configure `td mcp --workspace
` as a stdio MCP server in your agent's + settings (`td connect` registers it for one client only). MCP tools act on the main + clone; the `td` CLI acts on the clone it runs in. +- Read-only MCP tools are safe from any agent: `td_disassemble`, `td_decompile`, + `td_lookup_symbol`, `td_get_task`, `td_get_batch`, `td_get_result`, `td_new_symbol` and the + peer-review tools. Anything that changes a working tree runs as the CLI from your own slot: + `td region claim`, `td claim`, `td check `, `td submit --files ...`, + `td heartbeat`, `td release`, `td sync`. The MCP `td_check`, `td_submit` and `td_sync` + are only for the single session that works in the main clone. +- All agents share one account: **always pass explicit task IDs to `td submit`**, or it + submits every task the account holds. Never commit or push; the server merges. +- Dispatch: create slots, pick independent free regions (`td regions --free`; avoid two + slots that change the same header), give each worker its own slot and region. A + peer-review worker needs no slot. When a worker reports its batch, refresh its slot + and give it the next region. + ## Structural maintenance (maintainers) For data ownership, annotation moves and new owner units that belong to no function task: @@ -208,7 +244,7 @@ Setup td ghidra download the server's Ghidra project (names applied, refreshed after merges) td ghidra install | build | sync pinned Ghidra: install it, analyze locally, re-apply symbols td update update td now (it also checks by itself once an hour) - td connect [--workspace ] connect your AI (registers with Claude Code, prints MCP settings) + td connect [--workspace ] register the MCP with a supported client, print MCP settings td mcp [--workspace ] run the MCP server for your agent (stdio) Work (a region: a source file or class, done as a whole) diff --git a/scripts/workspace/check.ps1 b/scripts/workspace/check.ps1 new file mode 100644 index 0000000..d3c9f78 --- /dev/null +++ b/scripts/workspace/check.ps1 @@ -0,0 +1,54 @@ +# Back up a slot's edits, then run `td check` from that slot. +# Usage: pwsh scripts/workspace/check.ps1 ... [--includers] [--full] +# --full print td's whole output instead of one line per function +$ErrorActionPreference = 'Stop' + +# Layout: \
\scripts\workspace\, or \workers\\scripts\workspace\. +$Clone = Split-Path -Parent (Split-Path -Parent $PSScriptRoot) +if ((Split-Path -Leaf (Split-Path -Parent $Clone)) -eq 'workers') { + $Root = Split-Path -Parent (Split-Path -Parent $Clone) + $Main = if ($env:RODECOMP_MAIN) { $env:RODECOMP_MAIN } else { Join-Path $Root 'rodecomp' } +} else { + $Root = Split-Path -Parent $Clone + $Main = if ($env:RODECOMP_MAIN) { $env:RODECOMP_MAIN } else { $Clone } +} +if ($args.Count -lt 2) { Write-Error 'usage: check.ps1 ... [--includers] [--full]'; exit 2 } +$name = $args[0] +$slot = Join-Path $Root "workers\$name" +if (-not (Test-Path (Join-Path $slot '.git'))) { Write-Error "no slot: $slot (run slot.ps1 $name)"; exit 1 } + +$rest = @($args | Select-Object -Skip 1) +$full = $rest -contains '--full' +$tdArgs = @($rest | Where-Object { $_ -ne '--full' }) + +$work = Join-Path $Root "_work\$name" +New-Item -ItemType Directory -Force $work | Out-Null +$stamp = Get-Date -Format 'yyyyMMdd-HHmmss' +$patch = Join-Path $work "pre-check-$stamp.patch" +$log = Join-Path $work "check-$stamp.log" + +# git writes the patch itself: PowerShell pipelines would re-encode it and break `git apply`. +git -C $slot diff HEAD --binary "--output=$patch" +$before = (git hash-object -- $patch | Out-String).Trim() + +Push-Location $slot +try { + $out = & td check @tdArgs 2>&1 | ForEach-Object { "$_" } + $rc = $LASTEXITCODE +} finally { Pop-Location } +[IO.File]::WriteAllLines($log, [string[]]$out, [Text.UTF8Encoding]::new($false)) + +if ($full) { + $out +} else { + $lines = $out | Where-Object { $_ -match '^\s*(fn|gl|vt|st)_\d+ |error|unannotated' } + if ($lines) { $lines } else { $out } +} + +$afterFile = Join-Path $work "post-check-$stamp.patch" +git -C $slot diff HEAD --binary "--output=$afterFile" +$after = (git hash-object -- $afterFile | Out-String).Trim() +Remove-Item $afterFile +if ($before -ne $after) { Write-Warning "working tree changed during td check; edits saved in $patch" } +Write-Host "log: $log backup: $patch exit: $rc" +exit $rc diff --git a/scripts/workspace/check.sh b/scripts/workspace/check.sh new file mode 100644 index 0000000..5049aa5 --- /dev/null +++ b/scripts/workspace/check.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# Back up a slot's edits, then run `td check` from that slot. +# Usage: bash scripts/workspace/check.sh ... [--includers] [--full] +# --full print td's whole output instead of one line per function +set -euo pipefail + +# Layout: /
/scripts/workspace/, or /workers//scripts/workspace/. +# Native path (C:/...) on Git Bash/MSYS so Windows tools accept it; POSIX path elsewhere. +CLONE="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && { pwd -W 2>/dev/null || pwd; })" +if [ "$(basename "$(dirname "$CLONE")")" = workers ]; then + ROOT="$(dirname "$(dirname "$CLONE")")"; MAIN="${RODECOMP_MAIN:-$ROOT/rodecomp}" +else + ROOT="$(dirname "$CLONE")"; MAIN="${RODECOMP_MAIN:-$CLONE}" +fi +[ $# -ge 2 ] || { echo "usage: $0 ... [--includers] [--full]" >&2; exit 2; } +name="$1"; shift +slot="$ROOT/workers/$name" +[ -d "$slot/.git" ] || { echo "no slot: $slot (run slot.sh $name)" >&2; exit 1; } + +full=0; args=() +for a in "$@"; do + if [ "$a" = "--full" ]; then full=1; else args+=("$a"); fi +done + +work="$ROOT/_work/$name"; mkdir -p "$work" +stamp="$(date +%Y%m%d-%H%M%S)" +patch="$work/pre-check-$stamp.patch" +git -C "$slot" diff HEAD --binary > "$patch" +before="$(git -C "$slot" diff HEAD --binary | git hash-object --stdin)" + +log="$work/check-$stamp.log" +set +e +(cd "$slot" && td check "${args[@]}") > "$log" 2>&1 +rc=$? +set -e + +if [ $full -eq 1 ]; then + cat "$log" +else + # One line per function (stable ID lines) plus errors and the unannotated list. + grep -E '^\s*(fn|gl|vt|st)_[0-9]+ |error|unannotated' "$log" || cat "$log" +fi + +after="$(git -C "$slot" diff HEAD --binary | git hash-object --stdin)" +if [ "$before" != "$after" ]; then + echo "WARNING: working tree changed during td check; edits saved in $patch" >&2 +fi +echo "log: $log backup: $patch exit: $rc" +exit $rc diff --git a/scripts/workspace/slot.ps1 b/scripts/workspace/slot.ps1 new file mode 100644 index 0000000..4b46acc --- /dev/null +++ b/scripts/workspace/slot.ps1 @@ -0,0 +1,62 @@ +# Create or refresh private clones (slots) under workers\. +# Usage: pwsh scripts/workspace/slot.ps1 w1 [w2 ...] (also works in Windows PowerShell 5.1) +# A dirty slot is never touched. +$ErrorActionPreference = 'Stop' + +# Layout: \
\scripts\workspace\, or \workers\\scripts\workspace\. +$Clone = Split-Path -Parent (Split-Path -Parent $PSScriptRoot) +if ((Split-Path -Leaf (Split-Path -Parent $Clone)) -eq 'workers') { + $Root = Split-Path -Parent (Split-Path -Parent $Clone) + $Main = if ($env:RODECOMP_MAIN) { $env:RODECOMP_MAIN } else { Join-Path $Root 'rodecomp' } +} else { + $Root = Split-Path -Parent $Clone + $Main = if ($env:RODECOMP_MAIN) { $env:RODECOMP_MAIN } else { $Clone } +} +if ($args.Count -eq 0) { Write-Error 'usage: slot.ps1 ...'; exit 2 } +if (-not (Test-Path (Join-Path $Main '.git'))) { Write-Error "main clone not found: $Main"; exit 1 } +$Url = (git -C $Main remote get-url origin).Trim() + +function Invoke-Git { + git @args + if ($LASTEXITCODE -ne 0) { throw "git $($args -join ' ') failed ($LASTEXITCODE)" } +} + +function Copy-Td([string]$Slot) { + $dst = Join-Path $Slot '.td' + New-Item -ItemType Directory -Force $dst | Out-Null + foreach ($f in 'config.json', 'symbols.json', 'symbols.json.etag', 'target.exe') { + $src = Join-Path $Main ".td\$f" + if (Test-Path $src) { Copy-Item -Force $src (Join-Path $dst $f) } + } + $ex = Join-Path $Slot '.git\info\exclude' + if (-not ((Test-Path $ex) -and (Select-String -Path $ex -SimpleMatch -Pattern '.td/' -Quiet))) { + Add-Content -Path $ex -Value '.td/' -Encoding ascii + } +} + +$rc = 0 +foreach ($name in $args) { + if ($name -match '[\\/]' -or $name -in '', '.', '..') { Write-Warning "[$name] invalid slot name"; $rc = 1; continue } + $slot = Join-Path $Root "workers\$name" + New-Item -ItemType Directory -Force (Join-Path $Root 'workers'), (Join-Path $Root "_work\$name") | Out-Null + if (-not (Test-Path (Join-Path $slot '.git'))) { + try { + Invoke-Git clone -q $Main $slot + Invoke-Git -C $slot remote set-url origin $Url + Invoke-Git -C $slot fetch -q origin + Invoke-Git -C $slot checkout -q -B main origin/main + } catch { + if (Test-Path $slot) { Remove-Item -Recurse -Force $slot } + Write-Warning "[$name] creation failed, removed partial clone: $_"; $rc = 1; continue + } + Copy-Td $slot + Write-Host "[$name] created at $(git -C $slot rev-parse --short HEAD)" + continue + } + if (git -C $slot status --porcelain) { Write-Warning "[$name] dirty, skipped"; $rc = 1; continue } + Invoke-Git -C $slot fetch -q origin + Invoke-Git -C $slot checkout -q -B main origin/main + Copy-Td $slot + Write-Host "[$name] refreshed at $(git -C $slot rev-parse --short HEAD)" +} +exit $rc diff --git a/scripts/workspace/slot.sh b/scripts/workspace/slot.sh new file mode 100644 index 0000000..8955d6e --- /dev/null +++ b/scripts/workspace/slot.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# Create or refresh private clones (slots) under workers/. +# Usage: bash scripts/workspace/slot.sh w1 [w2 ...] +# A dirty slot is never touched. +set -euo pipefail + +# Layout: /
/scripts/workspace/, or /workers//scripts/workspace/. +# Native path (C:/...) on Git Bash/MSYS so Windows tools accept it; POSIX path elsewhere. +CLONE="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && { pwd -W 2>/dev/null || pwd; })" +if [ "$(basename "$(dirname "$CLONE")")" = workers ]; then + ROOT="$(dirname "$(dirname "$CLONE")")"; MAIN="${RODECOMP_MAIN:-$ROOT/rodecomp}" +else + ROOT="$(dirname "$CLONE")"; MAIN="${RODECOMP_MAIN:-$CLONE}" +fi +[ $# -gt 0 ] || { echo "usage: $0 ..." >&2; exit 2; } +[ -d "$MAIN/.git" ] || { echo "main clone not found: $MAIN" >&2; exit 1; } +URL="$(git -C "$MAIN" remote get-url origin)" + +copy_td() { + local dst="$1/.td" + mkdir -p "$dst" + for f in config.json symbols.json symbols.json.etag target.exe; do + if [ -f "$MAIN/.td/$f" ]; then cp -f "$MAIN/.td/$f" "$dst/$f"; fi + done + # Keep .td/ out of `git status`, as in the main clone. + local ex="$1/.git/info/exclude" + grep -qxF '.td/' "$ex" 2>/dev/null || echo '.td/' >> "$ex" +} + +rc=0 +for name in "$@"; do + case "$name" in */*|*\\*|..|.|"") echo "[$name] invalid slot name" >&2; rc=1; continue;; esac + slot="$ROOT/workers/$name" + mkdir -p "$ROOT/workers" "$ROOT/_work/$name" + if [ ! -d "$slot/.git" ]; then + if ! { git clone -q "$MAIN" "$slot" && + git -C "$slot" remote set-url origin "$URL" && + git -C "$slot" fetch -q origin && + git -C "$slot" checkout -q -B main origin/main; }; then + rm -rf -- "$slot" + echo "[$name] creation failed, removed partial clone" >&2; rc=1; continue + fi + copy_td "$slot" + echo "[$name] created at $(git -C "$slot" rev-parse --short HEAD)" + continue + fi + if [ -n "$(git -C "$slot" status --porcelain)" ]; then + echo "[$name] dirty, skipped" >&2; rc=1; continue + fi + git -C "$slot" fetch -q origin + git -C "$slot" checkout -q -B main origin/main + copy_td "$slot" + echo "[$name] refreshed at $(git -C "$slot" rev-parse --short HEAD)" +done +exit $rc diff --git a/scripts/workspace/sym.py b/scripts/workspace/sym.py new file mode 100644 index 0000000..e42f1a7 --- /dev/null +++ b/scripts/workspace/sym.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +"""Offline lookup in the main clone's .td/symbols.json (or a slot's, with --slot). + +Usage: sym.py [--slot wN] [--limit N] +An address matches the symbol that contains it. +""" +import argparse +import json +import os +import sys +from pathlib import Path + +CLONE = Path(__file__).resolve().parents[2] +ROOT = CLONE.parent.parent if CLONE.parent.name == "workers" else CLONE.parent +MAIN = Path(os.environ["RODECOMP_MAIN"]) if os.environ.get("RODECOMP_MAIN") else ( + ROOT / "rodecomp" if CLONE.parent.name == "workers" else CLONE) + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("query") + ap.add_argument("--slot", help="read the slot's snapshot instead of the main clone's") + ap.add_argument("--limit", type=int, default=20) + a = ap.parse_args() + + base = ROOT / "workers" / a.slot if a.slot else MAIN + path = base / ".td" / "symbols.json" + data = json.loads(path.read_text(encoding="utf-8")) + cols = data["columns"] + rows = [dict(zip(cols, r)) for r in data["symbols"]] + + q = a.query + if q.lower().startswith("0x"): + addr = int(q, 16) + hits = [r for r in rows if r["addr"] is not None and r["addr"] <= addr < r["addr"] + max(r["size"] or 1, 1)] + elif any(r["id"] == q for r in rows): + hits = [r for r in rows if r["id"] == q] + else: + ql = q.lower() + hits = [r for r in rows if ql in (r["name"] or "").lower() + or ql in (r["decorated"] or "").lower()] + + for r in hits[: a.limit]: + print(f'{r["id"]:<10} {r["kind"]:<9} {("0x%08X" % r["addr"]) if r["addr"] is not None else "-":<10} size={r["size"] if r["size"] is not None else "-":<6} ' + f'{r["name"] or "-"} unit={r["unit"] or "-"}') + if len(hits) > a.limit: + print(f"... {len(hits) - a.limit} more", file=sys.stderr) + return 0 if hits else 1 + + +if __name__ == "__main__": + sys.exit(main()) From b5208a49228705d2af60e1c7c9dc4dae2b3e4a50 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:16:25 +0100 Subject: [PATCH 02/62] Require confirming every submission with td batch; apply to multi-agent dispatch --- AGENTS.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index c138eb5..249cd49 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,6 +11,17 @@ confirmed by other agents in peer review, and that is the normal path. Byte-identical code merges automatically, so take an easy match when you see one, then move on. +**Golden rule: confirm every submission.** `td submit` only queues a batch; the +server's gates and compile run afterwards. Run `td batch ` (`td_get_batch`) +right after every submit and read each function's state: +- `returned`, `rejected` or `needs_cleanup`: read `td result `, fix it + and resubmit before claiming the next region. Gate rejections show up within seconds. +- still `queued` or `verifying`: move on, and check it again before your next + `td sync` and before reporting to the user. Compiling can take up to an hour. +- never wait for peer review or the merge; that takes hours or days. + +Never report a submission as checked, in review or merged without having seen that state in `td batch`. + Work responses from the server carry a `guidance` field with the project's current policy. It is up to date and takes precedence over this file. @@ -24,8 +35,8 @@ function) and once more before a merge. ## Workflow: one region at a time -**Keep working until the user stops you.** After a submission, claim the next -region right away; do not wait for its result. +**Keep working until the user stops you.** After a submission, confirm it with +`td batch` (golden rule above), then claim the next region; do not wait for peer review. Before each region, preserve unfinished work, stop local workers/checks, and run `td_sync` tool (`td sync` CLI) from a clean working tree. Never discard work just to sync. @@ -87,6 +98,9 @@ td sync Pass the same explicit `files` and task IDs to `td_submit`, including prerequisites not yet merged. Submit only finished, checked code; a queued or peer-review result is not a merge. Preserve pending payloads before restoring local changes. + Then confirm the batch with `td batch ` (golden rule): `td submit` + prints `queued` before the server's free-text, annotation and global-variable + gates have run, and `td check` does not run those gates. Found a mistake in a function that waits for review? `td_withdraw` (or `td withdraw` CLI) it: it leaves the queue and returns to your claim, to fix and submit again. @@ -191,8 +205,8 @@ per agent) and `_work//` (check logs and edit backups, outside every repos submits every task the account holds. Never commit or push; the server merges. - Dispatch: create slots, pick independent free regions (`td regions --free`; avoid two slots that change the same header), give each worker its own slot and region. A - peer-review worker needs no slot. When a worker reports its batch, refresh its slot - and give it the next region. + peer-review worker needs no slot. When a worker reports a batch it has confirmed with + `td batch` (golden rule), refresh its slot and give it the next region. ## Structural maintenance (maintainers) From 35b31fdf7befd60863f89f7fbb88a55b6711ab93 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Mon, 26 Oct 2026 23:29:56 +0000 Subject: [PATCH 03/62] Decompile 6 functions in Source/Archive/PakRegistry.h, Source/Render/DeviceContext/DCSurface.h, ... Batch #937 by ragnarok-clanker: 0 byte-identical, 6 confirmed by peer review. - fn_17771 LanguageCharset: logic confirmed by peer review (annotation added to existing code) - fn_17773 LanguageCodePage: logic confirmed by peer review (already on main) - fn_02102 GetRenderSystemHolder: logic confirmed by peer review - fn_18112 PakRegistry::Read: logic confirmed by peer review (already on main) - fn_18114 PakRegistry::ReadArchive: logic confirmed by peer review (already on main) - fn_04728 CMouse::Center: logic confirmed by peer review (already on main) Reviewed-by: ragnarok-clanker --- Source/Archive/PakRegistry.h | 2 +- Source/Render/DeviceContext/DCSurface.h | 3 ++- Source/Utility/Text/LanguageCharset.cpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Archive/PakRegistry.h b/Source/Archive/PakRegistry.h index 4e3503a..90f2a67 100644 --- a/Source/Archive/PakRegistry.h +++ b/Source/Archive/PakRegistry.h @@ -13,7 +13,7 @@ public: bool Add(const char* filename); bool Exists(const char* filename, bool looseOnly) const; void* Read(const char* filename, std::uint32_t* size, int option = 0); - __declspec(noinline) void* ReadArchive(const char* filename, std::uint32_t* size); + void* ReadArchive(const char* filename, std::uint32_t* size); BOOL Free(void* buffer); void ApplyAuxiliary(const void* data, std::uint32_t size); diff --git a/Source/Render/DeviceContext/DCSurface.h b/Source/Render/DeviceContext/DCSurface.h index b936fbe..2824907 100644 --- a/Source/Render/DeviceContext/DCSurface.h +++ b/Source/Render/DeviceContext/DCSurface.h @@ -40,7 +40,8 @@ struct RenderSystemHolder { // OFFSET: 0x0055D340 // FUNCTION: fn_02102 -__declspec(noinline) inline RenderSystemHolder* GetRenderSystemHolder() { +inline RenderSystemHolder* GetRenderSystemHolder() { + // GLOBAL: gl_24491 static RenderSystemHolder holder; return &holder; } diff --git a/Source/Utility/Text/LanguageCharset.cpp b/Source/Utility/Text/LanguageCharset.cpp index 269f3f2..887fd83 100644 --- a/Source/Utility/Text/LanguageCharset.cpp +++ b/Source/Utility/Text/LanguageCharset.cpp @@ -4,7 +4,7 @@ // OFFSET: 0x00ACD8B0 // FUNCTION: fn_17771 -__declspec(noinline) unsigned LanguageCharset(std::uint16_t language) { +unsigned LanguageCharset(std::uint16_t language) { switch (PRIMARYLANGID(language)) { case LANG_ARABIC: return ARABIC_CHARSET; From 99f060e6a237e432fda80f826ae879b69d33b8cd Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:00:54 +0000 Subject: [PATCH 04/62] Confirm fn_10691 (UICheckBox::~UICheckBox) Batch #946 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_10691 UICheckBox::~UICheckBox: logic confirmed by peer review (already on main) Reviewed-by: ragnarok-clanker --- Source/UI/Buttons/UICheckBox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UI/Buttons/UICheckBox.cpp b/Source/UI/Buttons/UICheckBox.cpp index 00c350f..9f3d4bc 100644 --- a/Source/UI/Buttons/UICheckBox.cpp +++ b/Source/UI/Buttons/UICheckBox.cpp @@ -13,7 +13,7 @@ UICheckBox::UICheckBox(UIWindowContext& windowContext, UIButtonContext& controls this->geometry.id = 213; } -// OFFSET: 0x008525B0 +// OFFSET: 0x008514C0 // FUNCTION: fn_10691 UICheckBox::~UICheckBox() = default; From b2d111d403cefc6062802bf3103819765cdf9dd4 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:02:27 +0000 Subject: [PATCH 05/62] Decompile fn_09295 (?Digits@?A0x28e614d0@@YA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) Batch #953 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_09295 ?Digits@?A0x28e614d0@@YA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/UI/Party/UIRegisterPartyWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UI/Party/UIRegisterPartyWnd.cpp b/Source/UI/Party/UIRegisterPartyWnd.cpp index 1562282..4e2fe40 100644 --- a/Source/UI/Party/UIRegisterPartyWnd.cpp +++ b/Source/UI/Party/UIRegisterPartyWnd.cpp @@ -35,7 +35,7 @@ namespace { return false; } - for (unsigned char value : text) { + for (char value : text) { if (!std::isdigit(value)) { return false; } From f517a81de5b8dba951255ca75da4ecab7388466f Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:02:54 +0000 Subject: [PATCH 06/62] Decompile fn_07979 (C3dAnimModelRes::C3dAnimModelRes) Batch #958 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_07979 C3dAnimModelRes::C3dAnimModelRes: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- .../Resource/Models/AnimatedModelResource.cpp | 6 ++--- .../Resource/Models/AnimatedModelResource.h | 26 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Source/Resource/Models/AnimatedModelResource.cpp b/Source/Resource/Models/AnimatedModelResource.cpp index ae605b5..6cdd5cb 100644 --- a/Source/Resource/Models/AnimatedModelResource.cpp +++ b/Source/Resource/Models/AnimatedModelResource.cpp @@ -20,11 +20,11 @@ AnimatedModelNode::~AnimatedModelNode() { } } -// OFFSET: 0x007521F0 +// OFFSET: 0x007550E0 // FUNCTION: fn_07979 C3dAnimModelRes::C3dAnimModelRes(ModelResourceContext& context) - : shade(2), frameCount(0), animationLength(0), speed(1.0f), unknown_0150(0), unknown_0154(0.0f), unknown_0158(0.0f), unknown_015C(0.0f), alpha(255), - m_context(&context) { + : unknown_0110(0), unknown_0114(0), shade(2), frameCount(0), animationLength(0), speed(1.0f), unknown_0150(0), unknown_0154(0.0f), unknown_0158(0.0f), + unknown_015C(0.0f), alpha(255), m_context(&context) { } // OFFSET: 0x00753510 diff --git a/Source/Resource/Models/AnimatedModelResource.h b/Source/Resource/Models/AnimatedModelResource.h index 34f4f63..1b04df8 100644 --- a/Source/Resource/Models/AnimatedModelResource.h +++ b/Source/Resource/Models/AnimatedModelResource.h @@ -47,18 +47,20 @@ public: bool Load(const char* name) override; void Unload() override; - std::list nodes; - std::list rootNames; - std::string sourceName; - int shade; - int frameCount; - int animationLength; - float speed; - std::uint32_t unknown_0150; - float unknown_0154; - float unknown_0158; - float unknown_015C; - std::uint32_t alpha; + /* 0110 */ std::uint32_t unknown_0110; + /* 0114 */ std::uint32_t unknown_0114; + /* 0118 */ std::list nodes; + /* 0120 */ std::list rootNames; + /* 0128 */ std::string sourceName; + /* 0140 */ int shade; + /* 0144 */ int frameCount; + /* 0148 */ int animationLength; + /* 014C */ float speed; + /* 0150 */ std::uint32_t unknown_0150; + /* 0154 */ float unknown_0154; + /* 0158 */ float unknown_0158; + /* 015C */ float unknown_015C; + /* 0160 */ std::uint32_t alpha; private: ModelResourceContext* m_context; From e0c707079505127e40278a9863c3e23e9ababbbb Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:21:17 +0000 Subject: [PATCH 07/62] Decompile fn_11136 (UIComboBoxEx::~UIComboBoxEx) Batch #983 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_11136 UIComboBoxEx::~UIComboBoxEx: logic confirmed by peer review (annotation added to existing code) Reviewed-by: ragnarok-clanker --- Source/UI/Lists/UIComboBoxEx.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/UI/Lists/UIComboBoxEx.cpp b/Source/UI/Lists/UIComboBoxEx.cpp index 7d01d42..a1f08e6 100644 --- a/Source/UI/Lists/UIComboBoxEx.cpp +++ b/Source/UI/Lists/UIComboBoxEx.cpp @@ -28,6 +28,7 @@ UIComboBoxEx::UIComboBoxEx(UIWindowContext& windows, UIComboBoxContext& combo) : } // OFFSET: 0x00872C00 +// FUNCTION: fn_11136 UIComboBoxEx::~UIComboBoxEx() = default; // OFFSET: 0x0087B5A0 @@ -262,12 +263,12 @@ void UIComboBoxEx::Paint() { static_cast(this->parent)->Invalidate(); } -// OFFSET: 0x00885250 +// OFFSET: 0x0086CCE0 // FUNCTION: fn_11036 UIComboBoxEx2::UIComboBoxEx2(UIWindowContext& windows, UIComboBoxContext& combo) : UIComboBoxEx(windows, combo), alignment(0) { } -// OFFSET: 0x00872B50 +// OFFSET: 0x008706D0 // FUNCTION: fn_11102 UIComboBoxEx2::~UIComboBoxEx2() = default; From 11bd25e0131c8f6fbc4f1d8b4f0aff3d5abc21d8 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:21:23 +0000 Subject: [PATCH 08/62] Decompile 2 functions in Source/UI/Lists/UIComboBoxDefWnd.cpp Batch #969 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_11133 UIComboBoxDef2Wnd::~UIComboBoxDef2Wnd: logic confirmed by peer review (annotation added to existing code) - fn_11134 UIComboBoxDefWnd::~UIComboBoxDefWnd: logic confirmed by peer review (annotation added to existing code) Reviewed-by: ragnarok-clanker --- Source/UI/Lists/UIComboBoxDefWnd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/UI/Lists/UIComboBoxDefWnd.cpp b/Source/UI/Lists/UIComboBoxDefWnd.cpp index d3c1564..aaafac2 100644 --- a/Source/UI/Lists/UIComboBoxDefWnd.cpp +++ b/Source/UI/Lists/UIComboBoxDefWnd.cpp @@ -17,6 +17,7 @@ UIComboBoxDefWnd::UIComboBoxDefWnd(UIWindowContext& windows, UIComboBoxHeaderCon } // OFFSET: 0x00872AE0 +// FUNCTION: fn_11134 UIComboBoxDefWnd::~UIComboBoxDefWnd() = default; // OFFSET: 0x00885920 @@ -141,6 +142,7 @@ UIComboBoxDef2Wnd::UIComboBoxDef2Wnd(UIWindowContext& windows, UIComboBoxHeaderC } // OFFSET: 0x00872A70 +// FUNCTION: fn_11133 UIComboBoxDef2Wnd::~UIComboBoxDef2Wnd() = default; // OFFSET: 0x00885250 From 2282078421cad3d3c2a24634ea284f7f66eb2abc Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:21:32 +0000 Subject: [PATCH 09/62] Decompile fn_01787 (DeviceOwnerDX7::PackColor) Batch #970 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_01787 DeviceOwnerDX7::PackColor: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Render/DX7/SurfaceDX7.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Source/Render/DX7/SurfaceDX7.cpp b/Source/Render/DX7/SurfaceDX7.cpp index f2456cd..6b6e5b2 100644 --- a/Source/Render/DX7/SurfaceDX7.cpp +++ b/Source/Render/DX7/SurfaceDX7.cpp @@ -31,8 +31,7 @@ namespace { return static_cast((value >> (channel.expansion & 31)) << (channel.shift & 31)); } - // OFFSET: 0x00543220 - // FUNCTION: fn_01787 +// INLINED std::uint16_t Color(DeviceOwnerDX7& owner, unsigned red, unsigned green, unsigned blue) { return static_cast(Channel(red, owner.red) + Channel(green, owner.green) + Channel(blue, owner.blue)); } @@ -229,6 +228,16 @@ void CSurfaceDX7::Stretch(int, int, int width, int height) { this->m_owner->renderTarget->Blt(&destination, this->m_surface, nullptr, DDBLT_WAIT, nullptr); } +// OFFSET: 0x00543220 +// FUNCTION: fn_01787 +std::uint16_t DeviceOwnerDX7::PackColor(int red, int green, int blue) { + return static_cast( + (static_cast(red >> (this->red.expansion & 31)) << (this->red.shift & 31)) + + (static_cast(green >> (this->green.expansion & 31)) << (this->green.shift & 31)) + + (static_cast(blue >> (this->blue.expansion & 31)) << (this->blue.shift & 31)) + ); +} + // OFFSET: 0x00543270 // FUNCTION: fn_01788 DWORD DeviceOwnerDX7::BlueMask() { From f7a74bf6bdf857b3fc712e3a108af381cb2a9202 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:21:38 +0000 Subject: [PATCH 10/62] Decompile 2 functions in Source/UI/Lists/UIListBoxEx.cpp Batch #972 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_11419 UIListBoxEx::Slot25: logic confirmed by peer review (already on main) - fn_11157 UIListBoxEx::~UIListBoxEx: logic confirmed by peer review (annotation added to existing code) Reviewed-by: ragnarok-clanker --- Source/UI/Lists/UIListBoxEx.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/UI/Lists/UIListBoxEx.cpp b/Source/UI/Lists/UIListBoxEx.cpp index e9de2d5..89b8173 100644 --- a/Source/UI/Lists/UIListBoxEx.cpp +++ b/Source/UI/Lists/UIListBoxEx.cpp @@ -25,6 +25,7 @@ UIListBoxEx::UIListBoxEx(UIWindowContext& windows, UIListBoxContext& list) } // OFFSET: 0x00873710 +// FUNCTION: fn_11157 UIListBoxEx::~UIListBoxEx() = default; // OFFSET: 0x0087B690 From 353cbdcce8fcbb5f28d996133957725c14043f54 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:21:44 +0000 Subject: [PATCH 11/62] Confirm fn_14417 (CUIDropDownBox::HasChild) Batch #973 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_14417 CUIDropDownBox::HasChild: logic confirmed by peer review (already on main) Reviewed-by: ragnarok-clanker --- Source/UI/Lists/UIDropDownBox.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/UI/Lists/UIDropDownBox.cpp b/Source/UI/Lists/UIDropDownBox.cpp index 412f13f..f560e08 100644 --- a/Source/UI/Lists/UIDropDownBox.cpp +++ b/Source/UI/Lists/UIDropDownBox.cpp @@ -10,7 +10,6 @@ CUIDropDownBox::CUIDropDownBox(UIWindowContext& context) : CUIControl(context), } // OFFSET: 0x009E3300 -// OFFSET: 0x009E3390 // FUNCTION: fn_45427 CUIDropDownBox::~CUIDropDownBox() { this->Detach(); From db06901420bd6980273c9c016d1f9ed5c3174cc3 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 00:22:50 +0000 Subject: [PATCH 12/62] Confirm fn_45422 (CSoundMgr::~CSoundMgr) Batch #981 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_45422 CSoundMgr::~CSoundMgr: logic confirmed by peer review (already on main) Reviewed-by: ragnarok-clanker --- Source/Contents/Sound/SoundMgr.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Contents/Sound/SoundMgr.cpp b/Source/Contents/Sound/SoundMgr.cpp index 09e2ce4..99fd358 100644 --- a/Source/Contents/Sound/SoundMgr.cpp +++ b/Source/Contents/Sound/SoundMgr.cpp @@ -33,7 +33,6 @@ CSoundMgr::CSoundMgr(SoundMgrContext& context) : m_context(&context) { } // OFFSET: 0x00638C40 -// OFFSET: 0x00638D50 // FUNCTION: fn_45422 CSoundMgr::~CSoundMgr() { this->Shutdown(); From 220df4d318d35ee7c6080d7ff3aa1646eea61dfd Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:05:28 +0000 Subject: [PATCH 13/62] Decompile 12 functions in Source/Resource/Models/ModelResource.cpp, Source/Resource/Models/ModelResource.h, ... Batch #959 by ragnarok-clanker: 0 byte-identical, 12 confirmed by peer review. - fn_07948 C3dModelRes::Unload: logic confirmed by peer review (already on main) - fn_07949 C3dModelResV1::Create: logic confirmed by peer review (already on main) - fn_07982 C3dModelRes::C3dModelRes: logic confirmed by peer review (already on main) - fn_07995 C3dModelRes::~C3dModelRes: logic confirmed by peer review (already on main) - fn_07996 ModelNode::~ModelNode: logic confirmed by peer review - fn_08012 C3dModelRes::FindNode: logic confirmed by peer review (already on main) - fn_07985 ModelNode::ModelNode: logic confirmed by peer review - fn_07950 C3dModelResV1::Load: logic confirmed by peer review (already on main) - fn_07983 C3dModelResV1::C3dModelResV1: logic confirmed by peer review (already on main) - fn_07984 C3dModelResV2::C3dModelResV2: logic confirmed by peer review (already on main) - fn_17482 C3dNodeV1::Initialize: logic confirmed by peer review - fn_17484 C3dNodeV2::Initialize: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Contents/Models/ModelNode.cpp | 6 +- Source/Resource/Models/ModelResource.cpp | 29 ++++++-- Source/Resource/Models/ModelResource.h | 82 +++++++++++++--------- Source/Resource/Models/ModelResourceV2.cpp | 4 +- 4 files changed, 78 insertions(+), 43 deletions(-) diff --git a/Source/Contents/Models/ModelNode.cpp b/Source/Contents/Models/ModelNode.cpp index 539542b..77c572d 100644 --- a/Source/Contents/Models/ModelNode.cpp +++ b/Source/Contents/Models/ModelNode.cpp @@ -42,7 +42,8 @@ void C3dNode::Animate(double) { // OFFSET: 0x00AB7050 // FUNCTION: fn_17482 -void C3dNodeV1::Initialize(const ModelNode& resource) { +void C3dNodeV1::Initialize(const ModelNode& base) { + const auto& resource = static_cast(base); this->name = resource.name; this->mesh = resource.mesh.get(); this->textures = resource.textures; @@ -80,7 +81,8 @@ void C3dNodeV1::Initialize(const ModelNode& resource) { // OFFSET: 0x00AB73F0 // FUNCTION: fn_17484 -void C3dNodeV2::Initialize(const ModelNode& resource) { +void C3dNodeV2::Initialize(const ModelNode& base) { + const auto& resource = static_cast(base); this->name = resource.name; this->mesh = resource.mesh.get(); std::memcpy(this->resourceTransform.values, resource.transform, sizeof(resource.transform)); diff --git a/Source/Resource/Models/ModelResource.cpp b/Source/Resource/Models/ModelResource.cpp index 6dcc91a..d784e97 100644 --- a/Source/Resource/Models/ModelResource.cpp +++ b/Source/Resource/Models/ModelResource.cpp @@ -9,32 +9,47 @@ #include // OFFSET: 0x00755630 -// OFFSET: 0x00750B10 // FUNCTION: fn_07985 -ModelNode::ModelNode(TextureCache& textures) : model(nullptr), parent(nullptr), alpha(255), m_textures(textures) { +ModelNode::ModelNode() : model(nullptr), parent(nullptr), alpha(255) { } -// OFFSET: 0x007570F0 +// OFFSET: 0x007568E0 // FUNCTION: fn_07996 ModelNode::~ModelNode() { for (CTexture* texture : this->textures) { if (texture) { texture->Release(); - this->m_textures.Remove(texture); + this->model->m_context->textures.Remove(texture); } } + + this->textures.clear(); + this->mesh.reset(); + this->children.clear(); } +// INLINED +ModelNodeV1::ModelNodeV1() = default; + +// INLINED +ModelNodeV1::~ModelNodeV1() = default; + +// INLINED +ModelNodeV2::ModelNodeV2() = default; + +// INLINED +ModelNodeV2::~ModelNodeV2() = default; + // OFFSET: 0x007553E0 // FUNCTION: fn_07982 C3dModelRes::C3dModelRes(ModelResourceContext& context) : major(0), shade(0), alpha(255), m_context(&context) { } -// OFFSET: 0x00757090 +// OFFSET: 0x007567B0 // FUNCTION: fn_07995 C3dModelRes::~C3dModelRes() = default; -// OFFSET: 0x00750A70 +// OFFSET: 0x00755560 // FUNCTION: fn_07983 C3dModelResV1::C3dModelResV1(ModelResourceContext& context) : C3dModelRes(context), animationLength(0) { } @@ -81,7 +96,7 @@ void C3dModelRes::Unload() { // INLINED inline void C3dModelResV1::ReadNode(ResourceByteReader& input, unsigned minor, const std::vector& textureNames) { - auto node = std::make_unique(this->m_context->textures); + auto node = std::make_unique(); node->model = this; node->alpha = this->alpha; char field[40]{}; diff --git a/Source/Resource/Models/ModelResource.h b/Source/Resource/Models/ModelResource.h index 3529029..7903a42 100644 --- a/Source/Resource/Models/ModelResource.h +++ b/Source/Resource/Models/ModelResource.h @@ -50,33 +50,44 @@ struct ModelVolume { class ModelNode { public: - explicit ModelNode(TextureCache& textures); - ~ModelNode(); + ModelNode(); + virtual ~ModelNode(); ModelNode(const ModelNode&) = delete; ModelNode& operator=(const ModelNode&) = delete; - std::string name; - std::string parentName; - C3dModelRes* model; - ModelNode* parent; - std::list children; - std::vector textures; - std::unique_ptr mesh; - unsigned char alpha; - unsigned char unknown_0055[3]; - float position[3]; - float scale[3]; - float angle; - float axis[3]; - float transform[12]; - std::vector legacyPositionKeys; - std::vector rotationKeys; - std::vector scaleKeys; - std::vector positionKeys; - std::map textureKeys; + /* 0004 */ std::string name; + /* 001C */ std::string parentName; + /* 0034 */ C3dModelRes* model; + /* 0038 */ ModelNode* parent; + /* 003C */ std::list children; + /* 0044 */ std::vector textures; + /* 0050 */ std::unique_ptr mesh; + /* 0054 */ unsigned char alpha; +}; -private: - TextureCache& m_textures; +class ModelNodeV1 : public ModelNode { +public: + ModelNodeV1(); + ~ModelNodeV1() override; + + /* 0058 */ float position[3]; + /* 0064 */ float axis[3]; + /* 0070 */ float angle; + /* 0074 */ float scale[3]; + /* 0080 */ std::vector legacyPositionKeys; + /* 008C */ std::vector rotationKeys; +}; + +class ModelNodeV2 : public ModelNode { +public: + ModelNodeV2(); + ~ModelNodeV2() override; + + /* 0058 */ float transform[12]; + /* 0088 */ std::vector scaleKeys; + /* 0094 */ std::vector rotationKeys; + /* 00A0 */ std::vector positionKeys; + /* 00AC */ std::map textureKeys; }; struct ModelResourceContext { @@ -86,6 +97,7 @@ struct ModelResourceContext { }; class C3dModelRes : public CRes { + friend class ModelNode; public: explicit C3dModelRes(ModelResourceContext& context); ~C3dModelRes() override; @@ -93,15 +105,15 @@ public: ModelNode* FindNode(const char* name) const; void RegisterMovies(class BinkMovies& movies, const float* position) const; - int major; - std::list nodes; - std::list rootNames; - std::map meshes; - std::list volumes; - std::string sourceName; - int shade; - unsigned char alpha; - std::list movieNames; + /* 0110 */ int major; + /* 0114 */ std::list nodes; + /* 011C */ std::list rootNames; + /* 0124 */ std::map meshes; + /* 012C */ std::list volumes; + /* 0134 */ std::string sourceName; + /* 014C */ int shade; + /* 0150 */ unsigned char alpha; + /* 0154 */ std::list movieNames; protected: ModelResourceContext* m_context; @@ -139,4 +151,10 @@ static_assert(sizeof(ModelScaleKey) == 32); static_assert(sizeof(ModelRotationKey) == 20); static_assert(sizeof(ModelVolume) == 232); +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(ModelNode) == 0x58); +static_assert(sizeof(ModelNodeV1) == 0x98); +static_assert(sizeof(ModelNodeV2) == 0xB4); +#endif + #endif diff --git a/Source/Resource/Models/ModelResourceV2.cpp b/Source/Resource/Models/ModelResourceV2.cpp index 29b39b6..e3f4ed0 100644 --- a/Source/Resource/Models/ModelResourceV2.cpp +++ b/Source/Resource/Models/ModelResourceV2.cpp @@ -36,7 +36,7 @@ namespace { } } -// OFFSET: 0x00751ED0 +// OFFSET: 0x007555C0 // FUNCTION: fn_07984 C3dModelResV2::C3dModelResV2(ModelResourceContext& context) : C3dModelRes(context), framesPerSecond(0.0f), animationLength(0) { } @@ -92,7 +92,7 @@ bool C3dModelResV2::Load(const char* name) { // INLINED inline void C3dModelResV2::ReadNode(ResourceByteReader& input, unsigned minor, const std::vector& textureNames) { - auto node = std::make_unique(this->m_context->textures); + auto node = std::make_unique(); node->model = this; node->mesh = std::make_unique(); node->name = ReadName(input); From 9434616b2b52d1b69ce0f56753947f22894de367 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:07:49 +0100 Subject: [PATCH 14/62] =?UTF-8?q?=F0=9F=8E=A8=20style(UIShortCutWnd):=20up?= =?UTF-8?q?dated=20include=20to=20stdio.h=20and=20added=20function=20annot?= =?UTF-8?q?ation=20comment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/UI/Shortcuts/UIShortCutWnd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/UI/Shortcuts/UIShortCutWnd.cpp b/Source/UI/Shortcuts/UIShortCutWnd.cpp index 62dae1c..bb90e32 100644 --- a/Source/UI/Shortcuts/UIShortCutWnd.cpp +++ b/Source/UI/Shortcuts/UIShortCutWnd.cpp @@ -20,7 +20,7 @@ #include "UI/Layout/WindowSnapping.h" #include "UI/Window/UIWindow.h" -#include +#include #include namespace {} @@ -34,8 +34,10 @@ UIShortCutWnd::UIShortCutWnd(UIWindowContext& windows, UIFrameContext& frames, S } // OFFSET: 0x00915D90 +// FUNCTION: fn_12577 UIShortCutWnd::~UIShortCutWnd() = default; + // OFFSET: 0x0091E800 // FUNCTION: fn_12629 bool UIShortCutWnd::Slot03() { From 181f0993449dd433d5222306601eeeef8ad3d981 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:17:49 +0100 Subject: [PATCH 15/62] =?UTF-8?q?=E2=9C=A8=20feat(Resource):=20added=20MSG?= =?UTF-8?q?STRINGID=20enum=20definitions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Resource/MSGSTRINGID.h | 4240 +++++++++++++++++++++++++++++++++ 1 file changed, 4240 insertions(+) create mode 100644 Source/Resource/MSGSTRINGID.h diff --git a/Source/Resource/MSGSTRINGID.h b/Source/Resource/MSGSTRINGID.h new file mode 100644 index 0000000..c39bdec --- /dev/null +++ b/Source/Resource/MSGSTRINGID.h @@ -0,0 +1,4240 @@ +#pragma once + +enum MSGSTRINGID : int { + MSI_DO_YOU_AGREE = 0u, + MSI_SERVER_CONNECTION_FAILED = 1u, + MSI_UNABLE_TO_CONNECT_SERVER = 2u, + MSI_BANNED = 3u, + MSI_SERVER_OFF = 4u, + MSI_DOUBLE_LOGIN_PROHIBITED = 5u, + MSI_INCORRECT_USERID = 6u, + MSI_INCORRECT_PASSWORD = 7u, + MSI_ID_EXPIRED = 8u, + MSI_ACCESS_DENIED = 9u, + MSI_CHARACTER_NAME_ALREADY_EXISTS = 10u, + MSI_CHARACTER_CREATION_DENIED = 11u, + MSI_CANNOT_DELETE_CHARACTER = 12u, + MSI_ENTER_ROOM_TITLE = 13u, + MSI_BAD_SENTANGE = 14u, + MSI_ENTER_PASSWORD = 15u, + MSI_ENTER_PASSWORD_MORE_THAN_4_CHAR = 16u, + MSI_DO_YOU_REALLY_WANT_TO_QUIT = 17u, + MSI_NAME_MUST_EXCEED_4_CHAR = 18u, + MSI_DELETE_CHARACTER = 19u, + MSI_BAD_NAME = 20u, + MSI_ENTER_NAME_MORE_THAN_4_CHAR = 21u, + MSI_LIST_COMMAND = 22u, + MSI_EFFECT_ON = 23u, + MSI_EFFECT_OFF = 24u, + MSI_VOLUME_OF_SOUND = 25u, + MSI_VOLUME_OF_BGM = 26u, + MSI_SOUND_ON = 27u, + MSI_SOUND_OFF = 28u, + MSI_FRAME_SKIP_ON = 29u, + MSI_FRAME_SKIP_OFF = 30u, + MSI_BGM_ON = 31u, + MSI_BGM_OFF = 32u, + MSI_EXPLAIN_HELP = 33u, + MSI_EXPLAIN_WHO = 34u, + MSI_EXPLAIN_MUSIC = 35u, + MSI_EXPLAIN_SOUND = 36u, + MSI_EXPLAIN_EFFECT = 37u, + MSI_EXPLAIN_POS = 38u, + MSI_EXPLAIN_FRAMESKIP = 39u, + MSI_EXPLAIN_SOUNDVOLUME = 40u, + MSI_EXPLAIN_BGMVOLUME = 41u, + MSI_EXPLAIN_SAYISOLATION = 42u, + MSI_EXPLAIN_LIST_SAYISOLATION_CHAR = 43u, + MSI_EXPLAIN_SAY_PERMIT = 44u, + MSI_EXPLAIN_SAY_PERMITALL = 45u, + MSI_EXPLAIN_SAY_ISOLATEALL = 46u, + MSI_EXPLAIN_TIP1 = 47u, + MSI_EXPLAIN_TIP2 = 48u, + MSI_NO_SAME_SENTANCE = 49u, + MSI_NO_SEND_BECAUSE_INSULT = 50u, + MSI_CAN_DRAG_ITEM_OLNY_ONETIME = 51u, + MSI_CANT_GET_ITEM_BECAUSE_WEIGHT = 52u, + MSI_CANT_GET_ITEM = 53u, + MSI_DEAL_SECCESS = 54u, + MSI_INSUFFICIENT_MONEY = 55u, + MSI_OVER_WEIGHT = 56u, + MSI_DEAL_FAIL = 57u, + MSI_REFUSE_HEAR_ALL = 58u, + MSI_REQ_REFUSE_HEAR_ALL_FAIL = 59u, + MSI_HEAR_ALL = 60u, + MSI_REQ_HEAR_ALL_FAIL = 61u, + MSI_NO_REFUSE_HEAR_LIST = 62u, + MSI_REFUSE_HEAR_LIST = 63u, + MSI_ROOM_IS_MADE = 64u, + MSI_TOO_MANY_ROOM = 65u, + MSI_SAME_ROOM_TITLE = 66u, + MSI_TOO_MANY_PEOPLE_IN_ROOM = 67u, + MSI_YOU_HAVE_BANNED_FROM_THE_ROOM = 68u, + MSI_REJECT_DEAL = 69u, + MSI_TOO_FAR_TO_DEAL = 70u, + MSI_CHARACTER_IS_NOT_EXIST = 71u, + MSI_CHARACTER_IS_DEALING = 72u, + MSI_CHARACTER_IS_OVER_WEIGHT = 73u, + MSI_DEAL_IS_CANCELED = 74u, + MSI_DEAL_SUCCESS = 75u, + MSI_DEAL_FAILED = 76u, + MSI_PARTY_MAKE_SUCCEED = 77u, + MSI_SAME_PARTY_NAME = 78u, + MSI_YOU_ARE_ALREADY_IN_PARTY = 79u, + MSI_CHARACTER_IS_ALREADY_IN_PARTY = 80u, + MSI_CHARACTER_REJECT_JOIN = 81u, + MSI_CHARACTER_ACCEPT_JOIN = 82u, + MSI_TOO_MANY_PEOPLE_IN_PARTY = 83u, + MSI_YOU_LEAVE_FROM_PARTY = 84u, + MSI_SEND_TO_ALL = 85u, + MSI_SEND_TO_PARTY = 86u, + MSI_REQ_DEAL_WITH = 87u, + MSI_REQ_JOIN_PARTY = 88u, + MSI_ROOM_PRIVATE = 89u, + MSI_ROOM_PUBLIC = 90u, + MSI_RESTART_MSG = 91u, + MSI_SELECT_DEAL_TYPE = 92u, + MSI_SUGGEST_DEAL = 93u, + MSI_SUGGEST_JOIN_PARTY = 94u, + MSI_INVALID_COMMAND = 95u, + MSI_LEAVE_PARTY = 96u, + MSI_EXPEL = 97u, + MSI_MSG = 98u, + MSI_1ON1 = 99u, + MSI_CHARACTER_INFO = 100u, + MSI_PARTY_SETTING = 101u, + MSI_FRIEND = 102u, + MSI_PARTY = 103u, + MSI_EQUIPED_ITEM = 104u, + MSI_STATUS = 105u, + MSI_ITEM = 106u, + MSI_EXPLAIN_PARTY = 107u, + MSI_EXPLAIN_TIP3 = 108u, + MSI_RESTORE = 109u, + MSI_ATTACK = 110u, + MSI_SUPPORT = 111u, + MSI_ALL = 112u, + MSI_WEAPON = 113u, + MSI_DEFENCE = 114u, + MSI_WATER = 115u, + MSI_EARTH = 116u, + MSI_FIRE = 117u, + MSI_WIND = 118u, + MSI_EQUIPITEM_OLNY_ONE = 119u, + MSI_ONLY_16BIT_WHEN_WINDOWMODE = 120u, + MSI_PLEASE_BE_PATIENT = 121u, + MSI_WAITING_RESPONSE_FROM_SERVER = 122u, + MSI_MAKING_CHARACTER = 123u, + MSI_DELETING_CHARACTER = 124u, + MSI_MAKING_ROOM = 125u, + MSI_CHANGE_ROOM_SETTING = 126u, + MSI_BAN = 127u, + MSI_GIVE_GIVE_ROOM_POWER = 128u, + MSI_SEE_INFORMATION_OF_CHARACTER = 129u, + MSI_CHAT_ROOM = 130u, + MSI_COUNT_UNIT_OF_PEOPLE = 131u, + MSI_EXPLAIN_SIT = 132u, + MSI_EXPLAIN_STAND = 133u, + MSI_EXPLAIN_MAKE_CHAT = 134u, + MSI_EXPLAIN_EXIT_CHAT_ROOM = 135u, + MSI_EXPLAIN_DEAL = 136u, + MSI_EXPLAIN_ORGANIZE_PARTY = 137u, + MSI_EXPLAIN_LEAVE_PARTY = 138u, + MSI_EXPLAIN_EXPEL_PARTY_MEMBER = 139u, + MSI_EXPLAIN_TIP4 = 140u, + MSI_EXPLAIN_TIP5 = 141u, + MSI_EXPLAIN_TIP6 = 142u, + MSI_YOU_RECEIVE_MVP_ITEM = 143u, + MSI_YOU_RECEIVE_MVP_ITEM2 = 144u, + MSI_YOU_RECEIVE_MVP_EXP = 145u, + MSI_YOU_RECEIVE_MVP_EXP2 = 146u, + MSI_YOU_THROW_MVPITEM = 147u, + MSI_NOT_EXIST_CHARACTER = 148u, + MSI_NO_RECEIVE_MODE = 149u, + MSI_NO_RECEIVE_MODE_FOR_ALL = 150u, + MSI_SUCCESS_DISCONNECT_CHARACTER = 151u, + MSI_FAIL_DISCONNECT_CHARACTER = 152u, + MSI_GET_ITEM = 153u, + MSI_EXPLAIN_TIP7 = 154u, + MSI_EXPLAIN_TIP8 = 155u, + MSI_EXPLAIN_TIP9 = 156u, + MSI_EXPLAIN_TIP10 = 157u, + MSI_EXPLAIN_TIP11 = 158u, + MSI_NOT_ENOUGH_SKILLLEVE1 = 159u, + MSI_NOT_ENOUGH_SKILLLEVE2 = 160u, + MSI_NOT_ENOUGH_SKILLLEVE3 = 161u, + MSI_NOT_ENOUGH_SKILLLEVE4 = 162u, + MSI_NOT_ENOUGH_SKILLLEVE5 = 163u, + MSI_NOT_ENOUGH_SKILLLEVE6 = 164u, + MSI_NOT_ENOUGH_SKILLLEVE7 = 165u, + MSI_ITEMS_FOR_BUY = 166u, + MSI_ITEM_STORE = 167u, + MSI_ITEMS_FOR_SELL = 168u, + MSI_ITEMS_THAT_IS_STORED = 169u, + MSI_ITEM_IS_EQUIPED = 170u, + MSI_ITEM_IS_REMOVED = 171u, + MSI_ADD_TO_WHISPER_CHAR_LIST = 172u, + MSI_EXPLAIN_TIP12 = 173u, + MSI_TIPOFTHEDAY = 174u, + MSI_DIDYOUKNOW = 175u, + MSI_SHOWTIPSATSTARTUP = 176u, + MSI_EXPLAIN_OPENTIP = 177u, + MSI_NUMPEOPLE = 178u, + MSI_USERGETINTHEROOM = 179u, + MSI_USERGETOUTOFTHEROOM = 180u, + MSI_USERGETOUTOFTHEROOMBYFORCE = 181u, + MSI_EA = 182u, + MSI_EA2 = 183u, + MSI_EA3 = 184u, + MSI_ITEMSYOUCANSELL = 185u, + MSI_SHOPITEMS = 186u, + MSI_NOWHERE = 187u, + MSI_CLIENTTYPEMISMATCH = 188u, + MSI_CLOSEEQUIPWND = 189u, + MSI_ENGLISHONLY = 190u, + MSI_NOTSUPPORTEDYET = 191u, + MSI_NOWHISPERLIST = 192u, + MSI_WHISPERIGNORESUCCESS = 193u, + MSI_WHISPERIGNOREFAILED1 = 194u, + MSI_WHISPERIGNOREFAILED2 = 195u, + MSI_WHISPERNOIGNORESUCCESS = 196u, + MSI_WHISPERNOIGNOREFAILED1 = 197u, + MSI_WHISPERNOIGNOREFAILED2 = 198u, + MSI_NO_SPACE_IN_NAME = 199u, + MSI_ROOM_PRIVATE2 = 200u, + MSI_ROOM_PUBLIC2 = 201u, + MSI_USESKILL_FAIL_SP_INSUFFICIENT = 202u, + MSI_USESKILL_FAIL_HP_INSUFFICIENT = 203u, + MSI_NOT_ENOUGH_SKILLLEVE8 = 204u, + MSI_FAIL_STEAL = 205u, + MSI_EXCHANGE = 206u, + MSI_FAIL_POISON = 207u, + MSI_ID_MISMATCH = 208u, + MSI_SPEEDUP = 209u, + MSI_SPEEDDOWN = 210u, + MSI_EXPLAIN_TIP13 = 211u, + MSI_RANDOM_POS = 212u, + MSI_SELECTWHERETOWARP = 213u, + MSI_NOTENOUGHSKILLLEVEL = 214u, + MSI_NO_STORED_PLACE_TO_WARP = 215u, + MSI_NOWARPSKILL = 216u, + MSI_WARPPOINTSTORED = 217u, + MSI_CANCEL = 218u, + MSI_SKILLINTERVAL = 219u, + MSI_CANT_GET_ITEM_BECAUSE_COUNT = 220u, + MSI_INSUFFICIENT_OVER_COUNT = 221u, + MSI_MERCHANTITEM = 222u, + MSI_CARTOFF = 223u, + MSI_MERCHANTSHOPMAKER = 224u, + MSI_ENTER_SHOP_TITLE = 225u, + MSI_ITEM_MY_STORE = 226u, + MSI_ITEM_MERCHANT_STORE = 227u, + MSI_ITEMS_FOR_BUY_FROM_MERCHANT = 228u, + MSI_FAIL_BUY_ITEM_FROM_MERCHANT = 229u, + MSI_INSUFFICIENT_STOCK = 230u, + MSI_ITEM_IS_SOLD = 231u, + MSI_MERCHANTMIRRORITEM = 232u, + MSI_SKILL_FAIL_MONEY = 233u, + MSI_SELECTTARGET = 234u, + MSI_EXPLAIN_TIP14 = 235u, + MSI_STREETSHOP = 236u, + MSI_OPENCARTWINDOW = 237u, + MSI_BASICINFOWND = 238u, + MSI_USESKILL_FAIL_NOT_SUITABLE_WEAPON = 239u, + MSI_FAIL_BUY_ITEM_FROM_MERCHANT_NO_STOCK = 240u, + MSI_SPEEDHACK = 241u, + MSI_ERR_ATTACK_ARROW = 242u, + MSI_ERR_ATTACK_WEIGHT = 243u, + MSI_ERR_SKILL_WEIGHT = 244u, + MSI_MSG_ARROW_EQUIPMENT_SUCCESS = 245u, + MSI_NEED_REDJAMSTONE = 246u, + MSI_NEED_BLUEJAMSTONE = 247u, + MSI_DESC_STR = 248u, + MSI_DESC_AGI = 249u, + MSI_DESC_VIT = 250u, + MSI_DESC_INT = 251u, + MSI_DESC_DEX = 252u, + MSI_DESC_LUK = 253u, + MSI_DESC_ATK = 254u, + MSI_DESC_DEF = 255u, + MSI_DESC_HIT = 256u, + MSI_DESC_CRI = 257u, + MSI_DESC_GUILD = 258u, + MSI_DESC_POINT = 259u, + MSI_DESC_MATK = 260u, + MSI_DESC_MDEF = 261u, + MSI_DESC_FLEE = 262u, + MSI_DESC_ASPD = 263u, + MSI_PC_OVERFLOW = 264u, + MSI_OPTIONWND = 265u, + MSI_ID_EMAIL_CONFIRM_NEEDED = 266u, + MSI_INCORRECT_LOGIN_PASSWORD = 267u, + MSI_SELECT_HAIR_STYLE = 268u, + MSI_ATK = 269u, + MSI_DEF = 270u, + MSI_ATTACK_SNAP_ON = 271u, + MSI_ATTACK_SNAP_OFF = 272u, + MSI_SKILL_SNAP_ON = 273u, + MSI_SKILL_SNAP_OFF = 274u, + MSI_EXPLAIN_SNAP = 275u, + MSI_ITEM_SNAP_ON = 276u, + MSI_ITEM_SNAP_OFF = 277u, + MSI_SNAP = 278u, + MSI_CANT_GET_ITEM_OVERCOUNT_ONEITEM = 279u, + MSI_CANT_DELETE_CHARACTER_OVER_30_LEVEL = 280u, + MSI_FAIL_BUY_ITEM_ITEM_EXCHANGING = 281u, + MSI_STALL_NAME = 282u, + MSI_SKILLLIST = 283u, + MSI_SKILLPOINT = 284u, + MSI_USESKILL_FAIL = 285u, + MSI_PASSIVE = 286u, + MSI_EXPDIV1 = 287u, + MSI_EXPDIV2 = 288u, + MSI_ITEMCOLLECT1 = 289u, + MSI_ITEMCOLLECT2 = 290u, + MSI_PARTYSETTING = 291u, + MSI_HOWEXPDIV = 292u, + MSI_HOWITEMCOLLECT = 293u, + MSI_ONLY_PARTYMASTER = 294u, + MSI_NOQUESTION_ITEMCOUNT = 295u, + MSI_CHARARATER_DELETE_COUNT = 296u, + MSI_MAXEXCHANGE_IS_10_KIND = 297u, + MSI_LIMIT_AGE = 298u, + MSI_ENTER_EMAIL = 299u, + MSI_ENTER_EMAIL_TOOLTIP = 300u, + MSI_CANNOT_DELETE_CHARACTER_EMAIL = 301u, + MSI_ENTER_PEOPLE_REG_NUMBER = 302u, + MSI_CANNOT_DELETE_CHARACTER_PEOPLE_REG_NUMBER = 303u, + MSI_CANT_SELL_OVER_15 = 304u, + MSI_UNDER_AGE = 305u, + MSI_NO_RECOVER_OVERWEIGHT = 306u, + MSI_NO_ATTACK_OVERWEIGHT = 307u, + MSI_NO_RECOVER_OVERWEIGHT_RELEASED = 308u, + MSI_NO_ATTACK_OVERWEIGHT_RELEASED = 309u, + MSI_INVALID_VERSION = 310u, + MSI_ITEM_IS_SOLD_OUT = 311u, + MSI_WRITE_CHAT_TO_FILE = 312u, + MSI_EXPLAIN_SAVE_CHAT = 313u, + MSI_MAKEACCOUNT = 314u, + MSI_REQ_EX_LIST = 315u, + MSI_REQ_IN = 316u, + MSI_MISS_EFFECT_ON = 317u, + MSI_MISS_EFFECT_OFF = 318u, + MSI_FIXED_CAMERA_ON = 319u, + MSI_FIXED_CAMERA_OFF = 320u, + MSI_EXPLAIN_CAMERA_MISS = 321u, + MSI_SEE_INFORMATION_OF_SKILL = 322u, + MSI_CHANGE_SKILL_NAME = 323u, + MSI_SPRITE_RESOLUTION = 324u, + MSI_TEXTURE_RESOLUTION = 325u, + MSI_DETAILLEVELWND = 326u, + MSI_GET_ZENY = 327u, + MSI_GUILDNAME = 328u, + MSI_GUILDLEVEL = 329u, + MSI_GUILD_MASTER_NAME = 330u, + MSI_GUILD_NUM_MEMBER = 331u, + MSI_GUILD_AVG_MEMBER_LEVEL = 332u, + MSI_GUILD_MANAGE_LAND = 333u, + MSI_GUILD_FAIR = 334u, + MSI_GUILD_EXP = 335u, + MSI_GUILD_EMBLEM = 336u, + MSI_GUILD_POINT = 337u, + MSI_ALLY_GUILD = 338u, + MSI_HOSTILITY_GUILD = 339u, + MSI_GUILDINFOMANAGE = 340u, + MSI_GUILDMEMBERMANAGE = 341u, + MSI_GUILDPOSITIONMANAGE = 342u, + MSI_GUILDSKILL = 343u, + MSI_GUILDBANISHEDMEMBER = 344u, + MSI_GUILDNOTICE = 345u, + MSI_GUILDTOTALINFO = 346u, + MSI_WHISPERLISTWND = 347u, + MSI_OPENWHISPERLISTWND = 348u, + MSI_EXPLAIN_WHISPER_LIST_WND = 349u, + MSI_AUTOOPENWHISPERLISTWND = 350u, + MSI_DELETE = 351u, + MSI_DONTOPEN = 352u, + MSI_LAST_LOGIN_TIME = 353u, + MSI_LAST_LOGIN_IP = 354u, + MSI_FRIEND_SETTING = 355u, + MSI_DO_YOU_REALLY_WANT_DELETE = 356u, + MSI_DO_YOU_REALLY_WANT_LEAVE = 357u, + MSI_ADD_TO_FRIEND_CHAR_LIST = 358u, + MSI_AUTOOPENWHISPERLISTWND_FRIEND = 359u, + MSI_OPEN_1ON1_WINDOW = 360u, + MSI_AUTOOPEN_1ON1_WINDOW = 361u, + MSI_WHISPER_OPEN_SOUND = 362u, + MSI_DO_YOU_REALLY_WANT_EXPEL = 363u, + MSI_USER_LEFT_GUILD = 364u, + MSI_REASON_LEAVE_GUILD = 365u, + MSI_DISORGANIZE_GUILD_FAILURE = 366u, + MSI_DISORGANIZATION_REASON = 367u, + MSI_DELETED_ACCOUNT = 368u, + MSI_SELLPRICE = 369u, + MSI_BAN_GUILD = 370u, + MSI_REASON_BAN_GUILD = 371u, + MSI_CAN_NOT_EQUIP_ITEM = 372u, + MSI_PARTYSETTING_CHANGE_IMPOSSIBLE = 373u, + MSI_GUILD_MAKE_SUCCESS = 374u, + MSI_GUILD_MAKE_ALREADY_MEMBER = 375u, + MSI_GUILD_MAKE_GUILD_EXIST = 376u, + MSI_SUGGEST_JOIN_GUILD = 377u, + MSI_CHARACTER_IS_ALREADY_IN_GUILD = 378u, + MSI_CHARACTER_REJECT_JOIN_GUILD = 379u, + MSI_CHARACTER_ACCEPT_JOIN_GUILD = 380u, + MSI_TOO_MANY_PEOPLE_IN_GUILD = 381u, + MSI_REQ_JOIN_GUILD = 382u, + MSI_NOT_ENOUGH_FOR_MANNER_POINT = 383u, + MSI_GIVING_MANNER_POINT_SUCCESS = 384u, + MSI_YOU_USE_TODAY_ALREADY = 385u, + MSI_ONE_MONTH_NOT_PASSED = 386u, + MSI_RECEIVE_PLUS_MANNER_POINT = 387u, + MSI_RECEIVE_MINUS_MANNER_POINT = 388u, + MSI_GIVE_PLUS_MANNER_POINT = 389u, + MSI_GIVE_MINUS_MANNER_POINT = 390u, + MSI_REQ_DEAL_WITH2 = 391u, + MSI_REQ_JOIN_PARTY2 = 392u, + MSI_SUGGEST_ALLY_GUILD = 393u, + MSI_REQALLYGUILD_ALREADY_ALLIED = 394u, + MSI_REQALLYGUILD_REJECT = 395u, + MSI_REQALLYGUILD_ACCEPT = 396u, + MSI_REQALLYGUILD_OVERSIZE = 397u, + MSI_REQALLYMYGUILD_OVERSIZE = 398u, + MSI_REQ_ALLY_GUILD = 399u, + MSI_DISORGANIZE_GUILD_SUCCESS = 400u, + MSI_DISORGANIZE_GUILD_INVALIDKEY = 401u, + MSI_DISORGANIZE_GUILD_MEMBEREXIST = 402u, + MSI_REQ_HOSTILE_GUILD = 403u, + MSI_SELECT_HAIR_COLOR = 404u, + MSI_GUILD_MAKE_GUILD_NONE_ITEM = 405u, + MSI_MONSTER_INFO_WINDOW = 406u, + MSI_NAME = 407u, + MSI_LEVEL = 408u, + MSI_HP = 409u, + MSI_SIZE = 410u, + MSI_RACETYPE = 411u, + MSI_MDEFPOWER = 412u, + MSI_PROPERTY = 413u, + MSI_PROPERTY_NEUTURAL = 414u, + MSI_PROPERTY_WATER = 415u, + MSI_PROPERTY_EARTH = 416u, + MSI_PROPERTY_FIRE = 417u, + MSI_PROPERTY_WIND = 418u, + MSI_PROPERTY_POISON = 419u, + MSI_PROPERTY_SAINT = 420u, + MSI_PROPERTY_DARK = 421u, + MSI_PROPERTY_MENTAL = 422u, + MSI_PROPERTY_UNDEAD = 423u, + MSI_CANT_MAKE_ITEM = 424u, + MSI_MAKE_LIST = 425u, + MSI_MAKE_TARGET = 426u, + MSI_REQUIRE_FOR_MAKE_TARGET = 427u, + MSI_MAKE_TARGET_FAIL = 428u, + MSI_MAKE_TARGET_SUCCEESS = 429u, + MSI_MAKE_TARGET_FAIL_MSG = 430u, + MSI_MAKE_TARGET_SUCCEESS_MSG = 431u, + MSI_NOT_ENOUGH_LEVEL = 432u, + MSI_TOO_HIGH_LEVEL = 433u, + MSI_NOT_ACCEPTABLE_JOB = 434u, + MSI_TALKBOX_WINDOW = 435u, + MSI_TALKBOX_WINDOW_MSG = 436u, + MSI_SEND_TO_GUILD = 437u, + MSI_NOT_SETTLED = 438u, + MSI_ACCOUNT_BUSY = 439u, + MSI_INFORMATION_REMAINED = 440u, + MSI_BIRDOFF = 441u, + MSI_CHIKENOFF = 442u, + MSI_SIZE_SMALL = 443u, + MSI_SIZE_MIDDLE = 444u, + MSI_SIZE_BIG = 445u, + MSI_DOUBLE = 446u, + MSI_TRIPLE = 447u, + MSI_QUADROPLE = 448u, + MSI_LOGIN_REFUSE_BLOCKED_UNTIL = 449u, + MSI_MANUFACTURED_NORMAL_ITEM = 450u, + MSI_MANUFACTURED_FIRE_ITEM = 451u, + MSI_MANUFACTURED_ICE_ITEM = 452u, + MSI_MANUFACTURED_WIND_ITEM = 453u, + MSI_MANUFACTURED_EARTH_ITEM = 454u, + MSI_ACCOUNT_ADDRESS = 455u, + MSI_ACCOUNT_PORT = 456u, + MSI_REGISTRATION_WEB_URL = 457u, + MSI_BAN_USER = 458u, + MSI_ONE_STARPIECE = 459u, + MSI_TWO_STARPIECE = 460u, + MSI_THREE_STARPIECE = 461u, + MSI_GUILD_KICK_REASON = 462u, + MSI_INCATTACKSPEED = 463u, + MSI_DECATTACKSPEED = 464u, + MSI_INCWEAPONATTACK = 465u, + MSI_DECWEAPONATTACK = 466u, + MSI_FASTPREDELAY = 467u, + MSI_NORMALPREDELAY = 468u, + MSI_WEAPONPROPERTYPOISON = 469u, + MSI_WEAPONPROPERTYSAINT = 470u, + MSI_WEAPONPROPERTYORIGINAL = 471u, + MSI_ARMORPROPERTYSAINT = 472u, + MSI_ARMORPROPERTYORIGINAL = 473u, + MSI_BARRIOR = 474u, + MSI_DISAPPEARBARRIOR = 475u, + MSI_PERFECTDAMAGE = 476u, + MSI_DISAPPEARPERFECTDAMAGE = 477u, + MSI_OVERTHRUSTING = 478u, + MSI_DISAPPEAROVERTHRUSTING = 479u, + MSI_MAXIMIZE = 480u, + MSI_DISAPPEARMAXIMIZE = 481u, + MSI_SERVER_PROPERTY_NEW = 482u, + MSI_SERVER_USER_COUNT = 483u, + MSI_SERVER_INSPECTING = 484u, + MSI_GUILD_MEMBER_STATUS_ONLINE = 485u, + MSI_GUILD_MEMBER_STATUS_OFFLINE = 486u, + MSI_GOT_EXPERIENCE_POINT = 487u, + MSI_GOT_JOB_EXPERIENCE_POINT = 488u, + MSI_LEFT_GUILD = 489u, + MSI_BAN_FROM_GUILD = 490u, + MSI_ITEM_IDENTIFY_SUCCEESS = 491u, + MSI_ITEM_IDENTIFY_FAIL = 492u, + MSI_ITEM_COMPOUNDING_SUCCEESS = 493u, + MSI_ITEM_COMPOUNDING_FAIL = 494u, + MSI_HOSTILE_GUILD_SUCCEESS = 495u, + MSI_TOO_MANY_HOSTILE_GUILD = 496u, + MSI_ALREADY_REGISTERED_HOSTILE_GUILD = 497u, + MSI_ITEM_REFINING_SUCCEESS = 498u, + MSI_ITEM_REFINING_FAIL = 499u, + MSI_IMPOSSIBLE_TELEPORT_AREA = 500u, + MSI_POSSIBLE_TELEPORT_AREA = 501u, + MSI_CANT_EXIT_NOW = 502u, + MSI_POSITION = 503u, + MSI_JOB = 504u, + MSI_MEMO = 505u, + MSI_CONTRIBUTION = 506u, + MSI_EXP_CONTIRIBUTION = 507u, + MSI_LEAVE_GUILD = 508u, + MSI_EXPEL_GUILD = 509u, + MSI_GRADE = 510u, + MSI_POSITION_NAME = 511u, + MSI_JOIN_AUTHORITY = 512u, + MSI_PENALTY_AUTORITY = 513u, + MSI_CONTRIBUTION_PERCENT = 514u, + MSI_TITLE = 515u, + MSI_CONTENTS = 516u, + MSI_GUILD_NAME = 517u, + MSI_GUILD_LEVEL = 518u, + MSI_GUILD_PEOPLE_COUNT = 519u, + MSI_RANKING = 520u, + MSI_ITEM_IDENTIFY = 521u, + MSI_ITEM_COMPOUNDING = 522u, + MSI_PLEASE_INPUT_WHY_LEAVING = 523u, + MSI_PELASE_INPUT_WHY_EXPEL = 524u, + MSI_PLEASE_CLOSE_STORE = 525u, + MSI_SKILL_NAME = 526u, + MSI_ITEM_NAME = 527u, + MSI_SETTLE_WEB_URL = 528u, + MSI_BAN_IP_OVERFLOW = 529u, + MSI_BAN_PAY_OUT = 530u, + MSI_NAMELENGTH_TOO_LONG = 531u, + MSI_DELETE_AFTER_10_SECOND = 532u, + MSI_BILLING_100 = 533u, + MSI_BILLING_200 = 534u, + MSI_BILLING_300 = 535u, + MSI_BILLING_400 = 536u, + MSI_BILLING_500 = 537u, + MSI_BILLING_501 = 538u, + MSI_BILLING_600 = 539u, + MSI_BILLING_700 = 540u, + MSI_BILLING_800 = 541u, + MSI_EMOTION_LIST = 542u, + MSI_VIEW_EMOTION = 543u, + MSI_EMOTION_SURPRISE = 544u, + MSI_EMOTION_QUESTION = 545u, + MSI_EMOTION_DELIGHT = 546u, + MSI_EMOTION_THROB = 547u, + MSI_EMOTION_BIGTHROB = 548u, + MSI_EMOTION_SWEAT = 549u, + MSI_EMOTION_AHA = 550u, + MSI_EMOTION_FRET = 551u, + MSI_EMOTION_ANGER = 552u, + MSI_EMOTION_MONEY = 553u, + MSI_EMOTION_THINK = 554u, + MSI_EMOTION_THANKS = 555u, + MSI_EMOTION_KEK = 556u, + MSI_EMOTION_SORRY = 557u, + MSI_EMOTION_SMILE = 558u, + MSI_EMOTION_PROFUSELY_SWEAT = 559u, + MSI_EMOTION_SCRATCH = 560u, + MSI_EMOTION_BEST = 561u, + MSI_EMOTION_STARE_ABOUT = 562u, + MSI_EMOTION_HUK = 563u, + MSI_EMOTION_O = 564u, + MSI_EMOTION_X = 565u, + MSI_EMOTION_HELP = 566u, + MSI_EMOTION_GO = 567u, + MSI_EMOTION_CRY = 568u, + MSI_EMOTION_KIK = 569u, + MSI_EMOTION_CHUP = 570u, + MSI_EMOTION_CHUPCHUP = 571u, + MSI_EMOTION_HNG = 572u, + MSI_EMOTION_OK = 573u, + MSI_SHORTCUT_LIST = 574u, + MSI_BAN_PAY_SUSPEND = 575u, + MSI_BAN_PAY_CHANGE = 576u, + MSI_BAN_PAY_WRONGIP = 577u, + MSI_BAN_PAY_PNGAMEROOM = 578u, + MSI_BAN_OP_FORCE = 579u, + MSI_USESKILL_FAIL_WEIGHTOVER = 580u, + MSI_NAMELESS_USER = 581u, + MSI_RANK_IN_TEN = 582u, + MSI_RANK_OUT_TEN = 583u, + MSI_PET_INFO = 584u, + MSI_PET_HUNGRY = 585u, + MSI_PET_FRIENDLY = 586u, + MSI_CANT_OPEN_STORE_WHILE_CHAT = 587u, + MSI_EA4 = 588u, + MSI_SLAIN = 589u, + MSI_SLAINBY = 590u, + MSI_NOT_EXIST_PET_FOOD = 591u, + MSI_PET_FEEDING = 592u, + MSI_PET_PERFORMANCE = 593u, + MSI_PET_RETURN_EGG = 594u, + MSI_PET_ACC_OFF = 595u, + MSI_PET_SHOWINFO = 596u, + MSI_PET_ACCESSARY = 597u, + MSI_ITEM_EQUIPED = 598u, + MSI_PET_EGG_LIST = 599u, + MSI_ITEM_UNEQUIPED = 600u, + MSI_SURE_TO_FEED_PET = 601u, + MSI_CAN_INPUT_NUMBER_ONLY = 602u, + MSI_CANT_SELL_UNIDENTIFIED_ITEM = 603u, + MSI_YOU_HAVE_FREE_ITEM_ON_SHOP = 604u, + MSI_NEW_EMOTION_LIST = 605u, + MSI_BAN_JAPAN_REFUSE1 = 606u, + MSI_BAN_JAPAN_REFUSE2 = 607u, + MSI_ALREADY_SAME_AID_JOINED = 608u, + MSI_SERVER_PROPERTY_ADULT = 609u, + MSI_ENST_PROVOKE = 610u, + MSI_DSST_PROVOKE = 611u, + MSI_ENST_ENDURE = 612u, + MSI_DSST_ENDURE = 613u, + MSI_ENST_CONCENTRATION = 614u, + MSI_DSST_CONCENTRATION = 615u, + MSI_ENST_HIDING = 616u, + MSI_DSST_HIDING = 617u, + MSI_ENST_CLOAKING = 618u, + MSI_DSST_CLOAKING = 619u, + MSI_ENST_POISONREACT = 620u, + MSI_DSST_POISONREACT = 621u, + MSI_ENST_QUAGMIRE = 622u, + MSI_DSST_QUAGMIRE = 623u, + MSI_ENST_ANGELUS = 624u, + MSI_DSST_ANGELUS = 625u, + MSI_ENST_BLESSING = 626u, + MSI_DSST_BLESSING = 627u, + MSI_ENST_CRUCIS = 628u, + MSI_DSST_CRUCIS = 629u, + MSI_ENST_SLOWPOISON = 630u, + MSI_DSST_SLOWPOISON = 631u, + MSI_ENST_MAGNIFICAT = 632u, + MSI_DSST_MAGNIFICAT = 633u, + MSI_ENST_GLORIA = 634u, + MSI_DSST_GLORIA = 635u, + MSI_ENST_LEXAETERNA = 636u, + MSI_DSST_LEXAETERNA = 637u, + MSI_ENST_ADRENALINE = 638u, + MSI_DSST_ADRENALINE = 639u, + MSI_ENST_RIDING = 640u, + MSI_DSST_RIDING = 641u, + MSI_ENST_FALCON = 642u, + MSI_DSST_FALCON = 643u, + MSI_ENST_TRICKDEAD = 644u, + MSI_DSST_TRICKDEAD = 645u, + MSI_ENST_SHOUT = 646u, + MSI_DSST_SHOUT = 647u, + MSI_ENST_ENERGYCOAT = 648u, + MSI_DSST_ENERGYCOAT = 649u, + MSI_ENST_BROKENAMOR = 650u, + MSI_DSST_BROKENAMOR = 651u, + MSI_ENST_BROKENWEAPON = 652u, + MSI_DSST_BROKENWEAPON = 653u, + MSI_ENST_ILLUSION = 654u, + MSI_DSST_ILLUSION = 655u, + MSI_REFUSE_BLOCK_TEMPORARY = 656u, + MSI_UNEQUIP_ARROW = 657u, + MSI_ARROW_LIST = 658u, + MSI_CART_LIST = 659u, + MSI_MUST_EQUIP_CART = 660u, + MSI_CANT_MAKE_CHAT_ROOM = 661u, + MSI_3DAY_FREE = 662u, + MSI_CANT_USE_WHEN_SITDOWN = 663u, + MSI_BAD_MANNER_REMAIN = 664u, + MSI_BAD_MANNER_END = 665u, + MSI_REF_UNEQUIP = 666u, + MSI_VERY_HUNGRY = 667u, + MSI_HUNGRY = 668u, + MSI_NORMAL = 669u, + MSI_REPLETE = 670u, + MSI_VERY_REPLETE = 671u, + MSI_VERY_AWKWARD = 672u, + MSI_AWKWARD = 673u, + MSI_FRIENDLY = 674u, + MSI_VERY_FRIENDLY = 675u, + MSI_UNKNOWN = 676u, + MSI_BILLING_DAY_HOUR_MINUTES = 677u, + MSI_BAN_INFORMATION_REMAINED_ANOTHER_ACCOUNT = 678u, + MSI_BILLING_HOUR_MINUTES = 679u, + MSI_BILLING_FREE_USER = 680u, + MSI_REFUSE_NONSAKRAY_ID_BLOCKED = 681u, + MSI_PETNAME_IN23 = 682u, + MSI_PETNAME_CHANGE_ONLYONCE = 683u, + MSI_NAMEBALLOON_TYPE = 684u, + MSI_GUILDZENY_NOT_ENOUGH = 685u, + MSI_GUILDZENY_OVER = 686u, + MSI_MINEFFECT_ON = 687u, + MSI_MINEFFECT_OFF = 688u, + MSI_CAPITAL = 689u, + MSI_OPEN_ITEMWND_TO_THROW = 690u, + MSI_ASK_PNGAMEROOM = 691u, + MSI_REPLY_REMAINTIME = 692u, + MSI_INFO_REMAINTIME = 693u, + MSI_OVER_OR_LOW_MONEY = 694u, + MSI_PRESS_ESC_TO_RESTART = 695u, + MSI_EA_OBTAIN = 696u, + MSI_SPELL_LIST = 697u, + MSI_MINEFFECT = 698u, + MSI_DAMAGED_ITEM = 699u, + MSI_EXPLAIN_NOSHIFT = 700u, + MSI_NOSHIFT_ON = 701u, + MSI_NOSHIFT_OFF = 702u, + MSI_REFUSE_BAN_BY_DBA = 703u, + MSI_REFUSE_EMAIL_NOT_CONFIRMED = 704u, + MSI_REFUSE_BAN_BY_GM = 705u, + MSI_REFUSE_TEMP_BAN_FOR_DBWORK = 706u, + MSI_REFUSE_SELF_LOCK = 707u, + MSI_REFUSE_NOT_PERMITTED_GROUP = 708u, + MSI_REFUSE_WAIT_FOR_SAKRAY_ACTIVE = 709u, + MSI_EXPLAIN_AURA = 710u, + MSI_AURA_ON = 711u, + MSI_AURA_OFF = 712u, + MSI_PROHIBIT_LOG = 713u, + MSI_PROHIBIT_LIST = 714u, + MSI_EXPLAIN_SHOWNAMETYPE = 715u, + MSI_EXPLAIN_NOCTRL = 716u, + MSI_NOCTRL_ON = 717u, + MSI_NOCTRL_OFF = 718u, + MSI_APPEND_PROHIBIT = 719u, + MSI_ERASE_PROHIBIT = 720u, + MSI_REDUCE_PROHIBIT = 721u, + MSI_SHOWNAME_ON = 722u, + MSI_SHOWNAME_OFF = 723u, + MSI_EXPLAIN_DORIDORI = 724u, + MSI_BILLING_INTERNET_CAFE = 725u, + MSI_BILLING_BOTH = 726u, + MSI_EXPLAIN_BINGBING = 727u, + MSI_EXPLAIN_BANGBANG = 728u, + MSI_EXPLAIN_SKILLFAIL = 729u, + MSI_SKILLFAIL_ON = 730u, + MSI_SKILLFAIL_OFF = 731u, + MSI_EXPLAIN_NOTALKMSG = 732u, + MSI_NOTALKMSG_ON = 733u, + MSI_NOTALKMSG_OFF = 734u, + MSI_EXPLAIN_SET1 = 735u, + MSI_EXPLAIN_FOG = 736u, + MSI_SUGGEST_COUPLE = 737u, + MSI_HOWITEMDIV = 738u, + MSI_ITEMDIV1 = 739u, + MSI_ITEMDIV2 = 740u, + MSI_KEYCRYPT = 741u, + MSI_KEYCRYPT_INSTALL_KEYDRIVER = 742u, + MSI_KEYCRYPT_REBOOT = 743u, + MSI_KEYCRYPT_INSTALLFAIL = 744u, + MSI_KEYCRYPT_SKIPKEYCRYPT = 745u, + MSI_KEYCRYPT_NOKEYCRYPTFILE = 746u, + MSI_KEYCRYPT_USBKEYBOARD = 747u, + MSI_FINDHACK_PATH = 748u, + MSI_FINDHACK_NOTINSTALLED = 749u, + MSI_FINDHACK_HACKTOOLEXIST = 750u, + MSI_FINDHACK_CANTDOWNLOAD = 751u, + MSI_FINDHACK_NOFILE = 752u, + MSI_FINDHACK_EXCEPTION = 753u, + MSI_FINDHACK_EXITPRESSED = 754u, + MSI_FINDHACK_UPDATEFAILED = 755u, + MSI_NAMED_PET = 756u, + MSI_REPORTCOMMAND_EXPLANATION = 757u, + MSI_REPORTTEXT_HEADER = 758u, + MSI_LOVE_SKILL = 759u, + MSI_EXPLAIN_BRIGHT = 760u, + MSI_EXPLAIN_ALTTAB = 761u, + MSI_SERVER_PROPERTY_PAY = 762u, + MSI_SERVER_PROPERTY_FREE = 763u, + MSI_CANT_CONNECT_TO_PAY_SERVER = 764u, + MSI_QUICKSPELL_ON = 765u, + MSI_QUICKSPELL_OFF = 766u, + MSI_EXPLAIN_QUICKSPELL = 767u, + MSI_QUICKSPELL2_ON = 768u, + MSI_QUICKSPELL2_OFF = 769u, + MSI_EXPLAIN_QUICKSPELL2 = 770u, + MSI_EXPLAIN_QUICKSPELL3 = 771u, + MSI_EMOTION_STARE = 772u, + MSI_EMOTION_HUNGRY = 773u, + MSI_EMOTION_COOL = 774u, + MSI_EMOTION_MERONG = 775u, + MSI_EMOTION_SHY = 776u, + MSI_EMOTION_GOODBOY = 777u, + MSI_EMOTION_SPTIME = 778u, + MSI_EMOTION_SEXY = 779u, + MSI_EMOTION_COMEON = 780u, + MSI_EMOTION_SLEEPY = 781u, + MSI_EMOTION_CONGRATULATION = 782u, + MSI_EMOTION_HPTIME = 783u, + MSI_EXPLAIN_EMOTION = 784u, + MSI_BATTLE_ON = 785u, + MSI_BATTLE_OFF = 786u, + MSI_EXPLAIN_BATTLE = 787u, + MSI_EXPLAIN_BATTLE2 = 788u, + MSI_EXPLAIN_LAG = 789u, + MSI_SUPERNOVICE1 = 790u, + MSI_SUPERNOVICE2 = 791u, + MSI_SUPERNOVICE3 = 792u, + MSI_SUPERNOVICE4 = 793u, + MSI_SUGGEST_BABY = 794u, + MSI_EXPLAIN_BATTLE3 = 795u, + MSI_EXPLAIN_BATTLE4 = 796u, + MSI_NPGAMEMON_ERROR_AUTH_GAMEGUARD = 797u, + MSI_NPGAMEMON_ERROR_CRYPTOAPI = 798u, + MSI_NPGAMEMON_ERROR_EXECUTE = 799u, + MSI_NPGAMEMON_ERROR_ILLEGAL_PRG = 800u, + MSI_NPGMUP_ERROR_ABORT = 801u, + MSI_NPGMUP_ERROR_CONNECT = 802u, + MSI_NPGMUP_ERROR_AUTH = 803u, + MSI_EXPLAIN_NOTRADE = 804u, + MSI_NOTRADE_ON = 805u, + MSI_NOTRADE_OFF = 806u, + MSI_LIMIT_BUY_ITEM = 807u, + MSI_NOT_ENOUGH_SOURCE = 808u, + MSI_ALREADY_CONNECT = 809u, + MSI_HACKING_INVESTIGATION = 810u, + MSI_BUG_INVESTIGATION = 811u, + MSI_REPAIRITEMLIST = 812u, + MSI_ITEM_REPAIR_SUCCEESS = 813u, + MSI_ITEM_REPAIR_FAIL = 814u, + MSI_SYSTEM_CHECK_ON = 815u, + MSI_SYSTEM_CHECK_OFF = 816u, + MSI_EXPLAIN_SYSTEM_CHECK = 817u, + MSI_SUGGEST_JOIN_FRIEND = 818u, + MSI_FRIEND_ADD_ME_OVERSIZE = 819u, + MSI_FRIEND_ADD_OTHER_OVERSIZE = 820u, + MSI_FRIEND_ADD_SUCCEED = 821u, + MSI_FRIEND_ADD_FALSE = 822u, + MSI_BLOCKED = 823u, + MSI_OVERPRICE = 824u, + MSI_LITTLEUSER = 825u, + MSI_ALITTLEUSER = 826u, + MSI_NORMLEUSER = 827u, + MSI_MANYUSER = 828u, + MSI_VERYMANYUSER = 829u, + MSI_GM_BAD_MANNER_START = 830u, + MSI_GM_BAD_MANNER_REMAIN = 831u, + MSI_GM_BAD_MANNER_END = 832u, + MSI_AUTO_BAD_MANNER_START = 833u, + MSI_AUTO_BAD_MANNER_REMAIN = 834u, + MSI_AUTO_BAD_MANNER_END = 835u, + MSI_DIVORCE = 836u, + MSI_STARPLACE1 = 837u, + MSI_STARPLACE2 = 838u, + MSI_STARPLACE3 = 839u, + MSI_STARPLACE4 = 840u, + MSI_STARPLACE5 = 841u, + MSI_STARPLACE6 = 842u, + MSI_STARMONSTER1 = 843u, + MSI_STARMONSTER2 = 844u, + MSI_STARMONSTER3 = 845u, + MSI_STARMONSTER4 = 846u, + MSI_STARMONSTER5 = 847u, + MSI_STARMONSTER6 = 848u, + MSI_EXPLAIN_WINDOW = 849u, + MSI_WINDOW_ON = 850u, + MSI_WINDOW_OFF = 851u, + MSI_EXPLAIN_PVP_INFO = 852u, + MSI_PVP_INFO = 853u, + MSI_SEND_MANNER_POINT = 854u, + MSI_PKZONE = 855u, + MSI_NPGAMEMON_ERROR_100ERROR = 856u, + MSI_NPGAMEMON_XP_COMPATIBILITY = 857u, + MSI_PK_HONOR = 858u, + MSI_DELETING_CHAR = 859u, + MSI_DELETING_SPOUSE_CHAR = 860u, + MSI_NOVICE = 861u, + MSI_SWORDMAN = 862u, + MSI_MAGICIAN = 863u, + MSI_ARCHER = 864u, + MSI_ACOLYTE = 865u, + MSI_MERCHANT = 866u, + MSI_THIEF = 867u, + MSI_KNIGHT = 868u, + MSI_PRIEST = 869u, + MSI_WIZARD = 870u, + MSI_BLACKSMITH = 871u, + MSI_HUNTER = 872u, + MSI_ASSASSIN = 873u, + MSI_NOVICE_W = 874u, + MSI_SWORDMAN_W = 875u, + MSI_MAGICIAN_W = 876u, + MSI_ARCHER_W = 877u, + MSI_ACOLYTE_W = 878u, + MSI_MERCHANT_W = 879u, + MSI_THIEF_W = 880u, + MSI_KNIGHT_W = 881u, + MSI_PRIEST_W = 882u, + MSI_WIZARD_W = 883u, + MSI_BLACKSMITH_W = 884u, + MSI_HUNTER_W = 885u, + MSI_ASSASSIN_W = 886u, + MSI_REQ_JOIN_BABY = 887u, + MSI_SUGGEST_BABY2 = 888u, + MSI_GOSPEL1 = 889u, + MSI_GOSPEL2 = 890u, + MSI_GOSPEL3 = 891u, + MSI_GOSPEL4 = 892u, + MSI_GOSPEL5 = 893u, + MSI_GOSPEL6 = 894u, + MSI_GOSPEL7 = 895u, + MSI_GOSPEL8 = 896u, + MSI_GOSPEL9 = 897u, + MSI_GOSPEL10 = 898u, + MSI_BABY1 = 899u, + MSI_BABY2 = 900u, + MSI_BLACKSMITH_POINT = 901u, + MSI_ALCHEMIST_POINT = 902u, + MSI_SUPERNOVICE11 = 903u, + MSI_SUPERNOVICE12 = 904u, + MSI_SUPERNOVICE13 = 905u, + MSI_SUPERNOVICE14 = 906u, + MSI_EXPLAIN_NOTALKMSG2 = 907u, + MSI_NOTALKMSG2_ON = 908u, + MSI_NOTALKMSG2_OFF = 909u, + MSI_REFINEITEMLIST = 910u, + MSI_ITEM_REFINE_SUCCEESS = 911u, + MSI_ITEM_REFINE_FAIL = 912u, + MSI_ITEM_REFINE_FAIL_LEVEL = 913u, + MSI_ITEM_REFINE_FAIL_MATERIAL = 914u, + MSI_FULLSTRIP = 915u, + MSI_BABY3 = 916u, + MSI_ID_WARNING = 917u, + MSI_EXPLAIN_HI = 918u, + MSI_ID_WARNING_GUILD = 919u, + MSI_OVERPRICE9999 = 920u, + MSI_EXPLAIN_SACHING1 = 921u, + MSI_EXPLAIN_SACHING2 = 922u, + MSI_EXPLAIN_BLACKSMITH = 923u, + MSI_EXPLAIN_ALCHEMIST = 924u, + MSI_EXPLAIN_ALTY = 925u, + MSI_TAEKWON_POINT = 926u, + MSI_TAEKWON_MISSION = 927u, + MSI_INIT_ERROR = 928u, + MSI_SPEEDHACK_DETECT = 929u, + MSI_GAMEHACK_DETECT = 930u, + MSI_GAMEHACK_DOUBT = 931u, + MSI_ERROR_EXIST = 932u, + MSI_GAME_EXIST = 933u, + MSI_ERROR_INIT = 934u, + MSI_ERROR_NPSCAN = 935u, + MSI_HOMUN_INFO = 936u, + MSI_HOMUN_SKILLLIST = 937u, + MSI_HOMUN_NAME_IN23 = 938u, + MSI_HOMUN_NAME_CHANGE_ONLYONCE = 939u, + MSI_AUTO_MSG = 940u, + MSI_AUTO_MSG2 = 941u, + MSI_AUTO_MSG_ON = 942u, + MSI_AUTO_MSG_OFF = 943u, + MSI_ENTER_AUTO_MSG = 944u, + MSI_EMOTION_SPARK = 945u, + MSI_EMOTION_CONFUSE = 946u, + MSI_EMOTION_OHNO = 947u, + MSI_EMOTION_HUM = 948u, + MSI_EMOTION_BLABLA = 949u, + MSI_EMOTION_OTL = 950u, + MSI_EMOTION_DICE = 951u, + MSI_EXPLAIN_KILLER_RANK = 952u, + MSI_KILLER_POINT = 953u, + MSI_HOMUN_EVOLVE = 954u, + MSI_DELETE_HOMUN = 955u, + MSI_TRACE_AI_ON = 956u, + MSI_TRACE_AI_OFF = 957u, + MSI_CRUSADER = 958u, + MSI_MONK = 959u, + MSI_SAGE = 960u, + MSI_ROGUE = 961u, + MSI_ALCHEMIST = 962u, + MSI_BARD = 963u, + MSI_CRUSADER_W = 964u, + MSI_MONK_W = 965u, + MSI_SAGE_W = 966u, + MSI_ROGUE_W = 967u, + MSI_ALCHEMIST_W = 968u, + MSI_DANCER = 969u, + MSI_NOVICE_H = 970u, + MSI_SWORDMAN_H = 971u, + MSI_MAGICIAN_H = 972u, + MSI_ARCHER_H = 973u, + MSI_ACOLYTE_H = 974u, + MSI_MERCHANT_H = 975u, + MSI_THIEF_H = 976u, + MSI_NOVICE_H_W = 977u, + MSI_SWORDMAN_H_W = 978u, + MSI_MAGICIAN_H_W = 979u, + MSI_ARCHER_H_W = 980u, + MSI_ACOLYTE_H_W = 981u, + MSI_MERCHANT_H_W = 982u, + MSI_THIEF_H_W = 983u, + MSI_KNIGHT_H = 984u, + MSI_PRIEST_H = 985u, + MSI_WIZARD_H = 986u, + MSI_BLACKSMITH_H = 987u, + MSI_HUNTER_H = 988u, + MSI_ASSASSIN_H = 989u, + MSI_KNIGHT_H_W = 990u, + MSI_PRIEST_H_W = 991u, + MSI_WIZARD_H_W = 992u, + MSI_BLACKSMITH_H_W = 993u, + MSI_HUNTER_H_W = 994u, + MSI_ASSASSIN_H_W = 995u, + MSI_CRUSADER_H = 996u, + MSI_MONK_H = 997u, + MSI_SAGE_H = 998u, + MSI_ROGUE_H = 999u, + MSI_ALCHEMIST_H = 1000u, + MSI_BARD_H = 1001u, + MSI_CRUSADER_H_W = 1002u, + MSI_MONK_H_W = 1003u, + MSI_SAGE_H_W = 1004u, + MSI_ROGUE_H_W = 1005u, + MSI_ALCHEMIST_H_W = 1006u, + MSI_DANCER_H = 1007u, + MSI_STORE_PASSWORD_REQ = 1008u, + MSI_STORE_PASSWORD_PENALTY = 1009u, + MSI_STORE_PASSWORD_CHANGE_NG = 1010u, + MSI_STORE_PASSWORD_4_8 = 1011u, + MSI_STORE_PASSWORD = 1012u, + MSI_STORE_NEW_PASSWORD = 1013u, + MSI_STORE_RENEW_PASSWORD = 1014u, + MSI_STORE_PASSWORD_CHANGE_OK = 1015u, + MSI_STORE_PASSWORD_MISMATCH = 1016u, + MSI_STORE_PASSWORD_INPUT = 1017u, + MSI_HOMUN_HUNGRY = 1018u, + MSI_HOMUN_EXP = 1019u, + MSI_EVENT_RESULT = 1020u, + MSI_HATE = 1021u, + MSI_VERYHATE = 1022u, + MSI_HOMUN_USERAI_ON = 1023u, + MSI_HOMUN_USERAI_OFF = 1024u, + MSI_MAIL_LIST = 1025u, + MSI_MAIL_WRITE = 1026u, + MSI_MAIL_READ = 1027u, + MSI_STARPLACE_ACCEPT = 1028u, + MSI_MAIL_ADD_ITEM_SUCCESS = 1029u, + MSI_MAIL_ADD_ITEM_FAILURE = 1030u, + MSI_MAIL_SEND_SUCCESS = 1031u, + MSI_MAIL_USER_NOT_FOUND = 1032u, + MSI_STAR_ANGEL = 1033u, + MSI_AUCTION_ADD_FALSE = 1034u, + MSI_AUCTION_ADD_TRUE = 1035u, + MSI_AUCTION_ADD_CANCEL = 1036u, + MSI_AUCTION_ADD_CANCEL_FALSE = 1037u, + MSI_MAIL_DELETE_SUCCESS = 1038u, + MSI_MAIL_DELETE_FAILURE = 1039u, + MSI_MSG_KNIFE_EQUIPMENT_SUCCESS = 1040u, + MSI_LOGIN_FRIEND = 1041u, + MSI_LOGOUT_FRIEND = 1042u, + MSI_EXPLAIN_LOGINOUT = 1043u, + MSI_LOGINOUT_ON = 1044u, + MSI_LOGINOUT_OFF = 1045u, + MSI_SGP_CODE_ALREADY_RUNNING = 1046u, + MSI_SGP_CODE_DETECTED_MACRO = 1047u, + MSI_SGP_CODE_DETECTED_SPEEDHACK = 1048u, + MSI_SGP_CODE_DETECTED_APIHOOK = 1049u, + MSI_SGP_CODE_DETECTED_MSGHOOK = 1050u, + MSI_SGP_CODE_NOT_EQUALENCRYPTEDDATA = 1051u, + MSI_BILLING_PCB = 1052u, + MSI_PREV_PAGE = 1053u, + MSI_NEXT_PAGE = 1054u, + MSI_AUCTION = 1055u, + MSI_AUCTION_VIEW = 1056u, + MSI_AUCTION_ADD = 1057u, + MSI_AUCTION_SELL = 1058u, + MSI_AUCTION_BUY = 1059u, + MSI_ITEM2 = 1060u, + MSI_ITEM_NAME2 = 1061u, + MSI_ITEM_PRICE = 1062u, + MSI_SELLER = 1063u, + MSI_BUYER = 1064u, + MSI_FINISH_TIME = 1065u, + MSI_TIME_TYPE = 1066u, + MSI_SET_TIME = 1067u, + MSI_CHARGE = 1068u, + MSI_NOTHING_SEARCH_ITEM = 1069u, + MSI_NOTHING_SEARCH_SELL_ITEM = 1070u, + MSI_NOTHING_SEARCH_BUY_ITEM = 1071u, + MSI_ERROR_AUCTION_ITEM_INFO = 1072u, + MSI_NOTHING_AUCTION_ITEM_INFO = 1073u, + MSI_ERROR_ADD_AUCTION = 1074u, + MSI_PRICE = 1075u, + MSI_PRICE2 = 1076u, + MSI_PRICE3 = 1077u, + MSI_PRICE4 = 1078u, + MSI_PRICE5 = 1079u, + MSI_PRICE6 = 1080u, + MSI_PRICE7 = 1081u, + MSI_BUY_ACTION_ITEM = 1082u, + MSI_SELL_ACTION_ITEM = 1083u, + MSI_BUY_AUCTION = 1084u, + MSI_BUY_AUCTION2 = 1085u, + MSI_BUY_AUCTION3 = 1086u, + MSI_FINISH_AUCTION = 1087u, + MSI_RESULT_BUY_TRUE = 1088u, + MSI_RESULT_BUY_FALSE = 1089u, + MSI_RESULT_BUY_FALSE_MONEY = 1090u, + MSI_EQUIP = 1091u, + MSI_CARD = 1092u, + MSI_ETC = 1093u, + MSI_AUCTION_NUM = 1094u, + MSI_AUCTION_SEARCH = 1095u, + MSI_RESULT_MY_SELL_STOP_TRUE = 1096u, + MSI_RESULT_MY_SELL_STOP_FALSE = 1097u, + MSI_RESULT_AUCTION_ID_FALSE = 1098u, + MSI_SENDER = 1099u, + MSI_TITLE2 = 1100u, + MSI_NEW_MAIL = 1101u, + MSI_SEARCHING_ITEM = 1102u, + MSI_AUCTION_ADD_OVER = 1103u, + MSI_RESULT_BUY_OVER = 1104u, + MSI_MAIL_DELETE_ERROR = 1105u, + MSI_MAIL_SEND_ERROR = 1106u, + MSI_EXPLAIN_SHOPPING = 1107u, + MSI_SHOPPING_ON = 1108u, + MSI_SHOPPING_OFF = 1109u, + MSI_MAIL_SEND_ERROR2 = 1110u, + MSI_ADD_MONEY_FALSE = 1111u, + MSI_HOMUN_SHOWINFO = 1112u, + MSI_HOMUN_FEEDING = 1113u, + MSI_HOMUN_WAITING = 1114u, + MSI_JOB_SUPERNOVICE_M = 1115u, + MSI_JOB_SUPERNOVICE_F = 1116u, + MSI_JOB_TAEKWON_M = 1117u, + MSI_JOB_TAEKWON_F = 1118u, + MSI_KWONSUNG_M = 1119u, + MSI_KWONSUNG_F = 1120u, + MSI_SOULLINGKER_M = 1121u, + MSI_SOULLINGKER_F = 1122u, + MSI_BAN_PC_IP_UNFAIR = 1123u, + MSI_BILLING_1 = 1124u, + MSI_BILLING_2 = 1125u, + MSI_MAIL_ITEM_ADD_FAILED = 1126u, + MSI_MAIL_ADD_ITEM_OVER_FAILURE = 1127u, + MSI_PTSEX1 = 1128u, + MSI_PTSEX2 = 1129u, + MSI_PT_NEWUSER = 1130u, + MSI_PT_ACINFO = 1131u, + MSI_PT_ACINFO2 = 1132u, + MSI_PT_NEWKEYINFO = 1133u, + MSI_PT_FAIL_CARDPASS = 1134u, + MSI_PTID1 = 1135u, + MSI_PTID2 = 1136u, + MSI_PTID3 = 1137u, + MSI_PTID4 = 1138u, + MSI_PT_ERROR_1001 = 1139u, + MSI_PT_ERROR_1002 = 1140u, + MSI_PT_ERROR_1003 = 1141u, + MSI_PT_ERROR_1004 = 1142u, + MSI_PT_ERROR_1006 = 1143u, + MSI_PT_ERROR_1007 = 1144u, + MSI_PT_ERROR_1008 = 1145u, + MSI_PT_ERROR_1009 = 1146u, + MSI_PT_ERROR_1012 = 1147u, + MSI_PT_ERROR_1013 = 1148u, + MSI_PT_ERROR_1014 = 1149u, + MSI_PT_ERROR_1015 = 1150u, + MSI_PT_ERROR_1019 = 1151u, + MSI_PT_ERROR_1020 = 1152u, + MSI_PT_ERROR_1021 = 1153u, + MSI_PT_ERROR_1023 = 1154u, + MSI_PT_ERROR_1024 = 1155u, + MSI_PT_ERROR_1025 = 1156u, + MSI_PT_ERROR_1027 = 1157u, + MSI_PT_ERROR_1028 = 1158u, + MSI_PT_ERROR_10 = 1159u, + MSI_PT_ERROR_20 = 1160u, + MSI_PT_ERROR_40 = 1161u, + MSI_PT_ERROR_50 = 1162u, + MSI_PT_ERROR_60 = 1163u, + MSI_PT_ERROR_70 = 1164u, + MSI_PT_ERROR_80 = 1165u, + MSI_PT_ERROR_90 = 1166u, + MSI_PT_ERROR_100 = 1167u, + MSI_PT_ERROR_110 = 1168u, + MSI_PT_POINT1 = 1169u, + MSI_PT_POINT2 = 1170u, + MSI_AUCTION_ADD_ITEM_FAILURE = 1171u, + MSI_AUCTION_ADD_ITEM_FAILURE2 = 1172u, + MSI_CLOSE_MERCHANTITEMWND = 1173u, + MSI_CLOSE_MAILWND = 1174u, + MSI_MSG_BULLET_EQUIPMENT_SUCCESS = 1175u, + MSI_MAIL_RETURN_SUCCESS = 1176u, + MSI_MAIL_RETURN_FAILURE = 1177u, + MSI_BAN_PC_IP_COUNT_ALL = 1178u, + MSI_BAN_PC_IP_COUNT = 1179u, + MSI_GAMEGUARD_RESTART = 1180u, + MSI_MER_INFO_TYPE_ARCHER = 1181u, + MSI_MER_INFO_TYPE_SWORDMAN = 1182u, + MSI_MER_INFO_TYPE_LANCER = 1183u, + MSI_LEFT_TIME = 1184u, + MSI_MER_FRIENDLY = 1185u, + MSI_MER_CALLCOUNT = 1186u, + MSI_MER_KILL = 1187u, + MSI_PET_STARVING = 1188u, + MSI_GANGSI_POINT = 1189u, + MSI_GANGSI_MISSION = 1190u, + MSI_EXPLAIN_HUNTING = 1191u, + MSI_DEATH_Q01 = 1192u, + MSI_DEATH_Q02 = 1193u, + MSI_DEATH_Q03 = 1194u, + MSI_DEATH_Q04 = 1195u, + MSI_DEATH_Q05 = 1196u, + MSI_DEATH_Q06 = 1197u, + MSI_DEATH_Q07 = 1198u, + MSI_DEATH_Q08 = 1199u, + MSI_DEATH_Q09 = 1200u, + MSI_DEATH_Q10 = 1201u, + MSI_DEATH_Q11 = 1202u, + MSI_DEATH_Q12 = 1203u, + MSI_DEATH_Q13 = 1204u, + MSI_DEATH_Q14 = 1205u, + MSI_DEATH_R01 = 1206u, + MSI_DEATH_R02 = 1207u, + MSI_DEATH_R05 = 1208u, + MSI_DEATH_POINT = 1209u, + MSI_POINT_SHOP = 1210u, + MSI_CONFIRM_SELECT_CHARACTERS = 1211u, + MSI_ERROR_SELECT_CHARACTERS = 1212u, + MSI_CONFIRM_TO_CHANGE_NAME = 1213u, + MSI_CHANGE_NAME_SUCCESS = 1214u, + MSI_CHANGE_NAME_FAILURE = 1215u, + MSI_CAN_BUY_ONLY_ONEITEM = 1216u, + MSI_NO_SELECT_CHARACTERS = 1217u, + MSI_ALREADY_CHANGED_NAME = 1218u, + MSI_NOTREGISTED_USER = 1219u, + MSI_DUPLICATED_CHAR_NAME = 1220u, + MSI_CANNOT_PARTYCALL = 1221u, + MSI_NO_PARTYMEM_ON_THISMAP = 1222u, + MSI_NOTFIND_BOSSMON = 1223u, + MSI_APPEARANCE_TIME_OF_BOSSMON = 1224u, + MSI_SHOW_POSITION_OF_BOSSMON = 1225u, + MSI_CONFIRM_TO_OPEN_CASH_ITEM = 1226u, + MSI_BUY_CASH_FAIL_NPC = 1227u, + MSI_BUY_CASH_FAIL_SYSTEM = 1228u, + MSI_BUY_CASH_FAIL_EXCHANGE = 1229u, + MSI_BUY_CASH_FAIL_ITEM_ID = 1230u, + MSI_ENST_STR = 1231u, + MSI_DSST_STR = 1232u, + MSI_ENST_AGI = 1233u, + MSI_DSST_AGI = 1234u, + MSI_ENST_VIT = 1235u, + MSI_DSST_VIT = 1236u, + MSI_ENST_INT = 1237u, + MSI_DSST_INT = 1238u, + MSI_ENST_DEX = 1239u, + MSI_DSST_DEX = 1240u, + MSI_ENST_LUK = 1241u, + MSI_DSST_LUK = 1242u, + MSI_ENST_AVOIDANCE = 1243u, + MSI_DSST_AVOIDANCE = 1244u, + MSI_ENST_HIT = 1245u, + MSI_DSST_HIT = 1246u, + MSI_ENST_CRITICALSUCCESSVALUE = 1247u, + MSI_DSST_CRITICALSUCCESSVALUE = 1248u, + MSI_PLUSEXP = 1249u, + MSI_DDEATHPENALTY = 1250u, + MSI_RECEIVEITEM = 1251u, + MSI_BOSS_ALARM = 1252u, + MSI_BUY_RECONFIRM = 1253u, + MSI_BUY_CASH_FAIL_MONEY = 1254u, + MSI_NOTICE_TO_DELETE_TIME = 1255u, + MSI_NOTICE_TO_REMAIN_ITEMUSINGTIME = 1256u, + MSI_LAST_NOTICE_TO_REMAIN_ITEMUSINGTIME = 1257u, + MSI_NOTICE_TO_DELETE_ITEM = 1258u, + MSI_INPUT_NUMBER = 1259u, + MSI_TIME_TYPE2 = 1260u, + MSI_APPEARANCE_TIME_OF_BOSSMON2 = 1261u, + MSI_MER_SKILLLIST = 1262u, + MSI_DA_EXP_ACCEPT = 1263u, + MSI_COLLECTOR_POINT = 1264u, + MSI_COLLECTOR_MISSION = 1265u, + MSI_MER_FINISH = 1266u, + MSI_MER_DIE = 1267u, + MSI_MER_RETIRE = 1268u, + MSI_MER_RUNAWAY = 1269u, + MSI_NOTICE_TO_REMAIN_ITEMUSINGTIME2 = 1270u, + MSI_PCBANG_EVENT = 1271u, + MSI_LIMIT_CHAR_DELETE = 1272u, + MSI_MER_USERAI_ON = 1273u, + MSI_MER_USERAI_OFF = 1274u, + MSI_CHARACTER_NAME = 1275u, + MSI_ITEM_PICKUP_PARTY = 1276u, + MSI_VIEW_CHAT_MSG = 1277u, + MSI_VIEW_WHISPER_MSG = 1278u, + MSI_VIEW_PARTY_MSG = 1279u, + MSI_VIEW_GUILD_MSG = 1280u, + MSI_VIEW_GET_ITEM_MSG = 1281u, + MSI_VIEW_EQUIP_MSG = 1282u, + MSI_VIEW_CHANGE_STATUS_MSG = 1283u, + MSI_VIEW_GET_ITEM_PARTY_MSG = 1284u, + MSI_VIEW_CHANGE_STATUS_PARTY_MSG = 1285u, + MSI_VIEW_FAIL_SKILL_MSG = 1286u, + MSI_VIEW_PARTY_SETUP_MSG = 1287u, + MSI_VIEW_DAMAGED_EQUIP_MSG = 1288u, + MSI_BATTLE_CHAT_WND_OPTION = 1289u, + MSI_POINT_SHOP_NHN = 1290u, + MSI_ST_CHAT = 1291u, + MSI_BT_CHAT = 1292u, + MSI_PHONE_CONFIRM = 1293u, + MSI_BOOK_READ = 1294u, + MSI_BOOK_AUTOREAD = 1295u, + MSI_BOOK_KEEP = 1296u, + MSI_BOOK_PREV = 1297u, + MSI_BOOK_NEXT = 1298u, + MSI_BOOK_CLOSE = 1299u, + MSI_DAMAGED_EQUIP = 1300u, + MSI_DAMAGED_EQUIP_PARTY = 1301u, + MSI_DAMAGED_WEAPON = 1302u, + MSI_DAMAGED_BODY = 1303u, + MSI_NOT_ENOUGH_SKILLLEVE5_2 = 1304u, + MSI_POINT_SHOP2 = 1305u, + MSI_USE_FREE_POINT = 1306u, + MSI_CASH = 1307u, + MSI_SETTLE_WEB_URL_HANGAME = 1308u, + MSI_BAN_GRAVITY_MEM_AGREE = 1309u, + MSI_BAN_GAME_MEM_AGREE = 1310u, + MSI_BAN_HAN_VALID = 1311u, + MSI_BUY_RECONFIRM2 = 1312u, + MSI_NOTIFY_PLAYTIME1 = 1313u, + MSI_NOTIFY_PLAYTIME2 = 1314u, + MSI_WARNING_MSG1 = 1315u, + MSI_WARNING_MSG2 = 1316u, + MSI_QUESTWIN = 1317u, + MSI_RO_SHOP = 1318u, + MSI_MDUNGEON_SUBSCRIPTION_ERROR_UNKNOWN = 1319u, + MSI_MDUNGEON_SUBSCRIPTION_ERROR_DUPLICATE = 1320u, + MSI_MDUNGEON_SUBSCRIPTION_ERROR_RIGHT = 1321u, + MSI_MDUNGEON_SUBSCRIPTION_ERROR_EXIST = 1322u, + MSI_MDUNGEON_SUBSCRIPTION_CANCEL_FAIL = 1323u, + MSI_JOINMSG_REFUSE = 1324u, + MSI_INVITE_PARTY_REFUSE = 1325u, + MSI_INVITE_PARTY_ACCEPT = 1326u, + MSI_YOURITEM_EQUIP = 1327u, + MSI_YOURITEM_EQUIPED = 1328u, + MSI_BUY_TO_FREE_POINT = 1329u, + MSI_REQ_JOIN_PARTY3 = 1330u, + MSI_VIEW_SIEGE_INFO_MSG = 1331u, + MSI_MDUNGEON_SUBSCRIPTION_CANCEL_SUCCESS = 1332u, + MSI_MDUNGEON_CREATE_FAIL = 1333u, + MSI_IMPOSSIBLE_SKILL_AREA = 1334u, + MSI_IMPOSSIBLE_USEITEM_AREA = 1335u, + MSI_MEMORIAL_DUN = 1336u, + MSI_MEMORIAL_DUN_WAITING = 1337u, + MSI_MEMORIAL_DUN_READY = 1338u, + MSI_MEMORIAL_DUN_IN = 1339u, + MSI_MEMORIAL_DUN_OUT1 = 1340u, + MSI_MEMORIAL_DUN_OUT2 = 1341u, + MSI_MEMORIAL_DUN_PRIORITY = 1342u, + MSI_MEMORIAL_DUN_NOTIFY = 1343u, + MSI_MEMORIAL_DUN_NOTIFY2 = 1344u, + MSI_MEMORIAL_DUN_CANCEL = 1345u, + MSI_MEMORIAL_DUN_LIVE_TIME_OUT = 1346u, + MSI_MEMORIAL_DUN_ENTER_TIME_OUT = 1347u, + MSI_MEMORIAL_DUN_DESTROY_REQUEST = 1348u, + MSI_MEMORIAL_DUN_ERROR = 1349u, + MSI_FR_INVALID_SLOT = 1350u, + MSI_FR_BASELVL = 1351u, + MSI_FR_INVALID_JOBLV = 1352u, + MSI_FR_JOB = 1353u, + MSI_FR_MAP = 1354u, + MSI_FR_ERR_MKCHAR_INVALID_SLOT = 1355u, + MSI_FR_ERR_DELCHAR_INVALID_SLOT = 1356u, + MSI_OPEN_EQUIPEDITEM_REFUSED = 1357u, + MSI_OPEN_EQUIPEDITEM_REFUSE = 1358u, + MSI_OPEN_EQUIPEDITEM_ACCEPT = 1359u, + MSI_REQ_VIEW_OTHERUSER = 1360u, + MSI_OTHERUSER_EQUIPED_ITEM = 1361u, + MSI_OPEN_EQUIPED_ITEM = 1362u, + MSI_NEED_PREMIUM_SERVICE = 1363u, + MSI_FR_INVALID_MONEY = 1364u, + MSI_BATTLECHAT_ON = 1365u, + MSI_BATTLECHAT_OFF = 1366u, + MSI_MER_INFO_TYPE_MONSTER = 1367u, + MSI_RO_MAP = 1368u, + MSI_MEMORIAL_DUN_CLOSE = 1369u, + MSI_DELETE_MER = 1370u, + MSI_MEMORIAL_DUN_OPEN = 1371u, + MSI_PHONE_BLOCK = 1372u, + MSI_BAN_PC_IP_LIMIT_ACCESS = 1373u, + MSI_QUESTGET = 1374u, + MSI_FINDTEXT_TO_SKILLDES = 1375u, + MSI_VIEW_SKILL_DESCRIPT = 1376u, + MSI_APPLY_SKILL_UP = 1377u, + MSI_1TABNAME_SKILLWND = 1378u, + MSI_2TABNAME_SKILLWND = 1379u, + MSI_RE17 = 1380u, + MSI_RE18 = 1381u, + MSI_WARNING_MSG3 = 1382u, + MSI_PLUSONLYJOBEXP = 1383u, + MSI_PLUSEXP14532 = 1384u, + MSI_PLUSEXP14533 = 1385u, + MSI_PLUSEXP12312 = 1386u, + MSI_NOPARTY = 1387u, + MSI_NOPARTY2 = 1388u, + MSI_SIMPLE_CASH_SHOP = 1389u, + MSI_SIMPLE_POINT_SHOP_NHN = 1390u, + MSI_SIMPLE_POINT_SHOP = 1391u, + MSI_SIMPLE_POINT_SHOP2 = 1392u, + MSI_MAIN_USER_CANONT_LOGIN_FREE_SERVER = 1393u, + MSI_INVALID_ONETIMELIMIT = 1394u, + MSI_3TABNAME_SKILLWND = 1395u, + MSI_USESKILL_FAIL_TOTARGET = 1396u, + MSI_USESKILL_FAIL_ANCILLA_NUMOVER = 1397u, + MSI_USESKILL_FAIL_HOLYWATER = 1398u, + MSI_USESKILL_FAIL_ANCILLA = 1399u, + MSI_USESKILL_FAIL_DUPLICATE_RANGEIN = 1400u, + MSI_USESKILL_FAIL_NEED_OTHER_SKILL = 1401u, + MSI_NO_CHATTING = 1402u, + MSI_VET_3HOUR = 1403u, + MSI_VET_5HOUR = 1404u, + MSI_NPGAMEMON_ERROR_GAMEGUARD = 1405u, + MSI_NPGMUP_ERROR_PARAM = 1406u, + MSI_NPGG_ERROR_COLLISION = 1407u, + MSI_PROOF_ERROR = 1408u, + MSI_MOBILE_LOCKSERVER = 1409u, + MSI_FAILED_MOBILE_LOCKSERVER = 1410u, + MSI_USESKILL_FAIL_NEED_HELPER = 1411u, + MSI_USESKILL_FAIL_INVALID_DIR = 1412u, + MSI_USESKILL_FAIL_SUMMON = 1413u, + MSI_USESKILL_FAIL_SUMMON_NONE = 1414u, + MSI_USESKILL_FAIL_IMITATION_SKILL_NONE = 1415u, + MSI_USESKILL_FAIL_DUPLICATE = 1416u, + MSI_USESKILL_FAIL_CONDITION = 1417u, + MSI_PICKUP_MAXCOUNT_LIMIT = 1418u, + MSI_NPK_ERROR_NOTADMIN = 1419u, + MSI_NPK_ERROR_DRIVERVERSION = 1420u, + MSI_NPK_ERROR_VERIFYVERSION = 1421u, + MSI_DETECT_PS2KEYLOGGER = 1422u, + MSI_DETECT_USBKEYLOGGER = 1423u, + MSI_DETECT_HHDUSBH = 1424u, + MSI_USESKILL_FAIL_PAINTBRUSH = 1425u, + MSI_USESKILL_FAIL_II_SURFACE_PAINTS = 1426u, + MSI_USESKILL_FAIL_POS = 1427u, + MSI_USESKILL_FAIL_HELPER_SP_INSUFFICIENT = 1428u, + MSI_BAN_OVER_CHARACTER_LIST = 1429u, + MSI_USESKILL_FAIL_II_NECK_CANDY = 1430u, + MSI_USESKILL_FAIL_II_MISERABLE_TEAR = 1431u, + MSI_USESKILL_FAIL_II_PROTECT_NECK_CANDY = 1432u, + MSI_USESKILL_FAIL_GC_WEAPONBLOCKING = 1433u, + MSI_USESKILL_FAIL_GC_POISONINGWEAPON = 1434u, + MSI_USESKILL_FAIL_MADOGEAR = 1435u, + MSI_USESKILL_FAIL_II_VULCANBULLET = 1436u, + MSI_USESKILL_FAIL_II_FUELGAS = 1437u, + MSI_USESKILL_FAIL_II_COLDSLOWERBULLET = 1438u, + MSI_USESKILL_FAIL_CANONBALL = 1439u, + MSI_USESKILL_FAIL_II_MADOGEAR_ACCELERATION = 1440u, + MSI_USESKILL_FAIL_II_MADOGEAR_HOVERING_BOOSTER = 1441u, + MSI_TOXIN = 1442u, + MSI_PARALYZE = 1443u, + MSI_VENOMBLEED = 1444u, + MSI_MAGICMUSHROOM = 1445u, + MSI_DEATHHURT = 1446u, + MSI_PHYREXIA = 1447u, + MSI_OBLIANCURSE = 1448u, + MSI_RICHEND = 1449u, + MSI_USESKILL_FAIL_MADOGEAR_HOVERING = 1450u, + MSI_USESKILL_FAIL_II_MADOGEAR_SELFDESTRUCTION_DEVICE = 1451u, + MSI_USESKILL_FAIL_II_MADOGEAR_SHAPESHIFTER = 1452u, + MSI_USESKILL_FAIL_GUILLONTINE_POISON = 1453u, + MSI_USESKILL_FAIL_II_MADOGEAR_COOLING_DEVICE = 1454u, + MSI_USESKILL_FAIL_II_MADOGEAR_MAGNETICFIELD_GENERATOR = 1455u, + MSI_USESKILL_FAIL_II_MADOGEAR_BARRIER_GENERATOR = 1456u, + MSI_USESKILL_FAIL_II_MADOGEAR_OPTICALCAMOUFLAGE_GENERATOR = 1457u, + MSI_USESKILL_FAIL_II_MADOGEAR_REPAIRKIT = 1458u, + MSI_USESKILL_FAIL_II_MONKEY_SPANNER = 1459u, + MSI_SKILLINTERVAL2 = 1460u, + MSI_LEMIT_DELETE_LEVEL = 1461u, + MSI_USESKILL_FAIL_MADOGEAR_RIDE = 1462u, + MSI_DRAGONOFF = 1463u, + MSI_MADOOFF = 1464u, + MSI_STORE_TABNAME_0 = 1465u, + MSI_STORE_TABNAME_1 = 1466u, + MSI_STORE_TABNAME_2 = 1467u, + MSI_STORE_TABNAME_3 = 1468u, + MSI_STORE_TABNAME_4 = 1469u, + MSI_STORE_TABNAME_5 = 1470u, + MSI_STORE_TABNAME_6 = 1471u, + MSI_ERROR_HS_TIMEOUT = 1472u, + MSI_ERROR_DIFF_CLIENT = 1473u, + MSI_USESKILL_FAIL_SPELLBOOK = 1474u, + MSI_USESKILL_FAIL_SPELLBOOK_DIFFICULT_SLEEP = 1475u, + MSI_USESKILL_FAIL_SPELLBOOK_PRESERVATION_POINT = 1476u, + MSI_USESKILL_FAIL_SPELLBOOK_READING = 1477u, + MSI_USESKILL_FAIL_II_FACE_PAINTS = 1478u, + MSI_USESKILL_FAIL_II_MAKEUP_BRUSH = 1479u, + MSI_MOBILE_TIMEOVER = 1480u, + MSI_MOBILE_ANOTHER_LOGIN = 1481u, + MSI_MOBILE_WAITING_STATE = 1482u, + MSI_ESC_OPTIONWND = 1483u, + MSI_GRAPHIC_OPTIONWND = 1484u, + MSI_SOUND_OPTIONWND = 1485u, + MSI_HOTKEYWND_NOTICE1 = 1486u, + MSI_HOTKEYWND_NOTICE2 = 1487u, + MSI_HOTKEYWND_NOTICE3 = 1488u, + MSI_HOTKEYWND_NOTICE4 = 1489u, + MSI_HOTKEYWND_NOTICE5 = 1490u, + MSI_HOTKEYWND_TAB1 = 1491u, + MSI_HOTKEYWND_TAB2 = 1492u, + MSI_HOTKEYWND_TAB3 = 1493u, + MSI_HOTKEYWND_TITLE = 1494u, + MSI_BGM = 1495u, + MSI_SOUND = 1496u, + MSI_SKIN = 1497u, + MSI_TINGONLY_ON = 1498u, + MSI_TINGONLY_OFF = 1499u, + MSI_EXPLAIN_TINGONLY = 1500u, + MSI_EMOTION_ROCK = 1501u, + MSI_EMOTION_SCISSOR = 1502u, + MSI_EMOTION_WRAP = 1503u, + MSI_EMOTION_LUV = 1504u, + MSI_EMOTION_MOBILE = 1505u, + MSI_EMOTION_MAIL = 1506u, + MSI_EMOTION_ANTENNA0 = 1507u, + MSI_EMOTION_ANTENNA1 = 1508u, + MSI_EMOTION_ANTENNA2 = 1509u, + MSI_EMOTION_ANTENNA3 = 1510u, + MSI_EMOTION_HUM2 = 1511u, + MSI_EMOTION_ABS = 1512u, + MSI_EMOTION_OOPS = 1513u, + MSI_EMOTION_SPIT = 1514u, + MSI_EMOTION_ENE = 1515u, + MSI_EMOTION_PANIC = 1516u, + MSI_EMOTION_WHISP = 1517u, + MSI_HOTKEY_NOTHING = 1518u, + MSI_USESKILL_FAIL_CART = 1519u, + MSI_USESKILL_FAIL_II_THORNS_SEED = 1520u, + MSI_USESKILL_FAIL_II_BLOOD_SUCKER_SEED = 1521u, + MSI_USESKILL_FAIL_NO_MORE_SPELL = 1522u, + MSI_USESKILL_FAIL_II_BOMB_MUSHROOM_SPORE = 1523u, + MSI_USESKILL_FAIL_II_GASOLINE_BOOMB = 1524u, + MSI_USESKILL_FAIL_II_OIL_BOTTLE = 1525u, + MSI_USESKILL_FAIL_II_EXPLOSION_POWDER = 1526u, + MSI_USESKILL_FAIL_II_SMOKE_POWDER = 1527u, + MSI_USESKILL_FAIL_II_TEAR_GAS = 1528u, + MSI_USESKILL_FAIL_II_HYDROCHLORIC_ACID_BOTTLE = 1529u, + MSI_USESKILL_FAIL_II_HELLS_PLANT_BOTTLE = 1530u, + MSI_USESKILL_FAIL_II_MANDRAGORA_FLOWERPOT = 1531u, + MSI_YIELD_PARTYMASTER = 1532u, + MSI_DO_YOU_REALLY_WANT_YIELD_PARTYMASTER = 1533u, + MSI_CANNOT_YIELD_PARTYMASTER = 1534u, + MSI_FAILED_CHANGE = 1535u, + MSI_USESKILL_FAIL_NEED_ITEM = 1536u, + MSI_ITEM_REFINING_DOWNGRADE = 1537u, + MSI_USESKILL_FAIL_NEED_EQUIPMENT = 1538u, + MSI_BATTLEFIELD_LIST = 1539u, + MSI_CANNOT_JOINTO_BATTLEFIELD = 1540u, + MSI_COMPLETED_JOINTO_BATTLEFIELD = 1541u, + MSI_DIFFER_JOINTO_BATTLEFIELD = 1542u, + MSI_STATUS_JOINTO_BATTLEFIELD = 1543u, + MSI_REQ_CANCEL_JOINTO_BATTLEFIELD = 1544u, + MSI_CANCEL_JOINTO_BATTLEFIELD = 1545u, + MSI_MOVETO_BATTLEFIELD = 1546u, + MSI_BATTLEFIELD_NAME = 1547u, + MSI_MOVETO_SAVEPOINT = 1548u, + MSI_VIEW_SEEK_PARTY = 1549u, + MSI_UNVIEW_SEEK_PARTY = 1550u, + MSI_SEEK_PARTY_DEALY = 1551u, + MSI_NOTIFY_PARTY_ROLE_MASTER = 1552u, + MSI_ERROR_SYSTEM_ERROR_BATTLEFIELD = 1553u, + MSI_ERROR_FULL_ESROOM_BATTLEFIELD = 1554u, + MSI_ERROR_DOUBLE_OFFER_BATTLEFIELD = 1555u, + MSI_ERROR_WAIT_TIMEOUT_BATTLEFIELD = 1556u, + MSI_ERROR_BATTLEFILD_ENTER_BATTLEFIELD = 1557u, + MSI_ERROR_DROP_ENTRANCESTATION_BATTLEFIELD = 1558u, + MSI_USESKILL_FAIL_COMBOSKILL = 1559u, + MSI_USESKILL_FAIL_COMBOSKILL2 = 1560u, + MSI_USESKILL_FAIL_SPIRITS = 1561u, + MSI_USESKILL_FAIL_SPIRITS2 = 1562u, + MSI_RUNESTONE_MAKEERROR_OVERCOUNT = 1563u, + MSI_ERROR_LIST_OPEN_BATTLEFIELD = 1564u, + MSI_ERROR_LEVEL_LIMIT_BATTLEFIELD = 1565u, + MSI_UPGRADESKILLERROR_MORE_FIRSTJOBSKILL = 1566u, + MSI_UPGRADESKILLERROR_MORE_SECONDJOBSKILL = 1567u, + MSI_ITEMSYOUCANCHANGE = 1568u, + MSI_ITEMS_FOR_CHANGE = 1569u, + MSI_SKILL_RECIPE_NOTEXIST = 1570u, + MSI_SKILL_INVENTORY_WEIGHT_OVER = 1571u, + MSI_SKILL_INVENTORY_KINDCNT_OVER = 1572u, + MSI_SKILL_MATERIAL_FAIL = 1573u, + MSI_SKILL_SUCCESS = 1574u, + MSI_SKILL_FAIL = 1575u, + MSI_SKILL_FAIL_MATERIAL_DESTROY = 1576u, + MSI_FAILED_CHANGE_TABNAME = 1577u, + MSI_FAILED_ADD_TAB = 1578u, + MSI_FAILED_LOCKSERVER = 1579u, + MSI_BOT_CHECK = 1580u, + MSI_SKILL_FAIL_MATERIAL_IDENTITY = 1581u, + MSI_BAN_IP_BLOCK = 1582u, + MSI_BAN_INVALID_PWD_CNT = 1583u, + MSI_MIX_ACCEPT = 1584u, + MSI_BOT_CHECK_NOTIC = 1585u, + MSI_DESCRIBE_BATTLEFIELD = 1586u, + MSI_BATTLEFIELD_STATUS = 1587u, + MSI_BATTLEFIELD_HELP = 1588u, + MSI_BAN_NOT_ALLOWED_JOBCLASS = 1589u, + MSI_REMOVE_EQUIPEDITEM = 1590u, + MSI_MINI_ICON = 1591u, + MSI_BATTLEFIELD_TEAM = 1592u, + MSI_WAIT_STATUS = 1593u, + MSI_NOTIFY_BATTLEFIELD_CANCEL = 1594u, + MSI_BATTLEFIELD_COUNT = 1595u, + MSI_BATTLEFIELD_ATEAM_COUNT = 1596u, + MSI_BATTLEFIELD_BTEAM_COUNT = 1597u, + MSI_BATTLEFIELD_ATEAM_WAIT = 1598u, + MSI_BATTLEFIELD_BTEAM_WAIT = 1599u, + MSI_SHOW_BATTLEFIELD_ICON = 1600u, + MSI_DONT_SHOW_BATTLEFIELD_ICON = 1601u, + MSI_NOTIFY_BATTLEFIELD_MOVE = 1602u, + MSI_NOTIFY_BATTLEFIELD_DEFER = 1603u, + MSI_WHO_IS = 1604u, + MSI_I_RECEIVED_DAMAGE = 1605u, + MSI_PARTY_RECEIVED_DAMAGE = 1606u, + MSI_I_GAVE_DAMAGE = 1607u, + MSI_PARTY_GAVE_DAMAGE = 1608u, + MSI_DROP_ITEM = 1609u, + MSI_CLEAR_QUEST_MONSTER = 1610u, + MSI_DELETE_QUEST = 1611u, + MSI_NOTIFY_WHO = 1612u, + MSI_NOTIFY_EXP = 1613u, + MSI_NOTIFY_JOBEXP = 1614u, + MSI_GET = 1615u, + MSI_LOSS = 1616u, + MSI_NOTIFY_STEAL_COIN = 1617u, + MSI_VIEW_COMBAT_MSG = 1618u, + MSI_VIEW_PARTY_COMBAT_MSG = 1619u, + MSI_VIEW_GETTING_EXP_MSG = 1620u, + MSI_VIEW_PARTY_GETTING_EXP_MSG = 1621u, + MSI_VIEW_QUEST_INFO_MSG = 1622u, + MSI_VIEW_BATTLEFIELD_INFO_MSG = 1623u, + MSI_NOTIFY_TARGET_WHO = 1624u, + MSI_NOTIFY_SKILL_TO_TARGET = 1625u, + MSI_LOCK_MOUSE = 1626u, + MSI_UNLOCK_MOUSE = 1627u, + MSI_BROADCASTING_SPECIAL_ITEM_OBTAIN = 1628u, + MSI_JOB_SWORDMAN = 1629u, + MSI_JOB_MAGICIAN = 1630u, + MSI_JOB_ARCHER = 1631u, + MSI_JOB_ACOLYTE = 1632u, + MSI_JOB_MERCHANT = 1633u, + MSI_JOB_THIEF = 1634u, + MSI_JOB_KNIGHT = 1635u, + MSI_JOB_PRIEST = 1636u, + MSI_JOB_WIZARD = 1637u, + MSI_JOB_BLACKSMITH = 1638u, + MSI_JOB_HUNTER = 1639u, + MSI_JOB_ASSASSIN = 1640u, + MSI_JOB_CRUSADER = 1641u, + MSI_JOB_MONK = 1642u, + MSI_JOB_SAGE = 1643u, + MSI_JOB_ROGUE = 1644u, + MSI_JOB_ALCHEMIST = 1645u, + MSI_JOB_BARD = 1646u, + MSI_JOB_DANCER = 1647u, + MSI_JOB_RUNE_KNIGHT = 1648u, + MSI_JOB_WARLOCK = 1649u, + MSI_JOB_RANGER = 1650u, + MSI_JOB_ARCHBISHOP = 1651u, + MSI_JOB_MECHANIC = 1652u, + MSI_JOB_GUILLOTINE_CROSS = 1653u, + MSI_JOB_ROYAL_GUARD = 1654u, + MSI_JOB_SORCERER = 1655u, + MSI_JOB_MINSTREL = 1656u, + MSI_JOB_WANDERER = 1657u, + MSI_JOB_SURA = 1658u, + MSI_JOB_GENETIC = 1659u, + MSI_JOB_SHADOW_CHASER = 1660u, + MSI_JOB_SWORDMAN_H = 1661u, + MSI_JOB_MAGICIAN_H = 1662u, + MSI_JOB_ARCHER_H = 1663u, + MSI_JOB_ACOLYTE_H = 1664u, + MSI_JOB_MERCHANT_H = 1665u, + MSI_JOB_THIEF_H = 1666u, + MSI_JOB_KNIGHT_H = 1667u, + MSI_JOB_PRIEST_H = 1668u, + MSI_JOB_WIZARD_H = 1669u, + MSI_JOB_BLACKSMITH_H = 1670u, + MSI_JOB_HUNTER_H = 1671u, + MSI_JOB_ASSASSIN_H = 1672u, + MSI_JOB_CRUSADER_H = 1673u, + MSI_JOB_MONK_H = 1674u, + MSI_JOB_SAGE_H = 1675u, + MSI_JOB_ROGUE_H = 1676u, + MSI_JOB_ALCHEMIST_H = 1677u, + MSI_JOB_BARD_H = 1678u, + MSI_JOB_DANCER_H = 1679u, + MSI_JOB_NOVICE = 1680u, + MSI_JOB_NOVICE_H = 1681u, + MSI_JOB_SUPERNOVICE = 1682u, + MSI_JOB_GUNSLINGER = 1683u, + MSI_JOB_NINJA = 1684u, + MSI_JOB_TAEKWON = 1685u, + MSI_JOB_STAR = 1686u, + MSI_JOB_LINKER = 1687u, + MSI_SEEK_PARTY_MEMBER = 1688u, + MSI_SEEK_PARTY_LIST = 1689u, + MSI_SEEK_PARTY_CHECK = 1690u, + MSI_FAIL_NEED_EQUIPPED_BOW = 1691u, + MSI_FAIL_NEED_EQUIPPED_INSTRUMENT_WHIP = 1692u, + MSI_BAD_CHAR = 1693u, + MSI_ALRAM = 1694u, + MSI_FAIL_BUY_ITEM_INVALID_MCSTORE = 1695u, + MSI_CAN_DROP_ITEM_TO_ITEMWND = 1696u, + MSI_TIME = 1697u, + MSI_MAP = 1698u, + MSI_CANT_USE_WHEN_OPENED_EXCHANGEWND = 1699u, + MSI_HOTKEY_UNKOWN = 1700u, + MSI_EXPLAIN_STATEINFO = 1701u, + MSI_SHOW_STATEINFO_ON = 1702u, + MSI_SHOW_STATEINFO_OFF = 1703u, + MSI_LIMIT_BUY_ITEM2 = 1704u, + MSI_LIMIT_SELL_ITEM = 1705u, + MSI_CAN_BUY_ITEM_NUM = 1706u, + MSI_SAVE_HOTKEY_TO_FILE = 1707u, + MSI_CHARACTER_IS_BUSY = 1708u, + MSI_RO_HELP = 1709u, + MSI_HAVENOT_ANVIL = 1710u, + MSI_WHISPER_BLOCK_NOVICE_LEVEL10 = 1711u, + MSI_JOB_ATTACKER = 1712u, + MSI_JOB_TANKER = 1713u, + MSI_JOB_HEALER = 1714u, + MSI_JOB_ASSISTANCE = 1715u, + MSI_DESCRIBE_PARTY_BOOKING = 1716u, + MSI_GUILD_ALLY_REQUEST_DISABLE = 1717u, + MSI_GUILD_HOSTILE_REQUEST_DISABLE = 1718u, + MSI_FRIEND_ADD_FALSE_AGIT = 1719u, + MSI_BUYINGSTORE_MAKEWND_TITLE = 1720u, + MSI_BUYINGSTORE_MAKEWND_PRICE = 1721u, + MSI_BUYINGSTORE_MAKEWND_MYZENY = 1722u, + MSI_BUYINGSTORE_MAKEWND_LIMITZENY = 1723u, + MSI_BUYINGSTORE_MAKEWND_ADDITEM = 1724u, + MSI_BUYINGSTORE_MAKEWND_INPUTPRICE = 1725u, + MSI_BUYINGSTORE_MAKEWND_REINPUTPRICE = 1726u, + MSI_BUYINGSTORE_MAKEWND_INPUTNUM = 1727u, + MSI_BUYINGSTORE_MAKEWND_REINPUTNUM = 1728u, + MSI_BUYINGSTORE_MAKEWND_DUPLICATEITEM = 1729u, + MSI_BUYINGSTORE_MAKEWND_INPUTLIMITZENY = 1730u, + MSI_BUYINGSTORE_MAKEWND_REINPUTLIMITZENY = 1731u, + MSI_BUYINGSTORE_MAKEWND_ITEMLIST = 1732u, + MSI_BUYINGSTORE_MIRRORBUYITEMLIST = 1733u, + MSI_BUYINGSTORE_MYSHOPWND_TITLE = 1734u, + MSI_BUYINGSTORE_MYSHOPWND_LIMITZENY = 1735u, + MSI_BUYINGSTORE_MYSHOPWND_ITEMINFO = 1736u, + MSI_BUYINGSTORE_SHOPWND_TITLE = 1737u, + MSI_BUYINGSTORE_MIRRORSELLWND_TITLE = 1738u, + MSI_BUYINGSTORE_SELLWND_LIMITNUM = 1739u, + MSI_BUYINGSTORE_SELLWND_LACKBUYERZENY = 1740u, + MSI_BUYINGSTORE_OPEN_FAILED = 1741u, + MSI_BUYINGSTORE_OVERWEIGHT = 1742u, + MSI_BUYINGSTORE_TRADE_OVERLIMITZENY = 1743u, + MSI_BUYINGSTORE_TRADE_BUYCOMPLETE = 1744u, + MSI_BUYINGSTORE_TRADE_LACKBUYERZENY = 1745u, + MSI_BUYINGSTORE_TRADE_SELLCOMPLETE = 1746u, + MSI_BUYINGSTORE_TRADE_OVERCOUNT = 1747u, + MSI_USESKILL_FAIL_EL_SUMMON = 1748u, + MSI_AGAINSTSERVERSIEGEWARFARE_RESTRICTION = 1749u, + MSI_OTP_MUST_6_CHAR = 1750u, + MSI_DB_ERROR = 1751u, + MSI_OTP_FAILED = 1752u, + MSI_PARTY_BOOKING_NOTIFY = 1753u, + MSI_PARTY_BOOKING_REQURT = 1754u, + MSI_PARTY_BOOKING_TYPE = 1755u, + MSI_PARTY_BOOKING_TYPE_1 = 1756u, + MSI_PARTY_BOOKING_TYPE_2 = 1757u, + MSI_PARTY_BOOKING_TYPE_3_1 = 1758u, + MSI_PARTY_BOOKING_TYPE_3_2 = 1759u, + MSI_PARTY_BOOKING_TYPE_1PLUS = 1760u, + MSI_PARTY_BOOKING_TYPE_2PLUS = 1761u, + MSI_PARTY_BOOKING_TYPE_ETC = 1762u, + MSI_PARTY_BOOKING_REQURTING = 1763u, + MSI_PARTY_BOOKING_REQURT_TIP = 1764u, + MSI_PARTY_BOOKING_SEARCH = 1765u, + MSI_PARTY_BOOKING_ALL_SELECT = 1766u, + MSI_PARTY_BOOKING_ERR1 = 1767u, + MSI_PARTY_BOOKING_ERR2 = 1768u, + MSI_PARTY_BOOKING_ERR3 = 1769u, + MSI_PARTY_BOOKING_ERR4 = 1770u, + MSI_PARTY_BOOKING_ERR5 = 1771u, + MSI_DISABLE_COSTUMEITEM_MAP = 1772u, + MSI_CANNOT_EQUIP_ITEM_LEVEL = 1773u, + MSI_CANNOT_USE_ITEM_LEVEL = 1774u, + MSI_CHATMODE_ONOFF = 1775u, + MSI_OVER_TABSIZE = 1776u, + MSI_SET_CHATINFO = 1777u, + MSI_SELL = 1778u, + MSI_BUY = 1779u, + MSI_SEARCH_STOREINFO = 1780u, + MSI_STORE_NAME = 1781u, + MSI_SEARCH_ITEM_COUNT = 1782u, + MSI_SEARCH_ITEM_PRICE = 1783u, + MSI_SSI_FAILED_OVER_MAXCOUNT = 1784u, + MSI_OPEN_SEARCH_STORE = 1785u, + MSI_SSO_FAILED = 1786u, + MSI_ZONE_MOVE_FAIL = 1787u, + MSI_SEARCH_INCLUDED = 1788u, + MSI_WITHDREW_USERS = 1789u, + MSI_DIDNOT_AGREE = 1790u, + MSI_ACCOUNT_DOESNOT_EXIST = 1791u, + MSI_AGE_RESTRICTIONS = 1792u, + MSI_ACCOUNT_BLOCK = 1793u, + MSI_BUG_BLOCK = 1794u, + MSI_PLUSEXP75 = 1795u, + MSI_PLUSEXP50 = 1796u, + MSI_FAIL_OPEN_STORE = 1797u, + MSI_SSI_FAILED_SEARCH_CNT = 1798u, + MSI_SSI_FAILED_ITEM_DOES_NOT_EXIST = 1799u, + MSI_SSI_FAILED_LIMIT_SERACH_TIME = 1800u, + MSI_SSI_TOOLTIP_OF_SERACHING_THE_CARD = 1801u, + MSI_SSI_REST_OF_NUMBER_OF_SEARCHES = 1802u, + MSI_SSI_FAILED_SEARCH_STORE = 1803u, + MSI_SSI_FAILED_PRICE_ISNOT_VALID = 1804u, + MSI_GENERAL_EQUIPMENT = 1805u, + MSI_COSTUME_EQUIPMENT = 1806u, + MSI_MINUTE = 1807u, + MSI_SECOND = 1808u, + MSI_SSI_FAILED_ENTER_THE_NAME_OF_ITEM = 1809u, + MSI_SSI_FAILED_NAME_OF_ITEM_DOES_NOT_EXIST = 1810u, + MSI_NOT_EXIST_ENTRYMAP = 1811u, + MSI_SSI_FAILED_NAME_OF_CARD_DOES_NOT_EXIST = 1812u, + MSI_CASH_FAILED_TOTAL_CNT = 1813u, + MSI_CASH_FAILED_BUY_SOME = 1814u, + MSI_ENTER_PEOPLE_BIRTH = 1815u, + MSI_RESULT_FAIL_UNKNOWN = 1816u, + MSI_RESULT_FAIL_DATABASE = 1817u, + MSI_RESULT_FAIL_GUILD = 1818u, + MSI_RESULT_FAIL_PARTY = 1819u, + MSI_RESULT_FAIL_CONFIGURATION = 1820u, + MSI_RESULT_FAIL_DATE = 1821u, + MSI_RESULT_FAIL_BIRTH = 1822u, + MSI_USESKILL_FAIL_RELATIONGRADE = 1823u, + MSI_USESKILL_FAIL_STYLE_CHANGE_FIGHTER = 1824u, + MSI_USESKILL_FAIL_STYLE_CHANGE_GRAPPLER = 1825u, + MSI_PARTY_REGISTRATION_FAILED = 1826u, + MSI_PARTY_SEARCH_FAILED = 1827u, + MSI_PARTY_AD_DELETE_FAILED = 1828u, + MSI_PARTY_NOT_EXIST_AD = 1829u, + MSI_REFUSE_SSO_NOT_PAY_USER = 1830u, + MSI_SCREENSHOT_FOR_EXCHANGE = 1831u, + MSI_SCREENSHOT_FOR_EXCHANGE_CHARNAME = 1832u, + MSI_NOTIFY_NEO_INSURANCE_ITEM_USE = 1833u, + MSI_TALK = 1834u, + MSI_MACRO_DUPLICATE = 1835u, + MSI_MACRO_POSTDELAY = 1836u, + MSI_MACRO_NOT_POSTDELAY = 1837u, + MSI_SSO_ERROR_MSG = 1838u, + MSI_REFUSE_SSO_AUTH_INVALID_TOKEN = 1839u, + MSI_REFUSE_SSO_AUTH_INVALID_USER = 1840u, + MSI_REFUSE_SSO_AUTH_INVALID_AGE = 1841u, + MSI_NC_BUY = 1842u, + MSI_NC_BLANK = 1843u, + MSI_NC_FIRSTPAGE = 1844u, + MSI_NC_LASTPAGE = 1845u, + MSI_NC_CAT1 = 1846u, + MSI_NC_CAT2 = 1847u, + MSI_NC_CAT3 = 1848u, + MSI_NC_CAT4 = 1849u, + MSI_NC_CAT5 = 1850u, + MSI_NC_CAT6 = 1851u, + MSI_NC_CAT7 = 1852u, + MSI_NC_CAT8 = 1853u, + MSI_NC_COST = 1854u, + MSI_NC_NUM = 1855u, + MSI_NC_COUNT = 1856u, + MSI_NC_FREECASH = 1857u, + MSI_NC_CASH = 1858u, + MSI_CALLMONSTER_FAIL_AREA = 1859u, + MSI_BUY_CASH_FAIL2 = 1860u, + MSI_MACRO_SAVE_DATA = 1861u, + MSI_ITEM_REUSE_LIMIT_SECOND = 1862u, + MSI_FAIL_NEED_EQUIPPED_SPEAR = 1863u, + MSI_USESKILL_FAIL_DRAGON = 1864u, + MSI_OVER_CONNECT_USER = 1865u, + MSI_AUTHENTICATE = 1866u, + MSI_SELECT_SAVESLOT = 1867u, + MSI_BROADCASTING_SPECIAL_ITEM_OBTAIN2 = 1868u, + MSI_NOTUSE_GROOMY = 1869u, + MSI_BUYINGSTORE_OVERFLOW_MONEY = 1870u, + MSI_PREVENT_PARTY_JOIN = 1871u, + MSI_PREVENT_PARTY_LEAVE = 1872u, + MSI_PREVENT_PARTY_EXPEL = 1873u, + MSI_SDO_REALNAME = 1874u, + MSI_SDO_ID_NUMBER = 1875u, + MSI_SDO_EMAIL = 1876u, + MSI_SDO_WRONG_VALUE = 1877u, + MSI_MCSTORE_FAIL_SELLER_MONEY_GIVE = 1878u, + MSI_INVALID_CLASS = 1879u, + MSI_INVALID_GENDER = 1880u, + MSI_SUCCESS_AUTHENTICATE = 1881u, + MSI_INVALID_REALNAME = 1882u, + MSI_INVALID_IDNUMBER = 1883u, + MSI_INVALID_AUTHENTICATE = 1884u, + MSI_CANNOT_ATTACK_IN_RIDING_STATE = 1885u, + MSI_CANNOT_USE_SKILL_IN_RIDING_STATE = 1886u, + MSI_STORE_PASSWORD_4_6 = 1887u, + MSI_SECOND_PASSWORD_LOGIN_SUCCESS = 1888u, + MSI_SECOND_PASSWORD_MAKE_SUCCESS = 1889u, + MSI_SECOND_PASSWORD_DEL_SUCCESS = 1890u, + MSI_SECOND_PASSWORD_EDIT_SUCCESS = 1891u, + MSI_SECOND_PASSWORD_LOGIN_FAILED = 1892u, + MSI_SECOND_PASSWORD_MAKE_FAILED = 1893u, + MSI_SECOND_PASSWORD_DEL_FAILED = 1894u, + MSI_SECOND_PASSWORD_EDIT_FAILED = 1895u, + MSI_SECOND_PASSWORD_EDIT_RESTRICT_PW = 1896u, + MSI_SECOND_PASSWORD_EDIT_PERSONALNUM_PW = 1897u, + MSI_SECOND_PASSWORD_MAKE_DUPLICATED_PW = 1898u, + MSI_SECOND_PASSWORD = 1899u, + MSI_SECOND_PASSWORD_INPUT = 1900u, + MSI_SECOND_PASSWDRD_NOT_AVAILABLE_SUCCESS = 1901u, + MSI_SECOND_PASSWDRD_NOT_AVAILABLE_FAILED = 1902u, + MSI_SECOND_PASSWDRD_AVAILABLE_SUCCESS = 1903u, + MSI_SECOND_PASSWDRD_AVAILABLE_FAILED = 1904u, + MSI_SECOND_PASSWORD_INFO_1 = 1905u, + MSI_SECOND_PASSWORD_INFO_2 = 1906u, + MSI_SECOND_PASSWORD_INFO_3 = 1907u, + MSI_MACRO_ITEM = 1908u, + MSI_MACRO_SKILL = 1909u, + MSI_MACRO_TACTIC = 1910u, + MSI_MACRO_ETC = 1911u, + MSI_MACRO_COMBAT = 1912u, + MSI_MACRO_NON_COMBAT = 1913u, + MSI_MACRO_BUFF = 1914u, + MSI_MACRO_AUTO_EQUIPED = 1915u, + MSI_MACRO_1ST_ATTACK = 1916u, + MSI_MACRO_ATTACK = 1917u, + MSI_MACRO_NEXT_ATK_TIME = 1918u, + MSI_MACRO_WHEN_DIED = 1919u, + MSI_MACRO_WHEN_INVITED_PARTY = 1920u, + MSI_MACRO_PICKUP_ITEM = 1921u, + MSI_MACRO_OVERWEIGHT = 1922u, + MSI_BUSY = 1923u, + MSI_PLUSONLYJOBEXP2 = 1924u, + MSI_MACRO_SAVE = 1925u, + MSI_MACRO_SAVE_DATA2 = 1926u, + MSI_SECOND_PASSWORD_LEVEL = 1927u, + MSI_RESULT_FAIL_CHAR_DELETE = 1928u, + MSI_USESKILL_FAIL_NEER_WALL = 1929u, + MSI_SEEK_PARTY_SET = 1930u, + MSI_FAIELD_RIDING_OVERLAPPED = 1931u, + MSI_USESKILL_FAIL_NEED_EXP_1PERCENT = 1932u, + MSI_EXP_MSG = 1933u, + MSI_DROP_MSG = 1934u, + MSI_DEATH_MSG = 1935u, + MSI_BASIC_EXP_MSG = 1936u, + MSI_USESKILL_FAIL_CHORUS_SP_INSUFFICIENT = 1937u, + MSI_CHARACTER_IS_OVER_COUNT = 1938u, + MSI_CHARACTER_IS_EACHITEM_OVER_COUNT = 1939u, + MSI_PURCHASE_FAIL_EACHITEM_COUNT = 1940u, + MSI_PARTY_FAILED_TIMEOUT = 1941u, + MSI_UNEXCEPTION_MSG1ST = 1942u, + MSI_INGAMBA_BILLING_ZSVR_ERROR = 1943u, + MSI_CASH_FAILED_RUNE_OVERCOUNT = 1944u, + MSI_CASH_FAILED_EACHITEM_OVERCOUNT = 1945u, + MSI_CASH_FAILED_UNKOWN = 1946u, + MSI_CASH_FAILED_BUSY = 1947u, + MSI_USESKILL_FAIL_NEED_EQUIPMENT_KUNAI = 1948u, + MSI_SEEK_PARTY_LEVEL_HELP = 1949u, + MSI_FAILED_GET_ITEM_FROM_ZONEDA = 1950u, + MSI_USESKILL_FAIL_SIZE = 1951u, + MSI_USESKILL_FAIL_TOTARGET_PLAYER = 1952u, + MSI_CAN_NOT_EQUIP_ITEM_FORBID = 1953u, + MSI_USESKILL_FAIL_THERE_ARE_NPC_AROUND = 1954u, + MSI_REPLAY_ELAPSEDTIME = 1955u, + MSI_REPLAY_SPEED1_4 = 1956u, + MSI_REPLAY_SPEED1_2 = 1957u, + MSI_REPLAY_SPEED1 = 1958u, + MSI_REPLAY_SPEED2 = 1959u, + MSI_REPLAY_SPEED4 = 1960u, + MSI_REPLAY_SPEED8 = 1961u, + MSI_REPLAY_SPEED16 = 1962u, + MSI_REPLAY_SPEEDUNKNOWN = 1963u, + MSI_REPLAY_CHRVICEINFO = 1964u, + MSI_REPLAY_CHARACTERNAME = 1965u, + MSI_REPLAY_MAPNAME = 1966u, + MSI_REPLAY_RECORDTIME = 1967u, + MSI_REPLAY_PLAYTIME = 1968u, + MSI_REPLAY_NOREPLAYFILE = 1969u, + MSI_REPLAY_SERVERNOMATCH = 1970u, + MSI_REPLAY_REPLAYOPTIONSETTING = 1971u, + MSI_REPLAY_ENTERTHEFILENAME = 1972u, + MSI_REPLAY_SETREPLAYSAVEDATA = 1973u, + MSI_REPLAY_SETRECOPTION = 1974u, + MSI_REPLAY_GAGEPOS1 = 1975u, + MSI_REPLAY_GAGEPOS2 = 1976u, + MSI_REPLAY_START = 1977u, + MSI_REPLAY_STOP = 1978u, + MSI_REPLAY_START2 = 1979u, + MSI_REPLAY_OPENOPTION = 1980u, + MSI_REPLAY_CLOSEOPION = 1981u, + MSI_REPLAY_END = 1982u, + MSI_REPLAY_TIME = 1983u, + MSI_REPLAY_PARTYFRIEND = 1984u, + MSI_REPLAY_CHAT = 1985u, + MSI_REPLAY_SHORTCUTS = 1986u, + MSI_REPLAY_AUTOMATICFILENAME = 1987u, + MSI_REPLAY_CHECKINGFILE = 1988u, + MSI_REPLAY_THESAMEFILEEXISTS = 1989u, + MSI_REPLAY_RECORDSTART = 1990u, + MSI_REPLAY_RECORDEND = 1991u, + MSI_WEIGHT = 1992u, + MSI_TOTAL = 1993u, + MSI_FAIL_NEED_EQUIPPED_SYURIKEN = 1994u, + MSI__BASIC_MSG_BASE = 1995u, + MSI__BASIC_MSG_JOB = 1996u, + MSI_BASIC_MSG_ZENY = 1997u, + MSI_GRAPHIC_MSG_TRILINEAR = 1998u, + MSI_GRAPHIC_MSG_ATTACK = 1999u, + MSI_GRAPHIC_MSG_SKILL = 2000u, + MSI_GRAPHIC_MSG_ITEM = 2001u, + MSI_GRAPHIC_MSG_NOCTRL = 2002u, + MSI_GRAPHIC_MSG_BATTLE = 2003u, + MSI_CHARACTER_MSG_CHARACTERTOTALSLOT = 2004u, + MSI_CHARACTER_MSG_PREMIUMSERVICE = 2005u, + MSI_CHARACTER_MSG_PREMIUM = 2006u, + MSI_CHARACTER_MSG_SERVICE = 2007u, + MSI_CHARACTER_MSG_BILLINGSERVICE = 2008u, + MSI_CHARACTER_MSG_BILLING = 2009u, + MSI_MSG_COMMANDLIST = 2010u, + MSI_SEEK_PARTY_LEVEL = 2011u, + MSI_SEEK_PARTY_MAP = 2012u, + MSI_SEEK_PARTY_JOB = 2013u, + MSI_MSG_NOTAVAILABLE = 2014u, + MSI_MSG_SUPERNOVICE_CHOPOKGI_CAPPEDLEVEL = 2015u, + MSI_CHANGE_CHARACTER_SLOT = 2016u, + MSI_CHANGE_CHARACTER_SLOT_FAILED = 2017u, + MSI_CHARACTERNAME_ERROR = 2018u, + MSI_QUEST_DISPLAY_ONOFF = 2019u, + MSI_SHUTDOWN_ALERT_MSG = 2020u, + MSI_BAN_SHUTDOWN_TEENAGER = 2021u, + MSI_FAILED_RENAME_BELONGS_TO_GUILD = 2022u, + MSI_FAILED_RENAME_BELONGS_TO_PARTY = 2023u, + MSI_FAILED_RENAME_UNKOWN = 2024u, + MSI_CHARSLOT_CHANGE_DUPLICATE = 2025u, + MSI_CHARNAME_CHANGE_DUPLICATE = 2026u, + MSI_FAILED_RENAME_OVER_LENGTH = 2027u, + MSI_FAILED_RENAME_PREVENTNAM = 2028u, + MSI_FAILED_RENAME_FORBIDDEN = 2029u, + MSI_COMPLETE_HUNTING_QUEST = 2030u, + MSI_PLUSEXP_VALUE = 2031u, + MSI_PARTY_RECALL_TIME = 2032u, + MSI_PARTY_RECALL_INFO = 2033u, + MSI_RECALL_TARGET = 2034u, + MSI_PARTY_BLACKLIST = 2035u, + MSI_PARTY_CF_PAY = 2036u, + MSI_PARTY_CF_PAY_SHORTAGE_COST = 2037u, + MSI_PARTY_ADD_OK = 2038u, + MSI_PARTY_ADD_REFUSES = 2039u, + MSI_PARTY_ITEM_VIEW = 2040u, + MSI_SEEK_PARTY_MEMO_HELP = 2041u, + MSI_PARTY_REQUEST = 2042u, + MSI_DIRECT_CHAT = 2043u, + MSI_ADD_BLACKLIST = 2044u, + MSI_PARTY_RECRUIT_NOT_RECALL_PAY = 2045u, + MSI_PARTY_RECRUIT_MEMO_ERROR = 2046u, + MSI_PARTY_RECRUIT_ERROR = 2047u, + MSI_PARTY_REFUSE_ERROR = 2048u, + MSI_PARTY_RECRUIT_INFO = 2049u, + MSI_INVENTORY_TABNAME_1 = 2050u, + MSI_INVENTORY_TABNAME_3 = 2051u, + MSI_ITEM_DROP_LOCK = 2052u, + MSI_PARTY_RECRUIT_ALRAM = 2053u, + MSI_CREATE_PARTY = 2054u, + MSI_WITHDRAW_PARTY = 2055u, + MSI_INVITE_PARTY = 2056u, + MSI_PUT_PARTY_NAME_IN = 2057u, + MSI_PUT_PLAYER_NAME_IN = 2058u, + MSI_CHARACTER_PARTY_INVITATION_TO_JOIN = 2059u, + MSI_CHARACTER_REJECT_PARTY_INVITATION = 2060u, + MSI_CHARACTER_ACCEPT_PARTY_INVITATION = 2061u, + MSI_PARTY_RECRUIT_ERROR1 = 2062u, + MSI_PARTY_RECRUIT_ERROR2 = 2063u, + MSI_CHARNAME_CHANGE_FILED_GUILDMEMBER = 2064u, + MSI_CHARNAME_CHANGE_FILED_PARTYMEMBER = 2065u, + MSI_PARTY_RECRUIT_RECALL_ERR1 = 2066u, + MSI_PARTY_RECRUIT_RECALL_ERR2 = 2067u, + MSI_PARTY_RECRUIT_RECALL_ERR3 = 2068u, + MSI_PARTY_RECRUIT_RECALL_ERR4 = 2069u, + MSI_YOU_ARE_NOT_PARTYMASTER = 2070u, + MSI_NC_ITEM_SEARCH = 2071u, + MSI_PLEASE_PUT_CHARACTER_NAME_IN = 2072u, + MSI_PLEASE_PUT_PARTY_NAME_IN = 2073u, + MSI_GUILD_HELPER = 2074u, + MSI_NO_GUILD_CURRENTLY_PARTICIPATED_IN = 2075u, + MSI_CREATE_GUILD = 2076u, + MSI_PLEASE_PUT_GUILD_NAME_IN = 2077u, + MSI_PARTY_RECRUIT_REFUSE_VOLUNTEER = 2078u, + MSI_SERVICESELECT = 2079u, + MSI_SHOW_MAPNAMETITLE = 2080u, + MSI_REPLAY_STR_REPLAYFILELIST = 2081u, + MSI_REPLAY_STR_FILEINFO = 2082u, + MSI_REPLAY_STR_FILELIST = 2083u, + MSI_NOT_MOVEABLE_TRADE = 2084u, + MSI_GUILD_DISBAND = 2085u, + MSI_PUT_DISBAND_GUILDNAME = 2086u, + MSI_JOINGUILD_NOTEXIST_USER = 2087u, + MSI_FAILED_SET_EFFECT_BIRD = 2088u, + MSI_BASIC_EXP_MSG_BRZ = 2089u, + MSI_JOINGUILD_TARGET_USER_IN_SIEGEMAP = 2090u, + MSI_PARTY_MASTER_CHANGE_SAME_MAP = 2091u, + MSI_CANNOT_PARTY_MASTER_CHANGE_IN_MAP = 2092u, + MSI_ROYAL_CHIKENOFF = 2093u, + MSI_TIME_TYPE3 = 2094u, + MSI_JOINGUILD_REQ_USER_IN_SIEGEMAP = 2095u, + MSI_BATTLEFIELD_MSG_REQUEST_JOINWAIT = 2096u, + MSI_BATTLEFIELD_MSG_FULL = 2097u, + MSI_BATTLEFIELD_MSG_UNKNOWN_NAME = 2098u, + MSI_BATTLEFIELD_MSG_UNKNOWN_TYPE = 2099u, + MSI_BATTLEFIELD_MSG_MAXOVER = 2100u, + MSI_BATTLEFIELD_MSG_JOIN_NOTLEVEL = 2101u, + MSI_BATTLEFIELD_MSG_JOIN_OVERLAP = 2102u, + MSI_BATTLEFIELD_MSG_RESTART = 2103u, + MSI_BATTLEFIELD_MSG_NOTJOB = 2104u, + MSI_BATTLEFIELD_MSG_JOIN_ONLYBOSS = 2105u, + MSI_BATTLEFIELD_MSG_BUSY_PARTYMEMBER = 2106u, + MSI_BATTLEFIELD_MSG_CANCEL_JOINWAIT = 2107u, + MSI_BATTLEFIELD_MSG_WRONG_NAME = 2108u, + MSI_BATTLEFIELD_MSG_NOTRANK = 2109u, + MSI_BATTLEFIELD_MSG_FAIL_CHOICE = 2110u, + MSI_BATTLEFIELD_MSG_CANCEL_JOIN = 2111u, + MSI_BATTLEFIELD_MSG_DOYOU_JOIN = 2112u, + MSI_BATTLEFIELD_HELP1 = 2113u, + MSI_BATTLEFIELD_HELP2 = 2114u, + MSI_BATTLEFIELD_HELP3 = 2115u, + MSI_BATTLEFIELD_HELP4 = 2116u, + MSI_BATTLEFIELD_HELP5 = 2117u, + MSI_BATTLEFIELD_HELP6 = 2118u, + MSI_BATTLEFIELD_HELP7 = 2119u, + MSI_BATTLEFIELD_HELP8 = 2120u, + MSI_BATTLEFIELD_HELP9 = 2121u, + MSI_BATTLEFIELD_HELP10 = 2122u, + MSI_BATTLEFIELD_START = 2123u, + MSI_BATTLEFIELD_DOYOU_MOVE = 2124u, + MSI_BATTLEFIELD_WARNINGMSG1 = 2125u, + MSI_BATTLEFIELD_WARNINGMSG2 = 2126u, + MSI_BATTLEFIELD_WARNINGMSG3 = 2127u, + MSI_BATTLEFIELD_WARNINGMSG4 = 2128u, + MSI_BATTLEFIELD_WAIT_PLAYER = 2129u, + MSI_BATTLEFIELD_REQUEST_JOIN = 2130u, + MSI_BATTLEFIELD_WAITTIME_D = 2131u, + MSI_BATTLEFIELD_STATE_JOINWAIT = 2132u, + MSI_BATTLEFIELD_NAME_S = 2133u, + MSI_BATTLEFIELD_MEMBER_D = 2134u, + MSI_BATTLEFIELD_MYRANK_D = 2135u, + MSI_BATTLEFIELD_DP_TITLE = 2136u, + MSI_BATTLEFIELD_DP_AIM = 2137u, + MSI_BATTLEFIELD_DP_MEMBER = 2138u, + MSI_BATTLEFIELD_DP_REQUIRED = 2139u, + MSI_BATTLEFIELD_DP_WIN = 2140u, + MSI_BATTLEFIELD_DP_DRAW = 2141u, + MSI_BATTLEFIELD_DP_LOSS = 2142u, + MSI_BATTLEFIELD_DOYOU_SINGLE = 2143u, + MSI_BATTLEFIELD_DOYOU_PALTY = 2144u, + MSI_BATTLEFIELD_DOYOU_GUILD = 2145u, + MSI_BATTLEFIELD_LIST2 = 2146u, + MSI_BATTLEFIELD_D_VS_D = 2147u, + MSI_BATTLEFIELD_LEVELDOWN_D = 2148u, + MSI_BATTLEFIELD_LEVELUP_D = 2149u, + MSI_BATTLEFIELD_LEVEL_D_D = 2150u, + MSI_BATTLEFIELD_LIMITLESS = 2151u, + MSI_BATTLEFIELD_MSG_NOT_JOINMAP = 2152u, + MSI_BATTLEFIELD_MSG_WAIT_1MM = 2153u, + MSI_BATTLEFIELD_MSG_PLZ_PALTYJOIN = 2154u, + MSI_BATTLEFIELD_MSG_NOT_PALTYBOSS = 2155u, + MSI_BATTLEFIELD_MSG_OVER_PARTYMEMBER = 2156u, + MSI_BATTLEFIELD_MSG_PLZ_GUILDJOIN = 2157u, + MSI_BATTLEFIELD_MSG_NOT_GUILDBOSS = 2158u, + MSI_BATTLEFIELD_MSG_OVER_GUILDMEMBER = 2159u, + MSI_RESERVE_CHANGE_CHARACTER_SLOT = 2160u, + MSI_CHARACTER_SLOT_CHANGE = 2161u, + MSI_CHANGE_CHARACTER_NAME = 2162u, + MSI_MSG_MAKECHARCTER = 2163u, + MSI_UAE_URL = 2164u, + MSI_UAE_SERVERSTR = 2165u, + MSI_MERGE_ITEM = 2166u, + MSI_SELECT_ITEM_TO_MERGE = 2167u, + MSI_MERGE_ITEM_SUCCESS = 2168u, + MSI_MERGE_ITEM_FAILED_NOT_MERGE = 2169u, + MSI_MERGE_ITEM_FAILED_MAX_COUNT = 2170u, + MSI_CHARACTER_LEFT_ROLL = 2171u, + MSI_CHARACTER_RIGHT_ROLL = 2172u, + MSI_VIEW_BEFORE_WORLDINFO = 2173u, + MSI_VIEW_BEFORE_WORLDINFO_TITLE = 2174u, + MSI_VIEW_BEFORE_SERVERINFO = 2175u, + MSI_VIEW_BEFORE_CHARNAME = 2176u, + MSI_MONSTER_HP_ON = 2177u, + MSI_MONSTER_HP_OFF = 2178u, + MSI_MERGE_ITEM_FAILED_NOT_EXIST = 2179u, + MSI_NOT_EXIST_MERGE_ITEM = 2180u, + MSI_QUESTUI_TAB_PROCESS = 2181u, + MSI_QUESTUI_TAB_HOLD = 2182u, + MSI_QUESTUI_TAB_BEST = 2183u, + MSI_QUESTUI_TAB_EPISODE = 2184u, + MSI_QUESTUI_TAB_LOCAL = 2185u, + MSI_QUESTUI_TAB_EVENT = 2186u, + MSI_QUESTUI_TAB_NEW = 2187u, + MSI_QUESTUI_HUNTMONSTER = 2188u, + MSI_QUESTUI_REWARDITEM = 2189u, + MSI_QUESTUI_NEEDITEM = 2190u, + MSI_QUESTUI_TIMELIMIT = 2191u, + MSI_QUESTUI_CLOSINGTIME = 2192u, + MSI_NAVIGATION_SEARCH = 2193u, + MSI_NAVIGATION_TARGETGO = 2194u, + MSI_NAVIGATION_ROUTEINFO = 2195u, + MSI_NAVIGATION_SEARCHINFO = 2196u, + MSI_NAVIGATION_VIEWCHANGE = 2197u, + MSI_NAVIGATION_LIGHTCHANGE = 2198u, + MSI_NAVIGATION_END = 2199u, + MSI_NAVIGATION_BASE = 2200u, + MSI_NAVIGATION_MINI = 2201u, + MSI_NAVIGATION_HELP = 2202u, + MSI_NAVIGATION_ALL = 2203u, + MSI_NAVIGATION_MAP = 2204u, + MSI_NAVIGATION_NPC = 2205u, + MSI_NAVIGATION_MOB = 2206u, + MSI_NAVIGATION_SETSTRING = 2207u, + MSI_NAVIGATION_SCROLL = 2208u, + MSI_NAVIGATION_USESCROLL = 2209u, + MSI_NAVIGATION_SERVICE = 2210u, + MSI_NAVIGATION_USESERVICE = 2211u, + MSI_NAVIGATION_PLANE = 2212u, + MSI_NAVIGATION_USEPLANE = 2213u, + MSI_NAVIGATION_TARGETUNKNOWN = 2214u, + MSI_NAVIGATION_GOING = 2215u, + MSI_NAVIGATION_SEARCHING = 2216u, + MSI_NAVIGATION_UN = 2217u, + MSI_NAVIGATION_NAVI = 2218u, + MSI_NAVIGATION_SEARCHRESULT_D = 2219u, + MSI_NAVIGATION_NPC_S_S = 2220u, + MSI_NAVIGATION_MOB_S_S = 2221u, + MSI_NAVIGATION_MAP_S = 2222u, + MSI_NAVIGATION_RESULTINFO = 2223u, + MSI_NAVIGATION_LENGTH = 2224u, + MSI_NAVIGATION_TARGETMAP_S_S = 2225u, + MSI_NAVIGATION_TARGET_S_D_D = 2226u, + MSI_NAVIGATION_BOSS = 2227u, + MSI_NAVIGATION_NORMAL = 2228u, + MSI_NAVIGATION_TARGET_S_S = 2229u, + MSI_NAVIGATION_TARGET_D_D = 2230u, + MSI_NAVIGATION_GOINFO = 2231u, + MSI_NAVIGATION_ITEM_S_S = 2232u, + MSI_NAVIGATION_D_S_D_D_D_D = 2233u, + MSI_NAVIGATION_E_D_S_D_D_D_D = 2234u, + MSI_NAVIGATION_E_D_S = 2235u, + MSI_NAVIGATION_GOEXIT = 2236u, + MSI_NAVIGATION_HELPTITLE = 2237u, + MSI_NAVIGATION_HELP1 = 2238u, + MSI_NAVIGATION_HELP2 = 2239u, + MSI_NAVIGATION_HELP3 = 2240u, + MSI_NAVIGATION_HELP4 = 2241u, + MSI_NAVIGATION_HELP5 = 2242u, + MSI_NAVIGATION_HELP6 = 2243u, + MSI_NAVIGATION_HELP7 = 2244u, + MSI_NAVIGATION_HELP8 = 2245u, + MSI_NAVIGATION_HELP9 = 2246u, + MSI_NAVIGATION_HELP10 = 2247u, + MSI_NAVIGATION_HELP11 = 2248u, + MSI_NAVIGATION_HELP12 = 2249u, + MSI_NAVIGATION_HELP13 = 2250u, + MSI_NAVIGATION_HELP14 = 2251u, + MSI_NAVIGATION_HELP15 = 2252u, + MSI_NAVIGATION_HELP16 = 2253u, + MSI_NAVIGATION_HELP17 = 2254u, + MSI_NAVIGATION_HELP18 = 2255u, + MSI_NAVIGATION_HELP19 = 2256u, + MSI_NAVIGATION_HELP20 = 2257u, + MSI_NAVIGATION_LEVEL_D_BOSS = 2258u, + MSI_NAVIGATION_LEVEL_D_NORMAL = 2259u, + MSI_NAVIGATION_PROPERTY1 = 2260u, + MSI_NAVIGATION_PROPERTY2 = 2261u, + MSI_NAVIGATION_PROPERTY3 = 2262u, + MSI_NAVIGATION_PROPERTY4 = 2263u, + MSI_NAVIGATION_PROPERTY5 = 2264u, + MSI_NAVIGATION_PROPERTY6 = 2265u, + MSI_NAVIGATION_PROPERTY7 = 2266u, + MSI_NAVIGATION_PROPERTY8 = 2267u, + MSI_NAVIGATION_PROPERTY9 = 2268u, + MSI_NAVIGATION_PROPERTY0 = 2269u, + MSI_NAVIGATION_SCALE1 = 2270u, + MSI_NAVIGATION_SCALE2 = 2271u, + MSI_NAVIGATION_SCALE0 = 2272u, + MSI_NAVIGATION_RACE1 = 2273u, + MSI_NAVIGATION_RACE2 = 2274u, + MSI_NAVIGATION_RACE3 = 2275u, + MSI_NAVIGATION_RACE4 = 2276u, + MSI_NAVIGATION_RACE5 = 2277u, + MSI_NAVIGATION_RACE6 = 2278u, + MSI_NAVIGATION_RACE7 = 2279u, + MSI_NAVIGATION_RACE8 = 2280u, + MSI_NAVIGATION_RACE9 = 2281u, + MSI_NAVIGATION_RACE0 = 2282u, + MSI_NAVIGATION_MOVECLICK = 2283u, + MSI_NAVIGATION_NPCMOVE = 2284u, + MSI_NAVIGATION_NPCCLICK = 2285u, + MSI_NAVIGATION_S_MOVE = 2286u, + MSI_NAVIGATION_PLANEMOVE = 2287u, + MSI_NAVIGATION_WARPUSE = 2288u, + MSI_NAVIGATION_TARGETPOINT_D_D = 2289u, + MSI_NAVIGATION_UNKNOWNMAP = 2290u, + MSI_NAVIGATION_RS_UNKNOWN = 2291u, + MSI_NAVIGATION_RS_NOTSAMEMAP = 2292u, + MSI_NAVIGATION_RS_FAILSTARTDATA = 2293u, + MSI_NAVIGATION_RS_FAILTARGET = 2294u, + MSI_NAVIGATION_RS_FAILROUTE = 2295u, + MSI_NAVIGATION_RS_FAILPLAYER = 2296u, + MSI_NAVIGATION_RS_NODATA = 2297u, + MSI_NAVIGATION_RS_MAPNOTNAVIGATION = 2298u, + MSI_NAVIGATION_RS_FAILTARGETROUTE = 2299u, + MSI_NAVIGATION_RS_SUCCESS = 2300u, + MSI_NAVIGATION_RS_START = 2301u, + MSI_NAVIGATION_RS_MOBTARGETMAP = 2302u, + MSI_NAVIGATION_RS_TARGETMAP = 2303u, + MSI_NAVIGATION_RS_SCROLL = 2304u, + MSI_NAVIGATION_RS_ROUTE_SUCCESS = 2305u, + MSI_NAVIGATION_RS_MAPTMAP_SUCCESS = 2306u, + MSI_NAVIGATION_RS_NPCTMAP_SUCCESS = 2307u, + MSI_NAVIGATION_RS_MOBTMAP_SUCCESS = 2308u, + MSI_NAVIGATION_RS_POSTMAP_SUCCESS = 2309u, + MSI_NAVIGATION_RS_SAMETARGET = 2310u, + MSI_NAVIGATION_RS_HERE = 2311u, + MSI_NAVIGATION_PRINT_S = 2312u, + MSI_NAVIGATION_PRINT_GO_S = 2313u, + MSI_NAVIGATION_PRINT_MAP_S = 2314u, + MSI_NAVIGATION_PRINT_SELECTMAP_S = 2315u, + MSI_NAVIGATION_PRINT_PLANE = 2316u, + MSI_NAVIGATION_PRINT_WARP = 2317u, + MSI_NAVIGATION_PRINT_ITEM = 2318u, + MSI_NAVIGATION_ZZ = 2319u, + MSI_NAVIGATION_ZZLV = 2320u, + MSI_NAVIGATION_ZZLIMIT = 2321u, + MSI_NAVIGATION_ZZALL = 2322u, + MSI_SHOP_ITEM_BAY_TITLE = 2323u, + MSI_SHOP_ITEM_BAY_MAG1 = 2324u, + MSI_SHOP_ITEM_BAY_MAG2 = 2325u, + MSI_SHOP_ITEM_BAY_MAG3 = 2326u, + MSI_BASIC_EXP_MSG2 = 2327u, + MSI_CARDWIN = 2328u, + MSI_PERSONAL_INFORMATION_MSG_CHN = 2329u, + MSI_PERSONAL_INFORMATION_MSG_CHN_DEATH = 2330u, + MSI_CAUTION_PKZONE = 2331u, + MSI_FATIGUE = 2332u, + MSI_FATIGUE_LEVEL_ZERO = 2333u, + MSI_FATIGUE_LEVEL_HALF = 2334u, + MSI_FATIGUE_LEVEL_FULL = 2335u, + MSI_FATIGUE_MESSAGE0 = 2336u, + MSI_FATIGUE_MESSAGE1 = 2337u, + MSI_FATIGUE_MESSAGE2 = 2338u, + MSI_EXPLAIN_MONSTERHP = 2339u, + MSI_SKILLPOINT2 = 2340u, + MSI_BAN_BILLING_SERVER_ERROR = 2341u, + MSI_REFUSE_CHANGE_PASSWD_FORCE = 2342u, + MSI_REFUSE_CHANGE_PASSWD_SITE = 2343u, + MSI_PLANNED_TIME_SHUTDOWN = 2344u, + MSI_SHOUTDOWN_TIME = 2345u, + MSI_PARTIAL_SHOUTDOWN_TIME = 2346u, + MSI_MENU_REPLAYWND = 2347u, + MSI_MENU_MACROWND = 2348u, + MSI_MENU_WEBBROWSERWND = 2349u, + MSI_MENU_NAVIGATIONWND = 2350u, + MSI_MENU_UAEURLWND = 2351u, + MSI_CLAN_INFOMANAGE = 2352u, + MSI_CLAN_LEVEL = 2353u, + MSI_CLAN_NAME = 2354u, + MSI_CLAN_MARK = 2355u, + MSI_ALLY_CLAN = 2356u, + MSI_HOSTILITY_CLAN = 2357u, + MSI_SEND_TO_CLAN = 2358u, + MSI_CLAN_MASTER_NAME = 2359u, + MSI_CLAN_NUM_MEMBER = 2360u, + MSI_CLAN_MANAGE_LAND = 2361u, + MSI_VIEW_CLAN_MSG = 2362u, + MSI_TWWEB_WARRING = 2363u, + MSI_TWWEB_URL = 2364u, + MSI_STR_MAKECHARACTER = 2365u, + MSI_CHR_DELETE_RESERVED_FAIL_CHARNAME = 2366u, + MSI_CHR_DELETE_RESERVED_INPUTCONFIRMSTR_WND_TITLE = 2367u, + MSI_SELECT_SEX = 2368u, + MSI_SPRITE_ALTER = 2369u, + MSI_CONFIRM_TO_OPEN_EVENT_ITEM = 2370u, + MSI_GAME_SETTING = 2371u, + MSI_SYSTEM_SETTING = 2372u, + MSI_COMMAND_SETTING = 2373u, + MSI_COMMAND_LIST = 2374u, + MSI_MACRO_LIST = 2375u, + MSI_EXCHANGEITEM_DENY_MAP = 2376u, + MSI_CART_USE_DENY_MAP = 2377u, + MSI_BLOCK_SUNMOONSTAR_MIRACLE = 2378u, + MSI_RANKING_BOARD = 2379u, + MSI_RANKING_NUMBER = 2380u, + MSI_RANKING_NAME = 2381u, + MSI_RANKING_POINT = 2382u, + MSI_RANKING_BLACKSMITH = 2383u, + MSI_RANKING_ALCHEMIST = 2384u, + MSI_RANKING_TAEKWON = 2385u, + MSI_RANKING_KILLER = 2386u, + MSI_RANKING_BATTLE_7VS7_ALL = 2387u, + MSI_RANKING_RUNE_KNIGHT = 2388u, + MSI_RANKING_WARLOCK = 2389u, + MSI_RANKING_RANGER = 2390u, + MSI_RANKING_MECHANIC = 2391u, + MSI_RANKING_GUILLOTINE_CROSS = 2392u, + MSI_RANKING_ARCHBISHOP = 2393u, + MSI_RANKING_ROYAL_GUARD = 2394u, + MSI_RANKING_SORCERER = 2395u, + MSI_RANKING_MINSTREL = 2396u, + MSI_RANKING_WANDERER = 2397u, + MSI_RANKING_GENETIC = 2398u, + MSI_RANKING_SHADOW_CHASER = 2399u, + MSI_RANKING_SURA = 2400u, + MSI_RANKING_KAGEROU = 2401u, + MSI_RANKING_OBORO = 2402u, + MSI_RANKING_SELECT = 2403u, + MSI_RANKING_TYPE = 2404u, + MSI_WAITING_FOR_ENTER_TO_CHARACTER_SEVER_IN_SEC = 2405u, + MSI_WAITING_FOR_ENTER_TO_CHARACTER_SEVER_IN_MIN = 2406u, + MSI_CBT_ACTIVE_USER_CHECK = 2407u, + MSI_NAVIGATION_HELP_1 = 2408u, + MSI_NAVIGATION_HELP_2 = 2409u, + MSI_NAVIGATION_HELP_3 = 2410u, + MSI_NAVIGATION_HELP_4 = 2411u, + MSI_NAVIGATION_HELP_5 = 2412u, + MSI_NAVIGATION_HELP_6 = 2413u, + MSI_NAVIGATION_HELP_7 = 2414u, + MSI_RANKING_BATTLE_1VS1_ALL = 2415u, + MSI_SHADOW_EQUIPMENT = 2416u, + MSI_CHARACTERERROR_JOB = 2417u, + MSI_NAVIGATION_ALL_S = 2418u, + MSI_NAVIGATION_ALL_SD = 2419u, + MSI_REFUSE_OVER_USERLIMIT = 2420u, + MSI_REFUSE_ERRORCODE = 2421u, + MSI_REFUSE_DISCONNECT_KEEP_TIME = 2422u, + MSI_REFUSE_WEB_AUTH_FAILED = 2423u, + MSI_GUILDNAME_CHECK = 2424u, + MSI_BILLING_CHN_1 = 2425u, + MSI_BILLING_CHN_2 = 2426u, + MSI_BILLING_CHN_3 = 2427u, + MSI_BILLING_CHN_4 = 2428u, + MSI_BILLING_CHN_5 = 2429u, + MSI_BILLING_CHN_6 = 2430u, + MSI_BILLING_CHN_7 = 2431u, + MSI_BILLING_CHN_8 = 2432u, + MSI_BASIC_EXP_MSG_THAI = 2433u, + MSI_CHN_BILLING_EXPIRE_TIME = 2434u, + MSI_CHN_BLOCK_FOREVER = 2435u, + MSI_CHN_BLOCK = 2436u, + MSI_WORLDMAP_MSG1 = 2437u, + MSI_WORLDMAP_MSG2 = 2438u, + MSI_WORLDMAP_MSG3 = 2439u, + MSI_WORLDMAP_MSG4 = 2440u, + MSI_WORLDMAP_MSG5 = 2441u, + MSI_WORLDMAP_MSG6 = 2442u, + MSI_WORLDMAP_MSG7 = 2443u, + MSI_NAVIGATION_MOB_S_S_S = 2444u, + MSI_NAVIGATION_NUM = 2445u, + MSI_NAVIGATION_NUM1 = 2446u, + MSI_NAVIGATION_NUM2 = 2447u, + MSI_NAVIGATION_NUM3 = 2448u, + MSI_NAVIGATION_NUM4 = 2449u, + MSI_NAVIGATION_NUM5 = 2450u, + MSI_BANK_SYSTEM_ERROR = 2451u, + MSI_BANK_WITHDRAW_NO_MONEY = 2452u, + MSI_BANK_DEPOSIT_NO_MONEY = 2453u, + MSI_BANK_DEPOSIT_ZERO = 2454u, + MSI_BANK_WITHDRAW_ZERO = 2455u, + MSI_BANK_OVER_INT_MAX = 2456u, + MSI_REFUSE_MOTP_LOCK = 2457u, + MSI_REFUSE_MOTP_AUTH_FAIL = 2458u, + MSI_JOBPLUSEXP_VALUE = 2459u, + MSI_BANK_MY_ZENY = 2460u, + MSI_BANK_ZENY = 2461u, + MSI_BANK_WARNING = 2462u, + MSI_NEED_MORE_BULLET = 2463u, + MSI_OVERPRICE_MAX = 2464u, + MSI_NOT_VALID_AUTH_TICKET = 2465u, + MSI_STEAMAGENCY_ERROR = 2466u, + MSI_BASIC_EXP_MSG_INDONESIA = 2467u, + MSI_RECEIVEITEM_VALUE = 2468u, + MSI_RECEIVEITEM_VALUE_1 = 2469u, + MSI_WARNING_PRICE1 = 2470u, + MSI_WARNING_PRICE2 = 2471u, + MSI_WARNING_PRICE3 = 2472u, + MSI_WARNING_PRICE4 = 2473u, + MSI_WARNING_PRICE5 = 2474u, + MSI_WARNING_PRICE6 = 2475u, + MSI_WARNING_PRICE7 = 2476u, + MSI_AMERICA_CASHSHOP_URL = 2477u, + MSI_AMERICA_CASHSHOP_URL_STEAM = 2478u, + MSI_QUEST_INFO_01 = 2479u, + MSI_QUEST_INFO_02 = 2480u, + MSI_QUEST_INFO_03 = 2481u, + MSI_QUEST_INFO_04 = 2482u, + MSI_QUEST_INFO_05 = 2483u, + MSI_QUEST_INFO_06 = 2484u, + MSI_BANK_CHECK_NUM = 2485u, + MSI_BANK_PROHIBIT = 2486u, + MSI_QUEST_INFO_00 = 2487u, + MSI_ITEM_COMPARISON = 2488u, + MSI_WRONG_GUN = 2489u, + MSI_WRONG_BULLET = 2490u, + MSI_BUYINGSTORE_MAKEWND_ADD_GOODS = 2491u, + MSI_ITEM_IN_MAIL_SYSTEM = 2492u, + MSI_GUILD_STORAGE_OPEN_ERROR = 2493u, + MSI_GUILD_STORAGE_OPEN_NO_JOIN_GUILD = 2494u, + MSI_GUILD_STORAGE_WARNING_USING_ANOTHER_MEMBER = 2495u, + MSI_GUILD_STORAGE_PERMISSON = 2496u, + MSI_GUILD_STORAGE_TITLE = 2497u, + MSI_GUILD_STORAGE_PERMISSON_WARNING_MSG = 2498u, + MSI_BARGAINSALE_TOOLWND_TITLE = 2499u, + MSI_BARGAINSALE_TOOLWND_DB_NAME = 2500u, + MSI_BARGAINSALE_TOOLWND_DB_NUMBER = 2501u, + MSI_BARGAINSALE_TOOLWND_SELL_COUNT = 2502u, + MSI_BARGAINSALE_TOOLWND_SELL_STARTTIME = 2503u, + MSI_BARGAINSALE_TOOLWND_SELL_PERIODTIME = 2504u, + MSI_BARGAINSALE_TOOLWND_INPUT_COUNT_MSG = 2505u, + MSI_BARGAINSALE_TOOLWND_INPUT_STARTTIME_MSG = 2506u, + MSI_BARGAINSALE_TOOLWND_WRONG_RANGE_MSG = 2507u, + MSI_BARGAINSALE_TOOLWND_INPUT_PERIODTIME_MSG = 2508u, + MSI_BARGAINSALE_TOOLWND_INPUT_ITEMDBNAME_MSG = 2509u, + MSI_BARGAINSALE_TOOLWND_ITEMID_CHECK_FAILED_MSG = 2510u, + MSI_BARGAINSALE_TOOLWND_RESULT_FORMAT = 2511u, + MSI_BARGAINSALE_TOOLWND_APPLY_SUCCESS_MSG = 2512u, + MSI_BARGAINSALE_TOOLWND_APPLY_FAILED_MSG = 2513u, + MSI_BARGAINSALE_TOOLWND_ALREADY_REGISTERED_MSG = 2514u, + MSI_BARGAINSALE_TOOLWND_DELETE_FAILED_MSG = 2515u, + MSI_BARGAINSALE_TOOLWND_DELETE_SUCCESS_MSG = 2516u, + MSI_BARGAINSALE_CASHSHOP_TAB_NAME = 2517u, + MSI_BARGAINSALE_CASHSHOP_REFRESH_BTN_TOOLTIP = 2518u, + MSI_BARGAINSALE_CASHSHOP_TIMER = 2519u, + MSI_BARGAINSALE_CASHSHOP_REFRESH_MSG = 2520u, + MSI_BARGAINSALE_CASHSHOP_CHECK_COUNT_MSG = 2521u, + MSI_BARGAINSALE_START_MSG = 2522u, + MSI_BARGAINSALE_CLOSE_MSG = 2523u, + MSI_BARGAINSALE_TOOLWND_CALL = 2524u, + MSI_FRANCE_CASHSHOP_URL = 2525u, + MSI_FRANCE_CASHSHOP_URL_STEAM = 2526u, + MSI_PARA_RESULT_TITLE = 2527u, + MSI_PARA_WRONG_PURCHASE_COUNT_MSG = 2528u, + MSI_PARTY_INVITE = 2529u, + MSI_GUILD_INVITE = 2530u, + MSI_PARA_PURCHASE_ITEM_FAIL = 2531u, + MSI_NOWARPSKILL2 = 2532u, + MSI_PARA_PURCHASE_ITEM_WEIGHT = 2533u, + MSI_GUILD_STORAGE_NUMBER = 2534u, + MSI_GUILD_STORAGE_ITEM = 2535u, + MSI_GUILD_STORAGE_ITEM_COUNT = 2536u, + MSI_GUILD_STORAGE_USER_NAME = 2537u, + MSI_GUILD_STORAGE_LOG_TIME = 2538u, + MSI_GUILD_STORAGE_ITEM_IN_OUT = 2539u, + MSI_GUILD_STORAGE_LOG_FINISH = 2540u, + MSI_GUILD_STORAGE_LOG_ALL = 2541u, + MSI_GUILD_STORAGE_LOG_IN = 2542u, + MSI_GUILD_STORAGE_LOG_OUT = 2543u, + MSI_GUILD_STORAGE_LOG_WND_NAME = 2544u, + MSI_GUILD_STORAGE_LOG_CAUTION = 2545u, + MSI_GUILD_STORAGE_CLOSE_TIMEOUT = 2546u, + MSI_INCORRECT_GAMESAMBEID = 2547u, + MSI_EA5 = 2548u, + MSI_USESKILL_FAIL_COINTS = 2549u, + MSI_USESKILL_FAIL_COINTS_NUM = 2550u, + MSI_FAIL_NEED_EQUIPPED_GUN_GATLING = 2551u, + MSI_FAIL_NEED_EQUIPPED_GUN_SHOTGUN = 2552u, + MSI_FAIL_NEED_EQUIPPED_GUN_RIFLE = 2553u, + MSI_FAIL_NEED_EQUIPPED_GUN_HANDGUN = 2554u, + MSI_FAIL_NEED_EQUIPPED_PROPERTY_SAINT_BULLET = 2555u, + MSI_MERCHANT_SOLD_ITEM_LOG = 2556u, + MSI_MERCHANT_ITEM_BUY_LOG = 2557u, + MSI_FAIL_NEED_EQUIPPED_GUN_GRANADE = 2558u, + MSI_FAIL_DUPLICATE_HEAT_BARREL_GS_MADNESSCANCEL_P_ALTER = 2559u, + MSI_USESKILL_FAIL_MAP = 2560u, + MSI_GUILD_STORAGE_WARNING = 2561u, + MSI_AMERICA_CASHSHOP_URL_GAMESAMBA = 2562u, + MSI_SECOND_PASSWORD_INFO_4 = 2563u, + MSI_PET_EVOLUTION = 2564u, + MSI_PET_EVOLUTION_WITH_PET_NAME = 2565u, + MSI_PET_EVOLUTION_NEED_ITEM = 2566u, + MSI_DO_YOU_WANT_TO_EVOLVE_PET = 2567u, + MSI_PET_EVOLUTION_FAIL_UNKNOWN = 2568u, + MSI_PET_EVOLUTION_FAIL_NOTEXIST_CALLPET = 2569u, + MSI_PET_EVOLUTION_FAIL_NOT_PETEGG = 2570u, + MSI_PET_EVOLUTION_FAIL_RECIPE = 2571u, + MSI_PET_EVOLUTION_FAIL_MATERIAL = 2572u, + MSI_PET_EVOLUTION_FAIL_RG_FAMILIAR = 2573u, + MSI_PET_AUTO_FEEDING = 2574u, + MSI_PET_AUTO_FEEDING_REST = 2575u, + MSI_PET_AUTO_FEEDING_ON = 2576u, + MSI_PET_AUTO_FEEDING_OFF = 2577u, + MSI_REFRESH = 2578u, + MSI_TIME_LINE_MINUTE = 2579u, + MSI_TIME_LINE_HOUR = 2580u, + MSI_TIME_LINE_DAY = 2581u, + MSI_BASIC_EXP_MSG_PH = 2582u, + MSI_SEND_MAIL = 2583u, + MSI_MAIL_SENT = 2584u, + MSI_GET_ITEMS_FROM_MAIL_SUCCEED = 2585u, + MSI_GET_ITEMS_FROM_MAIL_FAILED = 2586u, + MSI_GET_ITEMS_FROM_MAIL_OVERWEIGHT = 2587u, + MSI_GET_ZENY_FROM_MAIL_SUCCEED = 2588u, + MSI_GET_ZENY_FROM_MAIL_FAILED = 2589u, + MSI_GET_ZENY_FROM_MAIL_OVERAMOUNT = 2590u, + MSI_SET_ITEMS_TO_MAIL_SUCCEED = 2591u, + MSI_INVALID_MAIL_RECIEVER_INFO = 2592u, + MSI_INVALID_MAIL_TITLE_INFO = 2593u, + MSI_FAILED_SEND_MAIL = 2594u, + MSI_FAILED_SEND_MAIL_ITEM = 2595u, + MSI_FAIELD_SEND_MAIL_TO = 2596u, + MSI_EA6 = 2597u, + MSI_PARTY_BOOKING_ERR5R2 = 2598u, + MSI_ITEM_WND_OVERFULL = 2599u, + MSI_FAILED_MAIL_LIMIT_CNT = 2600u, + MSI_FAILED_TO_WRITE_MAIL = 2601u, + MSI_JOINED_IN_CLAN = 2602u, + MSI_GOLDPCCAFE_MILEAGE = 2603u, + MSI_PET_EVOLUTION_FAIL_PET_ACC_OFF = 2604u, + MSI_TIME_LINE_MINUTE2 = 2605u, + MSI_TIME_LINE_HOUR2 = 2606u, + MSI_TIME_LINE_DAY2 = 2607u, + MSI_INVALID_CCODE_INFO = 2608u, + MSI_FAILED_DELETE_MAIL = 2609u, + MSI_FAILED_SEND_MAIL_ZENY = 2610u, + MSI_SEND_MAIL_COMMISSION = 2611u, + MSI_FAILE_MAIL_RECIEVER_INFO = 2612u, + MSI_TAIWAN_PERSONALINFO_EXPMSG = 2613u, + MSI_TAIWAN_PERSONALINFO_DROPMSG = 2614u, + MSI_TAIWAN_PERSONALINFO_DEATHMSG = 2615u, + MSI_MILEAGE_HELP = 2616u, + MSI_RESTRAINT_OF_TRADE_1 = 2617u, + MSI_RESTRAINT_OF_TRADE_2 = 2618u, + MSI_RESTRAINT_OF_TRADE_3 = 2619u, + MSI_RESTRAINT_OF_TRADE_4 = 2620u, + MSI_RESTRAINT_OF_TRADE_5 = 2621u, + MSI_RESTRAINT_OF_TRADE_6 = 2622u, + MSI_USESKILL_FAIL_SUMMON_SP_INSUFFICIENT = 2623u, + MSI_SEND_MAIL_WEIGHT = 2624u, + MSI_INVALID_MAIL_CONTENTS_INFO = 2625u, + MSI_SET_ITEMS_TO_MAIL_FAILED = 2626u, + MSI_SET_ITEMS_TO_MAIL_OVER_WEIGHT = 2627u, + MSI_DYNAMICNPC_FAIL_DUPLICATENAME = 2628u, + MSI_FAILED_OPEN_ROULLETTE = 2629u, + MSI_FAILED_CLOSE_ROULLETTE = 2630u, + MSI_FAILED_GENERATE_ROULLETTE = 2631u, + MSI_NOT_ENOUGH_ROULLETTE_POINT = 2632u, + MSI_FAILED_RECV_ITEM = 2633u, + MSI_FAILED_RECV_ITEM_OVERCOUNT = 2634u, + MSI_FAILED_RECV_ITEM_OVERWEIGHT = 2635u, + MSI_MERCHANTSHOP_MAKING_FAIL = 2636u, + MSI_FAILED_CLOSE_ROULLETTEWND = 2637u, + MSI_ROULLETTE_WND = 2638u, + MSI_SOUNDEFFECT_ITEMSELLWND = 2639u, + MSI_FAILED_SEND_MAIL_ITEMS = 2640u, + MSI_CHECK_USER_NAME = 2641u, + MSI_DELETE_DUE_DATE = 2642u, + MSI_ACHIEVEMENT_SYSTEM = 2643u, + MSI_ACHIEVEMENT_TOTAL_SCORE = 2644u, + MSI_ACHIEVEMENT_GRADE = 2645u, + MSI_ACHIEVEMENT_SCORE_REQUIRED_TO_REWARD = 2646u, + MSI_ACHIEVEMENT_SUMMARY_TITLE = 2647u, + MSI_ACHIEVEMENT_RECENT_ACHIEVEMENT = 2648u, + MSI_CASH_GEDARE1 = 2649u, + MSI_CASH_GEDARE2 = 2650u, + MSI_CASH_GEDARE_FAIL_MONEY = 2651u, + MSI_CASH_GEDARE_MONEY = 2652u, + MSI_ACHIEVEMENT_TAB_SUMMARY = 2653u, + MSI_ACHIEVEMENT_TAB_GENERAL = 2654u, + MSI_ACHIEVEMENT_TAB_GENERAL_CHARACTER = 2655u, + MSI_ACHIEVEMENT_TAB_GENERAL_ACTION = 2656u, + MSI_ACHIEVEMENT_TAB_GENERAL_REST = 2657u, + MSI_ACHIEVEMENT_TAB_ADVENTURE = 2658u, + MSI_ACHIEVEMENT_TAB_ADVENTURE_RUNEMIDGARTS = 2659u, + MSI_ACHIEVEMENT_TAB_ADVENTURE_SCHWARZWALD = 2660u, + MSI_ACHIEVEMENT_TAB_ADVENTURE_ARUNAFELTZ = 2661u, + MSI_ACHIEVEMENT_TAB_ADVENTURE_ANOTHERWORLD = 2662u, + MSI_ACHIEVEMENT_TAB_ADVENTURE_LOCALIZING = 2663u, + MSI_ACHIEVEMENT_TAB_ADVENTURE_DUNGEON = 2664u, + MSI_ACHIEVEMENT_TAB_BATTLE = 2665u, + MSI_ACHIEVEMENT_TAB_BATTLE_PVP = 2666u, + MSI_ACHIEVEMENT_TAB_BATTLE_TRAINING = 2667u, + MSI_ACHIEVEMENT_TAB_QUEST = 2668u, + MSI_ACHIEVEMENT_TAB_QUEST_EPISODE = 2669u, + MSI_ACHIEVEMENT_TAB_QUEST_GENERAL = 2670u, + MSI_ACHIEVEMENT_TAB_MEMORIAL = 2671u, + MSI_ACHIEVEMENT_TAB_MEMORIAL_MIDGARD = 2672u, + MSI_ACHIEVEMENT_TAB_MEMORIAL_ANOTHERWORLD = 2673u, + MSI_ACHIEVEMENT_TAB_MEMORIAL_REST = 2674u, + MSI_ACHIEVEMENT_TAB_ACHIEVEMENT = 2675u, + MSI_ACHIEVEMENT_TAB_TOTAL = 2676u, + MSI_FAIL_ADD_ACHIEVEMENT_TRACING = 2677u, + MSI_NOTICE_COMPLETE_ACHIEVEMENT = 2678u, + MSI_OTPUSER_ONLY = 2679u, + MSI_GET_ROULLETE_PRIZE = 2680u, + MSI_NOTICE_NEXT_ROULLETE_STAGE = 2681u, + MSI_TITLE_EQUIPMENT = 2682u, + MSI_TAKEOFF_TITLE = 2683u, + MSI_GUILD_MAKE_GUILD_NOT_PERMITTED_MAP = 2684u, + MSI_GUILD_DISORGANIZE_GUILD_NOT_PERMITTED_MAP = 2685u, + MSI_GUILD_JOIN_GUILD_NOT_PERMITTED_MAP = 2686u, + MSI_GUILD_LEAVE_GUILD_NOT_PERMITTED_MAP = 2687u, + MSI_GUILD_EXPEL_GUILD_NOT_PERMITTED_MAP = 2688u, + MSI_GUILD_POSITION_CHANGE_NOT_PERMITTED_MAP = 2689u, + MSI_NOT_ENOUGH_SPACE_IN_ITEM_BODY = 2690u, + MSI_JPN_PERSONALINFO_EXPMSG = 2691u, + MSI_JPN_PERSONALINFO_DROPMSG = 2692u, + MSI_JPN_PERSONALINFO_DEATHMSG = 2693u, + MSI_SET_ITEMS_TO_MAIL_OVERCOUNT = 2694u, + MSI_SOUNDEFFECT_ITEMBUYWND = 2695u, + MSI_SET_UNMOVEABLE_ITEM = 2696u, + MSI_RESULT_ALREADY_LOSING_IDX = 2697u, + MSI_RODEX_FOWARD = 2698u, + MSI_RODEX_READ = 2699u, + MSI_RODEX_DELETE = 2700u, + MSI_TAIWAN_CASH_MSG_1 = 2701u, + MSI_TAIWAN_CASH_MSG_2 = 2702u, + MSI_TAIWAN_CASH_MSG_3 = 2703u, + MSI_TAIWAN_CASH_MSG_4 = 2704u, + MSI_TAIWAN_CASH_MSG_5 = 2705u, + MSI_TAIWAN_CASH_MSG_6 = 2706u, + MSI_TAIWAN_CASH_MSG_7 = 2707u, + MSI_TAIWAN_CASH_MSG_8 = 2708u, + MSI_TAIWAN_CASH_MSG_9 = 2709u, + MSI_TAIWAN_CASH_MSG_10 = 2710u, + MSI_TAIWAN_CASH_MSG_11 = 2711u, + MSI_TAIWAN_CASH_ITEM_BAY_MAG2 = 2712u, + MSI_TAIWAN_CASH_WARNING_PRICE6 = 2713u, + MSI_TAIWAN_CASH_WARNING_PRICE7 = 2714u, + MSI_TAIWAN_CASH_OVERPRICE_MAX = 2715u, + MSI_TAIWAN_CASH_OVERPRICE9999 = 2716u, + MSI_TAIWAN_CASH_YOU_HAVE_FREE_ITEM_ON_SHOP = 2717u, + MSI_TAIWAN_CASH_MCSTORE_FAIL_SELLER_MONEY_GIVE = 2718u, + MSI_TAIWAN_CASH_BUYINGSTORE_MAKEWND_REINPUTPRICE = 2719u, + MSI_TAIWAN_CASH_BUYINGSTORE_MAKEWND_ITEMLIST = 2720u, + MSI_TAIWAN_CASH_BUYINGSTORE_MYSHOPWND_LIMITZENY = 2721u, + MSI_TAIWAN_CASH_BUYINGSTORE_MYSHOPWND_ITEMINFO = 2722u, + MSI_TAIWAN_CASH_BUYINGSTORE_TRADE_SELLCOMPLETE = 2723u, + MSI_RODEX_WND = 2724u, + MSI_RODEX_SEND_WND = 2725u, + MSI_RODEX_RECEIVE_WND = 2726u, + MSI_RODEX_CHOOSEWND_FAILED = 2727u, + MSI_ACCESS_DENIED_BY_AUTHSERVER_CONNECTION = 2728u, + MSI_ACCESS_DENIED_BY_BILLSERVER_CONNECTION = 2729u, + MSI_UNEQUIP_ARROW2 = 2730u, + MSI_FAILED_MAIL_CAUSE_TO_USE_ITEM = 2731u, + MSI_FAILIED_ONECLICK_ITEMIDENTIFY_NO_MAGNIFIER = 2732u, + MSI_FAILED_UNLOCK_ITEM_DROP_IN_COMPOSE_WND = 2733u, + MSI_FAILED_FRIEND_ADD__ALREADY_REQUEST = 2734u, + MSI_UISCRIPT_ERROR_GUIDE = 2735u, + MSI_UISCRIPT_ERROR_GUIDE_MSG = 2736u, + MSI_TAIWAN_CASH_BUY_RECONFIRM = 2737u, + MSI_MINIMAP_MSG_01 = 2738u, + MSI_MINIMAP_MSG_02 = 2739u, + MSI_MINIMAP_MSG_03 = 2740u, + MSI_MINIMAP_MSG_04 = 2741u, + MSI_MINIMAP_MSG_05 = 2742u, + MSI_MINIMAP_MSG_06 = 2743u, + MSI_MINIMAP_MSG_07 = 2744u, + MSI_MINIMAP_MSG_08 = 2745u, + MSI_MINIMAP_MSG_09 = 2746u, + MSI_MINIMAP_MSG_10 = 2747u, + MSI_MINIMAP_MSG_11 = 2748u, + MSI_MINIMAP_MSG_12 = 2749u, + MSI_MINIMAP_MSG_13 = 2750u, + MSI_MINIMAP_MSG_14 = 2751u, + MSI_MINIMAP_MSG_15 = 2752u, + MSI_EA7 = 2753u, + MSI_EA8 = 2754u, + MSI_EA9 = 2755u, + MSI_EA10 = 2756u, + MSI_EA11 = 2757u, + MSI_EA12 = 2758u, + MSI_TAIWAN_CASH_LEMITEMIN = 2759u, + MSI_DRESSROOM_HEARCOLOR = 2760u, + MSI_DRESSROOM_HEARSTYLE = 2761u, + MSI_DRESSROOM_BODYCOLOR = 2762u, + MSI_DRESSROOM_BODYSTYLE = 2763u, + MSI_MINIMAP_MSG_16 = 2764u, + MSI_BANK_MAX_MONEY = 2765u, + MSI_BANK_MIN_MONEY = 2766u, + MSI_BANK_0_MONEY = 2767u, + MSI_BANK_1 = 2768u, + MSI_BANK_2 = 2769u, + MSI_BANK_3 = 2770u, + MSI_BANK_4 = 2771u, + MSI_BANK_5 = 2772u, + MSI_BANK_6 = 2773u, + MSI_BANK_7 = 2774u, + MSI_BANK_MAX = 2775u, + MSI_BANK_NOMSG = 2776u, + MSI_BANK_0_MINI = 2777u, + MSI_BANK_1_MINI = 2778u, + MSI_BANK_2_MINI = 2779u, + MSI_BANK_3_MINI = 2780u, + MSI_BANK_4_MINI = 2781u, + MSI_BANK_5_MINI = 2782u, + MSI_BANK_6_MINI = 2783u, + MSI_BANK_7_MINI = 2784u, + MSI_ITEMMOVEINFO_DROP = 2785u, + MSI_ITEMMOVEINFO_STORE = 2786u, + MSI_ITEMMOVEINFO_CART = 2787u, + MSI_ITEMMOVEINFO_MAIL = 2788u, + MSI_ITEMMOVEINFO_EXCHANGEWND = 2789u, + MSI_ITEMMOVEINFO_AUCTION = 2790u, + MSI_ITEMMOVEINFO_STOREOFGUILD = 2791u, + MSI_ITEMMOVEINFO_TONPC = 2792u, + MSI_ITEMMOVEINFO_BTN = 2793u, + MSI_CREATE_CHARACTER = 2794u, + MSI_UNEQUIP_ARROW3 = 2795u, + MSI_REFUSE_MDENGEON_IS_FULL = 2796u, + MSI_ERROR_MDENGEON_IS_FULL = 2797u, + MSI_INFORMATION_USA = 2798u, + MSI_INFORMATION_USA_DEATH = 2799u, + MSI_PERVENT_DUPLICATEUSE_ITEM = 2800u, + MSI_PERVENT_DUPLICATEUSE_EFSTITEM = 2801u, + MSI_QUAKE_EFFECT_ON = 2802u, + MSI_QUAKE_EFFECT_OFF = 2803u, + MSI_GAMEHACK_DETECT2 = 2804u, + MSI_SEND_RODEX = 2805u, + MSI_USA_PERSONALINFO_EXP = 2806u, + MSI_USA_PERSONALINFO_DROP = 2807u, + MSI_USA_PERSONALINFO_DEATH = 2808u, + MSI_NOT_USING_TAG_TO_NAME = 2809u, + MSI_STYLING_SHOP = 2810u, + MSI_STYLING_SHOP_NEED_COUPON = 2811u, + MSI_STYLING_SHOP_OPEN_COUPON = 2812u, + MSI_STYLING_SHOP_DELETE_CHAR = 2813u, + MSI_STYLING_SHOP_FAIL_TO_ADD_CHAR_TO_LIKE = 2814u, + MSI_STYLING_SHOP_ADJUST_NEW_CHAR_STYLE = 2815u, + MSI_STYLING_SHOP_REGISTER_BOOKMARK = 2816u, + MSI_STYLING_SHOP_SUGGEST_TO_GO_TO_BANK = 2817u, + MSI_ASK_MOVE_BY_PRIVATE_AIRPLANE = 2818u, + MSI_PRIVATE_AIRPLANE_FAIL_LOCALIZING = 2819u, + MSI_PRIVATE_AIRPLANE_FAIL_OTHERWORLD = 2820u, + MSI_PRIVATE_AIRPLANE = 2821u, + MSI_PRIVATE_AIRPLANE_FAIL_UNKNOWN = 2822u, + MSI_PRIVATE_AIRPLANE_FAIL_PAYMENT_ZENY = 2823u, + MSI_PRIVATE_AIRPLANE_FAIL_PAYMENT_ITEM = 2824u, + MSI_PRIVATE_AIRPLANE_FAIL_LEVEL = 2825u, + MSI_PRIVATE_AIRPLANE_FAIL_MAP = 2826u, + MSI_RESULT_FAIL_USING_MAP = 2827u, + MSI_STYLING_SHOP_ACCESSORYWND = 2828u, + MSI_STYLING_SHOP_2NDCOSTUMEWND = 2829u, + MSI_STYLING_SHOP_LIKELISTWND = 2830u, + MSI_STYLING_SHOP_IS_NOT_COLORING_HEAD = 2831u, + MSI_STYLING_SHOP_OPENING_COMMENT = 2832u, + MSI_STYLING_SHOP_SUCCESS = 2833u, + MSI_STYLING_SHOP_BASICSTYLE = 2834u, + MSI_UPGRADESKILLERROR_MORE_BASE_LEVEL = 2835u, + MSI_NOT_USING_SPECIALLETTERS_ON_PARTYNAME = 2836u, + MSI_SKILL_FAIL_MHP_TOO_FEW = 2837u, + MSI_SKILL_FAIL_MSP_TOO_FEW = 2838u, + MSI_INVENTORY_ITEM_COMPARE = 2839u, + MSI_INVENTORY_ITEM_DROP_LOCK = 2840u, + MSI_NOT_ADDING_SCREENSHOT = 2841u, + MSI_CONNECT_SNS_WND = 2842u, + MSI_RODEX_GENERAL = 2843u, + MSI_RODEX_NOTICE = 2844u, + MSI_RODEX_RETURN = 2845u, + MSI_RODEX_REFRESH = 2846u, + MSI_RODEX_DELETE_TIME_MINUTE = 2847u, + MSI_RODEX_DELETE_TIME_HOUR = 2848u, + MSI_RODEX_DELETE_TIME_DAY = 2849u, + MSI_RODEX_RETURNED = 2850u, + MSI_RODEX_DELETE_SELECT_MAIL = 2851u, + MSI_MINIMAP_TIP_POS_ON = 2852u, + MSI_MINIMAP_TIP_ZOOM_IN = 2853u, + MSI_MINIMAP_TIP_ZOOM_OUT = 2854u, + MSI_MINIMAP_TIP_MAP_VIEW = 2855u, + MSI_MINIMAP_TIP_WORLD_VIEW = 2856u, + MSI_INVENTORY_NUMBER_OF_ITEM = 2857u, + MSI_MINIMAP_BUTTON_ONOFF = 2858u, + MSI_MINIMAP_BUTTON_ON = 2859u, + MSI_MINIMAP_BUTTON_OFF = 2860u, + MSI_GUILD_MEMBERLIST_SORT = 2861u, + MSI_WRITE_PET_RELATION_SHIP = 2862u, + MSI_PET_RELATION_SHIP_UNKNOWN = 2863u, + MSI_PARTYNAME = 2864u, + MSI_PARTYMASTER = 2865u, + MSI_MACRO_DETECTOR_TIME_OVER = 2866u, + MSI_MACRO_DETECTOR_WRONG_ANSWER = 2867u, + MSI_MACRO_DETECTOR_CORRECT_ANSWER = 2868u, + MSI_MACRO_INPUT_ANSWER = 2869u, + MSI_MACRO_CHECK_ANSWER = 2870u, + MSI_MACRO_SELECT_CAPTCHA = 2871u, + MSI_MACRO_DETECTOR_WRONG_ANSWER_REMAIN_CNT = 2872u, + MSI_MACRO_REPORTER = 2873u, + MSI_MACRO_SEND_MACRO = 2874u, + MSI_MACRO_REGISTER_DATA = 2875u, + MSI_MACRO_ALREADY_DETECTING = 2876u, + MSI_MACRO_COMPLETE_REGISTER_CAPTCHA = 2877u, + MSI_MACRO_FAILED_REGISTER_CAPTCHA = 2878u, + MSI_MACRO_FAILED_REGISTER_ANSWER = 2879u, + MSI_MACRO_DETECTOR_NOTICE1 = 2880u, + MSI_MACRO_DETECTOR_NOTICE2 = 2881u, + MSI_MACRO_DETECTOR_NOTICE3 = 2882u, + MSI_MACRO_DETECTOR_REMAIN_COUNT = 2883u, + MSI_MACRO_REPORTER_SELECT_MODE_CHAR = 2884u, + MSI_MACRO_REPORTER_SELECT_MODE_CELL = 2885u, + MSI_MACRO_REPORTER_TOOLTIP_CHAR = 2886u, + MSI_MACRO_REPORTER_TOOLTIP_CELL = 2887u, + MSI_MACRO_REPORTER_TOOLTIP_RANGE = 2888u, + MSI_TAIWANSS_PERSONALINFO_EXPMSG = 2889u, + MSI_TAIWANSS_PERSONALINFO_DROPMSG = 2890u, + MSI_TAIWANSS_PERSONALINFO_DEATHMSG = 2891u, + MSI_WRITE_RODEX_DIFFERENT_RECEIVER_NAME = 2892u, + MSI_LAPINE_INGREDIENT_TO_COMBINE = 2893u, + MSI_LAPINE_FAIL_NOT_ENOUGH_ITEM = 2894u, + MSI_LAPINE_FAIL_NOT_ENOUGH_ITEM_COUNT = 2895u, + MSI_LAPINE_FAIL_NOT_ENOUGH_REFINING_LEVEL = 2896u, + MSI_REGISTER_PARTY_TO_BOOKINGSYSTEM = 2897u, + MSI_INPUT_FREE_MESSAGE = 2898u, + MSI_CAPTCHA_INPUT_ANSWER = 2899u, + MSI_CAPTCHA_REMAIN_TIME = 2900u, + MSI_GOOGLE_OTP_INPUT_CODE = 2901u, + MSI_GOOGLE_OTP_AUTH_CODE = 2902u, + MSI_GOOGLE_OTP_MSG = 2903u, + MSI_RODEX_DELETED_MAIL = 2904u, + MSI_SELECT_AREA_BY_PRIVATE_AIRPLANE = 2905u, + MSI_THAI_PERSONALINFO_EXP = 2906u, + MSI_THAI_PERSONALINFO_DROP = 2907u, + MSI_THAI_PERSONALINFO_DEATH = 2908u, + MSI_FLOATING_PRIVATE_AIRPLANE = 2909u, + MSI_NOT_FOUND_USER_AI = 2910u, + MSI_BASIC_EXP_MSG_BRZ2 = 2911u, + MSI_ASSISTANT_VENDING_POS = 2912u, + MSI_DORAM_CANT_EQUIT_THIS = 2913u, + MSI_SEND_PURCHASES_BY_RODEX = 2914u, + MSI_BUTTON_PAY_BY_ZENY = 2915u, + MSI_BUTTON_PAY_BY_CAN = 2916u, + MSI_CANNOT_ACCESS_BY_WEIGHTOVER_80 = 2917u, + MSI_SEND_REST_ITEMS_BY_RODEX = 2918u, + MSI_BUTTON_EQUIP_PREVIEW = 2919u, + MSI_CHANGE_GUILD_MASTER = 2920u, + MSI_CONFIRM_CHANGING_GUILD_MASTER = 2921u, + MSI_WITHDRAWAL = 2922u, + MSI_SHOP_WITHDRAWAL = 2923u, + MSI_REMAIN_TIME = 2924u, + MSI_LIMIT_USER = 2925u, + MSI_LIMIT_USER_MSG = 2926u, + MSI_SELECT_SHOP_POSITION = 2927u, + MSI_CHANGE_PETNAME = 2928u, + MSI_STORE_ASSISTANT_TRADE_DATE = 2929u, + MSI_STORE_ASSISTANT_TRADE_ITEM = 2930u, + MSI_STORE_ASSISTANT_TRADE_CNT = 2931u, + MSI_STORE_ASSISTANT_TRADE_PRICE = 2932u, + MSI_STORE_ASSISTANT_TRADE_PAYMENT = 2933u, + MSI_STORE_ASSISTANT_TRADE_TITLE1 = 2934u, + MSI_STORE_ASSISTANT_TRADE_TITLE2 = 2935u, + MSI_STORE_ASSISTANT_TRADE_TITLE3 = 2936u, + MSI_STORE_ASSISTANT_TRADE_TITLE4 = 2937u, + MSI_STORE_ASSISTANT_TRADE_REST_ZENY = 2938u, + MSI_STORE_ASSISTANT_TRADE_REST_ITEM = 2939u, + MSI_STORE_ASSISTANT_EMPLOYMENT = 2940u, + MSI_STORE_ASSISTANT_RETURN_ITEM = 2941u, + MSI_STORE_ASSISTANT_RETURN_CNT = 2942u, + MSI_STORE_ASSISTANT_REUTRN_DATE = 2943u, + MSI_STORE_ASSISTANT_SEND_SELLS_BY_RODEX = 2944u, + MSI_CANNOT_USE_NAME = 2945u, + MSI_STYLING_SHOP_ARRIVE_GOODS = 2946u, + MSI_STYLING_SHOP_THANK_YOU = 2947u, + MSI_CANNOT_SELL_IN_PRIVATE_TAB = 2948u, + MSI_LOCK_SELL_IN_PRIVATE_TAB = 2949u, + MSI_NOTFOUND_CALLPOSITION = 2950u, + MSI_CONNECT_SNS_WHOLE_SCREEN_SHOT = 2951u, + MSI_CONNECT_SNS_PART_SCREEN_SHOT = 2952u, + MSI_CONNECT_SNS_SEND = 2953u, + MSI_BABY_INDEPENDENCE_RODEX_SENDER = 2954u, + MSI_BABY_INDEPENDENCE_RODEX_TITLE = 2955u, + MSI_BABY_INDEPENDENCE_RODEX_CONTENTS = 2956u, + MSI_EQUIPMENT = 2957u, + MSI_CONNECT_SNS_DO_NOT_EXIST_IMAGE = 2958u, + MSI_BLOCK_CALL = 2959u, + MSI_IMPOSSIBLE_CHANGE_GUILD_MASTER_IN_SIEGE_TIME = 2960u, + MSI_IMPOSSIBLE_CHANGE_GUILD_MASTER_NOT_TIME = 2961u, + MSI_SUGGEST_BABY3 = 2962u, + MSI_REFINING = 2963u, + MSI_USING_BLACKSMITH_BLESSING = 2964u, + MSI_NOTENOUGH_ZENY = 2965u, + MSI_NOTENOUGH_BLACKSMITH_BLESSING = 2966u, + MSI_CANNOT_REFINE_ITEM = 2967u, + MSI_REFINING_SUCCESS = 2968u, + MSI_REFINING_FAIL = 2969u, + MSI_RETURN = 2970u, + MSI_SUCCESS = 2971u, + MSI_RESET = 2972u, + MSI_MANUFACTURED_MARRIAGERING_ITEM = 2973u, + MSI_CHANGE_HOMUN_NAME = 2974u, + MSI_BLOCK_CALL_PERMIT = 2975u, + MSI_BLOCK_CALL_REJECT = 2976u, + MSI_BLOCK_CALL_NOTIFY = 2977u, + MSI_RESULT_FAIL_ASSISTANT = 2978u, + MSI_USESKILL_FAIL_EXIST_STORE_ASSISTANT = 2979u, + MSI_RESULT_FAILED_ASSISTANT_POS = 2980u, + MSI_RESULT_FAILED_ASSISTANT_POS_CHARACTER = 2981u, + MSI_FAILED_PET_AUTO_FEEDING_CLOSE_RODEX = 2982u, + MSI_SWAP_EQUIPITEM_EQUIPMENTSET = 2983u, + MSI_SWAP_EQUIPITEM_EQUIP = 2984u, + MSI_REFINING_FAIL_ITEM_DISAPPEAR = 2985u, + MSI_REFINING_FAIL_ITEM_DOWMGRADE = 2986u, + MSI_REFINING_FAIL_ITEM_DISAPPEAR_OR_ITEM_DOWNGRADE = 2987u, + MSI_CLOSE_RODEX_FOR_REFINING = 2988u, + MSI_CANNOT_OPEN_RODEX_DURING_REFINING = 2989u, + MSI_REFINING_FAIL_CLOSE_UI = 2990u, + MSI_AURA_EFFECT_ON = 2991u, + MSI_AURA_EFFECT_OFF = 2992u, + MSI_ALREADY_AURA_EFFECT_OFF = 2993u, + MSI_USESKILL_FAIL_NEED_MORE_BULLET_CNT = 2994u, + MSI_SWAP_EQUIPITEM_DO_SWAP = 2995u, + MSI_SWAP_EQUIPITEM_FAIL_DEAD = 2996u, + MSI_SWAP_EQUIPITEM_FAIL_CASTING = 2997u, + MSI_SWAP_EQUIPITEM_FAIL_DEAL = 2998u, + MSI_SWAP_EQUIPITEM_FAIL_MERCHANTSHOP = 2999u, + MSI_SWAP_EQUIPITEM_FAIL_USE_NPC = 3000u, + MSI_SWAP_EQUIPITEM_FAIL_CHAT = 3001u, + MSI_MDUNGEON_CREATE_FAIL_PARTY_ONLINE = 3002u, + MSI_USESKILL_FAIL_NEED_MORE_ARROW_CNT = 3003u, + MSI_SORT_ITEM = 3004u, + MSI_SWAP_EQUIPITEM_CLOSE_WND = 3005u, + MSI_SWAP_EQUIPITEM_FAIL_NO_ITEM = 3006u, + MSI_BABY_INDEPENDENCE_RODEX_ERASED = 3007u, + MSI_TIME_TYPE4 = 3008u, + MSI_LAST_LOGIN = 3009u, + MSI_CLOSE_BANKING_FOR_REFINING = 3010u, + MSI_CANNOT_OPEN_BANKING_DURING_REFINING = 3011u, + MSI_SWAP_EQUIPITEM_UNREGISTER_FIRST = 3012u, + MSI_NEWMAKECHAR_HUMAN = 3013u, + MSI_NEWMAKECHAR_HUMANJOB = 3014u, + MSI_NEWMAKECHAR_DORAM = 3015u, + MSI_NEWMAKECHAR_DORAMJOB = 3016u, + MSI_NEWMAKECHAR_HUMANINFO = 3017u, + MSI_NEWMAKECHAR_DORAMINFO = 3018u, + MSI_PICKUP_FAILED_ITEMCREATE = 3019u, + MSI_CASH_MARK1 = 3020u, + MSI_CASH_MARK2 = 3021u, + MSI_ANOTHER_WORKING = 3022u, + MSI_OVERHEAT_LIMIT_POINT = 3023u, + MSI_CANNOT_JOIN_AND_LEAVE_PARTY_IN_MAKING_MEMORIALDUNGEON = 3024u, + MSI_ERROR_INCLUDE_VALGARISM = 3025u, + MSI_MUST_ID_EXCEED_CHAR = 3026u, + MSI_MUST_PASSWORD_EXCEED_CHAR = 3027u, + MSI_BANK_SYSTEM_BUSY = 3028u, + MSI_BASIC_EXP_MSG2_EXCEPT_PREMIUM = 3029u, + MSI_SWAP_EQUIPITEM_CANNOT_ADD_ITEM = 3030u, + MSI_DAILYSENDRODEXCNT_LIMIT = 3031u, + MSI_MAX_WEIGHT_IN_RODEX_CLIENT = 3032u, + MSI_TW_ENABLE_SECOND_PASSWD = 3033u, + MSI_EMBLEM_CHANGE = 3034u, + MSI_TWITTER_TAG = 3035u, + MSI_TWITTER_CAUTION = 3036u, + MSI_SWAP_FAIL_SWAP = 3037u, + MSI_CALLING_USERNAME = 3038u, + MSI_MSG_IS_ILLEGAL_MSG = 3039u, + MSI_PARA_PURCHASE_ITEM_FAIL2 = 3040u, + MSI_CHR_DELETE_FAIL_CHN_TAREN_PERSONALNUMBER = 3041u, + MSI_CLOSE = 3042u, + MSI_RULE = 3043u, + MSI_ZENY_LOTTO_BUY_1 = 3044u, + MSI_ZENY_LOTTO_BUY_10 = 3045u, + MSI_ZENY_LOTTO_BUY_100 = 3046u, + MSI_ZENY_LOTTO_WIN_1ST = 3047u, + MSI_ZENY_LOTTO_WIN_2ND = 3048u, + MSI_ZENY_LOTTO_WIN_3RD = 3049u, + MSI_DONOT_USE_1 = 3050u, + MSI_DONOT_USE_2 = 3051u, + MSI_ZENY_LOTTO_PRIZE_WINNER = 3052u, + MSI_ZENY_LOTTO_TOTAL_ZENY = 3053u, + MSI_ZENY_LOTTO_TOTAL_CHARACTER = 3054u, + MSI_WINNER_1ST = 3055u, + MSI_WINNER_2ND = 3056u, + MSI_WINNER_3RD = 3057u, + MSI_ZENY_LOTTO_REWARD_ITEM = 3058u, + MSI_ZENY_LOTTO_ASK_PURCHASE = 3059u, + MSI_ZENY_LOTTO_RESULT_SUCCESS = 3060u, + MSI_ZENY_LOTTO_RESULT_FAIL_ZENY = 3061u, + MSI_ZENY_LOTTO_RESULT_FAIL_COUNT = 3062u, + MSI_ID_YES = 3063u, + MSI_ID_NO = 3064u, + MSI_BASICINFO_HP = 3065u, + MSI_BASICINFO_SP = 3066u, + MSI_BASICINFO_LEVEL = 3067u, + MSI_BASICINFO_JOBLEVEL = 3068u, + MSI_BASICINFO_EXP = 3069u, + MSI_ALL_ON = 3070u, + MSI_REPLAY_BTN_TOOLTIP = 3071u, + MSI_SIMPLECASH_P = 3072u, + MSI_SIMPLECASH_TOTAL = 3073u, + MSI_REPLAY_BASICINFO = 3074u, + MSI_REPLAY_EQUIP = 3075u, + MSI_REPLAY_ITEM = 3076u, + MSI_REPLAY_SKILL = 3077u, + MSI_REPLAY_GUILD = 3078u, + MSI_REPLAY_PARTY = 3079u, + MSI_REPLAY_CHATTING = 3080u, + MSI_REPLAY_SHORTCUT = 3081u, + MSI_REPLAY_STATUS = 3082u, + MSI_REPLAY_ALL = 3083u, + MSI_REPLAY_USER_DEFINED_FILE_NAME = 3084u, + MSI_REPLAY_REPEATED_FILE_CHECK = 3085u, + MSI_ON = 3086u, + MSI_BASIC_SKIN = 3087u, + MSI_BASIC_SELECT_SKIN = 3088u, + MSI_RESULT_FAIL_ZENYLOTTO = 3089u, + MSI_ACHIEVEMENT_COMMAND = 3090u, + MSI_ZENY_LOTTO_RODEX_SENDER = 3091u, + MSI_ZENY_LOTTO_RODEX_WINNER_TITLE = 3092u, + MSI_ZENY_LOTTO_RODEX_WINNER_CONTENTS = 3093u, + MSI_ZENY_LOTTO_RODEX_PURCHASE_TITLE = 3094u, + MSI_ZENY_LOTTO_RODEX_PURCHASE_CONTENTS = 3095u, + MSI_ZENY_LOTTO_RODEX_REFUND_TITLE = 3096u, + MSI_ZENY_LOTTO_RODEX_REFUND_CONTENTS = 3097u, + MSI_ADD_MINI_PARTYWND = 3098u, + MSI_DELETE_MINI_PARTYWND = 3099u, + MSI_ZENY_LOTTO_SELL_END = 3100u, + MSI_DATE_MM_DD = 3101u, + MSI_ACHIEVEMENT_NEXT_GRADE = 3102u, + MSI_THE_WHOLE = 3103u, + MSI_INCOMPLETE = 3104u, + MSI_ZENY_LOTTO_ACHIEVE = 3105u, + MSI_ZENY_LOTTO_ACHIEVE_FAIL = 3106u, + MSI_SWAP_EQUIPITEM = 3107u, + MSI_SWAP_EQUIPITEM_CHANGE = 3108u, + MSI_DESC_STR2 = 3109u, + MSI_DESC_AGI2 = 3110u, + MSI_DESC_VIT2 = 3111u, + MSI_DESC_INT2 = 3112u, + MSI_DESC_DEX2 = 3113u, + MSI_DESC_LUK2 = 3114u, + MSI_DESC_ATK2 = 3115u, + MSI_DESC_DEF2 = 3116u, + MSI_DESC_HIT2 = 3117u, + MSI_DESC_CRI2 = 3118u, + MSI_DESC_GUILD2 = 3119u, + MSI_DESC_POINT2 = 3120u, + MSI_DESC_MATK2 = 3121u, + MSI_DESC_MDEF2 = 3122u, + MSI_DESC_FLEE2 = 3123u, + MSI_DESC_ASPD2 = 3124u, + MSI_HOTKEY_GUIDE = 3125u, + MSI_OPTION = 3126u, + MSI_SKILL_HOTKEY_F1_F9 = 3127u, + MSI_IMAGE_CAPTURE = 3128u, + MSI_ZOOM_IN = 3129u, + MSI_ZOOM_OUT = 3130u, + MSI_GUILD = 3131u, + MSI_BANK = 3132u, + MSI_MAIL = 3133u, + MSI_CASHSHOP = 3134u, + MSI_SIT = 3135u, + MSI_MOVE = 3136u, + MSI_ROTATE = 3137u, + MSI_CONNOT_LEAVE_MASTER = 3138u, + MSI_STOP_VIDEO = 3139u, + MSI_ITEM_IS_SWAP_EQUIPED = 3140u, + MSI_ITEM_IS_SWAP_REMOVED = 3141u, + MSI_CANNOT_MOVE_MINI_PARTYWND = 3142u, + MSI_BASIC_EXP_MSG_FRA = 3143u, + MSI_CHINESE_CHARACTER = 3144u, + MSI_HOTKEY_SETTING = 3145u, + MSI_EXPIRED_DATE = 3146u, + MSI_NOT_FOUND_REPLAY_FILE = 3147u, + MSI_STORE_TABNAME_7 = 3148u, + MSI_STORE_TABNAME_8 = 3149u, + MSI_STORE_TABNAME_9 = 3150u, + MSI_STORE_TABNAME_10 = 3151u, + MSI_STORE_TABNAME_11 = 3152u, + MSI_STORE_TABNAME_12 = 3153u, + MSI_ORDER = 3154u, + MSI_GENERAL_EQUIPMENT_TOOLTIP = 3155u, + MSI_SHADOW_EQUIPMENT_TOOLTIP = 3156u, + MSI_TITLE_EQUIPMENT_TOOLTIP = 3157u, + MSI_HELP_QUAKE_ONOFF = 3158u, + MSI_HELP_AURA_EFFECT_OFF = 3159u, + MSI_GRAPHIC_SETTING_TAB_BASIC = 3160u, + MSI_GRAPHIC_SETTING_TAB_ADVANCED = 3161u, + MSI_GRAPHIC_SETTING_TOOLTIP_RESET = 3162u, + MSI_GRAPHIC_SETTING_WARNING_RESET = 3163u, + MSI_GRAPHIC_SETTING_APPLY = 3164u, + MSI_GRAPHIC_SETTING_WARNING_RESTART = 3165u, + MSI_GRAPHIC_SETTING_FOG_CHECK = 3166u, + MSI_GRAPHIC_SETTING_SIMPLE_AURA_CHECK = 3167u, + MSI_GRAPHIC_SETTING_AURA_OFF_CHECK = 3168u, + MSI_GRAPHIC_SETTING_EFFECT_CHECK = 3169u, + MSI_GRAPHIC_SETTING_LIGHTMAP_CHECK = 3170u, + MSI_GRAPHIC_SETTING_NOSHIFT_CHECK = 3171u, + MSI_GRAPHIC_SETTING_TOOLTIP_DEVICE = 3172u, + MSI_GRAPHIC_SETTING_TOOLTIP_RESOLUTION = 3173u, + MSI_GRAPHIC_SETTING_FULLSCREEN_CHECK = 3174u, + MSI_GRAPHIC_SETTING_MOUSE_EXCLUSIVE_CHECK = 3175u, + MSI_GRAPHIC_SETTING_EFFECT_SET = 3176u, + MSI_GRAPHIC_SETTING_CONTROL_SET = 3177u, + MSI_GRAPHIC_SETTING_DEVICE_SET = 3178u, + MSI_GRAPHIC_SETTING_RESOLUTION_SET = 3179u, + MSI_GRAPHIC_SETTING_FULLSCREEN_SET = 3180u, + MSI_GRAPHIC_SETTING_MOUSE_SET = 3181u, + MSI_STORE_ASSISTANT_TRADE_FEE = 3182u, + MSI_STORE_ASSISTANT_TRADE_TOTAL_FEE = 3183u, + MSI_CHATWND_RECEIVER_LIST = 3184u, + MSI_CHATWND_RECEPTIVE_GROUP_LIST = 3185u, + MSI_CHATWND_CHANGE_SIZE = 3186u, + MSI_RODEX_DOWNLOADING = 3187u, + MSI_RODEX_NOW_LOADING = 3188u, + MSI_RODEX_TITLE = 3189u, + MSI_RODEX_SENDER = 3190u, + MSI_CLOSE_SETUP = 3191u, + MSI_OPEN_COMMAND_LIST_WND = 3192u, + MSI_TAREN_LOGINREFUSE_FAIL_ACCOUNT_NOTEXIST = 3193u, + MSI_TAREN_LOGINREFUSE_FAIL_PASSWORD = 3194u, + MSI_TAREN_LOGINREFUSE_FAIL_IP = 3195u, + MSI_TAREN_LOGINREFUSE_FAIL_PERSONALNUMBER = 3196u, + MSI_TAREN_LOGINREFUSE_FAIL_ACCOUNT_BLOCK = 3197u, + MSI_TAREN_LOGINREFUSE_FAIL_SYSTEM = 3198u, + MSI_TAREN_LOGINREFUSE_FAIL_UNKNOWN = 3199u, + MSI_NAVIGATION_ICONTITEL = 3200u, + MSI_NAVIGATION_RUITELISTTITEL = 3201u, + MSI_NAVIGATION_ROADLISTVIEW = 3202u, + MSI_NAVIGATION_SHARETIP = 3203u, + MSI_NAVIGATION_SEARCH_01 = 3204u, + MSI_NAVIGATION_SEARCHTORUITE = 3205u, + MSI_NAVIGATION_SHARE_DESC = 3206u, + MSI_NAVIGATION_SEARCH_02 = 3207u, + MSI_NAVIGATION_ICONTIP = 3208u, + MSI_NAVIGATION_SERVICETIP = 3209u, + MSI_WORLDMAP_NAVIGATION_SET = 3210u, + MSI_TAREN_LOGINREFUSE_FAIL_NOTACTIVATED = 3211u, + MSI_NAVIGATION_V4_HELP = 3212u, + MSI_NAVIGATION_V4_HELP01 = 3213u, + MSI_NAVIGATION_V4_HELP02 = 3214u, + MSI_NAVIGATION_V4_HELP03 = 3215u, + MSI_GOT_EXPERIENCE_POINT_INT64 = 3216u, + MSI_NOTIFY_EXP_INT64 = 3217u, + MSI_CHARGE_FEE_HELP = 3218u, + MSI_METCHANT_SHOP_PRICE_INCLUDED_CHARGE_FEE = 3219u, + MSI_WARNING_METCHANT_SHOP_SELL = 3220u, + MSI_WARNING_METCHANT_SHOP_BUY = 3221u, + MSI_MAKE_CHAT_ROOM = 3222u, + MSI_CANNOT_JOIN_CHARACTER_HAVING_LOW_SKILL = 3223u, + MSI_NOTIFY_JOBEXP_INT64 = 3224u, + MSI_GOT_JOB_EXPERIENCE_POINT_INT64 = 3225u, + MSI_MERCHANTSHOP_FAIL_POSITION = 3226u, + MSI_SWAP_EQUIPITEM_WAITING = 3227u, + MSI_PARTYMEMBER = 3228u, + MSI_CONNECT_SNS_FAIL_SEND = 3229u, + MSI_CONNECT_SNS_FAIL_CONNECT = 3230u, + MSI_CONNECT_SNS_FAIL_CUZ_NOT_CONNECTING = 3231u, + MSI_CONNECT_NOT_HAVE_URL = 3232u, + MSI_GET_OFF_MINI_PARTYWND = 3233u, + MSI_SALESTORE_MYSHOPWND_TITLE = 3234u, + MSI_TIPBOX = 3235u, + MSI_MENUICON_TIPBOX = 3236u, + MSI_CONNECT_SNS_SUCCESS_SEND = 3237u, + MSI_AGAIN = 3238u, + MSI_REFINING_AGAIN_FAILED_INGREDIENT_CHANGED = 3239u, + MSI_REFINING_AGAIN_FAILED_LACK_OF_INGREDIENT = 3240u, + MSI_REFINING_AGAIN_FAILED_LACK_OF_MONEY = 3241u, + MSI_REFINING_AGAIN_FAILED_LACK_OF_BLACKSMITHBLESSING = 3242u, + MSI_REFINING_FAIL_BROKEN_ITEM = 3243u, + MSI_NPC_ALL_STAT_DOWN = 3244u, + MSI_NPC_ALL_STAT_DOWN_RESET = 3245u, + MSI_OTP_MUST_8_CHAR = 3246u, + MSI_ACCOUNTCLASS_INTEGRATION = 3247u, + MSI_ACCOUNTCLASS_RAGNAROK = 3248u, + MSI_FAIL_SERVICE_CHECKING_ERROR = 3249u, + MSI_ENTER_THE_SEARCH_WORD = 3250u, + MSI_MOTP = 3251u, + MSI_AUTHORIZATION_CODE = 3252u, + MSI_ENTER_YOUR_AUTHENTICATION_NUMBER = 3253u, + MSI_PARTY_DO_YOU_WANT_BREAKING_UP = 3254u, + MSI_SERVER_PROPERTY_ADULT_NO_COUNT = 3255u, + MSI_SERVER_PROPERTY_PAY_NO_COUNT = 3256u, + MSI_SERVER_PROPERTY_FREE_NO_COUNT = 3257u, + MSI_SERVER_USERCOUNT_STATE_NICE = 3258u, + MSI_SERVER_USERCOUNT_STATE_NORMAL = 3259u, + MSI_SERVER_USERCOUNT_STATE_BUSY = 3260u, + MSI_SERVER_USERCOUNT_STATE_VERY_BUSY = 3261u, + MSI_MENUICON_MAP = 3262u, + MSI_WORLDSTORE_ONLY_INVENTORY = 3263u, + MSI_WORLDSTORE_PUT_BLOCK_PETEGG = 3264u, + MSI_WORLDSTORE_PUT_BLOCK_MANUFACTUREDITEM = 3265u, + MSI_WORLDSTORE_OUT_BLOCK = 3266u, + MSI_MEMORIAL_DUN_DESTROY = 3267u, + MSI_BROADCASTING_REFINING_SUCCESS_LEVEL_9 = 3268u, + MSI_BROADCASTING_REFINING_FAIL_LEVEL_9 = 3269u, + MSI_PARTY_NOT_LEAVE_PARTY_UNTIL_YIELD_PARTYMASTER = 3270u, + MSI_ASCENDING_ORDER = 3271u, + MSI_DESENDING_ORDER = 3272u, + MSI_DEFAULT = 3273u, + MSI_CHEATDEFENDER_FILE_CHECK_FAIL = 3274u, + MSI_ITEMMOVERESTRICT_WHITELIST = 3275u, + MSI_HOMUN_SELF_FEEDING = 3276u, + MSI_FAILED_HOMUN_SELF_FEEDING_CLOSE_RODEX = 3277u, + MSI_HOMUN_SELF_FEEDING_REST = 3278u, + MSI_HOMUN_SELF_FEEDING_ON = 3279u, + MSI_HOMUN_SELF_FEEDING_OFF = 3280u, + MSI_HOMUN_SELF_FEEDING_EXP_INFORMATION = 3281u, + MSI_REFINING_RATE = 3282u, + MSI_HOMUN_TARGET_IS_NOT_HOMUN_TARGET = 3283u, + MSI_HOMUN_TARGET_NOT_EXIST_HOMUN_TARGAT = 3284u, + MSI_CASHSHOP_SALE_LIST = 3285u, + MSI_CASHSHOP_BUY_LIST = 3286u, + MSI_CASHSHOP_TAB_NEW = 3287u, + MSI_CASHSHOP_TAB_HOT = 3288u, + MSI_CASHSHOP_TAB_LIMITED = 3289u, + MSI_CASHSHOP_TAB_LEASE = 3290u, + MSI_CASHSHOP_TAB_PERMANENT = 3291u, + MSI_CASHSHOP_TAB_BUFF = 3292u, + MSI_CASHSHOP_TAB_RECOVERY = 3293u, + MSI_CASHSHOP_TAB_ETC = 3294u, + MSI_CASHSHOP_TAB_BARGAIN = 3295u, + MSI_CASHSHOP_CASH_CHARGE = 3296u, + MSI_CASHSHOP_ITEM_BUY = 3297u, + MSI_CASHSHOP_CASH_CHARGE_ADDRESS = 3298u, + MSI_ITEM_SEARCH = 3299u, + MSI_CASHSHOP_FREE_POINT = 3300u, + MSI_CASHSHOP_FREE_POINT_TO_USE = 3301u, + MSI_CASHSHOP_CASH_POINT = 3302u, + MSI_CASHSHOP_REFRESH = 3303u, + MSI_STAR_EMPEROR_F = 3304u, + MSI_SOUL_REAPER_F = 3305u, + MSI_STAR_EMPEROR_M = 3306u, + MSI_SOUL_REAPER_M = 3307u, + MSI_NO_RECOVER_OVERWEIGHT2 = 3308u, + MSI_CASHSHOP_CANNOT_BUY_OVER = 3309u, + MSI_OUTSIDE_CASHSHOP_LINK = 3310u, + MSI_USA_LOGINERRORMSG_UNKNOWN = 3311u, + MSI_USA_LOGINERRORMSG_NOT_USER = 3312u, + MSI_USA_LOGINERRORMSG_ID_BLOCK = 3313u, + MSI_USA_LOGINERRORMSG_ID_INACTIVAT = 3314u, + MSI_USA_LOGINERRORMSG_PASSWORD = 3315u, + MSI_USA_LOGINERRORMSG_EMAIL_CERT = 3316u, + MSI_USA_LOGINERRORMSG_PAYPAL_BLOCK1 = 3317u, + MSI_USA_LOGINERRORMSG_COUNTRY_REJECT = 3318u, + MSI_USA_LOGINERRORMSG_PAYPAL_BLOCK2 = 3319u, + MSI_USA_LOGINERRORMSG_WEB_BLOCK = 3320u, + MSI_USA_LOGINERRORMSG_AGE = 3321u, + MSI_USA_LOGINERRORMSG_PASSWORD_CHANGE = 3322u, + MSI_USA_LOGINERRORMSG_INPUTDATA = 3323u, + MSI_USA_LOGINERRORMSG_DATABASE = 3324u, + MSI_USA_LOGINERRORMSG_SYSTEM = 3325u, + MSI_PAY_BY_ITEM = 3326u, + MSI_PRIVATE_AIRPLANE_PAYMENT = 3327u, + MSI_PRIVATE_AIRPLANE_FAILED_ISNOT_STARTABLE_MAP = 3328u, + MSI_PRIVATE_AIRPLANE_FAILED_ISNOT_ENDABLE_MAP = 3329u, + MSI_PRIVATE_AIRPLANE_FAILED_NOT_ENOUGH_ITEM = 3330u, + MSI_ENTER_ONE_LINE_WITHOUT_LINE_BREAKS = 3331u, + MSI_CANNOT_REGISTER_NAME_THAT_CONTAINS_BADWORDS = 3332u, + MSI_CREATE_ACCOUNT = 3333u, + MSI_TOKENAGENCY_SERVER_CONNECTION_FAILED = 3334u, + MSI_SELECTCHARWND_BILLING_INFO = 3335u, + MSI_SELECTCHARWND_RESERVE_TO_DEL_CHAR = 3336u, + MSI_SELECTCHARWND_CANCEL_TO_RESERVE_CHAR = 3337u, + MSI_SELECTCHARWND_START_GAME = 3338u, + MSI_SELECTCHARWND_DELETE = 3339u, + MSI_SELECTCHARWND_CHARACTER_LIST = 3340u, + MSI_SELECTCHARWND_NOTICE = 3341u, + MSI_MAKECHARWND_CREATE = 3342u, + MSI_MAKECHARWND_HAIR_STYLE = 3343u, + MSI_MAKECHARWND_HAIR_COLOR = 3344u, + MSI_MAKECHARWND_DOUBLECHECK_NAME = 3345u, + MSI_DATE_HH_MM_SS = 3346u, + MSI_INPUT_TIME_EXCEEDED_SIGN_IN_AGAIN = 3347u, + MSI_MAKECHARWND_CLOSE = 3348u, + MSI_PRIVATE_AIRPLANE_FAILED_USE_ITEM = 3349u, + MSI_PRIVATE_AIRPLANE_FAILED_SAME_MAP = 3350u, + MSI_PRIVATE_AIRPLANE_FAILED_DEAD_STATE = 3351u, + MSI_MAKECHARWND_TITLE = 3352u, + MSI_REGISTER_ADVENTURER_AGENCY = 3353u, + MSI_REGISTER_ADVENTURER_AGENCY2 = 3354u, + MSI_STOP_RECRUITING = 3355u, + MSI_ADVEN_MEMO = 3356u, + MSI_ADVEN_QUEST = 3357u, + MSI_ADVEN_FIELD = 3358u, + MSI_ADVEN_DUNJUN = 3359u, + MSI_ADVEN_MD = 3360u, + MSI_ADVEN_EDEN_GROUP = 3361u, + MSI_ADVEN_ETC = 3362u, + MSI_ADVEN_SEARCH = 3363u, + MSI_ADVEN_RESET = 3364u, + MSI_ADVEN_JOIN_PARTY = 3365u, + MSI_ADVEN_PURPOSE = 3366u, + MSI_ADVEN_WARNING_TEXT = 3367u, + MSI_ADVEN_REGISTER = 3368u, + MSI_INCLUDE_BAD_WORD = 3369u, + MSI_ASK_JOIN = 3370u, + MSI_CHAT_WITH_PARTYMASTER = 3371u, + MSI_STOP_RECRUITING_PARTY = 3372u, + MSI_ADVEN_REWRITE = 3373u, + MSI_ALL_AREA = 3374u, + MSI_REQUEST_PARTY = 3375u, + MSI_LOGIN = 3376u, + MSI_ACCOUNT = 3377u, + MSI_EXIT = 3378u, + MSI_APPLY = 3379u, + MSI_CONNECT = 3380u, + MSI_OK = 3381u, + MSI_OTPWND_DESCRIPTION_1 = 3382u, + MSI_OTPWND_DESCRIPTION_2 = 3383u, + MSI_PRIVATE_AIRPLANE_WARNNING_SELECT_NPC = 3384u, + MSI_JOBNAME_TAEKWON = 3385u, + MSI_TO_BLOCK_WHISPER = 3386u, + MSI_TO_BLOCK_WHISPER_FAILED1 = 3387u, + MSI_TO_BLOCK_WHISPER_FAILED2 = 3388u, + MSI_TO_UNBLOCK_WHISPER = 3389u, + MSI_TO_UNBLOCK_WHISPER_FAILED1 = 3390u, + MSI_TO_UNBLOCK_WHISPER_FAILED2 = 3391u, + MSI_NO_BLOCK_LIST = 3392u, + MSI_BLOCK_LIST = 3393u, + MSI_RENEW_QUEST_TAB_PROCESS = 3394u, + MSI_RENEW_QUEST_TAB_BEST = 3395u, + MSI_RENEW_QUEST_TAB_HOLD = 3396u, + MSI_RENEW_QUEST_TITLE = 3397u, + MSI_RENEW_QUEST_DETAIL_DESCRIPTION = 3398u, + MSI_RENEW_QUEST_DETAIL_MONSTER = 3399u, + MSI_RENEW_QUEST_DETAIL_REWARD = 3400u, + MSI_RENEW_QUEST_DETAIL_EXP = 3401u, + MSI_RENEW_QUEST_DETAIL_JEXP = 3402u, + MSI_RENEW_QUEST_DETAIL_ITEM = 3403u, + MSI_RENEW_QUEST_CHECK_TOOTIP1_ITEM = 3404u, + MSI_RENEW_QUEST_CHECK_TOOTIP2_ITEM = 3405u, + MSI_RENEW_QUEST_CHECK_TOOTIP3_ITEM = 3406u, + MSI_OTP_INPUT_TIME = 3407u, + MSI_SAVE_ID = 3408u, + MSI_PASSWORD = 3409u, + MSI_ID = 3410u, + MSI_CREATE_RAG_ACCOUNT = 3411u, + MSI_PARTY_MASTER = 3412u, + MSI_CANNOT_APPLY_LEVEL = 3413u, + MSI_ADVENTURER_AGENCY_REGIST_FAILED = 3414u, + MSI_ADVENTURER_AGENCY_REGIST_SUCCESSED = 3415u, + MSI_INPUT_SEARCH_TEXT = 3416u, + MSI_ADVEN_TANKER = 3417u, + MSI_BASIC_EXP_ZERO = 3418u, + MSI_EXPLAIN_CHAT_BLOCK = 3419u, + MSI_EXPLAIN_CHAT_UNBLOCK = 3420u, + MSI_EXPLAIN_CHAT_BLOCKLIST = 3421u, + MSI_EXPLAIN_CHAT_BLOCK_TO_ALL = 3422u, + MSI_EXPLAIN_CHAT_UNBLOCK_TO_ALL = 3423u, + MSI_REFUSE_CHAT_TO_EVERYONE = 3424u, + MSI_FAILED_TO_ALL_CHAT_PERMIT = 3425u, + MSI_PERMIT_CHAT_TO_EVERYONE = 3426u, + MSI_FAILED_TO_ASK_ALL_CHAT = 3427u, + MSI_OPENING = 3428u, + MSI_DO_YOU_WANT_TO_BACK_LOGINWND = 3429u, + MSI_ENST_SHOUT2 = 3430u, + MSI_ENST_BLESSING2 = 3431u, + MSI_ENST_ANGELUS2 = 3432u, + MSI_CASHSHOP_TAB_JELLSTAR = 3433u, + MSI_CASHSHOP_TAB_EFST_AID = 3434u, + MSI_CASHSHOP_TAB_PREMIUM_SERVICE = 3435u, + MSI_REFUSE_RETRY_CONNECT_AC = 3436u, + MSI_REFUSE_RETRY_CONNECT_TC = 3437u, + MSI_CANNOT_FIND_NAME_THAT_CONTAINS_BADWORDS = 3438u, + MSI_THE_PARTY_MASTER_CANNOT_BE_REQUESTED = 3439u, + MSI_NO_PARTY_FOUND = 3440u, + MSI_ADVEN_DEARER = 3441u, + MSI_WEB_ADDRESS_FOR_RESTART = 3442u, + MSI_QUESTWND_HIGHER = 3443u, + MSI_QUESTWND_LOWER = 3444u, + MSI_FRIEND_ALREADY_FRIEND = 3445u, + MSI_FRIEND_CAN_NOT_FIND = 3446u, + MSI_FRIEND_ALREADY_JOINING = 3447u, + MSI_SPRITEMABLE_ON = 3448u, + MSI_SPRITEMABLE_OFF = 3449u, + MSI_BAN_BLOCK_CHARCTER_SERVER_SECOND_PASSWORD = 3450u, + MSI_SECOND_PASSWORD_INFO_5 = 3451u, + MSI_CHECK_ATTENDANCE_RODEX_SENDER = 3452u, + MSI_CHECK_ATTENDANCE_RODEX_CONTENTS = 3453u, + MSI_ACCOUNTLINKEDUSERDATA_LOAD_FAIL = 3454u, + MSI_USESKILL_FAIL_NOT_PARTY_MEMBER = 3455u, + MSI_ADVENTURER_AGENCY_RECRUIT_STOP = 3456u, + MSI_CANNOT_OFFER_GUILD_EXP_MAX_RATE = 3457u, + MSI_CANNOT_OFFER_GUILD_EXP_MAX_LEVEL = 3458u, + MSI_FORCED_WEB_LOGIN = 3459u, + MSI_INC_ATTACKDAMAGE_ABILITYPOWER = 3460u, + MSI_DEC_ATTACKDAMAGE_ABILITYPOWER = 3461u, + MSI_CHECK_ATTENDANCE_REWARD = 3462u, + MSI_CHECK_ATTENDANCE_DATE_INFO = 3463u, + MSI_CHECK_ATTENDANCE_DATE_COUNT = 3464u, + MSI_CHECK_ATTENDANCE_CHECK_BEFORE = 3465u, + MSI_CHECK_ATTENDANCE_CHECK_AFTER = 3466u, + MSI_CHECK_ATTENDANCE_DDAY = 3467u, + MSI_DATE_DAY = 3468u, + MSI_CHECK_ATTENDANCE_FAIL_RESTART = 3469u, + MSI_CHECK_ATTENDANCE = 3470u, + MSI_CHECK_ATTENDANCE_NOT_EVENT = 3471u, + MSI_CAN_NOT_OFFER_EXP_TO_GUILD_MAX_LV = 3472u, + MSI_CAN_NOT_OFFER_EXP_TO_GUILD_MAX_EXP = 3473u, + MSI_MESSAGEWND_TITLE = 3474u, + MSI_SEND_TO_TWITTER_FAILED = 3475u, + MSI_KEYWORD_FILTER = 3476u, + MSI_DISABLE_TAMINGMONSTER_MAP = 3477u, + MSI_RANK_LOADING = 3478u, + MSI_USESKILL_FAIL_NOT_PARTY_MASTER = 3479u, + MSI_USESKILL_FAIL_ENSEMBLE_PARTYNER = 3480u, + MSI_STORE_ASSISTANT_TRADE_FORCED_REMOVAL_TITLE = 3481u, + MSI_STORE_ASSISTANT_TRADE_FORCED_REMOVAL_CONTENT = 3482u, + MSI_CAN_NOT_OFFER_EXP_LIMIT_RATE = 3483u, + MSI_CANNOT_CHANGE_PARTYMASTER = 3484u, + MSI_CANNOT_REGISTER_PARTY = 3485u, + MSI_ACCEPT = 3486u, + MSI_REFUSE = 3487u, + MSI_ADVEN_HEALER = 3488u, + MSI_CANNOT_FIND_REQUEST_USER = 3489u, + MSI_STORE_ASSISTANT_TRADE_FORCED_REMOVAL = 3490u, + MSI_CANNOT_FIND_PARTYMASTER = 3491u, + MSI_CANNOT_JOIN_PARTY_BECAUSE_LOW_LEVEL = 3492u, + MSI_INVALID_MAPPROPERTY_REQUEST_USER = 3493u, + MSI_EXCEEDED_NUMBER_OF_PARTYMEMBERS = 3494u, + MSI_JOIN_ACCEPT = 3495u, + MSI_JOIN_REFUSE = 3496u, + MSI_ALREADY_JOINED_REQUEST_USER = 3497u, + MSI_JOIN_ACCEPT_REQUEST_USER = 3498u, + MSI_JOIN_REFUSE_REQUEST_USER = 3499u, + MSI_REQUEST_REJECTED_BECAUSE_INVALID_MAPPROPERTY = 3500u, + MSI_ADVENTURER_AGENCY_LIST = 3501u, + MSI_REQUEST_JOIN_PARTY = 3502u, + MSI_NOT_PARTYMASTER_CANNOT_REGISTER_ADVENTURER_AGENCY = 3503u, + MSI_ADVENTURER_AGENCY_RECRUIT_STOP_FAILED = 3504u, + MSI_ADVEN_ASSIST = 3505u, + MSI_EXPAND_SIGHT_OPTIONWND = 3506u, + MSI_EXPAND_SIGHT_HELP = 3507u, + MSI_EXPAND_SIGHT_ON = 3508u, + MSI_EXPAND_SIGHT_OFF = 3509u, + MSI_EXPAND_SIGHT = 3510u, + MSI_ADVENTURER_AGENCY = 3511u, + MSI_CANNOT_ASK_TO_JOIN_PARTY = 3512u, + MSI_CHECK_LEVEL_BEFORE_REGISTER_AGENCY = 3513u, + MSI_CANNOT_MORE_SELECT_JOB = 3514u, + MSI_D0_NOT_RECEIVE_THE_USER_REQUEST_TODAY = 3515u, + MSI_PLEASE_REOPEN_LISTWND_AFTER_A_WHILE = 3516u, + MSI_BEFORE_SIEGE_BLOCKMOVE_TIME = 3517u, + MSI_EXPAND_OBJALPHA = 3518u, + MSI_HALFALPHAOBJ_ON = 3519u, + MSI_HALFALPHAOBJ_OFF = 3520u, + MSI_GRAPHIC_SETTING_OBJALPHA = 3521u, + MSI_FAILED_PET_TO_EGG_CLOSE_RODEX = 3522u, + MSI_EMBLEM_FRAME = 3523u, + MSI_EMBLEM_FRAME_DRAW_ON = 3524u, + MSI_EMBLEM_FRAME_DRAW_OFF = 3525u, + MSI_USESKILL_FAIL_NEED_EQUIPPED_WEAPONE = 3526u, + MSI_USESKILL_FAIL_EMPTY_SOUL_ENERGY = 3527u, + MSI_ADDSKILL_FAIL_INCLUDE_SKILL_YOU_CANNOT_LEARN = 3528u, + MSI_DRAW_EMBLEM_FRAME_ONOFF = 3529u, + MSI_USESKILL_FAIL_GC_WEAPONBLOCK_ON = 3530u, + MSI_REFUSE_LOGIN_AUTH = 3531u, + MSI_RUSSIA_PERSONALINFO_EXP = 3532u, + MSI_RUSSIA_PERSONALINFO_DROP = 3533u, + MSI_RUSSIA_PERSONALINFO_DEATH = 3534u, + MSI_RUSSIA_CHAR_NAME_RULES = 3535u, + MSI_REFUSE_LOGIN_ACCESSTICKET = 3536u, + MSI_ITEMSTORE_DOWNLOADING = 3537u, + MSI_ITEMSTORE_NOW_LOADING = 3538u, + MSI_RODEX_BUTTON_DELETE = 3539u, + MSI_RODEX_BUTTON_ANSWER = 3540u, + MSI_RODEX_BUTTON_SEND = 3541u, + MSI_RODEX_BUTTON_CONFIRM_ID = 3542u, + MSI_RODEX_TAB_ADMIN = 3543u, + MSI_RODEX_TAB_DEFAULT = 3544u, + MSI_RODEX_TAB_RETURN = 3545u, + MSI_RODEX_TAB_SEARCH = 3546u, + MSI_FAILED_PET_AUTO_FEEDING_BY_ITEMACTION = 3547u, + MSI_FAILED_HOMUN_AUTO_FEEDING_BY_ITEMACTION = 3548u, + MSI_MSI_INVENTORY_TABNAME_4 = 3549u, + MSI_BARTERITEM_NAME_COUNT = 3550u, + MSI_EXCHANGED_FAILED = 3551u, + MSI_EXCHANGED_SUCCEEDED = 3552u, + MSI_NO_ITEM_FOR_EXCHANGE = 3553u, + MSI_ITEM_OUT_OF_STOCK = 3554u, + MSI_DEAD = 3555u, + MSI_PVP = 3556u, + MSI_INVENTORY_EXTEND_OF_BODYITEM = 3557u, + MSI_INVENTORY_EXTEND = 3558u, + MSI_INVENTORY_EXTEND_FAILED = 3559u, + MSI_INVENTORY_EXTEND_FAILED_ANOTHER_WORK = 3560u, + MSI_INVENTORY_EXTEND_FAILED_NO_ITEM = 3561u, + MSI_INVENTORY_EXTEND_FAILED_MAX_OVER = 3562u, + MSI_INVENTORY_EXTEND_SUCCESS = 3563u, + MSI_LIMIT_BUY_ITEM3 = 3564u, + MSI_EXCEED_LIMITED_ITEMNUM = 3565u, + MSI_BUY_ONE_AT_A_TIME = 3566u, + MSI_STAR_EMPEROR = 3567u, + MSI_SOUL_REAPER = 3568u, + MSI_SAVE_HOTKEY_TO_SERVER = 3569u, + MSI_TRANSLATE_CAPTURE_MONSTER = 3570u, + MSI_TRANSLATE_MESSAGE = 3571u, + MSI_TRANSLATE_TITLE = 3572u, + MSI_EXTEND_DAMAGE_RANGE = 3573u, + MSI_SHOW_NAME_OF_ENTERED_MAP = 3574u, + MSI_SYSTEM_MSG_MERCHANTSHOP = 3575u, + MSI_VSYNC = 3576u, + MSI_WEBSITE_LINK_BTN_TOOLTIP = 3577u, + MSI_WEBSITE_LINK_ADDRESS = 3578u, + MSI_OUTSIDE_CASHSHOP_BTN_TOOLTIP = 3579u, + MSI_LIMIT_FRAME = 3580u, + MSI_USESKILL_FAIL_OVER_INSTALLATION = 3581u, + MSI_NAVIGATION_DESTINATION = 3582u, + MSI_EMBLEM_UPLOAD_FAILED_BUSY = 3583u, + MSI_EMBLEM_REGIST_FAILED_INCORRECT_SIZE = 3584u, + MSI_RODEX_BUTTON_DELETE_SELECTED = 3585u, + MSI_RODEX_BUTTON_DELETE_ALL = 3586u, + MSI_RODEX_MESSAGE_DELETE_ALL = 3587u, + MSI_RODEX_BUTTON_RECEIVE_SELECTED = 3588u, + MSI_RODEX_BUTTON_RECEIVE_ALL = 3589u, + MSI_RODEX_MESSAGE_RECEIVE_SELECTED = 3590u, + MSI_RODEX_MESSAGE_RECEIVE_ALL = 3591u, + MSI_HOTKEYWND_SKILLBAR2 = 3592u, + MSI_CHANGE_SKILLBER = 3593u, + MSI_HOTKEYGUIDEWND_LEFT = 3594u, + MSI_HOTKEYGUIDEWND_UP = 3595u, + MSI_HOTKEYGUIDEWND_RIGHT = 3596u, + MSI_HOTKEYGUIDEWND_DOWN = 3597u, + MSI_HOTKEYGUIDEWND_APPS = 3598u, + MSI_HOTKEYGUIDEWND_BACK = 3599u, + MSI_WARNINGMSG_LOADING = 3600u, + MSI_USESKILL_FAIL_SPELLBOOK_NONE = 3601u, + MSI_USE_WORLDMAP_WITH_PERIOD_MSG1 = 3602u, + MSI_USE_WORLDMAP_WITH_PERIOD_MSG2 = 3603u, + MSI_USE_WORLDMAP_WITH_PERIOD_MSG3 = 3604u, + MSI_BTN_MESSAGE_APPLY = 3605u, + MSI_BTN_MESSAGE_STOP = 3606u, + MSI_USE_WORLDMAP_WITH_PERIOD_MSG4 = 3607u, + MSI_USE_WORLDMAP_WITH_PERIOD_MSG5 = 3608u, + MSI_USE_WORLDMAP_WITH_PERIOD_MSG6 = 3609u, + MSI_ADVANCED_STATUS = 3610u, + MSI_DESC_POW = 3611u, + MSI_DESC_STA = 3612u, + MSI_DESC_WIS = 3613u, + MSI_DESC_SPL = 3614u, + MSI_DESC_CON = 3615u, + MSI_DESC_CRT = 3616u, + MSI_DESC_ADV_STATUS_POWER_ATK = 3617u, + MSI_DESC_ADV_STATUS_SPELL_MATK = 3618u, + MSI_DESC_ADV_STATUS_STAMINA_RESIST = 3619u, + MSI_DESC_ADV_STATUS_WISDOM_MRESIST = 3620u, + MSI_DESC_ADV_STATUS_CREATIVE_HEALPULS = 3621u, + MSI_DESC_ADV_STATUS_CREATIVE_CRIDAMAGE_RATE = 3622u, + MSI_DESC_ADV_POINT = 3623u, + MSI_BASICINFO_JOBLEVEL2 = 3624u, + MSI_BASICINFO_AP = 3625u, + MSI_GUILD_AGIT_MOVE_AGIT = 3626u, + MSI_GUILD_AGIT_INVESTMENT_INFO = 3627u, + MSI_GUILD_AGIT_ARE_YOU_MOVE_AGIT = 3628u, + MSI_GUILD_AGIT_SHOW_INVESTMENT_INFO = 3629u, + MSI_GUILD_AGIT_MOVE_FAIL_MAP = 3630u, + MSI_NOT_LEARN_BASIC_SKILL = 3631u, + MSI_BAN_IP_BLOCK_FOR_ZERO = 3632u, + MSI_TOOLTIP_OF_OPTIONOFF_BTN = 3633u, + MSI_MCSTORE_BACKUP = 3634u, + MSI_MCSTORE_BACKUP_TOOLTIP = 3635u, + MSI_BAN_LOGIN_IS_RESTRICTED = 3636u, + MSI_GUILD_AGIT_AGIT_MESSAGE = 3637u, + MSI_WARNING_UNDER_AGE_MSG1 = 3638u, + MSI_WARNING_UNDER_AGE_MSG2 = 3639u, + MSI_USESKILL_FAIL_AP_INSUFFICIENT = 3640u, + MSI_LAPINE_FAIL_REFINING_LEVEL_OVERFLOW_NEEDED = 3641u, + MSI_LAPINE_WARNING_REFINING_LEVEL_HIGHER_THAN_NEEDED = 3642u, + MSI_LAPINE_WARNING_HAS_CARD_OR_ENCHANTED = 3643u, + MSI_ITEM_COUNT_INFINITY = 3644u, + MSI_ITEMSHOP_CURRENCY = 3645u, + MSI_PURCHASEWND_TOTAL = 3646u, + MSI_ACCOUNT_LIMITED_TOOL_TITLE = 3647u, + MSI_ACCOUNT_LIMITED_DB_NAME = 3648u, + MSI_ACCOUNT_LIMITED_TOOL_DB_NUMBER = 3649u, + MSI_ACCOUNT_LIMITED_TOOL_SELL_COUNT = 3650u, + MSI_ACCOUNT_LIMITED_TOOL_SELL_STARTTIME = 3651u, + MSI_ACCOUNT_LIMITED_TOOL_SELL_ENDTIME = 3652u, + MSI_ACCOUNT_LIMITED_SALE_ITEM = 3653u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_START_DATE = 3654u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_NUM = 3655u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_LIMIT_NUM = 3656u, + MSI_ACCOUNT_LIMITED_TOOL_RESULT_FORMAT = 3657u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_SOLD_OUT = 3658u, + MSI_MAP_PROPERTY_DISABLE_CALLED = 3659u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_NEXT_DATE = 3660u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_DONT_MOVE_CART = 3661u, + MSI_CANNOT_EXCHANGE_ITEMS = 3662u, + MSI_QUIT_EXIT_AFTER_GUILD_CLOSE = 3663u, + MSI_HAVE_ITEMTAG = 3664u, + MSI_MONSTER_MONSTERINFO = 3665u, + MSI_UNKNOWN_MONSTERINFO = 3666u, + MSI_UNDEAD_MONSTERINFO = 3667u, + MSI_ANIMAL_MONSTERINFO = 3668u, + MSI_PLANT_MONSTERINFO = 3669u, + MSI_INSECT_MONSTERINFO = 3670u, + MSI_MARINE_MONSTERINFO = 3671u, + MSI_DEVIL_MONSTERINFO = 3672u, + MSI_HUMAN_MONSTERINFO = 3673u, + MSI_ANGEL_MONSTERINFO = 3674u, + MSI_DRAGON_MONSTERINFO = 3675u, + MSI_NC_CASH_INNOVA = 3676u, + MSI_BUY_RECONFIRM_CASHSTRINGFMT = 3677u, + MSI_BUY_RECONFIRM2_CASHSTRINGFMT = 3678u, + MSI_CALL_REJECTED = 3679u, + MSI_BUYINGSTORE_MAKEWND_LIMITZENY_NOT_OVER_MYMONEY = 3680u, + MSI_BUYINGSTORE_MAKEWND_FAIL_CLOSE_UI = 3681u, + MSI_SAVE_SELL_STORE_ITEMLIST = 3682u, + MSI_SAVE_BUY_STORE_ITEMLIST = 3683u, + MSI_REFUSE_VTC_AUTH_FAILED = 3684u, + MSI_EQUIP_FAIL_DURING_BARTER = 3685u, + MSI_BARTER_ITEMLIST = 3686u, + MSI_UPGRADESKILLERROR_MORE_THIRDJOBSKILL = 3687u, + MSI_LIMIT_HAVE_ITEM_CNT = 3688u, + MSI_EXCHANGE_ITEM_CNT = 3689u, + MSI_GLOBALRODEX_NOT_ABLE_TO_OPEN_MAIL_IN_CUR_SERVER = 3690u, + MSI_GLOBALRODEX_MESSAGE_DELETE_ALL_ON_ADMIN = 3691u, + MSI_GLOBALRODEX_MESSAGE_RECEIVE_ALL = 3692u, + MSI_GLOBALRODEX_REFUSE_DELETING = 3693u, + MSI_GLOBALRODEX_REFUSE_RECEIVING = 3694u, + MSI_GLOBALRODEX_REFUSE_READING = 3695u, + MSI_TOTAL_NEED_MONEY = 3696u, + MSI_NORMAL_MESSAGEBOX_CAPTION = 3697u, + MSI_RESTRICT_OPENING_BUYINGSTORE_FAIL_OPEN_BUYINGSTORE = 3698u, + MSI_ITEM_GRADE_ENCHANT_SUCCEESS = 3699u, + MSI_ITEM_GRADE_ENCHANT_FAIL = 3700u, + MSI_ITEM_GRADE_ENCHANT_FAIL_DOWNGRADE = 3701u, + MSI_ITEM_GRADE_ENCHANT_FAIL_BREAK = 3702u, + MSI_ITEM_GRADE_ENCHANT_FAIL_PROTECT = 3703u, + MSI_GRADE_ENCHANT_SOURCE_NOT_SELECT = 3704u, + MSI_GRADE_ENCHANT_SOURCE_ENOUGH = 3705u, + MSI_GRADE_ENCHANT_MONEY_ENOUGH = 3706u, + MSI_GRADE_ENCHANT_INVENTORY_ENOUGH = 3707u, + MSI_GRADE_ENCHANT_ITEM_PROTECT = 3708u, + MSI_GRADE_ENCHANT_ITEM_NOT_PROTECT = 3709u, + MSI_GRADE_ENCHANT_ITEM_DOWNGRADE = 3710u, + MSI_CLOSE_RODEX_FOR_GRADE_ENCHANT = 3711u, + MSI_CANNOT_OPEN_RODEX_DURING_GRADE_ENCHANT = 3712u, + MSI_CLOSE_BANKING_FOR_GRADE_ENCHANT = 3713u, + MSI_CANNOT_OPEN_BANKING_DURING_GRADE_ENCHANT = 3714u, + MSI_BROADCASTING_GRADE_ENCHANT_SUCCESS = 3715u, + MSI_BROADCASTING_GRADE_ENCHANT_FAIL = 3716u, + MSI_CANNOT_GRADE_ENCHANT_ITEM = 3717u, + MSI_CHANGE_MATERIAL = 3718u, + MSI_CHANGE_MATERIAL_SORT = 3719u, + MSI_CHANGE_MATERIAL_MESSAGE = 3720u, + MSI_CHANGE_MATERIAL_SUCCESS_RATE = 3721u, + MSI_MSG_IS_ILLEGAL_TAG_MSG = 3722u, + MSI_IQ_POWERFUL_FAITH_ON = 3723u, + MSI_IQ_POWERFUL_FAITH_OFF = 3724u, + MSI_IQ_FIRM_FAITH_ON = 3725u, + MSI_IQ_FIRM_FAITH_OFF = 3726u, + MSI_IQ_SINCERE_FAITH_ON = 3727u, + MSI_IQ_SINCERE_FAITH_OFF = 3728u, + MSI_CD_BENEDICTUM_ON = 3729u, + MSI_CD_BENEDICTUM_OFF = 3730u, + MSI_CD_RELIGIO_ON = 3731u, + MSI_CD_RELIGIO_OFF = 3732u, + MSI_CD_COMPETENTIA_ON = 3733u, + MSI_CD_COMPETENTIA_OFF = 3734u, + MSI_CD_PRESENS_ACIES_ON = 3735u, + MSI_CD_PRESENS_ACIES_OFF = 3736u, + MSI_CD_ARGUTUS_TELUM_ON = 3737u, + MSI_CD_ARGUTUS_TELUM_OFF = 3738u, + MSI_CD_ARGUTUS_VITA_ON = 3739u, + MSI_CD_ARGUTUS_VITA_OFF = 3740u, + MSI_ITEMNUM_AND_WEIGHT = 3741u, + MSI_DK_SERVANTWEAPON_OFF = 3742u, + MSI_DK_CHARGINGPIERCE_OFF = 3743u, + MSI_DK_VIGOR_OFF = 3744u, + MSI_IG_ATTACK_STANCE_ON = 3745u, + MSI_IG_ATTACK_STANCE_OFF = 3746u, + MSI_IG_GUARD_STANCE_ON = 3747u, + MSI_IG_GUARD_STANCE_OFF = 3748u, + MSI_IG_GUARDIAN_SHIELD_ON = 3749u, + MSI_IG_GUARDIAN_SHIELD_OFF = 3750u, + MSI_IG_REBOUND_SHIELD_ON = 3751u, + MSI_IG_REBOUND_SHIELD_OFF = 3752u, + MSI_IG_HOLY_SHIELD_ON = 3753u, + MSI_IG_HOLY_SHIELD_OFF = 3754u, + MSI_IG_ULTIMATE_SACRIFICE_ON = 3755u, + MSI_IG_ULTIMATE_SACRIFICE_OFF = 3756u, + MSI_AG_CLIMAX_ON = 3757u, + MSI_AG_CLIMAX_OFF = 3758u, + MSI_SHC_SHADOW_EXCEED_ON = 3759u, + MSI_SHC_SHADOW_EXCEED_OFF = 3760u, + MSI_SHC_POTENT_VENOM_ON = 3761u, + MSI_SHC_POTENT_VENOM_OFF = 3762u, + MSI_SHC_ENCHANTING_SHADOW_ON = 3763u, + MSI_SHC_ENCHANTING_SHADOW_OFF = 3764u, + MSI_HUNTING_QUEST_INFO_ON = 3765u, + MSI_HUNTING_QUEST_INFO_OFF = 3766u, + MSI_TARGET_AP_MAX = 3767u, + MSI_BUY_RECONFIRM1_2019 = 3768u, + MSI_BUY_RECONFIRM2_2019 = 3769u, + MSI_FAIL_EMPTY_SERVANTWEAPON = 3770u, + MSI_BILLING_INFO_URL = 3771u, + MSI_CHANGE_MATERIAL_INVSORT = 3772u, + MSI_CHANGE_MATERIAL_SEARCHTEXT = 3773u, + MSI_SEARCH = 3774u, + MSI_BO_RESEARCHREPORT_ON = 3775u, + MSI_BO_RESEARCHREPORT_OFF = 3776u, + MSI_BO_BIONIC_PHARMACY_OK = 3777u, + MSI_BO_BIONIC_PHARMACY_FAIL = 3778u, + MSI_BO_ADVANCE_PROTECTION_ON = 3779u, + MSI_BO_ADVANCE_PROTECTION_OFF = 3780u, + MSI_BO_HELLTREE_ON = 3781u, + MSI_BO_HELLTREE_OFF = 3782u, + MSI_MT_A_MACHINE_ON = 3783u, + MSI_MT_A_MACHINE_OFF = 3784u, + MSI_MT_D_MACHINE_ON = 3785u, + MSI_MT_D_MACHINE_OFF = 3786u, + MSI_CASHSHOP_TAB_SEARCH = 3787u, + MSI_TR_KVASIR_SONATA_ON = 3788u, + MSI_TR_KVASIR_SONATA_OFF = 3789u, + MSI_TR_MYSTIC_SYMPHONY_ON = 3790u, + MSI_TR_MYSTIC_SYMPHONY_OFF = 3791u, + MSI_TR_GEF_NOCTURN_ON = 3792u, + MSI_TR_GEF_NOCTURN_OFF = 3793u, + MSI_TR_AIN_RHAPSODY_ON = 3794u, + MSI_TR_AIN_RHAPSODY_OFF = 3795u, + MSI_TR_MUSICAL_INTERLUDE_ON = 3796u, + MSI_TR_MUSICAL_INTERLUDE_OFF = 3797u, + MSI_TR_JAWAII_SERENADE_ON = 3798u, + MSI_TR_JAWAII_SERENADE_OFF = 3799u, + MSI_TR_PRON_MARCH_ON = 3800u, + MSI_TR_PRON_MARCH_OFF = 3801u, + MSI_WH_CALAMITYGALE_ON = 3802u, + MSI_WH_CALAMITYGALE_OFF = 3803u, + MSI_WH_WIND_SIGN_ON = 3804u, + MSI_WH_WIND_SIGN_OFF = 3805u, + MSI_THAI_PERSONALINFO_EXP2 = 3806u, + MSI_THAI_PERSONALINFO_DROP2 = 3807u, + MSI_THAI_PERSONALINFO_DEATH2 = 3808u, + MSI_EM_SPELL_ENCHANTING_ON = 3809u, + MSI_EM_SPELL_ENCHANTING_OFF = 3810u, + MSI_ABC_FROM_THE_ABYSS_OFF = 3811u, + MSI_ABC_ABYSS_SLAYER_ON = 3812u, + MSI_ABC_ABYSS_SLAYER_OFF = 3813u, + MSI_CHARACTER_MAKING_RESTRICT = 3814u, + MSI_BAN_THAI_GGT_RESTRICTED_MAKE_CHAR = 3815u, + MSI_UNBLOCK_CHAT = 3816u, + MSI_BLOCK_CHAT = 3817u, + MSI_GRADE_ENCHANT_REFINING_LEVEL_LACK = 3818u, + MSI_GRADE_ENCHANT_ITEM_UNBREAKABLE = 3819u, + MSI_GRADE_ENCHANT_ADDITIONAL_SOURCE_NOT_SELECT = 3820u, + MSI_CHEAT_HASHFILE = 3821u, + MSI_GUILD_AGIT_TITLE = 3822u, + MSI_MERCHANTSHOP_TOTA_LOVER_ZENY_ERR = 3823u, + MSI_REPUTE_WND = 3824u, + MSI_REPUTE_POINT = 3825u, + MSI_REPUTE_TOTAL = 3826u, + MSI_REPUTE_NOW_LOADING = 3827u, + MSI_GRADE_ENCHANT_ADDITIONAL_SOURCE_RESET = 3828u, + MSI_ENCHANT = 3829u, + MSI_ENCHANT_TAB_GENERAL = 3830u, + MSI_ENCHANT_TAB_PERFECT = 3831u, + MSI_ENCHANT_TAB_UPGRADE = 3832u, + MSI_ENCHANT_TAB_RESET = 3833u, + MSI_ENCHANT_FAILED_OVER_WEIGHT = 3834u, + MSI_ENCHANT_RANDOM_BUTTON = 3835u, + MSI_ENCHANT_PERFECT_BUTTON = 3836u, + MSI_ENCHANT_UPGRADE_BUTTON = 3837u, + MSI_ENCHANT_RESET_BUTTON = 3838u, + MSI_CLOSE_RODEX_FOR_ENCHANT = 3839u, + MSI_CANNOT_OPEN_RODEX_DURING_ENCHANT = 3840u, + MSI_CLOSE_BANKING_FOR_ENCHANT = 3841u, + MSI_CANNOT_OPEN_BANKING_DURING_ENCHANT = 3842u, + MSI_ENCHANT_REQUEST = 3843u, + MSI_ITEM_REFORM_OK = 3844u, + MSI_ITEM_REFORM_WARNNING_NOT_ENOUGH_MATERIAL = 3845u, + MSI_ITEM_REFORM_WARNNING_CARD_ENCHANT_LOST = 3846u, + MSI_ITEM_REFORM_WARNNING_CARD_MAYBE_LOST = 3847u, + MSI_ITEM_REFORM_WARNNING_ENCHANT_MAYBE_LOST = 3848u, + MSI_HIDE_PLAYER_ON = 3849u, + MSI_HIDE_PLAYER_OFF = 3850u, + MSI_ITEM_REFORM_CONFIRM_DETAILS = 3851u, + MSI_ITEM_REFORM_PLZ_CHECK_DETAILS = 3852u, + MSI_ITEM_REFORM_NO_EXIST_TARGET_ITEM = 3853u, + MSI_ENCHANT_SUCCESS = 3854u, + MSI_ENCHANT_FAILED = 3855u, + MSI_CANNOT_FIND_ENCHANT_ID = 3856u, + MSI_NOT_SATISFIED_ENCHANT_CONDITION = 3857u, + MSI_RODEX_SPAMOPTION_FAIL = 3858u, + MSI_RODEX_SPAMOPTION_ON = 3859u, + MSI_RODEX_SPAMOPTION_OFF = 3860u, + MSI_RODEX_SPAMOPTION_USERBLOCK = 3861u, + MSI_RODEX_SPAMOPTION_RETURN_SUCCESS = 3862u, + MSI_RODEX_SPAMOPTION_RETURN_FAIL = 3863u, + MSI_RODEX_SPAMOPTION_WARNING = 3864u, + MSI_RODEX_SPAMOPTION = 3865u, + MSI_EFST_ITEM_TIME_LIMIT_EXCEED = 3866u, + MSI_GRADE_ENCHANT_SUCCESS_REFINING_LEVEL_DISAPPEAR = 3867u, + MSI_GRADE_ENCHANT_SUCCESS_RANDOM_OPT_ENCHANT_KEEP = 3868u, + MSI_GRADE_ENCHANT_FAILED_REFINING_RANDOM_OPT_ENCHANT_KEEP = 3869u, + MSI_HOTKEY_RESET = 3870u, + MSI_HOTKEY_OLD_VER = 3871u, + MSI_EXP_BAR_BASE_LV = 3872u, + MSI_EXP_BAR_JOB_LV = 3873u, + MSI_BASIC_INFO_LV_NAME = 3874u, + MSI_MENU_ICON_QUEST = 3875u, + MSI_MENU_ICON_CASHSHOP = 3876u, + MSI_MENU_ICON_HOTKEY = 3877u, + MSI_MENU_ICON_ADVENTURER_AGENCY = 3878u, + MSI_NEWUI_ZERO_ONOFF = 3879u, + MSI_NEWUI_ZERO_UIOLD = 3880u, + MSI_NEWUI_ZERO_UINEW = 3881u, + MSI_NEWUI_ZERO_UISKIN = 3882u, + MSI_NEW_RANDOM_OPTION = 3883u, + MSI_MONSTERINFO_TRIBE_UNKNOWN = 3884u, + MSI_MONSTERINFO_TRIBE_UNDEAD = 3885u, + MSI_MONSTERINFO_TRIBE_ANIMAL = 3886u, + MSI_MONSTERINFO_TRIBE_PLANT = 3887u, + MSI_MONSTERINFO_TRIBE_INSECT = 3888u, + MSI_MONSTERINFO_TRIBE_MARINE = 3889u, + MSI_MONSTERINFO_TRIBE_DEVIL = 3890u, + MSI_MONSTERINFO_TRIBE_HUMAN = 3891u, + MSI_MONSTERINFO_TRIBE_ANGEL = 3892u, + MSI_MONSTERINFO_TRIBE_DRAGON = 3893u, + MSI_MONSTERINFO_PROPERTY_NEUTURAL = 3894u, + MSI_MONSTERINFO_PROPERTY_WATER = 3895u, + MSI_MONSTERINFO_PROPERTY_EARTH = 3896u, + MSI_MONSTERINFO_PROPERTY_FIRE = 3897u, + MSI_MONSTERINFO_PROPERTY_WIND = 3898u, + MSI_MONSTERINFO_PROPERTY_POISON = 3899u, + MSI_MONSTERINFO_PROPERTY_SAINT = 3900u, + MSI_MONSTERINFO_PROPERTY_DARK = 3901u, + MSI_MONSTERINFO_PROPERTY_MENTAL = 3902u, + MSI_MONSTERINFO_PROPERTY_UNDEAD = 3903u, + MSI_MONSTERINFO_SIZE_SMALL = 3904u, + MSI_MONSTERINFO_SIZE_MIDDLE = 3905u, + MSI_MONSTERINFO_SIZE_BIG = 3906u, + MSI_MONSTERINFO_DEF = 3907u, + MSI_BAN_TEENAGER = 3908u, + MSI_STYLINGSHOP_COLOR_RESET = 3909u, + MSI_ZEROQUEST_ALLSELECT = 3910u, + MSI_ZEROQUEST_SIMPLEUI_ON = 3911u, + MSI_CASHSHOP_FREE = 3912u, + MSI_ACCOUNT_LIMITED_TOOL_RENT_TIME = 3913u, + MSI_ACCOUNT_LIMITED_TOOL_RENT_TIME_MAX_14DAY = 3914u, + MSI_CASHSHOP_NON_TRADABLE = 3915u, + MSI_ZEROQUEST_QUESTVIEWWND_ON = 3916u, + MSI_ZEROQUEST_QUESTVIEWWND_OFF = 3917u, + MSI_ZEROQUEST_QUESTVIEW_ON = 3918u, + MSI_ZEROQUEST_QUESTVIEW_OFF = 3919u, + MSI_ZEROQUEST_QUESTHELP_TITLE = 3920u, + MSI_ZEROQUEST_QUESTHELP_1 = 3921u, + MSI_ZEROQUEST_QUESTHELP_2 = 3922u, + MSI_ZEROQUEST_QUESTHELP_3 = 3923u, + MSI_ZEROQUEST_QUESTHELP_4 = 3924u, + MSI_ZEROQUEST_QUESTHELP_5 = 3925u, + MSI_ZEROQUEST_QUESTHELP_6 = 3926u, + MSI_ZEROQUEST_QUESTHELP_7 = 3927u, + MSI_ZEROQUEST_QUESTHELP_8 = 3928u, + MSI_ZEROQUEST_QUESTHELP_9 = 3929u, + MSI_ZEROQUEST_QUESTHELP_10 = 3930u, + MSI_ZEROQUEST_QUESTHELP_11 = 3931u, + MSI_ZEROQUEST_QUESTHELP_12 = 3932u, + MSI_ZEROQUEST_QUESTHELP_13 = 3933u, + MSI_ZEROQUEST_QUESTHELP_14 = 3934u, + MSI_ZEROQUEST_QUESTHELP_15 = 3935u, + MSI_TIPBOX_START_OPEN = 3936u, + MSI_RESULT_ERROR_VTC_303 = 3937u, + MSI_RESULT_ERROR_VTC_304 = 3938u, + MSI_ZEROCHATWND_RESIZE = 3939u, + MSI_ZEROCHATWND_LOCK = 3940u, + MSI_ZEROCHATWND_UNLOCK = 3941u, + MSI_ZEROCHATWND_CHATON = 3942u, + MSI_ZEROCHATWND_CHATOFF = 3943u, + MSI_ZEROCHATWND_SEND = 3944u, + MSI_ZEROCHATWND_SENDG = 3945u, + MSI_ZEROCHATWND_OPTION = 3946u, + MSI_ZEROCHATWND_STICKOFF = 3947u, + MSI_ZEROCHATWND_STICKON = 3948u, + MSI_ZEROCHATWND_ADD = 3949u, + MSI_ZEROCHATWND_DEL = 3950u, + MSI_ZEROCHATWND_ENTER = 3951u, + MSI_TAKEOFF_ALL = 3952u, + MSI_FAILED_BUSY = 3953u, + MSI_USESKILL_FAIL_NEED_TWINKLING_GALAXY_AREA = 3954u, + MSI_USESKILL_FAIL_NEED_SOULCOLLECT = 3955u, + MSI_USESKILL_FAIL_NEED_CHARMS = 3956u, + MSI_USESKILL_FAIL_NEED_GATLING_OR_SHOTGUN = 3957u, + MSI_USESKILL_FAIL_NEED_RIFLE_OR_HANDGUN = 3958u, + MSI_USESKILL_FAIL_NEED_GRANADE_OR_RIFLE = 3959u, + MSI_USESKILL_FAIL_NEED_GATLING_OR_HANDGUN = 3960u, + MSI_USESKILL_FAIL_NEED_SHOTGUN_OR_GRANADE = 3961u, + MSI_USESKILL_FAIL_NEED_SHIELD_WEAPON = 3962u, + MSI_CLOSE_BANKING_FOR_EXPANDED_BARTERMARKET = 3963u, + MSI_CANNOT_OPEN_BANKING_DURING_EXPANDED_BARTERMARKET = 3964u, + MSI_FAIL_NO_SPACE_BEHIND_THE_TARGET = 3965u, + MSI_USESKILL_FAIL_NEED_COMMUNION_WITH_SPIRIT = 3966u, + MSI_PACKAGEITEM_SLEEPSTONECURSEFAIL = 3967u, + MSI_PACKAGEITEM_BURROWFAIL = 3968u, + MSI_PACKAGEITEM_USEFAIL = 3969u, + MSI_PACKAGEITEM_SETTINGFAIL = 3970u, + MSI_PACKAGEITEM_TIME = 3971u, + MSI_PACKAGEITEM_SELECT = 3972u, + MSI_GRADE_ENCHANT_ENHANCED_UP = 3973u, + MSI_JOB_IMPERIAL_GUARD = 3974u, + MSI_JOB_ABYSS_CHASER = 3975u, + MSI_JOB_WINDHAWK = 3976u, + MSI_EMBLEM_UPLOAD_FAILED_DB = 3977u, + MSI_EMBLEM_UPLOAD_FAILED_AUTH = 3978u, + MSI_EMBLEM_UPLOAD_FAILED_FILE = 3979u, + MSI_SORT_MINIPARTY = 3980u, + MSI_PICKUP_FAILED_PARTY_MEMBER = 3981u, + MSI_BROADCASTING_SPECIAL_ITEM_OBTAIN_ADD_LEVEL = 3982u, + MSI_FAILED_ALL_RODEX_LIST = 3983u, + MSI_FAIL_CALLHOMUN_INVALID_JOBTYPE = 3984u, + MSI_FAIL_ITEMCOMPOSITION_LIST = 3985u, + MSI_DAMAGE_EQUIPMENT = 3986u, + MSI_DAMAGE_EQUIPMENT_TOOLTIP = 3987u, + MSI_DAMAGE_DIR_LEFT = 3988u, + MSI_DAMAGE_DIR_CENTER = 3989u, + MSI_DAMAGE_DIR_RIGHT = 3990u, + MSI_DAMAGE_DIR_DEFAULT = 3991u, + MSI_MACRO_CHECK_REMOVE_RUNNING = 3992u, + MSI_MACRO_CHECK_REMOVE_SUCCESS = 3993u, + MSI_MACRO_CHECK_REMOVE_NOT_EXISTS = 3994u, + MSI_MACRO_CHECK_REMOVE_OFF_SUCCESS = 3995u, + MSI_MACRO_CHECK_REMOVE_TIMESUP = 3996u, + MSI_MACRO_CHECK_REMOVE_INVALID_AID = 3997u, + MSI_NEWSEIGEMODE_SKILL = 3998u, + MSI_DYNAMICNPC_CREATE_RESULT_FAIL_MAXCOUNT = 3999u, + MSI_MACRO_DETECTOR_NOTICE4 = 4000u, + MSI_FAIL_CALLHOMUN_OVER_100LEVEL = 4001u, + MSI_FAIL_STRIPSHADOW_TO_MADO_NOTICE = 4002u, + MSI_MACRO_REPORTER_SELECT_MODE_MAP = 4003u, + MSI_MACRO_REPORTER_SELECT_MODE_QUIZ = 4004u, + MSI_MACRO_REPORTER_TOOLTIP_MAP = 4005u, + MSI_MACRO_REPORTER_TOOLTIP_QUIZ = 4006u, + MSI_MACRO_REPORTER_UNKNWON_MAP = 4007u, + MSI_MACRO_REPORTER_WRONG_NUMBER = 4008u, + MSI_MACRO_REPORTER_TOOLTIP_MAP_QUIZ_INPUT = 4009u, + MSI_MACRO_BLACKLIST_USER_CHCEK_RESULT_SUCCESS = 4010u, + MSI_MACRO_BLACKLIST_USER_CHCEK_RESULT_FAIL_COOLTIME = 4011u, + MSI_MACRO_BLACKLIST_USER_CHCEK_RESULT_FAIL_MAPNAME = 4012u, + MSI_MACRO_BLACKLIST_USER_CHCEK_RESULT_FAIL_PARAM = 4013u, + MSI_MACRO_BLACKLIST_USER_CHCEK_RESULT_FAIL_QUESTION = 4014u, + MSI_MACRO_BLACKLIST_USER_CHCEK_RESULT_FAIL_MAPNAME_COUNT = 4015u, + MSI_MACRO_BLACKLIST_USER_CHCEK_REMAIN_TIME = 4016u, + MSI_MACRO_BLACKLIST_USER_CHCEK_NOTICE1 = 4017u, + MSI_MACRO_BLACKLIST_USER_CHCEK_NOTICE2 = 4018u, + MSI_MACRO_BLACKLIST_USER_CHCEK_ANSWER_INPUT = 4019u, + MSI_WEDDING_RING_ITEM_NAME_FORMAT = 4020u, + MSI_ACCOUNT_LIMITED_TOOL_RESULT_NEWFORMAT = 4021u, + MSI_ACCOUNT_LIMITED_SALE_ITEM_NEXT_NEWDATE = 4022u, + MSI_CANNOT_ATTACK_IN_THE_PARTYWND = 4023u, + MSI_RETRY_AFTER_PROCESS = 4024u, + MSI_GUILD_EXP_TRIBUTE = 4025u, + MSI_EQUIPMENT_PROPERTIES = 4026u, + MSI_VIEW_CHANGE_EQUIPMENT_PROPERTIES_MSG = 4027u, + MSI_ALLY_CHAT_MSG = 4028u, + MSI_SEND_TO_ALLY = 4029u, + MSI_PAY_CONFIRM_BY_NYANGVINE_FRUIT = 4030u, + MSI_REFINING_POSSIBLE = 4031u, + MSI_REFINING_IMPOSSIBLE = 4032u, + MSI_ENCHANT_POSSIBLE = 4033u, + MSI_ENCHANT_IMPOSSIBLE = 4034u, + MSI_GRADE_ENCHANT_POSSIBLE = 4035u, + MSI_GRADE_ENCHANT_IMPOSSIBLE = 4036u, + MSI_RUNESYSTEM_EQUIP_OUT = 4037u, + MSI_RUNESYSTEM_EQUIP_NOTPUT = 4038u, + MSI_RUNESYSTEM_RUNESET_TITLE = 4039u, + MSI_RUNESYSTEM_RUNE_TITLE = 4040u, + MSI_RUNESYSTEM_RUNE_UPGRADEPER = 4041u, + MSI_RUNESYSTEM_RUNE_FAILDESC = 4042u, + MSI_RUNESYSTEM_RUNE_UPGRADEMAXDESC = 4043u, + MSI_RUNESYSTEM_RUNE_UNACTIVEDESC = 4044u, + MSI_RUNESYSTEM_RUNE_RUNE_NULL = 4045u, + MSI_RUNESYSTEM_RUNESET_DESC = 4046u, + MSI_RUNESYSTEM_TITLE = 4047u, + MSI_RUNESYSTEM_EQUIP_NOT = 4048u, + MSI_RUNESYSTEM_EQUIP_PUTERR = 4049u, + MSI_ADVENTURE_GUIDE = 4050u, + MSI_RUNESYSTEM_DURING_CANNOT_OPEN_RODEX = 4051u, + MSI_RUNESYSTEM_DURING_CANNOT_OPEN_BANKING = 4052u, + MSI_RUNESYSTEM_CLOSE_RODEX = 4053u, + MSI_RUNESYSTEM_CLOSE_BANKING = 4054u, + MSI_NOTIFY_JOIN_GUILD_ACCEPT_WND = 4055u, + MSI_NOTIFY_ALLY_GUILD_ACCEPT_WND = 4056u, + MSI_NOTIFY_JOIN_FRIEND_ACCEPT_WND = 4057u, + MSI_NOTIFY_JOIN_PARTY_ACCEPT_WND = 4058u, + MSI_NOTIFY_EXCHANGE_ACCEPT_WND = 4059u, + MSI_WARNING = 4060u, + MSI_RUNESYSTEM_FAILED_ITEMCREATE = 4061u, + MSI_TITLE_QUEST_BOARD_LIST = 4062u, + MSI_TITLE_QUEST_BOARD_INFO = 4063u, + MSI_MACRO_USER_REPORT = 4064u, + MSI_MACRO_USER_REPORT_COUNTLIMIT = 4065u, + MSI_MACRO_USER_REPORT_SUCCESS = 4066u, + MSI_MACRO_USER_REPORT_COOLTIME = 4067u, + MSI_MACRO_USER_REPORT_EFST_ACTIVATED = 4068u, + MSI_MACRO_USER_REPORT_PENALTY_COUNTMAX = 4069u, + MSI_MACRO_USER_REPORT_REPORTED = 4070u, + MSI_DECOM_NUM = 4071u, + MSI_RESET_CASH_EMOTION_INFO = 4072u, + MSI_RUNESYSTEM_ALREADY_EXIST = 4073u, + MSI_RUNESYSTEM_NOT_EXIST = 4074u, + MSI_RUNESYSTEM_LACK_OF_ITEM = 4075u, + MSI_RUNESYSTEM_ALREADY_EQUIPED = 4076u, + MSI_RUNESYSTEM_NOTHING_EQUIPED = 4077u, + MSI_RUNESYSTEM_INVALID_ID = 4078u, + MSI_RUNESYSTEM_MAX_LEVEL = 4079u, + MSI_RUNESYSTEM_INVALID_OWNER = 4080u, + MSI_RUNESYSTEM_TABLE_NOT_EXIT = 4081u, + MSI_RUNESYSTEM_DB_LOAD_NOT_YET = 4082u, + MSI_RUNESYSTEM_INVALID_TABLE_DATA = 4083u, + MSI_RUNESYSTEM_RUNE_UI_NOT_OPENED = 4084u, + MSI_DECOM_FAIL = 4085u, + MSI_DECOM_CANNOT_FIND_ITEM = 4086u, + MSI_DECOM_NOT_ENOUGH_INVENTORY = 4087u, + MSI_DECOM_HEAVY_INVENTORY = 4088u, + MSI_DECOM_OVER_ITEM_COUNT = 4089u, + MSI_DECOM_RUNE_UI_NOT_OPENED = 4090u, + MSI_DECOM_TABLE_NOT_EXIT = 4091u, + MSI_DECOM_NOT_ENOUGH_ITEM_COUNT = 4092u, + MSI_MACRO_USER_REPORT_NOT_USE_AREA = 4093u, + MSI_GRAPHIC_SETTING_RENDER_SYSTEM = 4094u, + MSI_PAY_CONFIRM_BY_ITEM = 4095u, + MSI_ENCHANT_MARK_1 = 4096u, + MSI_ENCHANT_MARK_2 = 4097u, + MSI_ENCHANT_MARK_3 = 4098u, + MSI_ENCHANT_MARK_4 = 4099u, + MSI_VIEW_COSTUME = 4100u, + MSI_SHORTCUT_SKILL_TOOLTIP_SP_PERCENT = 4101u, + MSI_SHORTCUT_SKILL_TOOLTIP_SP_VALUE = 4102u, + MSI_SHORTCUT_SKILL_TOOLTIP_SP_PERCENT_AP_VALUE = 4103u, + MSI_SHORTCUT_SKILL_TOOLTIP_SP_VALUE_AP_VALUE = 4104u, + MSI_SHORTCUT_SKILL_TOOLTIP_HOTKEY_SP_VALUE = 4105u, + MSI_SHORTCUT_SKILL_TOOLTIP_HOTKEY_SP_PERCENT_AP_VALUE = 4106u, + MSI_SHORTCUT_SKILL_TOOLTIP_HOTKEY_SP_VALUE_AP_VALUE = 4107u, + MSI_QUESTINFOWND_QUEST_TITLE = 4108u, + MSI_SHOW_FOOTPRINT_EFFECT = 4109u, + MSI_NO_SEARCH_RESULTS = 4110u, + MSI_CHECK_PROBABILITY = 4111u, + MSI_REFINING_BLACKSMITH_BLESSING_MSG1 = 4112u, + MSI_REFINING_BLACKSMITH_BLESSING_MSG2 = 4113u, + MSI_REFINING_BLACKSMITH_BLESSING_MSG3 = 4114u, + MSI_PROBABILITY_TITLE = 4115u, + MSI_COMPONENT_SEARCH = 4116u, + MSI_PROBABILITY = 4117u, + MSI_ITEM_HIRE_HOUR = 4118u, + MSI_REFINING_PROBABILITY_URL = 4119u, + MSI_GRADE_ENCHANT_PROBABILITY_URL = 4120u, + MSI_SELLINGSLOT_SUCCESS = 4121u, + MSI_SELLINGSLOT_ERROR_SYSTEM = 4122u, + MSI_SELLINGSLOT_ERROR_MAXSLOT = 4123u, + MSI_ETC_PROBABILITY_URL = 4124u, + MSI_ETC_PROBABILITY_WEB_CONNECT = 4125u, + MSI_GENDER_CHANGE_FAILED_CAUSE_JOB = 4126u, + MSI_GENDER_CHANGE_FAILED_CAUSE_GROUP = 4127u, + MSI_GENDER_CHANGE_FAILED_CAUSE_MARRIED = 4128u, + MSI_GENDER_CHANGE_FAILED_CAUSE_MONSTER_TRANSFORM = 4129u, + MSI_GENDER_CHANGE_MESSAGE_CONFIRM = 4130u, + MSI_GENDER_CHANGE_MESSAGE_OK = 4131u, + MSI_GENDER_CHANGE_MESSAGE_CANCEL = 4132u, + MSI_GENDER_CHANGE_MESSAGE_COMPLETE = 4133u, + MSI_MACRO_CHECKER_MAP_NOT_GM = 4134u, + MSI_MACRO_CHECKER_MAP_BANNED_MAP = 4135u, + MSI_MACRO_CHECKER_MAP_IS_COOLTIME = 4136u, + MSI_MACRO_CHECKER_MAP_SUCCESS = 4137u, + MSI_GAME_SETTINGS_TAB_BASIC = 4138u, + MSI_GAME_SETTINGS_TAB_EFFECT = 4139u, + MSI_GAME_SETTINGS_TAB_CONTROL = 4140u, + MSI_GAME_SETTINGS_TAB_GRAPHICS = 4141u, + MSI_GAME_SETTINGS_EMBLEM_FRAME = 4142u, + MSI_GAME_SETTINGS_ON = 4143u, + MSI_GAME_SETTINGS_OFF = 4144u, + MSI_GAME_SETTINGS_SHOW = 4145u, + MSI_GAME_SETTINGS_HIDE = 4146u, + MSI_GAME_SETTINGS_RODEX_SPAM_ON = 4147u, + MSI_GAME_SETTINGS_RODEX_SPAM_OFF = 4148u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY = 4149u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY_HIGH = 4150u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY_HIGH_TOOLTIP = 4151u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY_NORMAL = 4152u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY_NORMAL_TOOLTIP = 4153u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY_IDLE = 4154u, + MSI_GAME_SETTINGS_PROCESS_PRIORITY_IDLE_TOOLTIP = 4155u, + MSI_GAME_SETTINGS_AURA = 4156u, + MSI_GAME_SETTINGS_SIMPLE_AURA = 4157u, + MSI_GAME_SETTINGS_SIMPLE_AURA_OFF = 4158u, + MSI_GAME_SETTINGS_SIMPLE_AURA_ON = 4159u, + MSI_GAME_SETTINGS_DAMAGE_EXPAND = 4160u, + MSI_GAME_SETTINGS_DAMAGE_EXPAND_ON = 4161u, + MSI_GAME_SETTINGS_DAMAGE_EXPAND_OFF = 4162u, + MSI_GAME_SETTINGS_MAP_NAME = 4163u, + MSI_GAME_SETTINGS_MAP_NAME_ON = 4164u, + MSI_GAME_SETTINGS_MAP_NAME_OFF = 4165u, + MSI_GAME_SETTINGS_FOG = 4166u, + MSI_GAME_SETTINGS_FOOTPRINT_EFFECT = 4167u, + MSI_GAME_SETTINGS_FOOTPRINT_EFFECT_ALL = 4168u, + MSI_GAME_SETTINGS_SNAP = 4169u, + MSI_GAME_SETTINGS_SNAP_ATTACK = 4170u, + MSI_GAME_SETTINGS_SNAP_SKILL = 4171u, + MSI_GAME_SETTINGS_SNAP_ITEM = 4172u, + MSI_GAME_SETTINGS_NO_CTRL = 4173u, + MSI_GAME_SETTINGS_NO_CTRL_TEXT = 4174u, + MSI_GAME_SETTINGS_NO_SHIFT = 4175u, + MSI_GAME_SETTINGS_NO_SHIFT_TEXT = 4176u, + MSI_GAME_SETTINGS_ZOOM_OUT_TEXT = 4177u, + MSI_GAME_SETTINGS_MOUSE_EXCLUSIVE_TEXT = 4178u, + MSI_GAME_SETTINGS_SCREEN_MODE = 4179u, + MSI_GAME_SETTINGS_FULLSCREEN_MODE = 4180u, + MSI_GAME_SETTINGS_WINDOW_MODE = 4181u, + MSI_GAME_SETTINGS_TRILINEAR = 4182u, + MSI_MACRO_CHECKER_MAP_NOT_PROPER_MAP = 4183u, + MSI_TAREN_TRWSDK_FILTER_SENSITIVEWORDS_ERROR = 4184u, + MSI_TAREN_TRWSDK_FILTER_NO_SEND_BECAUSE_SENSITIVEWORDS_ERROR = 4185u, + MSI_REFUSE_SDK_AUTH_FAILED = 4186u, + MSI_CHECK_CHAR_DELETE_TEXT = 4187u, + MSI_BAN_BLOCK_CHARCTER_SERVER_SECOND_PASSWORD_BR = 4188u, + MSI_USESKILL_FAIL_NEED_SHOTGUN_OR_GATLING_OR_GRANADE = 4189u, + MSI_TIPTAG_FOCUS_WARNING = 4190u, + MSI_NAVIGATION_NOT_SEARCH_INMAP_MSG = 4191u, + MSI_ERRORPOPUP_TITLE = 4192u, + MSI_ERRORPOPUP_DETAIL = 4193u, + MSI_NAVIGATION_RS_REFAILTARGETROUTE = 4194u, + MSI_RUNESYSTEM_REWARD_NOTMET = 4195u, + MSI_RUNESYSTEM_REWARD_COMPLETE = 4196u, + MSI_RUNESYSTEM_REWARD_EMPTY = 4197u, + MSI_RUNESYSTEM_REWARD_FAIL = 4198u, + MSI_RUNESYSTEM_REWARD_TITLE = 4199u, + MSI_STORE_PASSWORD_ONOFF_MSG = 4200u, + MSI_CASHSHOP_PASSWORD_ONOFF_MSG = 4201u, + MSI_SECOND_PASSWORD_ONOFF_TIP_MSG = 4202u, + MSI_REMOVE_HEAD_COLOR = 4203u, + MSI_GENDER_CHANGE_FAILED_CAUSE_RIDING = 4204u, + MSI_USE_ITEM_FAILED = 4205u, + MSI_RUNESYSTEM_REWARD_CANNOT_FIND_ITEM = 4206u, + MSI_RUNESYSTEM_REWARD_MAX_INVENTORY = 4207u, + MSI_RUNESYSTEM_REWARD_HEAVY_INVENTORY = 4208u, + MSI_RUNESYSTEM_REWARD_OVER_ITEM_COUNT = 4209u, + MSI_RUNESYSTEM_REWARD_RUNE_UI_NOT_OPENED = 4210u, + MSI_RUNESYSTEM_REWARD_TABLE_NOT_EXIT = 4211u, + MSI_CANNOT_MOVE_INDOOR_MAP = 4212u, + MSI_GAME_SETTINGS_LOGINOUT = 4213u, + MSI_GAME_SETTINGS_TAB_ETC = 4214u, + MSI_GAME_SETTINGS_FOG_ON = 4215u, + MSI_GAME_SETTINGS_FOG_OFF = 4216u, + MSI_CANNOT_RECEIVE_WEBMALL_RODEX = 4217u, + MSI_DAMAGED_HEAD = 4218u, + MSI_SKILL_DELAY_INFO = 4219u, + MSI_SKILL_DELAY_INFO_CAST_FIXED = 4220u, + MSI_SKILL_DELAY_INFO_CAST_STAT = 4221u, + MSI_SKILL_DELAY_INFO_GLOBAL_POST = 4222u, + MSI_SKILL_DELAY_INFO_SINGLE_POST = 4223u, + MSI_SKILL_DELAY_INFO_CASTING = 4224u, + MSI_SKILL_DELAY_INFO_COOLTIME = 4225u, + MSI_SKILL_DELAY_INFO_LEVEL = 4226u, + MSI_DEBUFF_REMOVE = 4227u, + MSI_PENALTY_MAKE_PARTY = 4228u, + MSI_PENALTY_DEBUFF_REMOVE_NPC_ON = 4229u, + MSI_SKILL_DELAY_FLAG_DISABLE_FIXEDCASTING_REDUCTION = 4230u, + MSI_SKILL_DELAY_FLAG_NOREDUCT = 4231u, + MSI_SKILL_DELAY_INFO_SO_EL_ACTION = 4232u, + MSI_PET_DISAPPEAR = 4233u, + MSI_EMPTY = 4352u, + MSI_MAX = 4353u, +}; From db00a4849747d3bb54a48e36cd6e2a2c8c08f4b3 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:26:08 +0100 Subject: [PATCH 16/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(effects)?= =?UTF-8?q?:=20replaced=20magic=20number=202343=20with=20EF=5FUNK=5F2343?= =?UTF-8?q?=20enum=20constant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Effects/EffectLists.cpp | 2 +- Source/Contents/Effects/EffectTypes.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Contents/Effects/EffectLists.cpp b/Source/Contents/Effects/EffectLists.cpp index 59fbbee..4ac3a2b 100644 --- a/Source/Contents/Effects/EffectLists.cpp +++ b/Source/Contents/Effects/EffectLists.cpp @@ -111,7 +111,7 @@ void EffectLists::Add(int actor, CEffect* effect) { case EF_EVILS_PAW: case EF_ANIMATED_EMITTER: case EF_NEW_RANGEDATTACK: - case 2343: + case EF_UNK_2343: this->indexed[effect->id].push_back(effect); break; } diff --git a/Source/Contents/Effects/EffectTypes.h b/Source/Contents/Effects/EffectTypes.h index 1bd536c..fac794d 100644 --- a/Source/Contents/Effects/EffectTypes.h +++ b/Source/Contents/Effects/EffectTypes.h @@ -1980,6 +1980,7 @@ enum RagEffectID : std::int32_t { EF_THE_ONE_FIGHTER_RISES_BOTTOM = 2339, EF_TEMPERING = 2340, EF_BLAST_FORGE_HIT = 2342, + EF_UNK_2343 = 2343, EF_TETRA_VORTEX_WATER_SUB_2 = 2371, EF_TETRA_VORTEX_EARTH_SUB_2 = 2372, EF_NPC_20TH_CRYSTAL_S = 2376, From f0bf88d57e17ea3d1074a54ebaae1975235a0118 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:30:32 +0100 Subject: [PATCH 17/62] =?UTF-8?q?=F0=9F=94=A5=20refactor(PartyEffect):=20r?= =?UTF-8?q?emoved=20unused=20=20include?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Effects/PartyEffect.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Contents/Effects/PartyEffect.cpp b/Source/Contents/Effects/PartyEffect.cpp index a90c598..db6090e 100644 --- a/Source/Contents/Effects/PartyEffect.cpp +++ b/Source/Contents/Effects/PartyEffect.cpp @@ -6,7 +6,6 @@ #include "Render/Textures/TextureCache.h" #include -#include // OFFSET: 0x00C2CF20 // FUNCTION: fn_20088 From c3bce5ee839722324be3bf8b90416c0e3ccb3c02 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:32:45 +0000 Subject: [PATCH 18/62] Decompile fn_08041 (CPaletteRes::Unload) Batch #991 by ragnarok-clanker: 1 byte-identical, 0 confirmed by peer review. - fn_08041 CPaletteRes::Unload: byte-identical Merged automatically: every function is byte-identical to the original. Adds to the build: Source/Resource/PaletteResource.cpp --- Source/File/File.cpp | 7 ++++++- Source/File/File.h | 1 + Source/Resource/PaletteResource.cpp | 23 +++++++++++++++++++++++ Source/Resource/PaletteResource.h | 24 ++++++++++++++++++++++++ compile.json | 1 + 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 Source/Resource/PaletteResource.cpp create mode 100644 Source/Resource/PaletteResource.h diff --git a/Source/File/File.cpp b/Source/File/File.cpp index 83f7d77..33da76b 100644 --- a/Source/File/File.cpp +++ b/Source/File/File.cpp @@ -1,5 +1,8 @@ #include "Client/Application/ErrorDialog.h" #include "File/File.h" +#include "File/ResourcePath.h" +#include "Archive/PakRegistry.h" +#include "Render/DeviceContext/DCSurface.h" #include @@ -7,7 +10,7 @@ CFile::CFile() : m_handle(INVALID_HANDLE_VALUE), m_data(nullptr), m_position(0), m_size(0) { } -// OFFSET: 0x005222F0 +// OFFSET: 0x00522230 // FUNCTION: fn_01124 CFile::~CFile() { this->Close(); @@ -29,6 +32,8 @@ bool CFile::OpenWrite(const char* path, CRenderSystemBase* renderSystem) { return true; } +// OFFSET: 0x0057C030 + // OFFSET: 0x0057C340 // FUNCTION: fn_02601 bool CFile::Write(const void* data, std::uint32_t bytes) { diff --git a/Source/File/File.h b/Source/File/File.h index da5e292..5882ada 100644 --- a/Source/File/File.h +++ b/Source/File/File.h @@ -13,6 +13,7 @@ public: virtual ~CFile(); bool OpenWrite(const char* path, CRenderSystemBase* renderSystem); + bool Open(const char* path, int mode, bool resourcePath, bool option); bool Open(const char* path) { this->m_path = path; this->m_handle = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); diff --git a/Source/Resource/PaletteResource.cpp b/Source/Resource/PaletteResource.cpp new file mode 100644 index 0000000..98ce524 --- /dev/null +++ b/Source/Resource/PaletteResource.cpp @@ -0,0 +1,23 @@ +#include "Resource/PaletteResource.h" +#include "Client/Application/ErrorDialog.h" +#include "File/File.h" +#include "Render/DeviceContext/DCSurface.h" +#include "Resource/Sprites/SpriteResource.h" + +#include + +// INLINED +CPaletteRes::CPaletteRes() : sourcePalette{}, palette{} { +} + +// INLINED +CPaletteRes::~CPaletteRes() = default; + +// OFFSET: 0x0075D730 + +// OFFSET: 0x0075D7D0 + +// OFFSET: 0x0075DAF0 +// FUNCTION: fn_08041 +void CPaletteRes::Unload() { +} diff --git a/Source/Resource/PaletteResource.h b/Source/Resource/PaletteResource.h new file mode 100644 index 0000000..62bf61e --- /dev/null +++ b/Source/Resource/PaletteResource.h @@ -0,0 +1,24 @@ +#ifndef RAGNAROK_SOURCE_RESOURCE_PALETTERESOURCE_H +#define RAGNAROK_SOURCE_RESOURCE_PALETTERESOURCE_H + +#include "Resource/Resource.h" + +#include + +class CPaletteRes : public CRes { +public: + CPaletteRes(); + ~CPaletteRes() override; + CPaletteRes* Create() override; + bool Load(const char* name) override; + void Unload() override; + + /* 0110 */ std::uint8_t sourcePalette[1024]; + /* 0510 */ std::uint32_t palette[256]; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(CPaletteRes) == 0x910); +#endif + +#endif diff --git a/compile.json b/compile.json index c3bf9fd..b982c81 100644 --- a/compile.json +++ b/compile.json @@ -480,6 +480,7 @@ "Source/Resource/Models/ModelMesh.cpp": 3, "Source/Resource/Models/ModelResource.cpp": 3, "Source/Resource/Models/ModelResourceV2.cpp": 3, + "Source/Resource/PaletteResource.cpp": 3, "Source/Resource/Resource.cpp": 3, "Source/Resource/ResourceAliases.cpp": 3, "Source/Resource/ResourceFailures.cpp": 3, From 30200c77da6e37b1df7e1142389a205d57e2f618 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:38:35 +0100 Subject: [PATCH 19/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(EmblemDa?= =?UTF-8?q?taDownloadAsyncWork):=20replaced=20cstdio=20include=20with=20st?= =?UTF-8?q?dio.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Emblems/EmblemDataDownloadAsyncWork.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Contents/Emblems/EmblemDataDownloadAsyncWork.cpp b/Source/Contents/Emblems/EmblemDataDownloadAsyncWork.cpp index fab276d..3a51894 100644 --- a/Source/Contents/Emblems/EmblemDataDownloadAsyncWork.cpp +++ b/Source/Contents/Emblems/EmblemDataDownloadAsyncWork.cpp @@ -3,7 +3,7 @@ #include "Network/Http/CURLPostHander.h" #include "Network/TextEncoding.h" -#include +#include #include #include From 5aafb686ccddaa9c1973e564eed81ba422929543 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:42:20 +0100 Subject: [PATCH 20/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(strings)?= =?UTF-8?q?:=20wrote=20CP949=20Korean=20literals=20as=20UTF-8=20Hangul=20w?= =?UTF-8?q?ith=20/source-charset:utf-8=20/execution-charset:.949?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Effects/RagEffectInitialization.cpp | 36 +++++++++---------- Source/Contents/Ground/GroundWaterState.cpp | 2 +- Source/Contents/Items/ItemDescription.cpp | 2 +- Source/Contents/Items/ItemResources.cpp | 8 ++--- .../Contents/Jobs/JobNameInitialization.cpp | 6 ++-- Source/Contents/Sound/SoundMgr.cpp | 2 +- Source/Resource/Models/ModelResource.cpp | 8 ++--- Source/Resource/Models/ModelResourceV2.cpp | 4 +-- Source/Resource/TextureNames.cpp | 2 +- Source/UI/Acceptance/UIChooseSellBuyWnd.cpp | 2 +- Source/UI/Buttons/UIBasicButton.cpp | 2 +- Source/UI/Buttons/UIButton.cpp | 6 ++-- Source/UI/Lists/UIComboBoxDefWnd.cpp | 2 +- Source/UI/Lists/UIComboBoxEx.cpp | 4 +-- Source/UI/Lists/UIListBox.cpp | 2 +- Source/UI/Lists/UIListBoxEx.cpp | 2 +- Source/UI/Lists/UIScrollBar.cpp | 2 +- Source/UI/Lists/UIScrollBarNavi.cpp | 2 +- Source/UI/Party/UIAdvenPartyBoardWnd.cpp | 6 ++-- Source/UI/Party/UIApplyForPartyWnd.cpp | 2 +- Source/UI/Party/UIPartyInfoWnd.cpp | 2 +- Source/UI/Party/UIRegisterPartyWnd.cpp | 2 +- Source/UI/Party/UIRequestJoinPartyWnd.cpp | 2 +- Source/UI/Shortcuts/ShortcutControls.cpp | 6 ++-- Source/UI/Shortcuts/ShortcutPainting.cpp | 2 +- Source/UI/Text/UITextViewer.cpp | 2 +- Source/UI/Window/UIFrameWnd.cpp | 6 ++-- Source/UI/Window/UIMessageBox.cpp | 2 +- compile.json | 20 +++++++++++ 29 files changed, 83 insertions(+), 63 deletions(-) diff --git a/Source/Contents/Effects/RagEffectInitialization.cpp b/Source/Contents/Effects/RagEffectInitialization.cpp index e2d0458..26bd8df 100644 --- a/Source/Contents/Effects/RagEffectInitialization.cpp +++ b/Source/Contents/Effects/RagEffectInitialization.cpp @@ -303,22 +303,22 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti std::sprintf(name, "Pong%d.str", std::rand() % 3 + 1); break; case 204: - std::sprintf(name, "\273\241\260\243\306\367\274\307.str"); + std::sprintf(name, "빨간포션.str"); break; case 205: - std::sprintf(name, "\301\326\310\253\306\367\274\307.str"); + std::sprintf(name, "주홍포션.str"); break; case 206: - std::sprintf(name, "\263\353\266\365\306\367\274\307.str"); + std::sprintf(name, "노란포션.str"); break; case 207: - std::sprintf(name, "\307\317\276\341\306\367\274\307.str"); + std::sprintf(name, "하얀포션.str"); break; case 208: - std::sprintf(name, "\306\304\266\365\306\367\274\307.str"); + std::sprintf(name, "파란포션.str"); break; case 209: - std::sprintf(name, "\303\312\267\317\306\367\274\307.str"); + std::sprintf(name, "초록포션.str"); break; case 210: std::sprintf(name, "fruit.str"); @@ -333,23 +333,23 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti std::sprintf(name, "Keeping.str"); break; case 218: - std::sprintf(name, "\301\375\301\337.str"); + std::sprintf(name, "집중.str"); break; case 219: - std::sprintf(name, "\260\242\274\272.str"); + std::sprintf(name, "각성.str"); break; case 220: case 756: - std::sprintf(name, "\271\366\274\255\305\251.str"); + std::sprintf(name, "버서크.str"); break; case 234: std::sprintf(name, "spell.str"); break; case 235: - std::sprintf(name, "\265\360\275\272\306\347.str"); + std::sprintf(name, "디스펠.str"); break; case 244: - std::sprintf(name, "\270\305\301\367\267\316\265\345.str"); + std::sprintf(name, "매직로드.str"); break; case 245: std::sprintf(name, "holy_cross.str"); @@ -391,7 +391,7 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti std::sprintf(name, "strip_helm.str"); break; case 273: - std::sprintf(name, "\277\254\310\257.str"); + std::sprintf(name, "연환.str"); break; case 305: std::sprintf(name, "p_success.str"); @@ -419,16 +419,16 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti std::sprintf(name, "sword.str"); break; case 406: - std::sprintf(name, "\274\322\277\357\271\370.str"); + std::sprintf(name, "소울번.str"); break; case 407: - std::sprintf(name, "\273\347\266\367\310\277\260\372.str"); + std::sprintf(name, "사람효과.str"); break; case 440: std::sprintf(name, "asum.str"); break; case 491: - std::sprintf(name, "\302\375\275\322\266\261.str"); + std::sprintf(name, "찹쌀떡.str"); break; case 492: std::sprintf(name, "ramadan.str"); @@ -486,10 +486,10 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti std::sprintf(name, "icy.str"); break; case 646: - std::sprintf(name, "\306\256\267\242\305\267.str"); + std::sprintf(name, "트랙킹.str"); break; case 649: - std::sprintf(name, "\272\322\275\272\276\306\300\314.str"); + std::sprintf(name, "불스아이.str"); break; case 668: case 670: @@ -523,7 +523,7 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti std::sprintf(name, "ado.str"); break; case 722: - std::sprintf(name, "\300\314\261\327\264\317\274\307\272\352\267\271\300\314\305\251.str"); + std::sprintf(name, "이그니션브레이크.str"); break; case 727: std::sprintf(name, "crimson_r.str"); diff --git a/Source/Contents/Ground/GroundWaterState.cpp b/Source/Contents/Ground/GroundWaterState.cpp index 4f53150..bc0a58c 100644 --- a/Source/Contents/Ground/GroundWaterState.cpp +++ b/Source/Contents/Ground/GroundWaterState.cpp @@ -69,7 +69,7 @@ float GroundWaterState::Level(int width, int height, int column, int row) const // FUNCTION: fn_17581 void GroundWaterState::Update(TextureCache& textures) { // STATIC: 0x01159248 - constexpr char format[] = "\xBF\xF6\xC5\xCD\\water%d%02d.jpg"; + constexpr char format[] = "워터\\water%d%02d.jpg"; char name[32]{}; for (GroundWaterSurface& surface : this->surfaces) { diff --git a/Source/Contents/Items/ItemDescription.cpp b/Source/Contents/Items/ItemDescription.cpp index fa417a0..eb31133 100644 --- a/Source/Contents/Items/ItemDescription.cpp +++ b/Source/Contents/Items/ItemDescription.cpp @@ -89,7 +89,7 @@ ITEM_DESC& ItemDescriptions::Ensure(int id) { void ItemDescriptions::IconPath(char* output, const char* id, int identified) { const ITEM_DESC& value = this->Find(std::atoi(id)); const char* resource = identified != 0 ? value.identifiedResource : value.unidentifiedResource; - std::sprintf(output, "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\item\\%s.bmp", resource); + std::sprintf(output, "유저인터페이스\\item\\%s.bmp", resource); } // OFFSET: 0x006D5730 diff --git a/Source/Contents/Items/ItemResources.cpp b/Source/Contents/Items/ItemResources.cpp index df21eac..86adf84 100644 --- a/Source/Contents/Items/ItemResources.cpp +++ b/Source/Contents/Items/ItemResources.cpp @@ -9,10 +9,10 @@ // FUNCTION: fn_23391 const char* ItemDragResource(ItemDescriptions& descriptions, const char* id, int identified) { static std::string resource; - resource = "\xBE\xC6\xC0\xCC\xC5\xDB\\"; + resource = "아이템\\"; const ITEM_DESC& value = descriptions.Find(std::atoi(id)); const char* name = identified != 0 ? value.identifiedResource : value.unidentifiedResource; - resource += name ? name : "\xBB\xE7\xB0\xFA"; + resource += name ? name : "사과"; return resource.c_str(); } @@ -21,11 +21,11 @@ const char* ItemDragResource(ItemDescriptions& descriptions, const char* id, int // FUNCTION: fn_23392 const char* SkillDragResource(ResourceMgr& resources, const char* name) { static std::string resource; - resource = "\xBE\xC6\xC0\xCC\xC5\xDB\\"; + resource = "아이템\\"; resource += name; if (!resources.Exists((resource + ".act").c_str())) { - resource = "\xBE\xC6\xC0\xCC\xC5\xDB\\am_berserkpitcher"; + resource = "아이템\\am_berserkpitcher"; } return resource.c_str(); diff --git a/Source/Contents/Jobs/JobNameInitialization.cpp b/Source/Contents/Jobs/JobNameInitialization.cpp index 079c95f..284390d 100644 --- a/Source/Contents/Jobs/JobNameInitialization.cpp +++ b/Source/Contents/Jobs/JobNameInitialization.cpp @@ -56,15 +56,15 @@ void JobNames::Initialize(JobNameInitialization& context) { this->names[JT_MER_SERA] = "MER_SERA"; for (unsigned id = JT_MER_ARCHER01; id <= JT_MER_ARCHER10; ++id) { - this->names[id] = "\xBF\xA9\\\xC8\xB0\xBF\xEB\xBA\xB4"; + this->names[id] = "여\\활용병"; } for (unsigned id = JT_MER_LANCER01; id <= JT_MER_LANCER10; ++id) { - this->names[id] = "\xB3\xB2\\\xC3\xA2\xBF\xEB\xBA\xB4"; + this->names[id] = "남\\창용병"; } for (unsigned id = JT_MER_SWORDMAN01; id <= JT_MER_SWORDMAN10; ++id) { - this->names[id] = "\xB3\xB2\\\xB0\xCB\xBF\xEB\xBA\xB4"; + this->names[id] = "남\\검용병"; } context.sexLabels.resize(2, "F"); diff --git a/Source/Contents/Sound/SoundMgr.cpp b/Source/Contents/Sound/SoundMgr.cpp index 99fd358..4e3da1d 100644 --- a/Source/Contents/Sound/SoundMgr.cpp +++ b/Source/Contents/Sound/SoundMgr.cpp @@ -552,7 +552,7 @@ void CSoundMgr::PlayWave(const char* name, float x, float y, float z, int maximu return; } - static constexpr char permittedName[] = "\xB9\xF6\xC6\xB0\xBC\xD2\xB8\xAE.wav"; + static constexpr char permittedName[] = "버튼소리.wav"; if (this->unknown != 0 && std::strcmp(name, permittedName) != 0) { return; diff --git a/Source/Resource/Models/ModelResource.cpp b/Source/Resource/Models/ModelResource.cpp index d784e97..d7a6cf0 100644 --- a/Source/Resource/Models/ModelResource.cpp +++ b/Source/Resource/Models/ModelResource.cpp @@ -205,8 +205,8 @@ bool C3dModelResV1::Load(const char* name) { input.Read(magic, 4); if (std::strcmp(magic, "GRSM") != 0) { - constexpr char message[] = "\xB8\xF0\xB5\xA8\xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. \xC7\xFC\xBD\xC4\xC0\xBB " - "\xB4\xD9\xBD\xC3\xC7\xD1\xB9\xF8 \xC8\xAE\xC0\xCE\xC7\xD8\xC1\xD6\xBC\xBC\xBF\xE4."; + constexpr char message[] = "모델파일이 아닙니다. 형식을 " + "다시한번 확인해주세요."; ShowErrorDialog(this->m_context->renderSystem, message, 0); file.Close(); @@ -220,8 +220,8 @@ bool C3dModelResV1::Load(const char* name) { input.Read(&minor, 1); if (major != 1 || minor > 5) { - constexpr char message[] = "\xC1\xF6\xBF\xF8\xB5\xC7\xC1\xF6 \xBE\xCA\xB4\xC2 \xB9\xF6\xC1\xAF\xC0\xD4\xB4\xCF\xB4\xD9. " - "\xB3\xBB\xBF\xEB\xB9\xB0\xC0\xCC \xB1\xFA\xC1\xAE\xC0\xD6\xC0\xBB \xBC\xF6 \xC0\xD6\xBD\xC0\xB4\xCF\xB4\xD9"; + constexpr char message[] = "지원되지 않는 버젼입니다. " + "내용물이 깨져있을 수 있습니다"; ShowErrorDialog(this->m_context->renderSystem, message, 0); file.Close(); diff --git a/Source/Resource/Models/ModelResourceV2.cpp b/Source/Resource/Models/ModelResourceV2.cpp index e3f4ed0..41c029a 100644 --- a/Source/Resource/Models/ModelResourceV2.cpp +++ b/Source/Resource/Models/ModelResourceV2.cpp @@ -65,8 +65,8 @@ bool C3dModelResV2::Load(const char* name) { input.Read(magic, 4); if (std::strcmp(magic, "GRSM") != 0) { - constexpr char message[] = "\xB8\xF0\xB5\xA8\xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. \xC7\xFC\xBD\xC4\xC0\xBB " - "\xB4\xD9\xBD\xC3\xC7\xD1\xB9\xF8 \xC8\xAE\xC0\xCE\xC7\xD8\xC1\xD6\xBC\xBC\xBF\xE4."; + constexpr char message[] = "모델파일이 아닙니다. 형식을 " + "다시한번 확인해주세요."; ShowErrorDialog(this->m_context->renderSystem, message, 0); file.Close(); diff --git a/Source/Resource/TextureNames.cpp b/Source/Resource/TextureNames.cpp index 22622b2..e560b4b 100644 --- a/Source/Resource/TextureNames.cpp +++ b/Source/Resource/TextureNames.cpp @@ -30,7 +30,7 @@ const char* TextureNames::Resolve(const char* name) { } const std::string original(name); - constexpr char marker[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA"; + constexpr char marker[] = "유저인터페이스"; if (original.find(marker, 0, 14) == std::string::npos) { return name; diff --git a/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp b/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp index d02159a..0192af7 100644 --- a/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp +++ b/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp @@ -10,7 +10,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; } // OFFSET: 0x008C73C0 diff --git a/Source/UI/Buttons/UIBasicButton.cpp b/Source/UI/Buttons/UIBasicButton.cpp index c7846a3..497f6e1 100644 --- a/Source/UI/Buttons/UIBasicButton.cpp +++ b/Source/UI/Buttons/UIBasicButton.cpp @@ -40,7 +40,7 @@ void UIBasicButton::Paint() { if (this->m_disabled == 1 || this->geometry.unknown_0030 <= 2) { static constexpr const char* skins[] = {"out", "over", "press", "disable"}; - const std::string prefix = std::string("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\btn_") + skins[state]; + const std::string prefix = std::string("유저인터페이스\\basic_interface\\btn_") + skins[state]; const auto drawBitmap = [&](const char* suffix, int x) { auto* bitmap = static_cast(this->m_buttonContext->resources.Load((prefix + suffix).c_str())); this->DrawBitmap(x, 0, bitmap ? &bitmap->image : nullptr, false); diff --git a/Source/UI/Buttons/UIButton.cpp b/Source/UI/Buttons/UIButton.cpp index d449f30..07e03ab 100644 --- a/Source/UI/Buttons/UIButton.cpp +++ b/Source/UI/Buttons/UIButton.cpp @@ -28,9 +28,9 @@ void UIButton::Paint() { } static const char* const backgrounds[] = { - "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\sml_button_up.bmp", - "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\sml_button_act.bmp", - "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\sml_button_down.bmp" + "유저인터페이스\\sml_button_up.bmp", + "유저인터페이스\\sml_button_act.bmp", + "유저인터페이스\\sml_button_down.bmp" }; CBitmapRes* bitmap; diff --git a/Source/UI/Lists/UIComboBoxDefWnd.cpp b/Source/UI/Lists/UIComboBoxDefWnd.cpp index aaafac2..dfcbf78 100644 --- a/Source/UI/Lists/UIComboBoxDefWnd.cpp +++ b/Source/UI/Lists/UIComboBoxDefWnd.cpp @@ -6,7 +6,7 @@ #include "UI/Window/WindowPolicy.h" namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; } // OFFSET: 0x0086CC20 diff --git a/Source/UI/Lists/UIComboBoxEx.cpp b/Source/UI/Lists/UIComboBoxEx.cpp index a1f08e6..9c596a9 100644 --- a/Source/UI/Lists/UIComboBoxEx.cpp +++ b/Source/UI/Lists/UIComboBoxEx.cpp @@ -11,7 +11,7 @@ namespace { unsigned Palette(ResourceMgr& resources, int column, int row) { - constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp"; + constexpr char path[] = "유저인터페이스\\colorchip.bmp"; auto* chip = static_cast(resources.Load(path)); const int x = column * 4 + 2; const int y = row * 4 + 2; @@ -233,7 +233,7 @@ void UIComboBoxEx::Paint() { auto& resources = this->m_listContext->resources; this->geometry.surface->Fill(nullptr, Palette(resources, 6, 6)); this->FillRegion(1, 1, (this->geometry.width - 2), (this->geometry.height - 2), Palette(resources, 2, 2)); - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\"; + constexpr char prefix[] = "유저인터페이스\\basic_interface\\"; const char* names[] = {"sysboxs_lu.bmp", "sysboxs_ld.bmp", "sysboxs_ru.bmp", "sysboxs_rd.bmp"}; for (int corner = 0; corner < 4; ++corner) { diff --git a/Source/UI/Lists/UIListBox.cpp b/Source/UI/Lists/UIListBox.cpp index 615259a..99f3afc 100644 --- a/Source/UI/Lists/UIListBox.cpp +++ b/Source/UI/Lists/UIListBox.cpp @@ -18,7 +18,7 @@ UIListBox::UIListBox(UIWindowContext& windows, UIListBoxContext& list) : UIWindow(windows, 0), backgroundRed(255), backgroundGreen(255), backgroundBlue(255), selected(0), topLine(0), horizontalOffset(0), contentWidth(0), verticalOverflow(0), bottomMargin(0), verticalBar(nullptr), horizontalBar(nullptr), transparent(0), lineHeight(16), selectable(1), textColor(0), centerVertically(0), textInset(3), m_listContext(&list) { - constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp"; + constexpr char path[] = "유저인터페이스\\colorchip.bmp"; const auto* chip = static_cast(list.resources.Load(path)); this->selectionColor = 0; diff --git a/Source/UI/Lists/UIListBoxEx.cpp b/Source/UI/Lists/UIListBoxEx.cpp index 89b8173..7846483 100644 --- a/Source/UI/Lists/UIListBoxEx.cpp +++ b/Source/UI/Lists/UIListBoxEx.cpp @@ -14,7 +14,7 @@ UIListBoxEx::UIListBoxEx(UIWindowContext& windows, UIListBoxContext& list) : UIWindow(windows, 0), backgroundRed(255), backgroundGreen(255), backgroundBlue(255), selected(0), topLine(0), horizontalOffset(0), contentWidth(0), verticalOverflow(0), bottomMargin(0), verticalBar(nullptr), horizontalBar(nullptr), transparent(0), lineHeight(16), selectionColor(0), m_listContext(&list) { - constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp"; + constexpr char path[] = "유저인터페이스\\colorchip.bmp"; const auto* chip = static_cast(list.resources.Load(path)); if (chip) { diff --git a/Source/UI/Lists/UIScrollBar.cpp b/Source/UI/Lists/UIScrollBar.cpp index b7b1264..7bccf21 100644 --- a/Source/UI/Lists/UIScrollBar.cpp +++ b/Source/UI/Lists/UIScrollBar.cpp @@ -248,7 +248,7 @@ void UIScrollBar::Paint() { return; } - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; const bool vertical = this->vertical == 1; const int length = vertical ? this->geometry.height : this->geometry.width; const auto draw = [&](const char* name, int coordinate, bool transparent) { diff --git a/Source/UI/Lists/UIScrollBarNavi.cpp b/Source/UI/Lists/UIScrollBarNavi.cpp index 420381e..885e0d9 100644 --- a/Source/UI/Lists/UIScrollBarNavi.cpp +++ b/Source/UI/Lists/UIScrollBarNavi.cpp @@ -23,7 +23,7 @@ void UIScrollBar_Navi::Paint() { } if (this->vertical == 1) { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\navigation_interface3\\"; + constexpr char prefix[] = "유저인터페이스\\navigation_interface3\\"; const auto load = [&](const char* name) { return static_cast(this->m_resources->Load((std::string(prefix) + name).c_str())); }; const auto draw = [&](CBitmapRes* image, int y, bool transparent) { this->DrawBitmap(0, y, image ? &image->image : nullptr, transparent); }; auto* up = load("Navi_scroll_up.bmp"); diff --git a/Source/UI/Party/UIAdvenPartyBoardWnd.cpp b/Source/UI/Party/UIAdvenPartyBoardWnd.cpp index f2bea6d..bac60a9 100644 --- a/Source/UI/Party/UIAdvenPartyBoardWnd.cpp +++ b/Source/UI/Party/UIAdvenPartyBoardWnd.cpp @@ -24,7 +24,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\UIadventurerAgency\\"; + constexpr char prefix[] = "유저인터페이스\\UIadventurerAgency\\"; } // OFFSET: 0x007BAC40 @@ -221,7 +221,7 @@ void UIAdvenPartyBoardWnd::Slot15(int, int) { this->stop->Enable(0); auto* titleClose = new UIBitmapButton(*this->m_context, controls); - const std::string basic = std::string("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\"); + const std::string basic = std::string("유저인터페이스\\basic_interface\\"); titleClose->SetBitmap((basic + "sys_close_off.bmp").c_str(), 0, 0); titleClose->SetBitmap((basic + "sys_close_on.bmp").c_str(), 1, 0); titleClose->SetBitmap((basic + "sys_close_on.bmp").c_str(), 2, 0); @@ -561,7 +561,7 @@ void UIAdvenPartyBoardWnd::Paint() { const auto load = [&](const char* path) { return static_cast(controls.resources.Load(path)); }; auto* background = load((std::string(prefix) + "bg_agencyList.bmp").c_str()); this->DrawBitmap(0, 0, background ? &background->image : nullptr, false); - constexpr char basic[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\"; + constexpr char basic[] = "유저인터페이스\\basic_interface\\"; const auto skin = [&](const char* name) { return load((std::string(basic) + name).c_str()); }; int left = 0; int right = 0; diff --git a/Source/UI/Party/UIApplyForPartyWnd.cpp b/Source/UI/Party/UIApplyForPartyWnd.cpp index 40e7c34..8f74d02 100644 --- a/Source/UI/Party/UIApplyForPartyWnd.cpp +++ b/Source/UI/Party/UIApplyForPartyWnd.cpp @@ -16,7 +16,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; } // OFFSET: 0x007BAD00 diff --git a/Source/UI/Party/UIPartyInfoWnd.cpp b/Source/UI/Party/UIPartyInfoWnd.cpp index 6ec0c9b..2a2556c 100644 --- a/Source/UI/Party/UIPartyInfoWnd.cpp +++ b/Source/UI/Party/UIPartyInfoWnd.cpp @@ -85,7 +85,7 @@ void UIPartyInfoWnd::Paint() { const auto text = [&](int x, const char* value, int bytes = 0) { this->DrawTextAt(controls.fonts, controls.locale, x, 5, value, bytes, 0, 12, 0, 0, 0); }; text(11, this->levels.c_str()); text(64, TypeName(this->type, controls.services)); - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\UIadventurerAgency\\"; + constexpr char prefix[] = "유저인터페이스\\UIadventurerAgency\\"; const char* jobs[] = {"def", "heal", "atk", "buf"}; const bool flags[] = {this->info.tanker, this->info.healer, this->info.dealer, this->info.assist}; diff --git a/Source/UI/Party/UIRegisterPartyWnd.cpp b/Source/UI/Party/UIRegisterPartyWnd.cpp index 4e2fe40..1fb9236 100644 --- a/Source/UI/Party/UIRegisterPartyWnd.cpp +++ b/Source/UI/Party/UIRegisterPartyWnd.cpp @@ -26,7 +26,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; // OFFSET: 0x007BBFC0 // FUNCTION: fn_09295 diff --git a/Source/UI/Party/UIRequestJoinPartyWnd.cpp b/Source/UI/Party/UIRequestJoinPartyWnd.cpp index d8b17b9..3a31dc8 100644 --- a/Source/UI/Party/UIRequestJoinPartyWnd.cpp +++ b/Source/UI/Party/UIRequestJoinPartyWnd.cpp @@ -16,7 +16,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; } // OFFSET: 0x007BB030 diff --git a/Source/UI/Shortcuts/ShortcutControls.cpp b/Source/UI/Shortcuts/ShortcutControls.cpp index edeacaa..76f0e03 100644 --- a/Source/UI/Shortcuts/ShortcutControls.cpp +++ b/Source/UI/Shortcuts/ShortcutControls.cpp @@ -5,7 +5,7 @@ #include -#define SHORTCUT_RESOURCE "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA" +#define SHORTCUT_RESOURCE "유저인터페이스" // OFFSET: 0x0092A190 // FUNCTION: fn_12654 @@ -22,8 +22,8 @@ ShortcutControls ShortcutControls::Create( result.bank = new (std::nothrow) UICheckBox(windows, buttons); result.bank->SetSize(10, 26); result.bank->SetImages( - "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\shortcut_2_bts.bmp", - "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\shortcut_1_bts.bmp", "" + "유저인터페이스\\shortcut_2_bts.bmp", + "유저인터페이스\\shortcut_1_bts.bmp", "" ); result.bank->SetId(549); result.bank->Move(3, 4); diff --git a/Source/UI/Shortcuts/ShortcutPainting.cpp b/Source/UI/Shortcuts/ShortcutPainting.cpp index 86870b4..2b9c26e 100644 --- a/Source/UI/Shortcuts/ShortcutPainting.cpp +++ b/Source/UI/Shortcuts/ShortcutPainting.cpp @@ -9,7 +9,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA"; + constexpr char prefix[] = "유저인터페이스"; // INLINED CBitmapRes* Load(ResourceMgr& resources, const char* tail) { diff --git a/Source/UI/Text/UITextViewer.cpp b/Source/UI/Text/UITextViewer.cpp index becefdb..053f93e 100644 --- a/Source/UI/Text/UITextViewer.cpp +++ b/Source/UI/Text/UITextViewer.cpp @@ -56,7 +56,7 @@ namespace { UITextViewer::UITextViewer(UIWindowContext& windows, UITextViewerContext& text) : UIListBox(windows, text.list), splitTipLinks(0), outline(0), bold(0), m_text(&text) { this->lineHeight = 18; - constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp"; + constexpr char path[] = "유저인터페이스\\colorchip.bmp"; const auto* chip = static_cast(text.list.resources.Load(path)); const auto& image = chip->image; const std::uint32_t pixel = image.width > 18 && image.height > 2 ? image.pixels[18 + 2 * image.width] : 0x00FF0000u; diff --git a/Source/UI/Window/UIFrameWnd.cpp b/Source/UI/Window/UIFrameWnd.cpp index b4d0f88..aff5cfc 100644 --- a/Source/UI/Window/UIFrameWnd.cpp +++ b/Source/UI/Window/UIFrameWnd.cpp @@ -189,9 +189,9 @@ UIBitmapButton* UIFrameWnd::AddCloseButton(UIButtonContext& controls, const char } UIBitmapButton* button = new UIBitmapButton(*this->m_context, controls); - button->SetBitmap("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\sys_close_off.bmp", 0, 0); - button->SetBitmap("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\sys_close_on.bmp", 1, 0); - button->SetBitmap("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\sys_close_on.bmp", 2, 0); + button->SetBitmap("유저인터페이스\\basic_interface\\sys_close_off.bmp", 0, 0); + button->SetBitmap("유저인터페이스\\basic_interface\\sys_close_on.bmp", 1, 0); + button->SetBitmap("유저인터페이스\\basic_interface\\sys_close_on.bmp", 2, 0); button->SetSize(button->BitmapWidth(), button->BitmapHeight()); button->Move(width - 14, 3); button->SetId(201); diff --git a/Source/UI/Window/UIMessageBox.cpp b/Source/UI/Window/UIMessageBox.cpp index 112cedb..0f75d27 100644 --- a/Source/UI/Window/UIMessageBox.cpp +++ b/Source/UI/Window/UIMessageBox.cpp @@ -15,7 +15,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; std::uint32_t Palette(ResourceMgr& resources, int x, int y) { const auto* resource = static_cast(resources.Load((std::string(prefix) + "colorchip.bmp").c_str())); diff --git a/compile.json b/compile.json index b982c81..2bd289a 100644 --- a/compile.json +++ b/compile.json @@ -20,6 +20,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -40,6 +42,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -64,6 +68,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -85,6 +91,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -109,6 +117,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -128,6 +138,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -141,6 +153,8 @@ "/DNDEBUG", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -156,6 +170,8 @@ "/DNDEBUG", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -175,6 +191,8 @@ "-std:c++20", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ], [ @@ -188,6 +206,8 @@ "/DNDEBUG", "-MD", "/FS", + "/source-charset:utf-8", + "/execution-charset:.949", "-c" ] ], From 248c0c6cc8bc1d2711b3d696264b005571a12eed Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:45:52 +0100 Subject: [PATCH 21/62] =?UTF-8?q?=F0=9F=93=9D=20docs(CODING=5FRULES):=20do?= =?UTF-8?q?cumented=20UTF-8=20Hangul=20literals=20compiled=20as=20CP949?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CODING_RULES.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CODING_RULES.md b/CODING_RULES.md index 1281939..5c0cba8 100644 --- a/CODING_RULES.md +++ b/CODING_RULES.md @@ -199,6 +199,13 @@ Do not substitute `__FILE__` or `__LINE__` merely to follow a different project' invent diagnostic literals. Distinguish compiler-generated diagnostics from application arguments using the original instructions. +### Korean string literals + +Sources are UTF-8; `compile.json` passes `/source-charset:utf-8 /execution-charset:.949`, so write Korean +literals as Hangul (`"유저인터페이스\\item\\%s.bmp"`), not CP949 escapes. Keep `\x` escapes for bytes +that are not CP949 Hangul: other code pages (Shift-JIS, GBK, Big5 font names), byte-order marks and key codes. +Never use `/utf-8`, and never save sources as CP949/EUC-KR. + ## 7. Platform and build scope - This target is Windows x86. Keep code in its assigned existing translation unit and subsystem headers. From e690233c8dc76485f986074d8cbc4bda97335be1 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:46:33 +0100 Subject: [PATCH 22/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(effects)?= =?UTF-8?q?:=20added=20EF=5FUNK=20enum=20entries=20and=20replaced=20raw=20?= =?UTF-8?q?numeric=20effect=20IDs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Effects/EffectTypes.cpp | 716 ++++++++++++------------ Source/Contents/Effects/EffectTypes.h | 635 ++++++++++++++++----- 2 files changed, 849 insertions(+), 502 deletions(-) diff --git a/Source/Contents/Effects/EffectTypes.cpp b/Source/Contents/Effects/EffectTypes.cpp index 0210493..9b2dbc7 100644 --- a/Source/Contents/Effects/EffectTypes.cpp +++ b/Source/Contents/Effects/EffectTypes.cpp @@ -1105,26 +1105,26 @@ namespace { {EF_SPRITEMABLE, 1096}, {EF_TUNAPARTY, 1097}, {EF_FRESHSHRIMP, 1098}, - {1099, 1099}, - {1100, 1100}, + {EF_UNK_1099, 1099}, + {EF_UNK_1100, 1100}, {EF_SU_SV_STEMSPEAR, 1101}, {EF_SU_TUNABELLY, 1102}, {EF_SU_SCRATCH, 1103}, - {1104, 1104}, + {EF_UNK_1104, 1104}, {EF_SU_BITE, 1105}, - {1106, 1106}, + {EF_UNK_1106, 1106}, {EF_SU_SCAROFTAROU, 1107}, {EF_SU_ARCLOUSEDASH, 1108}, {EF_SU_PICKYPECK, 1109}, - {1110, 9999}, - {1111, 1111}, - {1112, 1112}, - {1113, 100}, - {1114, 1114}, + {EF_UNK_1110, 9999}, + {EF_UNK_1111, 1111}, + {EF_UNK_1112, 1112}, + {EF_UNK_1113, 100}, + {EF_UNK_1114, 1114}, {EF_SU_CN_METEOR, 99999999}, {EF_SU_BUNCHOFSHRIMP, 1116}, - {1117, 1117}, - {1118, 1118}, + {EF_UNK_1117, 1117}, + {EF_UNK_1118, 1118}, {EF_BITE_SCAR, 1119}, {EF_SU_LUNATIC_CARROT_BEAT, 1120}, {EF_WIDE_CRITICAL_WOUND, 1121}, @@ -1134,9 +1134,9 @@ namespace { {EF_SU_LOPE, 1125}, {EF_SU_HISS, 1126}, {EF_SU_POWEROFFLOCK, 1127}, - {1128, 1128}, + {EF_UNK_1128, 1128}, {EF_SU_SVG_SPIRIT, 1129}, - {1130, 1130}, + {EF_UNK_1130, 1130}, {EF_SU_SPIRIT_OF_LIFE, 99}, {EF_SU_STOOP, 99999999}, {EF_FIREDANCE, 1133}, @@ -1149,65 +1149,65 @@ namespace { {EF_FALLEN_ANGEL, 1140}, {EF_WE_ONEFOREVER, 1141}, {EF_WE_CHEERUP, 1142}, - {1143, 100}, - {1144, 100}, + {EF_UNK_1143, 100}, + {EF_UNK_1144, 100}, {EF_RL_HAMMER_OF_GOD, 99999999}, - {1146, 1146}, - {1147, 99999999}, + {EF_UNK_1146, 1146}, + {EF_UNK_1147, 99999999}, {EF_RL_R_TRIP, 9999999}, {EF_IMMUNE_PROPERTY, 99999}, {EF_MOVE_COORDINATE, 300}, - {1151, 1151}, - {1152, 1152}, - {1153, 1153}, - {1154, 1154}, - {1155, 1155}, - {1156, 1156}, - {1157, 1157}, - {1158, 1158}, - {1159, 1159}, - {1160, 1160}, + {EF_UNK_1151, 1151}, + {EF_UNK_1152, 1152}, + {EF_UNK_1153, 1153}, + {EF_UNK_1154, 1154}, + {EF_UNK_1155, 1155}, + {EF_UNK_1156, 1156}, + {EF_UNK_1157, 1157}, + {EF_UNK_1158, 1158}, + {EF_UNK_1159, 1159}, + {EF_UNK_1160, 1160}, {EF_QUAGMIRE_VISUAL, 150}, {EF_LORD_OF_VERMILLION_VISUAL, 9999}, {EF_METEOR_STORM_VISUAL, 9999}, - {1164, 99999999}, - {1165, 99999999}, - {1166, 99999999}, - {1167, 99999999}, - {1168, 99999999}, - {1169, 99999999}, - {1170, 99999999}, - {1171, 99999999}, - {1172, 99999999}, - {1173, 99999999}, - {1174, 99999999}, - {1175, 99999999}, - {1176, 99999999}, - {1177, 99999999}, - {1178, 99999999}, - {1179, 99999999}, - {1180, 99999999}, - {1181, 99999999}, - {1182, 99999999}, - {1183, 99999999}, - {1184, 1184}, + {EF_UNK_1164, 99999999}, + {EF_UNK_1165, 99999999}, + {EF_UNK_1166, 99999999}, + {EF_UNK_1167, 99999999}, + {EF_UNK_1168, 99999999}, + {EF_UNK_1169, 99999999}, + {EF_UNK_1170, 99999999}, + {EF_UNK_1171, 99999999}, + {EF_UNK_1172, 99999999}, + {EF_UNK_1173, 99999999}, + {EF_UNK_1174, 99999999}, + {EF_UNK_1175, 99999999}, + {EF_UNK_1176, 99999999}, + {EF_UNK_1177, 99999999}, + {EF_UNK_1178, 99999999}, + {EF_UNK_1179, 99999999}, + {EF_UNK_1180, 99999999}, + {EF_UNK_1181, 99999999}, + {EF_UNK_1182, 99999999}, + {EF_UNK_1183, 99999999}, + {EF_UNK_1184, 1184}, {EF_WARPZONE3, 99999999}, - {1186, 1186}, - {1187, 1187}, - {1188, 1188}, - {1189, 1189}, - {1190, 1190}, - {1191, 1191}, - {1192, 1192}, - {1193, 1193}, - {1194, 1194}, + {EF_UNK_1186, 1186}, + {EF_UNK_1187, 1187}, + {EF_UNK_1188, 1188}, + {EF_UNK_1189, 1189}, + {EF_UNK_1190, 1190}, + {EF_UNK_1191, 1191}, + {EF_UNK_1192, 1192}, + {EF_UNK_1193, 1193}, + {EF_UNK_1194, 1194}, {EF_AUTOSHADOWSPELL_ACTIVE, 1195}, - {1196, 1196}, + {EF_UNK_1196, 1196}, {EF_LIGHTSPHERE_SUN, 1197}, {EF_LIGHTSPHERE_MOON, 1198}, {EF_LIGHTSPHERE_STAR, 1199}, - {1200, 1200}, - {1201, 1201}, + {EF_UNK_1200, 1200}, + {EF_UNK_1201, 1201}, {EF_NOVAEXPLOSING, 1202}, {EF_STAR_EMPEROR, 1203}, {EF_SMA_BLACK, 100}, @@ -1217,37 +1217,37 @@ namespace { {EF_ENERGYDRAIN_BLACK, 200}, {EF_BLINK_BODY, 100}, {EF_LINELINK5, 200}, - {1211, 1211}, - {1212, 1212}, - {1213, 1213}, - {1214, 1214}, - {1215, 1215}, - {1216, 1216}, - {1217, 1217}, + {EF_UNK_1211, 1211}, + {EF_UNK_1212, 1212}, + {EF_UNK_1213, 1213}, + {EF_UNK_1214, 1214}, + {EF_UNK_1215, 1215}, + {EF_UNK_1216, 1216}, + {EF_UNK_1217, 1217}, {EF_SOLARBURST, 1218}, {EF_SJ_DOCUMENT, 1219}, {EF_FALLING_STAR, 1220}, {EF_FLASH_KICK, 1221}, - {1222, 1222}, + {EF_UNK_1222, 1222}, {EF_STORMKICK8, 1223}, {EF_SOLAR_EXPLOSION, 50}, - {1225, 1225}, - {1226, 1226}, - {1227, 1227}, + {EF_UNK_1225, 1225}, + {EF_UNK_1226, 1226}, + {EF_UNK_1227, 1227}, {EF_SOUL_GOLEM, 1228}, {EF_NEWMOON_KICK, 1229}, {EF_FULLMOON_KICK, 1230}, {EF_BOOK_OF_DIMENSION, 1231}, - {1232, 1232}, + {EF_UNK_1232, 1232}, {EF_CURSE_EXPLOSION, 1233}, {EF_SOUL_REAPER, 1234}, - {1235, 1235}, - {1236, 1236}, - {1237, 1237}, + {EF_UNK_1235, 1235}, + {EF_UNK_1236, 1236}, + {EF_UNK_1237, 1237}, {EF_SOUL_CURSE, 1238}, {EF_PROMINENCE_KICK, 1239}, {EF_SOUL_REAPER_COLLECT, 1240}, - {1241, 1241}, + {EF_UNK_1241, 1241}, {EF_SOUL_EXPLOSION, 1242}, {EF_SOUL_REVOLVE, 1243}, {EF_TEST_EFFECT_00, 1244}, @@ -1262,8 +1262,8 @@ namespace { {EF_TEST_EFFECT_09, 1253}, {EF_NEW_METEORSTORM, 1254}, {EF_NEW_METEORSTORM_BOTTOM, 1255}, - {1256, 1256}, - {1257, 1257}, + {EF_UNK_1256, 1256}, + {EF_UNK_1257, 1257}, {EF_NEW_ADORAMUS, 1258}, {EF_NEW_ADORAMUS_BOTTOM, 1259}, {EF_TETRA_VORTEX_CAST, 1260}, @@ -1282,7 +1282,7 @@ namespace { {EF_TETRA_VORTEX_EARTH_GROUND, 1273}, {EF_NEW_CRIMSONROCK, 1274}, {EF_NEW_CRIMSONROCK_BOTTOM, 1275}, - {1276, 1276}, + {EF_UNK_1276, 1276}, {EF_TETRA_VORTEX_CORE_GROUND, 1277}, {EF_TETRA_VORTEX_FIRE_SUB, 1278}, {EF_TETRA_VORTEX_WATER_SUB, 1279}, @@ -1297,8 +1297,8 @@ namespace { {EF_NEW_PSYCHICWAVE, 1288}, {EF_NEW_PSYCHICWAVE_BOTTOM, 1289}, {EF_NEW_PSYCHICWAVE_CAST, 1290}, - {1291, 99999999}, - {1292, 99999999}, + {EF_UNK_1291, 99999999}, + {EF_UNK_1292, 99999999}, {EF_NEW_ARROWSTORM_00, 1293}, {EF_NEW_ARROWSTORM_01, 1294}, {EF_NEW_SECRAMENT_AURA, 1295}, @@ -1330,29 +1330,29 @@ namespace { {EF_NEW_CROSSRIPPERSLASHER_09, 1321}, {EF_NEW_CROSSRIPPERSLASHER_11, 1322}, {EF_NEW_TIGERCANNON, 1323}, - {1324, 1324}, - {1325, 99999999}, - {1326, 99999999}, - {1327, 99999999}, - {1328, 99999999}, - {1329, 99999999}, - {1330, 99999999}, - {1331, 99999999}, - {1332, 99999999}, - {1333, 99999999}, - {1334, 99999999}, - {1335, 99999999}, - {1336, 99999999}, - {1337, 99999999}, - {1338, 99999999}, - {1339, 99999999}, - {1340, 99999999}, - {1341, 99999999}, - {1342, 99999999}, - {1343, 99999999}, - {1344, 99999999}, - {1345, 99999999}, - {1346, 99999999}, + {EF_UNK_1324, 1324}, + {EF_UNK_1325, 99999999}, + {EF_UNK_1326, 99999999}, + {EF_UNK_1327, 99999999}, + {EF_UNK_1328, 99999999}, + {EF_UNK_1329, 99999999}, + {EF_UNK_1330, 99999999}, + {EF_UNK_1331, 99999999}, + {EF_UNK_1332, 99999999}, + {EF_UNK_1333, 99999999}, + {EF_UNK_1334, 99999999}, + {EF_UNK_1335, 99999999}, + {EF_UNK_1336, 99999999}, + {EF_UNK_1337, 99999999}, + {EF_UNK_1338, 99999999}, + {EF_UNK_1339, 99999999}, + {EF_UNK_1340, 99999999}, + {EF_UNK_1341, 99999999}, + {EF_UNK_1342, 99999999}, + {EF_UNK_1343, 99999999}, + {EF_UNK_1344, 99999999}, + {EF_UNK_1345, 99999999}, + {EF_UNK_1346, 99999999}, {EF_NEW_ARMSCANNON_01_UP, 1347}, {EF_NEW_ARMSCANNON_01_DOWN, 1348}, {EF_NEW_ARMSCANNON_05_UP, 1349}, @@ -1363,7 +1363,7 @@ namespace { {EF_NEW_ARMSCANNON_11_DOWN, 1354}, {EF_NEW_ARMSCANNON_EXPLOSION, 1355}, {EF_NEW_ARMSCANNON_EXPLOSION_BOTTOM, 1356}, - {1357, 1357}, + {EF_UNK_1357, 1357}, {EF_NEW_CART_CANNON_EXPLOSION, 1358}, {EF_NEW_CART_CANNON_EXPLOSION_BOTTOM, 1359}, {EF_NEW_CART_CANNON_FIRE, 1360}, @@ -1383,7 +1383,7 @@ namespace { {EF_NEW_BANISHINGPOINT_05, 1374}, {EF_NEW_BANISHINGPOINT_07, 1375}, {EF_NEW_BANISHINGPOINT_11, 1376}, - {1377, 99999999}, + {EF_UNK_1377, 99999999}, {EF_NEW_DRAGONBREATH_BOMB, 1378}, {EF_NEW_DRAGONBREATH_BOMB_BOTTOM, 1379}, {EF_NEW_DRAGONBREATH_01, 1380}, @@ -1404,7 +1404,7 @@ namespace { {EF_NEW_FATAL_MENACE_BOTTOM, 1395}, {EF_NEW_FATAL_MENACE_CAST, 1396}, {EF_NEW_FATAL_MENACE_CAST_BOTTOM, 1397}, - {1398, 99999999}, + {EF_UNK_1398, 99999999}, {EF_NEW_HEAVENS_DRIVE, 75}, {EF_NEW_CANNON_SPEAR_12, 1400}, {EF_NEW_CANNON_SPEAR_01, 1401}, @@ -1425,7 +1425,7 @@ namespace { {EF_NEW_COMET_SUB_EXP, 1416}, {EF_NEW_COMET_SUB_EXP_BOTTOM, 1417}, {EF_NEW_MOON_SLASH, 1418}, - {1419, 1419}, + {EF_UNK_1419, 1419}, {EF_NEW_GRANDCROSS, 99999999}, {EF_NEW_COMET_CAST, 1421}, {EF_NEW_CART_CANNON_CAST, 1422}, @@ -1561,7 +1561,7 @@ namespace { {EF_NEW_HELLINFERNO_CAST_BOTTOM, 1552}, {EF_NEW_HELLINFERNO_SUB, 1553}, {EF_NEW_HELLINFERNO_SUB_BOTTOM, 1554}, - {1555, 1555}, + {EF_UNK_1555, 1555}, {EF_NEW_HEAL_BLUE, 60}, {EF_NEW_CLEARANCE, 1557}, {EF_NEW_CLEARANCE_BOTTOM, 1558}, @@ -1623,9 +1623,9 @@ namespace { {EF_RED_WAVE_1, 1614}, {EF_RED_WAVE_2, 1615}, {EF_RED_WAVE_3, 1616}, - {1617, 1617}, - {1618, 1618}, - {1619, 1619}, + {EF_UNK_1617, 1617}, + {EF_UNK_1618, 1618}, + {EF_UNK_1619, 1619}, {EF_NEW_WALLOFTHORN_CAST, 1620}, {EF_NEW_WALLOFTHORN_CAST_BOTTOM, 1621}, {EF_NEW_EARTHGRAVE_BOTTOM, 1622}, @@ -1663,24 +1663,24 @@ namespace { {EF_NEW_EPICLESIS, 1654}, {EF_NEW_EPICLESIS_AURA, 99999999}, {EF_NEW_EPICLESIS_CAST, 100}, - {1657, 1657}, + {EF_UNK_1657, 1657}, {EF_NEW_AXEBOOMERANG_CAST, 1658}, {EF_NEW_AXEBOOMERANG_CAST_BOTTOM, 1659}, {EF_NEW_AXEBOOMERANG_HIT, 1660}, - {1661, 1661}, - {1662, 1662}, - {1663, 1663}, + {EF_UNK_1661, 1661}, + {EF_UNK_1662, 1662}, + {EF_UNK_1663, 1663}, {EF_NEW_SANCTUARY, 100}, {EF_NEW_SPELLFIST_FIRE, 1665}, {EF_NEW_SPELLFIST_FIRE_BOTTOM, 1666}, {EF_NEW_SPELLFIST_WATER, 1667}, {EF_NEW_SPELLFIST_WATER_BOTTOM, 1668}, {EF_NEW_SPELLFIST_WIND, 1669}, - {1670, 1670}, - {1671, 1671}, - {1672, 1672}, - {1673, 1673}, - {1674, 1674}, + {EF_UNK_1670, 1670}, + {EF_UNK_1671, 1671}, + {EF_UNK_1672, 1672}, + {EF_UNK_1673, 1673}, + {EF_UNK_1674, 1674}, {EF_NEW_CARTBOOST, 1675}, {EF_NEW_CARTBOOST_BOTTOM, 1676}, {EF_NEW_SAFETYWALL, 60}, @@ -1700,10 +1700,10 @@ namespace { {EF_NEW_WINDCUTTER_BOTTOM_01, 1691}, {EF_NEW_WINDCUTTER_BOTTOM_05, 1692}, {EF_NEW_WINDCUTTER_TARGET, 1693}, - {1694, 1694}, - {1695, 1695}, - {1696, 1696}, - {1697, 1697}, + {EF_UNK_1694, 1694}, + {EF_UNK_1695, 1695}, + {EF_UNK_1696, 1696}, + {EF_UNK_1697, 1697}, {EF_NEW_POWERSWING_01, 1698}, {EF_NEW_POWERSWING_05, 1699}, {EF_NEW_POWERSWING_07, 1700}, @@ -1716,26 +1716,26 @@ namespace { {EF_NEW_EARTHDRIVE_BOTTOM, 1707}, {EF_NEW_EARTHDRIVE_TARGET, 1708}, {EF_NEW_EARTHDRIVE_CAST, 40}, - {1710, 1710}, - {1711, 1711}, - {1712, 1712}, - {1713, 1713}, - {1714, 1714}, - {1715, 1715}, - {1716, 1716}, - {1717, 1717}, - {1718, 1718}, - {1719, 1719}, - {1720, 1720}, - {1721, 1721}, + {EF_UNK_1710, 1710}, + {EF_UNK_1711, 1711}, + {EF_UNK_1712, 1712}, + {EF_UNK_1713, 1713}, + {EF_UNK_1714, 1714}, + {EF_UNK_1715, 1715}, + {EF_UNK_1716, 1716}, + {EF_UNK_1717, 1717}, + {EF_UNK_1718, 1718}, + {EF_UNK_1719, 1719}, + {EF_UNK_1720, 1720}, + {EF_UNK_1721, 1721}, {EF_DRAGONIC_AURA, 1722}, {EF_DRAGONIC_AURA_BOTTOM, 1723}, {EF_DRAGONIC_AURA_HIT, 1724}, {EF_DRAGONIC_AURA_HIT_BOTTOM, 1725}, {EF_DRAGONIC_AURA_BUFF, 1726}, {EF_DRAGONIC_AURA_BUFF_BOTTOM, 1727}, - {1728, 1728}, - {1729, 1729}, + {EF_UNK_1728, 1728}, + {EF_UNK_1729, 1729}, {EF_NEW_AUTOSHADOWSPELL, 1730}, {EF_NEW_AUTOSHADOWSPELL_BOTTOM, 1731}, {EF_DESTRUCTIVE_HURRICANE, 1732}, @@ -1756,25 +1756,25 @@ namespace { {EF_ROCKDOWN_CAST, 1747}, {EF_ROCKDOWN_CAST_BOTTOM, 1748}, {EF_ROCKDOWN_HIT, 1749}, - {1750, 1750}, - {1751, 1751}, - {1752, 1752}, + {EF_UNK_1750, 1750}, + {EF_UNK_1751, 1751}, + {EF_UNK_1752, 1752}, {EF_RAIN_OF_CRYSTAL, 1753}, {EF_RAIN_OF_CRYSTAL_BOTTOM, 1754}, - {1755, 1755}, - {1756, 1756}, + {EF_UNK_1755, 1755}, + {EF_UNK_1756, 1756}, {EF_CRIMSON_ARROW_CAST, 1757}, {EF_CRIMSON_ARROW_CAST_BOTTOM, 1758}, {EF_CRIMSON_ARROW_HIT, 1759}, - {1760, 1760}, + {EF_UNK_1760, 1760}, {EF_VIOLENT_QUAKE_CAST, 1761}, {EF_VIOLENT_QUAKE_CAST_BOTTOM, 1762}, {EF_VIOLENT_QUAKE_HIT, 1763}, - {1764, 1764}, - {1765, 1765}, - {1766, 1766}, - {1767, 1767}, - {1768, 1768}, + {EF_UNK_1764, 1764}, + {EF_UNK_1765, 1765}, + {EF_UNK_1766, 1766}, + {EF_UNK_1767, 1767}, + {EF_UNK_1768, 1768}, {EF_ASTRAL_STRIKE_CAST, 1769}, {EF_ASTRAL_STRIKE_CAST_BOTTOM, 1770}, {EF_MYSTERY_ILLUSION, 1771}, @@ -1804,13 +1804,13 @@ namespace { {EF_ALL_BLOOM_BOTTOM, 1795}, {EF_ALL_BLOOM_CAST, 1796}, {EF_ALL_BLOOM_CAST_BOTTOM, 1797}, - {1798, 1798}, + {EF_UNK_1798, 1798}, {EF_ALL_BLOOM_HIT, 1799}, - {1800, 1800}, + {EF_UNK_1800, 1800}, {EF_CLIMAX_LIGHT, 1801}, {EF_CLIMAX_CAST, 1802}, {EF_CLIMAX_CAST_LOOP, 1803}, - {1804, 1804}, + {EF_UNK_1804, 1804}, {EF_FLORAL_FLARE_ROAD_CAST, 1805}, {EF_FLORAL_FLARE_ROAD_CAST_BOTTOM, 1806}, {EF_FLORAL_FLARE_ROAD_HIT, 1807}, @@ -1833,31 +1833,31 @@ namespace { {EF_ARBITRIUM, 1824}, {EF_ARBITRIUM_BOTTOM, 1825}, {EF_ARBITRIUM_HIT, 1826}, - {1827, 1827}, - {1828, 1828}, - {1829, 1829}, - {1830, 1830}, + {EF_UNK_1827, 1827}, + {EF_UNK_1828, 1828}, + {EF_UNK_1829, 1829}, + {EF_UNK_1830, 1830}, {EF_NEW_REPARATIO_CAST, 1831}, {EF_NEW_REPARATIO_CAST_BOTTOM, 1832}, {EF_NEW_REPARATIO, 1833}, {EF_NEW_REPARATIO_BOTTOM, 1834}, {EF_NEW_REPARATIO_TARGET, 1835}, {EF_NEW_REPARATIO_TARGET_BOTTOM, 1836}, - {1837, 1837}, + {EF_UNK_1837, 1837}, {EF_ETERNAL_SLASH_HIT_1, 1838}, - {1839, 1839}, + {EF_UNK_1839, 1839}, {EF_A_MACHINE_CAST, 1840}, - {1841, 1841}, + {EF_UNK_1841, 1841}, {EF_A_MACHINE_HIT, 1842}, - {1843, 1843}, - {1844, 1844}, - {1845, 1845}, + {EF_UNK_1843, 1843}, + {EF_UNK_1844, 1844}, + {EF_UNK_1845, 1845}, {EF_EFFLIGO, 1846}, {EF_EFFLIGO_BOTTOM, 1847}, {EF_EFFLIGO_HIT, 1848}, {EF_COMPETENTIA, 1849}, {EF_COMPETENTIA_BOTTOM, 1850}, - {1851, 1851}, + {EF_UNK_1851, 1851}, {EF_COMPETENTIA_LOOP, 1852}, {EF_COMPETENTIA_LOOP_BOTTOM, 1853}, {EF_CRYSTAL_IMPACT, 1854}, @@ -1868,16 +1868,16 @@ namespace { {EF_CRYSTAL_IMPACT_BUFF, 1859}, {EF_RELIGIO, 1860}, {EF_RELIGIO_CAST, 1861}, - {1862, 1862}, - {1863, 1863}, + {EF_UNK_1862, 1862}, + {EF_UNK_1863, 1863}, {EF_FATAL_SHADOW_CROW, 1864}, {EF_FATAL_SHADOW_CROW_BOTTOM, 1865}, {EF_FATAL_SHADOW_CROW_HIT, 1866}, - {1867, 1867}, - {1868, 1868}, - {1869, 1869}, - {1870, 1870}, - {1871, 1871}, + {EF_UNK_1867, 1867}, + {EF_UNK_1868, 1868}, + {EF_UNK_1869, 1869}, + {EF_UNK_1870, 1870}, + {EF_UNK_1871, 1871}, {EF_NEW_PNEUMA, 1872}, {EF_DEEP_BLIND_TRAP_CAST, 1873}, {EF_DEEP_BLIND_TRAP, 1874}, @@ -1901,10 +1901,10 @@ namespace { {EF_STRATUM_TREMOR_HIT, 1892}, {EF_STRATUM_TREMOR, 1893}, {EF_STRATUM_TREMOR_BOTTOM, 1894}, - {1895, 1895}, - {1896, 1896}, - {1897, 1897}, - {1898, 1898}, + {EF_UNK_1895, 1895}, + {EF_UNK_1896, 1896}, + {EF_UNK_1897, 1897}, + {EF_UNK_1898, 1898}, {EF_WIND_SIGN, 1899}, {EF_WIND_SIGN_LOOP, 1900}, {EF_ABR_MOTHER_CAST, 1901}, @@ -1917,16 +1917,16 @@ namespace { {EF_ABR_INFINITY_CAST, 1908}, {EF_ABR_INFINITY_HIT, 1909}, {EF_ABR_INFINITY_RING, 1910}, - {1911, 1911}, - {1912, 1912}, - {1913, 1913}, + {EF_UNK_1911, 1911}, + {EF_UNK_1912, 1912}, + {EF_UNK_1913, 1913}, {EF_ETERNAL_SLASH_HIT_2, 1914}, {EF_NEW_D_CANNON, 1915}, {EF_NEW_D_CANNON_CAST, 1916}, {EF_NEW_D_CANNON_HIT, 1917}, {EF_NEW_D_CANNON_ENTITY, 1918}, {EF_FLAME_TRAP, 1919}, - {1920, 1920}, + {EF_UNK_1920, 1920}, {EF_FLAME_TRAP_CAST, 1921}, {EF_FLAME_TRAP_HIT, 1922}, {EF_FLAME_TRAP_RING, 1923}, @@ -1956,30 +1956,30 @@ namespace { {EF_NEW_AXE_STOMP_08, 1947}, {EF_NEW_AXE_STOMP_09, 1948}, {EF_NEW_AXE_STOMP_11, 1949}, - {1950, 1950}, - {1951, 1951}, - {1952, 1952}, - {1953, 1953}, - {1954, 1954}, - {1955, 1955}, - {1956, 1956}, - {1957, 1957}, + {EF_UNK_1950, 1950}, + {EF_UNK_1951, 1951}, + {EF_UNK_1952, 1952}, + {EF_UNK_1953, 1953}, + {EF_UNK_1954, 1954}, + {EF_UNK_1955, 1955}, + {EF_UNK_1956, 1956}, + {EF_UNK_1957, 1957}, {EF_PNEUMATICUS_PROCELLA_CAST, 1958}, {EF_PNEUMATICUS_PROCELLA_RING, 1959}, - {1960, 1960}, - {1961, 1961}, - {1962, 1962}, + {EF_UNK_1960, 1960}, + {EF_UNK_1961, 1961}, + {EF_UNK_1962, 1962}, {EF_SINCERE_FAITH_RING, 1963}, {EF_SINCERE_FAITH, 1964}, {EF_SINCERE_FAITH_BOTTOM, 1965}, {EF_ABYSS_DAGGER, 1966}, {EF_ABYSS_DAGGER_HIT, 1967}, - {1968, 1968}, + {EF_UNK_1968, 1968}, {EF_HAWK_BOOMERANG_CAST, 1969}, {EF_HAWK_BOOMERANG_HIT, 1970}, {EF_HAWK_BOOMERANG_START, 1971}, {EF_GALE_STORM_CAST, 1972}, - {1973, 120}, + {EF_UNK_1973, 120}, {EF_GALE_STORM_HIT, 1974}, {EF_FIRST_FAITH_POWER, 1975}, {EF_FIRST_FAITH_POWER_CAST, 1976}, @@ -2006,15 +2006,15 @@ namespace { {EF_EXPLOSION_BLASTER_HIT, 1997}, {EF_FIRM_FAITH_RING, 1998}, {EF_FIRM_FAITH, 1999}, - {2000, 2000}, - {2001, 2001}, - {2002, 2002}, + {EF_UNK_2000, 2000}, + {EF_UNK_2001, 2001}, + {EF_UNK_2002, 2002}, {EF_ACTIVITY_BURN, 2003}, {EF_ACTIVITY_BURN_CAST, 2004}, {EF_ACTIVITY_BURN_CAST_BOTTOM, 2005}, - {2006, 2006}, - {2007, 2007}, - {2008, 2008}, + {EF_UNK_2006, 2006}, + {EF_UNK_2007, 2007}, + {EF_UNK_2008, 2008}, {EF_SERPENS_BOTTOM, 2009}, {EF_SERPENS_CAST, 2010}, {EF_SERPENS_CAST_BOTTOM, 2011}, @@ -2032,7 +2032,7 @@ namespace { {EF_DILUVIO_HIT, 2023}, {EF_DILUVIO_ARMOR, 2024}, {EF_SPELL_ENCHANTING, 2025}, - {2026, 60}, + {EF_UNK_2026, 60}, {EF_DIAMOND_STORM_BOTTOM, 60}, {EF_DIAMOND_STORM_CAST, 2028}, {EF_DIAMOND_STORM_CAST_BOTTOM, 2029}, @@ -2052,11 +2052,11 @@ namespace { {EF_LIGHTNING_LAND_CAST, 2043}, {EF_LIGHTNING_LAND_CAST_BOTTOM, 2044}, {EF_LIGHTNING_LAND_HIT, 2045}, - {2046, 2046}, - {2047, 2047}, - {2048, 2048}, - {2049, 2049}, - {2050, 2050}, + {EF_UNK_2046, 2046}, + {EF_UNK_2047, 2047}, + {EF_UNK_2048, 2048}, + {EF_UNK_2049, 2049}, + {EF_UNK_2050, 2050}, {EF_FIRST_BRAND, 2051}, {EF_FIRST_BRAND_AURA, 2052}, {EF_FIRST_BRAND_HIT, 2053}, @@ -2071,24 +2071,24 @@ namespace { {EF_SOUND_BLEND_CAST_BOTTOM, 2062}, {EF_SOUND_BLEND_RED, 2063}, {EF_METALLIC_FURY, 2064}, - {2065, 2065}, - {2066, 2066}, - {2067, 2067}, - {2068, 2068}, - {2069, 2069}, - {2070, 2070}, - {2071, 2071}, - {2072, 2072}, - {2073, 2073}, - {2074, 2074}, + {EF_UNK_2065, 2065}, + {EF_UNK_2066, 2066}, + {EF_UNK_2067, 2067}, + {EF_UNK_2068, 2068}, + {EF_UNK_2069, 2069}, + {EF_UNK_2070, 2070}, + {EF_UNK_2071, 2071}, + {EF_UNK_2072, 2072}, + {EF_UNK_2073, 2073}, + {EF_UNK_2074, 2074}, {EF_NIFLHEIM, 2075}, {EF_NIFLHEIM_CAST, 2076}, - {2077, 2077}, + {EF_UNK_2077, 2077}, {EF_SECOND_FAITH, 2078}, {EF_SECOND_FAITH_AURA, 2079}, - {2080, 2080}, + {EF_UNK_2080, 2080}, {EF_SECOND_FAITH_START, 2081}, - {2082, 2082}, + {EF_UNK_2082, 2082}, {EF_SECOND_FLAME, 2083}, {EF_SECOND_FLAME_BOTTOM, 2084}, {EF_THIRD_FLAME_BOMB, 2085}, @@ -2115,23 +2115,23 @@ namespace { {EF_TERREMOTUS_CAST_BOTTOM, 2106}, {EF_TERREMOTUS_HIT, 2107}, {EF_TERREMOTUS_PROTECT, 2108}, - {2109, 2109}, + {EF_UNK_2109, 2109}, {EF_FROM_THE_ABYSS, 2110}, {EF_ABYSS_STRIKE_HIT_2, 2111}, {EF_THIRD_PUNISH, 2095}, {EF_THIRD_PUNISH_BOTTOM, 2096}, - {2114, 2114}, + {EF_UNK_2114, 2114}, {EF_FRENZY_SHOT_HIT, 2115}, - {2116, 2116}, - {2117, 2117}, - {2118, 2118}, - {2119, 2119}, - {2120, 2120}, - {2121, 2121}, + {EF_UNK_2116, 2116}, + {EF_UNK_2117, 2117}, + {EF_UNK_2118, 2118}, + {EF_UNK_2119, 2119}, + {EF_UNK_2120, 2120}, + {EF_UNK_2121, 2121}, {EF_MUSICAL_INTERLUDE, 2122}, {EF_MUSICAL_INTERLUDE_CAST, 2123}, - {2124, 2124}, - {2125, 2125}, + {EF_UNK_2124, 2124}, + {EF_UNK_2125, 2125}, {EF_ABYSS_SLAYER, 2126}, {EF_ABYSS_SLAYER_CAST, 2127}, {EF_ABYSS_SLAYER_CAST_BOTTOM, 2128}, @@ -2160,59 +2160,59 @@ namespace { {EF_ELEMENTAL_BUSTER_WIND, 2151}, {EF_ELEMENTAL_BUSTER_WIND_BOTTOM, 2152}, {EF_ELEMENTAL_BUSTER_WIND_HIT, 2153}, - {2154, 2154}, + {EF_UNK_2154, 2154}, {EF_UNLUCKY_RUSH_CAST, 2155}, {EF_ABYSS_DAGGER_HIT_3, 2156}, - {2157, 2157}, - {2158, 2158}, - {2159, 2159}, - {2160, 2160}, + {EF_UNK_2157, 2157}, + {EF_UNK_2158, 2158}, + {EF_UNK_2159, 2159}, + {EF_UNK_2160, 2160}, {EF_ADVANCED_PROTECTION, 2161}, {EF_ADVANCED_PROTECTION_BOTTOM, 2162}, {EF_ADVANCED_PROTECTION_CAST, 2163}, {EF_ADVANCED_PROTECTION_CAST_BOTTOM, 2164}, - {2165, 2165}, - {2166, 2166}, - {2167, 2167}, - {2168, 2168}, - {2169, 2169}, - {2170, 2170}, - {2171, 2171}, - {2172, 2172}, - {2173, 2173}, - {2174, 2174}, - {2175, 2175}, - {2176, 2176}, - {2177, 2177}, - {2178, 2178}, - {2179, 2179}, - {2180, 2180}, - {2181, 2181}, - {2182, 2182}, - {2183, 2183}, + {EF_UNK_2165, 2165}, + {EF_UNK_2166, 2166}, + {EF_UNK_2167, 2167}, + {EF_UNK_2168, 2168}, + {EF_UNK_2169, 2169}, + {EF_UNK_2170, 2170}, + {EF_UNK_2171, 2171}, + {EF_UNK_2172, 2172}, + {EF_UNK_2173, 2173}, + {EF_UNK_2174, 2174}, + {EF_UNK_2175, 2175}, + {EF_UNK_2176, 2176}, + {EF_UNK_2177, 2177}, + {EF_UNK_2178, 2178}, + {EF_UNK_2179, 2179}, + {EF_UNK_2180, 2180}, + {EF_UNK_2181, 2181}, + {EF_UNK_2182, 2182}, + {EF_UNK_2183, 2183}, {EF_SHIELD_SHOOTING_CAST, 2184}, {EF_SHIELD_SHOOTING_HIT, 2185}, {EF_THE_W_PROTECTION, 2186}, {EF_THE_W_PROTECTION_CAST, 2187}, - {2188, 2188}, - {2189, 2189}, - {2190, 2190}, - {2191, 2191}, - {2192, 2192}, - {2193, 2193}, - {2194, 2194}, - {2195, 2195}, - {2196, 2196}, - {2197, 2197}, - {2198, 2198}, - {2199, 2199}, - {2200, 2200}, - {2201, 2201}, - {2202, 2202}, - {2203, 2203}, + {EF_UNK_2188, 2188}, + {EF_UNK_2189, 2189}, + {EF_UNK_2190, 2190}, + {EF_UNK_2191, 2191}, + {EF_UNK_2192, 2192}, + {EF_UNK_2193, 2193}, + {EF_UNK_2194, 2194}, + {EF_UNK_2195, 2195}, + {EF_UNK_2196, 2196}, + {EF_UNK_2197, 2197}, + {EF_UNK_2198, 2198}, + {EF_UNK_2199, 2199}, + {EF_UNK_2200, 2200}, + {EF_UNK_2201, 2201}, + {EF_UNK_2202, 2202}, + {EF_UNK_2203, 2203}, {EF_ACIDIFIED_ZONE_FIRE_CAST, 2204}, {EF_ACIDIFIED_ZONE_FIRE_CAST_BOTTOM, 2205}, - {2206, 2206}, + {EF_UNK_2206, 2206}, {EF_ACIDIFIED_ZONE_FIRE_HIT, 2207}, {EF_ACIDIFIED_ZONE_FIRE_START, 2208}, {EF_ACIDIFIED_ZONE_FIRE_START_BOTTOM, 2209}, @@ -2220,7 +2220,7 @@ namespace { {EF_ACIDIFIED_ZONE_FIRE_LOOP_BOTTOM, 2211}, {EF_ACIDIFIED_ZONE_WATER_CAST, 2212}, {EF_ACIDIFIED_ZONE_WATER_CAST_BOTTOM, 2213}, - {2214, 2214}, + {EF_UNK_2214, 2214}, {EF_ACIDIFIED_ZONE_WATER_HIT, 2215}, {EF_ACIDIFIED_ZONE_WATER_START, 2216}, {EF_ACIDIFIED_ZONE_WATER_START_BOTTOM, 2217}, @@ -2228,7 +2228,7 @@ namespace { {EF_ACIDIFIED_ZONE_WATER_LOOP_BOTTOM, 2219}, {EF_ACIDIFIED_ZONE_WIND_CAST, 2220}, {EF_ACIDIFIED_ZONE_WIND_CAST_BOTTOM, 2221}, - {2222, 2222}, + {EF_UNK_2222, 2222}, {EF_ACIDIFIED_ZONE_WIND_HIT, 2223}, {EF_ACIDIFIED_ZONE_WIND_START, 2224}, {EF_ACIDIFIED_ZONE_WIND_START_BOTTOM, 2225}, @@ -2236,7 +2236,7 @@ namespace { {EF_ACIDIFIED_ZONE_WIND_LOOP_BOTTOM, 2227}, {EF_ACIDIFIED_ZONE_GROUND_CAST, 2228}, {EF_ACIDIFIED_ZONE_GROUND_CAST_BOTTOM, 2229}, - {2230, 2230}, + {EF_UNK_2230, 2230}, {EF_ACIDIFIED_ZONE_GROUND_HIT, 2231}, {EF_ACIDIFIED_ZONE_GROUND_START, 2232}, {EF_ACIDIFIED_ZONE_GROUND_START_BOTTOM, 2233}, @@ -2278,22 +2278,22 @@ namespace { {EF_STATE_CONFLAGRATION, 2269}, {EF_STATE_FROSTBITE, 2270}, {EF_STATE_FROSTBITE_FINISH, 2271}, - {2272, 2272}, + {EF_UNK_2272, 2272}, {EF_STATE_CRYSTALLIZATION, 2273}, {EF_STATE_DEADLYPOISON, 2274}, - {2275, 2275}, - {2276, 2276}, - {2277, 99999}, - {2278, 99999}, + {EF_UNK_2275, 2275}, + {EF_UNK_2276, 2276}, + {EF_UNK_2277, 99999}, + {EF_UNK_2278, 99999}, {EF_THIRD_CONSECRATION_BOTTOM, 2279}, - {2280, 2280}, - {2281, 2281}, - {2282, 2281}, - {2283, 2282}, - {2284, 2283}, - {2285, 2284}, - {2286, 2285}, - {2287, 2286}, + {EF_UNK_2280, 2280}, + {EF_UNK_2281, 2281}, + {EF_UNK_2282, 2281}, + {EF_UNK_2283, 2282}, + {EF_UNK_2284, 2283}, + {EF_UNK_2285, 2284}, + {EF_UNK_2286, 2285}, + {EF_UNK_2287, 2286}, {EF_STATUS_CRATE_UP, 100}, {EF_STATUS_CRATE_DOWN, 100}, {EF_STATUS_HPLUS_UP, 100}, @@ -2307,16 +2307,16 @@ namespace { {EF_STATUS_SMATK_UP, 100}, {EF_STATUS_SMATK_DOWN, 100}, {EF_STATUS_PATK_SMATK_UP, 100}, - {2301, 2301}, + {EF_UNK_2301, 2301}, {EF_NPC_KILLING_AURA, 2302}, {EF_NPC_KILLING_AURA_END, 2303}, {EF_NPC_KILLING_AURA_HIT, 2304}, - {2305, 2305}, - {2306, 2306}, - {2307, 2307}, + {EF_UNK_2305, 2305}, + {EF_UNK_2306, 2306}, + {EF_UNK_2307, 2307}, {EF_NPC_CANE_OF_EVIL_EYE, 2308}, - {2309, 99999999}, - {2310, 99999999}, + {EF_UNK_2309, 99999999}, + {EF_UNK_2310, 99999999}, {EF_UI_ENCHANT_INTRO_YELLOW, 2311}, {EF_UI_ENCHANT_SUCCESS, 2312}, {EF_UI_ENCHANT_FAIL, 2313}, @@ -2347,21 +2347,21 @@ namespace { {EF_THE_ONE_FIGHTER_RISES, 70}, {EF_THE_ONE_FIGHTER_RISES_BOTTOM, 2339}, {EF_TEMPERING, 2340}, - {2341, 2341}, + {EF_UNK_2341, 2341}, {EF_BLAST_FORGE_HIT, 2342}, - {2343, 2343}, - {2344, 2344}, - {2345, 2345}, + {EF_UNK_2343, 2343}, + {EF_UNK_2344, 2344}, + {EF_UNK_2345, 2345}, {EF_POK_94, 99999999}, {EF_POK_95, 99999999}, - {2348, 2348}, - {2349, 2349}, - {2350, 2350}, - {2351, 2351}, - {2352, 2352}, - {2353, 2353}, - {2354, 2354}, - {2355, 2355}, + {EF_UNK_2348, 2348}, + {EF_UNK_2349, 2349}, + {EF_UNK_2350, 2350}, + {EF_UNK_2351, 2351}, + {EF_UNK_2352, 2352}, + {EF_UNK_2353, 2353}, + {EF_UNK_2354, 2354}, + {EF_UNK_2355, 2355}, {EF_POK_96, 99999999}, {EF_POK_97, 99999999}, {EF_POK_98, 99999999}, @@ -2372,16 +2372,16 @@ namespace { {EF_POK_103, 99999999}, {EF_POK_104, 99999999}, {EF_POK_105, 99999999}, - {2366, 2366}, + {EF_UNK_2366, 2366}, {EF_UNKNOWN_RING_YELLOW, 40}, {EF_UNKNOWN_SPELL, 100}, {EF_UNKNOWN_RING_WHITE, 40}, - {2370, 2370}, + {EF_UNK_2370, 2370}, {EF_TETRA_VORTEX_WATER_SUB_2, 2371}, {EF_TETRA_VORTEX_EARTH_SUB_2, 2372}, {EF_VOLCANO_BLACK, 300}, {EF_CHANGE_SIZE, 99999999}, - {2375, 99999999}, + {EF_UNK_2375, 99999999}, {EF_NPC_20TH_CRYSTAL_S, 2376}, {EF_NPC_20TH_CRYSTAL_M, 2377}, {EF_NPC_20TH_CRYSTAL_L, 2378}, @@ -2396,11 +2396,11 @@ namespace { {EF_NPC_GATE_PURPLE_3, 2387}, {EF_NPC_GATE_RED_3, 2388}, {EF_NPC_GATE_SKYBLUE, 2389}, - {2390, 999999}, - {2391, 999999}, - {2392, 999999}, - {2393, 999999}, - {2394, 2394}, + {EF_UNK_2390, 999999}, + {EF_UNK_2391, 999999}, + {EF_UNK_2392, 999999}, + {EF_UNK_2393, 999999}, + {EF_UNK_2394, 2394}, {EF_RUNE_ACTIVE_FINISH, 2395}, {EF_RUNESET_ACTIVE, 2396}, {EF_RUNESET_UPGRADE_SUCCESS, 2397}, @@ -2408,63 +2408,63 @@ namespace { {EF_RUNE_BROKEN, 2399}, {EF_ALPHA_DOWN_ANIM, 2415}, {EF_GLOW_BLACK, 99999999}, - {2413, 99999999}, - {2414, 99999999}, - {2415, 99999999}, + {EF_UNK_2413, 99999999}, + {EF_UNK_2414, 99999999}, + {EF_UNK_2415, 99999999}, {EF_ABC_CHASING_LINE, 300}, {EF_ABC_CROSSIMPACT_LINE, 300}, - {2418, 2418}, - {2419, 2419}, + {EF_UNK_2418, 2418}, + {EF_UNK_2419, 2419}, {EF_RUNE_SLOT_SMALL, 2421}, {EF_RUNE_SLOT_BIG, 2422}, - {2423, 2423}, + {EF_UNK_2423, 2423}, {EF_WH_WILD_WALK, 250}, {EF_FORCE_ANIM_27, 100}, {EF_HEAL_BLUE_2, 100}, - {2432, 2432}, - {2433, 2433}, - {2434, 2434}, - {2435, 300}, + {EF_UNK_2432, 2432}, + {EF_UNK_2433, 2433}, + {EF_UNK_2434, 2434}, + {EF_UNK_2435, 300}, {EF_RG_COIN_BLUE, 3000}, {EF_RG_COIN_BLUE_2, 3000}, - {2438, 2438}, - {2439, 300}, - {2440, 99999999}, - {2441, 300}, - {2442, 300}, - {2443, 99999999}, - {2444, 500}, - {2445, 2435}, - {2446, 2436}, - {2447, 40}, - {2448, 40}, - {2449, 2438}, - {2450, 40}, - {2451, 9999}, - {2452, 999}, - {2453, 2000}, - {2454, 40}, - {2455, 499}, - {2456, 9999}, - {2457, 40}, - {2463, 100}, - {2464, 100}, - {2465, 100}, - {2466, 1000}, - {2468, 300}, - {2469, 40}, - {2470, 250}, - {2471, 29999}, - {2472, 9999}, - {2473, 9999}, - {2474, 100}, - {2477, 250}, - {2478, 100}, - {2479, 999}, - {2480, 499}, - {2481, 200}, - {2482, 99999999}, - {2483, 99999999}, + {EF_UNK_2438, 2438}, + {EF_UNK_2439, 300}, + {EF_UNK_2440, 99999999}, + {EF_UNK_2441, 300}, + {EF_UNK_2442, 300}, + {EF_UNK_2443, 99999999}, + {EF_UNK_2444, 500}, + {EF_UNK_2445, 2435}, + {EF_UNK_2446, 2436}, + {EF_UNK_2447, 40}, + {EF_UNK_2448, 40}, + {EF_UNK_2449, 2438}, + {EF_UNK_2450, 40}, + {EF_UNK_2451, 9999}, + {EF_UNK_2452, 999}, + {EF_UNK_2453, 2000}, + {EF_UNK_2454, 40}, + {EF_UNK_2455, 499}, + {EF_UNK_2456, 9999}, + {EF_UNK_2457, 40}, + {EF_UNK_2463, 100}, + {EF_UNK_2464, 100}, + {EF_UNK_2465, 100}, + {EF_UNK_2466, 1000}, + {EF_UNK_2468, 300}, + {EF_UNK_2469, 40}, + {EF_UNK_2470, 250}, + {EF_UNK_2471, 29999}, + {EF_UNK_2472, 9999}, + {EF_UNK_2473, 9999}, + {EF_UNK_2474, 100}, + {EF_UNK_2477, 250}, + {EF_UNK_2478, 100}, + {EF_UNK_2479, 999}, + {EF_UNK_2480, 499}, + {EF_UNK_2481, 200}, + {EF_UNK_2482, 99999999}, + {EF_UNK_2483, 99999999}, }; } diff --git a/Source/Contents/Effects/EffectTypes.h b/Source/Contents/Effects/EffectTypes.h index fac794d..2f9a4a8 100644 --- a/Source/Contents/Effects/EffectTypes.h +++ b/Source/Contents/Effects/EffectTypes.h @@ -1104,58 +1104,150 @@ enum RagEffectID : std::int32_t { EF_SPRITEMABLE = 1096, EF_TUNAPARTY = 1097, EF_FRESHSHRIMP = 1098, + EF_UNK_1099 = 1099, + EF_UNK_1100 = 1100, + EF_SU_SV_STEMSPEAR = 1101, + EF_SU_TUNABELLY = 1102, + EF_SU_SCRATCH = 1103, + EF_UNK_1104 = 1104, + EF_SU_BITE = 1105, + EF_UNK_1106 = 1106, + EF_SU_SCAROFTAROU = 1107, + EF_SU_ARCLOUSEDASH = 1108, + EF_SU_PICKYPECK = 1109, + EF_UNK_1110 = 1110, + EF_UNK_1111 = 1111, + EF_UNK_1112 = 1112, + EF_UNK_1113 = 1113, + EF_UNK_1114 = 1114, + EF_SU_CN_METEOR = 1115, + EF_SU_BUNCHOFSHRIMP = 1116, + EF_UNK_1117 = 1117, + EF_UNK_1118 = 1118, + EF_BITE_SCAR = 1119, + EF_SU_LUNATIC_CARROT_BEAT = 1120, + EF_WIDE_CRITICAL_WOUND = 1121, + EF_SU_SOUL_ATTACK = 1122, EF_SU_GROOMING = 1123, EF_SU_CHATTERING = 1124, + EF_SU_LOPE = 1125, + EF_SU_HISS = 1126, + EF_SU_POWEROFFLOCK = 1127, + EF_UNK_1128 = 1128, + EF_SU_SVG_SPIRIT = 1129, + EF_UNK_1130 = 1130, + EF_SU_SPIRIT_OF_LIFE = 1131, + EF_SU_STOOP = 1132, EF_FIREDANCE = 1133, EF_RICHS_COIN_A = 1134, + EF_RL_B_TRAP = 1135, + EF_RL_ANTI_MATERIAL_BLAST = 1136, EF_E_CHAIN = 1137, EF_HEAT_BARREL = 1138, EF_H_MINE = 1139, EF_FALLEN_ANGEL = 1140, - EF_IMMUNE_PROPERTY = 1149, - EF_MOVE_COORDINATE = 1150, - EF_LIGHTSPHERE_SUN = 1197, - EF_LIGHTSPHERE_MOON = 1198, - EF_LIGHTSPHERE_STAR = 1199, - EF_NOVAEXPLOSING = 1202, - EF_STAR_EMPEROR = 1203, - EF_SMA_BLACK = 1204, - EF_ENERGYDRAIN_BLACK = 1208, - EF_BLINK_BODY = 1209, - EF_SOLARBURST = 1218, - EF_SJ_DOCUMENT = 1219, - EF_FALLING_STAR = 1220, - EF_STORMKICK8 = 1223, - EF_NEWMOON_KICK = 1229, - EF_FULLMOON_KICK = 1230, - EF_BOOK_OF_DIMENSION = 1231, - EF_CURSE_EXPLOSION = 1233, - EF_SOUL_REAPER = 1234, - EF_SOUL_EXPLOSION = 1242, - EF_SU_SV_STEMSPEAR = 1101, - EF_SU_TUNABELLY = 1102, - EF_SU_SCRATCH = 1103, - EF_SU_BITE = 1105, - EF_SU_SCAROFTAROU = 1107, - EF_SU_ARCLOUSEDASH = 1108, - EF_SU_PICKYPECK = 1109, - EF_SU_BUNCHOFSHRIMP = 1116, - EF_BITE_SCAR = 1119, - EF_WIDE_CRITICAL_WOUND = 1121, - EF_SU_LOPE = 1125, - EF_SU_HISS = 1126, - EF_SU_POWEROFFLOCK = 1127, - EF_SU_SVG_SPIRIT = 1129, - EF_RL_ANTI_MATERIAL_BLAST = 1136, EF_WE_ONEFOREVER = 1141, EF_WE_CHEERUP = 1142, + EF_UNK_1143 = 1143, + EF_UNK_1144 = 1144, + EF_RL_HAMMER_OF_GOD = 1145, + EF_UNK_1146 = 1146, + EF_UNK_1147 = 1147, + EF_RL_R_TRIP = 1148, + EF_IMMUNE_PROPERTY = 1149, + EF_MOVE_COORDINATE = 1150, + EF_UNK_1151 = 1151, + EF_UNK_1152 = 1152, + EF_UNK_1153 = 1153, + EF_UNK_1154 = 1154, + EF_UNK_1155 = 1155, + EF_UNK_1156 = 1156, + EF_UNK_1157 = 1157, + EF_UNK_1158 = 1158, + EF_UNK_1159 = 1159, + EF_UNK_1160 = 1160, EF_QUAGMIRE_VISUAL = 1161, EF_LORD_OF_VERMILLION_VISUAL = 1162, EF_METEOR_STORM_VISUAL = 1163, + EF_UNK_1164 = 1164, + EF_UNK_1165 = 1165, + EF_UNK_1166 = 1166, + EF_UNK_1167 = 1167, + EF_UNK_1168 = 1168, + EF_UNK_1169 = 1169, + EF_UNK_1170 = 1170, + EF_UNK_1171 = 1171, + EF_UNK_1172 = 1172, + EF_UNK_1173 = 1173, + EF_UNK_1174 = 1174, + EF_UNK_1175 = 1175, + EF_UNK_1176 = 1176, + EF_UNK_1177 = 1177, + EF_UNK_1178 = 1178, + EF_UNK_1179 = 1179, + EF_UNK_1180 = 1180, + EF_UNK_1181 = 1181, + EF_UNK_1182 = 1182, + EF_UNK_1183 = 1183, + EF_UNK_1184 = 1184, + EF_WARPZONE3 = 1185, + EF_UNK_1186 = 1186, + EF_UNK_1187 = 1187, + EF_UNK_1188 = 1188, + EF_UNK_1189 = 1189, + EF_UNK_1190 = 1190, + EF_UNK_1191 = 1191, + EF_UNK_1192 = 1192, + EF_UNK_1193 = 1193, + EF_UNK_1194 = 1194, + EF_AUTOSHADOWSPELL_ACTIVE = 1195, + EF_UNK_1196 = 1196, + EF_LIGHTSPHERE_SUN = 1197, + EF_LIGHTSPHERE_MOON = 1198, + EF_LIGHTSPHERE_STAR = 1199, + EF_UNK_1200 = 1200, + EF_UNK_1201 = 1201, + EF_NOVAEXPLOSING = 1202, + EF_STAR_EMPEROR = 1203, + EF_SMA_BLACK = 1204, + EF_SMA_BLACK2 = 1205, + EF_STIN_BLACK = 1206, + EF_PEONG_BLACK = 1207, + EF_ENERGYDRAIN_BLACK = 1208, + EF_BLINK_BODY = 1209, + EF_LINELINK5 = 1210, + EF_UNK_1211 = 1211, + EF_UNK_1212 = 1212, + EF_UNK_1213 = 1213, + EF_UNK_1214 = 1214, + EF_UNK_1215 = 1215, + EF_UNK_1216 = 1216, + EF_UNK_1217 = 1217, + EF_SOLARBURST = 1218, + EF_SJ_DOCUMENT = 1219, + EF_FALLING_STAR = 1220, EF_FLASH_KICK = 1221, + EF_UNK_1222 = 1222, + EF_STORMKICK8 = 1223, + EF_SOLAR_EXPLOSION = 1224, + EF_UNK_1225 = 1225, + EF_UNK_1226 = 1226, + EF_UNK_1227 = 1227, EF_SOUL_GOLEM = 1228, + EF_NEWMOON_KICK = 1229, + EF_FULLMOON_KICK = 1230, + EF_BOOK_OF_DIMENSION = 1231, + EF_UNK_1232 = 1232, + EF_CURSE_EXPLOSION = 1233, + EF_SOUL_REAPER = 1234, + EF_UNK_1235 = 1235, + EF_UNK_1236 = 1236, + EF_UNK_1237 = 1237, EF_SOUL_CURSE = 1238, EF_PROMINENCE_KICK = 1239, + EF_SOUL_REAPER_COLLECT = 1240, + EF_UNK_1241 = 1241, + EF_SOUL_EXPLOSION = 1242, EF_SOUL_REVOLVE = 1243, EF_TEST_EFFECT_00 = 1244, EF_TEST_EFFECT_01 = 1245, @@ -1169,6 +1261,8 @@ enum RagEffectID : std::int32_t { EF_TEST_EFFECT_09 = 1253, EF_NEW_METEORSTORM = 1254, EF_NEW_METEORSTORM_BOTTOM = 1255, + EF_UNK_1256 = 1256, + EF_UNK_1257 = 1257, EF_NEW_ADORAMUS = 1258, EF_NEW_ADORAMUS_BOTTOM = 1259, EF_TETRA_VORTEX_CAST = 1260, @@ -1187,6 +1281,7 @@ enum RagEffectID : std::int32_t { EF_TETRA_VORTEX_EARTH_GROUND = 1273, EF_NEW_CRIMSONROCK = 1274, EF_NEW_CRIMSONROCK_BOTTOM = 1275, + EF_UNK_1276 = 1276, EF_TETRA_VORTEX_CORE_GROUND = 1277, EF_TETRA_VORTEX_FIRE_SUB = 1278, EF_TETRA_VORTEX_WATER_SUB = 1279, @@ -1196,10 +1291,13 @@ enum RagEffectID : std::int32_t { EF_NEW_DIAMONDDUST_BOTTOM = 1283, EF_NEW_DIAMONDDUST_CAST = 1284, EF_NEW_SEVERERAINSTORM_CAST = 1285, + EF_NEW_SEVERERAINSTORM_HIT = 1286, EF_NEW_SECRAMENT = 1287, EF_NEW_PSYCHICWAVE = 1288, EF_NEW_PSYCHICWAVE_BOTTOM = 1289, EF_NEW_PSYCHICWAVE_CAST = 1290, + EF_UNK_1291 = 1291, + EF_UNK_1292 = 1292, EF_NEW_ARROWSTORM_00 = 1293, EF_NEW_ARROWSTORM_01 = 1294, EF_NEW_SECRAMENT_AURA = 1295, @@ -1231,6 +1329,29 @@ enum RagEffectID : std::int32_t { EF_NEW_CROSSRIPPERSLASHER_09 = 1321, EF_NEW_CROSSRIPPERSLASHER_11 = 1322, EF_NEW_TIGERCANNON = 1323, + EF_UNK_1324 = 1324, + EF_UNK_1325 = 1325, + EF_UNK_1326 = 1326, + EF_UNK_1327 = 1327, + EF_UNK_1328 = 1328, + EF_UNK_1329 = 1329, + EF_UNK_1330 = 1330, + EF_UNK_1331 = 1331, + EF_UNK_1332 = 1332, + EF_UNK_1333 = 1333, + EF_UNK_1334 = 1334, + EF_UNK_1335 = 1335, + EF_UNK_1336 = 1336, + EF_UNK_1337 = 1337, + EF_UNK_1338 = 1338, + EF_UNK_1339 = 1339, + EF_UNK_1340 = 1340, + EF_UNK_1341 = 1341, + EF_UNK_1342 = 1342, + EF_UNK_1343 = 1343, + EF_UNK_1344 = 1344, + EF_UNK_1345 = 1345, + EF_UNK_1346 = 1346, EF_NEW_ARMSCANNON_01_UP = 1347, EF_NEW_ARMSCANNON_01_DOWN = 1348, EF_NEW_ARMSCANNON_05_UP = 1349, @@ -1241,6 +1362,7 @@ enum RagEffectID : std::int32_t { EF_NEW_ARMSCANNON_11_DOWN = 1354, EF_NEW_ARMSCANNON_EXPLOSION = 1355, EF_NEW_ARMSCANNON_EXPLOSION_BOTTOM = 1356, + EF_UNK_1357 = 1357, EF_NEW_CART_CANNON_EXPLOSION = 1358, EF_NEW_CART_CANNON_EXPLOSION_BOTTOM = 1359, EF_NEW_CART_CANNON_FIRE = 1360, @@ -1260,6 +1382,7 @@ enum RagEffectID : std::int32_t { EF_NEW_BANISHINGPOINT_05 = 1374, EF_NEW_BANISHINGPOINT_07 = 1375, EF_NEW_BANISHINGPOINT_11 = 1376, + EF_UNK_1377 = 1377, EF_NEW_DRAGONBREATH_BOMB = 1378, EF_NEW_DRAGONBREATH_BOMB_BOTTOM = 1379, EF_NEW_DRAGONBREATH_01 = 1380, @@ -1280,6 +1403,8 @@ enum RagEffectID : std::int32_t { EF_NEW_FATAL_MENACE_BOTTOM = 1395, EF_NEW_FATAL_MENACE_CAST = 1396, EF_NEW_FATAL_MENACE_CAST_BOTTOM = 1397, + EF_UNK_1398 = 1398, + EF_NEW_HEAVENS_DRIVE = 1399, EF_NEW_CANNON_SPEAR_12 = 1400, EF_NEW_CANNON_SPEAR_01 = 1401, EF_NEW_CANNON_SPEAR_03 = 1402, @@ -1289,6 +1414,7 @@ enum RagEffectID : std::int32_t { EF_NEW_CANNON_SPEAR_09 = 1406, EF_NEW_CANNON_SPEAR_11 = 1407, EF_NEW_CANNON_SPEAR_BOTTOM = 1408, + EF_NEW_TRIPLEATTACK = 1409, EF_NEW_BASICATTACK = 1410, EF_NEW_CRITICALATTACK = 1411, EF_NEW_RANGEDATTACK = 1412, @@ -1297,6 +1423,9 @@ enum RagEffectID : std::int32_t { EF_NEW_COMET_CAST_BOTTOM = 1415, EF_NEW_COMET_SUB_EXP = 1416, EF_NEW_COMET_SUB_EXP_BOTTOM = 1417, + EF_NEW_MOON_SLASH = 1418, + EF_UNK_1419 = 1419, + EF_NEW_GRANDCROSS = 1420, EF_NEW_COMET_CAST = 1421, EF_NEW_CART_CANNON_CAST = 1422, EF_NEW_CART_CANNON_CAST_BOTTOM = 1423, @@ -1324,6 +1453,8 @@ enum RagEffectID : std::int32_t { EF_NEW_JACKFROST_02 = 1445, EF_NEW_JACKFROST_CAST = 1446, EF_NEW_JACKFROST_RUNE = 1447, + EF_NEW_JACKFROST_ART = 1448, + EF_NEW_FROSTMISTY = 1449, EF_MINEFFECT_DIAMONDDUST = 1450, EF_MINEFFECT_DIAMONDDUST_BOTTOM = 1451, EF_MINEFFECT_DIAMONDDUST_CAST = 1452, @@ -1399,11 +1530,13 @@ enum RagEffectID : std::int32_t { EF_MINEFFECT_DRAGONBREATH_05 = 1522, EF_MINEFFECT_DRAGONBREATH_07 = 1523, EF_MINEFFECT_DRAGONBREATH_11 = 1524, + EF_WHITEIMPRISON_STATE = 1525, EF_MINEFFECT_DRAGONBREATH_WATER_BOMB = 1526, EF_MINEFFECT_DRAGONBREATH_WATER_01 = 1527, EF_MINEFFECT_DRAGONBREATH_WATER_05 = 1528, EF_MINEFFECT_DRAGONBREATH_WATER_07 = 1529, EF_MINEFFECT_DRAGONBREATH_WATER_11 = 1530, + EF_POK_THUNDER = 1531, EF_MINEFFECT_TIGERCANNON = 1532, EF_MINEFFECT_SEVERERAINSTORM_CAST = 1533, EF_MINEFFECT_COMET = 1534, @@ -1417,6 +1550,7 @@ enum RagEffectID : std::int32_t { EF_MINEFFECT_JACKFROST_02 = 1542, EF_MINEFFECT_JACKFROST_CAST = 1543, EF_MINEFFECT_JACKFROST_RUNE = 1544, + EF_NEW_MAGNUM_BREAK = 1545, EF_NEW_POISONSMOKE_1 = 1546, EF_NEW_POISONSMOKE_2 = 1547, EF_NEW_POISONSMOKE_CAST = 1548, @@ -1426,20 +1560,27 @@ enum RagEffectID : std::int32_t { EF_NEW_HELLINFERNO_CAST_BOTTOM = 1552, EF_NEW_HELLINFERNO_SUB = 1553, EF_NEW_HELLINFERNO_SUB_BOTTOM = 1554, + EF_UNK_1555 = 1555, + EF_NEW_HEAL_BLUE = 1556, EF_NEW_CLEARANCE = 1557, EF_NEW_CLEARANCE_BOTTOM = 1558, EF_NEW_CLEARANCE_CAST = 1559, + EF_NEW_HEAL_WHITE = 1560, EF_NEW_VARETYRSPEAR = 1561, EF_NEW_VARETYRSPEAR_BOTTOM = 1562, EF_NEW_VARETYRSPEAR_CAST = 1563, EF_NEW_VARETYRSPEAR_CAST_BOTTOM = 1564, + EF_NEW_HEAL_YELLOW = 1565, EF_NEW_CROSSIMPACT = 1566, EF_NEW_CROSSIMPACT_TARGET = 1567, + EF_NEW_CROSSIMPACT_HIT = 1568, + EF_NEW_REVERBERATION = 1569, EF_NEW_FALLENEMPIRE = 1570, EF_NEW_FALLENEMPIRE_BOTTOM = 1571, EF_NEW_FALLENEMPIRE_HIT = 1572, EF_NEW_GATEOFHELL_CAST = 1573, EF_NEW_GATEOFHELL_TARGET = 1574, + EF_NEW_GATEOFHELL = 1575, EF_NEW_HOWLINGOFLION = 1576, EF_NEW_HOWLINGOFLION_BOTTOM = 1577, EF_NEW_HOWLINGOFLION_CAST = 1578, @@ -1448,6 +1589,7 @@ enum RagEffectID : std::int32_t { EF_NEW_METALLICSOUND = 1581, EF_NEW_METALLICSOUND_BOTTOM = 1582, EF_NEW_METALLICSOUND_HIT = 1583, + EF_NEW_METALLICSOUND_LINE = 1584, EF_NEW_REPRODUCE = 1585, EF_NEW_REPRODUCE_BOTTOM = 1586, EF_NEW_SOULEXPANSION_CAST = 1587, @@ -1457,20 +1599,32 @@ enum RagEffectID : std::int32_t { EF_NEW_SOULEXPANSION_HIT = 1591, EF_NEW_SOULEXPANSION_HIT_BOTTOM = 1592, EF_NEW_REVERBERATION_HIT = 1593, + EF_NEW_REVERBERATION_NOTE = 1594, EF_NEW_AROMAOIL = 1595, EF_NEW_AROMAOIL_BOTTOM = 1596, EF_NEW_BATHFOAM = 1597, EF_NEW_BATHFOAM_BOTTOM = 1598, EF_TETRA_VORTEX_CORE_REUSE = 1599, + EF_GUARD5 = 1600, + EF_MAGIC_CIRCLE_1 = 1601, + EF_BIO5_PLANT_GREEN = 1602, + EF_BIO5_PLANT_BLUE = 1603, + EF_BIO5_PLANT_YELLOW = 1604, + EF_BIO5_PLANT_WHITE = 1605, + EF_BIO5_PLANT_RED = 1606, EF_GRADE_ENCHANT_INTRO = 1607, EF_GRADE_ENCHANT_SUCCESS = 1608, EF_GRADE_ENCHANT_FAILED = 1609, + EF_POK_MAGIC = 1610, EF_BLUE_WAVE_1 = 1611, EF_BLUE_WAVE_2 = 1612, EF_BLUE_WAVE_3 = 1613, EF_RED_WAVE_1 = 1614, EF_RED_WAVE_2 = 1615, EF_RED_WAVE_3 = 1616, + EF_UNK_1617 = 1617, + EF_UNK_1618 = 1618, + EF_UNK_1619 = 1619, EF_NEW_WALLOFTHORN_CAST = 1620, EF_NEW_WALLOFTHORN_CAST_BOTTOM = 1621, EF_NEW_EARTHGRAVE_BOTTOM = 1622, @@ -1506,16 +1660,30 @@ enum RagEffectID : std::int32_t { EF_NEW_UNLIMIT = 1652, EF_NEW_UNLIMIT_BOTTOM = 1653, EF_NEW_EPICLESIS = 1654, + EF_NEW_EPICLESIS_AURA = 1655, + EF_NEW_EPICLESIS_CAST = 1656, + EF_UNK_1657 = 1657, EF_NEW_AXEBOOMERANG_CAST = 1658, EF_NEW_AXEBOOMERANG_CAST_BOTTOM = 1659, EF_NEW_AXEBOOMERANG_HIT = 1660, + EF_UNK_1661 = 1661, + EF_UNK_1662 = 1662, + EF_UNK_1663 = 1663, + EF_NEW_SANCTUARY = 1664, EF_NEW_SPELLFIST_FIRE = 1665, EF_NEW_SPELLFIST_FIRE_BOTTOM = 1666, EF_NEW_SPELLFIST_WATER = 1667, EF_NEW_SPELLFIST_WATER_BOTTOM = 1668, EF_NEW_SPELLFIST_WIND = 1669, + EF_UNK_1670 = 1670, + EF_UNK_1671 = 1671, + EF_UNK_1672 = 1672, + EF_UNK_1673 = 1673, + EF_UNK_1674 = 1674, EF_NEW_CARTBOOST = 1675, EF_NEW_CARTBOOST_BOTTOM = 1676, + EF_NEW_SAFETYWALL = 1677, + EF_NEW_SONICWAVE = 1678, EF_NEW_OVERBRAND_01 = 1679, EF_NEW_OVERBRAND_03 = 1680, EF_NEW_OVERBRAND_05 = 1681, @@ -1531,6 +1699,10 @@ enum RagEffectID : std::int32_t { EF_NEW_WINDCUTTER_BOTTOM_01 = 1691, EF_NEW_WINDCUTTER_BOTTOM_05 = 1692, EF_NEW_WINDCUTTER_TARGET = 1693, + EF_UNK_1694 = 1694, + EF_UNK_1695 = 1695, + EF_UNK_1696 = 1696, + EF_UNK_1697 = 1697, EF_NEW_POWERSWING_01 = 1698, EF_NEW_POWERSWING_05 = 1699, EF_NEW_POWERSWING_07 = 1700, @@ -1542,12 +1714,27 @@ enum RagEffectID : std::int32_t { EF_NEW_EARTHDRIVE = 1706, EF_NEW_EARTHDRIVE_BOTTOM = 1707, EF_NEW_EARTHDRIVE_TARGET = 1708, + EF_NEW_EARTHDRIVE_CAST = 1709, + EF_UNK_1710 = 1710, + EF_UNK_1711 = 1711, + EF_UNK_1712 = 1712, + EF_UNK_1713 = 1713, + EF_UNK_1714 = 1714, + EF_UNK_1715 = 1715, + EF_UNK_1716 = 1716, + EF_UNK_1717 = 1717, + EF_UNK_1718 = 1718, + EF_UNK_1719 = 1719, + EF_UNK_1720 = 1720, + EF_UNK_1721 = 1721, EF_DRAGONIC_AURA = 1722, EF_DRAGONIC_AURA_BOTTOM = 1723, EF_DRAGONIC_AURA_HIT = 1724, EF_DRAGONIC_AURA_HIT_BOTTOM = 1725, EF_DRAGONIC_AURA_BUFF = 1726, EF_DRAGONIC_AURA_BUFF_BOTTOM = 1727, + EF_UNK_1728 = 1728, + EF_UNK_1729 = 1729, EF_NEW_AUTOSHADOWSPELL = 1730, EF_NEW_AUTOSHADOWSPELL_BOTTOM = 1731, EF_DESTRUCTIVE_HURRICANE = 1732, @@ -1568,14 +1755,25 @@ enum RagEffectID : std::int32_t { EF_ROCKDOWN_CAST = 1747, EF_ROCKDOWN_CAST_BOTTOM = 1748, EF_ROCKDOWN_HIT = 1749, + EF_UNK_1750 = 1750, + EF_UNK_1751 = 1751, + EF_UNK_1752 = 1752, EF_RAIN_OF_CRYSTAL = 1753, EF_RAIN_OF_CRYSTAL_BOTTOM = 1754, + EF_UNK_1755 = 1755, + EF_UNK_1756 = 1756, EF_CRIMSON_ARROW_CAST = 1757, EF_CRIMSON_ARROW_CAST_BOTTOM = 1758, EF_CRIMSON_ARROW_HIT = 1759, + EF_UNK_1760 = 1760, EF_VIOLENT_QUAKE_CAST = 1761, EF_VIOLENT_QUAKE_CAST_BOTTOM = 1762, EF_VIOLENT_QUAKE_HIT = 1763, + EF_UNK_1764 = 1764, + EF_UNK_1765 = 1765, + EF_UNK_1766 = 1766, + EF_UNK_1767 = 1767, + EF_UNK_1768 = 1768, EF_ASTRAL_STRIKE_CAST = 1769, EF_ASTRAL_STRIKE_CAST_BOTTOM = 1770, EF_MYSTERY_ILLUSION = 1771, @@ -1605,10 +1803,13 @@ enum RagEffectID : std::int32_t { EF_ALL_BLOOM_BOTTOM = 1795, EF_ALL_BLOOM_CAST = 1796, EF_ALL_BLOOM_CAST_BOTTOM = 1797, + EF_UNK_1798 = 1798, EF_ALL_BLOOM_HIT = 1799, + EF_UNK_1800 = 1800, EF_CLIMAX_LIGHT = 1801, EF_CLIMAX_CAST = 1802, EF_CLIMAX_CAST_LOOP = 1803, + EF_UNK_1804 = 1804, EF_FLORAL_FLARE_ROAD_CAST = 1805, EF_FLORAL_FLARE_ROAD_CAST_BOTTOM = 1806, EF_FLORAL_FLARE_ROAD_HIT = 1807, @@ -1631,20 +1832,31 @@ enum RagEffectID : std::int32_t { EF_ARBITRIUM = 1824, EF_ARBITRIUM_BOTTOM = 1825, EF_ARBITRIUM_HIT = 1826, + EF_UNK_1827 = 1827, + EF_UNK_1828 = 1828, + EF_UNK_1829 = 1829, + EF_UNK_1830 = 1830, EF_NEW_REPARATIO_CAST = 1831, EF_NEW_REPARATIO_CAST_BOTTOM = 1832, EF_NEW_REPARATIO = 1833, EF_NEW_REPARATIO_BOTTOM = 1834, EF_NEW_REPARATIO_TARGET = 1835, EF_NEW_REPARATIO_TARGET_BOTTOM = 1836, + EF_UNK_1837 = 1837, EF_ETERNAL_SLASH_HIT_1 = 1838, + EF_UNK_1839 = 1839, EF_A_MACHINE_CAST = 1840, + EF_UNK_1841 = 1841, EF_A_MACHINE_HIT = 1842, + EF_UNK_1843 = 1843, + EF_UNK_1844 = 1844, + EF_UNK_1845 = 1845, EF_EFFLIGO = 1846, EF_EFFLIGO_BOTTOM = 1847, EF_EFFLIGO_HIT = 1848, EF_COMPETENTIA = 1849, EF_COMPETENTIA_BOTTOM = 1850, + EF_UNK_1851 = 1851, EF_COMPETENTIA_LOOP = 1852, EF_COMPETENTIA_LOOP_BOTTOM = 1853, EF_CRYSTAL_IMPACT = 1854, @@ -1655,12 +1867,21 @@ enum RagEffectID : std::int32_t { EF_CRYSTAL_IMPACT_BUFF = 1859, EF_RELIGIO = 1860, EF_RELIGIO_CAST = 1861, + EF_UNK_1862 = 1862, + EF_UNK_1863 = 1863, EF_FATAL_SHADOW_CROW = 1864, EF_FATAL_SHADOW_CROW_BOTTOM = 1865, EF_FATAL_SHADOW_CROW_HIT = 1866, + EF_UNK_1867 = 1867, + EF_UNK_1868 = 1868, + EF_UNK_1869 = 1869, + EF_UNK_1870 = 1870, + EF_UNK_1871 = 1871, + EF_NEW_PNEUMA = 1872, EF_DEEP_BLIND_TRAP_CAST = 1873, EF_DEEP_BLIND_TRAP = 1874, EF_DEEP_BLIND_TRAP_HIT = 1875, + EF_NEW_SW_CAST = 1876, EF_SWIFT_TRAP_CAST = 1877, EF_SWIFT_TRAP = 1878, EF_SWIFT_TRAP_HIT = 1879, @@ -1679,9 +1900,14 @@ enum RagEffectID : std::int32_t { EF_STRATUM_TREMOR_HIT = 1892, EF_STRATUM_TREMOR = 1893, EF_STRATUM_TREMOR_BOTTOM = 1894, + EF_UNK_1895 = 1895, + EF_UNK_1896 = 1896, + EF_UNK_1897 = 1897, + EF_UNK_1898 = 1898, EF_WIND_SIGN = 1899, EF_WIND_SIGN_LOOP = 1900, EF_ABR_MOTHER_CAST = 1901, + EF_ABR_MOTHER = 1902, EF_ABR_MOTHER_01 = 1903, EF_ABR_MOTHER_02 = 1904, EF_HAWK_RUSH = 1905, @@ -1689,13 +1915,20 @@ enum RagEffectID : std::int32_t { EF_ABR_INFINITY_BOTTOM = 1907, EF_ABR_INFINITY_CAST = 1908, EF_ABR_INFINITY_HIT = 1909, + EF_ABR_INFINITY_RING = 1910, + EF_UNK_1911 = 1911, + EF_UNK_1912 = 1912, + EF_UNK_1913 = 1913, EF_ETERNAL_SLASH_HIT_2 = 1914, EF_NEW_D_CANNON = 1915, EF_NEW_D_CANNON_CAST = 1916, EF_NEW_D_CANNON_HIT = 1917, + EF_NEW_D_CANNON_ENTITY = 1918, EF_FLAME_TRAP = 1919, + EF_UNK_1920 = 1920, EF_FLAME_TRAP_CAST = 1921, EF_FLAME_TRAP_HIT = 1922, + EF_FLAME_TRAP_RING = 1923, EF_NEW_DILECTIO_HEAL = 1924, EF_NEW_DILECTIO_HEAL_CAST = 1925, EF_NEW_DILECTIO_HEAL_CAST_BOTTOM = 1926, @@ -1704,11 +1937,13 @@ enum RagEffectID : std::int32_t { EF_NEW_PRAMEN_BOTTOM = 1929, EF_NEW_PRAMEN_CAST = 1930, EF_NEW_PRAMEN = 1931, + EF_NEW_PRAMEN_RING = 1932, EF_NEW_POTENT_VENOM = 1933, EF_NEW_BATTLE_W = 1934, EF_NEW_BATTLE_W_CAST = 1935, EF_NEW_BATTLE_W_BOTTOM = 1936, EF_NEW_BATTLE_W_HIT = 1937, + EF_NEW_BATTLE_W_ENTITY = 1938, EF_NEW_AXE_STOMP_HIT = 1939, EF_NEW_AXE_STOMP_BOTTOM = 1940, EF_NEW_AXE_STOMP = 1941, @@ -1720,15 +1955,30 @@ enum RagEffectID : std::int32_t { EF_NEW_AXE_STOMP_08 = 1947, EF_NEW_AXE_STOMP_09 = 1948, EF_NEW_AXE_STOMP_11 = 1949, + EF_UNK_1950 = 1950, + EF_UNK_1951 = 1951, + EF_UNK_1952 = 1952, + EF_UNK_1953 = 1953, + EF_UNK_1954 = 1954, + EF_UNK_1955 = 1955, + EF_UNK_1956 = 1956, + EF_UNK_1957 = 1957, EF_PNEUMATICUS_PROCELLA_CAST = 1958, + EF_PNEUMATICUS_PROCELLA_RING = 1959, + EF_UNK_1960 = 1960, + EF_UNK_1961 = 1961, + EF_UNK_1962 = 1962, + EF_SINCERE_FAITH_RING = 1963, EF_SINCERE_FAITH = 1964, EF_SINCERE_FAITH_BOTTOM = 1965, EF_ABYSS_DAGGER = 1966, EF_ABYSS_DAGGER_HIT = 1967, + EF_UNK_1968 = 1968, EF_HAWK_BOOMERANG_CAST = 1969, EF_HAWK_BOOMERANG_HIT = 1970, EF_HAWK_BOOMERANG_START = 1971, EF_GALE_STORM_CAST = 1972, + EF_UNK_1973 = 1973, EF_GALE_STORM_HIT = 1974, EF_FIRST_FAITH_POWER = 1975, EF_FIRST_FAITH_POWER_CAST = 1976, @@ -1741,6 +1991,7 @@ enum RagEffectID : std::int32_t { EF_THIRD_EXOR_FLAME_CAST = 1983, EF_THIRD_EXOR_FLAME_START = 1984, EF_THIRD_EXOR_FLAME_AURA = 1985, + EF_POWERFUL_FAITH_RING = 1986, EF_POWERFUL_FAITH = 1987, EF_OLEUM_SANCTUM = 1988, EF_OLEUM_SANCTUM_BOTTOM = 1989, @@ -1752,10 +2003,17 @@ enum RagEffectID : std::int32_t { EF_EXPLOSION_BLASTER = 1995, EF_EXPLOSION_BLASTER_BOTTOM = 1996, EF_EXPLOSION_BLASTER_HIT = 1997, + EF_FIRM_FAITH_RING = 1998, EF_FIRM_FAITH = 1999, + EF_UNK_2000 = 2000, + EF_UNK_2001 = 2001, + EF_UNK_2002 = 2002, EF_ACTIVITY_BURN = 2003, EF_ACTIVITY_BURN_CAST = 2004, EF_ACTIVITY_BURN_CAST_BOTTOM = 2005, + EF_UNK_2006 = 2006, + EF_UNK_2007 = 2007, + EF_UNK_2008 = 2008, EF_SERPENS_BOTTOM = 2009, EF_SERPENS_CAST = 2010, EF_SERPENS_CAST_BOTTOM = 2011, @@ -1773,6 +2031,7 @@ enum RagEffectID : std::int32_t { EF_DILUVIO_HIT = 2023, EF_DILUVIO_ARMOR = 2024, EF_SPELL_ENCHANTING = 2025, + EF_UNK_2026 = 2026, EF_DIAMOND_STORM_BOTTOM = 2027, EF_DIAMOND_STORM_CAST = 2028, EF_DIAMOND_STORM_CAST_BOTTOM = 2029, @@ -1792,6 +2051,11 @@ enum RagEffectID : std::int32_t { EF_LIGHTNING_LAND_CAST = 2043, EF_LIGHTNING_LAND_CAST_BOTTOM = 2044, EF_LIGHTNING_LAND_HIT = 2045, + EF_UNK_2046 = 2046, + EF_UNK_2047 = 2047, + EF_UNK_2048 = 2048, + EF_UNK_2049 = 2049, + EF_UNK_2050 = 2050, EF_FIRST_BRAND = 2051, EF_FIRST_BRAND_AURA = 2052, EF_FIRST_BRAND_HIT = 2053, @@ -1806,11 +2070,24 @@ enum RagEffectID : std::int32_t { EF_SOUND_BLEND_CAST_BOTTOM = 2062, EF_SOUND_BLEND_RED = 2063, EF_METALLIC_FURY = 2064, + EF_UNK_2065 = 2065, + EF_UNK_2066 = 2066, + EF_UNK_2067 = 2067, + EF_UNK_2068 = 2068, + EF_UNK_2069 = 2069, + EF_UNK_2070 = 2070, + EF_UNK_2071 = 2071, + EF_UNK_2072 = 2072, + EF_UNK_2073 = 2073, + EF_UNK_2074 = 2074, EF_NIFLHEIM = 2075, EF_NIFLHEIM_CAST = 2076, + EF_UNK_2077 = 2077, EF_SECOND_FAITH = 2078, EF_SECOND_FAITH_AURA = 2079, + EF_UNK_2080 = 2080, EF_SECOND_FAITH_START = 2081, + EF_UNK_2082 = 2082, EF_SECOND_FLAME = 2083, EF_SECOND_FLAME_BOTTOM = 2084, EF_THIRD_FLAME_BOMB = 2085, @@ -1837,13 +2114,23 @@ enum RagEffectID : std::int32_t { EF_TERREMOTUS_CAST_BOTTOM = 2106, EF_TERREMOTUS_HIT = 2107, EF_TERREMOTUS_PROTECT = 2108, + EF_UNK_2109 = 2109, EF_FROM_THE_ABYSS = 2110, EF_ABYSS_STRIKE_HIT_2 = 2111, EF_THIRD_PUNISH = 2112, EF_THIRD_PUNISH_BOTTOM = 2113, + EF_UNK_2114 = 2114, EF_FRENZY_SHOT_HIT = 2115, + EF_UNK_2116 = 2116, + EF_UNK_2117 = 2117, + EF_UNK_2118 = 2118, + EF_UNK_2119 = 2119, + EF_UNK_2120 = 2120, + EF_UNK_2121 = 2121, EF_MUSICAL_INTERLUDE = 2122, EF_MUSICAL_INTERLUDE_CAST = 2123, + EF_UNK_2124 = 2124, + EF_UNK_2125 = 2125, EF_ABYSS_SLAYER = 2126, EF_ABYSS_SLAYER_CAST = 2127, EF_ABYSS_SLAYER_CAST_BOTTOM = 2128, @@ -1872,18 +2159,59 @@ enum RagEffectID : std::int32_t { EF_ELEMENTAL_BUSTER_WIND = 2151, EF_ELEMENTAL_BUSTER_WIND_BOTTOM = 2152, EF_ELEMENTAL_BUSTER_WIND_HIT = 2153, + EF_UNK_2154 = 2154, EF_UNLUCKY_RUSH_CAST = 2155, EF_ABYSS_DAGGER_HIT_3 = 2156, + EF_UNK_2157 = 2157, + EF_UNK_2158 = 2158, + EF_UNK_2159 = 2159, + EF_UNK_2160 = 2160, EF_ADVANCED_PROTECTION = 2161, EF_ADVANCED_PROTECTION_BOTTOM = 2162, EF_ADVANCED_PROTECTION_CAST = 2163, EF_ADVANCED_PROTECTION_CAST_BOTTOM = 2164, + EF_UNK_2165 = 2165, + EF_UNK_2166 = 2166, + EF_UNK_2167 = 2167, + EF_UNK_2168 = 2168, + EF_UNK_2169 = 2169, + EF_UNK_2170 = 2170, + EF_UNK_2171 = 2171, + EF_UNK_2172 = 2172, + EF_UNK_2173 = 2173, + EF_UNK_2174 = 2174, + EF_UNK_2175 = 2175, + EF_UNK_2176 = 2176, + EF_UNK_2177 = 2177, + EF_UNK_2178 = 2178, + EF_UNK_2179 = 2179, + EF_UNK_2180 = 2180, + EF_UNK_2181 = 2181, + EF_UNK_2182 = 2182, + EF_UNK_2183 = 2183, EF_SHIELD_SHOOTING_CAST = 2184, EF_SHIELD_SHOOTING_HIT = 2185, EF_THE_W_PROTECTION = 2186, EF_THE_W_PROTECTION_CAST = 2187, + EF_UNK_2188 = 2188, + EF_UNK_2189 = 2189, + EF_UNK_2190 = 2190, + EF_UNK_2191 = 2191, + EF_UNK_2192 = 2192, + EF_UNK_2193 = 2193, + EF_UNK_2194 = 2194, + EF_UNK_2195 = 2195, + EF_UNK_2196 = 2196, + EF_UNK_2197 = 2197, + EF_UNK_2198 = 2198, + EF_UNK_2199 = 2199, + EF_UNK_2200 = 2200, + EF_UNK_2201 = 2201, + EF_UNK_2202 = 2202, + EF_UNK_2203 = 2203, EF_ACIDIFIED_ZONE_FIRE_CAST = 2204, EF_ACIDIFIED_ZONE_FIRE_CAST_BOTTOM = 2205, + EF_UNK_2206 = 2206, EF_ACIDIFIED_ZONE_FIRE_HIT = 2207, EF_ACIDIFIED_ZONE_FIRE_START = 2208, EF_ACIDIFIED_ZONE_FIRE_START_BOTTOM = 2209, @@ -1891,6 +2219,7 @@ enum RagEffectID : std::int32_t { EF_ACIDIFIED_ZONE_FIRE_LOOP_BOTTOM = 2211, EF_ACIDIFIED_ZONE_WATER_CAST = 2212, EF_ACIDIFIED_ZONE_WATER_CAST_BOTTOM = 2213, + EF_UNK_2214 = 2214, EF_ACIDIFIED_ZONE_WATER_HIT = 2215, EF_ACIDIFIED_ZONE_WATER_START = 2216, EF_ACIDIFIED_ZONE_WATER_START_BOTTOM = 2217, @@ -1898,6 +2227,7 @@ enum RagEffectID : std::int32_t { EF_ACIDIFIED_ZONE_WATER_LOOP_BOTTOM = 2219, EF_ACIDIFIED_ZONE_WIND_CAST = 2220, EF_ACIDIFIED_ZONE_WIND_CAST_BOTTOM = 2221, + EF_UNK_2222 = 2222, EF_ACIDIFIED_ZONE_WIND_HIT = 2223, EF_ACIDIFIED_ZONE_WIND_START = 2224, EF_ACIDIFIED_ZONE_WIND_START_BOTTOM = 2225, @@ -1905,6 +2235,7 @@ enum RagEffectID : std::int32_t { EF_ACIDIFIED_ZONE_WIND_LOOP_BOTTOM = 2227, EF_ACIDIFIED_ZONE_GROUND_CAST = 2228, EF_ACIDIFIED_ZONE_GROUND_CAST_BOTTOM = 2229, + EF_UNK_2230 = 2230, EF_ACIDIFIED_ZONE_GROUND_HIT = 2231, EF_ACIDIFIED_ZONE_GROUND_START = 2232, EF_ACIDIFIED_ZONE_GROUND_START_BOTTOM = 2233, @@ -1914,6 +2245,7 @@ enum RagEffectID : std::int32_t { EF_HELLTREE_CAST_BOTTOM = 2237, EF_HELLTREE_DUSTY = 2238, EF_HELLTREE_HOWLING = 2239, + EF_RESEARCH_REPORT_RING = 2240, EF_RESEARCH_REPORT = 2241, EF_RESEARCH_REPORT_CAST = 2242, EF_RESEARCH_REPORT_CAST_BOTTOM = 2243, @@ -1922,11 +2254,13 @@ enum RagEffectID : std::int32_t { EF_STATE_HOLYFLAME = 2246, EF_WOODEN_WARRIOR_CAST = 2247, EF_WOODEN_WARRIOR_CAST_BOTTOM = 2248, + EF_WOODEN_WARRIOR_RING = 2249, EF_WOODEN_WARRIOR_ATTACK = 2250, EF_WOODEN_WARRIOR_ATTACK_HIT = 2251, EF_WOODEN_WARRIOR_THROWROCK = 2252, EF_WOODEN_WARRIOR_THROWROCK_HIT = 2253, EF_WOODEN_FAIRY_CAST = 2254, + EF_WOODEN_FAIRY_RING = 2255, EF_WOODEN_FAIRY_CAST_BOTTOM = 2256, EF_WOODEN_FAIRY_DUSTY = 2257, EF_SERPENS_DEEP_POISONING = 2258, @@ -1943,13 +2277,45 @@ enum RagEffectID : std::int32_t { EF_STATE_CONFLAGRATION = 2269, EF_STATE_FROSTBITE = 2270, EF_STATE_FROSTBITE_FINISH = 2271, + EF_UNK_2272 = 2272, EF_STATE_CRYSTALLIZATION = 2273, EF_STATE_DEADLYPOISON = 2274, + EF_UNK_2275 = 2275, + EF_UNK_2276 = 2276, + EF_UNK_2277 = 2277, + EF_UNK_2278 = 2278, EF_THIRD_CONSECRATION_BOTTOM = 2279, + EF_UNK_2280 = 2280, + EF_UNK_2281 = 2281, + EF_UNK_2282 = 2282, + EF_UNK_2283 = 2283, + EF_UNK_2284 = 2284, + EF_UNK_2285 = 2285, + EF_UNK_2286 = 2286, + EF_UNK_2287 = 2287, + EF_STATUS_CRATE_UP = 2288, + EF_STATUS_CRATE_DOWN = 2289, + EF_STATUS_HPLUS_UP = 2290, + EF_STATUS_HPLUS_DOWN = 2291, + EF_STATUS_MRES_UP = 2292, + EF_STATUS_MRES_DOWN = 2293, + EF_STATUS_PATK_UP = 2294, + EF_STATUS_PATK_DOWN = 2295, + EF_STATUS_RES_UP = 2296, + EF_STATUS_RES_DOWN = 2297, + EF_STATUS_SMATK_UP = 2298, + EF_STATUS_SMATK_DOWN = 2299, + EF_STATUS_PATK_SMATK_UP = 2300, + EF_UNK_2301 = 2301, EF_NPC_KILLING_AURA = 2302, EF_NPC_KILLING_AURA_END = 2303, EF_NPC_KILLING_AURA_HIT = 2304, + EF_UNK_2305 = 2305, + EF_UNK_2306 = 2306, + EF_UNK_2307 = 2307, EF_NPC_CANE_OF_EVIL_EYE = 2308, + EF_UNK_2309 = 2309, + EF_UNK_2310 = 2310, EF_UI_ENCHANT_INTRO_YELLOW = 2311, EF_UI_ENCHANT_SUCCESS = 2312, EF_UI_ENCHANT_FAIL = 2313, @@ -1977,12 +2343,44 @@ enum RagEffectID : std::int32_t { EF_GLANZEN_SPIES = 2335, EF_GLANZEN_SPIES_HIT = 2336, EF_BLAZING_AND_FURIOUS = 2337, + EF_THE_ONE_FIGHTER_RISES = 2338, EF_THE_ONE_FIGHTER_RISES_BOTTOM = 2339, EF_TEMPERING = 2340, + EF_UNK_2341 = 2341, EF_BLAST_FORGE_HIT = 2342, EF_UNK_2343 = 2343, + EF_UNK_2344 = 2344, + EF_UNK_2345 = 2345, + EF_POK_94 = 2346, + EF_POK_95 = 2347, + EF_UNK_2348 = 2348, + EF_UNK_2349 = 2349, + EF_UNK_2350 = 2350, + EF_UNK_2351 = 2351, + EF_UNK_2352 = 2352, + EF_UNK_2353 = 2353, + EF_UNK_2354 = 2354, + EF_UNK_2355 = 2355, + EF_POK_96 = 2356, + EF_POK_97 = 2357, + EF_POK_98 = 2358, + EF_POK_99 = 2359, + EF_POK_100 = 2360, + EF_POK_101 = 2361, + EF_POK_102 = 2362, + EF_POK_103 = 2363, + EF_POK_104 = 2364, + EF_POK_105 = 2365, + EF_UNK_2366 = 2366, + EF_UNKNOWN_RING_YELLOW = 2367, + EF_UNKNOWN_SPELL = 2368, + EF_UNKNOWN_RING_WHITE = 2369, + EF_UNK_2370 = 2370, EF_TETRA_VORTEX_WATER_SUB_2 = 2371, EF_TETRA_VORTEX_EARTH_SUB_2 = 2372, + EF_VOLCANO_BLACK = 2373, + EF_CHANGE_SIZE = 2374, + EF_UNK_2375 = 2375, EF_NPC_20TH_CRYSTAL_S = 2376, EF_NPC_20TH_CRYSTAL_M = 2377, EF_NPC_20TH_CRYSTAL_L = 2378, @@ -1997,11 +2395,18 @@ enum RagEffectID : std::int32_t { EF_NPC_GATE_PURPLE_3 = 2387, EF_NPC_GATE_RED_3 = 2388, EF_NPC_GATE_SKYBLUE = 2389, + EF_UNK_2390 = 2390, + EF_UNK_2391 = 2391, + EF_UNK_2392 = 2392, + EF_UNK_2393 = 2393, + EF_UNK_2394 = 2394, EF_RUNE_ACTIVE_FINISH = 2395, EF_RUNESET_ACTIVE = 2396, EF_RUNESET_UPGRADE_SUCCESS = 2397, EF_RUNESET_UPGRADE_FAIL = 2398, EF_RUNE_BROKEN = 2399, + EF_ALPHA_DOWN_ANIM = 2401, + EF_GLOW_BLACK = 2402, EF_NEW_BATTLE_W_HIT_2 = 2403, EF_NEW_PRAMEN_REUSE = 2405, EF_THE_W_PROTECTION_REUSE = 2406, @@ -2009,122 +2414,64 @@ enum RagEffectID : std::int32_t { EF_DESTRUCTIVE_HURRICANE_BOTTOM_REUSE = 2408, EF_CRYSTAL_IMPACT_BOTTOM_REUSE = 2409, EF_NEW_JUDEX_TARGET_REUSE = 2410, - EF_RUNE_SLOT_SMALL = 2421, - EF_RUNE_SLOT_BIG = 2422, - - EF_SU_CN_METEOR = 1115, - EF_SU_LUNATIC_CARROT_BEAT = 1120, - EF_SU_SOUL_ATTACK = 1122, - EF_SU_SPIRIT_OF_LIFE = 1131, - EF_SU_STOOP = 1132, - - EF_RL_B_TRAP = 1135, - EF_RL_HAMMER_OF_GOD = 1145, - EF_RL_R_TRIP = 1148, - - EF_WARPZONE3 = 1185, - EF_AUTOSHADOWSPELL_ACTIVE = 1195, - EF_SMA_BLACK2 = 1205, - EF_STIN_BLACK = 1206, - EF_PEONG_BLACK = 1207, - EF_LINELINK5 = 1210, - EF_SOLAR_EXPLOSION = 1224, - EF_SOUL_REAPER_COLLECT = 1240, - EF_NEW_SEVERERAINSTORM_HIT = 1286, - EF_NEW_HEAVENS_DRIVE = 1399, - EF_NEW_TRIPLEATTACK = 1409, - - EF_NEW_MOON_SLASH = 1418, - EF_NEW_GRANDCROSS = 1420, - EF_NEW_JACKFROST_ART = 1448, - EF_NEW_FROSTMISTY = 1449, - EF_WHITEIMPRISON_STATE = 1525, - EF_POK_THUNDER = 1531, - EF_NEW_MAGNUM_BREAK = 1545, - EF_NEW_HEAL_BLUE = 1556, - EF_NEW_HEAL_WHITE = 1560, - EF_NEW_HEAL_YELLOW = 1565, - EF_NEW_CROSSIMPACT_HIT = 1568, - EF_NEW_REVERBERATION = 1569, - EF_NEW_GATEOFHELL = 1575, - EF_NEW_METALLICSOUND_LINE = 1584, - EF_NEW_REVERBERATION_NOTE = 1594, - EF_GUARD5 = 1600, - - EF_MAGIC_CIRCLE_1 = 1601, - EF_BIO5_PLANT_GREEN = 1602, - EF_BIO5_PLANT_BLUE = 1603, - EF_BIO5_PLANT_YELLOW = 1604, - EF_BIO5_PLANT_WHITE = 1605, - EF_BIO5_PLANT_RED = 1606, - EF_POK_MAGIC = 1610, - - EF_NEW_EPICLESIS_AURA = 1655, - EF_NEW_EPICLESIS_CAST = 1656, - EF_NEW_SANCTUARY = 1664, - EF_NEW_SAFETYWALL = 1677, - EF_NEW_SONICWAVE = 1678, - EF_NEW_EARTHDRIVE_CAST = 1709, - EF_NEW_PNEUMA = 1872, - EF_NEW_SW_CAST = 1876, - - EF_ABR_MOTHER = 1902, - EF_ABR_INFINITY_RING = 1910, - EF_NEW_D_CANNON_ENTITY = 1918, - EF_FLAME_TRAP_RING = 1923, - EF_NEW_PRAMEN_RING = 1932, - EF_NEW_BATTLE_W_ENTITY = 1938, - EF_PNEUMATICUS_PROCELLA_RING = 1959, - EF_SINCERE_FAITH_RING = 1963, - EF_POWERFUL_FAITH_RING = 1986, - EF_FIRM_FAITH_RING = 1998, - EF_RESEARCH_REPORT_RING = 2240, - EF_WOODEN_WARRIOR_RING = 2249, - EF_WOODEN_FAIRY_RING = 2255, - - EF_STATUS_CRATE_UP = 2288, - EF_STATUS_CRATE_DOWN = 2289, - EF_STATUS_HPLUS_UP = 2290, - EF_STATUS_HPLUS_DOWN = 2291, - EF_STATUS_MRES_UP = 2292, - EF_STATUS_MRES_DOWN = 2293, - EF_STATUS_PATK_UP = 2294, - EF_STATUS_PATK_DOWN = 2295, - EF_STATUS_RES_UP = 2296, - EF_STATUS_RES_DOWN = 2297, - EF_STATUS_SMATK_UP = 2298, - EF_STATUS_SMATK_DOWN = 2299, - EF_STATUS_PATK_SMATK_UP = 2300, - - EF_THE_ONE_FIGHTER_RISES = 2338, - EF_POK_94 = 2346, - EF_POK_95 = 2347, - EF_POK_96 = 2356, - EF_POK_97 = 2357, - EF_POK_98 = 2358, - EF_POK_99 = 2359, - EF_POK_100 = 2360, - EF_POK_101 = 2361, - EF_POK_102 = 2362, - EF_POK_103 = 2363, - EF_POK_104 = 2364, - EF_POK_105 = 2365, - - EF_UNKNOWN_RING_YELLOW = 2367, - EF_UNKNOWN_SPELL = 2368, - EF_UNKNOWN_RING_WHITE = 2369, - EF_VOLCANO_BLACK = 2373, - EF_CHANGE_SIZE = 2374, - - EF_ALPHA_DOWN_ANIM = 2401, - EF_GLOW_BLACK = 2402, + EF_UNK_2413 = 2413, + EF_UNK_2414 = 2414, + EF_UNK_2415 = 2415, EF_ABC_CHASING_LINE = 2416, EF_ABC_CROSSIMPACT_LINE = 2417, + EF_UNK_2418 = 2418, + EF_UNK_2419 = 2419, + EF_RUNE_SLOT_SMALL = 2421, + EF_RUNE_SLOT_BIG = 2422, + EF_UNK_2423 = 2423, EF_WH_WILD_WALK = 2425, EF_FORCE_ANIM_27 = 2426, EF_HEAL_BLUE_2 = 2427, + EF_UNK_2432 = 2432, + EF_UNK_2433 = 2433, + EF_UNK_2434 = 2434, + EF_UNK_2435 = 2435, EF_RG_COIN_BLUE = 2436, EF_RG_COIN_BLUE_2 = 2437, + EF_UNK_2438 = 2438, + EF_UNK_2439 = 2439, + EF_UNK_2440 = 2440, + EF_UNK_2441 = 2441, + EF_UNK_2442 = 2442, + EF_UNK_2443 = 2443, + EF_UNK_2444 = 2444, + EF_UNK_2445 = 2445, + EF_UNK_2446 = 2446, + EF_UNK_2447 = 2447, + EF_UNK_2448 = 2448, + EF_UNK_2449 = 2449, + EF_UNK_2450 = 2450, + EF_UNK_2451 = 2451, + EF_UNK_2452 = 2452, + EF_UNK_2453 = 2453, + EF_UNK_2454 = 2454, + EF_UNK_2455 = 2455, + EF_UNK_2456 = 2456, + EF_UNK_2457 = 2457, + EF_UNK_2463 = 2463, + EF_UNK_2464 = 2464, + EF_UNK_2465 = 2465, + EF_UNK_2466 = 2466, + EF_UNK_2468 = 2468, + EF_UNK_2469 = 2469, + EF_UNK_2470 = 2470, + EF_UNK_2471 = 2471, + EF_UNK_2472 = 2472, + EF_UNK_2473 = 2473, + EF_UNK_2474 = 2474, + EF_UNK_2477 = 2477, + EF_UNK_2478 = 2478, + EF_UNK_2479 = 2479, + EF_UNK_2480 = 2480, + EF_UNK_2481 = 2481, + EF_UNK_2482 = 2482, + EF_UNK_2483 = 2483, + }; enum efst_type : std::int16_t { From b1b73cc31828746068dfef81f8b613237d10d8e8 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:47:02 +0100 Subject: [PATCH 23/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(strings)?= =?UTF-8?q?:=20converted=20hex-escaped=20Korean=20strings=20to=20UTF-8=20l?= =?UTF-8?q?iterals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Resource/Models/ModelResourceV2.cpp | 3 +-- Source/UI/Acceptance/UIChooseSellBuyWnd.cpp | 2 +- Source/UI/Buttons/UIBasicButton.cpp | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Source/Resource/Models/ModelResourceV2.cpp b/Source/Resource/Models/ModelResourceV2.cpp index e3f4ed0..45daf08 100644 --- a/Source/Resource/Models/ModelResourceV2.cpp +++ b/Source/Resource/Models/ModelResourceV2.cpp @@ -65,8 +65,7 @@ bool C3dModelResV2::Load(const char* name) { input.Read(magic, 4); if (std::strcmp(magic, "GRSM") != 0) { - constexpr char message[] = "\xB8\xF0\xB5\xA8\xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. \xC7\xFC\xBD\xC4\xC0\xBB " - "\xB4\xD9\xBD\xC3\xC7\xD1\xB9\xF8 \xC8\xAE\xC0\xCE\xC7\xD8\xC1\xD6\xBC\xBC\xBF\xE4."; + constexpr char message[] = "모델파일이 아닙니다. 형식을 다시한번 확인해주세요."; ShowErrorDialog(this->m_context->renderSystem, message, 0); file.Close(); diff --git a/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp b/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp index d02159a..0192af7 100644 --- a/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp +++ b/Source/UI/Acceptance/UIChooseSellBuyWnd.cpp @@ -10,7 +10,7 @@ #include namespace { - constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\"; + constexpr char prefix[] = "유저인터페이스\\"; } // OFFSET: 0x008C73C0 diff --git a/Source/UI/Buttons/UIBasicButton.cpp b/Source/UI/Buttons/UIBasicButton.cpp index c7846a3..497f6e1 100644 --- a/Source/UI/Buttons/UIBasicButton.cpp +++ b/Source/UI/Buttons/UIBasicButton.cpp @@ -40,7 +40,7 @@ void UIBasicButton::Paint() { if (this->m_disabled == 1 || this->geometry.unknown_0030 <= 2) { static constexpr const char* skins[] = {"out", "over", "press", "disable"}; - const std::string prefix = std::string("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\btn_") + skins[state]; + const std::string prefix = std::string("유저인터페이스\\basic_interface\\btn_") + skins[state]; const auto drawBitmap = [&](const char* suffix, int x) { auto* bitmap = static_cast(this->m_buttonContext->resources.Load((prefix + suffix).c_str())); this->DrawBitmap(x, 0, bitmap ? &bitmap->image : nullptr, false); From d54f050f5bda5a9ff153d05216c3bc2187470818 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:50:11 +0000 Subject: [PATCH 24/62] Decompile 3 functions in Source/Utility/Tokenizer.cpp, Source/Utility/Tokenizer.h Batch #988 by ragnarok-clanker: 0 byte-identical, 3 confirmed by peer review. - fn_07779 CTokenizer::operator[]: logic confirmed by peer review - fn_18248 CTokenizer::Parse: logic confirmed by peer review - fn_18261 CTokenizer::Parse: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Utility/Tokenizer.cpp --- Source/Utility/Tokenizer.cpp | 66 ++++++++++++++++++++++++++++++++++++ Source/Utility/Tokenizer.h | 21 ++++++++++++ compile.json | 1 + 3 files changed, 88 insertions(+) create mode 100644 Source/Utility/Tokenizer.cpp create mode 100644 Source/Utility/Tokenizer.h diff --git a/Source/Utility/Tokenizer.cpp b/Source/Utility/Tokenizer.cpp new file mode 100644 index 0000000..b4d29a1 --- /dev/null +++ b/Source/Utility/Tokenizer.cpp @@ -0,0 +1,66 @@ +#include "Utility/Tokenizer.h" +#include "Client/Application/ErrorDialog.h" +#include "Render/DeviceContext/DCSurface.h" + +#include + +// OFFSET: 0x00746A70 +// FUNCTION: fn_07779 +std::string& CTokenizer::operator[](int index) { + if (index < 0 || static_cast(index) >= this->tokens.size()) { + ShowErrorDialog(GetRenderSystemHolder()->system, "Error in CTokenizer :: operator []", 0); + for (unsigned int token = 0; token < this->tokens.size(); ++token) { + ShowErrorDialog(GetRenderSystemHolder()->system, this->tokens[token].c_str(), 0); + } + } + + return this->tokens[index]; +} + +// OFFSET: 0x00AF5970 +// FUNCTION: fn_18248 +void CTokenizer::Parse(std::istream& input) { + char text[1024]; + input.getline(text, sizeof(text)); + this->Parse(std::string(text)); +} + +// OFFSET: 0x00AF7680 +// FUNCTION: fn_18261 +void CTokenizer::Parse(const std::string& text) { + enum class State { Token = 1, Whitespace = 2 }; + char token[1024]; + unsigned int length = 0; + State state = State::Token; + const int size = static_cast(text.size()); + this->tokens.clear(); + + int index = 0; + for (; index < size; ++index) { + const char value = text[index]; + if (state == State::Token) { + if (value == '/' && text[index + 1] == '/') { + return; + } + + if (std::iswspace(static_cast(value)) && value >= 0) { + if (index != 0) { + token[length] = '\0'; + this->tokens.push_back(std::string(token)); + length = 0; + } + state = State::Whitespace; + } else { + token[length++] = value; + } + } else if (!std::iswspace(static_cast(value)) || value < 0) { + --index; + state = State::Token; + } + } + + if (state != State::Whitespace && index != 0) { + token[length] = '\0'; + this->tokens.push_back(std::string(token)); + } +} diff --git a/Source/Utility/Tokenizer.h b/Source/Utility/Tokenizer.h new file mode 100644 index 0000000..939e57a --- /dev/null +++ b/Source/Utility/Tokenizer.h @@ -0,0 +1,21 @@ +#ifndef RAGNAROK_SOURCE_UTILITY_TOKENIZER_H +#define RAGNAROK_SOURCE_UTILITY_TOKENIZER_H + +#include +#include +#include + +class CTokenizer { +public: + std::string& operator[](int index); + void Parse(std::istream& input); + void Parse(const std::string& text); + + /* 0000 */ std::vector tokens; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(CTokenizer) == 12); +#endif + +#endif diff --git a/compile.json b/compile.json index b982c81..8bebddc 100644 --- a/compile.json +++ b/compile.json @@ -622,6 +622,7 @@ "Source/Utility/Threading/NSyncObject.cpp": 0, "Source/Utility/Threading/NThread.cpp": 0, "Source/Utility/Timestamp.cpp": 0, + "Source/Utility/Tokenizer.cpp": 0, "ThirdParty/jsoncpp/src/lib_json/json_reader.cpp": 8, "ThirdParty/jsoncpp/src/lib_json/json_value.cpp": 8, "ThirdParty/jsoncpp/src/lib_json/json_writer.cpp": 8, From 0bb3ea5e00e6a079957957ce73fcf6d661a287ac Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:50:15 +0000 Subject: [PATCH 25/62] Decompile fn_01128 (CLuaInstance::Execute) Batch #984 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_01128 CLuaInstance::Execute: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Script/LuaInstance.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Source/Script/LuaInstance.cpp b/Source/Script/LuaInstance.cpp index 1e78164..cf4423e 100644 --- a/Source/Script/LuaInstance.cpp +++ b/Source/Script/LuaInstance.cpp @@ -9,6 +9,10 @@ extern "C" { #include #include +// STATIC: 0x010D9630 +// STRING: st_00223 +static const char luaErrorCaption[] = "Lua Error"; + // OFFSET: 0x005221E0 // FUNCTION: fn_01123 CLuaInstance::CLuaInstance() : m_state(luaL_newstate()) { @@ -36,10 +40,8 @@ bool CLuaInstance::Execute(const std::string& name) { return true; } - // STATIC: 0x010D9630 - // STRING: st_00223 const char* error = lua_tostring(this->m_state, -1); - MessageBoxA(nullptr, error, "Lua Error", MB_OK); + MessageBoxA(nullptr, error, luaErrorCaption, MB_OK); return false; } From 4d9d775cc89ba66c3a42abfb50475769fafa1da5 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:51:12 +0000 Subject: [PATCH 26/62] Decompile 3 functions in Source/Contents/World/WorldSpatialTree.cpp, Source/Contents/World/WorldSpatialTree.h, ... Batch #995 by ragnarok-clanker: 0 byte-identical, 3 confirmed by peer review. - fn_17651 WorldScene::WorldScene: logic confirmed by peer review - fn_17654 WorldScene::~WorldScene: logic confirmed by peer review - fn_17704 WorldSpatialTree::RefreshModelBounds: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Client/Session.h | 7 +- Source/Contents/World/WorldScene.h | 77 +++++++++++++++++++ Source/Contents/World/WorldSpatialTree.cpp | 89 ++++++++++++++++++++++ Source/Contents/World/WorldSpatialTree.h | 1 + 4 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 Source/Contents/World/WorldScene.h diff --git a/Source/Client/Session.h b/Source/Client/Session.h index 2487efd..a58fe20 100644 --- a/Source/Client/Session.h +++ b/Source/Client/Session.h @@ -11,7 +11,10 @@ public: /* 0000 */ unsigned char unknown_0000[0xF18]; /* 0F18 */ int m_playerX; /* 0F1C */ int m_playerY; - /* 0F20 */ unsigned char unknown_0F20[0x88]; + /* 0F20 */ unsigned char unknown_0F20[0x08]; + /* 0F28 */ int m_score1; + /* 0F2C */ int m_score2; + /* 0F30 */ unsigned char unknown_0F30[0x78]; /* 0FA8 */ const char* const* m_jobNamesBegin; /* 0FAC */ const char* const* m_jobNamesEnd; /* 0FB0 */ unsigned char unknown_0FB0[0x678]; @@ -29,6 +32,8 @@ extern CSession g_session; #if defined(_WIN32) && !defined(_WIN64) static_assert(offsetof(CSession, m_playerX) == 0xF18); static_assert(offsetof(CSession, m_playerY) == 0xF1C); +static_assert(offsetof(CSession, m_score1) == 0xF28); +static_assert(offsetof(CSession, m_score2) == 0xF2C); static_assert(offsetof(CSession, m_jobNamesBegin) == 0xFA8); static_assert(offsetof(CSession, m_jobNamesEnd) == 0xFAC); static_assert(offsetof(CSession, m_job) == 0x1628); diff --git a/Source/Contents/World/WorldScene.h b/Source/Contents/World/WorldScene.h new file mode 100644 index 0000000..9b6be6e --- /dev/null +++ b/Source/Contents/World/WorldScene.h @@ -0,0 +1,77 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_WORLD_WORLDSCENE_H +#define RAGNAROK_SOURCE_CONTENTS_WORLD_WORLDSCENE_H + +#include "Contents/World/WorldSpatialTree.h" + +#include +#include +#include +#include +#include + +class BinkMovies; +class CGameMode; +class CPlayer; +class CRenderObject; +class GroundGeometry; + +class WorldScene { +public: + WorldScene(); + virtual ~WorldScene(); + WorldScene(const WorldScene&) = delete; + WorldScene& operator=(const WorldScene&) = delete; + + /* 0004 */ CGameMode* gameMode; + /* 0008 */ std::list objects; + /* 0010 */ std::list actors; + /* 0018 */ std::list unknown_0018; + /* 0020 */ std::list unknown_0020; + /* 0028 */ GroundGeometry* ground; + /* 002C */ CPlayer* player; + /* 0030 */ C3dAttr* terrain; + /* 0034 */ std::vector models; + /* 0040 */ int published; + /* 0044 */ int pending; + /* 0048 */ int unknown_0048; + /* 004C */ int unknown_004C; + /* 0050 */ int unknown_0050; + /* 0054 */ int unknown_0054; + /* 0058 */ WorldSpatialTree spatial; + /* 00D4 */ const WorldSpatialTree* serializedSpatial; + /* 00D8 */ std::list pendingActorIds; + /* 00E0 */ BinkMovies* movies; + /* 00E4 */ std::map> actorCells; + /* 00EC */ std::list unindexedActorIds; + /* 00F4 */ bool unknown_00F4; + /* 00F8 */ int nearbyRange; + /* 00FC */ bool unknown_00FC; + /* 00FD */ bool unknown_00FD; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(WorldScene, gameMode) == 0x04); +static_assert(offsetof(WorldScene, objects) == 0x08); +static_assert(offsetof(WorldScene, actors) == 0x10); +static_assert(offsetof(WorldScene, unknown_0018) == 0x18); +static_assert(offsetof(WorldScene, unknown_0020) == 0x20); +static_assert(offsetof(WorldScene, ground) == 0x28); +static_assert(offsetof(WorldScene, player) == 0x2C); +static_assert(offsetof(WorldScene, terrain) == 0x30); +static_assert(offsetof(WorldScene, models) == 0x34); +static_assert(offsetof(WorldScene, published) == 0x40); +static_assert(offsetof(WorldScene, pending) == 0x44); +static_assert(offsetof(WorldScene, spatial) == 0x58); +static_assert(offsetof(WorldScene, serializedSpatial) == 0xD4); +static_assert(offsetof(WorldScene, pendingActorIds) == 0xD8); +static_assert(offsetof(WorldScene, movies) == 0xE0); +static_assert(offsetof(WorldScene, actorCells) == 0xE4); +static_assert(offsetof(WorldScene, unindexedActorIds) == 0xEC); +static_assert(offsetof(WorldScene, unknown_00F4) == 0xF4); +static_assert(offsetof(WorldScene, nearbyRange) == 0xF8); +static_assert(offsetof(WorldScene, unknown_00FC) == 0xFC); +static_assert(offsetof(WorldScene, unknown_00FD) == 0xFD); +static_assert(sizeof(WorldScene) == 0x100); +#endif + +#endif diff --git a/Source/Contents/World/WorldSpatialTree.cpp b/Source/Contents/World/WorldSpatialTree.cpp index 98453c1..d57eba3 100644 --- a/Source/Contents/World/WorldSpatialTree.cpp +++ b/Source/Contents/World/WorldSpatialTree.cpp @@ -1,9 +1,43 @@ +#include "Client/Session.h" +#include "Contents/Ground/GroundGeometry.h" #include "Contents/Ground/GroundSpatial.h" #include "Contents/Models/ModelActor.h" +#include "Contents/Movies/BinkMovies.h" +#include "Contents/World/WorldScene.h" #include "Contents/World/WorldSpatialTree.h" #include "Resource/ResourceByteReader.h" #include "Resource/World/TerrainResource.h" +// OFFSET: 0x00AC64F0 +// FUNCTION: fn_17651 +WorldScene::WorldScene() { + this->unknown_00FD = false; + this->serializedSpatial = nullptr; + this->pending = 0; + this->ground = nullptr; + this->player = nullptr; + this->unknown_0048 = 0; + this->unknown_004C = 0; + this->unknown_0050 = 0; + g_session.m_score1 = -1; + g_session.m_score2 = -1; + this->unknown_0054 = 0; + this->unknown_00F4 = false; + this->nearbyRange = 2; + this->unknown_00FC = false; +} + +// OFFSET: 0x00AC6FB0 +// FUNCTION: fn_17654 +WorldScene::~WorldScene() { + delete this->ground; + + if (this->movies) { + delete this->movies; + this->movies = nullptr; + } +} + // OFFSET: 0x00AC66F0 // FUNCTION: fn_17652 WorldSpatialTree::WorldSpatialTree() : parent(nullptr), children{}, minimum{}, maximum{}, center{}, halfSize{}, dirty(1) { @@ -286,3 +320,58 @@ std::vector& WorldSpatialTree::ModelsAt(float x, float z, int depth) return node->objects; } + +// OFFSET: 0x00ACB560 +// FUNCTION: fn_17704 +void WorldSpatialTree::RefreshModelBounds(int depth) { + this->dirty = 0; + + if (depth != 5) { + for (WorldSpatialTree* child : this->children) { + if (child->dirty) { + child->RefreshModelBounds(depth + 1); + } + } + + return; + } + + float groundMinimum; + float groundMaximum; + float terrainMinimum; + float terrainMaximum; + this->ground->HeightBounds(this->groundCells, groundMinimum, groundMaximum); + this->terrain->Grid().HeightBounds(this->terrainCells, terrainMinimum, terrainMaximum); + this->maximum[1] = terrainMaximum > groundMaximum ? terrainMaximum : groundMaximum; + this->minimum[1] = terrainMinimum < groundMinimum ? terrainMinimum : groundMinimum; + + for (C3dActor* model : this->objects) { + if (this->minimum[1] > model->minimum[1]) { + this->minimum[1] = model->minimum[1]; + } + + if (model->maximum[1] > this->maximum[1]) { + this->maximum[1] = model->maximum[1]; + } + } + + WorldSpatialTree* node = this; + + do { + if (node->minimum[1] > this->minimum[1]) { + node->minimum[1] = this->minimum[1]; + } + + if (this->maximum[1] > node->maximum[1]) { + node->maximum[1] = this->maximum[1]; + } + + node->halfSize[0] = node->maximum[0] - node->center[0]; + const float halfZ = node->maximum[2] - node->center[2]; + const float middleY = (node->maximum[1] + node->minimum[1]) * 0.5f; + node->center[1] = middleY; + node->halfSize[2] = halfZ; + node->halfSize[1] = node->maximum[1] - middleY; + node = node->parent; + } while (node); +} diff --git a/Source/Contents/World/WorldSpatialTree.h b/Source/Contents/World/WorldSpatialTree.h index c1b2cf0..69374fd 100644 --- a/Source/Contents/World/WorldSpatialTree.h +++ b/Source/Contents/World/WorldSpatialTree.h @@ -21,6 +21,7 @@ struct WorldSpatialTree { void BindGround(GroundSpatial& resource, int depth); void CopyBounds(int depth, const WorldSpatialTree& source); void RefreshBounds(int depth); + void RefreshModelBounds(int depth); void InsertModel(C3dActor& model, int depth); void RemoveModel(C3dActor* model, int depth); std::vector& ModelsAt(float x, float z, int depth); From b574abe09dad2c72f38a2a207024ad59352efc96 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:51:32 +0000 Subject: [PATCH 27/62] Decompile 4 functions in Source/Resource/PaletteResource.cpp, Source/Resource/PaletteResource.h, ... Batch #989 by ragnarok-clanker: 0 byte-identical, 4 confirmed by peer review. - fn_08039 CPaletteRes::Create: logic confirmed by peer review - fn_08040 CPaletteRes::Load: logic confirmed by peer review - fn_02597 CFile::Open: logic confirmed by peer review - fn_01124 CFile::~CFile: logic confirmed by peer review (already on main) Reviewed-by: ragnarok-clanker --- Source/File/File.cpp | 30 +++++++++++++++++++++++++++++ Source/Resource/PaletteResource.cpp | 18 +++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/Source/File/File.cpp b/Source/File/File.cpp index 33da76b..947c9c7 100644 --- a/Source/File/File.cpp +++ b/Source/File/File.cpp @@ -33,6 +33,36 @@ bool CFile::OpenWrite(const char* path, CRenderSystemBase* renderSystem) { } // OFFSET: 0x0057C030 +// FUNCTION: fn_02597 +bool CFile::Open(const char* path, int mode, bool resourcePath, bool option) { + if (mode == 0) { + if (resourcePath) { + this->m_path = MakeResourcePath(path); + } else { + this->m_path = path; + } + + this->m_position = 0; + this->m_data = g_pakRegistry.Read(this->m_path.c_str(), &this->m_size, option); + return this->m_data != nullptr; + } + + if ((mode & 1) == 0) { + return false; + } + + this->m_path = path; + this->m_handle = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + if (this->m_handle == INVALID_HANDLE_VALUE) { + ShowErrorDialog(GetRenderSystemHolder()->system, this->m_path.c_str(), 0); + return false; + } + + LARGE_INTEGER size; + GetFileSizeEx(this->m_handle, &size); + this->m_size = size.LowPart; + return true; +} // OFFSET: 0x0057C340 // FUNCTION: fn_02601 diff --git a/Source/Resource/PaletteResource.cpp b/Source/Resource/PaletteResource.cpp index 98ce524..6c17e94 100644 --- a/Source/Resource/PaletteResource.cpp +++ b/Source/Resource/PaletteResource.cpp @@ -14,8 +14,26 @@ CPaletteRes::CPaletteRes() : sourcePalette{}, palette{} { CPaletteRes::~CPaletteRes() = default; // OFFSET: 0x0075D730 +// FUNCTION: fn_08039 +CPaletteRes* CPaletteRes::Create() { + return new CPaletteRes; +} // OFFSET: 0x0075D7D0 +// FUNCTION: fn_08040 +bool CPaletteRes::Load(const char* name) { + CFile file; + if (file.Open(name, 0, true, false)) { + file.Read(this->sourcePalette, sizeof(this->sourcePalette)); + ConvertSpritePalette(this->palette, this->sourcePalette, 256); + file.Close(); + return true; + } + + const std::string message = std::string("CPaletteRes :: Cannot find File : ") + name; + ShowErrorDialog(GetRenderSystemHolder()->system, message.c_str(), 0); + return false; +} // OFFSET: 0x0075DAF0 // FUNCTION: fn_08041 From 67dd9978df1d841e1550aa1adc00a71a6afbca27 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:51:56 +0000 Subject: [PATCH 28/62] Decompile 2 functions in Source/Client/Replay.cpp, Source/Client/Replay.h Batch #1003 by ragnarok-clanker: 2 byte-identical, 0 confirmed by peer review. - fn_19302 ReplaySection::ReplaySection: byte-identical - fn_19306 ReplaySection::~ReplaySection: byte-identical Merged automatically: every function is byte-identical to the original. Adds to the build: Source/Client/Replay.cpp --- Source/Client/Replay.cpp | 50 ++++++++++++++++ Source/Client/Replay.h | 126 +++++++++++++++++++++++++++++++++++++++ compile.json | 1 + 3 files changed, 177 insertions(+) create mode 100644 Source/Client/Replay.cpp create mode 100644 Source/Client/Replay.h diff --git a/Source/Client/Replay.cpp b/Source/Client/Replay.cpp new file mode 100644 index 0000000..39faa98 --- /dev/null +++ b/Source/Client/Replay.cpp @@ -0,0 +1,50 @@ +#include "Client/Replay.h" + +#include +#include + +// GLOBAL: gl_24549 +int g_replayAnimationScaling = 0; + +// GLOBAL: gl_24630 +static int g_replayFlushCounter = 0; + +// STRING: st_16831 +static const char g_replayHeaderText[] = "<< Ragnarok Replay File Version 0.%02d >>\r\n \xA1\xD8 Do not modify file! "; + +// STRING: st_16832 +static const char g_replayHeaderPrefix[] = "\r\n"; + +#pragma pack(push, 1) +struct ReplayTaggedRecordHeader { + /* 0000 */ std::uint16_t id; + /* 0002 */ std::uint32_t bytes; +}; +#pragma pack(pop) + +static_assert(sizeof(ReplayTaggedRecordHeader) == 6); + +// OFFSET: 0x006DA340 + +// OFFSET: 0x00B839D0 +// FUNCTION: fn_19302 +ReplaySection::ReplaySection() : id(0), bytes(0), fileOffset(0) { +} + +// OFFSET: 0x00B83D20 +// FUNCTION: fn_19306 +ReplaySection::~ReplaySection() { + this->id = 0; + this->bytes = 0; + this->fileOffset = 0; +} + +// OFFSET: 0x00B83540 + +// OFFSET: 0x00B855B0 + +// OFFSET: 0x00B857E0 + +// OFFSET: 0x00B85A20 + +// OFFSET: 0x00B875E0 diff --git a/Source/Client/Replay.h b/Source/Client/Replay.h new file mode 100644 index 0000000..eaa767c --- /dev/null +++ b/Source/Client/Replay.h @@ -0,0 +1,126 @@ +#ifndef RAGNAROK_SOURCE_CLIENT_REPLAY_H +#define RAGNAROK_SOURCE_CLIENT_REPLAY_H + +#include +#include +#include +#include +#include + +struct ReplayCachedPacket { + /* 0000 */ bool enabled; + /* 0004 */ std::vector bytes; +}; + +#pragma pack(push, 1) +struct ReplayOptions { + /* 0000 */ unsigned char unknown_0000[6]; + /* 0006 */ unsigned char recordRestricted; + /* 0007 */ unsigned char unknown_0007; + /* 0008 */ unsigned char unknown_0008[22]; +}; + +struct ReplayHeader { + /* 0000 */ std::uint32_t signature; + /* 0004 */ std::uint32_t key0; + /* 0008 */ std::uint32_t key1; + /* 000C */ int service; + /* 0010 */ int serviceType; + /* 0014 */ int unknown_0014; + /* 0018 */ char characterName[64]; + /* 0058 */ char mapName[20]; + /* 006C */ int accountId; + /* 0070 */ int cellX; + /* 0074 */ int cellY; + /* 0078 */ int unknown_0078; + /* 007C */ std::uint32_t duration; + /* 0080 */ std::uint32_t records; + /* 0084 */ std::uint32_t fileOffset; + /* 0088 */ ReplayOptions options; + /* 00A6 */ std::uint32_t closingSignature; + + // INLINED + void Reset() { + const ReplayOptions savedOptions = this->options; + std::memset(this, 0, sizeof(*this)); + this->options = savedOptions; + this->signature = 0x52414705; + this->closingSignature = 0x52414705; + } +}; + +struct ReplaySection { + /* 0000 */ std::uint16_t id; + /* 0002 */ std::uint32_t bytes; + /* 0006 */ std::uint32_t fileOffset; + + ReplaySection(); + ~ReplaySection(); +}; +#pragma pack(pop) + +class Replay { +public: + static Replay& Instance(); + + /* 0000 */ std::vector cachedPackets; + /* 000C */ int state; + /* 0010 */ std::uint32_t baseFrame; + /* 0014 */ std::uint32_t started; + /* 0018 */ std::uint32_t previousTick; + /* 001C */ std::uint32_t frame; + /* 0020 */ std::uint32_t elapsed; + /* 0024 */ float speed; + /* 0028 */ ReplayHeader header; + /* 00D2 */ ReplaySection sections[26]; + /* 01D8 */ int fileMode; + /* 01DC */ std::FILE* file; + /* 01E0 */ std::uint32_t fileOffset; + /* 01E4 */ std::uint32_t records; + /* 01E8 */ std::uint32_t cipherIndex; + /* 01EC */ std::uint32_t cipherBase; + /* 01F0 */ std::uint32_t cipherKey; + /* 01F4 */ int unknown_01F4; + /* 01F8 */ int unknown_01F8; + + Replay(); + + // INLINED + ~Replay() { + if (this->file) { + if (this->fileMode == 31) { + this->WriteHeader(13); + } + std::fclose(this->file); + this->file = nullptr; + } + } + + bool WriteSection(int id, std::vector& bytes, int event); + int WriteHeader(int event); + std::vector BuildMetadata(); +}; + +extern int g_replayAnimationScaling; + +static_assert(sizeof(ReplayCachedPacket) == 0x10); +static_assert(offsetof(ReplayCachedPacket, bytes) == 0x4); +static_assert(sizeof(ReplayOptions) == 0x1E); +static_assert(sizeof(ReplayHeader) == 0xAA); +static_assert(offsetof(ReplayHeader, options) == 0x88); +static_assert(offsetof(ReplayHeader, closingSignature) == 0xA6); +static_assert(sizeof(ReplaySection) == 0xA); +static_assert(offsetof(ReplaySection, bytes) == 0x2); +static_assert(offsetof(ReplaySection, fileOffset) == 0x6); +static_assert(sizeof(Replay) == 0x1FC); +static_assert(offsetof(Replay, state) == 0xC); +static_assert(offsetof(Replay, header) == 0x28); +static_assert(offsetof(Replay, header) + offsetof(ReplayHeader, options) + offsetof(ReplayOptions, recordRestricted) == 0xB6); +static_assert(offsetof(Replay, header) + offsetof(ReplayHeader, options) + offsetof(ReplayOptions, unknown_0007) == 0xB7); +static_assert(offsetof(Replay, sections) == 0xD2); +static_assert(offsetof(Replay, fileMode) == 0x1D8); +static_assert(offsetof(Replay, file) == 0x1DC); +static_assert(offsetof(Replay, cipherIndex) == 0x1E8); +static_assert(offsetof(Replay, unknown_01F8) == 0x1F8); + +#endif diff --git a/compile.json b/compile.json index 8bebddc..2dd2226 100644 --- a/compile.json +++ b/compile.json @@ -238,6 +238,7 @@ "Source/Client/Mode/ModeDragState.cpp": 2, "Source/Client/Mode/ModeTooltip.cpp": 2, "Source/Client/Registry.cpp": 0, + "Source/Client/Replay.cpp": 0, "Source/Client/ReplayPacketRecorder.cpp": 2, "Source/Client/Session.cpp": 0, "Source/Contents/ActorGeometry.cpp": 4, From c2b4547ea00980b35d0ec9e6a05994755a7944c8 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 08:52:33 +0000 Subject: [PATCH 29/62] Decompile 2 functions in Source/Resource/ResourceAliases.cpp, Source/Resource/ResourceAliases.h, ... Batch #1004 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_18179 ResourceAliases::ResolveMapName: logic confirmed by peer review - fn_18187 ResourceAliases::Load: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Resource/ResourceAliases.cpp | 51 +++++++++++++++++++++++++++++ Source/Resource/ResourceAliases.h | 2 ++ 2 files changed, 53 insertions(+) diff --git a/Source/Resource/ResourceAliases.cpp b/Source/Resource/ResourceAliases.cpp index 92a2cb4..fb18813 100644 --- a/Source/Resource/ResourceAliases.cpp +++ b/Source/Resource/ResourceAliases.cpp @@ -1,5 +1,7 @@ #include "Resource/ResourceAliases.h" +#include "File/File.h" +#include #include // OFFSET: 0x00AEF500 @@ -32,3 +34,52 @@ std::string AddResourcePrefix(const char* name, const char* prefix) { return std::string(prefix) + name; } + +// OFFSET: 0x00AEF3A0 +// FUNCTION: fn_18179 +std::string ResourceAliases::ResolveMapName(const char* name) const { + std::string filename(name); + filename += ".gat"; + const char* resolved = this->Resolve(filename.c_str()); + const char* extension = std::strstr(resolved, ".gat"); + return std::string(resolved, extension); +} + +// OFFSET: 0x00AEFE50 +// FUNCTION: fn_18187 +void ResourceAliases::Load(int) { + this->names.clear(); + CFile file; + if (!file.Open("ResNameTable.txt", 0, true, false)) { + return; + } + + const std::uint32_t bytes = file.GetSize(); + auto* contents = static_cast(std::malloc(bytes + 1)); + file.Read(contents, bytes); + contents[bytes] = '\0'; + file.Close(); + + std::string name; + std::string replacement; + const char* token = contents; + for (int index = 0; index < static_cast(bytes); ++index) { + if (contents[index] == '\n' || contents[index] == '\r') { + contents[index] = '\0'; + token = contents + index + 1; + } else if (contents[index] == '#') { + contents[index] = '\0'; + if (name.empty()) { + name = token; + } else { + replacement = token; + this->names.insert(std::make_pair(name, replacement)); + name.clear(); + replacement.clear(); + } + token = contents + index + 1; + } + } + + std::free(contents); +} diff --git a/Source/Resource/ResourceAliases.h b/Source/Resource/ResourceAliases.h index cecc7c4..fa866dd 100644 --- a/Source/Resource/ResourceAliases.h +++ b/Source/Resource/ResourceAliases.h @@ -8,6 +8,8 @@ struct ResourceAliases { std::map names; const char* Resolve(const char* name) const; + std::string ResolveMapName(const char* name) const; + void Load(int option); }; std::string AddResourcePrefix(const char* name, const char* prefix); From dc5c68be89fdc961b253f8af57a0a7b2069a4adc Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:53:10 +0100 Subject: [PATCH 30/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(Traditio?= =?UTF-8?q?nalKeyInput):=20replaced=20OEM=20key=20escapes=20with=20VK=5FOE?= =?UTF-8?q?M=5F*=20constants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Client/Input/TraditionalKeyInput.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/Client/Input/TraditionalKeyInput.cpp b/Source/Client/Input/TraditionalKeyInput.cpp index 9ba242a..b9df3b2 100644 --- a/Source/Client/Input/TraditionalKeyInput.cpp +++ b/Source/Client/Input/TraditionalKeyInput.cpp @@ -13,7 +13,9 @@ void TraditionalKeyInput::InitializeMappings() { 0xB4, 0xA3, 0x75, 0xA3, 0xA1, 0xA3, 0x7A, 0xA3, 0xA5, 0xA3, 0x74, 0xA3, 0xA3, 0xA3, 0x79, 0xA3, 0x74, 0xA3, 0xA8, 0xA3, 0x77, 0xA3, 0xB7, 0xA3, 0xB5, 0xA3, 0xAE, 0xA3, 0xB2, 0xA3, 0xB6}; static constexpr char categories[] = "11441443331111111132331233111121111133333"; - static constexpr unsigned char keys[] = "1234567890ABCDEFGHIJKLNMOPQRSTUVWXYZ\xBD\xBA\xBC\xBE\xBF"; + static constexpr unsigned char keys[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'N', 'M', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + VK_OEM_MINUS, VK_OEM_1, VK_OEM_COMMA, VK_OEM_PERIOD, VK_OEM_2, 0}; this->unknown04C1 = 0; From 2751e3ff3d47ef17236094329757a758be9b8e5b Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:54:11 +0100 Subject: [PATCH 31/62] =?UTF-8?q?=F0=9F=93=9D=20docs(CameraState):=20docum?= =?UTF-8?q?ented=20struct=20field=20offsets=20and=20added=20CameraShake=20?= =?UTF-8?q?size=20assertion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Camera/CameraState.h | 31 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Source/Contents/Camera/CameraState.h b/Source/Contents/Camera/CameraState.h index c02839c..a279d16 100644 --- a/Source/Contents/Camera/CameraState.h +++ b/Source/Contents/Camera/CameraState.h @@ -4,14 +4,14 @@ struct ServiceOptions; struct CameraState { - float target[3]; - float pitch; - float yaw; - float distance; - float desiredTarget[3]; - float desiredPitch; - float desiredYaw; - float desiredDistance; + /* 0020 */ float target[3]; + /* 002C */ float pitch; + /* 0030 */ float yaw; + /* 0034 */ float distance; + /* 0038 */ float desiredTarget[3]; + /* 0044 */ float desiredPitch; + /* 0048 */ float desiredYaw; + /* 004C */ float desiredDistance; void Reset(); void AddDistance(float delta); @@ -30,13 +30,13 @@ struct CameraProjectionOutputs { }; struct CameraShake { - float horizontal; - float distance; - float pitch; - unsigned unknown_0010; - int enabled; - unsigned start; - unsigned duration; + /* 0004 */ float horizontal; + /* 0008 */ float distance; + /* 000C */ float pitch; + /* 0010 */ unsigned unknown_0010; + /* 0014 */ int enabled; + /* 0018 */ unsigned start; + /* 001C */ unsigned duration; void Apply(CameraState& camera, int& frameLatch); void Start(int enabled, unsigned duration, float horizontal, float distance, float pitch); @@ -44,5 +44,6 @@ struct CameraShake { }; static_assert(sizeof(CameraState) == 48); +static_assert(sizeof(CameraShake) == 28); #endif From 9886d0e91c6fee7a93f721362cb453b79b1f0fa0 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:54:24 +0100 Subject: [PATCH 32/62] =?UTF-8?q?=F0=9F=93=9D=20docs(ScalarConversion):=20?= =?UTF-8?q?added=20inlined=20comment=20to=20TruncateToInt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Utility/Math/ScalarConversion.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Utility/Math/ScalarConversion.h b/Source/Utility/Math/ScalarConversion.h index a5d474c..75a6273 100644 --- a/Source/Utility/Math/ScalarConversion.h +++ b/Source/Utility/Math/ScalarConversion.h @@ -3,6 +3,7 @@ #include +// INLINED inline int TruncateToInt(double value) { return value > -2147483649.0 && value < 2147483648.0 ? static_cast(value) : std::numeric_limits::min(); } From c5aea5fa7694a764abb90df97b7ad061f9508e7c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:57:08 +0100 Subject: [PATCH 33/62] =?UTF-8?q?=F0=9F=93=9D=20docs(models,render):=20add?= =?UTF-8?q?ed=20inlined=20comments=20to=20functions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Models/ModelPlayback.cpp | 1 + Source/Render/TextureStageModes.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Source/Contents/Models/ModelPlayback.cpp b/Source/Contents/Models/ModelPlayback.cpp index 6fcaf4b..a1087a2 100644 --- a/Source/Contents/Models/ModelPlayback.cpp +++ b/Source/Contents/Models/ModelPlayback.cpp @@ -4,6 +4,7 @@ #include namespace { + // INLINED unsigned UnsignedFrame(double value) { if (!(value < 0x1p32) || value <= -1.0) { return 0xFFFFFFFFu; diff --git a/Source/Render/TextureStageModes.h b/Source/Render/TextureStageModes.h index dcbe7f0..83d48e9 100644 --- a/Source/Render/TextureStageModes.h +++ b/Source/Render/TextureStageModes.h @@ -122,6 +122,7 @@ namespace { }; } +// INLINED static inline std::span TextureStageModeWrites(int mode) { switch (mode) { case 0: From e66baf48bdf1aaff4d963ca43ddd772506608c7e Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:57:19 +0100 Subject: [PATCH 34/62] =?UTF-8?q?=F0=9F=93=9D=20docs(UserHotkeyScript):=20?= =?UTF-8?q?added=20inlined=20comments=20for=20Lua=20wrapper=20functions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Hotkeys/UserHotkeyScript.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Contents/Hotkeys/UserHotkeyScript.h b/Source/Contents/Hotkeys/UserHotkeyScript.h index 099d9f9..47edf06 100644 --- a/Source/Contents/Hotkeys/UserHotkeyScript.h +++ b/Source/Contents/Hotkeys/UserHotkeyScript.h @@ -11,18 +11,22 @@ void SaveUserHotkeys(); void ChangeUserHotkey(int tab, int index, int key1, int key2, const std::string& description); void LoadUserHotkeyTab(Json::Value& values, int tab); +// INLINED inline void ClearUserHotkeys(LuaScript&) { ClearUserHotkeys(); } +// INLINED inline void SaveUserHotkeys(LuaScript&) { SaveUserHotkeys(); } +// INLINED inline void ChangeUserHotkey(LuaScript&, int tab, int index, int key1, int key2, const std::string& description) { ChangeUserHotkey(tab, index, key1, key2, description); } +// INLINED inline void LoadUserHotkeyTab(LuaScript&, Json::Value& values, int tab) { LoadUserHotkeyTab(values, tab); } From a107b3f0de8b6ca759e20269278f56388c5b2227 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:57:24 +0100 Subject: [PATCH 35/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(Traditio?= =?UTF-8?q?nalKeyInput):=20renamed=20Zhuyin=20Big5=20key=20table=20to=20zh?= =?UTF-8?q?uyinBig5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Client/Input/TraditionalKeyInput.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Source/Client/Input/TraditionalKeyInput.cpp b/Source/Client/Input/TraditionalKeyInput.cpp index b9df3b2..71a0318 100644 --- a/Source/Client/Input/TraditionalKeyInput.cpp +++ b/Source/Client/Input/TraditionalKeyInput.cpp @@ -7,11 +7,11 @@ void TraditionalKeyInput::InitializeMappings() { // STATIC: 0x011594E0 // GLOBAL: gl_13427 - static constexpr std::uint8_t bytes[] = {0xA3, 0x74, 0xA3, 0x78, 0xA3, 0xBE, 0xA3, 0xBF, 0xA3, 0xA4, 0xA3, 0xBD, 0xA3, 0xBB, 0xA3, 0xAB, 0xA3, - 0xAF, 0xA3, 0xB3, 0xA3, 0x76, 0xA3, 0xA7, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0xA2, 0xA3, 0xA6, - 0xA3, 0xA9, 0xA3, 0xAC, 0xA3, 0xB9, 0xA3, 0xAD, 0xA3, 0xB1, 0xA3, 0xAA, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3, - 0xB4, 0xA3, 0x75, 0xA3, 0xA1, 0xA3, 0x7A, 0xA3, 0xA5, 0xA3, 0x74, 0xA3, 0xA3, 0xA3, 0x79, 0xA3, 0x74, - 0xA3, 0xA8, 0xA3, 0x77, 0xA3, 0xB7, 0xA3, 0xB5, 0xA3, 0xAE, 0xA3, 0xB2, 0xA3, 0xB6}; + static constexpr std::uint8_t zhuyinBig5[] = {0xA3, 0x74, 0xA3, 0x78, 0xA3, 0xBE, 0xA3, 0xBF, 0xA3, 0xA4, 0xA3, 0xBD, 0xA3, 0xBB, 0xA3, 0xAB, 0xA3, + 0xAF, 0xA3, 0xB3, 0xA3, 0x76, 0xA3, 0xA7, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0xA2, 0xA3, 0xA6, + 0xA3, 0xA9, 0xA3, 0xAC, 0xA3, 0xB9, 0xA3, 0xAD, 0xA3, 0xB1, 0xA3, 0xAA, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3, + 0xB4, 0xA3, 0x75, 0xA3, 0xA1, 0xA3, 0x7A, 0xA3, 0xA5, 0xA3, 0x74, 0xA3, 0xA3, 0xA3, 0x79, 0xA3, 0x74, + 0xA3, 0xA8, 0xA3, 0x77, 0xA3, 0xB7, 0xA3, 0xB5, 0xA3, 0xAE, 0xA3, 0xB2, 0xA3, 0xB6}; static constexpr char categories[] = "11441443331111111132331233111121111133333"; static constexpr unsigned char keys[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'N', 'M', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', @@ -25,8 +25,8 @@ void TraditionalKeyInput::InitializeMappings() { for (unsigned index = 0; index < 41; ++index) { auto& mapping = this->mappings[keys[index]]; - mapping.bytes[0] = bytes[2 * index]; - mapping.bytes[1] = bytes[2 * index + 1]; + mapping.bytes[0] = zhuyinBig5[2 * index]; + mapping.bytes[1] = zhuyinBig5[2 * index + 1]; mapping.bytes[2] = 0; mapping.category = static_cast(categories[index] - '1'); } From ee401857a11f6f100559ed69ee17bdeee0d7b31a Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:59:03 +0100 Subject: [PATCH 36/62] =?UTF-8?q?=F0=9F=93=9D=20docs(annotations):=20annot?= =?UTF-8?q?ated=20inlined=20functions=20across=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Archive/PakCipher.cpp | 1 + Source/Client/Application/UnhandledExceptionHandler.cpp | 2 ++ Source/Contents/Configuration/GraphicsConfiguration.h | 1 + Source/File/File.h | 1 + 4 files changed, 5 insertions(+) diff --git a/Source/Archive/PakCipher.cpp b/Source/Archive/PakCipher.cpp index 71f5beb..a78bf41 100644 --- a/Source/Archive/PakCipher.cpp +++ b/Source/Archive/PakCipher.cpp @@ -51,6 +51,7 @@ namespace myGPack { 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11, }; + // INLINED void Permute(std::uint8_t* block, const std::uint8_t* table, unsigned count) { std::uint8_t result[8] = {}; diff --git a/Source/Client/Application/UnhandledExceptionHandler.cpp b/Source/Client/Application/UnhandledExceptionHandler.cpp index af45557..e75209b 100644 --- a/Source/Client/Application/UnhandledExceptionHandler.cpp +++ b/Source/Client/Application/UnhandledExceptionHandler.cpp @@ -33,10 +33,12 @@ char g_moduleBaseName[260] = {}; char g_crashString[8096] = {}; namespace { + // INLINED int ReadPlayerJob() { return g_session.m_job; } + // INLINED const char* ReadPlayerJobName(int jobId) { const char* const* namesBegin = g_session.m_jobNamesBegin; const char* const* namesEnd = g_session.m_jobNamesEnd; diff --git a/Source/Contents/Configuration/GraphicsConfiguration.h b/Source/Contents/Configuration/GraphicsConfiguration.h index 5161536..1c20e88 100644 --- a/Source/Contents/Configuration/GraphicsConfiguration.h +++ b/Source/Contents/Configuration/GraphicsConfiguration.h @@ -69,6 +69,7 @@ inline void GraphicsConfiguration::Load(LuaScript& script, ScriptOptions& option } } +// INLINED inline AdapterConfiguration GraphicsConfiguration::Adapter() const { return {this->backend, this->drawGuid, this->renderGuid, this->deviceGuid, this->deviceName}; } diff --git a/Source/File/File.h b/Source/File/File.h index 5882ada..f98fd33 100644 --- a/Source/File/File.h +++ b/Source/File/File.h @@ -14,6 +14,7 @@ public: bool OpenWrite(const char* path, CRenderSystemBase* renderSystem); bool Open(const char* path, int mode, bool resourcePath, bool option); + // INLINED bool Open(const char* path) { this->m_path = path; this->m_handle = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); From 38defb749a527f89a3faaaee8ec3145b2f703e74 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:00:45 +0100 Subject: [PATCH 37/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20fix(FontCache):?= =?UTF-8?q?=20attached=20STATIC=200x01311ED0=20to=20the=20fallback=20font?= =?UTF-8?q?=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Render/Text/FontCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Render/Text/FontCache.cpp b/Source/Render/Text/FontCache.cpp index 5079db5..638ae6f 100644 --- a/Source/Render/Text/FontCache.cpp +++ b/Source/Render/Text/FontCache.cpp @@ -11,7 +11,6 @@ namespace { // STATIC: 0x01311F00 - // STATIC: 0x01311ED0 const char* const primary[] = { "\xB1\xBC\xB8\xB2", "Arial", @@ -27,6 +26,7 @@ namespace { "Arial", "Tahoma" }; + // STATIC: 0x01311ED0 const char* const fallback[] = {"Gulim", "Arial", "MS Gothic", "SimSun", "MingLiU", "Tahoma", "Arial", "Verdana", "Verdana", "Arial", "Arial", "Tahoma"}; // OFFSET: 0x0054F2C0 From 779dd40d2e395d4ecfcd725ded99c6ab510d1adf Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:01:19 +0100 Subject: [PATCH 38/62] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20refactor(source):?= =?UTF-8?q?=20annotated=20inlined=20functions=20and=20removed=20unused=20i?= =?UTF-8?q?nclude?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Client/Browser/WebBrowser.cpp | 1 + Source/Contents/Skills/SkillTreeScript.cpp | 2 ++ Source/Render/Primitives/RenderVertexPool.cpp | 1 + Source/Render/Text/FontCache.cpp | 1 - Source/Resource/Models/ModelResourceV2.cpp | 1 + Source/Resource/World/GroundResource.cpp | 2 +- 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/Client/Browser/WebBrowser.cpp b/Source/Client/Browser/WebBrowser.cpp index 9646cbc..74505b8 100644 --- a/Source/Client/Browser/WebBrowser.cpp +++ b/Source/Client/Browser/WebBrowser.cpp @@ -10,6 +10,7 @@ #include namespace { + // INLINED BrowserWindowSizing Sizing(CWebBrowser& owner) { return {owner.browser, owner.screenWidth, owner.screenHeight, owner.rebar, owner.auxiliaryVisible, owner.width, owner.height}; } diff --git a/Source/Contents/Skills/SkillTreeScript.cpp b/Source/Contents/Skills/SkillTreeScript.cpp index 45ad9fd..94d2e11 100644 --- a/Source/Contents/Skills/SkillTreeScript.cpp +++ b/Source/Contents/Skills/SkillTreeScript.cpp @@ -8,6 +8,7 @@ extern "C" { #include namespace { + // INLINED CPlayerSkillBundle& Bundle(lua_State* state) { return *static_cast(lua_touserdata(state, lua_upvalueindex(1))); } @@ -59,6 +60,7 @@ namespace { } } +// INLINED void RegisterSkillTreeCallbacks(lua_State* state, CPlayerSkillBundle& bundle) { lua_pushlightuserdata(state, &bundle); lua_pushcclosure(state, AddSkill, 1); diff --git a/Source/Render/Primitives/RenderVertexPool.cpp b/Source/Render/Primitives/RenderVertexPool.cpp index 7153ad2..5b8f293 100644 --- a/Source/Render/Primitives/RenderVertexPool.cpp +++ b/Source/Render/Primitives/RenderVertexPool.cpp @@ -3,6 +3,7 @@ #include namespace { + // INLINED void Append(std::vector& block, unsigned count) { const unsigned first = static_cast(block.size()); block.resize(first + count); diff --git a/Source/Render/Text/FontCache.cpp b/Source/Render/Text/FontCache.cpp index 5079db5..6dbe239 100644 --- a/Source/Render/Text/FontCache.cpp +++ b/Source/Render/Text/FontCache.cpp @@ -1,7 +1,6 @@ #include "Render/Text/FontCache.h" #include -#include #include #include diff --git a/Source/Resource/Models/ModelResourceV2.cpp b/Source/Resource/Models/ModelResourceV2.cpp index 45daf08..0d06794 100644 --- a/Source/Resource/Models/ModelResourceV2.cpp +++ b/Source/Resource/Models/ModelResourceV2.cpp @@ -19,6 +19,7 @@ namespace { return name; } + // INLINED void ReadKeys(ResourceByteReader& input, std::vector& keys, bool scale) { int count = 0; input.Read(&count, 4); diff --git a/Source/Resource/World/GroundResource.cpp b/Source/Resource/World/GroundResource.cpp index be7571f..1108f12 100644 --- a/Source/Resource/World/GroundResource.cpp +++ b/Source/Resource/World/GroundResource.cpp @@ -2,10 +2,10 @@ #include "Resource/World/GroundResource.h" #include "Resource/ResourceByteReader.h" -#include #include namespace { + // INLINED const unsigned char* Slice(ResourceByteReader& input, std::uint32_t bytes) { const auto address = reinterpret_cast(input.data) + input.position; input.position += bytes; From 98e3d7fa1774d0d609fe2698a06f89b00fdd38fc Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:02:55 +0100 Subject: [PATCH 39/62] =?UTF-8?q?=F0=9F=8E=A8=20style(shortcuts):=20annota?= =?UTF-8?q?ted=20inlined=20helper=20functions=20and=20updated=20stdio=20in?= =?UTF-8?q?clude?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/UI/Shortcuts/ShortcutDetails.cpp | 1 + Source/UI/Shortcuts/ShortcutDrop.cpp | 1 + Source/UI/Shortcuts/ShortcutTooltip.cpp | 3 ++- Source/UI/Text/TextMarkup.cpp | 2 ++ Source/UI/Text/UITextViewer.cpp | 2 ++ 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/UI/Shortcuts/ShortcutDetails.cpp b/Source/UI/Shortcuts/ShortcutDetails.cpp index 46cd27e..9229e4f 100644 --- a/Source/UI/Shortcuts/ShortcutDetails.cpp +++ b/Source/UI/Shortcuts/ShortcutDetails.cpp @@ -6,6 +6,7 @@ #include "UI/Window/WindowRetirement.h" namespace { + // INLINED void ToScreen(const UIWindow& window, int& x, int& y) { x = (x + window.geometry.x); y = (y + window.geometry.y); diff --git a/Source/UI/Shortcuts/ShortcutDrop.cpp b/Source/UI/Shortcuts/ShortcutDrop.cpp index 8fbf313..41830d0 100644 --- a/Source/UI/Shortcuts/ShortcutDrop.cpp +++ b/Source/UI/Shortcuts/ShortcutDrop.cpp @@ -9,6 +9,7 @@ #include namespace { + // INLINED bool Grouped(std::uint32_t id) { return id - 8000u <= 60 || id - 8200u <= 41 || id - 8400u <= 57; } diff --git a/Source/UI/Shortcuts/ShortcutTooltip.cpp b/Source/UI/Shortcuts/ShortcutTooltip.cpp index 70c2dbc..27741eb 100644 --- a/Source/UI/Shortcuts/ShortcutTooltip.cpp +++ b/Source/UI/Shortcuts/ShortcutTooltip.cpp @@ -3,9 +3,10 @@ #include "UI/Buttons/UIButton.h" #include "UI/Window/UIWindow.h" -#include +#include namespace { + // INLINED void ToScreen(const UIWindow& window, int& x, int& y) { x = (x + window.geometry.x); y = (y + window.geometry.y); diff --git a/Source/UI/Text/TextMarkup.cpp b/Source/UI/Text/TextMarkup.cpp index 8fba8eb..47f7482 100644 --- a/Source/UI/Text/TextMarkup.cpp +++ b/Source/UI/Text/TextMarkup.cpp @@ -3,10 +3,12 @@ #include namespace { + // INLINED bool Hex(unsigned char value) { return (value >= '0' && value <= '9') || (value >= 'a' && value <= 'f') || (value >= 'A' && value <= 'F'); } + // INLINED bool Color(const char* text, const char* end) { if (*text != '^' || end - text < 6) { return false; diff --git a/Source/UI/Text/UITextViewer.cpp b/Source/UI/Text/UITextViewer.cpp index 053f93e..e0bea96 100644 --- a/Source/UI/Text/UITextViewer.cpp +++ b/Source/UI/Text/UITextViewer.cpp @@ -12,6 +12,7 @@ #include namespace { + // INLINED unsigned Digit(unsigned char value) { if (value >= '0' && value <= '9') { return value - '0'; @@ -28,6 +29,7 @@ namespace { return 0; } + // INLINED void ScanColors(const std::string& line, unsigned short codePage, std::uint32_t& color) { const char* current = line.c_str(); const char* end = current + line.size(); From 0d7e98ce6d38cf516bfd3d85009a35d2105f5a5e Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:02:57 +0000 Subject: [PATCH 40/62] Confirm 2 functions in Source/UI/Window/UIWindowMgr.cpp, Source/UI/Window/UIWindowMgr.h, ... Batch #1011 by ragnarok-clanker: 2 byte-identical, 0 confirmed by peer review. - fn_19302 ReplaySection::ReplaySection: byte-identical (already on main) - fn_19306 ReplaySection::~ReplaySection: byte-identical (already on main) Merged automatically: every function is byte-identical to the original. Adds to the build: Source/UI/Window/UIWindowMgr.cpp --- Source/UI/Window/UIWindowMgr.cpp | 7 + Source/UI/Window/UIWindowMgr.h | 451 +++++++++++++++++++++++++++++++ compile.json | 1 + 3 files changed, 459 insertions(+) create mode 100644 Source/UI/Window/UIWindowMgr.cpp create mode 100644 Source/UI/Window/UIWindowMgr.h diff --git a/Source/UI/Window/UIWindowMgr.cpp b/Source/UI/Window/UIWindowMgr.cpp new file mode 100644 index 0000000..f0085fe --- /dev/null +++ b/Source/UI/Window/UIWindowMgr.cpp @@ -0,0 +1,7 @@ +#include "Client/Replay.h" +#include "UI/Window/UIWindowMgr.h" + +// OFFSET: 0x00A94FD0 + +// OFFSET: 0x00AA5F70 + diff --git a/Source/UI/Window/UIWindowMgr.h b/Source/UI/Window/UIWindowMgr.h new file mode 100644 index 0000000..46e7c61 --- /dev/null +++ b/Source/UI/Window/UIWindowMgr.h @@ -0,0 +1,451 @@ +#ifndef RAGNAROK_SOURCE_UI_WINDOW_UIWINDOWMGR_H +#define RAGNAROK_SOURCE_UI_WINDOW_UIWINDOWMGR_H + +#include "UI/Layout/SnapRectangle.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class UIWindow; +class CWebBrowser; + +struct WindowTextEntry { + /* 0000 */ std::string text; + /* 0018 */ std::uint32_t unknown_0018; +}; + +struct WindowTextRecord { + /* 0000 */ std::string text; + /* 0018 */ std::uint32_t unknown_0018; + /* 001C */ std::uint32_t unknown_001C; +}; + +struct SavedWindowRectangle { + /* 0000 */ int x; + /* 0004 */ int y; + /* 0008 */ int width; + /* 000C */ int height; +}; + +struct WindowPolicyEntry { + /* 0000 */ int actions[8]; +}; + +class UIWindowMgr { +public: + /* 0004 */ int activeWindowId; + /* 0008 */ std::map windows; + /* 0010 */ unsigned char unknown_0010[8]; + /* 0018 */ std::list windowHistory; + /* 0020 */ int lastWindowId; + /* 0024 */ unsigned char unknown_0024; + /* 0025 */ unsigned char unknown_0025; + /* 0026 */ unsigned char unknown_0026; + /* 0028 */ std::map retainedWindows; + /* 0030 */ int unknown_0030; + /* 0034 */ int unknown_0034; + /* 0038 */ int unknown_0038; + /* 003C */ int unknown_003C; + /* 0040 */ int unknown_0040; + /* 0044 */ int unknown_0044; + /* 0048 */ int unknown_0048; + /* 004C */ int unknown_004C; + /* 0050 */ float unknown_0050; + /* 0054 */ int unknown_0054; + /* 0058 */ int unknown_0058; + /* 005C */ int unknown_005C; + /* 0060 */ int unknown_0060; + /* 0064 */ int unknown_0064; + /* 0068 */ int unknown_0068; + /* 006C */ int unknown_006C; + /* 0070 */ int unknown_0070; + /* 0074 */ int unknown_0074; + /* 0078 */ int unknown_0078; + /* 007C */ int unknown_007C; + /* 0080 */ int unknown_0080; + /* 0084 */ int unknown_0084; + /* 0088 */ int unknown_0088; + /* 008C */ int unknown_008C; + /* 0090 */ int unknown_0090; + /* 0094 */ int unknown_0094; + /* 0098 */ int unknown_0098; + /* 009C */ int unknown_009C; + /* 00A0 */ int unknown_00A0; + /* 00A4 */ int unknown_00A4; + /* 00A8 */ int unknown_00A8; + /* 00AC */ int unknown_00AC; + /* 00B0 */ int unknown_00B0; + /* 00B4 */ int unknown_00B4; + /* 00B8 */ int unknown_00B8; + /* 00BC */ int unknown_00BC; + /* 00C0 */ int unknown_00C0; + /* 00C4 */ int unknown_00C4; + /* 00C8 */ int unknown_00C8; + /* 00CC */ int unknown_00CC; + /* 00D0 */ int unknown_00D0; + /* 00D4 */ int unknown_00D4; + /* 00D8 */ int unknown_00D8; + /* 00DC */ int unknown_00DC; + /* 00E0 */ int unknown_00E0; + /* 00E4 */ int unknown_00E4; + /* 00E8 */ int unknown_00E8; + /* 00EC */ int unknown_00EC; + /* 00F0 */ int unknown_00F0; + /* 00F4 */ int unknown_00F4; + /* 00F8 */ int unknown_00F8; + /* 00FC */ int unknown_00FC; + /* 0100 */ int unknown_0100; + /* 0104 */ int unknown_0104; + /* 0108 */ int unknown_0108; + /* 010C */ int unknown_010C; + /* 0110 */ int unknown_0110; + /* 0114 */ int unknown_0114; + /* 0118 */ int unknown_0118; + /* 011C */ int unknown_011C; + /* 0120 */ int unknown_0120; + /* 0124 */ int unknown_0124; + /* 0128 */ int unknown_0128; + /* 012C */ int unknown_012C; + /* 0130 */ int unknown_0130; + /* 0134 */ int unknown_0134; + /* 0138 */ int unknown_0138; + /* 013C */ int unknown_013C; + /* 0140 */ int unknown_0140; + /* 0144 */ int unknown_0144; + /* 0148 */ int unknown_0148; + /* 014C */ int unknown_014C; + /* 0150 */ int unknown_0150; + /* 0154 */ int unknown_0154; + /* 0158 */ int unknown_0158; + /* 015C */ int unknown_015C; + /* 0160 */ int unknown_0160; + /* 0164 */ int unknown_0164; + /* 0168 */ int unknown_0168; + /* 016C */ int unknown_016C; + /* 0170 */ std::set persistentWindows; + /* 0178 */ bool retainedPersistentWindow; + /* 017C */ std::list rendered; + /* 0184 */ std::list retired; + /* 018C */ std::list registeredWindows; + /* 0194 */ std::map snapRectangles; + /* 019C */ UIWindow* inputWindow; + /* 01A0 */ UIWindow* hoverWindow; + /* 01A4 */ std::deque modalWindows; + /* 01B8 */ UIWindow* window_01B8; + /* 01BC */ std::uint32_t unknown_01BC; + /* 01C0 */ std::uint32_t unknown_01C0; + /* 01C4 */ std::uint32_t unknown_01C4; + /* 01C8 */ UIWindow* window_01C8; + /* 01CC */ UIWindow* window_01CC; + /* 01D0 */ UIWindow* window_01D0; + /* 01D4 */ std::uint32_t unknown_01D4; + /* 01D8 */ std::uint32_t unknown_01D8; + /* 01DC */ std::uint32_t unknown_01DC; + /* 01E0 */ std::uint32_t unknown_01E0; + /* 01E4 */ std::uint32_t unknown_01E4; + /* 01E8 */ UIWindow* window_01E8; + /* 01EC */ UIWindow* window_01EC; + /* 01F0 */ std::uint32_t unknown_01F0; + /* 01F4 */ std::uint32_t unknown_01F4; + /* 01F8 */ std::uint32_t unknown_01F8; + /* 01FC */ std::uint32_t unknown_01FC; + /* 0200 */ std::uint32_t unknown_0200; + /* 0204 */ std::uint32_t unknown_0204; + /* 0208 */ std::uint32_t unknown_0208; + /* 020C */ std::uint32_t unknown_020C; + /* 0210 */ std::uint32_t unknown_0210; + /* 0214 */ std::uint32_t unknown_0214; + /* 0218 */ std::uint32_t unknown_0218; + /* 021C */ std::uint32_t unknown_021C; + /* 0220 */ std::uint32_t unknown_0220; + /* 0224 */ std::uint32_t unknown_0224; + /* 0228 */ std::uint32_t unknown_0228; + /* 022C */ std::uint32_t unknown_022C; + /* 0230 */ UIWindow* window_0230; + /* 0234 */ std::uint32_t unknown_0234; + /* 0238 */ std::uint32_t unknown_0238; + /* 023C */ std::uint32_t unknown_023C; + /* 0240 */ std::uint32_t unknown_0240; + /* 0244 */ std::uint32_t unknown_0244; + /* 0248 */ std::uint32_t unknown_0248; + /* 024C */ std::uint32_t unknown_024C; + /* 0250 */ std::uint32_t unknown_0250; + /* 0254 */ std::uint32_t unknown_0254; + /* 0258 */ std::uint32_t unknown_0258; + /* 025C */ std::uint32_t unknown_025C; + /* 0260 */ std::uint32_t unknown_0260; + /* 0264 */ std::uint32_t unknown_0264; + /* 0268 */ std::uint32_t unknown_0268; + /* 026C */ std::uint32_t unknown_026C; + /* 0270 */ UIWindow* window_0270; + /* 0274 */ UIWindow* window_0274; + /* 0278 */ UIWindow* window_0278; + /* 027C */ UIWindow* window_027C; + /* 0280 */ std::uint32_t unknown_0280; + /* 0284 */ std::uint32_t unknown_0284; + /* 0288 */ UIWindow* window_0288; + /* 028C */ std::uint32_t unknown_028C; + /* 0290 */ std::uint32_t unknown_0290; + /* 0294 */ std::uint32_t unknown_0294; + /* 0298 */ std::uint32_t unknown_0298; + /* 029C */ std::uint32_t unknown_029C; + /* 02A0 */ std::uint32_t unknown_02A0; + /* 02A4 */ std::uint32_t unknown_02A4; + /* 02A8 */ std::uint32_t unknown_02A8; + /* 02AC */ std::uint32_t unknown_02AC; + /* 02B0 */ std::uint32_t unknown_02B0; + /* 02B4 */ std::uint32_t unknown_02B4; + /* 02B8 */ std::uint32_t unknown_02B8; + /* 02BC */ std::uint32_t unknown_02BC; + /* 02C0 */ std::uint32_t unknown_02C0; + /* 02C4 */ UIWindow* window_02C4; + /* 02C8 */ UIWindow* window_02C8; + /* 02CC */ std::uint32_t unknown_02CC; + /* 02D0 */ std::uint32_t unknown_02D0; + /* 02D4 */ std::uint32_t unknown_02D4; + /* 02D8 */ std::uint32_t unknown_02D8; + /* 02DC */ std::uint32_t unknown_02DC; + /* 02E0 */ std::uint32_t unknown_02E0; + /* 02E4 */ std::uint32_t unknown_02E4; + /* 02E8 */ std::uint32_t unknown_02E8; + /* 02EC */ std::uint32_t unknown_02EC; + /* 02F0 */ std::uint32_t unknown_02F0; + /* 02F4 */ std::uint32_t unknown_02F4; + /* 02F8 */ std::uint32_t unknown_02F8; + /* 02FC */ std::uint32_t unknown_02FC; + /* 0300 */ std::uint32_t unknown_0300; + /* 0304 */ std::uint32_t unknown_0304; + /* 0308 */ std::uint32_t unknown_0308; + /* 030C */ std::uint32_t unknown_030C; + /* 0310 */ std::uint32_t unknown_0310; + /* 0314 */ std::uint32_t unknown_0314; + /* 0318 */ std::uint32_t unknown_0318; + /* 031C */ std::uint32_t unknown_031C; + /* 0320 */ UIWindow* window_0320; + /* 0324 */ UIWindow* window_0324; + /* 0328 */ std::uint32_t unknown_0328; + /* 032C */ UIWindow* window_032C; + /* 0330 */ std::uint32_t unknown_0330; + /* 0334 */ std::uint32_t unknown_0334; + /* 0338 */ std::uint32_t unknown_0338; + /* 033C */ std::uint32_t unknown_033C; + /* 0340 */ std::uint32_t unknown_0340; + /* 0344 */ std::uint32_t unknown_0344; + /* 0348 */ std::uint32_t unknown_0348; + /* 034C */ std::uint32_t unknown_034C; + /* 0350 */ std::uint32_t unknown_0350; + /* 0354 */ std::uint32_t unknown_0354; + /* 0358 */ std::uint32_t unknown_0358; + /* 035C */ std::uint32_t unknown_035C; + /* 0360 */ std::uint32_t unknown_0360; + /* 0364 */ std::uint32_t unknown_0364; + /* 0368 */ std::uint32_t unknown_0368; + /* 036C */ std::uint32_t unknown_036C; + /* 0370 */ std::uint32_t unknown_0370; + /* 0374 */ std::uint32_t unknown_0374; + /* 0378 */ std::uint32_t unknown_0378; + /* 037C */ std::uint32_t unknown_037C; + /* 0380 */ std::uint32_t unknown_0380; + /* 0384 */ std::uint32_t unknown_0384; + /* 0388 */ UIWindow* window_0388; + /* 038C */ UIWindow* window_038C; + /* 0390 */ std::uint32_t unknown_0390; + /* 0394 */ std::uint32_t unknown_0394; + /* 0398 */ std::uint32_t unknown_0398; + /* 039C */ std::uint32_t unknown_039C; + /* 03A0 */ std::uint32_t unknown_03A0; + /* 03A4 */ std::uint32_t unknown_03A4; + /* 03A8 */ std::uint32_t unknown_03A8; + /* 03AC */ std::uint32_t unknown_03AC; + /* 03B0 */ std::uint32_t unknown_03B0; + /* 03B4 */ std::uint32_t unknown_03B4; + /* 03B8 */ std::uint32_t unknown_03B8; + /* 03BC */ std::uint32_t unknown_03BC; + /* 03C0 */ UIWindow* window_03C0; + /* 03C4 */ UIWindow* window_03C4; + /* 03C8 */ UIWindow* window_03C8; + /* 03CC */ UIWindow* window_03CC; + /* 03D0 */ std::uint32_t unknown_03D0; + /* 03D4 */ UIWindow* window_03D4; + /* 03D8 */ UIWindow* window_03D8; + /* 03DC */ UIWindow* window_03DC; + /* 03E0 */ std::uint32_t unknown_03E0; + /* 03E4 */ std::uint32_t unknown_03E4; + /* 03E8 */ std::uint32_t unknown_03E8; + /* 03EC */ std::uint32_t unknown_03EC; + /* 03F0 */ std::uint32_t unknown_03F0; + /* 03F4 */ unsigned char unknown_03F4[4]; + /* 03F8 */ std::uint32_t unknown_03F8; + /* 03FC */ std::uint32_t unknown_03FC; + /* 0400 */ int modal; + /* 0404 */ std::uint32_t unknown_0404; + /* 0408 */ std::uint32_t unknown_0408; + /* 040C */ std::uint32_t unknown_040C; + /* 0410 */ std::uint32_t unknown_0410; + /* 0414 */ std::uint32_t unknown_0414; + /* 0418 */ std::uint32_t unknown_0418; + /* 041C */ std::uint32_t unknown_041C; + /* 0420 */ std::uint32_t unknown_0420; + /* 0424 */ std::uint32_t unknown_0424; + /* 0428 */ UIWindow* window_0428; + /* 042C */ std::uint32_t unknown_042C; + /* 0430 */ std::uint32_t unknown_0430; + /* 0434 */ std::uint32_t unknown_0434; + /* 0438 */ std::uint32_t unknown_0438; + /* 043C */ std::uint32_t unknown_043C; + /* 0440 */ std::uint32_t unknown_0440; + /* 0444 */ UIWindow* window_0444; + /* 0448 */ UIWindow* window_0448; + /* 044C */ UIWindow* window_044C; + /* 0450 */ std::uint32_t unknown_0450; + /* 0454 */ std::uint32_t unknown_0454; + /* 0458 */ std::uint32_t unknown_0458; + /* 045C */ std::uint32_t unknown_045C; + /* 0460 */ std::uint32_t unknown_0460; + /* 0464 */ std::uint32_t unknown_0464; + /* 0468 */ UIWindow* window_0468; + /* 046C */ int unknown_046C; + /* 0470 */ int unknown_0470; + /* 0474 */ int unknown_0474; + /* 0478 */ UIWindow* unknown_0478; + /* 047C */ int unknown_047C; + /* 0480 */ int unknown_0480; + /* 0484 */ std::string unknown_0484; + /* 049C */ short unknown_049C; + /* 049E */ short unknown_049E; + /* 04A0 */ int unknown_04A0; + /* 04A4 */ int unknown_04A4; + /* 04A8 */ int unknown_04A8; + /* 04AC */ int unknown_04AC; + /* 04B0 */ int unknown_04B0; + /* 04B4 */ int unknown_04B4; + /* 04B8 */ int unknown_04B8; + /* 04BC */ int unknown_04BC; + /* 04C0 */ int unknown_04C0; + /* 04C4 */ std::list unknown_04C4; + /* 04CC */ std::list unknown_04CC; + /* 04D4 */ std::list unknown_04D4; + /* 04DC */ std::string unknown_04DC; + /* 04F4 */ int unknown_04F4; + /* 04F8 */ int unknown_04F8; + /* 04FC */ int unknown_04FC; + /* 0500 */ std::map namedWindows; + /* 0508 */ int unknown_0508; + /* 050C */ std::list hiddenWindows; + /* 0514 */ unsigned char unknown_0514[0x4B0]; + /* 09C4 */ std::map browsers; + /* 09CC */ unsigned char unknown_09CC[0x18]; + /* 09E4 */ std::vector messageBoxes; + /* 09F0 */ unsigned char unknown_09F0[0x40]; + /* 0A30 */ UIWindow* window_0A30; + /* 0A34 */ WindowPolicyEntry policy[10041]; + /* 4F154 */ unsigned char unknown_4F154[16]; + /* 4F164 */ UIWindow* window_4F164; + /* 4F168 */ UIWindow* window_4F168; + /* 4F16C */ UIWindow* window_4F16C; + /* 4F170 */ UIWindow* window_4F170; + /* 4F174 */ UIWindow* window_4F174; + /* 4F178 */ UIWindow* window_4F178; + /* 4F17C */ UIWindow* window_4F17C; + /* 4F180 */ UIWindow* window_4F180; + /* 4F184 */ UIWindow* window_4F184; + /* 4F188 */ UIWindow* window_4F188; + /* 4F18C */ UIWindow* window_4F18C; + /* 4F190 */ std::map savedRectangles; + /* 4F198 */ std::map overlays; + /* 4F1A0 */ unsigned previousHitUid; + /* 4F1A4 */ unsigned currentHitUid; + /* 4F1A8 */ unsigned char unknown_4F1A8[0x24]; + /* 4F1CC */ UIWindow* window_4F1CC; + /* 4F1D0 */ UIWindow* window_4F1D0; + /* 4F1D4 */ UIWindow* window_4F1D4; + /* 4F1D8 */ UIWindow* window_4F1D8; + /* 4F1DC */ UIWindow* window_4F1DC; + /* 4F1E0 */ int visible_276; + /* 4F1E4 */ UIWindow* window_4F1E4; + /* 4F1E8 */ UIWindow* window_4F1E8; + /* 4F1EC */ UIWindow* window_4F1EC; + /* 4F1F0 */ UIWindow* window_4F1F0; + /* 4F1F4 */ UIWindow* window_4F1F4; + /* 4F1F8 */ UIWindow* window_4F1F8; + /* 4F1FC */ UIWindow* window_4F1FC; + /* 4F200 */ unsigned char unknown_4F200[16]; + /* 4F210 */ bool unknown_4F210; + /* 4F211 */ bool unknown_4F211; + /* 4F214 */ std::vector unknown_4F214; + /* 4F220 */ unsigned char unknown_4F220[0x18]; + /* 4F238 */ int unknown_4F238; + /* 4F23C */ int unknown_4F23C; + /* 4F240 */ std::list snapExcluded; + /* 4F248 */ std::list unknown_4F248; + /* 4F250 */ UIWindow* window_4F250; + /* 4F254 */ UIWindow* window_4F254; + /* 4F258 */ UIWindow* window_4F258; + /* 4F25C */ UIWindow* window_4F25C; + /* 4F260 */ UIWindow* window_4F260; + /* 4F264 */ UIWindow* window_4F264; + /* 4F268 */ UIWindow* window_4F268; + /* 4F26C */ UIWindow* window_4F26C; + /* 4F270 */ UIWindow* window_4F270; + /* 4F274 */ UIWindow* window_4F274; + /* 4F278 */ UIWindow* window_4F278; + /* 4F27C */ UIWindow* window_4F27C; + /* 4F280 */ std::list savedWindowIds; + /* 4F288 */ UIWindow* window_4F288; + /* 4F28C */ std::unordered_set deferredDeletion; + /* 4F2AC */ UIWindow* window_4F2AC; + + virtual ~UIWindowMgr(); + UIWindowMgr(); + + void InitializeWindowPolicy(); + UIWindow* LookupWindow(int id); +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(WindowTextEntry) == 0x1C); +static_assert(sizeof(WindowTextRecord) == 0x20); +static_assert(sizeof(SavedWindowRectangle) == 0x10); +static_assert(sizeof(WindowPolicyEntry) == 0x20); +static_assert(offsetof(UIWindowMgr, windows) == 0x8); +static_assert(offsetof(UIWindowMgr, windowHistory) == 0x18); +static_assert(offsetof(UIWindowMgr, retainedWindows) == 0x28); +static_assert(offsetof(UIWindowMgr, persistentWindows) == 0x170); +static_assert(offsetof(UIWindowMgr, rendered) == 0x17C); +static_assert(offsetof(UIWindowMgr, retired) == 0x184); +static_assert(offsetof(UIWindowMgr, registeredWindows) == 0x18C); +static_assert(offsetof(UIWindowMgr, snapRectangles) == 0x194); +static_assert(offsetof(UIWindowMgr, modalWindows) == 0x1A4); +static_assert(offsetof(UIWindowMgr, window_01C8) == 0x1C8); +static_assert(offsetof(UIWindowMgr, window_01E8) == 0x1E8); +static_assert(offsetof(UIWindowMgr, window_0230) == 0x230); +static_assert(offsetof(UIWindowMgr, modal) == 0x400); +static_assert(offsetof(UIWindowMgr, unknown_0484) == 0x484); +static_assert(offsetof(UIWindowMgr, unknown_04C4) == 0x4C4); +static_assert(offsetof(UIWindowMgr, unknown_04CC) == 0x4CC); +static_assert(offsetof(UIWindowMgr, unknown_04D4) == 0x4D4); +static_assert(offsetof(UIWindowMgr, unknown_04DC) == 0x4DC); +static_assert(offsetof(UIWindowMgr, namedWindows) == 0x500); +static_assert(offsetof(UIWindowMgr, hiddenWindows) == 0x50C); +static_assert(offsetof(UIWindowMgr, browsers) == 0x9C4); +static_assert(offsetof(UIWindowMgr, messageBoxes) == 0x9E4); +static_assert(offsetof(UIWindowMgr, policy) == 0xA34); +static_assert(offsetof(UIWindowMgr, savedRectangles) == 0x4F190); +static_assert(offsetof(UIWindowMgr, overlays) == 0x4F198); +static_assert(offsetof(UIWindowMgr, unknown_4F214) == 0x4F214); +static_assert(offsetof(UIWindowMgr, snapExcluded) == 0x4F240); +static_assert(offsetof(UIWindowMgr, unknown_4F248) == 0x4F248); +static_assert(offsetof(UIWindowMgr, savedWindowIds) == 0x4F280); +static_assert(offsetof(UIWindowMgr, deferredDeletion) == 0x4F28C); +static_assert(offsetof(UIWindowMgr, window_4F2AC) == 0x4F2AC); +static_assert(sizeof(UIWindowMgr) == 0x4F2B0); +#endif + +#endif diff --git a/compile.json b/compile.json index 8ec9252..a65ce9b 100644 --- a/compile.json +++ b/compile.json @@ -594,6 +594,7 @@ "Source/UI/Window/UIFrameWnd.cpp": 2, "Source/UI/Window/UIMessageBox.cpp": 2, "Source/UI/Window/UIWindow.cpp": 2, + "Source/UI/Window/UIWindowMgr.cpp": 2, "Source/UI/Window/WindowAncestry.cpp": 2, "Source/UI/Window/WindowBorder.cpp": 2, "Source/UI/Window/WindowDialogs.cpp": 2, From add868efe737eba5298c5ced609590f73277cb29 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:09:10 +0100 Subject: [PATCH 41/62] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(source):=20?= =?UTF-8?q?removed=20unused=20includes=20and=20add=20INLINE=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Render/DX9/D3DX9Runtime.h | 2 ++ Source/Render/Text/TextContext.h | 1 - Source/Render/Textures/ClientTextureSources.h | 4 ++++ Source/Resource/BinkRuntime.h | 2 ++ Source/Resource/Bitmap/BitmapImage.cpp | 1 - Source/Resource/Bitmap/BitmapResource.cpp | 1 - Source/Resource/Models/AnimatedModelResource.cpp | 2 -- Source/Resource/Models/ModelResource.cpp | 6 ++---- Source/Resource/Sprites/SpriteEncoding.cpp | 1 - Source/Resource/Sprites/SpriteResource.cpp | 1 - Source/Utility/Cipher/Rijndael.h | 7 ++++--- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Source/Render/DX9/D3DX9Runtime.h b/Source/Render/DX9/D3DX9Runtime.h index 2bed26c..007a63a 100644 --- a/Source/Render/DX9/D3DX9Runtime.h +++ b/Source/Render/DX9/D3DX9Runtime.h @@ -25,6 +25,7 @@ private: HMODULE m_module; }; +// INLINED inline D3DX9Runtime::D3DX9Runtime() : m_module(LoadLibraryA("D3DX9_43.dll")) { if (!this->m_module) { @@ -43,6 +44,7 @@ inline D3DX9Runtime::D3DX9Runtime() : m_module(LoadLibraryA("D3DX9_43.dll")) { } } +// INLINED inline D3DX9Runtime::~D3DX9Runtime() { FreeLibrary(this->m_module); } diff --git a/Source/Render/Text/TextContext.h b/Source/Render/Text/TextContext.h index dbfdd95..82e8a77 100644 --- a/Source/Render/Text/TextContext.h +++ b/Source/Render/Text/TextContext.h @@ -1,7 +1,6 @@ #ifndef RAGNAROK_SOURCE_RENDER_TEXT_TEXTCONTEXT_H #define RAGNAROK_SOURCE_RENDER_TEXT_TEXTCONTEXT_H -#include #include class CDC; diff --git a/Source/Render/Textures/ClientTextureSources.h b/Source/Render/Textures/ClientTextureSources.h index 9e3347e..aa52761 100644 --- a/Source/Render/Textures/ClientTextureSources.h +++ b/Source/Render/Textures/ClientTextureSources.h @@ -26,16 +26,19 @@ private: IDirectDraw7* const& m_directDraw; }; +// INLINED inline ClientTextureSources::ClientTextureSources( TextureNames& names, const int& modeType, BinkMovies* const& movies, CRenderSystemBase*& system, IDirectDraw7* const& directDraw ) : m_names(names), m_modeType(modeType), m_movies(movies), m_system(system), m_directDraw(directDraw) { } +// INLINED inline const char* ClientTextureSources::Resolve(const char* name) { return this->m_names.Resolve(name); } +// INLINED inline bool ClientTextureSources::MovieSize(const char* name, int& width, int& height) { if (this->m_modeType != 1 || !this->m_movies) { return false; @@ -52,6 +55,7 @@ inline bool ClientTextureSources::MovieSize(const char* name, int& width, int& h return true; } +// INLINED inline void ClientTextureSources::CleanupTextures() { if (this->m_system && this->m_system->Backend() == 1 && this->m_directDraw) { this->m_directDraw->Compact(); diff --git a/Source/Resource/BinkRuntime.h b/Source/Resource/BinkRuntime.h index 635ba8b..1024e6f 100644 --- a/Source/Resource/BinkRuntime.h +++ b/Source/Resource/BinkRuntime.h @@ -33,6 +33,7 @@ private: HMODULE m_module; }; +// INLINED inline BinkRuntime::BinkRuntime() : m_module(LoadLibraryA("binkw32.dll")) { if (!this->m_module) { throw std::system_error(GetLastError(), std::system_category(), "binkw32.dll"); @@ -55,6 +56,7 @@ inline BinkRuntime::BinkRuntime() : m_module(LoadLibraryA("binkw32.dll")) { } } +// INLINED inline BinkRuntime::~BinkRuntime() { FreeLibrary(this->m_module); } diff --git a/Source/Resource/Bitmap/BitmapImage.cpp b/Source/Resource/Bitmap/BitmapImage.cpp index 841bcdf..b227ebb 100644 --- a/Source/Resource/Bitmap/BitmapImage.cpp +++ b/Source/Resource/Bitmap/BitmapImage.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include namespace { diff --git a/Source/Resource/Bitmap/BitmapResource.cpp b/Source/Resource/Bitmap/BitmapResource.cpp index 1535160..566f11b 100644 --- a/Source/Resource/Bitmap/BitmapResource.cpp +++ b/Source/Resource/Bitmap/BitmapResource.cpp @@ -1,6 +1,5 @@ #include "Client/Application/ErrorDialog.h" #include "Resource/Bitmap/BitmapResource.h" -#include "Resource/Bitmap/IJL15Runtime.h" #include #include diff --git a/Source/Resource/Models/AnimatedModelResource.cpp b/Source/Resource/Models/AnimatedModelResource.cpp index 6cdd5cb..73b0b1d 100644 --- a/Source/Resource/Models/AnimatedModelResource.cpp +++ b/Source/Resource/Models/AnimatedModelResource.cpp @@ -5,8 +5,6 @@ #include "Resource/Bitmap/BitmapResource.h" #include "Resource/ResourceByteReader.h" -#include - // INLINED AnimatedModelNode::AnimatedModelNode(TextureCache& textures) : model(nullptr), parent(nullptr), unknown_0040(0), vertexCount(0), textureVertexCount(0), faceCount(0), sharedTextureVertices(0), m_textures(textures) { diff --git a/Source/Resource/Models/ModelResource.cpp b/Source/Resource/Models/ModelResource.cpp index d7a6cf0..a0a9d77 100644 --- a/Source/Resource/Models/ModelResource.cpp +++ b/Source/Resource/Models/ModelResource.cpp @@ -205,8 +205,7 @@ bool C3dModelResV1::Load(const char* name) { input.Read(magic, 4); if (std::strcmp(magic, "GRSM") != 0) { - constexpr char message[] = "모델파일이 아닙니다. 형식을 " - "다시한번 확인해주세요."; + constexpr char message[] = "모델파일이 아닙니다. 형식을 다시한번 확인해주세요."; ShowErrorDialog(this->m_context->renderSystem, message, 0); file.Close(); @@ -220,8 +219,7 @@ bool C3dModelResV1::Load(const char* name) { input.Read(&minor, 1); if (major != 1 || minor > 5) { - constexpr char message[] = "지원되지 않는 버젼입니다. " - "내용물이 깨져있을 수 있습니다"; + constexpr char message[] = "지원되지 않는 버젼입니다. 내용물이 깨져있을 수 있습니다"; ShowErrorDialog(this->m_context->renderSystem, message, 0); file.Close(); diff --git a/Source/Resource/Sprites/SpriteEncoding.cpp b/Source/Resource/Sprites/SpriteEncoding.cpp index b19ee1f..3107faa 100644 --- a/Source/Resource/Sprites/SpriteEncoding.cpp +++ b/Source/Resource/Sprites/SpriteEncoding.cpp @@ -1,7 +1,6 @@ #include "Resource/Sprites/SpriteResource.h" #include -#include // OFFSET: 0x00761070 // FUNCTION: fn_08063 diff --git a/Source/Resource/Sprites/SpriteResource.cpp b/Source/Resource/Sprites/SpriteResource.cpp index 2e663d5..3932975 100644 --- a/Source/Resource/Sprites/SpriteResource.cpp +++ b/Source/Resource/Sprites/SpriteResource.cpp @@ -7,7 +7,6 @@ #include #include -#include #include // OFFSET: 0x0075FE90 diff --git a/Source/Utility/Cipher/Rijndael.h b/Source/Utility/Cipher/Rijndael.h index 14d782f..040e43b 100644 --- a/Source/Utility/Cipher/Rijndael.h +++ b/Source/Utility/Cipher/Rijndael.h @@ -1,9 +1,6 @@ #ifndef RAGNAROK_SOURCE_UTILITY_CIPHER_RIJNDAEL_H #define RAGNAROK_SOURCE_UTILITY_CIPHER_RIJNDAEL_H -#include -#include - class CRijndael { public: enum { ECB = 0, CBC = 1, CFB = 2 }; @@ -23,18 +20,22 @@ public: void DefDecryptBlock(const char* in, char* result); void Xor(unsigned char* destination, const unsigned char* source); + // INLINED inline int GetKeyLength() const { return this->m_keylength; } + // INLINED inline int GetBlockSize() const { return this->m_blockSize; } + // INLINED inline int GetRounds() const { return this->m_iROUNDS; } + // INLINED inline void ResetChain() { for (int i = 0; i < this->m_blockSize; ++i) { this->m_chain[i] = this->m_chain0[i]; From 3dbd2763113486942d1c118b92b4a5e4c6c7b0b4 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:21:57 +0100 Subject: [PATCH 42/62] =?UTF-8?q?=F0=9F=93=9A=20docs(inlining):=20marked?= =?UTF-8?q?=20inlined=20functions=20across=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Client/Input/InputCharset.cpp | 1 + Source/Contents/Effects/EffectActor.cpp | 1 + Source/Contents/Ground/GroundGeometry.cpp | 1 + Source/Contents/Items/ItemNaming.cpp | 1 + Source/Contents/World/WorldModelLoading.cpp | 1 + Source/Render/DX7/DirectDrawEnumeration.cpp | 1 + Source/Render/DeviceContext/DCBitmap.cpp | 1 + Source/Resource/Audio/MilesRuntime.h | 3 +++ Source/Resource/Bitmap/IJL15Runtime.h | 2 ++ 9 files changed, 12 insertions(+) diff --git a/Source/Client/Input/InputCharset.cpp b/Source/Client/Input/InputCharset.cpp index 7ada0aa..50822d1 100644 --- a/Source/Client/Input/InputCharset.cpp +++ b/Source/Client/Input/InputCharset.cpp @@ -19,6 +19,7 @@ const char* InputCharset::Prefix(bool alternate) const { return prefix; } +// INLINED unsigned InputCharset::CodePage(unsigned fallback) const { return this->enabled ? LanguageCodePage(this->language) : fallback; } diff --git a/Source/Contents/Effects/EffectActor.cpp b/Source/Contents/Effects/EffectActor.cpp index 2b1f3e3..4aae63d 100644 --- a/Source/Contents/Effects/EffectActor.cpp +++ b/Source/Contents/Effects/EffectActor.cpp @@ -9,6 +9,7 @@ EffectActorState::~EffectActorState() { this->Attachments().DetachAll(); } +// INLINED EffectAttachments EffectActorState::Attachments() { return {this->effects, this->first, this->second}; } diff --git a/Source/Contents/Ground/GroundGeometry.cpp b/Source/Contents/Ground/GroundGeometry.cpp index 902101d..9078f15 100644 --- a/Source/Contents/Ground/GroundGeometry.cpp +++ b/Source/Contents/Ground/GroundGeometry.cpp @@ -93,6 +93,7 @@ void GroundGeometry::Reset(int columns, int rows) { this->unknown_0058 = 0; } +// INLINED GroundSpatial GroundGeometry::Spatial() const { return {this->width, this->height, this->cellSize, this->cells}; } diff --git a/Source/Contents/Items/ItemNaming.cpp b/Source/Contents/Items/ItemNaming.cpp index ab853ca..70df50b 100644 --- a/Source/Contents/Items/ItemNaming.cpp +++ b/Source/Contents/Items/ItemNaming.cpp @@ -40,6 +40,7 @@ namespace { } } +// INLINED const char* ItemNaming::Message(int id) const { return LookupMessage(id, this->languagePrefix, this->service, this->language); } diff --git a/Source/Contents/World/WorldModelLoading.cpp b/Source/Contents/World/WorldModelLoading.cpp index cf617da..0e19686 100644 --- a/Source/Contents/World/WorldModelLoading.cpp +++ b/Source/Contents/World/WorldModelLoading.cpp @@ -129,6 +129,7 @@ void WorldModelLoading::Run() { } } +// INLINED void WorldModelLoading::Publish(WorldSpatialTree& root) { C3dActor* const* data = this->models.data(); PublishWorldModels(root, data, this->published, this->pending); diff --git a/Source/Render/DX7/DirectDrawEnumeration.cpp b/Source/Render/DX7/DirectDrawEnumeration.cpp index 765e204..17de44d 100644 --- a/Source/Render/DX7/DirectDrawEnumeration.cpp +++ b/Source/Render/DX7/DirectDrawEnumeration.cpp @@ -9,6 +9,7 @@ struct DirectDrawEnumeration::AdapterContext { DirectDrawDeviceRecord record{}; }; +// INLINED DirectDrawEnumeration::DirectDrawEnumeration(const GUID& selectedDraw, RECT& monitor) : m_selectedDraw(selectedDraw), m_monitor(monitor) { } diff --git a/Source/Render/DeviceContext/DCBitmap.cpp b/Source/Render/DeviceContext/DCBitmap.cpp index 61a0c6d..5506243 100644 --- a/Source/Render/DeviceContext/DCBitmap.cpp +++ b/Source/Render/DeviceContext/DCBitmap.cpp @@ -19,6 +19,7 @@ CDCBitmap* CreateBitmapDC(int width, int height, bool fill) { return bitmap; } +// INLINED void CDCBitmap::UploadTexture(CRenderSystemBase& system, CTexture*& texture) { this->m_bitmap.UploadTexture(system, texture); } diff --git a/Source/Resource/Audio/MilesRuntime.h b/Source/Resource/Audio/MilesRuntime.h index 02e3dff..cc830da 100644 --- a/Source/Resource/Audio/MilesRuntime.h +++ b/Source/Resource/Audio/MilesRuntime.h @@ -83,11 +83,13 @@ private: HMODULE m_module; }; +// INLINED inline MilesRuntime& MilesRuntime::Get() { static MilesRuntime instance; return instance; } +// INLINED inline MilesRuntime::MilesRuntime() : m_module(LoadLibraryA("Mss32.dll")) { if (!this->m_module) { throw std::system_error(GetLastError(), std::system_category(), "Mss32.dll"); @@ -158,6 +160,7 @@ inline MilesRuntime::MilesRuntime() : m_module(LoadLibraryA("Mss32.dll")) { } } +// INLINED inline MilesRuntime::~MilesRuntime() { FreeLibrary(this->m_module); } diff --git a/Source/Resource/Bitmap/IJL15Runtime.h b/Source/Resource/Bitmap/IJL15Runtime.h index a3e641d..61512ef 100644 --- a/Source/Resource/Bitmap/IJL15Runtime.h +++ b/Source/Resource/Bitmap/IJL15Runtime.h @@ -45,6 +45,7 @@ private: IJL15Runtime& operator=(const IJL15Runtime&) = delete; }; +// INLINED inline IJL15Runtime::IJL15Runtime() : m_module(LoadLibraryA("ijl15.dll")) { if (!this->m_module) { throw std::system_error(GetLastError(), std::system_category(), "ijl15.dll"); @@ -61,6 +62,7 @@ inline IJL15Runtime::IJL15Runtime() : m_module(LoadLibraryA("ijl15.dll")) { } } +// INLINED inline IJL15Runtime::~IJL15Runtime() { FreeLibrary(this->m_module); } From a996ad893be537aafc21315b738b9082555970cc Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:30:10 +0000 Subject: [PATCH 43/62] Decompile fn_22417 (CSoundMaker::Draw) Batch #1018 by ragnarok-clanker: 1 byte-identical, 0 confirmed by peer review. - fn_22417 CSoundMaker::Draw: byte-identical Merged automatically: every function is byte-identical to the original. Adds to the build: Source/Contents/Sound/SoundMaker.cpp --- Source/Contents/Sound/SoundMaker.cpp | 21 +++++++++++++ Source/Contents/Sound/SoundMaker.h | 47 ++++++++++++++++++++++++++++ compile.json | 1 + 3 files changed, 69 insertions(+) create mode 100644 Source/Contents/Sound/SoundMaker.cpp create mode 100644 Source/Contents/Sound/SoundMaker.h diff --git a/Source/Contents/Sound/SoundMaker.cpp b/Source/Contents/Sound/SoundMaker.cpp new file mode 100644 index 0000000..aedc647 --- /dev/null +++ b/Source/Contents/Sound/SoundMaker.cpp @@ -0,0 +1,21 @@ +#include "Contents/Sound/SoundMaker.h" + +#include "Contents/Sound/SoundMgr.h" +#include "Resource/World/WorldResource.h" +#include "Utility/Math/AffineMatrix.h" +#include "Utility/Math/ScalarConversion.h" + +#include +#include +#include + +// OFFSET: 0x00DA1E30 + +// OFFSET: 0x00DA3A60 + +// OFFSET: 0x00DA4960 +// FUNCTION: fn_22417 +void CSoundMaker::Draw(int) { +} + +// OFFSET: 0x00DA56E0 diff --git a/Source/Contents/Sound/SoundMaker.h b/Source/Contents/Sound/SoundMaker.h new file mode 100644 index 0000000..90f16a7 --- /dev/null +++ b/Source/Contents/Sound/SoundMaker.h @@ -0,0 +1,47 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_SOUND_SOUNDMAKER_H +#define RAGNAROK_SOURCE_CONTENTS_SOUND_SOUNDMAKER_H + +#include "Contents/Actors/RenderObject.h" + +#include + +struct SoundMakerContext { + CRenderObject* const& localPlayer; +}; + +class CSoundMaker : public CRenderObject { +public: + CSoundMaker(ResourceMgr& resources, JobNames& names, SoundMakerContext& context); + ~CSoundMaker() override = default; + bool Update() override; + void SendObjectMessage( + CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m + ) override; + void Draw(int argument) override; + + /* 0138 */ std::string file; + /* 0150 */ float volume; + /* 0154 */ int width; + /* 0158 */ int height; + /* 015C */ float range; + /* 0160 */ float radius; + /* 0164 */ std::uint32_t lastTick; + /* 0168 */ std::uint32_t cycle; + +private: + alignas(8) SoundMakerContext* m_context; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CSoundMaker, file) == 0x138); +static_assert(offsetof(CSoundMaker, volume) == 0x150); +static_assert(offsetof(CSoundMaker, width) == 0x154); +static_assert(offsetof(CSoundMaker, height) == 0x158); +static_assert(offsetof(CSoundMaker, range) == 0x15C); +static_assert(offsetof(CSoundMaker, radius) == 0x160); +static_assert(offsetof(CSoundMaker, lastTick) == 0x164); +static_assert(offsetof(CSoundMaker, cycle) == 0x168); +static_assert(sizeof(CSoundMaker) == 0x178); +#endif + +#endif diff --git a/compile.json b/compile.json index a65ce9b..83aa5b1 100644 --- a/compile.json +++ b/compile.json @@ -380,6 +380,7 @@ "Source/Contents/Skills/SkillTreeScript.cpp": 4, "Source/Contents/SkinInfo.cpp": 3, "Source/Contents/Sound/SoundConfiguration.cpp": 4, + "Source/Contents/Sound/SoundMaker.cpp": 4, "Source/Contents/Sound/SoundMgr.cpp": 4, "Source/Contents/Store/MCStoreInfoBackup.cpp": 4, "Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp": 4, From 01aeb424f61fd5ed6a04bbc9e793df555a6d5626 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:31:50 +0000 Subject: [PATCH 44/62] Maintenance: Real scalar owner for gl24542 signed-byte g_language at16D3B07 and gl24529 int g_serviceType16D3B10. PE section .data Vi Batch #1019 by ragnarok-clanker: no function's compiled code changes; checked with 1 compiled unit(s), including every includer of Source/Contents/Configuration/ServiceConfiguration.h. Adds to the build: Source/Contents/Configuration/ServiceConfiguration.cpp --- Source/Contents/Configuration/ServiceConfiguration.cpp | 7 +++++++ Source/Contents/Configuration/ServiceConfiguration.h | 7 +++++++ compile.json | 1 + 3 files changed, 15 insertions(+) create mode 100644 Source/Contents/Configuration/ServiceConfiguration.cpp create mode 100644 Source/Contents/Configuration/ServiceConfiguration.h diff --git a/Source/Contents/Configuration/ServiceConfiguration.cpp b/Source/Contents/Configuration/ServiceConfiguration.cpp new file mode 100644 index 0000000..60188f5 --- /dev/null +++ b/Source/Contents/Configuration/ServiceConfiguration.cpp @@ -0,0 +1,7 @@ +#include "Contents/Configuration/ServiceConfiguration.h" + +// GLOBAL: gl_24542 +signed char g_language = 0; + +// GLOBAL: gl_24529 +int g_serviceType = 0; diff --git a/Source/Contents/Configuration/ServiceConfiguration.h b/Source/Contents/Configuration/ServiceConfiguration.h new file mode 100644 index 0000000..1f6cf4d --- /dev/null +++ b/Source/Contents/Configuration/ServiceConfiguration.h @@ -0,0 +1,7 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_CONFIGURATION_SERVICECONFIGURATION_H +#define RAGNAROK_SOURCE_CONTENTS_CONFIGURATION_SERVICECONFIGURATION_H + +extern signed char g_language; +extern int g_serviceType; + +#endif diff --git a/compile.json b/compile.json index 83aa5b1..6c5879a 100644 --- a/compile.json +++ b/compile.json @@ -278,6 +278,7 @@ "Source/Contents/CashEmotionMgr.cpp": 4, "Source/Contents/Configuration/OptionWriter.cpp": 4, "Source/Contents/Configuration/ScriptOptions.cpp": 4, + "Source/Contents/Configuration/ServiceConfiguration.cpp": 4, "Source/Contents/Configuration/ServiceOptions.cpp": 4, "Source/Contents/Effects/AttachedEffect.cpp": 4, "Source/Contents/Effects/Effect.cpp": 0, From 7afc1a3a5bb73b332a5ebb0a6eb7bf95899f98d3 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:33:55 +0000 Subject: [PATCH 45/62] Decompile fn_22331 (CMercenaryAI::Shutdown) Batch #1022 by ragnarok-clanker: 1 byte-identical, 0 confirmed by peer review. - fn_22331 CMercenaryAI::Shutdown: byte-identical Merged automatically: every function is byte-identical to the original. Adds to the build: Source/Contents/Actors/MercenaryAI.cpp --- Source/Contents/Actors/MercenaryAI.cpp | 18 +++++++++++++++ Source/Contents/Actors/MercenaryAI.h | 32 ++++++++++++++++++++++++++ compile.json | 1 + 3 files changed, 51 insertions(+) create mode 100644 Source/Contents/Actors/MercenaryAI.cpp create mode 100644 Source/Contents/Actors/MercenaryAI.h diff --git a/Source/Contents/Actors/MercenaryAI.cpp b/Source/Contents/Actors/MercenaryAI.cpp new file mode 100644 index 0000000..415c25b --- /dev/null +++ b/Source/Contents/Actors/MercenaryAI.cpp @@ -0,0 +1,18 @@ +#include "Contents/Actors/MercenaryAI.h" + +extern "C" { +#include +} + +// OFFSET: 0x00D9E3F0 + +// OFFSET: 0x00D9E430 + +// OFFSET: 0x00D9E570 +// FUNCTION: fn_22331 +void CMercenaryAI::Shutdown() { + if (this->state) { + lua_close(this->state); + this->state = nullptr; + } +} diff --git a/Source/Contents/Actors/MercenaryAI.h b/Source/Contents/Actors/MercenaryAI.h new file mode 100644 index 0000000..a63f496 --- /dev/null +++ b/Source/Contents/Actors/MercenaryAI.h @@ -0,0 +1,32 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_ACTORS_MERCENARYAI_H +#define RAGNAROK_SOURCE_CONTENTS_ACTORS_MERCENARYAI_H + +#include +#include + +struct lua_State; + +class CMercenaryAI { +public: + /* 0004 */ lua_State* state; + /* 0008 */ std::uint32_t actionStarted; + /* 000C */ std::uint32_t actionDuration; + /* 0010 */ int kind; + /* 0014 */ std::uint32_t lastTick; + + virtual ~CMercenaryAI(); + + explicit CMercenaryAI(int kind); + void Shutdown(); +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(CMercenaryAI) == 0x18); +static_assert(offsetof(CMercenaryAI, state) == 0x4); +static_assert(offsetof(CMercenaryAI, actionStarted) == 0x8); +static_assert(offsetof(CMercenaryAI, actionDuration) == 0xC); +static_assert(offsetof(CMercenaryAI, kind) == 0x10); +static_assert(offsetof(CMercenaryAI, lastTick) == 0x14); +#endif + +#endif diff --git a/compile.json b/compile.json index 6c5879a..777aa63 100644 --- a/compile.json +++ b/compile.json @@ -266,6 +266,7 @@ "Source/Contents/ActorNameDirectory.cpp": 4, "Source/Contents/Actors/AttackMotion.cpp": 4, "Source/Contents/Actors/GameObject.cpp": 4, + "Source/Contents/Actors/MercenaryAI.cpp": 4, "Source/Contents/Actors/RenderObject.cpp": 4, "Source/Contents/Actors/RenderObjectState.cpp": 4, "Source/Contents/Actors/SpriteDrawingPolicy.cpp": 4, From d73c3c129654c57acbb0ba632f1d80c9f9d7ecd5 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 09:38:13 +0000 Subject: [PATCH 46/62] Decompile 5 functions in Source/UI/Window/UIWindowMgr.cpp, Source/UI/Window/UIWindowMgr.h, ... Batch #1025 by ragnarok-clanker: 5 byte-identical, 0 confirmed by peer review. - fn_17831 CWorld::ActiveGameMode: byte-identical - fn_19302 ReplaySection::ReplaySection: byte-identical (already on main) - fn_19306 ReplaySection::~ReplaySection: byte-identical (already on main) - fn_17835 CMode::Slot7: byte-identical - fn_17838 CMode::Slot5: byte-identical Merged automatically: every function is byte-identical to the original. --- Source/Client/Mode/ActiveGameMode.cpp | 12 ++++++- Source/Client/Mode/ActiveGameMode.h | 6 ++-- Source/Client/Mode/CMode.h | 47 +++++++++++++++++++++++++++ Source/UI/Window/UIWindowMgr.cpp | 7 ++++ Source/UI/Window/UIWindowMgr.h | 24 ++++++++++---- 5 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 Source/Client/Mode/CMode.h diff --git a/Source/Client/Mode/ActiveGameMode.cpp b/Source/Client/Mode/ActiveGameMode.cpp index 4a4f7ea..f0b2507 100644 --- a/Source/Client/Mode/ActiveGameMode.cpp +++ b/Source/Client/Mode/ActiveGameMode.cpp @@ -6,6 +6,16 @@ CWorld g_world = {1}; // OFFSET: 0x00AD6450 // FUNCTION: fn_17831 -CGameMode* CWorld::ActiveGameMode() { +CMode* CWorld::ActiveGameMode() { return this->state == 1 ? this->gameMode : nullptr; } + +// OFFSET: 0x00AD6700 +// FUNCTION: fn_17838 +void CMode::Slot5(int) { +} + +// OFFSET: 0x00AD66D0 +// FUNCTION: fn_17835 +void CMode::Slot7(int) { +} diff --git a/Source/Client/Mode/ActiveGameMode.h b/Source/Client/Mode/ActiveGameMode.h index a070be6..d4c37aa 100644 --- a/Source/Client/Mode/ActiveGameMode.h +++ b/Source/Client/Mode/ActiveGameMode.h @@ -1,15 +1,15 @@ #ifndef RAGNAROK_SOURCE_CLIENT_MODE_ACTIVEGAMEMODE_H #define RAGNAROK_SOURCE_CLIENT_MODE_ACTIVEGAMEMODE_H -class CGameMode; +#include "Client/Mode/CMode.h" struct CWorld { /* 0000 */ int running; - /* 0004 */ CGameMode* gameMode; + /* 0004 */ CMode* gameMode; /* 0008 */ unsigned char unknown_0008[0x50]; /* 0058 */ int state; - CGameMode* ActiveGameMode(); + CMode* ActiveGameMode(); }; extern CWorld g_world; diff --git a/Source/Client/Mode/CMode.h b/Source/Client/Mode/CMode.h new file mode 100644 index 0000000..0b58e14 --- /dev/null +++ b/Source/Client/Mode/CMode.h @@ -0,0 +1,47 @@ +#ifndef RAGNAROK_SOURCE_CLIENT_MODE_CMODE_H +#define RAGNAROK_SOURCE_CLIENT_MODE_CMODE_H + +#include +#include +#include + +class UIWindow; + +class CMode { +public: + /* 0004 */ int cursorType; + /* 0008 */ std::uint32_t cursorFrame; + /* 000C */ int pendingCursorType; + /* 0010 */ int unknown_0010; + /* 0014 */ int running; + /* 0018 */ int unknown_0018; + /* 001C */ UIWindow* tooltip; + /* 0020 */ std::uint32_t tooltipTick; + /* 0024 */ std::uint32_t cursorTick; + /* 0028 */ int unknown_0028; + /* 002C */ int unknown_002C; + /* 0030 */ int unknown_0030; + /* 0034 */ int unknown_0034; + /* 0038 */ std::string unknown_0038; + /* 0050 */ int unknown_0050; + /* 0054 */ int unknown_0054; + + virtual ~CMode(); + virtual int Run(); + virtual void Initialize(const char* name); + virtual void End(); + virtual void Update(); + virtual void Slot5(int value); + virtual int SendMsg(int event, int argument1, int argument2, int argument3, int argument4); + virtual void Slot7(int value); + + CMode(); +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CMode, cursorType) == 0x4); +static_assert(offsetof(CMode, unknown_0038) == 0x38); +static_assert(sizeof(CMode) == 0x58); +#endif + +#endif diff --git a/Source/UI/Window/UIWindowMgr.cpp b/Source/UI/Window/UIWindowMgr.cpp index f0085fe..30c4a69 100644 --- a/Source/UI/Window/UIWindowMgr.cpp +++ b/Source/UI/Window/UIWindowMgr.cpp @@ -1,7 +1,14 @@ +#include "Client/Mode/ActiveGameMode.h" #include "Client/Replay.h" +#include "Contents/Configuration/ServiceConfiguration.h" #include "UI/Window/UIWindowMgr.h" // OFFSET: 0x00A94FD0 // OFFSET: 0x00AA5F70 + +// OFFSET: 0x00AA1800 + +// OFFSET: 0x00A88490 + diff --git a/Source/UI/Window/UIWindowMgr.h b/Source/UI/Window/UIWindowMgr.h index 46e7c61..22279f6 100644 --- a/Source/UI/Window/UIWindowMgr.h +++ b/Source/UI/Window/UIWindowMgr.h @@ -3,6 +3,7 @@ #include "UI/Layout/SnapRectangle.h" +#include #include #include #include @@ -58,9 +59,10 @@ public: /* 0048 */ int unknown_0048; /* 004C */ int unknown_004C; /* 0050 */ float unknown_0050; - /* 0054 */ int unknown_0054; + /* 0054 */ unsigned char unknown_0054; + /* 0055 */ unsigned char unknown_0055[3]; /* 0058 */ int unknown_0058; - /* 005C */ int unknown_005C; + /* 005C */ std::uint32_t unknown_005C; /* 0060 */ int unknown_0060; /* 0064 */ int unknown_0064; /* 0068 */ int unknown_0068; @@ -281,7 +283,9 @@ public: /* 03E8 */ std::uint32_t unknown_03E8; /* 03EC */ std::uint32_t unknown_03EC; /* 03F0 */ std::uint32_t unknown_03F0; - /* 03F4 */ unsigned char unknown_03F4[4]; + /* 03F4 */ unsigned short unknown_03F4; + /* 03F6 */ unsigned char unknown_03F6; + /* 03F7 */ unsigned char unknown_03F7; /* 03F8 */ std::uint32_t unknown_03F8; /* 03FC */ std::uint32_t unknown_03FC; /* 0400 */ int modal; @@ -324,7 +328,8 @@ public: /* 04A4 */ int unknown_04A4; /* 04A8 */ int unknown_04A8; /* 04AC */ int unknown_04AC; - /* 04B0 */ int unknown_04B0; + /* 04B0 */ unsigned char unknown_04B0; + /* 04B1 */ unsigned char unknown_04B1[3]; /* 04B4 */ int unknown_04B4; /* 04B8 */ int unknown_04B8; /* 04BC */ int unknown_04BC; @@ -339,9 +344,13 @@ public: /* 0500 */ std::map namedWindows; /* 0508 */ int unknown_0508; /* 050C */ std::list hiddenWindows; - /* 0514 */ unsigned char unknown_0514[0x4B0]; - /* 09C4 */ std::map browsers; - /* 09CC */ unsigned char unknown_09CC[0x18]; + /* 0514 */ unsigned char unknown_0514[0x12]; + /* 0526 */ bool unknown_0526; + /* 0527 */ unsigned char unknown_0527[0x49D]; + /* 09C4 */ std::map browsers; + /* 09CC */ int unknown_09CC; + /* 09D0 */ CWebBrowser* browser_09D0; + /* 09D4 */ unsigned char unknown_09D4[0x10]; /* 09E4 */ std::vector messageBoxes; /* 09F0 */ unsigned char unknown_09F0[0x40]; /* 0A30 */ UIWindow* window_0A30; @@ -406,6 +415,7 @@ public: UIWindowMgr(); void InitializeWindowPolicy(); + void ResetWindows(); UIWindow* LookupWindow(int id); }; From ff15df90ad03cb8380379452c3177eaa3b7f54f2 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:42:13 +0100 Subject: [PATCH 47/62] =?UTF-8?q?=F0=9F=93=9D=20docs(annotations):=20marke?= =?UTF-8?q?d=20inlined=20functions=20across=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Async/AsyncWorkMgr.h | 1 + Source/Contents/Models/ModelRendering.cpp | 1 + Source/Network/Connection/Connection.h | 3 +++ Source/Render/DX7/RenderSystemDX7.h | 1 + Source/Render/DX9/DeviceOwnerDX9.cpp | 2 ++ Source/Render/DX9/RenderSystemDX9.cpp | 2 ++ Source/Render/DX9/RenderSystemDX9.h | 1 + Source/Render/DX9/ScreenshotDX9.cpp | 1 + Source/Render/Projection/RendererViewport.cpp | 1 + Source/Resource/Resource.cpp | 1 + Source/Resource/ResourceFailures.cpp | 2 ++ Source/Resource/World/TerrainResource.cpp | 1 + Source/UI/Cooldowns/CooldownOwner.cpp | 2 ++ Source/UI/Edit/ItemTagRetirement.cpp | 1 + Source/UI/Edit/UIEditCtrl.cpp | 2 ++ Source/UI/Lists/UIComboBoxEx.cpp | 1 + Source/UI/Party/UIRegisterPartyWnd.cpp | 1 + Source/UI/Text/UIBalloonText.cpp | 1 + Source/UI/Text/UITextViewerLinks.cpp | 1 + Source/UI/Window/UIMessageBox.cpp | 1 + 20 files changed, 27 insertions(+) diff --git a/Source/Contents/Async/AsyncWorkMgr.h b/Source/Contents/Async/AsyncWorkMgr.h index b03b379..f40520f 100644 --- a/Source/Contents/Async/AsyncWorkMgr.h +++ b/Source/Contents/Async/AsyncWorkMgr.h @@ -64,6 +64,7 @@ public: void StopRecruiting(std::uint32_t accountId, std::string world, std::string url, std::string token, std::uint32_t masterAccountId, StopRecruitingContext& context); + // INLINED CAsyncWorkRecycleObjectPoolMgr& Pools() { return *this->m_pools; } diff --git a/Source/Contents/Models/ModelRendering.cpp b/Source/Contents/Models/ModelRendering.cpp index 7dadcbc..b27d854 100644 --- a/Source/Contents/Models/ModelRendering.cpp +++ b/Source/Contents/Models/ModelRendering.cpp @@ -10,6 +10,7 @@ #include "Utility/Math/ScalarConversion.h" #include +// INLINED ModelRenderContext::ModelRenderContext( const RenderProjection& projection, RenderCommandPool& commands, RenderVertexPool& vertices, RenderQueues& queues, const int& width, const int& height, const bool& depthAlpha, const float& depthStart, const float& depthEnd, const bool& overrideColor, const bool& integerColor, const float* overrideScale, diff --git a/Source/Network/Connection/Connection.h b/Source/Network/Connection/Connection.h index 6cb1986..33b0aef 100644 --- a/Source/Network/Connection/Connection.h +++ b/Source/Network/Connection/Connection.h @@ -46,12 +46,15 @@ public: void ResetBuffers(); void SetDeferred(unsigned char value); + // INLINED SOCKET NativeSocket() const { return this->m_socket; } + // INLINED ConnectionBuffer& Input() { return this->m_input; } + // INLINED unsigned& SendDeadline() { return this->m_sendDeadline; } diff --git a/Source/Render/DX7/RenderSystemDX7.h b/Source/Render/DX7/RenderSystemDX7.h index cb43256..175c24a 100644 --- a/Source/Render/DX7/RenderSystemDX7.h +++ b/Source/Render/DX7/RenderSystemDX7.h @@ -32,6 +32,7 @@ public: HRESULT TestDevice() override; HRESULT Present(bool option) override; + // INLINED DeviceOwnerDX7* Device() const { return this->m_device; } diff --git a/Source/Render/DX9/DeviceOwnerDX9.cpp b/Source/Render/DX9/DeviceOwnerDX9.cpp index b3fa12d..4c27141 100644 --- a/Source/Render/DX9/DeviceOwnerDX9.cpp +++ b/Source/Render/DX9/DeviceOwnerDX9.cpp @@ -269,10 +269,12 @@ HRESULT DeviceOwnerDX9::Present(int) { return this->lastPresent; } +// INLINED SurfaceDX9Context DeviceOwnerDX9::SurfaceContext() const { return {this->device, this->backBufferDescription, this->backBuffer}; } +// INLINED TextureDX9Context DeviceOwnerDX9::TextureContext( D3DX9Runtime& d3dx, RenderPrimitivePool& primitives, RenderQueues& queues, bool depthAlpha, float depthStart, float depthEnd ) const { diff --git a/Source/Render/DX9/RenderSystemDX9.cpp b/Source/Render/DX9/RenderSystemDX9.cpp index b020c4f..f02bf9f 100644 --- a/Source/Render/DX9/RenderSystemDX9.cpp +++ b/Source/Render/DX9/RenderSystemDX9.cpp @@ -23,6 +23,7 @@ CRenderSystemDX9::~CRenderSystemDX9() { delete this->m_defaultTexture; } +// INLINED void CRenderSystemDX9::RefreshContexts() { this->m_surfaceContext = this->m_device->SurfaceContext(); auto& context = this->m_textureContext; @@ -43,6 +44,7 @@ std::int32_t CRenderSystemDX9::Backend() { return 2; } +// INLINED HRESULT CRenderSystemDX9::Initialize(HWND window) { const HRESULT result = InitializeConfiguredDeviceDX9(*this->m_device, window, this->m_context->deviceOptions, this->m_context->adapter, this->m_context->serviceUsesDX7); diff --git a/Source/Render/DX9/RenderSystemDX9.h b/Source/Render/DX9/RenderSystemDX9.h index 6c27754..d4800f6 100644 --- a/Source/Render/DX9/RenderSystemDX9.h +++ b/Source/Render/DX9/RenderSystemDX9.h @@ -49,6 +49,7 @@ public: HRESULT TestDevice() override; HRESULT Present(bool option) override; + // INLINED DeviceOwnerDX9& Device() { return *this->m_device; } diff --git a/Source/Render/DX9/ScreenshotDX9.cpp b/Source/Render/DX9/ScreenshotDX9.cpp index 08d5cef..0bfb5da 100644 --- a/Source/Render/DX9/ScreenshotDX9.cpp +++ b/Source/Render/DX9/ScreenshotDX9.cpp @@ -9,6 +9,7 @@ namespace { class ScreenshotOverlay : public UIRPData { public: + // INLINED const std::list& Primitives() const { return this->m_primitives; } diff --git a/Source/Render/Projection/RendererViewport.cpp b/Source/Render/Projection/RendererViewport.cpp index 6896f41..dc0456c 100644 --- a/Source/Render/Projection/RendererViewport.cpp +++ b/Source/Render/Projection/RendererViewport.cpp @@ -30,6 +30,7 @@ void RendererViewport::SetSize(int columns, int rows, const float& projectionSca cotangent = projectionScale / this->uiScaleY; } +// INLINED RenderProjection RendererViewport::Projection() const { return {this->scaleX, this->scaleY, this->centerX, this->centerY}; } diff --git a/Source/Resource/Resource.cpp b/Source/Resource/Resource.cpp index d7367f3..d87556e 100644 --- a/Source/Resource/Resource.cpp +++ b/Source/Resource/Resource.cpp @@ -11,6 +11,7 @@ ResourceName::ResourceName(const char* name) { this->Assign(name); } +// INLINED void ResourceName::Assign(const char* name) { myGPack::AssignNameKey(this->hash, this->text, name); } diff --git a/Source/Resource/ResourceFailures.cpp b/Source/Resource/ResourceFailures.cpp index 6b53357..ea9320a 100644 --- a/Source/Resource/ResourceFailures.cpp +++ b/Source/Resource/ResourceFailures.cpp @@ -3,10 +3,12 @@ #include +// INLINED ResourceFailures::ResourceFailures(ResourceMessages& messages) : m_messages(&messages) { InitializeCriticalSection(&this->m_lock); } +// INLINED ResourceFailures::~ResourceFailures() { DeleteCriticalSection(&this->m_lock); } diff --git a/Source/Resource/World/TerrainResource.cpp b/Source/Resource/World/TerrainResource.cpp index 6fa8e20..88fcafb 100644 --- a/Source/Resource/World/TerrainResource.cpp +++ b/Source/Resource/World/TerrainResource.cpp @@ -75,6 +75,7 @@ void C3dAttr::Unload() { this->height = 0; } +// INLINED TerrainHeight C3dAttr::Grid() const { return {this->width, this->height, this->cellSize, this->m_cells.data()}; } diff --git a/Source/UI/Cooldowns/CooldownOwner.cpp b/Source/UI/Cooldowns/CooldownOwner.cpp index 667db74..d330e80 100644 --- a/Source/UI/Cooldowns/CooldownOwner.cpp +++ b/Source/UI/Cooldowns/CooldownOwner.cpp @@ -28,11 +28,13 @@ void CooldownOwner::ClearReverseCommands() { this->m_drawing.reverse.clear(); } +// INLINED CooldownState* CooldownOwner::Find(unsigned id) { const auto entry = this->m_values.find(id); return entry == this->m_values.end() ? nullptr : &entry->second; } +// INLINED void CooldownOwner::Erase(unsigned id) { this->m_values.erase(id); } diff --git a/Source/UI/Edit/ItemTagRetirement.cpp b/Source/UI/Edit/ItemTagRetirement.cpp index 163696d..fdaeb89 100644 --- a/Source/UI/Edit/ItemTagRetirement.cpp +++ b/Source/UI/Edit/ItemTagRetirement.cpp @@ -2,6 +2,7 @@ #include "UI/Edit/ItemTagRetirement.h" #include "UI/Window/UIWindow.h" +// INLINED FocusedItemTagRemoval::FocusedItemTagRemoval(InputFocus& focus) : m_focus(focus) { } diff --git a/Source/UI/Edit/UIEditCtrl.cpp b/Source/UI/Edit/UIEditCtrl.cpp index 4f60255..ac84bcc 100644 --- a/Source/UI/Edit/UIEditCtrl.cpp +++ b/Source/UI/Edit/UIEditCtrl.cpp @@ -187,9 +187,11 @@ void EditPainting::Draw() { } class LinkLayout : public EditLinkLayout { public: + // INLINED explicit LinkLayout(UIEditCtrl& control) : m_control(control) { } + // INLINED void Update() override { this->m_control.UpdateLinks(); } diff --git a/Source/UI/Lists/UIComboBoxEx.cpp b/Source/UI/Lists/UIComboBoxEx.cpp index 9c596a9..105a037 100644 --- a/Source/UI/Lists/UIComboBoxEx.cpp +++ b/Source/UI/Lists/UIComboBoxEx.cpp @@ -10,6 +10,7 @@ #include namespace { + // INLINED unsigned Palette(ResourceMgr& resources, int column, int row) { constexpr char path[] = "유저인터페이스\\colorchip.bmp"; auto* chip = static_cast(resources.Load(path)); diff --git a/Source/UI/Party/UIRegisterPartyWnd.cpp b/Source/UI/Party/UIRegisterPartyWnd.cpp index 1fb9236..f39f339 100644 --- a/Source/UI/Party/UIRegisterPartyWnd.cpp +++ b/Source/UI/Party/UIRegisterPartyWnd.cpp @@ -216,6 +216,7 @@ void UIRegisterPartyWnd::SetInfo(CAdvenPartyInfo value) { this->Invalidate(); } +// INLINED const char* UIRegisterPartyWnd::Text(UIEditCtrl& control) const { const auto& edit = this->m_registration->edits; return edit.focus.window == &control ? edit.input.text.c_str() : control.text.c_str(); diff --git a/Source/UI/Text/UIBalloonText.cpp b/Source/UI/Text/UIBalloonText.cpp index 23cb5af..a04234f 100644 --- a/Source/UI/Text/UIBalloonText.cpp +++ b/Source/UI/Text/UIBalloonText.cpp @@ -32,6 +32,7 @@ namespace { } } + // INLINED SIZE Measure(UIBalloonText& window, BalloonTextContext& owner, const std::string& text, int family, int height) { if (text.empty()) { return {0, 0}; diff --git a/Source/UI/Text/UITextViewerLinks.cpp b/Source/UI/Text/UITextViewerLinks.cpp index 0bc68ce..b379977 100644 --- a/Source/UI/Text/UITextViewerLinks.cpp +++ b/Source/UI/Text/UITextViewerLinks.cpp @@ -11,6 +11,7 @@ #include +// INLINED std::string UITextViewer::ConvertChat(std::string text) { std::string converted; DisplayNavigationLink(converted, text); diff --git a/Source/UI/Window/UIMessageBox.cpp b/Source/UI/Window/UIMessageBox.cpp index 0f75d27..a8464a6 100644 --- a/Source/UI/Window/UIMessageBox.cpp +++ b/Source/UI/Window/UIMessageBox.cpp @@ -17,6 +17,7 @@ namespace { constexpr char prefix[] = "유저인터페이스\\"; + // INLINED std::uint32_t Palette(ResourceMgr& resources, int x, int y) { const auto* resource = static_cast(resources.Load((std::string(prefix) + "colorchip.bmp").c_str())); const auto& image = resource->image; From e331e03f4c2dfbaf91fd8df0f746a6c93d489116 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:43:00 +0100 Subject: [PATCH 48/62] =?UTF-8?q?=F0=9F=93=9D=20docs(headers):=20annotated?= =?UTF-8?q?=20inlined=20methods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Render/DX7/TextureBindingDX7.h | 1 + Source/Resource/ResourceByteReader.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Source/Render/DX7/TextureBindingDX7.h b/Source/Render/DX7/TextureBindingDX7.h index 333600d..50be23f 100644 --- a/Source/Render/DX7/TextureBindingDX7.h +++ b/Source/Render/DX7/TextureBindingDX7.h @@ -15,6 +15,7 @@ struct TextureBindingDX7 { /* 0274 */ IDirect3DDevice7* device = nullptr; void Set(unsigned stage, CTextureDX7* texture); + // INLINED void Set(IDirect3DDevice7* dev, unsigned stage, CTextureDX7* texture) { this->device = dev; this->Set(stage, texture); diff --git a/Source/Resource/ResourceByteReader.h b/Source/Resource/ResourceByteReader.h index de9e4ad..98b7bad 100644 --- a/Source/Resource/ResourceByteReader.h +++ b/Source/Resource/ResourceByteReader.h @@ -8,6 +8,7 @@ struct ResourceByteReader { unsigned size; unsigned position = 0; + // INLINED bool Read(void* output, unsigned bytes) { if (position + bytes > size) { return false; From 07d2f8441c8bca286a9d7cef70422c0c009af61a Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:46:28 +0100 Subject: [PATCH 49/62] =?UTF-8?q?=F0=9F=93=9D=20docs(headers):=20added=20i?= =?UTF-8?q?nlined=20comments=20to=20method=20definitions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Resource/World/TerrainResource.h | 1 + Source/UI/Cooldowns/CooldownOwner.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Source/Resource/World/TerrainResource.h b/Source/Resource/World/TerrainResource.h index 6d8b067..8113642 100644 --- a/Source/Resource/World/TerrainResource.h +++ b/Source/Resource/World/TerrainResource.h @@ -28,6 +28,7 @@ public: private: struct Cell : TerrainHeightCell { + // INLINED Cell() noexcept { } }; diff --git a/Source/UI/Cooldowns/CooldownOwner.h b/Source/UI/Cooldowns/CooldownOwner.h index c4d1a30..96cef5f 100644 --- a/Source/UI/Cooldowns/CooldownOwner.h +++ b/Source/UI/Cooldowns/CooldownOwner.h @@ -14,6 +14,7 @@ public: CooldownState* Find(unsigned id); void Erase(unsigned id); + // INLINED CooldownDrawing& Drawing() { return this->m_drawing; } From c989c4837c11a19a3608e3cd38e2ed95f0cb9d1a Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:02 +0000 Subject: [PATCH 50/62] Decompile 6 functions in Source/Client/Replay.cpp, Source/Client/Replay.h Batch #998 by ragnarok-clanker: 0 byte-identical, 6 confirmed by peer review. - fn_06623 BuildReplayTaggedRecord: logic confirmed by peer review - fn_19300 Replay::Replay: logic confirmed by peer review - fn_19326 Replay::WriteSection: logic confirmed by peer review - fn_19327 Replay::WriteHeader: logic confirmed by peer review - fn_19328 Replay::BuildMetadata: logic confirmed by peer review - fn_19354 Replay::Instance: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Client/Replay.cpp | 197 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) diff --git a/Source/Client/Replay.cpp b/Source/Client/Replay.cpp index 39faa98..066a157 100644 --- a/Source/Client/Replay.cpp +++ b/Source/Client/Replay.cpp @@ -25,6 +25,16 @@ struct ReplayTaggedRecordHeader { static_assert(sizeof(ReplayTaggedRecordHeader) == 6); // OFFSET: 0x006DA340 +// FUNCTION: fn_06623 +static std::vector BuildReplayTaggedRecord(std::uint16_t id, const void* data, std::uint32_t bytes) { + std::vector record(bytes + 6u, 0); + const ReplayTaggedRecordHeader header{id, bytes}; + std::memcpy(record.data(), &header, sizeof(header)); + if (bytes != 0) { + std::memcpy(record.data() + sizeof(header), data, bytes); + } + return record; +} // OFFSET: 0x00B839D0 // FUNCTION: fn_19302 @@ -40,11 +50,198 @@ ReplaySection::~ReplaySection() { } // OFFSET: 0x00B83540 +// FUNCTION: fn_19300 +Replay::Replay() : cipherIndex(0), cipherBase(0), cipherKey(0), unknown_01F4(0), unknown_01F8(0) { + this->state = 1; + this->baseFrame = 0; + this->started = 0; + this->frame = 0; + this->elapsed = 0; + this->speed = 1.0f; + std::memset(&this->header, 0, sizeof(this->header)); + std::memset(&this->header.options, 1, sizeof(this->header.options)); + this->header.Reset(); + this->records = 0; + this->fileMode = -1; + this->file = nullptr; + this->fileOffset = 0; + this->previousTick = timeGetTime(); + this->unknown_01F8 = 0; + this->unknown_01F4 = 0; + this->cachedPackets.resize(3143, ReplayCachedPacket{}); + this->cachedPackets[2459].enabled = true; + this->cachedPackets[470].enabled = true; +} // OFFSET: 0x00B855B0 +// FUNCTION: fn_19326 +bool Replay::WriteSection(int id, std::vector& bytes, int event) { + if (bytes.empty()) { + return false; + } + if (id <= 0 || id >= 26 || bytes.size() == 0 || bytes.data() == nullptr) { + return false; + } + ReplaySection& section = this->sections[id]; + if (event == 14) { + section.id = static_cast(id); + section.bytes = bytes.size(); + section.fileOffset = this->fileOffset; + this->fileOffset += bytes.size(); + } + if (section.bytes != 0) { + this->cipherBase = this->header.key0 >> 5; + this->cipherIndex = 0; + this->cipherKey = this->header.key1 >> 3; + for (std::uint32_t index = 0; index < section.bytes / 4; ++index) { + std::uint32_t word; + std::memcpy(&word, bytes.data() + index * 4, sizeof(word)); + word ^= this->cipherKey * (++this->cipherIndex + this->cipherBase); + std::memcpy(bytes.data() + index * 4, &word, sizeof(word)); + } + } + std::fseek(this->file, static_cast(section.fileOffset), SEEK_SET); + return std::fwrite(bytes.data(), section.bytes, 1, this->file) != 0; +} // OFFSET: 0x00B857E0 +// FUNCTION: fn_19327 +int Replay::WriteHeader(int event) { + this->header.records = this->records; + this->header.fileOffset = this->fileOffset; + this->header.closingSignature = 0x52414705; + this->header.signature = 0x52414705; + switch (event) { + case 11: { + this->sections[25].id = 111; + bool written; + { + std::vector metadata = this->BuildMetadata(); + written = this->WriteSection(2, metadata, 14); + } + if (!written) { + return 0; + } + char text[100] = {}; + std::sprintf(text, g_replayHeaderText, 5); + std::sprintf(text + 95, g_replayHeaderPrefix); + std::fseek(this->file, 0, SEEK_SET); + std::fwrite(text, sizeof(text), 1, this->file); + std::fwrite(&this->header, 12, 1, this->file); + return 1; + } + case 12: { + if (++g_replayFlushCounter != 1200) { + return 1; + } + this->header.closingSignature = 0x51404605; + this->header.signature = 0x51404605; + bool written; + { + std::vector metadata = this->BuildMetadata(); + written = this->WriteSection(2, metadata, 15); + } + if (!written) { + return 0; + } + std::fseek(this->file, 112, SEEK_SET); + std::fwrite(this->sections, sizeof(this->sections), 1, this->file); + g_replayFlushCounter = 0; + return 1; + } + case 13: { + bool written; + { + std::vector metadata = this->BuildMetadata(); + written = this->WriteSection(2, metadata, 15); + } + if (!written) { + return 0; + } + std::fseek(this->file, 112, SEEK_SET); + std::fwrite(this->sections, sizeof(this->sections), 1, this->file); + return 1; + } + default: + return 0; + } +} // OFFSET: 0x00B85A20 +// FUNCTION: fn_19328 +std::vector Replay::BuildMetadata() { + std::vector metadata; + { + const auto record = BuildReplayTaggedRecord(950, nullptr, 0); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(961, &this->header.service, sizeof(this->header.service)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(962, &this->header.serviceType, sizeof(this->header.serviceType)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(963, &this->header.unknown_0014, sizeof(this->header.unknown_0014)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(964, this->header.characterName, sizeof(this->header.characterName)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(965, this->header.mapName, sizeof(this->header.mapName)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(966, &this->header.accountId, sizeof(this->header.accountId)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(967, &this->header.cellX, sizeof(this->header.cellX)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(968, &this->header.cellY, sizeof(this->header.cellY)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(969, &this->header.unknown_0078, sizeof(this->header.unknown_0078)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(970, &this->header.duration, sizeof(this->header.duration)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(971, &this->header.records, sizeof(this->header.records)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(972, &this->header.fileOffset, sizeof(this->header.fileOffset)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(973, &this->header.options, sizeof(this->header.options)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(960, &this->header.closingSignature, sizeof(this->header.closingSignature)); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + { + const auto record = BuildReplayTaggedRecord(951, nullptr, 0); + metadata.insert(metadata.end(), record.begin(), record.end()); + } + return metadata; +} // OFFSET: 0x00B875E0 +// FUNCTION: fn_19354 +Replay& Replay::Instance() { + // GLOBAL: gl_24631 + static Replay g_replay; + return g_replay; +} From 6188ab372a760ebe1f9f58eed869759ad9dfabf0 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:17 +0000 Subject: [PATCH 51/62] Decompile fn_04414 (EncodeBase64) Batch #1029 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_04414 EncodeBase64: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Utility/Text/Base64.cpp | 42 ++++++++++++++++++++++++++++++++++ Source/Utility/Text/Base64.h | 2 ++ 2 files changed, 44 insertions(+) diff --git a/Source/Utility/Text/Base64.cpp b/Source/Utility/Text/Base64.cpp index 9ce7e65..cad263d 100644 --- a/Source/Utility/Text/Base64.cpp +++ b/Source/Utility/Text/Base64.cpp @@ -3,6 +3,13 @@ #include namespace { + // STRING: st_01143 + const char standardAlphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + // STRING: st_01144 + const char urlAlphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + // GLOBAL: gl_24501 + const char* const alphabets[] = {standardAlphabet, urlAlphabet}; + // OFFSET: 0x0061AD10 // FUNCTION: fn_04416 unsigned Position(unsigned char value) { @@ -73,3 +80,38 @@ std::string DecodeBase64(std::string encoded, bool removeLinebreaks) { return decoded; } + +// OFFSET: 0x00619D70 +std::string EncodeBase64(const std::string& input, bool urlSafe) { + const std::string bytes(input); + return EncodeBase64(reinterpret_cast(bytes.c_str()), static_cast(bytes.size()), urlSafe); +} + +// OFFSET: 0x00619E10 +// FUNCTION: fn_04414 +std::string EncodeBase64(const unsigned char* input, unsigned int length, bool urlSafe) { + const char padding = urlSafe ? '.' : '='; + const char* alphabet = alphabets[urlSafe]; + std::string encoded; + encoded.reserve(4 * ((length + 2) / 3)); + + for (unsigned int index = 0; index < length; index += 3) { + encoded.push_back(alphabet[input[index] >> 2]); + if (index + 1 < length) { + encoded.push_back(alphabet[((input[index] & 3) << 4) + (input[index + 1] >> 4)]); + if (index + 2 < length) { + encoded.push_back(alphabet[((input[index + 1] & 15) << 2) + (input[index + 2] >> 6)]); + encoded.push_back(alphabet[input[index + 2] & 63]); + } else { + encoded.push_back(alphabet[(input[index + 1] & 15) << 2]); + encoded.push_back(padding); + } + } else { + encoded.push_back(alphabet[(input[index] & 3) << 4]); + encoded.push_back(padding); + encoded.push_back(padding); + } + } + + return encoded; +} diff --git a/Source/Utility/Text/Base64.h b/Source/Utility/Text/Base64.h index c20b724..de5a198 100644 --- a/Source/Utility/Text/Base64.h +++ b/Source/Utility/Text/Base64.h @@ -5,5 +5,7 @@ std::string InsertLinebreaks(std::string text, unsigned int distance); std::string DecodeBase64(std::string encoded, bool removeLinebreaks = false); +std::string EncodeBase64(const std::string& input, bool urlSafe = false); +std::string EncodeBase64(const unsigned char* input, unsigned int length, bool urlSafe = false); #endif From 6d6e55e3f2df0238c882ec12ba29062606656d7e Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:20 +0000 Subject: [PATCH 52/62] Decompile 2 functions in Source/UI/Window/UIWindowMgr.cpp, Source/UI/Window/UIWindowMgr.h, ... Batch #1030 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_17179 UIWindowMgr::InitializeWindowPolicy: logic confirmed by peer review - fn_17227 UIWindowMgr::LookupWindow: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/UI/Window/UIWindowMgr.cpp | 240 +++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) diff --git a/Source/UI/Window/UIWindowMgr.cpp b/Source/UI/Window/UIWindowMgr.cpp index 30c4a69..55932f4 100644 --- a/Source/UI/Window/UIWindowMgr.cpp +++ b/Source/UI/Window/UIWindowMgr.cpp @@ -4,8 +4,248 @@ #include "UI/Window/UIWindowMgr.h" // OFFSET: 0x00A94FD0 +// FUNCTION: fn_17179 +void UIWindowMgr::InitializeWindowPolicy() { + for (WindowPolicyEntry& entry : this->policy) { + entry = {}; + entry.actions[3] = 1; + } + + this->policy[15].actions[3] = 0; + this->policy[16].actions[3] = 0; + this->policy[17].actions[3] = 0; + this->policy[22].actions[3] = 0; + this->policy[23].actions[3] = 0; + this->policy[24].actions[3] = 0; + this->policy[25].actions[3] = 0; + this->policy[27].actions[3] = 0; + this->policy[28].actions[3] = 0; + this->policy[31].actions[3] = 0; + this->policy[32].actions[3] = 0; + this->policy[35].actions[3] = 0; + this->policy[39].actions[3] = 0; + this->policy[41].actions[3] = 0; + this->policy[43].actions[3] = 1; + this->policy[44].actions[3] = 0; + this->policy[45].actions[3] = 0; + this->policy[56].actions[3] = 0; + this->policy[70].actions[3] = 0; + this->policy[73].actions[3] = 0; + this->policy[74].actions[3] = 0; + this->policy[79].actions[3] = 0; + this->policy[80].actions[3] = 0; + this->policy[88].actions[3] = 0; + this->policy[90].actions[3] = 0; + this->policy[94].actions[3] = 0; + this->policy[99].actions[3] = 0; + this->policy[100].actions[3] = 0; + this->policy[105].actions[3] = 0; + this->policy[107].actions[3] = 0; + this->policy[109].actions[3] = 0; + this->policy[110].actions[3] = 0; + this->policy[111].actions[3] = 0; + this->policy[113].actions[3] = 0; + this->policy[119].actions[3] = 0; + this->policy[125].actions[3] = 0; + this->policy[160].actions[3] = 1; + this->policy[161].actions[3] = 1; + this->policy[174].actions[3] = 0; + this->policy[176].actions[3] = 0; + this->policy[178].actions[3] = 0; + this->policy[177].actions[3] = 0; + this->policy[179].actions[3] = 0; + this->policy[203].actions[3] = 0; + this->policy[157].actions[3] = 0; + this->policy[209].actions[3] = 0; + this->policy[210].actions[3] = 0; + this->policy[275].actions[3] = 0; + this->policy[315].actions[3] = 0; + this->policy[8].actions[5] = 1; + this->policy[22].actions[5] = 1; + this->policy[23].actions[5] = 1; + this->policy[24].actions[5] = 1; + this->policy[31].actions[5] = 1; + this->policy[10011].actions[5] = 1; + this->policy[33].actions[5] = 1; + this->policy[40].actions[5] = 1; + this->policy[41].actions[5] = 1; + this->policy[42].actions[5] = 1; + this->policy[43].actions[5] = 1; + this->policy[44].actions[5] = 1; + this->policy[160].actions[5] = 1; + this->policy[161].actions[5] = 1; + this->policy[174].actions[5] = 1; + this->policy[175].actions[5] = 1; + this->policy[178].actions[5] = 1; + this->policy[36].actions[5] = 1; + this->policy[159].actions[5] = 1; + this->policy[80].actions[5] = 1; + this->policy[1].actions[6] = 1; + this->policy[4].actions[6] = 1; + this->policy[15].actions[6] = 1; + this->policy[27].actions[6] = 1; + this->policy[28].actions[6] = 1; + this->policy[31].actions[6] = 1; + this->policy[10011].actions[6] = 1; + this->policy[41].actions[6] = 1; + this->policy[55].actions[6] = 1; + this->policy[56].actions[6] = 1; + this->policy[84].actions[6] = 1; + this->policy[88].actions[6] = 1; + this->policy[100].actions[6] = 1; + this->policy[101].actions[6] = 1; + this->policy[113].actions[6] = 1; + this->policy[116].actions[6] = 1; + this->policy[120].actions[6] = 1; + this->policy[121].actions[6] = 1; + this->policy[128].actions[6] = 1; + this->policy[125].actions[6] = 1; + this->policy[130].actions[6] = 1; + this->policy[145].actions[6] = 1; + this->policy[168].actions[6] = 1; + this->policy[169].actions[6] = 1; + this->policy[174].actions[6] = 1; + this->policy[181].actions[6] = 1; + this->policy[191].actions[6] = 1; + this->policy[203].actions[6] = 1; + this->policy[16].actions[7] = 1; + this->policy[17].actions[7] = 1; + this->policy[23].actions[7] = 1; + this->policy[24].actions[7] = 1; + this->policy[25].actions[7] = 1; + this->policy[28].actions[7] = 1; + this->policy[31].actions[7] = 1; + this->policy[10011].actions[7] = 1; + this->policy[32].actions[7] = 1; + this->policy[33].actions[7] = 1; + this->policy[35].actions[7] = 1; + this->policy[39].actions[7] = 1; + this->policy[41].actions[7] = 1; + this->policy[43].actions[7] = 1; + this->policy[44].actions[7] = 1; + this->policy[45].actions[7] = 1; + this->policy[70].actions[7] = 1; + this->policy[73].actions[7] = 1; + this->policy[74].actions[7] = 1; + this->policy[79].actions[7] = 1; + this->policy[80].actions[7] = 1; + this->policy[94].actions[7] = 1; + this->policy[105].actions[7] = 1; + this->policy[107].actions[7] = 1; + this->policy[109].actions[7] = 1; + this->policy[110].actions[7] = 1; + this->policy[111].actions[7] = 1; + this->policy[119].actions[7] = 1; + this->policy[161].actions[7] = 1; + this->policy[174].actions[7] = 1; + this->policy[176].actions[7] = 1; + this->policy[178].actions[7] = 1; + this->policy[177].actions[7] = 1; + this->policy[179].actions[7] = 1; + this->policy[203].actions[7] = 1; + this->policy[157].actions[7] = 1; + this->policy[209].actions[7] = 1; + this->policy[210].actions[7] = 1; + this->policy[321].actions[7] = 1; + this->policy[322].actions[7] = 1; + this->policy[307].actions[7] = 1; + this->policy[247].actions[7] = 1; + this->policy[316].actions[7] = 1; +} // OFFSET: 0x00AA5F70 +// FUNCTION: fn_17227 +UIWindow* UIWindowMgr::LookupWindow(int id) { + if (g_replayAnimationScaling != 0 && id == 600) { + return this->window_4F16C; + } + + switch (id) { + case 1: + return this->window_01C8; + case 3: + return this->window_01CC; + case 27: + return this->window_0274; + case 28: + return this->window_027C; + case 30: + return this->window_0278; + case 33: + return this->window_0288; + case 34: + return this->window_02C8; + case 37: + return this->window_02C4; + case 60: + return this->window_0320; + case 61: + return this->window_0324; + case 63: + return this->window_032C; + case 88: + return this->window_038C; + case 103: + return this->window_0388; + case 113: + return this->window_03C0; + case 114: + return this->window_03C4; + case 125: + return this->window_03C8; + case 126: + return this->window_03CC; + case 180: + return this->window_01D0; + case 196: + return this->window_4F18C; + case 203: + return this->window_4F174; + case 204: + return this->window_0428; + case 237: + return this->window_0444; + case 253: + return this->window_044C; + case 273: + return this->window_4F1CC; + case 274: + return this->window_4F1D0; + case 275: + return this->window_0448; + case 277: + return this->window_03D4; + case 284: + return this->window_4F1E8; + case 285: + return this->window_4F1EC; + case 286: + return this->window_4F1F0; + case 287: + return this->window_4F1F4; + case 288: + return this->window_4F1F8; + case 315: + return this->window_0468; + case 325: + return this->window_4F25C; + case 359: + return this->window_4F288; + case 10024: + return this->window_4F2AC; + case 301: + if (!this->snapExcluded.empty()) { + return this->snapExcluded.front(); + } + [[fallthrough]]; + case 318: + return this->window_4F254; + default: { + const auto found = this->windows.find(id); + return found != this->windows.end() ? found->second : nullptr; + } + } +} // OFFSET: 0x00AA1800 From befcc681c5a128bc72988dd1616b2812a8b248b2 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:22 +0000 Subject: [PATCH 53/62] Register recovered Replay source in existing UI build target --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd64c47..7aa0dbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,6 +235,7 @@ if(WIN32) Source/UI/Window/UIMessageBox.cpp Source/UI/Window/WindowDialogs.cpp Source/Client/ReplayPacketRecorder.cpp + Source/Client/Replay.cpp Source/UI/Cooldowns/CooldownState.cpp Source/UI/Cooldowns/CooldownDrawing.cpp Source/UI/Cooldowns/CooldownOwner.cpp From 770ead30fc28b90f67feaae478e82c9e982d65cb Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:33 +0000 Subject: [PATCH 54/62] Decompile 6 functions in Source/Contents/MovementRoute.cpp, Source/Contents/MovementRouteInterpolation.h Batch #1016 by ragnarok-clanker: 0 byte-identical, 6 confirmed by peer review. - fn_17861 MovementRouteInterpolation::MovementRouteInterpolation: logic confirmed by peer review - fn_17867 BuildMovementRoute: logic confirmed by peer review - fn_17869 MovementRouteInterpolation::Point: logic confirmed by peer review - fn_17870 MovementRouteInterpolation::EndTick: logic confirmed by peer review - fn_17871 MovementRouteInterpolation::EndMetadata: logic confirmed by peer review - fn_17874 MovementRouteInterpolation::NextPoint: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Contents/MovementRoute.cpp --- Source/Contents/MovementRoute.cpp | 101 +++++++++++++++++++ Source/Contents/MovementRouteInterpolation.h | 24 +++++ compile.json | 1 + 3 files changed, 126 insertions(+) create mode 100644 Source/Contents/MovementRoute.cpp diff --git a/Source/Contents/MovementRoute.cpp b/Source/Contents/MovementRoute.cpp new file mode 100644 index 0000000..a8c878b --- /dev/null +++ b/Source/Contents/MovementRoute.cpp @@ -0,0 +1,101 @@ +#include "Contents/MovementRouteInterpolation.h" +#include "Utility/Math/AffineMatrix.h" + +// OFFSET: 0x00AD7F70 +// FUNCTION: fn_17861 +MovementRouteInterpolation::MovementRouteInterpolation() : segment(0), startX(0), startY(0) { +} + +// OFFSET: 0x00AD87A0 +// FUNCTION: fn_17867 +void BuildMovementRoute(std::uint32_t tick, const MovementPathNode* last, int stepDuration, MovementRouteInterpolation& route) { + std::uint32_t count = 0; + for (const MovementPathNode* node = last; node; node = node->parent) { + ++count; + } + + route.points.resize(count); + if (static_cast(count) > 1) { + const MovementPathNode* node = last; + for (std::uint32_t index = count; index != 0;) { + --index; + route.points[index].x = node->x; + route.points[index].y = node->y; + route.points[index].metadata = node->metadata; + node = node->parent; + } + + const int diagonalDuration = static_cast(static_cast(stepDuration) * 1.414f); + route.points[0].tick = tick; + const float deltaY = static_cast(route.points[1].y) - route.startY; + const float deltaX = static_cast(route.points[1].x) - route.startX; + const float initialDuration = SquareRoot(deltaY * deltaY + deltaX * deltaX) * static_cast(stepDuration); + route.points[1].tick = tick + static_cast(initialDuration); + for (std::uint32_t index = 2; index < count; ++index) { + const int duration = route.points[index].metadata & 1 ? diagonalDuration : stepDuration; + route.points[index].tick = route.points[index - 1].tick + duration; + } + } +} + +// OFFSET: 0x00AD8D20 +// FUNCTION: fn_17869 +bool MovementRouteInterpolation::Point(int index, std::int32_t* x, std::int32_t* y) const { + if (this->points.empty() || index < 0 || static_cast(index) >= this->points.size()) { + return false; + } + + *x = this->points[index].x; + *y = this->points[index].y; + return true; +} + +// OFFSET: 0x00AD8D70 +// FUNCTION: fn_17870 +std::uint32_t* MovementRouteInterpolation::EndTick(std::uint32_t* tick) const { + *tick = this->points.back().tick; + return tick; +} + +// OFFSET: 0x00AD8D90 +// FUNCTION: fn_17871 +int MovementRouteInterpolation::EndMetadata() const { + if (this->points.empty()) { + return -1; + } + + return this->points.back().metadata; +} + +// OFFSET: 0x00AD8F20 +// FUNCTION: fn_17874 +int MovementRouteInterpolation::NextPoint(std::uint32_t tick, std::uint32_t* nextTick, float* x, float* y) const { + if (this->points.empty() || this->points.front().tick == 0) { + return -1; + } + + if (this->points.front().tick > tick) { + *nextTick = this->points[1].tick; + *x = static_cast(this->points[1].x); + *y = static_cast(this->points[1].y); + return 0; + } + + int index = 0; + const int last = static_cast(this->points.size()) - 1; + while (index < last) { + if (this->points[index].tick <= tick && tick < this->points[index + 1].tick) { + *nextTick = this->points[index + 1].tick; + *x = static_cast(this->points[index + 1].x); + *y = static_cast(this->points[index + 1].y); + return index; + } + + ++index; + } + + *nextTick = this->points[index].tick; + *x = static_cast(this->points[index].x); + *y = static_cast(this->points[index].y); + return -1; +} diff --git a/Source/Contents/MovementRouteInterpolation.h b/Source/Contents/MovementRouteInterpolation.h index 1b31063..4242eb3 100644 --- a/Source/Contents/MovementRouteInterpolation.h +++ b/Source/Contents/MovementRouteInterpolation.h @@ -1,9 +1,20 @@ #ifndef RAGNAROK_SOURCE_CONTENTS_MOVEMENTROUTEINTERPOLATION_H #define RAGNAROK_SOURCE_CONTENTS_MOVEMENTROUTEINTERPOLATION_H +#include #include #include +struct MovementPathNode { + /* 0000 */ std::int32_t x; + /* 0004 */ std::int32_t y; + /* 0008 */ MovementPathNode* parent; + /* 000C */ int cost; + /* 0010 */ int estimatedCost; + /* 0014 */ int state; + /* 0018 */ int metadata; +}; + struct MovementRoutePoint { /* 0000 */ std::int32_t x; /* 0004 */ std::int32_t y; @@ -12,18 +23,31 @@ struct MovementRoutePoint { }; struct MovementRouteInterpolation { + MovementRouteInterpolation(); + /* 0000 */ std::vector points; /* 000C */ std::uint32_t segment; /* 0010 */ float startX; /* 0014 */ float startY; + bool Point(int index, std::int32_t* x, std::int32_t* y) const; + std::uint32_t* EndTick(std::uint32_t* tick) const; + int EndMetadata() const; + int NextPoint(std::uint32_t tick, std::uint32_t* nextTick, float* x, float* y) const; int Sample(std::uint32_t tick, float* x, float* y, int* metadata); std::uint32_t Segment() const; }; +void BuildMovementRoute(std::uint32_t tick, const MovementPathNode* last, int stepDuration, MovementRouteInterpolation& route); + static_assert(sizeof(MovementRoutePoint) == 16); #if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(MovementPathNode) == 28); +static_assert(offsetof(MovementPathNode, metadata) == 0x18); static_assert(sizeof(MovementRouteInterpolation) == 24); +static_assert(offsetof(MovementRouteInterpolation, segment) == 0xC); +static_assert(offsetof(MovementRouteInterpolation, startX) == 0x10); +static_assert(offsetof(MovementRouteInterpolation, startY) == 0x14); #endif #endif diff --git a/compile.json b/compile.json index 777aa63..22625a4 100644 --- a/compile.json +++ b/compile.json @@ -352,6 +352,7 @@ "Source/Contents/Models/ModelRendering.cpp": 3, "Source/Contents/Models/ModelSpatial.cpp": 3, "Source/Contents/Models/ModelTextureAnimation.cpp": 3, + "Source/Contents/MovementRoute.cpp": 4, "Source/Contents/MovementRouteInterpolation.cpp": 4, "Source/Contents/Movies/BinkMovie.cpp": 3, "Source/Contents/Movies/BinkMovies.cpp": 3, From 7d9b244fb169bb8f53e0b1222e426f61baf0733b Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:43 +0000 Subject: [PATCH 55/62] Decompile 3 functions in Source/Contents/Sound/SoundMaker.cpp, Source/Contents/Sound/SoundMaker.h Batch #1017 by ragnarok-clanker: 0 byte-identical, 3 confirmed by peer review. - fn_22363 CSoundMaker::CSoundMaker: logic confirmed by peer review - fn_22406 CSoundMaker::Update: logic confirmed by peer review - fn_22428 CSoundMaker::SendObjectMessage: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Contents/Sound/SoundMaker.cpp | 88 ++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/Source/Contents/Sound/SoundMaker.cpp b/Source/Contents/Sound/SoundMaker.cpp index aedc647..23653fc 100644 --- a/Source/Contents/Sound/SoundMaker.cpp +++ b/Source/Contents/Sound/SoundMaker.cpp @@ -10,8 +10,74 @@ #include // OFFSET: 0x00DA1E30 +// FUNCTION: fn_22363 +CSoundMaker::CSoundMaker(ResourceMgr& resources, JobNames& names, SoundMakerContext& context) + : CRenderObject(resources, names), m_context(&context) { + this->file.clear(); + this->volume = 100.0f; + this->range = 1.0f; + this->width = 3; + this->height = 3; + this->radius = SquareRoot(18.0f); + this->lastTick = timeGetTime() - 4000u; +} // OFFSET: 0x00DA3A60 +// FUNCTION: fn_22406 +bool CSoundMaker::Update() { + if (this->width == 0) { + return true; + } + + const CRenderObject* player = this->m_context->localPlayer; + if (!player) { + return true; + } + + const float distance = this->HorizontalDistance(player->render.position[0], player->render.position[2]); + if (distance - (this->radius + this->range) > 130.0f) { + return true; + } + + const float deltaX = player->render.position[0] - this->render.position[0]; + const float deltaZ = player->render.position[2] - this->render.position[2]; + float signX = 1.0f; + float signZ = 1.0f; + if (deltaX < 0.0f && deltaZ >= 0.0f) { + signX = -1.0f; + } else if (deltaX < 0.0f && deltaZ < 0.0f) { + signX = -1.0f; + signZ = -1.0f; + } else if (deltaX >= 0.0f && deltaZ < 0.0f) { + signZ = -1.0f; + } + + const float slope = deltaZ / std::fmax(deltaX, 0.001f); + float offsetX; + float offsetZ; + if (!(static_cast(this->height / this->width) >= std::fabs(slope))) { + offsetZ = static_cast(this->height) * signZ * 0.5f; + offsetX = offsetZ / std::fmax(slope, 0.001f); + } else { + offsetX = static_cast(this->width) * signX * 0.5f; + offsetZ = slope * offsetX; + } + + const float x = this->render.position[0] + offsetX; + const float z = this->render.position[2] + offsetZ; + if (player->HorizontalDistance(x, z) - this->range > 75.0f || this->file.empty()) { + return true; + } + + if (timeGetTime() > this->lastTick + this->cycle) { + this->lastTick = timeGetTime(); + g_soundMgr->PlayWave( + this->file.c_str(), x - player->render.position[0], 0.0f, z - player->render.position[2], TruncateToInt(this->range), + TruncateToInt(this->range / 6.0f), this->volume, 0 + ); + } + return true; +} // OFFSET: 0x00DA4960 // FUNCTION: fn_22417 @@ -19,3 +85,25 @@ void CSoundMaker::Draw(int) { } // OFFSET: 0x00DA56E0 +// FUNCTION: fn_22428 +void CSoundMaker::SendObjectMessage( + CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int, int, int, int +) { + if (message != 14 || a != 0) { + CRenderObject::SendObjectMessage(sender, message, a, b, c, d, e, f, g, h, i, 0, 0, 0, 0); + return; + } + + const WorldSoundRecord& sound = *reinterpret_cast(b); + this->file = sound.file; + this->volume = sound.volume; + this->width = sound.width; + this->height = sound.height; + this->range = sound.range; + this->render.position[0] = sound.position[0]; + this->render.position[1] = sound.position[1]; + this->render.position[2] = sound.position[2]; + this->radius = SquareRoot(static_cast(this->width * this->width + this->height * this->height)); + this->cycle = static_cast(sound.cycle * 1000.0f); + this->lastTick = timeGetTime() - this->cycle; +} From e21c7e6235edea62c29a80bdc7f2b2db509b2197 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:43 +0000 Subject: [PATCH 56/62] Decompile 2 functions in Source/Contents/Actors/MercenaryAI.cpp, Source/Contents/Actors/MercenaryAI.h Batch #1021 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_22327 CMercenaryAI::CMercenaryAI: logic confirmed by peer review - fn_22328 CMercenaryAI::~CMercenaryAI: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Contents/Actors/MercenaryAI.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/Contents/Actors/MercenaryAI.cpp b/Source/Contents/Actors/MercenaryAI.cpp index 415c25b..01173a2 100644 --- a/Source/Contents/Actors/MercenaryAI.cpp +++ b/Source/Contents/Actors/MercenaryAI.cpp @@ -5,8 +5,18 @@ extern "C" { } // OFFSET: 0x00D9E3F0 +// FUNCTION: fn_22327 +CMercenaryAI::CMercenaryAI(int kind) : state(nullptr), actionStarted(0), actionDuration(0), kind(kind), lastTick(0) { +} // OFFSET: 0x00D9E430 +// FUNCTION: fn_22328 +CMercenaryAI::~CMercenaryAI() { + if (this->state) { + lua_close(this->state); + this->state = nullptr; + } +} // OFFSET: 0x00D9E570 // FUNCTION: fn_22331 From 51e57d4b27c9b3f20309ade1b7f81a59d455abce Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:52 +0000 Subject: [PATCH 57/62] Decompile 2 functions in Source/UI/Window/UIWindowMgr.cpp, Source/UI/Window/UIWindowMgr.h, ... Batch #1031 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_17086 UIWindowMgr::UIWindowMgr: logic confirmed by peer review - fn_17209 UIWindowMgr::ResetWindows: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/UI/Window/UIWindowMgr.cpp | 275 +++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) diff --git a/Source/UI/Window/UIWindowMgr.cpp b/Source/UI/Window/UIWindowMgr.cpp index 55932f4..8c3cae6 100644 --- a/Source/UI/Window/UIWindowMgr.cpp +++ b/Source/UI/Window/UIWindowMgr.cpp @@ -249,6 +249,281 @@ UIWindow* UIWindowMgr::LookupWindow(int id) { // OFFSET: 0x00AA1800 +// FUNCTION: fn_17209 +void UIWindowMgr::ResetWindows() { + this->windows.clear(); + this->window_01B8 = nullptr; + this->inputWindow = nullptr; + this->hoverWindow = nullptr; + this->window_01C8 = nullptr; + this->unknown_01BC = 0; + this->unknown_01DC = 0; + this->unknown_01D4 = 0; + this->unknown_01E0 = 0; + this->unknown_01E4 = 0; + this->unknown_01C4 = 0; + this->unknown_01C0 = 0; + this->window_01EC = nullptr; + this->unknown_01F0 = 0; + this->unknown_01F4 = 0; + this->unknown_01F8 = 0; + this->unknown_01FC = 0; + this->unknown_0208 = 0; + this->unknown_020C = 0; + this->unknown_0210 = 0; + this->unknown_0214 = 0; + this->unknown_0218 = 0; + this->unknown_021C = 0; + this->unknown_0220 = 0; + this->unknown_0228 = 0; + this->unknown_022C = 0; + this->window_0230 = nullptr; + this->unknown_0234 = 0; + this->unknown_0238 = 0; + this->unknown_023C = 0; + this->unknown_0240 = 0; + this->unknown_0244 = 0; + this->unknown_0248 = 0; + this->unknown_024C = 0; + this->unknown_0250 = 0; + this->unknown_0254 = 0; + this->unknown_0258 = 0; + this->unknown_025C = 0; + this->unknown_0260 = 0; + this->unknown_0264 = 0; + this->unknown_0268 = 0; + this->unknown_026C = 0; + this->window_0274 = nullptr; + this->window_0278 = nullptr; + this->window_027C = nullptr; + this->unknown_0280 = 0; + this->unknown_0284 = 0; + this->window_0288 = nullptr; + this->unknown_028C = 0; + this->unknown_0290 = 0; + this->unknown_0294 = 0; + this->unknown_0298 = 0; + this->unknown_029C = 0; + this->unknown_02A0 = 0; + this->unknown_02A4 = 0; + this->unknown_02A8 = 0; + this->unknown_02AC = 0; + this->window_02C4 = nullptr; + this->window_02C8 = nullptr; + this->unknown_02CC = 0; + this->unknown_02D0 = 0; + this->unknown_02D4 = 0; + this->unknown_02D8 = 0; + this->unknown_02DC = 0; + this->unknown_02E0 = 0; + this->unknown_02E4 = 0; + this->unknown_02E8 = 0; + this->unknown_02EC = 0; + this->window_01E8 = nullptr; + this->unknown_02F0 = 0; + this->unknown_02F4 = 0; + this->unknown_02F8 = 0; + this->unknown_02FC = 0; + this->unknown_0300 = 0; + this->unknown_0308 = 0; + this->unknown_0304 = 0; + this->unknown_03A4 = 0; + this->unknown_03A8 = 0; + this->unknown_03AC = 0; + this->unknown_030C = 0; + this->unknown_0310 = 0; + this->unknown_0314 = 0; + this->unknown_0318 = 0; + this->unknown_031C = 0; + this->window_0320 = nullptr; + this->window_0324 = nullptr; + this->unknown_0328 = 0; + this->window_032C = nullptr; + this->unknown_0330 = 0; + this->unknown_0334 = 0; + this->unknown_0338 = 0; + this->unknown_033C = 0; + this->unknown_0340 = 0; + this->unknown_0344 = 0; + this->unknown_0348 = 0; + this->unknown_034C = 0; + this->unknown_0350 = 0; + this->unknown_0354 = 0; + this->unknown_0358 = 0; + this->unknown_035C = 0; + this->unknown_0360 = 0; + this->unknown_0364 = 0; + this->unknown_0368 = 0; + this->unknown_036C = 0; + this->unknown_0370 = 0; + this->window_038C = nullptr; + this->unknown_0390 = 0; + this->unknown_0394 = 0; + this->unknown_0200 = 0; + this->unknown_0398 = 0; + this->unknown_039C = 0; + this->unknown_0380 = 0; + this->unknown_0384 = 0; + this->unknown_03B0 = 0; + this->unknown_03B4 = 0; + this->window_03C0 = nullptr; + this->window_03C4 = nullptr; + this->window_03C8 = nullptr; + this->window_03CC = nullptr; + this->unknown_03D0 = 0; + this->unknown_03B8 = 0; + this->unknown_03BC = 0; + this->window_03D4 = nullptr; + this->window_03D8 = nullptr; + this->unknown_03E0 = 0; + this->unknown_03E4 = 0; + this->unknown_03E8 = 0; + this->unknown_03F0 = 0; + this->unknown_03EC = 0; + this->unknown_03F8 = 0; + this->unknown_03FC = 0; + this->modal = 0; + this->unknown_0404 = 0; + this->unknown_0408 = 0; + this->unknown_040C = 0; + this->unknown_0410 = 0; + this->unknown_0414 = 0; + this->unknown_0418 = 0; + this->unknown_041C = 0; + this->unknown_0424 = 0; + this->retainedWindows.clear(); + this->unknown_02B0 = 0; + this->unknown_02B4 = 0; + this->unknown_02B8 = 0; + this->unknown_02BC = 0; + this->unknown_02C0 = 0; + this->window_4F18C = nullptr; + this->window_4F164 = nullptr; + this->unknown_01D8 = 0; + this->window_0428 = nullptr; + this->window_4F174 = nullptr; + this->unknown_0440 = 0; + this->window_0444 = nullptr; + this->window_0448 = nullptr; + this->messageBoxes.clear(); + this->window_044C = nullptr; + this->unknown_0204 = 0; + this->unknown_0378 = 0; + this->unknown_0374 = 0; + this->window_4F170 = nullptr; + this->unknown_0450 = 0; + this->unknown_0454 = 0; + this->unknown_0458 = 0; + this->unknown_045C = 0; + this->unknown_0430 = 0; + this->unknown_0434 = 0; + this->unknown_0438 = 0; + this->unknown_0460 = 0; + this->unknown_0464 = 0; + this->hiddenWindows.clear(); + const bool hadWindow0270 = this->window_0270 != nullptr; + this->unknown_0508 = 0; + this->window_4F1CC = nullptr; + this->window_4F1D0 = nullptr; + this->window_4F1D4 = nullptr; + this->window_4F1E8 = nullptr; + this->window_4F1F0 = nullptr; + this->window_4F1F4 = nullptr; + this->window_4F1FC = nullptr; + this->window_4F250 = nullptr; + this->window_4F254 = nullptr; + this->window_4F258 = nullptr; + this->window_01CC = nullptr; + this->window_0468 = nullptr; + this->window_4F25C = nullptr; + this->unknown_042C = 0; + this->window_4F260 = nullptr; + this->window_4F264 = nullptr; + this->window_4F268 = nullptr; + this->window_4F26C = nullptr; + this->window_4F270 = nullptr; + this->window_4F274 = nullptr; + this->window_4F278 = nullptr; + this->window_4F27C = nullptr; + this->unknown_0420 = 0; + this->unknown_043C = 0; + this->window_01D0 = nullptr; + this->unknown_0224 = 0; + if (hadWindow0270) { + if (CMode* mode = g_world.ActiveGameMode()) { + mode->SendMsg(292, 0, 0, 0, 0); + } + } + const bool hadWindow276 = this->window_4F1E4 != nullptr; + this->window_0270 = nullptr; + this->unknown_037C = 0; + this->window_0388 = nullptr; + this->unknown_03A0 = 0; + if (hadWindow276) { + this->visible_276 = 0; + this->window_4F1E4 = nullptr; + } + this->window_4F1F8 = nullptr; + this->window_0A30 = nullptr; + this->window_4F2AC = nullptr; +} // OFFSET: 0x00A88490 +// FUNCTION: fn_17086 +UIWindowMgr::UIWindowMgr() + : activeWindowId(0), retainedPersistentWindow(false), window_03DC(nullptr), unknown_046C(-1), unknown_0470(-1), unknown_0526(true), + window_0A30(nullptr), unknown_4F210(false), unknown_4F211(false), window_4F2AC(nullptr) { + this->ResetWindows(); + this->unknown_0478 = nullptr; + this->unknown_047C = 0; + this->unknown_0480 = 0; + this->unknown_04DC.assign("", 0); + this->unknown_004C = 1; + this->unknown_0038 = 98; + this->unknown_0030 = 0; + this->unknown_0034 = 0; + this->unknown_003C = 1; + this->unknown_0050 = 1.0f; + this->unknown_0054 = 1; + this->unknown_005C = 0xAAFFFFFFu; + this->unknown_0060 = 1; + this->unknown_04F8 = 0; + this->unknown_04F4 = 0; + this->unknown_04FC = 0; + this->unknown_03F4 = 1; + this->unknown_03F6 = 0; + this->unknown_0068 = g_language == 2; + this->unknown_0048 = 0; + this->unknown_049C = 0; + this->unknown_049E = g_serviceType != 0 ? 0 : -25; + this->unknown_04A0 = 0; + this->unknown_04A4 = 0; + this->unknown_04A8 = 0; + this->unknown_04AC = 0; + this->unknown_04B0 = 0; + this->unknown_04B4 = 203; + this->unknown_04B8 = 115; + this->unknown_04BC = 0; + this->unknown_04C0 = 0; + this->windowHistory.clear(); + this->lastWindowId = -1; + this->unknown_0024 = 0; + this->unknown_0026 = 1; + this->unknown_0508 = 0; + this->window_4F168 = nullptr; + this->window_4F164 = nullptr; + this->window_4F16C = nullptr; + this->InitializeWindowPolicy(); + this->window_4F174 = nullptr; + this->unknown_09CC = 0; + this->browser_09D0 = nullptr; + this->currentHitUid = 0; + this->previousHitUid = 0; + this->visible_276 = 0; + this->window_4F1EC = nullptr; + this->window_4F250 = nullptr; + this->unknown_0058 = 0; + this->unknown_4F238 = 151; + this->unknown_4F23C = 37; +} From 2035aa96dee8146e655deb4bfcf9d62d58a4e58c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:54 +0000 Subject: [PATCH 58/62] Decompile 2 functions in Source/Render/AlphaRectangle.cpp, Source/Client/ModeFade.cpp, ... Batch #1027 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_01952 DrawAlphaRectangle: logic confirmed by peer review - fn_17842 ModeFade::Draw: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Render/AlphaRectangle.cpp, Source/Client/ModeFade.cpp --- Source/Client/ModeFade.cpp | 26 ++++++++++++++++++++++ Source/Client/ModeFade.h | 26 ++++++++++++++++++++++ Source/Render/AlphaRectangle.cpp | 38 ++++++++++++++++++++++++++++++++ compile.json | 2 ++ 4 files changed, 92 insertions(+) create mode 100644 Source/Client/ModeFade.cpp create mode 100644 Source/Client/ModeFade.h create mode 100644 Source/Render/AlphaRectangle.cpp diff --git a/Source/Client/ModeFade.cpp b/Source/Client/ModeFade.cpp new file mode 100644 index 0000000..31005f0 --- /dev/null +++ b/Source/Client/ModeFade.cpp @@ -0,0 +1,26 @@ +#include "Client/ModeFade.h" +#include "Contents/Sound/SoundMgr.h" +#include "Render/Primitives/AlphaRectangle.h" + +#include + +// GLOBAL: gl_24680 +std::uint32_t g_modeFadeTick = 0; + +// OFFSET: 0x00AD6740 +// FUNCTION: fn_17842 +void ModeFade::Draw() { + if (this->requested != 0) { + g_modeFadeTick = timeGetTime(); + g_soundMgr->FadeIn(); + this->requested = 0; + } + + const std::uint32_t elapsed = timeGetTime() - g_modeFadeTick; + if (elapsed < 255) { + DrawAlphaRectangle( + this->primitives, this->textures, this->queues, 0, 0, this->screenWidth, this->screenHeight, (255 - elapsed) << 24, this->depthAlpha, this->depthStart, + this->depthEnd + ); + } +} diff --git a/Source/Client/ModeFade.h b/Source/Client/ModeFade.h new file mode 100644 index 0000000..5209077 --- /dev/null +++ b/Source/Client/ModeFade.h @@ -0,0 +1,26 @@ +#ifndef RAGNAROK_SOURCE_CLIENT_MODEFADE_H +#define RAGNAROK_SOURCE_CLIENT_MODEFADE_H + +#include + +class RenderPrimitivePool; +class TextureCache; +struct RenderQueues; + +extern std::uint32_t g_modeFadeTick; + +struct ModeFade { + int& requested; + RenderPrimitivePool& primitives; + TextureCache& textures; + RenderQueues& queues; + const int& screenWidth; + const int& screenHeight; + const bool& depthAlpha; + const float& depthStart; + const float& depthEnd; + + void Draw(); +}; + +#endif diff --git a/Source/Render/AlphaRectangle.cpp b/Source/Render/AlphaRectangle.cpp new file mode 100644 index 0000000..fb4563f --- /dev/null +++ b/Source/Render/AlphaRectangle.cpp @@ -0,0 +1,38 @@ +#include "Render/Primitives/AlphaRectangle.h" +#include "Render/Primitives/RenderPrimitivePool.h" +#include "Render/Primitives/RenderQueues.h" +#include "Render/Textures/TextureCache.h" + +// OFFSET: 0x0054E460 +// FUNCTION: fn_01952 +void DrawAlphaRectangle( + RenderPrimitivePool& primitives, TextureCache& textures, RenderQueues& queues, int x, int y, int width, int height, std::uint32_t color, bool depthAlpha, + float depthStart, float depthEnd +) { + if ((color & 0xFF000000u) == 0) { + return; + } + + RenderPrimitive* primitive = primitives.Acquire(); + primitive->texture = textures.Default(); + const float left = static_cast(x); + const float top = static_cast(y); + const float right = static_cast(x + width); + const float bottom = static_cast(y + height); + primitive->quad[0].x = left; + primitive->quad[0].y = top; + primitive->quad[1].x = right; + primitive->quad[1].y = top; + primitive->quad[2].x = left; + primitive->quad[2].y = bottom; + primitive->quad[3].x = right; + primitive->quad[3].y = bottom; + for (RenderVertex& vertex : primitive->quad) { + vertex.z = 0.000001f; + vertex.rhw = 0.999999f; + vertex.diffuse = color; + vertex.u = 0.0f; + vertex.v = 0.0f; + } + queues.Submit(primitive, 513, depthAlpha, depthStart, depthEnd); +} diff --git a/compile.json b/compile.json index 22625a4..d5d850f 100644 --- a/compile.json +++ b/compile.json @@ -257,6 +257,7 @@ "Source/Client/Mode/ModeCursor.cpp": 0, "Source/Client/Mode/ModeDragState.cpp": 2, "Source/Client/Mode/ModeTooltip.cpp": 2, + "Source/Client/ModeFade.cpp": 0, "Source/Client/Registry.cpp": 0, "Source/Client/Replay.cpp": 0, "Source/Client/ReplayPacketRecorder.cpp": 2, @@ -428,6 +429,7 @@ "Source/Network/Packets/PartyJoinRequest.cpp": 2, "Source/Network/Packets/SkillUpdatePacket.cpp": 4, "Source/Network/TextEncoding.cpp": 0, + "Source/Render/AlphaRectangle.cpp": 0, "Source/Render/BlendColor.cpp": 0, "Source/Render/DX7/BackBufferDX7.cpp": 0, "Source/Render/DX7/DeviceCapabilitiesDX7.cpp": 0, From d22c6b96a67ed28af9744dd0dd352e4a4d89b032 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:04:56 +0000 Subject: [PATCH 59/62] Decompile 5 functions in Source/Resource/Bitmap/BitmapImage.cpp, Source/Resource/Bitmap/BitmapImage.h, ... Batch #1026 by ragnarok-clanker: 0 byte-identical, 5 confirmed by peer review. - fn_07866 BitmapImage::CreateAuxiliary: logic confirmed by peer review - fn_07867 BitmapImage::Pixel: logic confirmed by peer review - fn_07874 BitmapImage::ClearAuxiliary: logic confirmed by peer review - fn_09684 SkinPaletteColor: logic confirmed by peer review - fn_09685 SkinPaletteChannels: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Resource/SkinPalette.cpp --- Source/Resource/Bitmap/BitmapImage.cpp | 56 ++++++++++++++++++++++++++ Source/Resource/Bitmap/BitmapImage.h | 3 ++ Source/Resource/SkinPalette.cpp | 29 +++++++++++++ Source/Resource/SkinPalette.h | 17 ++++++++ compile.json | 1 + 5 files changed, 106 insertions(+) create mode 100644 Source/Resource/SkinPalette.cpp create mode 100644 Source/Resource/SkinPalette.h diff --git a/Source/Resource/Bitmap/BitmapImage.cpp b/Source/Resource/Bitmap/BitmapImage.cpp index 841bcdf..8218c64 100644 --- a/Source/Resource/Bitmap/BitmapImage.cpp +++ b/Source/Resource/Bitmap/BitmapImage.cpp @@ -57,6 +57,62 @@ void BitmapImage::Clear() { this->auxiliary = nullptr; } +// OFFSET: 0x0074A680 +// FUNCTION: fn_07866 +bool BitmapImage::CreateAuxiliary(int mode) { + if (!this->pixels || this->auxiliary) { + return false; + } + + this->auxiliary = std::malloc(PixelBytes(this->width, this->height)); + std::memset(this->auxiliary, 255, 4u * this->width * this->height); + auto* output = static_cast(this->auxiliary); + for (int y = 0; y < this->height; ++y) { + for (int x = 0; x < this->width; ++x) { + const int index = x + y * this->width; + const std::uint32_t value = this->pixels[index]; + unsigned red = (value >> 16) & 255; + unsigned green = (value >> 8) & 255; + unsigned blue = value & 255; + if (red != 255 || blue != 255 || green != 0) { + unsigned intensity = (red + green + blue) / 3; + const unsigned minimum = mode == 1 ? 120 : 100; + if (intensity < minimum) { + intensity = minimum; + } + red = green = blue = intensity; + if (mode == 2) { + red = 200; + } else if (mode == 3) { + green = 200; + } else if (mode == 4) { + blue = 200; + } + } + output[index] = (value & 0xFF000000u) | (red << 16) | (green << 8) | blue; + } + } + return true; +} + +// OFFSET: 0x0074A7F0 +// FUNCTION: fn_07867 +std::uint32_t BitmapImage::Pixel(int x, int y) const { + if (x < 0 || x >= this->width || y < 0 || y >= this->height) { + return 0x00FF0000; + } + return this->pixels[x + y * this->width]; +} + +// OFFSET: 0x0074C540 +// FUNCTION: fn_07874 +void BitmapImage::ClearAuxiliary() { + if (this->auxiliary) { + std::free(this->auxiliary); + this->auxiliary = nullptr; + } +} + // OFFSET: 0x0074AB00 // FUNCTION: fn_07869 bool BitmapImage::DecodeBitmap(const void* input, int, bool iconOnly) { diff --git a/Source/Resource/Bitmap/BitmapImage.h b/Source/Resource/Bitmap/BitmapImage.h index cdc0dd0..358d1f4 100644 --- a/Source/Resource/Bitmap/BitmapImage.h +++ b/Source/Resource/Bitmap/BitmapImage.h @@ -14,6 +14,9 @@ struct BitmapImage { BitmapImage(); void Clear(); + bool CreateAuxiliary(int mode); + std::uint32_t Pixel(int x, int y) const; + void ClearAuxiliary(); bool DecodeBitmap(const void* data, int bytes, bool iconOnly); bool DecodeTga(const void* data, int bytes); bool DecodePng(const void* data, int bytes, const char* name); diff --git a/Source/Resource/SkinPalette.cpp b/Source/Resource/SkinPalette.cpp new file mode 100644 index 0000000..69eadfd --- /dev/null +++ b/Source/Resource/SkinPalette.cpp @@ -0,0 +1,29 @@ +#include "Resource/SkinPalette.h" +#include "Resource/Bitmap/BitmapResource.h" +#include "Resource/ResourceMgr.h" +#include "Resource/TextureNames.h" + +// OFFSET: 0x007E0F40 +// FUNCTION: fn_09684 +std::uint32_t SkinPaletteColor(ResourceMgr& resources, TextureNames& names, const SkinPaletteCell& cell, bool resolveSkin) { + const char* filename = "유저인터페이스\\colorchip.bmp"; + if (resolveSkin) { + filename = names.Resolve(filename); + } + auto* bitmap = static_cast(resources.Load(filename)); + if (!bitmap) { + return 0; + } + const std::uint32_t color = bitmap->image.Pixel(4 * cell.column + 2, 4 * cell.row + 2); + return ((color & 255) << 16) | (color & 0xFF00) | ((color >> 16) & 255); +} + +// OFFSET: 0x007E0FC0 +// FUNCTION: fn_09685 +void SkinPaletteChannels(ResourceMgr& resources, TextureNames& names, int x, int y, unsigned& red, unsigned& green, unsigned& blue) { + auto* bitmap = static_cast(resources.Load(names.Resolve("유저인터페이스\\colorchip.bmp"))); + const std::uint32_t color = bitmap->image.Pixel(x, y); + red = (color >> 16) & 255; + green = (color >> 8) & 255; + blue = color & 255; +} diff --git a/Source/Resource/SkinPalette.h b/Source/Resource/SkinPalette.h new file mode 100644 index 0000000..6fecc1a --- /dev/null +++ b/Source/Resource/SkinPalette.h @@ -0,0 +1,17 @@ +#ifndef RAGNAROK_SOURCE_RESOURCE_SKINPALETTE_H +#define RAGNAROK_SOURCE_RESOURCE_SKINPALETTE_H + +#include + +class ResourceMgr; +struct TextureNames; + +struct SkinPaletteCell { + /* 0000 */ int column; + /* 0004 */ int row; +}; + +std::uint32_t SkinPaletteColor(ResourceMgr& resources, TextureNames& names, const SkinPaletteCell& cell, bool resolveSkin); +void SkinPaletteChannels(ResourceMgr& resources, TextureNames& names, int x, int y, unsigned& red, unsigned& green, unsigned& blue); + +#endif diff --git a/compile.json b/compile.json index d5d850f..cc17e43 100644 --- a/compile.json +++ b/compile.json @@ -513,6 +513,7 @@ "Source/Resource/ResourceFailures.cpp": 3, "Source/Resource/ResourceMgr.cpp": 3, "Source/Resource/ResourceTransient.cpp": 3, + "Source/Resource/SkinPalette.cpp": 3, "Source/Resource/Sprites/ActionResource.cpp": 3, "Source/Resource/Sprites/SpriteEncoding.cpp": 3, "Source/Resource/Sprites/SpriteResource.cpp": 3, From c60cbe211bbca46e7d4dd7cc4b6027933e662a54 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 10:19:58 +0000 Subject: [PATCH 60/62] Decompile 2 functions in Source/Client/ModeFadeOut.cpp, Source/Client/ModeFadeOut.h, ... Batch #1037 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_17847 FadeOutMode: logic confirmed by peer review - fn_17148 DrawBitmapResource: logic confirmed by peer review Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). Adds to the build: Source/Client/ModeFadeOut.cpp, Source/Render/BitmapDrawing.cpp --- Source/Client/ModeFadeOut.cpp | 35 +++++++++++++++++++++++++++++++++ Source/Client/ModeFadeOut.h | 15 ++++++++++++++ Source/Render/BitmapDrawing.cpp | 16 +++++++++++++++ Source/Render/BitmapDrawing.h | 9 +++++++++ compile.json | 2 ++ 5 files changed, 77 insertions(+) create mode 100644 Source/Client/ModeFadeOut.cpp create mode 100644 Source/Client/ModeFadeOut.h create mode 100644 Source/Render/BitmapDrawing.cpp create mode 100644 Source/Render/BitmapDrawing.h diff --git a/Source/Client/ModeFadeOut.cpp b/Source/Client/ModeFadeOut.cpp new file mode 100644 index 0000000..5156922 --- /dev/null +++ b/Source/Client/ModeFadeOut.cpp @@ -0,0 +1,35 @@ +#include "Client/ModeFadeOut.h" +#include "Client/ModeFade.h" +#include "Contents/Sound/SoundMgr.h" +#include "Render/BitmapDrawing.h" +#include "Render/Primitives/AlphaRectangle.h" +#include "Render/Renderer.h" +#include "Resource/Bitmap/BitmapResource.h" +#include "Resource/ResourceMgr.h" +#include "Resource/TextureNames.h" + +#include + +// OFFSET: 0x00AD6960 +// FUNCTION: fn_17847 +std::uint32_t FadeOutMode(CRenderer& renderer, CRenderSystemBase& system, TextureCache& textures, ResourceMgr& resources, TextureNames& names, + int showLogo, bool depthAlpha, float depthStart, float depthEnd) { + g_soundMgr->FadeOut(); + g_modeFadeTick = timeGetTime(); + renderer.CaptureBackBuffer(); + std::uint32_t elapsed = timeGetTime() - g_modeFadeTick; + while (elapsed < 255) { + DrawAlphaRectangle(renderer.primitives, textures, renderer.queues, 0, 0, renderer.viewport.width, renderer.viewport.height, elapsed << 24, + depthAlpha, depthStart, depthEnd); + if (showLogo != 0) { + auto* logo = static_cast(resources.Load(names.Resolve("rag_logo.bmp"))); + DrawBitmapResource(system, renderer.viewport.width - 192, renderer.viewport.height - 122, logo); + } + if (renderer.Draw()) { + renderer.Present(1); + } + renderer.RestoreBackBuffer(); + elapsed = timeGetTime() - g_modeFadeTick; + } + return elapsed; +} diff --git a/Source/Client/ModeFadeOut.h b/Source/Client/ModeFadeOut.h new file mode 100644 index 0000000..68a2a0c --- /dev/null +++ b/Source/Client/ModeFadeOut.h @@ -0,0 +1,15 @@ +#ifndef RAGNAROK_SOURCE_CLIENT_MODEFADEOUT_H +#define RAGNAROK_SOURCE_CLIENT_MODEFADEOUT_H + +#include + +class CRenderer; +class CRenderSystemBase; +class TextureCache; +class ResourceMgr; +struct TextureNames; + +std::uint32_t FadeOutMode(CRenderer& renderer, CRenderSystemBase& system, TextureCache& textures, ResourceMgr& resources, TextureNames& names, + int showLogo, bool depthAlpha, float depthStart, float depthEnd); + +#endif diff --git a/Source/Render/BitmapDrawing.cpp b/Source/Render/BitmapDrawing.cpp new file mode 100644 index 0000000..ca36fbe --- /dev/null +++ b/Source/Render/BitmapDrawing.cpp @@ -0,0 +1,16 @@ +#include "Render/BitmapDrawing.h" +#include "Render/DeviceContext/DCBitmap.h" +#include "Resource/Bitmap/BitmapResource.h" + +// OFFSET: 0x00A8FC30 +// FUNCTION: fn_17148 +void DrawBitmapResource(CRenderSystemBase& system, int x, int y, const CBitmapRes* bitmap) { + if (!bitmap) { + return; + } + + CDCBitmap* surface = CreateBitmapDC(bitmap->image.width, bitmap->image.height, true); + surface->Copy(0, 0, bitmap->image.width, bitmap->image.height, bitmap->image.pixels, true); + surface->Draw(system, x, y, bitmap->image.width, bitmap->image.height, 0xFFFFFFFF); + delete surface; +} diff --git a/Source/Render/BitmapDrawing.h b/Source/Render/BitmapDrawing.h new file mode 100644 index 0000000..0f209e7 --- /dev/null +++ b/Source/Render/BitmapDrawing.h @@ -0,0 +1,9 @@ +#ifndef RAGNAROK_SOURCE_RENDER_BITMAPDRAWING_H +#define RAGNAROK_SOURCE_RENDER_BITMAPDRAWING_H + +class CRenderSystemBase; +class CBitmapRes; + +void DrawBitmapResource(CRenderSystemBase& system, int x, int y, const CBitmapRes* bitmap); + +#endif diff --git a/compile.json b/compile.json index cc17e43..7e33d5a 100644 --- a/compile.json +++ b/compile.json @@ -258,6 +258,7 @@ "Source/Client/Mode/ModeDragState.cpp": 2, "Source/Client/Mode/ModeTooltip.cpp": 2, "Source/Client/ModeFade.cpp": 0, + "Source/Client/ModeFadeOut.cpp": 0, "Source/Client/Registry.cpp": 0, "Source/Client/Replay.cpp": 0, "Source/Client/ReplayPacketRecorder.cpp": 2, @@ -430,6 +431,7 @@ "Source/Network/Packets/SkillUpdatePacket.cpp": 4, "Source/Network/TextEncoding.cpp": 0, "Source/Render/AlphaRectangle.cpp": 0, + "Source/Render/BitmapDrawing.cpp": 0, "Source/Render/BlendColor.cpp": 0, "Source/Render/DX7/BackBufferDX7.cpp": 0, "Source/Render/DX7/DeviceCapabilitiesDX7.cpp": 0, From 22cea43ea370006c67a8f9628e0b709c35fce803 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 11:24:46 +0100 Subject: [PATCH 61/62] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(replay):=20?= =?UTF-8?q?replaced=20magic=20packet=20IDs=20with=20named=20constants=20an?= =?UTF-8?q?d=20added=20replay=20record=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Client/Replay.h | 9 + Source/Client/ReplayPacketRecorder.cpp | 17 +- Source/Client/ReplayPacketRecorder.h | 1 + Source/Client/ReplayRecordOption.h | 30 + Source/Network/Packets/PacketId.h | 845 +++++++++++++++++++++++++ 5 files changed, 894 insertions(+), 8 deletions(-) create mode 100644 Source/Client/ReplayRecordOption.h create mode 100644 Source/Network/Packets/PacketId.h diff --git a/Source/Client/Replay.h b/Source/Client/Replay.h index eaa767c..cd384e4 100644 --- a/Source/Client/Replay.h +++ b/Source/Client/Replay.h @@ -1,5 +1,6 @@ #ifndef RAGNAROK_SOURCE_CLIENT_REPLAY_H #define RAGNAROK_SOURCE_CLIENT_REPLAY_H +#include "Client/ReplayRecordOption.h" #include #include @@ -18,6 +19,14 @@ struct ReplayOptions { /* 0006 */ unsigned char recordRestricted; /* 0007 */ unsigned char unknown_0007; /* 0008 */ unsigned char unknown_0008[22]; + + unsigned char Get(ReplayRecordOption option) const { + return reinterpret_cast(this)[static_cast(option)]; + } + + void Set(ReplayRecordOption option, unsigned char value) { + reinterpret_cast(this)[static_cast(option)] = value; + } }; struct ReplayHeader { diff --git a/Source/Client/ReplayPacketRecorder.cpp b/Source/Client/ReplayPacketRecorder.cpp index caa80ba..af0cc25 100644 --- a/Source/Client/ReplayPacketRecorder.cpp +++ b/Source/Client/ReplayPacketRecorder.cpp @@ -1,5 +1,6 @@ #include "Client/ReplayPacketRecorder.h" #include "Network/Packets/PacketLengths.h" +#include "Network/Packets/PacketId.h" #include #include @@ -16,19 +17,19 @@ bool ReplayPacketRecorder::Record(std::uint16_t bytes, const void* packet, int e std::uint16_t id; std::memcpy(&id, packet, sizeof(id)); - if (id != 2222) { + if (id != ID_REPLAY_WINDOW_RESPONSE) { if (this->lengths.IsRecorded(id) == 0) { return false; } switch (id) { - case 141: - case 142: - case 151: - case 265: - case 383: - case 732: - case 3038: + case ID_ZC_NOTIFY_CHAT: + case ID_ZC_NOTIFY_PLAYERCHAT: + case ID_ZC_WHISPER: + case ID_ZC_NOTIFY_CHAT_PARTY: + case ID_ZC_GUILD_CHAT: + case ID_ZC_BATTLEFIELD_CHAT: + case ID_ZC_ALLY_CHAT: if (this->recordRestricted == 0) { return false; } diff --git a/Source/Client/ReplayPacketRecorder.h b/Source/Client/ReplayPacketRecorder.h index da9ac2e..1c6d9b2 100644 --- a/Source/Client/ReplayPacketRecorder.h +++ b/Source/Client/ReplayPacketRecorder.h @@ -1,5 +1,6 @@ #ifndef RAGNAROK_SOURCE_CLIENT_REPLAYPACKETRECORDER_H #define RAGNAROK_SOURCE_CLIENT_REPLAYPACKETRECORDER_H +#include "Client/ReplayRecordOption.h" #include #include diff --git a/Source/Client/ReplayRecordOption.h b/Source/Client/ReplayRecordOption.h new file mode 100644 index 0000000..eb38356 --- /dev/null +++ b/Source/Client/ReplayRecordOption.h @@ -0,0 +1,30 @@ +#ifndef RAGNAROK_SOURCE_CLIENT_REPLAYRECORDOPTION_H +#define RAGNAROK_SOURCE_CLIENT_REPLAYRECORDOPTION_H + +#include + +enum class ReplayRecordOption : std::uint8_t { + BasicInfo = 0, + Equip = 1, + Item = 2, + Skill = 3, + Guild = 4, + Party = 5, + Chatting = 6, + Shortcut = 7, + Status = 8, +}; + +enum : int { + REPLAY_RECORD_BASICINFO = 0, + REPLAY_RECORD_EQUIP = 1, + REPLAY_RECORD_ITEM = 2, + REPLAY_RECORD_SKILL = 3, + REPLAY_RECORD_GUILD = 4, + REPLAY_RECORD_PARTY = 5, + REPLAY_RECORD_CHATTING = 6, + REPLAY_RECORD_SHORTCUT = 7, + REPLAY_RECORD_STATUS = 8, +}; + +#endif diff --git a/Source/Network/Packets/PacketId.h b/Source/Network/Packets/PacketId.h new file mode 100644 index 0000000..5266f18 --- /dev/null +++ b/Source/Network/Packets/PacketId.h @@ -0,0 +1,845 @@ +#ifndef RAGNAROK_SOURCE_NETWORK_PACKETS_PACKETID_H +#define RAGNAROK_SOURCE_NETWORK_PACKETS_PACKETID_H + +#include + +enum PacketId : std::int16_t { + ID_ZC_PAR_4JOB_CHANGE = 0xb25, + ID_ZC_PAR_CHANGE = 0xb0, + ID_ZC_LONGPAR_CHANGE = 0xb1, + ID_ZC_STATUS_CHANGE = 0xbe, + ID_ZC_NOTIFY_CARTITEM_COUNTINFO = 0x121, + ID_ZC_ATTACK_RANGE = 0x13a, + ID_ZC_COUPLESTATUS = 0x141, + ID_ZC_LONGLONGPAR_CHANGE = 0xacb, + ID_ZC_ITEM_PICKUP_ACK = 0xb41, + ID_ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item = 0xbba, + ID_ZC_INVENTORY_START = 0xb08, + ID_ZC_INVENTORY_END = 0xb0b, + ID_ZC_REQ_WEAR_EQUIP_ACK = 0x999, + ID_ZC_EQUIPWIN_MICROSCOPE = 0xb37, + ID_CZ_NPC_MARKET_PURCHASE = 0x9d6, + ID_ZC_NPC_MARKET_OPEN = 0xb7a, + ID_ZC_SHORTCUT_KEY_LIST = 0xb20, + ID_CZ_SHORTCUT_KEY_CHANGE1 = 0x2ba, + ID_CZ_SHORTCUT_KEY_CHANGE2 = 0xb21, + ID_CZ_SHORTCUTKEYBAR_ROTATE1 = 0xa01, + ID_CZ_SHORTCUTKEYBAR_ROTATE2 = 0xb22, + ID_ZC_ACK_ADD_ITEM_RODEX = 0xb3f, + ID_CZ_CHECKNAME1 = 0xa13, + ID_CZ_CHECKNAME2 = 0xb97, + ID_ZC_CHECKNAME = 0xa51, + ID_ZC_ACK_READ_RODEX = 0xb63, + ID_ZC_CLANINFO = 0x98a, + ID_ZC_UI_OPEN = 0xae2, + ID_ZC_UI_OPEN2 = 0xb9a, + ID_ZC_ADD_ITEM_TO_STORE = 0xb44, + ID_ZC_ACK_TOUSESKILL = 0x110, + ID_ZC_ADD_ITEM_TO_CART = 0xb45, + ID_ZC_ADD_EXCHANGE_ITEM = 0xb42, + ID_ZC_ITEM_PICKUP_PARTY = 0xb67, + ID_ZC_PROPERTY_HOMUN = 0xba4, + ID_CZ_REQ_ITEMREPAIR2 = 0xb66, + ID_CZ_REQ_ITEMREPAIR1 = 0x1fd, + ID_ZC_PC_PURCHASE_MYITEMLIST = 0xb40, + ID_ZC_PC_PURCHASE_ITEMLIST = 0xb77, + ID_ZC_PC_PURCHASE_ITEMLIST_FROMMC = 0xb3d, + ID_ZC_MAKINGARROW_LIST = 0x1ad, + ID_ZC_SKILL_SELECT_REQUEST = 0x442, + ID_ZC_REPAIRITEMLIST = 0xb65, + ID_ZC_MAKINGITEM_LIST = 0x25a, + ID_ZC_SEARCH_STORE_INFO_FAILED = 0x837, + ID_ZC_OPEN_SEARCH_STORE_INFO = 0x83a, + ID_ZC_SSILIST_ITEM_CLICK_ACK = 0x83d, + ID_ZC_SEARCH_STORE_INFO_ACK = 0xb64, + ID_ZC_ACK_REQNAMEALL = 0xa30, + ID_ZC_ACK_REQNAMEALL_NPC = 0xadf, + ID_ZC_MOVE_ITEM_FAILED = 0xaa7, + ID_ZC_VIEW_CAMERAINFO = 0xa78, + ID_CZ_VIEW_CAMERAINFO = 0xa77, + ID_ZC_AUTOSPELLLIST = 0xafb, + ID_ZC_CHANGE_ITEM_OPTION = 0xb43, + ID_ZC_UPDATE_CARDSLOT = 0xa3f, + ID_ZC_DEBUGMSG = 0xadb, + ID_CZ_USE_SKILL_START = 0xb10, + ID_CZ_USE_SKILL_END = 0xb11, + ID_ZC_EXTEND_BODYITEM_SIZE = 0xb18, + ID_ZC_ACK_OPEN_MSGBOX_EXTEND_BODYITEM_SIZE = 0xb15, + ID_ZC_ACK_EXTEND_BODYITEM_SIZE = 0xb17, + ID_CZ_REQ_OPEN_MSGBOX_EXTEND_BODYITEM_SIZE = 0xb14, + ID_CZ_REQ_EXTEND_BODYITEM_SIZE = 0xb16, + ID_CZ_CLOSE_MSGBOX_EXTEND_BODYITEM_SIZE = 0xb19, + ID_CZ_REQ_REMAINTIME = 0x1c0, + ID_CZ_PARTY_CONFIG = 0x2c8, + ID_ZC_NPC_BARTER_MARKET_ITEMINFO = 0xb78, + ID_CZ_NPC_BARTER_MARKET_CLOSE = 0xb12, + ID_CZ_NPC_BARTER_MARKET_PURCHASE = 0xb0f, + ID_ZC_USESKILL_ACK = 0xb1a, + ID_CZ_CLIENT_VERSION = 0x44a, + ID_CZ_PING_LIVE = 0xb1c, + ID_ZC_PING_LIVE = 0xb1d, + ID_CZ_CMD_RESETCOOLTIME = 0xa88, + ID_CZ_CLOSE_UI_STYLINGSHOP = 0xa48, + ID_ZC_NOTIFY_ACTORINIT = 0xb1b, + ID_ZC_PARTY_CONFIG = 0x2c9, + ID_ZC_ROLE_CHANGE = 0xe1, + ID_ZC_BAN_LIST = 0xb7c, + ID_ZC_ACK_CLOSE_ROULETTE = 0xa1e, + ID_ZC_ACK_MERGE_ITEM = 0x96f, + ID_ZC_MERGE_ITEM_OPEN = 0x96d, + ID_ZC_SE_PC_BUY_CASHITEM_RESULT = 0x849, + ID_ZC_OPEN_REFINING_UI = 0xaa0, + ID_CZ_REFINING_SELECT_ITEM = 0xaa1, + ID_ZC_REFINING_MATERIAL_LIST = 0xaa2, + ID_CZ_REQ_REFINING = 0xaa3, + ID_CZ_CLOSE_REFINING_UI = 0xaa4, + ID_ZC_BROADCAST_ITEMREFINING_RESULT = 0xada, + ID_ZC_STATUS_CHANGE_ACK = 0xbc, + ID_ZC_EQUIPMENT_EFFECT = 0xa3b, + ID_ZC_ADD_SKILL = 0x111, + ID_ZC_SKILLINFO_LIST = 0x10f, + ID_ZC_SKILLINFO_UPDATE2 = 0x7e1, + ID_ZC_NPC_MARKET_PURCHASE_RESULT = 0xb4e, + ID_ZC_TALKBOX_CHATCONTENTS = 0x191, + ID_ZC_GUILD_AGIT_INFO = 0xb27, + ID_CZ_REQ_MOVE_GUILD_AGIT = 0xb28, + ID_ZC_REQ_ACK_MOVE_GUILD_AGIT = 0xb2e, + ID_ZC_REQ_ACK_AGIT_INVESTMENT = 0xb2d, + ID_CZ_REQ_AGIT_INVESTMENT = 0xb2c, + ID_ZC_RANDOM_COMBINE_ITEM_UI_OPEN = 0xa4e, + ID_CZ_RANDOM_COMBINE_ITEM_UI_CLOSE = 0xa70, + ID_CZ_REQ_RANDOM_COMBINE_ITEM = 0xa4f, + ID_ZC_ACK_RANDOM_COMBINE_ITEM = 0xa50, + ID_CZ_UNINSTALLATION = 0xb35, + ID_ZC_NOTIFY_EFFECT3 = 0xb69, + ID_CZ_SE_CASHSHOP_OPEN1 = 0x844, + ID_CZ_SE_CASHSHOP_OPEN2 = 0xb6d, + ID_CZ_GET_ACCOUNT_LIMTIED_SALE_LIST = 0xb4c, + ID_ZC_SE_CASHSHOP_OPEN = 0xb6e, + ID_CZ_NPC_EXPANDED_BARTER_MARKET_CLOSE = 0xb58, + ID_CZ_NPC_EXPANDED_BARTER_MARKET_PURCHASE = 0xb57, + ID_ZC_STATE_CHANGE = 0x229, + ID_ZC_AUTORUN_SKILL = 0x147, + ID_ZC_RANDOM_UPGRADE_ITEM_UI_OPEN = 0xab4, + ID_ZC_ACK_RANDOM_UPGRADE_ITEM = 0xab7, + ID_CZ_RANDOM_UPGRADE_ITEM_UI_CLOSE = 0xab5, + ID_CZ_REQ_RANDOM_UPGRADE_ITEM = 0xab6, + ID_ZC_PERSONAL_INFOMATION = 0x97b, + ID_ZC_NOTIFY_SKILL = 0x1de, + ID_ZC_USE_SKILL = 0x9cb, + ID_ZC_NOTIFY_GROUNDSKILL = 0x117, + ID_ZC_SKILL_POSTDELAY = 0x43d, + ID_ZC_NOTIFY_SKILL_POSITION = 0x115, + ID_ZC_C_MARKERINFO = 0x9c1, + ID_ZC_MEMBERMGR_INFO = 0xb7d, + ID_ZC_GUILD_INFO = 0xb7b, + ID_ZC_POSITION_ID_NAME_INFO = 0x166, + ID_ZC_POSITION_INFO = 0x160, + ID_ZC_GUILD_SKILLINFO = 0x162, + ID_ZC_MYGUILD_BASIC_INFO = 0x14c, + ID_CZ_REQ_UPLOAD_MACRO_DETECTOR = 0xa52, + ID_ZC_ACK_UPLOAD_MACRO_DETECTOR = 0xa53, + ID_CZ_UPLOAD_MACRO_DETECTOR_CAPTCHA = 0xa54, + ID_ZC_COMPLETE_UPLOAD_MACRO_DETECTOR_CAPTCHA = 0xa55, + ID_CZ_REQ_APPLY_MACRO_DETECTOR = 0xa56, + ID_ZC_ACK_APPLY_MACRO_DETECTOR = 0xa57, + ID_ZC_APPLY_MACRO_DETECTOR = 0xa58, + ID_ZC_APPLY_MACRO_DETECTOR_CAPTCHA = 0xa59, + ID_CZ_COMPLETE_APPLY_MACRO_DETECTOR_CAPTCHA = 0xa5a, + ID_ZC_REQ_ANSWER_MACRO_DETECTOR = 0xa5b, + ID_CZ_ACK_ANSWER_MACRO_DETECTOR = 0xa5c, + ID_ZC_CLOSE_MACRO_DETECTOR = 0xa5d, + ID_CZ_REQ_PREVIEW_MACRO_DETECTOR = 0xa69, + ID_ZC_ACK_PREVIEW_MACRO_DETECTOR = 0xa6a, + ID_ZC_PREVIEW_MACRO_DETECTOR_CAPTCHA = 0xa6b, + ID_CZ_REQ_PLAYER_AID_IN_RANGE = 0xa6c, + ID_ZC_ACK_PLAYER_AID_IN_RANGE = 0xa6d, + ID_ZC_ACK_MAKE_GROUP = 0xfa, + ID_ZC_PARTY_JOIN_REQ = 0x2c6, + ID_ZC_PARTY_JOIN_REQ_ACK = 0x2c5, + ID_ZC_NOTIFY_CHAT_PARTY = 0x109, + ID_ZC_NOTIFY_POSITION_TO_GROUPM = 0x107, + ID_ZC_NOTIFY_HP_TO_GROUPM = 0x80e, + ID_ZC_NOTIFY_MEMBERINFO_TO_GROUPM = 0xabd, + ID_ZC_DELETE_MEMBER_FROM_GROUP = 0x105, + ID_CZ_REQ_TAKEOFF_EQUIP_ALL = 0xbf5, + ID_ZC_ACK_TAKEOFF_EQUIP_ALL = 0xbae, + ID_ZC_BATTLEFIELD_NOTIFY_HP = 0xa0e, + ID_CZ_CHOOSE_MENU_ZERO = 0xba8, + ID_ZC_DIALOG_TEXT_ALIGN = 0xba1, + ID_CZ_GRADE_ENCHANT_SELECT_EQUIPMENT = 0xb59, + ID_ZC_GRADE_ENCHANT_MATERIAL_LIST = 0xb5a, + ID_CZ_GRADE_ENCHANT_REQUEST = 0xb5b, + ID_CZ_GRADE_ENCHANT_CLOSE_UI = 0xb5c, + ID_ZC_GRADE_ENCHANT_ACK = 0xb5d, + ID_ZC_GRADE_ENCHANT_BROADCAST_RESULT = 0xb5e, + ID_ZC_SHOW_IMAGE = 0x1b3, + ID_ZC_WHISPER = 0x97, + ID_ZC_WHISPER2 = 0x9de, + ID_ZC_UPDATE_GDID = 0x2f7, + ID_CZ_APPROXIMATE_ACTOR = 0xbb0, + ID_CZ_CONTACTNPC = 0x90, + ID_ZC_ATTACK_FAILURE_FOR_DISTANCE = 0x139, + ID_ZC_START_CAPTURE = 0x19e, + ID_ZC_TRYCAPTURE_MONSTER = 0x1a0, + ID_ZC_PROPERTY_PET = 0x1a2, + ID_ZC_CHANGESTATE_PET = 0x1a4, + ID_ZC_SPIRITS = 0x1d0, + ID_ZC_SPIRITS2 = 0x1e1, + ID_ZC_SOULENERGY = 0xb73, + ID_ZC_SAY_DIALOG = 0xb4, + ID_ZC_SAY_DIALOG2 = 0x972, + ID_ZC_WAIT_DIALOG = 0xb5, + ID_ZC_WAIT_DIALOG2 = 0x973, + ID_ZC_DIALOG_WINDOW_SIZE = 0xba2, + ID_ZC_DIALOG_WINDOW_POS = 0xba3, + ID_ZC_DIALOG_WINDOW_POS2 = 0xbb5, + ID_ZC_PLAY_NPC_BGM = 0xb8c, + ID_CZ_MOVE_ITEM_FROM_BODY_TO_CART = 0x126, + ID_ZC_SOUND = 0x1d3, + ID_ZC_BUYING_STORE_ENTRY = 0x814, + ID_ZC_STORE_ENTRY = 0x131, + ID_CZ_PC_PURCHASE_ITEMLIST_FROMMC = 0x134, + ID_CZ_PC_PURCHASE_ITEMLIST_FROMMC2 = 0x801, + ID_ZC_DISAPPEAR_BUYING_STORE_ENTRY = 0x816, + ID_ZC_OPEN_REFORM_UI = 0xb8f, + ID_CZ_CLOSE_REFORM_UI = 0xb90, + ID_CZ_ITEM_REFORM = 0xb91, + ID_ZC_ITEM_REFORM_ACK = 0xb92, + ID_CZ_USE_PACKAGEITEM = 0xbaf, + ID_CZ_REQUEST_RANDOM_ENCHANT = 0xb9b, + ID_CZ_REQUEST_PERFECT_ENCHANT = 0xb9c, + ID_CZ_REQUEST_UPGRADE_ENCHANT = 0xb9d, + ID_CZ_REQUEST_RESET_ENCHANT = 0xb9e, + ID_ZC_RESPONSE_ENCHANT = 0xb9f, + ID_CZ_CLOSE_UI_ENCHANT = 0xba0, + ID_ZC_SPECIALPOPUP = 0xbbe, + ID_ZC_GOLDPCCAFE_POINT = 0xa15, + ID_CZ_DYNAMICNPC_CREATE_REQUEST = 0xa16, + ID_ZC_DYNAMICNPC_CREATE_RESULT = 0xa17, + ID_CZ_REQ_GUILD_EMBLEM_IMG1 = 0x151, + ID_CZ_REQ_GUILD_EMBLEM_IMG3 = 0xb46, + ID_CZ_REQ_GUILD_EMBLEM_IMG2 = 0xb1e, + ID_ZC_CHANGE_GUILD = 0xb47, + ID_ZC_GUILD_EMBLEM_IMG = 0xb36, + ID_CZ_ADVENTURER_AGENCY_JOIN_REQ = 0xae6, + ID_ZC_ADVENTURER_AGENCY_JOIN_RESULT = 0xafa, + ID_ZC_ADVENTURER_AGENCY_JOIN_REQ = 0xae7, + ID_CZ_ADVENTURER_AGENCY_JOIN_RESULT = 0xaf8, + ID_ZC_USER_COUNT = 0xc2, + ID_ZC_PC_PURCHASE_RESULT = 0xca, + ID_CZ_REQ_MAKINGARROW = 0x1ae, + ID_CZ_SE_PC_BUY_CASHITEM_LIST = 0x848, + ID_CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO = 0x9ac, + ID_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO = 0x9ad, + ID_CZ_REQ_APPLY_BARGAIN_SALE_ITEM = 0x9ae, + ID_CZ_REQ_REMOVE_BARGAIN_SALE_ITEM = 0x9b0, + ID_ZC_NOTIFY_BARGAIN_SALE_SELLING = 0x9b2, + ID_ZC_NOTIFY_BARGAIN_SALE_CLOSE = 0x9b3, + ID_ZC_ACK_COUNT_BARGAIN_SALE_ITEM = 0x9c4, + ID_ZC_ACK_GUILDSTORAGE_LOG = 0x9da, + ID_CZ_ADVANCED_STATUS_CHANGE = 0xb24, + ID_CZ_REQ_ADD_NEW_EMBLEM = 0xb46, + ID_ZC_BROADCAST = 0x9a, + ID_ZC_BROADCAST2 = 0x1c3, + ID_ZC_ENTRY_QUEUE_INIT = 0x90e, + ID_CZ_RODEX_RETURN = 0xb98, + ID_CZ_REQ_STYLE_CLOSE = 0xa48, + ID_ZC_SUMMON_HP_INIT = 0xb6b, + ID_ZC_SUMMON_HP_UPDATE = 0xb6c, + ID_ZC_REPUTE_INFO = 0xb8d, + ID_ZC_UI_OPEN_V3 = 0xb9a, + ID_ZC_TARGET_SPIRITS = 0xb68, + ID_ZC_FRIENDS_LIST = 0x201, + ID_CZ_PC_SELL_ITEMLIST = 0xc9, + ID_CZ_REQ_CHANGE_MEMBERPOS = 0x155, + ID_ZC_CLEAR_DIALOG = 0x8d6, + ID_ZC_NOTIFY_BIND_ON_EQUIP = 0x2d3, + ID_ZC_BANKING_CHECK = 0x9a6, + ID_ZC_ACK_BANKING_WITHDRAW = 0x9aa, + ID_ZC_ACK_BANKING_DEPOSIT = 0x9a8, + ID_ZC_ACK_CLOSE_BANKING = 0x9b9, + ID_ZC_ACK_OPEN_BANKING = 0x9b7, + ID_ZC_REQ_EXCHANGE_ITEM = 0x1f4, + ID_ZC_ACK_EXCHANGE_ITEM = 0x1f5, + ID_ZC_ACK_ADD_EXCHANGE_ITEM = 0xea, + ID_ZC_COUPLENAME = 0x1e6, + ID_CZ_PARTY_REQ_MASTER_TO_JOIN = 0xae6, + ID_ZC_PARTY_REQ_MASTER_TO_JOIN = 0xae7, + ID_CZ_PARTY_REQ_ACK_MASTER_TO_JOIN = 0xaf8, + ID_ZC_PARTY_JOIN_REQ_ACK_FROM_MASTER = 0xafa, + ID_CZ_REQ_SE_CASH_TAB_CODE = 0x846, + ID_ZC_ACK_SE_CASH_ITEM_LIST2 = 0x8c0, + ID_CZ_REQ_MERGE_ITEM = 0x96e, + ID_CZ_RESET_SKILL = 0xbb1, + ID_ZC_SKILLINFO_UPDATE = 0x10e, + ID_ZC_BOSS_INFO = 0x293, + ID_CZ_INVENTORY_TAB = 0x907, + ID_ZC_INVENTORY_TAB = 0x908, + ID_ZC_ACCEPT_ENTER = 0x2eb, + ID_ZC_REFUSE_ENTER = 0x74, + ID_SC_NOTIFY_BAN = 0x81, + ID_ZC_RESTART_ACK = 0xb3, + ID_ZC_NOTIFY_VANISH = 0x80, + ID_ZC_ITEM_DISAPPEAR = 0xa1, + ID_ZC_MILLENNIUMSHIELD = 0x440, + ID_ZC_SPIRITS_ATTRIBUTE = 0x8cf, + ID_ZC_CHANGESTATE_MER = 0x230, + ID_ZC_HOSKILLINFO_LIST = 0x235, + ID_ZC_HOSKILLINFO_UPDATE = 0x239, + ID_ZC_NOTIFY_PLAYERMOVE = 0x87, + ID_ZC_CHANGE_DIRECTION = 0x9c, + ID_ZC_NPCACK_MAPMOVE = 0x91, + ID_ZC_NPCACK_SERVERMOVE = 0xac7, + ID_ZC_STOPMOVE = 0x88, + ID_ZC_SELECT_DEALTYPE = 0xc4, + ID_ZC_PC_SELL_ITEMLIST = 0xc7, + ID_ZC_CLOSE_DIALOG = 0xb6, + ID_ZC_MENU_LIST = 0xb7, + ID_ZC_OPEN_EDITDLG = 0x142, + ID_ZC_OPEN_EDITDLGSTR = 0x1d4, + ID_ZC_ACK_REQ_ALLY_GUILD = 0x173, + ID_ZC_DELETE_RELATED_GUILD = 0x184, + ID_ZC_REQ_ALLY_GUILD = 0x171, + ID_ZC_ACK_REQ_HOSTILE_GUILD = 0x181, + ID_ZC_COMPASS = 0x144, + ID_ZC_ITEM_THROW_ACK = 0xaf, + ID_ZC_DELETE_ITEM_FROM_BODY = 0x7fa, + ID_ZC_CARTOFF = 0x12b, + ID_ZC_ACK_GUILD_MENUINTERFACE = 0x14e, + ID_ZC_ACK_CHANGE_GUILD_POSITIONINFO = 0x174, + ID_ZC_NOTIFY_POSITION_TO_GUILDM = 0x1eb, + ID_ZC_GUILD_CHAT = 0x17f, + ID_ZC_UPDATE_CHARSTAT = 0x1f2, + ID_ZC_ACK_REQ_CHANGE_MEMBERS = 0x156, + ID_ZC_STATUS = 0xbd, + ID_ZC_NOTIFY_MAPINFO = 0x189, + ID_ZC_ACK_REMEMBER_WARPPOINT = 0x11e, + ID_ZC_DISPEL = 0x1b9, + ID_ZC_RESURRECTION = 0x148, + ID_ZC_NOTIFY_MAPPROPERTY2 = 0x1d6, + ID_ZC_ACK_ITEMREFINING = 0x188, + ID_ZC_PAR_CHANGE_USER = 0x1ab, + ID_ZC_CHANGE_CHATROOM = 0xdf, + ID_ZC_EQUIP_ARROW = 0x13c, + ID_ZC_REQ_TAKEOFF_EQUIP_ACK = 0x99a, + ID_ZC_MAPPROPERTY_R2 = 0x99b, + ID_ZC_CLOSE_STORE = 0xf8, + ID_ZC_DELETE_ITEM_FROM_STORE = 0xf6, + ID_ZC_NOTIFY_STOREITEM_COUNTINFO = 0xf2, + ID_ZC_EXCHANGEITEM_UNDO = 0xf1, + ID_ZC_EXEC_EXCHANGE_ITEM = 0xf0, + ID_ZC_CANCEL_EXCHANGE_ITEM = 0xee, + ID_ZC_ACK_CREATE_CHATROOM = 0xd6, + ID_ZC_CONCLUDE_EXCHANGE_ITEM = 0xec, + ID_ZC_REFUSE_ENTER_ROOM = 0xda, + ID_ZC_DESTROY_ROOM = 0xd8, + ID_ZC_ENTER_ROOM = 0xdb, + ID_ZC_NPC_SHOWEFST_UPDATE = 0x28a, + ID_ZC_ACTION_FAILURE = 0x13b, + ID_ZC_NOTIFY_EFFECT = 0x19b, + ID_ZC_ACK_ITEMCOMPOSITION = 0x17d, + ID_ZC_ACK_ITEMIDENTIFY = 0x179, + ID_ZC_ACK_ITEMREPAIR = 0x1fe, + ID_ZC_EQUIPITEM_DAMAGED = 0x2bb, + ID_ZC_DELETE_ITEM_FROM_CART = 0x125, + ID_ZC_OPENSTORE = 0x12d, + ID_ZC_PC_PURCHASE_RESULT_FROMMC = 0x135, + ID_ZC_ACK_OPENSTORE2 = 0xa28, + ID_ZC_SKILL_DISAPPEAR = 0x120, + ID_ZC_SKILLINFO_DELETE = 0x441, + ID_ZC_SKILL_UPDATE = 0x1ac, + ID_ZC_HIGHJUMP = 0x1ff, + ID_ZC_RECOVERY = 0xa27, + ID_ZC_ACK_WHISPER = 0x9df, + ID_ZC_ACK_ADDITEM_TO_CART = 0x12c, + ID_ZC_DELETEITEM_FROM_MCSTORE = 0x9e5, + ID_CZ_REQ_BAN_GUILD = 0x15b, + ID_CZ_REQ_LEAVE_GUILD = 0x159, + ID_CZ_REQ_DISORGANIZE_GUILD = 0x15d, + ID_ZC_ACK_DISORGANIZE_GUILD_RESULT = 0x15e, + ID_ZC_RESULT_MAKE_GUILD = 0x167, + ID_CZ_REQ_JOIN_GUILD = 0x168, + ID_ZC_ACK_REQ_JOIN_GUILD = 0x169, + ID_ZC_REQ_JOIN_GUILD = 0x16a, + ID_CZ_JOIN_GUILD = 0x16b, + ID_ZC_GUILD_NOTICE = 0x16f, + ID_CZ_REQ_JOIN_GUILD2 = 0x916, + ID_CZ_REQ_JOIN_GROUP = 0xfc, + ID_CZ_JOIN_GROUP = 0xff, + ID_CZ_REQ_LEAVE_GROUP = 0x100, + ID_CZ_REQ_EXPEL_GROUP_MEMBER = 0x103, + ID_CZ_PARTY_JOIN_REQ = 0x2c4, + ID_CZ_PARTY_JOIN_REQ_ACK = 0x2c7, + ID_ZC_HO_PAR_CHANGE = 0xba5, + ID_ZC_EL_PAR_CHANGE = 0x81e, + ID_CZ_REQ_EMOTION = 0xbf, + ID_ZC_NOTIFY_ACT = 0x8c8, + ID_CZ_REQUEST_MOVENPC = 0x232, + ID_ZC_NPCSPRITE_CHANGE = 0x1b0, + ID_ZC_MEMBER_NEWENTRY = 0xdc, + ID_ZC_MEMBER_EXIT = 0xdd, + ID_CZ_MOVETO_MAP = 0x140, + ID_CZ_BROADCAST = 0x99, + ID_CZ_REQ_WEAR_EQUIP = 0xa9, + ID_CZ_ACK_SELECT_DEALTYPE = 0xc5, + ID_CZ_CREATE_CHATROOM = 0xd5, + ID_CZ_BLACKSMITH_RANK = 0x217, + ID_CZ_ALCHEMIST_RANK = 0x218, + ID_ZC_BLACKSMITH_RANK = 0x219, + ID_ZC_ALCHEMIST_RANK = 0x21a, + ID_ZC_BLACKSMITH_POINT = 0x21b, + ID_ZC_ALCHEMIST_POINT = 0x21c, + ID_ZC_TAEKWON_POINT = 0x224, + ID_CZ_TAEKWON_RANK = 0x225, + ID_ZC_TAEKWON_RANK = 0x226, + ID_ZC_KILLER_POINT = 0x236, + ID_CZ_KILLER_RANK = 0x237, + ID_ZC_KILLER_RANK = 0x238, + ID_CZ_REQ_RANKING = 0x97c, + ID_ZC_ACK_RANKING = 0x97d, + ID_ZC_UPDATE_RANKING_POINT = 0x97e, + ID_ZC_ACK_RANKING2 = 0xaf6, + ID_CZ_LESSEFFECT = 0x21d, + ID_CZ_ACTIVE_QUEST = 0x2b6, + ID_CZ_JOIN_BABY = 0x1f7, + ID_CZ_AUCTION_ITEM_SEARCH = 0x251, + ID_CZ_AUCTION_BUY = 0x24f, + ID_CZ_AUCTION_ADD = 0x24d, + ID_ZC_DRESSROOM_OPEN = 0xa02, + ID_ZC_ROOM_NEWENTRY = 0xd7, + ID_ZC_MONSTER_INFO = 0x18c, + ID_ZC_ACK_REQNAME_BYGID = 0xaf7, + ID_ZC_PET_ACT = 0x1aa, + ID_ZC_COMBODELAY = 0x1d2, + ID_ZC_BLADESTOP = 0x1d1, + ID_ZC_MVP = 0x10c, + ID_ZC_MVP_GETTING_SPECIAL_EXP = 0x10b, + ID_ZC_THROW_MVPITEM = 0x10d, + ID_ZC_UPDATE_MAPINFO = 0x192, + ID_CZ_REQ_ENTER_ROOM = 0xd9, + ID_CZ_CHANGE_CHATROOM = 0xde, + ID_CZ_ADD_EXCHANGE_ITEM = 0xe8, + ID_CZ_MOVE_ITEM_FROM_CART_TO_BODY = 0x127, + ID_CZ_SELECT_WARPPOINT = 0x11b, + ID_CZ_INPUT_EDITDLG = 0x143, + ID_CZ_INPUT_EDITDLGSTR = 0x1d5, + ID_CZ_CLOSE_DIALOG = 0x146, + ID_CZ_RESET = 0x197, + ID_CZ_MOVE_ITEM_FROM_STORE_TO_CART = 0x128, + ID_CZ_REQ_ITEMIDENTIFY = 0x178, + ID_CZ_SELECTAUTOSPELL = 0x1ce, + ID_CZ_REQ_ITEMCOMPOSITION_LIST = 0x17a, + ID_CZ_REQ_ITEMCOMPOSITION = 0x17c, + ID_CZ_LOCALBROADCAST = 0x19c, + ID_CZ_MOVE_ITEM_FROM_CART_TO_STORE = 0x129, + ID_ZC_FRIENDS_STATE = 0x206, + ID_CZ_MAKE_GROUP = 0xf9, + ID_CZ_MAKE_GROUP2 = 0x1e8, + ID_CZ_GM_CHECKER = 0xc0b, + ID_ZC_GM_CHECKER = 0xc0c, + ID_ZC_CONFIG_NOTIFY = 0x2da, + ID_ZC_CONGRATULATION = 0x1ea, + ID_ZC_DIVORCE = 0x205, + ID_ZC_EMOTION = 0xc0, + ID_ZC_MSG = 0x291, + ID_ZC_MSG_SKILL = 0x7e6, + ID_ZC_MSG_VALUE = 0x7e2, + ID_ZC_NOTIFY_MANNER_POINT_GIVEN = 0x14b, + ID_ZC_NOTIFY_TIME = 0x7f, + ID_ZC_SETTING_WHISPER_PC = 0xd1, + ID_ZC_SETTING_WHISPER_STATE = 0xd2, + ID_ZC_SKILLMSG = 0x215, + ID_CZ_REQ_EMOTION_EXPANSION = 0xbe9, + ID_ZC_DISAPPEAR_ENTRY = 0x132, + ID_ZC_EFST_SET_ENTER = 0x984, + ID_CZ_SETTING_WHISPER_STATE = 0xd0, + ID_ZC_WHISPER_LIST = 0xd4, + ID_CZ_ALLY_CHAT = 0xbdd, + ID_CZ_REQ_REPORT_USER = 0xbe2, + ID_CZ_QUEST_STATUS_REQ = 0xbf3, + ID_CZ_MOVE_ITEM_TO_PERSONAL = 0xc22, + ID_ZC_NPC_EXPANDED_BARTER_MARKET_ITEMINFO = 0xb79, + ID_ZC_NOTIFY_CHAT = 0x8d, + ID_ZC_ITEM_ENTRY = 0x9d, + ID_ZC_MVP_GETTING_ITEM = 0x10a, + ID_ZC_MAKABLEITEMLIST = 0x18d, + ID_CZ_REQMAKINGITEM = 0x18e, + ID_ZC_ACK_REQMAKINGITEM = 0x18f, + ID_CZ_REQ_ITEMREPAIR = 0x1fd, + ID_ZC_NOTIFY_WEAPONITEMLIST = 0x221, + ID_ZC_ACK_WEAPONREFINE = 0x223, + ID_CZ_REQ_MAKINGITEM = 0x25b, + ID_ZC_PC_CASH_POINT_ITEMLIST = 0x287, + ID_ZC_CASH_TIME_COUNTER = 0x298, + ID_ZC_CASH_ITEM_DELETE = 0x299, + ID_CZ_SKILL_SELECT_RESPONSE = 0x443, + ID_ZC_MYITEMLIST_BUYING_STORE = 0x813, + ID_ZC_ACK_ITEMLIST_BUYING_STORE = 0x818, + ID_ZC_FAILED_TRADE_BUYING_STORE_TO_SELLER = 0x824, + ID_CZ_SSILIST_ITEM_CLICK = 0x83c, + ID_ZC_ACK_SCHEDULER_CASHITEM = 0x8ca, + ID_ZC_NOTIFY_CLAN_CONNECTINFO = 0x988, + ID_ZC_ACK_CLAN_LEAVE = 0x989, + ID_ZC_NOTIFY_CLAN_CHAT = 0x98e, + ID_CZ_REQ_BANKING_DEPOSIT = 0x9a7, + ID_CZ_REQ_BANKING_WITHDRAW = 0x9a9, + ID_CZ_REQ_BANKING_CHECK = 0x9ab, + ID_CZ_REQ_OPEN_BANKING = 0x9b6, + ID_CZ_REQ_CLOSE_BANKING = 0x9b8, + ID_CZ_REQ_APPLY_BARGAIN_SALE_ITEM2 = 0xa3d, + ID_CZ_REQ_STYLE_CHANGE = 0xa46, + ID_ZC_STYLE_CHANGE_RES = 0xa47, + ID_ZC_GROUP_ISALIVE = 0xab2, + ID_CZ_REQ_STYLE_CHANGE2 = 0xafc, + ID_ZC_GUILD_POSITION = 0xafd, + ID_ZC_REMOVE_EFFECT = 0xb0d, + ID_ZC_FEED_MER = 0x22f, + ID_ZC_FEED_PET = 0x1a3, + ID_ZC_WARPLIST = 0xabe, + ID_ZC_MSG_COLOR = 0x9cd, + ID_CZ_SSILIST_ITEM_CLICK3 = 0x8a2, + ID_CZ_SSILIST_ITEM_CLICK4 = 0x838, + ID_CZ_SSILIST_ITEM_CLICK5 = 0x365, + ID_CZ_PRIVATE_AIRSHIP_REQUEST = 0xa49, + ID_CZ_SHORTCUT_KEY_CHANGE3 = 0xb21, + ID_CZ_SHORTCUTKEYBAR_ROTATE3 = 0xb22, + ID_CZ_SSILIST_ITEM_CLICK2 = 0x83c, + ID_CZ_REQ_WHISPER_LIST = 0xd3, + ID_CZ_ENTER = 0x72, + ID_CZ_NOTIFY_ACTORINIT = 0x7d, + ID_CZ_REQUEST_TIME = 0xf7, + ID_CZ_REQUEST_QUIT = 0x82, + ID_CZ_REQUEST_MOVE = 0x85, + ID_CZ_REQUEST_ACT = 0x89, + ID_CZ_REQUEST_CHAT2 = 0x8c, + ID_CZ_REQNAME = 0x94, + ID_CZ_WHISPER = 0x96, + ID_CZ_CHANGE_DIRECTION = 0x9b, + ID_CZ_ITEM_PICKUP = 0x9f, + ID_CZ_ITEM_THROW = 0xa2, + ID_CZ_USE_ITEM = 0xa7, + ID_CZ_REQ_TAKEOFF_EQUIP = 0xab, + ID_CZ_REQ_ITEM_EXPLANATION_BYNAME = 0xad, + ID_CZ_RESTART = 0xb2, + ID_CZ_CHOOSE_MENU = 0xb8, + ID_CZ_REQ_NEXT_SCRIPT = 0xb9, + ID_CZ_REQ_STATUS = 0xba, + ID_CZ_STATUS_CHANGE = 0xbb, + ID_CZ_REQ_USER_COUNT = 0xc1, + ID_CZ_PC_PURCHASE_ITEMLIST = 0xc8, + ID_CZ_DISCONNECT_CHARACTER = 0xcc, + ID_CZ_DISCONNECT_ALL_CHARACTER = 0xce, + ID_CZ_SETTING_WHISPER_PC = 0xcf, + ID_CZ_REQ_ROLE_CHANGE = 0xe0, + ID_CZ_REQ_EXPEL_MEMBER = 0xe2, + ID_CZ_EXIT_ROOM = 0xe3, + ID_CZ_REQ_EXCHANGE_ITEM = 0xe4, + ID_CZ_ACK_EXCHANGE_ITEM = 0xe6, + ID_CZ_CONCLUDE_EXCHANGE_ITEM = 0xeb, + ID_CZ_CANCEL_EXCHANGE_ITEM = 0xed, + ID_CZ_EXEC_EXCHANGE_ITEM = 0xef, + ID_CZ_REQUEST_CHAT = 0xf3, + ID_CZ_MOVE_ITEM_FROM_STORE_TO_BODY = 0xf5, + ID_CZ_CHANGE_GROUPEXPOPTION = 0x102, + ID_CZ_REQUEST_CHAT_PARTY = 0x108, + ID_CZ_UPGRADE_SKILLLEVEL = 0x112, + ID_CZ_USE_SKILL = 0x113, + ID_CZ_USE_SKILL_TOGROUND = 0x116, + ID_CZ_CANCEL_LOCKON = 0x118, + ID_CZ_REMEMBER_WARPPOINT = 0x11d, + ID_CZ_REQ_CARTOFF = 0x12a, + ID_CZ_REQ_CLOSESTORE = 0x12e, + ID_CZ_REQ_OPENSTORE = 0x12f, + ID_CZ_REQ_BUY_FROMMC = 0x130, + ID_CZ_PKMODE_CHANGE = 0x138, + ID_CZ_ITEM_CREATE = 0x13f, + ID_CZ_REQ_GIVE_MANNER_POINT = 0x149, + ID_CZ_REQ_GUILD_MENUINTERFACE = 0x14d, + ID_CZ_REQ_GUILD_MENU = 0x14f, + ID_CZ_REQ_GUILD_EMBLEM_IMG = 0x151, + ID_CZ_REGISTER_GUILD_EMBLEM_IMG = 0x153, + ID_CZ_REQ_OPEN_MEMBER_INFO = 0x157, + ID_CZ_REG_CHANGE_GUILD_POSITIONINFO = 0x161, + ID_CZ_REQ_MAKE_GUILD = 0x165, + ID_CZ_GUILD_NOTICE = 0x16e, + ID_CZ_REQ_ALLY_GUILD = 0x170, + ID_CZ_ALLY_GUILD = 0x172, + ID_CZ_REQ_GUILD_MEMBER_INFO = 0x175, + ID_CZ_GUILD_CHAT = 0x17e, + ID_CZ_REQ_HOSTILE_GUILD = 0x180, + ID_CZ_REQ_DELETE_RELATED_GUILD = 0x183, + ID_CZ_REQ_DISCONNECT = 0x18a, + ID_CZ_USE_SKILL_TOGROUND_WITHTALKBOX = 0x190, + ID_CZ_REQNAME_BYGID = 0x193, + ID_CZ_CHANGE_MAPTYPE = 0x198, + ID_CZ_CHANGE_EFFECTSTATE = 0x19d, + ID_CZ_TRYCAPTURE_MONSTER = 0x19f, + ID_CZ_COMMAND_PET = 0x1a1, + ID_CZ_RENAME_PET = 0x1a5, + ID_CZ_SELECT_PETEGG = 0x1a7, + ID_CZ_PETEGG_INFO = 0x1a8, + ID_CZ_PET_ACT = 0x1a9, + ID_CZ_REQ_CHANGECART = 0x1af, + ID_CZ_REQ_OPENSTORE2 = 0x1b2, + ID_CZ_GUILD_ZENY = 0x1b7, + ID_CZ_REMOVE_AID = 0x1ba, + ID_CZ_SHIFT = 0x1bb, + ID_CZ_RECALL = 0x1bc, + ID_CZ_RECALL_GID = 0x1bd, + ID_CZ_REQMAKINGHOMUN = 0x1ca, + ID_CZ_MONSTER_TALK = 0x1cb, + ID_CZ_REQ_ACCOUNTNAME = 0x1df, + ID_CZ_JOIN_COUPLE = 0x1e3, + ID_CZ_REQ_JOIN_COUPLE = 0x1e5, + ID_CZ_DORIDORI = 0x1e7, + ID_CZ_CHOPOKGI = 0x1ed, + ID_CZ_REQ_JOIN_BABY = 0x1f9, + ID_CZ_ADD_FRIENDS = 0x202, + ID_CZ_DELETE_FRIENDS = 0x203, + ID_CZ_ACK_REQ_ADD_FRIENDS = 0x208, + ID_CZ_REQ_GIVE_MANNER_BYNAME = 0x212, + ID_CZ_REQ_STATUS_GM = 0x213, + ID_CZ_REQ_PVPPOINT = 0x20f, + ID_CZ_REQ_WEAPONREFINE = 0x222, + ID_CZ_ACK_GAME_GUARD = 0x228, + ID_CZ_COMMAND_MER = 0x22d, + ID_CZ_REQUEST_ACTNPC = 0x233, + ID_CZ_REQUEST_MOVETOOWNER = 0x234, + ID_CZ_RENAME_MER = 0x231, + ID_CZ_ACK_STORE_PASSWORD = 0x23b, + ID_CZ_MAIL_GET_LIST = 0x23f, + ID_CZ_MAIL_OPEN = 0x241, + ID_CZ_MAIL_DELETE = 0x243, + ID_CZ_MAIL_GET_ITEM = 0x244, + ID_CZ_MAIL_RESET_ITEM = 0x246, + ID_CZ_MAIL_ADD_ITEM = 0x247, + ID_CZ_MAIL_SEND = 0x248, + ID_CZ_AUCTION_CREATE = 0x24b, + ID_CZ_AUCTION_ADD_ITEM = 0x24c, + ID_CZ_AUCTION_ADD_CANCEL = 0x24e, + ID_CZ_AGREE_STARPLACE = 0x254, + ID_CZ_AUCTION_REQ_MY_INFO = 0x25c, + ID_CZ_AUCTION_REQ_MY_SELL_STOP = 0x25d, + ID_CZ_REQ_MAIL_RETURN = 0x273, + ID_CZ_HUNTINGLIST = 0x279, + ID_CZ_GANGSI_RANK = 0x281, + ID_CZ_DEATH_QUESTION = 0x286, + ID_CZ_PC_BUY_CASH_POINT_ITEM = 0x288, + ID_CZ_STANDING_RESURRECTION = 0x292, + ID_CZ_MER_COMMAND = 0x29f, + ID_CZ_UNUSED_MER_USE_SKILL = 0x2a0, + ID_CZ_UNUSED_MER_UPGRADE_SKILLLEVEL = 0x2a1, + ID_CZ_GAMEGUARD_LINGO_READY = 0x2a4, + ID_CZ_KSY_EVENT = 0x2a5, + ID_CZ_ACK_CASH_PASSWORD = 0x2ab, + ID_CZ_HACKSH_CPX_MSG = 0x2a7, + ID_CZ_HACKSHIELD_CRC_MSG = 0x2a9, + ID_CZ_SHORTCUT_KEY_CHANGE = 0x2ba, + ID_CZ_SRPACKETR2_START = 0x2c0, + ID_CZ_MEMORIALDUNGEON_COMMAND = 0x2cf, + ID_CZ_EQUIPWIN_MICROSCOPE = 0x2d6, + ID_CZ_CONFIG = 0x2d8, + ID_CZ_BATTLEFIELD_CHAT = 0x2db, + ID_CZ_USE_ITEM_NEW_JAPEN = 0x2e2, + ID_CZ_USE_SKILL_NEW_JAPEN = 0x2e3, + ID_CZ_ITEM_PICKUP_NEW_JAPEN = 0x2e4, + ID_CZ_REQUEST_MOVE_NEW_JAPEN = 0x2e5, + ID_CZ_BOT_CHECK = 0x2e6, + ID_CZ_PROGRESS = 0x2f1, + ID_CZ_IRMAIL_SEND = 0x2f3, + ID_CZ_IRMAIL_LIST = 0x2f6, + ID_CZ_OPEN_SIMPLE_CASHSHOP_ITEMLIST = 0x35c, + ID_CZ_CLOSE_WINDOW = 0x35e, + ID_CZ_REQUEST_MOVE2 = 0x35f, + ID_CZ_ENTER2 = 0x436, + ID_CZ_REQUEST_ACT2 = 0x437, + ID_CZ_USE_SKILL2 = 0x438, + ID_CZ_USE_ITEM2 = 0x439, + ID_CZ_SIMPLE_BUY_CASH_POINT_ITEM = 0x445, + ID_CZ_CLOSE_SIMPLECASH_SHOP = 0x44b, + ID_CZ_ES_GET_LIST = 0x7d1, + ID_CZ_ES_CHOOSE = 0x7d3, + ID_CZ_ES_CANCEL = 0x7d4, + ID_CZ_BLOCKING_PLAY_CANCEL = 0x447, + ID_CZ_GROUPINFO_CHANGE_V2 = 0x7d7, + ID_CZ_CHANGE_GROUP_MASTER = 0x7da, + ID_CZ_SEEK_PARTY = 0x7dc, + ID_CZ_SEEK_PARTY_MEMBER = 0x7de, + ID_CZ_ITEMLISTWIN_RES = 0x7e4, + ID_CZ_BATTLE_FIELD_LIST = 0x7ea, + ID_CZ_JOIN_BATTLE_FIELD = 0x7ec, + ID_CZ_CANCEL_BATTLE_FIELD = 0x7ee, + ID_CZ_REQ_BATTLE_STATE_MONITOR = 0x7f0, + ID_CZ_GM_FULLSTRIP = 0x7f5, + ID_CZ_PARTY_BOOKING_REQ_REGISTER = 0x802, + ID_CZ_PARTY_BOOKING_REQ_SEARCH = 0x804, + ID_CZ_PARTY_BOOKING_REQ_DELETE = 0x806, + ID_CZ_PARTY_BOOKING_REQ_UPDATE = 0x808, + ID_CZ_SIMPLE_CASH_BTNSHOW = 0x80c, + ID_CZ_REQ_OPEN_BUYING_STORE = 0x811, + ID_CZ_REQ_CLOSE_BUYING_STORE = 0x815, + ID_CZ_REQ_CLICK_TO_BUYING_STORE = 0x817, + ID_CZ_REQ_TRADE_BUYING_STORE = 0x819, + ID_CZ_SEARCH_STORE_INFO = 0x835, + ID_CZ_SEARCH_STORE_INFO_NEXT_PAGE = 0x838, + ID_CZ_CLOSE_SEARCH_STORE_INFO = 0x83b, + ID_CZ_RECALL_SSO = 0x842, + ID_CZ_REMOVE_AID_SSO = 0x843, + ID_CZ_REQUEST_TIME2 = 0x360, + ID_CZ_CHANGE_DIRECTION2 = 0x361, + ID_CZ_ITEM_PICKUP2 = 0x362, + ID_CZ_ITEM_THROW2 = 0x363, + ID_CZ_MOVE_ITEM_FROM_BODY_TO_STORE2 = 0x364, + ID_CZ_MOVE_ITEM_FROM_STORE_TO_BODY2 = 0x365, + ID_CZ_USE_SKILL_TOGROUND2 = 0x366, + ID_CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 = 0x367, + ID_CZ_REQNAME2 = 0x368, + ID_CZ_REQNAME_BYGID2 = 0x369, + ID_CZ_TRYCOLLECTION = 0x8b5, + ID_CZ_MACRO_START = 0x8c1, + ID_CZ_MACRO_STOP = 0x8c2, + ID_CZ_REQ_SCHEDULER_CASHITEM = 0x8c9, + ID_CZ_SE_CASHSHOP_OPEN = 0x844, + ID_CZ_SE_CASHSHOP_CLOSE = 0x84a, + ID_CZ_REASSEMBLY_AUTH02 = 0x885, + ID_CZ_REASSEMBLY_AUTH16 = 0x893, + ID_CZ_REASSEMBLY_AUTH20 = 0x897, + ID_CZ_REASSEMBLY_AUTH42 = 0x8ad, + ID_CZ_REASSEMBLY_AUTH07 = 0x88a, + ID_CZ_REQ_ENTRY_QUEUE_APPLY = 0x8d7, + ID_CZ_REQ_ENTRY_QUEUE_RANKING = 0x90a, + ID_CZ_REQ_ENTRY_QUEUE_CANCEL = 0x8da, + ID_CZ_REPLY_LOBBY_ADMISSION = 0x8e0, + ID_CZ_REASSEMBLY_AUTH21 = 0x898, + ID_CZ_REASSEMBLY_AUTH10 = 0x88d, + ID_CZ_REASSEMBLY_AUTH39 = 0x8aa, + ID_CZ_REASSEMBLY_AUTH34 = 0x8a5, + ID_CZ_REASSEMBLY_AUTH24 = 0x89b, + ID_CZ_REASSEMBLY_AUTH30 = 0x8a1, + ID_CZ_REASSEMBLY_AUTH27 = 0x89e, + ID_CZ_REASSEMBLY_AUTH40 = 0x8ab, + ID_CZ_REASSEMBLY_AUTH08 = 0x88b, + ID_CZ_REASSEMBLY_AUTH31 = 0x8a2, + ID_CZ_REASSEMBLY_AUTH15 = 0x892, + ID_CZ_REASSEMBLY_AUTH22 = 0x899, + ID_CZ_REASSEMBLY_AUTH04 = 0x887, + ID_CZ_REASSEMBLY_AUTH13 = 0x890, + ID_CZ_REASSEMBLY_AUTH77 = 0x963, + ID_CZ_REASSEMBLY_AUTH84 = 0x96a, + ID_CZ_REASSEMBLY_AUTH06 = 0x889, + ID_CZ_REASSEMBLY_AUTH01 = 0x884, + ID_CZ_REASSEMBLY_AUTH25 = 0x89c, + ID_CZ_REASSEMBLY_AUTH75 = 0x961, + ID_CZ_REASSEMBLY_AUTH53 = 0x94b, + ID_CZ_REASSEMBLY_AUTH47 = 0x945, + ID_CZ_REASSEMBLY_AUTH03 = 0x886, + ID_CZ_REASSEMBLY_AUTH14 = 0x891, + ID_CZ_REASSEMBLY_AUTH35 = 0x8a6, + ID_CZ_PARTY_RECRUIT_REQ_REGISTER = 0x8e5, + ID_CZ_PARTY_RECRUIT_REQ_SEARCH = 0x8e7, + ID_CZ_PARTY_RECRUIT_REQ_DELETE = 0x8e9, + ID_CZ_PARTY_RECRUIT_REQ_UPDATE = 0x8eb, + ID_CZ_PARTY_RECRUIT_ADD_FILTERLINGLIST = 0x8ef, + ID_CZ_PARTY_RECRUIT_SUB_FILTERLINGLIST = 0x8f0, + ID_CZ_PARTY_RECRUIT_REQ_VOLUNTEER = 0x8f1, + ID_CZ_PARTY_RECRUIT_SHOW_EQUIPMENT = 0x8f4, + ID_CZ_UNKNOWN_BOOKING_SOMMON_MEMBER_08f5 = 0x8f5, + ID_CZ_PARTY_RECRUIT_ACK_RECALL = 0x8f7, + ID_CZ_PARTY_RECRUIT_REFUSE_VOLUNTEER = 0x8f9, + ID_CZ_PARTY_RECRUIT_CANCEL_VOLUNTEER = 0x8fb, + ID_CZ_REASSEMBLY_AUTH37 = 0x8a8, + ID_CZ_SELECTCART = 0x980, + ID_CZ_REASSEMBLY_AUTH28 = 0x89f, + ID_CZ_REASSEMBLY_AUTH29 = 0x8a0, + ID_CZ_REASSEMBLY_AUTH52 = 0x94a, + ID_CZ_REASSEMBLY_AUTH61 = 0x953, + ID_CZ_REASSEMBLY_AUTH74 = 0x960, + ID_CZ_REQ_WEAR_EQUIP_V5 = 0x998, + ID_CZ_REASSEMBLY_AUTH11 = 0x88e, + ID_CZ_REASSEMBLY_AUTH41 = 0x8ac, + ID_CZ_REASSEMBLY_AUTH67 = 0x959, + ID_CZ_REASSEMBLY_AUTH54 = 0x94c, + ID_CZ_REASSEMBLY_AUTH56 = 0x94e, + ID_CZ_REASSEMBLY_AUTH05 = 0x888, + ID_CZ_REASSEMBLY_AUTH49 = 0x947, + ID_CZ_REASSEMBLY_AUTH68 = 0x95a, + ID_CZ_REASSEMBLY_AUTH46 = 0x944, + ID_CZ_REASSEMBLY_AUTH45 = 0x943, + ID_CZ_REASSEMBLY_AUTH76 = 0x962, + ID_CZ_REASSEMBLY_AUTH70 = 0x95c, + ID_CZ_REASSEMBLY_AUTH72 = 0x95e, + ID_CZ_REASSEMBLY_AUTH32 = 0x8a3, + ID_CZ_REASSEMBLY_AUTH78 = 0x964, + ID_CZ_REASSEMBLY_AUTH69 = 0x95b, + ID_CZ_REASSEMBLY_AUTH60 = 0x952, + ID_CZ_REASSEMBLY_AUTH38 = 0x8a9, + ID_CZ_REASSEMBLY_AUTH58 = 0x950, + ID_CZ_REASSEMBLY_AUTH79 = 0x965, + ID_CZ_REASSEMBLY_AUTH59 = 0x951, + ID_CZ_REASSEMBLY_AUTH18 = 0x895, + ID_CZ_REASSEMBLY_AUTH36 = 0x8a7, + ID_CZ_REASSEMBLY_AUTH65 = 0x957, + ID_CZ_REASSEMBLY_AUTH43 = 0x941, + ID_CZ_REASSEMBLY_AUTH66 = 0x958, + ID_CZ_REASSEMBLY_AUTH64 = 0x956, + ID_CZ_REASSEMBLY_AUTH57 = 0x94f, + ID_CZ_REASSEMBLY_AUTH44 = 0x942, + ID_CZ_REASSEMBLY_AUTH55 = 0x94d, + ID_CZ_REASSEMBLY_AUTH17 = 0x894, + ID_CZ_REASSEMBLY_AUTH09 = 0x88c, + ID_CZ_REASSEMBLY_AUTH12 = 0x88f, + ID_CZ_OPEN_BARGAIN_SALE_TOOL = 0x9b4, + ID_CZ_REQ_OPEN_GUILD_STORAGE = 0x9ba, + ID_CZ_CLOSE_BARGAIN_SALE_TOOL = 0x9bc, + ID_CZ_REQ_CLOSE_GUILD_STORAGE = 0x9be, + ID_CZ_REQ_COUNT_BARGAIN_SALE_ITEM = 0x9c3, + ID_CZ_REASSEMBLY_AUTH73 = 0x95f, + ID_CZ_REASSEMBLY_AUTH33 = 0x8a4, + ID_CZ_REASSEMBLY_AUTH19 = 0x896, + ID_CZ_ITEM_CREATE_EX = 0x9ce, + ID_CZ_NPROTECTGAMEGUARDCSAUTH = 0x9d0, + ID_CZ_NPC_TRADE_QUIT = 0x9d4, + ID_CZ_NPC_MARKET_CLOSE = 0x9d8, + ID_CZ_REQ_GUILDSTORAGE_LOG = 0x9d9, + ID_CZ_MOVE_ITEM_FROM_BODY_TO_GUILDSTORAGE = 0x9e1, + ID_CZ_MOVE_ITEM_FROM_GUILDSTORAGE_TO_BODY = 0x9e2, + ID_CZ_MOVE_ITEM_FROM_CART_TO_GUILDSTORAGE = 0x9e3, + ID_CZ_MOVE_ITEM_FROM_GUILDSTORAGE_TO_CART = 0x9e4, + ID_CZ_OPEN_RODEXBOX = 0xac0, + ID_CZ_CLOSE_RODEXBOX = 0x9e9, + ID_CZ_REQ_NEXT_RODEX = 0x9ee, + ID_CZ_REQ_READ_RODEX = 0x9ea, + ID_CZ_REQ_REFRESH_RODEX = 0xac1, + ID_CZ_REQ_DELETE_RODEX = 0x9f5, + ID_CZ_REASSEMBLY_AUTH82 = 0x968, + ID_CZ_REASSEMBLY_AUTH83 = 0x969, + ID_CZ_REASSEMBLY_AUTH51 = 0x949, + ID_CZ_REQ_SEND_RODEX = 0xa6e, + ID_CZ_REQ_ZENY_FROM_RODEX = 0x9f1, + ID_CZ_REQ_ITEM_FROM_RODEX = 0x9f3, + ID_CZ_PET_EVOLUTION = 0x9fb, + ID_CZ_SHORTCUTKEYBAR_ROTATE = 0xa01, + ID_CZ_REQ_CANCEL_WRITE_RODEX = 0xa03, + ID_CZ_REQ_ADD_ITEM_RODEX = 0xa04, + ID_CZ_REQ_REMOVE_RODEX_ITEM = 0xa06, + ID_CZ_REQ_OPEN_WRITE_RODEX = 0xa08, + ID_CZ_CHECK_RECEIVE_CHARACTER_NAME = 0xa13, + ID_CZ_REQ_OPEN_ROULETTE = 0xa19, + ID_CZ_REQ_ROULETTE_INFO = 0xa1b, + ID_CZ_REQ_CLOSE_ROULETTE = 0xa1d, + ID_CZ_REQ_GENERATE_ROULETTE = 0xa1f, + ID_CZ_RECV_ROULETTE_ITEM = 0xa21, + ID_CZ_REQ_ACH_REWARD = 0xa25, + ID_CZ_ACK_AU_BOT = 0xa2a, + ID_CZ_REQ_CHANGE_TITLE = 0xa2e, + ID_CZ_REQ_ONECLICK_ITEMIDENTIFY = 0xa35, + ID_CZ_OFFLINE_STORE_CREATE = 0xa7f, + ID_ZC_SPECIALEFFECT = 0x1f3, + ID_ZC_NOTIFY_PLAYERCHAT = 0x8e, + ID_ZC_BATTLEFIELD_CHAT = 0x2dc, + ID_ZC_ALLY_CHAT = 0xbde, + ID_REPLAY_WINDOW_RESPONSE = 0x8ae, +}; + +#endif From e426bd95cc0084f0c4f90dfc0ead142c65a1dc1c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 12:02:29 +0100 Subject: [PATCH 62/62] =?UTF-8?q?=F0=9F=94=A5=20refactor(ItemNaming):=20re?= =?UTF-8?q?moved=20unused=20cstdio=20include?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/Contents/Items/ItemNaming.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Contents/Items/ItemNaming.cpp b/Source/Contents/Items/ItemNaming.cpp index 70df50b..ac366a2 100644 --- a/Source/Contents/Items/ItemNaming.cpp +++ b/Source/Contents/Items/ItemNaming.cpp @@ -3,7 +3,6 @@ #include "Contents/MessageTable.h" #include "Contents/PlayerNameDictionary.h" -#include #include #include