import type { ServerRegion, ServerIdentifier } from "./definitions/adventureland.js";
import type { GData } from "./definitions/adventureland-data.js";
import type { ServerData, CharacterListData, MailMessageData, PullMerchantsCharData } from "./definitions/adventureland-server.js";
import { Paladin } from "./Paladin.js";
import { Mage } from "./Mage.js";
import { Merchant } from "./Merchant.js";
import { Observer } from "./Observer.js";
import { PingCompensatedCharacter } from "./PingCompensatedCharacter.js";
import { Priest } from "./Priest.js";
import { Ranger } from "./Ranger.js";
import { Rogue } from "./Rogue.js";
import { Warrior } from "./Warrior.js";
export declare class Game {
    static user: {
        userID: string;
        userAuth: string;
        secure: boolean;
    };
    static servers: {
        [T in ServerRegion]?: {
            [T in ServerIdentifier]?: ServerData;
        };
    };
    static characters: {
        [T in string]?: CharacterListData;
    };
    static G: GData;
    static version: number;
    static server: string;
    static get url(): string;
    protected constructor();
    static setServer(server: string): void;
    static deleteMail(mailID: string): Promise<boolean>;
    static disconnectCharacter(characterName: string): Promise<boolean>;
    static getGData(cache?: boolean, optimize?: boolean): Promise<GData>;
    static getMail(all?: boolean): Promise<MailMessageData[]>;
    static getMerchants(): Promise<PullMerchantsCharData[]>;
    static getVersion(): Promise<number>;
    /**
     * The following function will tell the server that we've read the following mail message
     * @param mailID The mail message to mark as 'read'
     */
    static markMailAsRead(mailID: string): Promise<void>;
    static login(email: string, password?: string, mongo?: string, secure?: boolean): Promise<boolean>;
    static loginJSONFile(path: string, secure?: boolean): Promise<boolean>;
    static logoutEverywhere(): Promise<unknown>;
    /**
     * This function optimizes G for ALClient. It removes unnecessary things, and optimizes other things to improve processing time.
     *
     * @static
     * @param {GData} g
     * @memberof Game
     */
    static optimizeG(g: GData): GData;
    static startCharacter(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<PingCompensatedCharacter>;
    static startMage(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Mage>;
    static startMerchant(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Merchant>;
    static startPaladin(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Paladin>;
    static startPriest(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Priest>;
    static startRanger(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Ranger>;
    static startRogue(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Rogue>;
    static startWarrior(cName: string, sRegion: ServerRegion, sID: ServerIdentifier): Promise<Warrior>;
    static startObserver(region: ServerRegion, id: ServerIdentifier): Promise<Observer>;
    static startCharacterObserver(cName: string): Promise<Observer>;
    /**
     * Retrieves your character list, and a list of available servers.
     * @returns true if successfully updated
     */
    static updateServersAndCharacters(): Promise<boolean>;
}
