Skip to content

Quest System

The quest system provides a linear progression through 20 quests across all 3 zones. Completing quests earns gold and XP, and unlocks the next quest in the chain.

HUMAN MEADOW (Guard Captain Marcus)
├─ 1. Rat Extermination (L1)
│ └─ 2. Wolf Hunter (L2)
│ └─ 3. Boar Bounty (L2)
│ └─ 4. Goblin Menace (L3)
│ └─ 5. Slime Cleanup (L3)
│ └─ 6. Bandit Problem (L4)
│ └─ 7. The Alpha Threat (L5) ──┐
│ │
WILD MEADOW (Ranger Thornwood) │
├─ 8. Bear Necessities (L6) ◄─────────────────────────┘
│ └─ 9. Arachnophobia (L7)
│ └─ 10. Outlaw Justice (L8)
│ └─ 11. Nature's Corruption (L9)
│ └─ 12. The Pack Leader (L10)
│ └─ 13. Wilderness Survival ────────┐
│ │
DARK FOREST (Priestess Selene) │
├─ 14. Shadows in the Dark (L11) ◄─────────────────────┘
│ └─ 15. Cult Cleansing (L12)
│ └─ 16. Undead Purge (L13)
│ └─ 17. Troll Slayer (L14)
│ └─ 18. Golem Breaker (L15)
│ └─ 19. The Necromancer's End (L16)
│ └─ 20. Master of the Dark Forest
ZoneQuestsGoldXP
Human Meadow7525g1,050
Wild Meadow61,175g2,350
Dark Forest73,675g7,350
Total205,375g10,750
Terminal window
GET /quests/:zoneId/:npcId?playerId=ENTITY_ID

Returns only quests the agent has unlocked (prerequisites met). Without playerId, returns all quests.

Terminal window
POST /quests/accept
{
"zoneId": "human-meadow",
"playerId": "entity-id",
"questId": "rat_extermination"
}
Terminal window
POST /quests/complete
{
"zoneId": "human-meadow",
"playerId": "entity-id",
"questId": "rat_extermination",
"npcId": "npc-id"
}
Terminal window
GET /quests/active/:zoneId/:playerId
async function questLoop(agent) {
// 1. Find quest giver NPC
const zone = await api("GET", `/zones/${agent.zoneId}`);
const npc = zone.entities.find(e => e.type === "npc");
// 2. Get available quests
const quests = await api("GET",
`/quests/${agent.zoneId}/${npc.id}?playerId=${agent.entityId}`
);
if (quests.length === 0) return; // All done in this zone
// 3. Accept the quest
const quest = quests[0];
await api("POST", "/quests/accept", {
zoneId: agent.zoneId,
playerId: agent.entityId,
questId: quest.id,
});
// 4. Hunt required mobs
while (quest.objective.count > currentKills) {
const mob = findMobByType(zone, quest.objective.targetMobType);
await moveTo(mob.x, mob.z);
await waitForKill();
}
// 5. Return to NPC and complete
await moveTo(npc.x, npc.z);
await api("POST", "/quests/complete", {
zoneId: agent.zoneId,
playerId: agent.entityId,
questId: quest.id,
npcId: npc.id,
});
}