> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/data/quest.md).

# Quest

The classic quest registry. Each row defines one quest variant: which NPC gives it, which classes can take it, the level window, the previous-quest state required, and which of the four quest states this row describes.

## File Location

```
Data/Quest/Quest.txt
```

Loaded once at GameServer startup. Changes require a restart.

## Format

Plain text, whitespace-delimited. The first comment line names the columns. Each row is one quest entry. Multiple rows can share the same `Index` to describe the same quest in different character states (not yet accepted, accepted, finished, cancelled).

Terminated by the literal `end` token.

## Columns

| Column                                         | Type       | Effect                                                                                                                                                                                     |
| ---------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Index`                                        | int        | Quest ID. Referenced by QuestObjective and QuestReward. Valid range 0-199                                                                                                                  |
| `StartType`                                    | int        | Quest start flavor. Only `0` is wired up on the server path: the NPC-initiated start. Other values load but never match during NPC talk                                                    |
| `MonsterClass`                                 | int        | NPC monster class that gives the quest                                                                                                                                                     |
| `CurrentState`                                 | 0-3        | Quest state this row applies to. `0` = not yet accepted, `1` = accepted, `2` = finished, `3` = cancelled. A row is picked when the player's stored state for that quest matches this value |
| `RequireIndex`                                 | int or `*` | Previous quest that must be at `RequireState` before this row matches. `*` means no prerequisite                                                                                           |
| `RequireState`                                 | 0-3 or `*` | Required state of the prerequisite quest. `2` means the prerequisite must be finished                                                                                                      |
| `RequireMinLevel`                              | int or `*` | Minimum character level. `*` disables the check                                                                                                                                            |
| `RequireMaxLevel`                              | int or `*` | Maximum character level. `*` disables the check                                                                                                                                            |
| `DW` / `DK` / `FE` / `MG` / `DL` / `SU` / `RF` | 0, 1, 2    | Per-class gate. `0` = class cannot take this row, `1` = requires base class (ChangeUp 0 or higher), `2` = requires first class change or higher (ChangeUp 1+)                              |

`*` is stored internally as -1 and skips the corresponding check.

## Quest States

The server tracks each quest with a 2-bit field per quest slot inside the character's quest bitmask:

| State value | Meaning                          |
| ----------- | -------------------------------- |
| `0`         | Not yet accepted                 |
| `1`         | Accepted, objectives in progress |
| `2`         | Finished (rewards granted)       |
| `3`         | Cancelled, can be re-accepted    |

## Multi-Row Quests

When the player talks to the NPC, the server walks the quest list and picks the first row where:

* `StartType` is `0`
* `MonsterClass` matches the NPC's class
* The player's stored state for `Index` equals this row's `CurrentState`
* The prerequisite quest is at `RequireState` (if `RequireIndex` is set)
* The player's level is within `RequireMinLevel`..`RequireMaxLevel`
* The player's class column is non-zero and less than or equal to `ChangeUp + 1`

A typical quest therefore has four rows with identical gating but different `CurrentState` values, one per state.

## Cross-File Dependencies

| Attribute              | Related in                                                                                                                           |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `MonsterClass`         | [Monster.xml](/docs/data/monster/monster.md) (NPCs are entries in Monster.xml with NPC flag)                                         |
| `Index`                | [QuestObjective.txt](/docs/data/quest/questobjective.md) requirements and [QuestReward.txt](/docs/data/quest/questreward.md) rewards |
| Per-class availability | [DefaultClassInfo.txt](/docs/data/defaultclassinfo.md) (class indices)                                                               |
| Quest XP bonus         | [Common.dat](/docs/gameserver/common-dat.md#experience-settings) `AddQuestExperienceRate_AL0-3`                                      |
| NPC spawn locations    | [MonsterSetBase/](/docs/data/monster/monstersetbase.md) and [MapManager](/docs/data/mapmanager.md)                                   |

## Common Issues

* **Quest not offered despite meeting gates** - the prerequisite quest is not at the required state; check the chain upstream
* **NPC offers the same quest twice** - two rows with the same `Index`, `MonsterClass`, and `CurrentState`; remove one
* **Quest invisible for a class** - that class's column is `0`, or the column value is higher than the character's `ChangeUp + 1`
* **Level window too tight** - `RequireMaxLevel` is lower than the practical play level; the NPC silently skips the row
* **Quest advances out of order** - `RequireIndex` points at a later quest; the chain must reflect the intended progression
