/// <reference types="node" />
import { AchievementProgressData, CharacterData, ServerData, ActionData, ChestOpenedData, ChestData, EntitiesData, GameResponseData, PartyData, WelcomeData, TrackerData } from "./definitions/adventureland-server";
import { BankInfo, ItemInfo, SlotType, SInfo, IPosition, TradeSlotType, CharacterType, SlotInfo, StatusInfo } from "./definitions/adventureland";
import { NodeData } from "./definitions/pathfinder";
import { Observer } from "./Observer";
import { Entity } from "./Entity";
import { Player } from "./Player";
import { BankPackName, DamageType, EmotionName, GData2, ItemName, MapName, MonsterName, NPCName, SkillName } from "./definitions/adventureland-data";
export declare class Character extends Observer implements CharacterData {
    protected userID: string;
    protected userAuth: string;
    protected characterID: string;
    protected lastPositionUpdate: number;
    protected pingNum: number;
    protected pingMap: Map<string, {
        log: boolean;
        time: number;
    }>;
    protected timeouts: Map<string, NodeJS.Timeout>;
    achievements: Map<string, AchievementProgressData>;
    bank: BankInfo;
    chests: Map<string, ChestData>;
    entities: Map<string, Entity>;
    nextSkill: Map<SkillName, Date>;
    partyData: PartyData;
    pings: number[];
    players: Map<string, Player>;
    projectiles: Map<string, ActionData & {
        date: Date;
    }>;
    server: WelcomeData;
    S: SInfo;
    afk: string;
    age: number;
    apiercing: number;
    blast: number;
    controller: string;
    x: number;
    y: number;
    map: MapName;
    in: MapName;
    name: string;
    id: string;
    ctype: CharacterType;
    abs: boolean;
    angle: number;
    armor: number;
    attack: number;
    c: any;
    cid: number;
    cx: any;
    damage_type: DamageType;
    focus?: string;
    frequency: number;
    going_x: number;
    going_y: number;
    gold: number;
    hp: number;
    level: number;
    m: number;
    mp_cost: number;
    max_hp: number;
    max_mp: number;
    move_num: number;
    moving: boolean;
    mp: number;
    npc?: string;
    owner: string;
    party?: string;
    pdps: number;
    q: {
        compound?: {
            len: number;
            ms: number;
            num: number;
            nums: number[];
        };
        upgrade?: {
            len: number;
            ms: number;
            num: number;
        };
        exchange?: {
            len: number;
            ms: number;
        };
    };
    range: number;
    resistance: number;
    rip: boolean;
    rpiercing: number;
    s: StatusInfo;
    skin: string;
    slots: SlotInfo;
    speed: number;
    stand?: boolean | "cstand" | "stand0";
    tp: boolean;
    emx: {
        [T in EmotionName]?: number;
    };
    explosion: number;
    firesistance: number;
    fzresistance: number;
    mp_reduction: number;
    pnresistance: number;
    stun: number;
    int: number;
    str: number;
    dex: number;
    vit: number;
    for: number;
    max_xp: number;
    goldm: number;
    xpm: number;
    xp: number;
    luckm: number;
    isize: number;
    esize: number;
    cash: number;
    targets: number;
    target?: string;
    evasion: number;
    miss: number;
    reflection: number;
    lifesteal: number;
    manasteal: number;
    crit: number;
    critdamage: number;
    dreturn: number;
    tax: number;
    xrange: number;
    items: ItemInfo[];
    cc: number;
    ipass?: string;
    friends?: any;
    acx?: any;
    xcx?: string[];
    hitchhikers?: [string, any][];
    user?: BankInfo;
    fear: number;
    courage: number;
    mcourage: number;
    pcourage: number;
    constructor(userID: string, userAuth: string, characterID: string, g: GData2, serverData: ServerData);
    protected updateLoop(): void;
    updateCharacter(data: CharacterData): void;
    protected parseEntities(data: EntitiesData): Promise<void>;
    protected parseGameResponse(data: GameResponseData): void;
    protected setNextSkill(skill: SkillName, next: Date): void;
    protected updatePositions(): void;
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    requestEntitiesData(): Promise<EntitiesData>;
    requestPlayerData(): Promise<CharacterData>;
    sendPing(log?: boolean): string;
    acceptMagiport(name: string): Promise<NodeData>;
    acceptPartyInvite(id: string): Promise<PartyData>;
    acceptPartyRequest(id: string): Promise<PartyData>;
    basicAttack(id: string): Promise<string>;
    buy(itemName: ItemName, quantity?: number): Promise<number>;
    buyFromMerchant(id: string, slot: TradeSlotType, rid: string, quantity?: number): Promise<void>;
    buyFromPonty(item: ItemInfo): unknown;
    calculateItemCost(item: ItemInfo): number;
    calculateItemGrade(item: ItemInfo): number;
    canBuy(item: ItemName): boolean;
    canCraft(itemToCraft: ItemName): boolean;
    canKillInOneShot(entity: Entity): boolean;
    canUse(skill: SkillName, options?: {
        checkCooldown?: boolean;
        checkEquipped?: boolean;
    }): boolean;
    compound(item1Pos: number, item2Pos: number, item3Pos: number, cscrollPos: number, offeringPos?: number): Promise<boolean>;
    craft(item: ItemName): Promise<void>;
    depositGold(gold: number): unknown;
    depositItem(inventoryPos: number, bankPack?: BankPackName, bankSlot?: number): unknown;
    emote(emotionName: EmotionName): Promise<void>;
    equip(inventoryPos: number, equipSlot?: SlotType): Promise<void>;
    exchange(inventoryPos: number): Promise<void>;
    finishMonsterHuntQuest(): void;
    getMonsterHuntQuest(): Promise<void>;
    getPontyItems(): Promise<ItemInfo[]>;
    getTrackerData(): Promise<TrackerData>;
    isFull(): boolean;
    isScared(): boolean;
    leaveMap(): Promise<void>;
    leaveParty(): void;
    move(x: number, y: number, safetyCheck?: boolean): Promise<NodeData>;
    openChest(id: string): Promise<ChestOpenedData>;
    regenHP(): Promise<void>;
    regenMP(): Promise<void>;
    respawn(): void;
    scare(): Promise<string[]>;
    sell(itemPos: number, quantity?: number): Promise<void>;
    sendCM(to: string[], message: unknown): Promise<void>;
    sendGold(to: string, amount: number): Promise<number>;
    sendItem(to: string, inventoryPos: number, quantity?: number): Promise<void>;
    sendPartyInvite(id: string): void;
    sendPartyRequest(id: string): void;
    protected lastSmartMove: number;
    smartMove(to: MapName | MonsterName | NPCName | IPosition, options?: {
        avoidTownWarps?: boolean;
        getWithin?: number;
        useBlink?: boolean;
    }): Promise<NodeData>;
    stopSmartMove(): Promise<NodeData>;
    stopWarpToTown(): void;
    takeMailItem(mailID: string): Promise<void>;
    throwSnowball(target: string, snowball?: number): Promise<string>;
    transport(map: MapName, spawn: number): Promise<void>;
    unequip(slot: SlotType | TradeSlotType): Promise<void>;
    upgrade(itemPos: number, scrollPos: number, offeringPos?: number): Promise<boolean>;
    useHPPot(itemPos: number): Promise<void>;
    useMPPot(itemPos: number): Promise<void>;
    warpToJail(): Promise<NodeData>;
    warpToTown(): Promise<NodeData>;
    withdrawGold(gold: number): unknown;
    withdrawItem(bankPack: BankPackName, bankPos: number, inventoryPos?: number): unknown;
    countItem(item: ItemName, inventory?: ItemInfo[], filters?: {
        levelGreaterThan?: number;
        levelLessThan?: number;
    }): number;
    getCooldown(skill: SkillName): number;
    getNearestMonster(mtype?: MonsterName): {
        monster: Entity;
        distance: number;
    };
    getNearestAttackablePlayer(): {
        player: Player;
        distance: number;
    };
    hasPvPMarkedItem(inv?: ItemInfo[]): boolean;
    hasItem(iN: ItemName, inv?: ItemInfo[], args?: {
        level?: number;
        levelGreaterThan?: number;
        levelLessThan?: number;
        locateHighestLevel?: number;
        quantityGreaterThan?: number;
    }): boolean;
    isEquipped(itemName: ItemName): boolean;
    isOnCooldown(skill: SkillName): boolean;
    isPVP(): boolean;
    locateDuplicateItems(inventory?: ItemInfo[]): {
        [T in ItemName]?: number[];
    };
    locateItem(itemName: ItemName, inventory?: ItemInfo[], filters?: {
        level?: number;
        levelGreaterThan?: number;
        levelLessThan?: number;
        quantityGreaterThan?: number;
    }): number;
    locateItems(itemName: ItemName, inventory?: ItemInfo[], filters?: {
        level?: number;
        levelGreaterThan?: number;
        levelLessThan?: number;
        quantityGreaterThan?: number;
    }): number[];
    locateMonster(mType: MonsterName): NodeData[];
    locateNPCs(npcID: NPCName): NodeData[];
}
