import { State, Trigger } from "../../utils/deepProxy" import { KeyCodes } from "./keycodes" import { AttackReason, PlayerFeedback } from "./playerFeedbacks" type Vector3 = [x: number, y: number, z: number] type Rotation = [pitch: number, yaw: number, roll: number] type Vehicle = { tag: string localizedName: string localizedShortName: string level: number class: string role: string } type Skill = { tag: string level: number } type Tankman = { efficiencyRoleLevel: number vehicleTag: string roles: string[] skills: Skill[] isFemale: boolean } type AimingMode = 'arcade' | 'strategic' | 'arty' | 'sniper' | 'postmortem' | 'debug' | 'video' | 'mapcase' | 'arcadeMapcase' | 'epicMapcase' | 'respawn' | 'deathfreecam' | 'dualgun' | 'arcadeEpicMinefieldMapcase' | 'killcam' | 'vehiclesSelection' | 'twinGun' | 'lookAtKiller' export type VehicleWithOwner = Vehicle & { playerName: string playerId: number team: number } export interface WidgetsSdkData { keyboard: { onAnyKey: Trigger<{ isKeyDown: boolean, key: KeyCodes }> } & { [key in KeyCodes]: State } game: { language: State region: State version: State server: State state: State<'loading' | 'login' | 'hangar' | 'battle'> serverTime: State fps: State ping: State isInReplay: State dataProviderVersion: State } player: { name: State id: State clanId: State clanTag: State } account: { credits: State gold: State crystal: State freeXp: State premium: State<{ basic: { active: boolean, expiration: number } plus: { active: boolean, expiration: number } vip: { active: boolean, expiration: number } }> } platoon: { isInPlatoon: State maxSlots: State commander: State slots: State<({ name: string clanTag: string dbid: number rating: number timeJoin: number isOffline: boolean vehicle: Vehicle | null isReady: boolean } | null)[]> } hangar: { isInHangar: State battleMode: State isInQueue: State onEnqueue: Trigger onDequeue: Trigger vehicle: { info: State xp: State crew: State optDevices: State<{ tag: string | null specialization: string | null }[]>, shells: State<{ tag: string, count: number }[]> consumables: State<(string | null)[]> boosters: State<(string | null)[]> isBroken: State isInBattle: State postProgression: State<{ level: number features: { optSwitchEnabled: boolean, shellsSwitchEnabled: boolean, } unlockedModifications: (string | null)[] selectedModifications: (string | null)[] modifications: string[][] }> } } battle: { isInBattle: State period: State<{ tag: string endTime: number length: number }> arenaId: State arena: State<{ tag: string localizedName: string mode: string gameplay: string team: number }> vehicle: State health: State maxHealth: State isAlive: State position: State rotation: State velocity: State<[linear: number, angular: number]> turretYaw: State turretRotationSpeed: State gunPitch: State aiming: { isAutoAim: State isServerAim: State idealDispersion: State serverDispersion: State clientDispersion: State aimingTime: State aimingMode: State } efficiency: { damage: State assist: State blocked: State stun: State } teamBases: State<{ [key: string]: { baseID: number points: number timeLeft: number invadersCount: number capturingStopped: boolean }[] }> onDamage: Trigger<{ target: VehicleWithOwner | null, attacker: VehicleWithOwner | null, damage: number, health: number, reason: AttackReason }> onPlayerFeedback: Trigger onBattleResult: Trigger } dossier: { current: State<{ vehicleTag?: string movingAvgDamage: number damageRating: number battlesCount: number } | null> } moeInfo: { isAvailable: State current: State<{ vehicleTag: string battleCount: number damageBetterThanNPercent: number[] } | null> } extensions: WidgetsSdkExtensions registeredExtensions: State } declare global { interface WidgetsSdkExtensions { } }