Game Data¶
The SDK gives you full access to all public game data — monsters,
items, resources, maps, achievements, effects, and more. All of
these are available through client.* and don’t require your
character to be anywhere specific.
Monsters¶
# Get info on a specific monster
chicken = client.monsters.get("chicken")
print(f"{chicken.name} — Level {chicken.level} — HP {chicken.hp}")
# Browse all monsters
# Parameters: min_level, max_level, name, drop, page, size
monsters = client.monsters.get_all(min_level=1, max_level=10, size=10)
for m in monsters.data:
print(f"{m.name} lv{m.level} HP={m.hp}")
# Find monsters that drop a specific item
monsters = client.monsters.get_all(drop="feather")
for m in monsters.data:
print(f"{m.name} drops feather")
Items¶
# Get a specific item
item = client.items.get("iron_sword")
print(f"{item.name} — Level {item.level} — {item.type.value}")
# Browse by type
# Parameters: min_level, max_level, name, type, craft_skill, craft_material, page, size
weapons = client.items.get_all(type="weapon", min_level=1, max_level=10)
for w in weapons.data:
print(f"{w.name} (lv{w.level})")
# Search by craft skill
cooking_items = client.items.get_all(craft_skill="cooking")
for item in cooking_items.data:
print(f"{item.name} — crafted with cooking lv{item.craft.level}")
# Search by craft material
copper_items = client.items.get_all(craft_material="copper")
for item in copper_items.data:
print(f"{item.name} uses copper")
Resources¶
Resources are gathering nodes on the map (trees, rocks, fish, etc.).
# Get a specific resource
copper_rocks = client.resources.get("copper_rocks")
print(f"{copper_rocks.code} — {copper_rocks.skill.value} lv{copper_rocks.level}")
# Browse all resources
# Parameters: min_level, max_level, skill, drop, page, size
resources = client.resources.get_all(skill="mining")
for r in resources.data:
print(f"{r.code} — mining lv{r.level}")
# Filter by level range
resources = client.resources.get_all(min_level=1, max_level=10)
for r in resources.data:
print(f"{r.code} — {r.skill.value} lv{r.level}")
# Find resources that drop a specific item
resources = client.resources.get_all(drop="copper_ore")
for r in resources.data:
print(f"{r.code} drops copper_ore")
Maps¶
# Browse all tiles
# Parameters: layer, content_type, content_code, hide_blocked_maps, page, size
maps = client.maps.get_all(content_type="monster", size=10)
for m in maps.data:
print(f"({m.x},{m.y}) — {m.content.code}")
# Filter by layer (overworld, underground, interior)
underground = client.maps.get_layer("underground", size=10)
for m in underground.data:
print(f"({m.x},{m.y}) — {m.content.code if m.content else 'empty'}")
# Get a specific tile
tile = client.maps.get_by_position("overworld", 0, 1)
print(f"Tile ({tile.x},{tile.y}): {tile.content.code if tile.content else 'empty'}")
# Get by map ID
tile = client.maps.get_by_id(42)
# Find all workshops
workshops = client.maps.get_all(content_type="workshop")
for m in workshops.data:
print(f"Workshop at ({m.x},{m.y}) — {m.content.code}")
# Find all banks
banks = client.maps.get_all(content_type="bank")
for b in banks.data:
print(f"Bank at ({b.x},{b.y})")
Achievements¶
# Browse all achievements
# Parameters: type, page, size
achievements = client.achievements.get_all()
for a in achievements.data:
print(f"{a.code} — {a.name} ({a.type.value})")
# Filter by type
combat_achievements = client.achievements.get_all(type="combat_kill")
for a in combat_achievements.data:
print(f"{a.code}: {a.description}")
# Get a specific achievement
ach = client.achievements.get("kill_100_chickens")
print(f"{ach.name} — {ach.description}")
Badges¶
# Browse all badges
# Parameters: page, size
badges = client.badges.get_all()
for b in badges.data:
print(f"{b.code} — {b.description}")
# Get a specific badge
badge = client.badges.get("some_badge_code")
print(f"{badge.code}")
Effects¶
# Browse all effects
# Parameters: page, size
effects = client.effects.get_all()
for e in effects.data:
print(f"{e.code} — {e.name} ({e.type.value})")
# Get a specific effect
effect = client.effects.get("fire_attack_boost")
print(f"{effect.name}: {effect.description}")
NPCs¶
# Browse all NPCs
# Parameters: name, type, currency, item, page, size
npcs = client.npcs.get_all()
for npc in npcs.data:
print(f"{npc.name} ({npc.code}) — {npc.type.value}")
# Get a specific NPC
npc = client.npcs.get("merchant_1")
print(f"{npc.name}")
# See what items an NPC sells
npc = client.npcs.get("merchant_1")
for item in npc.items:
print(f"{item.code} — buy: {item.buy_price}g / sell: {item.sell_price}g ({item.currency})")
# Filter NPCs by currency
gold_npcs = client.npcs.get_all(currency="gold")
# Filter NPCs that trade a specific item
npcs_with_item = client.npcs.get_all(item="copper_ore")
Tasks (Static Data)¶
View available task definitions and rewards (not your active task — see Tasks for that).
# Browse all task definitions
# Parameters: min_level, max_level, skill, type, page, size
tasks = client.tasks.get_all()
for t in tasks.data:
print(f"{t.code} — {t.type.value} lv{t.level}")
# Get a specific task
task = client.tasks.get("kill_chickens")
print(f"{task.code} — {task.type.value}")
# Browse task rewards
# Parameters: page, size
rewards = client.tasks.get_all_rewards()
for r in rewards.data:
print(f"{r.code}")
# Get a specific reward
reward = client.tasks.get_reward("basic_reward")
Leaderboard¶
# Top characters by combat level
# Character parameters: sort, name, page, size
top = client.leaderboard.get_characters(sort="combat", size=10)
for c in top.data:
print(f"#{c.position} {c.name} — lv{c.level}")
# Top characters by a specific skill
miners = client.leaderboard.get_characters(sort="mining", size=10)
for c in miners.data:
print(f"#{c.position} {c.name} — mining lv{c.level}")
# Search by name
result = client.leaderboard.get_characters(name="MyChar")
# Top accounts
# Account parameters: sort, name, page, size
accounts = client.leaderboard.get_accounts(sort="achievements_points", size=10)
for a in accounts.data:
print(f"#{a.position} {a.account}")
Pagination¶
All get_all methods return a DataPage object with pagination:
page = client.items.get_all(size=50, page=1)
print(f"Total items: {page.total}")
print(f"Page {page.page} of {page.pages}")
print(f"Items on this page: {len(page.data)}")
# Loop through all pages
all_items = []
current_page = 1
while True:
result = client.items.get_all(size=50, page=current_page)
all_items.extend(result.data)
if current_page >= result.pages:
break
current_page += 1
print(f"Fetched {len(all_items)} items total")