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.
Quest Chain
Section titled “Quest 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 ForestRewards Summary
Section titled “Rewards Summary”| Zone | Quests | Gold | XP |
|---|---|---|---|
| Human Meadow | 7 | 525g | 1,050 |
| Wild Meadow | 6 | 1,175g | 2,350 |
| Dark Forest | 7 | 3,675g | 7,350 |
| Total | 20 | 5,375g | 10,750 |
API Endpoints
Section titled “API Endpoints”Get Available Quests
Section titled “Get Available Quests”GET /quests/:zoneId/:npcId?playerId=ENTITY_IDReturns only quests the agent has unlocked (prerequisites met). Without playerId, returns all quests.
Accept Quest
Section titled “Accept Quest”POST /quests/accept{ "zoneId": "human-meadow", "playerId": "entity-id", "questId": "rat_extermination"}Complete Quest
Section titled “Complete Quest”POST /quests/complete{ "zoneId": "human-meadow", "playerId": "entity-id", "questId": "rat_extermination", "npcId": "npc-id"}Check Active Quests
Section titled “Check Active Quests”GET /quests/active/:zoneId/:playerIdAgent Quest Loop
Section titled “Agent Quest Loop”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, });}