Project1998 · Tester Reference

The Quest Registry

Every persistent quest key a character can carry and every legend mark with the internal key it answers to — the companion sheet to @quest and @legend. Compiled from the server code and npc_dialog.lua; when this sheet and the code disagree, the code wins.

Character.Quests

string → int. Stage machines, flags, counters, kill snapshots and unix timers — one flat map. “Stage”, “reg” and “counter” in code are all this store.

Character.QuestStrings

string → string. The rare string-valued selections: the active minor quest, the mentor's name.

Character.Legends

Profile-window marks. The client only sees the text; the hidden Name key is what quests gate on, and adding is replace-by-key.

Character.Kills / KillTrack

Lifetime kills per mob (quests read a delta against a snapshot) and the 8-slot track the mythic alliances count.

Most chains gate on the legend, not the stage. Clearing only the stage usually re-tests nothing — the door or NPC checks the mark. A full reset is: clear the legend(s), zero the stage key(s), remove any leftover quest item.

@quest

  • bare — dump every key you carry, both maps
  • @quest <key> — read one
  • @quest <key> <n> — set it (0 removes the entry)
  • a non-numeric value writes the string registry

@legend

  • bare — list marks as key: "text" (icon, color)
  • @legend <key> 0 — remove one
  • @legend <key> <icon> <color> <text...> — (re)create, replace-by-key
  • color 128 is the usual white; 0 renders invisible

Recipe: re-run the Leviathan quest

@legend leviathan_freed 0
@quest leviathan 0

Dae-Whan treats you as new and hands out a fresh talisman (remove a leftover one first — it can't be dropped, so bank it or ask a GM). To jump straight to the finished state: @quest leviathan 3 plus @legend leviathan_freed 7 128 Freed Leviathan (Yuri 1, Winter). Purpose-built shortcuts still exist: @dog, @sage, @carnage, @killtrack.

Quest keys

stage machine (0 = untouched) · flag 0/1 · counter accumulates · snapshot kill count captured at accept-time (completion checks the delta) · timer unix seconds.

Legend marks

@legend <key> <icon> <color> <text...> recreates any of these. “Never removed” means no code path removes it — @legend <key> 0 always can.

Footnotes

  1. Double-duty strings. dog_linguist, mentored and minor_quests_completed are each both a registry key and a legend name. Different stores, so no collision — but a reset must hit both (@quest dog_linguist 0 and @legend dog_linguist 0).
  2. Read but never written (safe to ignore; listed so nobody hunts for a granter): visited_yon_and_weaved, the three craft_* skill counters, the greater_alliance_* and smelting/gemcutting-specialisation legends.
  3. Not character quest state, despite the look: Era.* names are server-wide era flags from EraFeatures.csv; chin_baek_ho_ryung / chung_ryongs_rage_ac are timed-effect status keys; fox_charm is an item. The lifetime-total kill counter is Character.Kills[" total"] (leading space, so no mob key can collide).
  4. The armor-chain legends are code-defined (ArmorQuest.cs), not CSV columns — ArmorQuests.csv holds only the Path/Tier/Level/Karma gates.

Source of truth: docs/common/Quest-Registry.md in the repository, compiled 2026-08-28. Both @quest and @legend are Tester-tier. The full command roster lives on The @Command Scroll.