UNPKG

@gw2api/types

Version:

TypeScript types for all datastructures used by the Guild Wars 2 API

336 lines (265 loc) 9.9 kB
import type { SchemaAfter, SchemaVersion } from "../schema"; import type { ItemStack } from "./item"; import type { CraftingDiscipline } from "./recipe"; import type { Profession as ProfessionType } from "./profession"; import type { Race as RaceType } from "./race"; /** * Character info * Required scopes: characters * * @see https://wiki.guildwars2.com/wiki/API:2/characters */ export type Character<Schema extends SchemaVersion = undefined> = // always included. Some of these are `Partial<>` because they are only included with some scopes. This should be typed in the future if the scopes are known... CharacterBackstory & CharacterCore<Schema> & CharacterCrafting & Partial<CharacterEquipment> & Partial<CharacterInventory> & Partial<CharacterRecipes> & Partial<CharacterTraining> & ( // Schema version 2019-12-19T00:00:00.000Z or later, this endpoint will include v2/characters/:id/buildtabs and v2/characters/:id/equipmenttabs and will no longer include v2/characters/:id/skills and v2/characters/:id/specializations Schema extends undefined ? (Partial<CharacterSkills> & Partial<CharacterSpecializations> & Partial<CharacterExtras>): Schema extends SchemaAfter<'2019-12-19T00:00:00.000Z'> | 'latest' ? ({ build_tabs?: CharacterBuildTab[], equipment_tabs?: CharacterEquipmentTab[] } & Partial<CharacterEquipmentTab> & CharacterExtras_2019_12_19) : (Partial<CharacterSkills> & Partial<CharacterSpecializations> & CharacterExtras) ); interface CharacterExtras { /** Trained WvW abilities */ wvw_abilities: { /** Ability id (/v2/wvw/abilities) */ id: number; /** Current rank */ rank: number; }[]; /** PvP Equipment */ equipment_pvp: CharacterPvpEquipment; flags: [] | ['Beta']; } interface CharacterExtras_2019_12_19 { /** Number of build tabs unlocked for this character */ build_tabs_unlocked: number; /** Active build tab index */ active_build_tab: number; /** Number of equipment tabs unlocked for this character */ equipment_tabs_unlocked: number; /** Active equipment tab index */ active_equipment_tab: number; } /** * Character Backstory * Required scopes: characters * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/backstory */ export interface CharacterBackstory { /** Backstory ids, see /v2/backstory/answers */ backstory: string[] } /** * Character Build Tab * Required scopes: builds, characters * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/buildtabs */ export interface CharacterBuildTab { /** The index of this tab */ tab: number; /** Whether or not this is the tab selected on the character currently */ is_active: boolean; /** Build of the tab */ build: { /** Name of the build */ name: string; /** Profession of the build */ profession: ProfessionType.Id; /** specializations */ specializations: [CharacterSpecializationSelection, CharacterSpecializationSelection, CharacterSpecializationSelection]; /** Selected skills */ skills: CharacterSkillSelection; /** Selected aquatic skills */ aquatic_skills: CharacterSkillSelection; /** Selected legend ids (Revenant only) */ legends?: [string | null, string | null]; /** Selected aquatic legend ids (Revenant only) */ aquatic_legends?: [string | null, string | null]; /** Selected pet ids (ranger only) */ pets?: { /** Selected terrestrial pet ids */ terrestrial: [number | null, number | null] /** Selected aquatic pet ids */ aquatic: [number | null, number | null] } } } /** * Core character info * Requires scopes: characters * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/core */ export type CharacterCore<Schema extends SchemaVersion = undefined> = Schema extends undefined ? CharacterCoreBase : Schema extends SchemaAfter<'2019-02-21T00:00:00.000Z'> | 'latest' ? CharacterCore_2019_02_21 : CharacterCoreBase; interface CharacterCoreBase { /** The characters name */ name: string; /** The characters race */ race: RaceType.Id; /** The characters gender */ gender: Gender; /** The characters profession */ profession: Profession; /** The characters level */ level: number; /** The guild id of the guild this characters is representing */ guild?: string; /** Playtime in seconds */ age: number; /** Creation timestamp (ISO-8601) */ created: string; /** Death counter */ deaths: number; /** Title id of the currently selected title (/v2/titles) */ title?: number; } interface CharacterCore_2019_02_21 extends CharacterCoreBase { /** Last modification timestamp */ last_modified: string; } /** * Crafting disciplines available to the character * Requires scopes: characters * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/crafting */ export interface CharacterCrafting { /** All unlocked crafting disciplines for this character */ crafting: { /** Crafting discipline */ discipline: CraftingDiscipline; /** The crafting level */ rating: number; /** Crafting discipline is currently active */ active: boolean; }[] } /** * Character equipment * Required scopes: builds, characters, inventories * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/equipment */ export interface CharacterEquipment<Schema extends SchemaVersion = undefined> { equipment: CharacterEquipmentEntry<Schema>[] } export type CharacterEquipmentEntry<Schema extends SchemaVersion = undefined> = Schema extends undefined ? CharacterEquipmentEntryBase : Schema extends SchemaAfter<'2019-12-19T00:00:00.000Z'> | 'latest' ? CharacterEquipmentEntry_2019_12_19 : CharacterEquipmentEntryBase; interface CharacterEquipmentEntryBase extends Omit<ItemStack, 'upgrade_slot_indices' | 'count'> { /** The equipment slot in which the item is slotted. */ slot: EquipmentSlot; } interface CharacterEquipmentEntry_2019_12_19 extends Omit<CharacterEquipmentEntryBase, 'slot'> { /** The equipment slot in which the item is slotted. `undefined` if equipment is in an inactive tab. */ slot: EquipmentSlot | undefined; /** Location the item is stored in */ location: 'Equipped' | 'Armory' | 'EquippedFromLegendaryArmory' | 'LegendaryArmory'; /** Which tabs reuse this item */ tabs: number[]; } type EquipmentSlot = 'HelmAquatic' | 'Backpack' | 'Coat' | 'Boots' | 'Gloves' | 'Helm' | 'Leggings' | 'Shoulders' | 'Accessory1' | 'Accessory2' | 'Ring1' | 'Ring2' | 'Amulet' | 'WeaponAquaticA' | 'WeaponAquaticB' | 'WeaponA1' | 'WeaponA2' | 'WeaponB1' | 'WeaponB2' | 'Sickle' | 'Axe' | 'Pick'; /** * Characters equipment template tabs. * Requires scopes: characters, builds * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/equipmenttabs */ export interface CharacterEquipmentTab { /** Tab index */ tab: number; /** Name of the equipment tab */ name: string; /** Whether or not this is the tab selected on the character currently */ is_active: boolean; /** Equipped items */ equipment: Omit<CharacterEquipmentEntry<'2019-12-19T00:00:00.000Z'>, 'tabs'>[]; /** PvP Equipment */ equipment_pvp: CharacterPvpEquipment; } /** * Characters inventory * Requires scopes: characters, inventories * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/inventory */ export interface CharacterInventory { /** The characters bags */ bags: ({ /** THe item id of the bag */ id: number; /** The size of the bag */ size: number; /** The inventory of the bag */ inventory: Array<ItemStack | null> } | null)[] } /** * Recipes unlocked by a character * Requires scopes: characters, inventories * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/recipes */ export interface CharacterRecipes { /** Recipe ids */ recipes: number[] } /** * Skills equipped by a character * Requires scopes: characters, builds * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/skills */ export interface CharacterSkills { /** Equipped skills per gamemode */ skills: Record<'pve' | 'pvp' | 'wvw', CharacterSkillSelection> } export interface CharacterSkillSelection { /** Heal skill id */ heal: number | null; /** Utility skill ids */ utilities: [number | null, number | null, number | null]; /** Elite skill id */ elite: number | null; /** Legend ids (Revenant only) */ legends?: [string | null, string | null]; } /** * Character specializations * Requires scopes: characters, builds * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/specializations */ export interface CharacterSpecializations { specializations: Record<'pve' | 'pvp' | 'wvw', [CharacterSpecializationSelection, CharacterSpecializationSelection, CharacterSpecializationSelection]> } export interface CharacterSpecializationSelection { /** Specializations id */ id: number | null; /** Selected major traits */ traits: [number | null, number | null, number | null]; } /** * Character skill trees * Requires scopes: characters, builds * @see https://wiki.guildwars2.com/wiki/API:2/characters/:id/training */ export interface CharacterTraining { /** Trained skill trees */ training: { /** Skill tree id (/v2/professions training) */ id: number; /** Amount of spent hero points in this skill tree */ spent: number; /** Fully trained */ done: boolean; }[]; } export interface CharacterPvpEquipment { /** Equipped PvP Amulet id (/v2/pvp/amulets) */ amulet: number | null; /** Equipped rune item id */ rune: number | null; /** Equipped sigil item ids */ sigils: [number | null, number | null, number | null, number | null]; } /** @deprecated Use Race.Id instead */ export type Race = RaceType.Id; export type Gender = 'Male' | 'Female'; /** @deprecated Use `Profession.Id` instead */ export type Profession = ProfessionType.Id;