// CGameObject subclasses, one file each (see ./gameobject/)
/// <reference path="gameobject/CActor.d.ts" />
/// <reference path="gameobject/CInventoryOwner.d.ts" />
/// <reference path="gameobject/CInventoryBox.d.ts" />
/// <reference path="gameobject/CCustomOutfit.d.ts" />
/// <reference path="gameobject/CHelmet.d.ts" />
/// <reference path="gameobject/CArtefact.d.ts" />
/// <reference path="gameobject/CWeaponAmmo.d.ts" />
/// <reference path="gameobject/CWeapon.d.ts" />
/// <reference path="gameobject/CWeaponMagazined.d.ts" />
/// <reference path="gameobject/CWeaponMagazinedWGrenade.d.ts" />
/// <reference path="gameobject/CEatableItem.d.ts" />
/// <reference path="gameobject/CBottleItem.d.ts" />
/// <reference path="gameobject/CHelicopter.d.ts" />
/// <reference path="gameobject/CHangingLamp.d.ts" />
/// <reference path="gameobject/CZoneCampfire.d.ts" />
/// <reference path="gameobject/CPhysicObject.d.ts" />
/// <reference path="gameobject/CCustomZone.d.ts" />
/// <reference path="gameobject/CTorridZone.d.ts" />
/// <reference path="gameobject/CMosquitoBald.d.ts" />
/// <reference path="gameobject/CMedkit.d.ts" />
/// <reference path="gameobject/CAntirad.d.ts" />
/// <reference path="gameobject/CFoodItem.d.ts" />

/**
 * Global holder of the `game_object` luabind class enums, accessed as `game_object.enemy`,
 * `game_object.level_path` and so on. The instance type is {@link CGameObject}.
 *
 * Only the stable (non build-conditional) enums are listed. The `callback_types` enum is
 * intentionally omitted: its numeric values depend on engine compile flags (`INPUT_CALLBACKS`,
 * `EXTENDED_WEAPON_CALLBACKS`, …) and scripts address callbacks through the separate `callback`
 * table rather than through `game_object`.
 */
import type { Section } from 'anomaly-packer'

declare global {
  const game_object: {
    // relation (ALife::ERelationType)
    readonly friend: 0
    readonly neutral: 1
    readonly enemy: 2
    readonly dummy: -1
    // path type (MovementManager::EPathType)
    readonly game_path: 0
    readonly level_path: 1
    readonly patrol_path: 2
    readonly no_path: 3
    // action type (ScriptEntity::EActionType)
    readonly movement: 0
    readonly watch: 1
    readonly animation: 2
    readonly sound: 3
    readonly particle: 4
    readonly object: 5
    readonly action_type_count: 6
    // movement selection type (ESelectionType)
    readonly alifeMovementTypeMask: 0
    readonly alifeMovementTypeRandom: 1
    // pda message (EPdaMsg)
    readonly dialog_pda_msg: 0
    readonly info_pda_msg: 1
    readonly no_pda_msg: 2
    // actor relations (RELATION_REGISTRY)
    readonly relation_kill: 0
    readonly relation_attack: 1
    readonly relation_fight_help_human: 2
    readonly relation_fight_help_monster: 4
  }
  /**
   * A functor passed to engine callback setters such as {@link CGameObject.set_callback}.
   * The bound `this` and argument list vary per callback type, so both are left open.
   */
  type EngineCallback = (this: any, ...args: any[]) => any
  
  class CGameObject {
    constructor()
    health: number
    psy_health: number
    power: number
    satiety: number
    radiation: number
    morale: number
    // cast
    cast_Actor(): CActor
    // cast_Car()
    // cast_Heli()
    cast_InventoryOwner(): CInventoryOwner
    cast_InventoryBox(): CInventoryBox
    // cast_CustomZone()
    // cast_TorridZone()
    // cast_MosquitoBald()
    // cast_ZoneCampfire()
    cast_CustomOutfit(): CCustomOutfit
    cast_Helmet(): CHelmet
    cast_Artefact(): CArtefact
    cast_Ammo(): CWeaponAmmo
    cast_Weapon(): CWeapon
    cast_WeaponMagazined(): CWeaponMagazined
    cast_WeaponMagazinedWGrenade(): CWeaponMagazinedWGrenade
    cast_EatableItem(): CEatableItem
    cast_BottleItem(): CBottleItem
    //
    // shared
    //
    id(): number
    clsid(): number
    level_vertex_id(): number
    game_vertex_id(): number
    has_info(portion: string): boolean
    give_info_portion(portion: string): boolean
    disable_info_portion(portion: string): void
    /** Unique story id, @returns -1 (if not unique) */
    story_id(): number
    position(): vector
    direction(): vector
    section(): Section.All
    /** XML name */
    profile_name(): string | null
    name(): string
    /** Object to which this object belongs. Used for items in inventories and boxes */
    parent(): CGameObject | null
    mass(): number
    /** Center of physical shell */
    center(): vector
    bind_object(obj: CGameObject): void
    binded_object(): CGameObject | null
    //
    // Item
    //
    condition(): number | null
    set_condition(condition: number): void
    weight(): number | null
    set_weight(weight: number): void
    //
    // actor
    //
    change_health(health: number): void
    change_psy_health(psy: number): void
    change_power(power: number): void
    change_satiety(satiety: number): void
    change_radiation(rad: number): void
    change_morale(value: number): void
    set_actor_position(pos: vector): void
    set_actor_direction(dir: number): void
    give_game_news(caption: string, text: string, icon_path: string, delay_ms: number, duration_ms: number): void
    give_talk_message2(caption: string, text: string, icon_path: string, template?: string): void
    switch_to_trade(): void
    switch_to_talk(): void
    switch_to_upgrade(): void
    reload_weapon(): void
    hide_weapon(): void
    disable_hit_marks(_0: boolean): void
    get_task_state(task_id: string): number // ETaskState
    set_task_state(state: number /** ETaskState */, task_id: string): void
    give_task(task: CGameTask, dt: number, check_existing: boolean, timer: number): void
    set_active_task(task: CGameTask): void
    is_active_task(task: CGameTask): boolean
    get_task(id: string, only_in_process: boolean): CGameTask | null
    use(user: CGameObject): boolean
    start_trade(actor: CGameObject): void
    start_upgrade(actor: CGameObject): void
    //
    // npc (stalker or monster)
    //
    alive(): boolean
    play_sound(internal_type: number, max_start_type?: number, min_start_time?: number, max_stop_time?: number, min_stop_time?: number, id?: number): void
    get_enemy(): CGameObject | null
    get_corpse(): CGameObject | null
    get_enemy_strength(): number
    get_sound_info(): CScriptSoundInfo
    get_monster_hit_info(): CScriptMonsterHitInfo
    best_danger(): CDangerObject
    best_enemy(): CGameObject
    best_item(): CGameObject
    motivation_action_manager(): CScriptActionPlanner
    action_count(): number
    action_by_index(index: number): CScriptEntityAction
    memory_time(): number
    memory_position(obj: CGameObject): vector
    best_weapon(): CGameObject | null
    patrol(): string | null
    command(action: CScriptEntityAction, high_priority?: boolean): void
    action(): CScriptEntityAction
    accuracy(): number
    kill(by: CGameObject): void
    death_time(): number
    get_bleeding(): number
    fov(): number
    set_fov(fov: number): void
    range(): number
    set_range(range: number): void
    iterate_inventory(iterator: (npc: CGameObject, item: CGameObject) => void, npc: CGameObject): void
    max_health(): number
    set_sight(target: CGameObject): void
    who_hit_name(): string | null
    who_hit_section_name(): string | null
    active_slot(): number
    make_item_active(item: CGameObject): void
    item_in_slot(slot: number): CGameObject | null
    activate_slot(slot: number): void
    active_item(): CGameObject | null
    object_count(): number
    object(section: Section.Item): CGameObject | null
    inventory_for_each(iterator: (item: CGameObject, npc: CGameObject) => void): void
    team(): number
    squad(): number
    group(): number
    rank(): number
    character_rank(): number
    set_character_rank(rank: number): void
    character_name(): string | null
    character_icon(): string
    character_community(): string
    set_character_community(comm: Community, _0: 0, _1: 0): void
    money(): number
    transfer_money(sum: number, to: CGameObject): void
    give_money(sum: number): void
    drop_item(item: CGameObject): void
    drop_item_and_teleport(item: CGameObject, pos: vector): void
    eat(food: CGameObject): void
    enable_talk(): void
    disable_talk(): void
    is_talking(): boolean
    is_talk_enabled(): boolean
    enable_trade(): void
    disable_trade(): void
    is_trade_enabled(): boolean
    get_inv_weight(): number
    get_inv_max_weight(): number
    get_current_outfit(): CGameObject
    //
    // weapon
    //
    get_ammo_total(): void
    get_ammo_in_magazine(): number
    set_ammo_elapsed(count: number): void
    unload_magazine(keep_ammo: boolean): void
    force_unload_magazine(keep_ammo: boolean): void
    set_ammo_type(type: number): void
    get_ammo_type(): number
    get_ammo_count_for_type(type: number): number
    get_main_weapon_type(): number
    get_weapon_type(): number
    set_main_weapon_type(type: number): void
    set_weapon_type(type: number): void
    has_ammo_type(type: number): boolean
    get_weapon_substate(): number
    set_weight(weight: number): void
    //
    // weapon maganized
    //
    set_queue_size(size: number): void
    //
    // food
    //
    set_remaining_uses(uses: number): void
    get_remaining_uses(): number
    get_max_uses(): number
    //
    // explosives
    //
    explode(level_time: number): void
    //
    // internal sight fields (SightManager)
    //
    readonly m_object: CGameObject | null
    readonly m_vector: vector
    readonly m_sight_type: number
    //
    // --- rest of the vanilla game_object API (auto-derived from CScriptGameObject) ---
    //
    //
    // Monster abilities & special
    //
    burer_set_force_gravi_attack(force: boolean): void
    burer_get_force_gravi_attack(): boolean
    poltergeist_set_actor_ignore(ignore: boolean): void
    poltergeist_get_actor_ignore(): boolean
    force_stand_sleep_animation(index: number): void
    release_stand_sleep_animation(): void
    set_alien_control(val: boolean): void
    fake_death_fall_down(): boolean
    fake_death_stand_up(): void
    berserk(): void
    //
    // Trader & dialog
    //
    run_talk_dialog(pToWho: CGameObject, disable_break: boolean): void
    allow_break_talk_dialog(disable_break: boolean): void
    set_start_dialog(dialog_id: Dialog): void
    get_start_dialog(): void
    restore_default_start_dialog(): void
    show_condition(ini_file: system_ini, section: Section.Item): void
    buy_supplies(ini_file: system_ini, section: Section.Item): void
    is_trader(): boolean
    set_trader_global_anim(anim: string): void
    set_trader_head_anim(anim: string): void
    set_trader_sound(sound: string, anim: string): void
    external_sound_start(sound: string): void
    external_sound_stop(): void
    //
    // Doors
    //
    register_door_for_npc(): void
    unregister_door_for_npc(): void
    on_door_is_open(): void
    on_door_is_closed(): void
    lock_door_for_npc(): void
    unlock_door_for_npc(): void
    is_door_locked_for_npc(): boolean
    is_door_blocked_by_npc(): boolean
    //
    // Loopholes
    //
    in_loophole_fov(cover_id: string, loophole_id: string, object_position: vector): boolean
    in_current_loophole_fov(object_position: vector): boolean
    in_loophole_range(cover_id: string, loophole_id: string, object_position: vector): boolean
    in_current_loophole_range(object_position: vector): boolean
    //
    // Restrictions & restrictors
    //
    add_restrictions(out: string, in_: string): void
    remove_restrictions(out: string, in_: string): void
    remove_all_restrictions(): void
    in_restrictions(): string
    out_restrictions(): string
    base_in_restrictions(): string
    base_out_restrictions(): string
    set_restrictor_type(typ: number): void
    get_restrictor_type(): number
    is_space_restrictor(): boolean
    //
    // Devices: detector, torch, night vision
    //
    active_detector(): CGameObject | null
    hide_detector(bFast: boolean): void
    force_hide_detector(): void
    show_detector(bFast: boolean): void
    night_vision_allowed(value: boolean): void
    enable_night_vision(value: boolean): void
    night_vision_enabled(): boolean
    enable_torch(value: boolean): void
    torch_enabled(): boolean
    //
    // Info portions
    //
    dont_has_info(info_id: InfoPortion): boolean
    //
    // Deadbody & inventory owner
    //
    deadbody_closed(status: boolean): void
    deadbody_closed_status(): boolean
    deadbody_can_take(status: boolean): void
    deadbody_can_take_status(): boolean
    //
    // Movement, path & AI planner
    //
    set_invisible(val: boolean): void
    set_body_state(body_state: number): void
    set_movement_type(movement_type: number): void
    set_mental_state(mental_state: number): void
    set_path_type(path_type: number): void
    set_detail_path_type(detail_path_type: number): void
    body_state(): number
    target_body_state(): number
    movement_type(): number
    target_movement_type(): number
    mental_state(): number
    target_mental_state(): number
    path_type(): number
    detail_path_type(): number
    set_patrol_path(path_name: string, patrol_start_type: number, patrol_route_type: number, random: boolean): void
    inactualize_patrol_path(): void
    set_dest_level_vertex_id(level_vertex_id: number): void
    set_dest_game_vertex_id(game_vertex_id: number): void
    set_movement_selection_type(selection_type: number /** ESelectionType */): void
    get_movement_speed(): vector
    vertex_in_direction(level_vertex_id: number, direction: vector, max_distance: number): number
    debug_planner(planner: CScriptActionPlanner): void
    get_smart_cover_description(): string
    find_best_cover(position_to_cover_from: vector): CCoverPoint
    in_smart_cover(): boolean
    get_dest_smart_cover_name(): string
    set_smart_cover_target_idle(): void
    set_smart_cover_target_lookout(): void
    set_smart_cover_target_fire(): void
    set_smart_cover_target_fire_no_lookout(): void
    set_smart_cover_target_default(value: boolean): void
    movement_target_reached(): boolean
    suitable_smart_cover(_object: CGameObject): boolean
    set_previous_point(point_index: number): void
    set_start_point(point_index: number): void
    get_current_point_index(): number
    path_completed(): boolean
    patrol_path_make_inactual(): void
    best_cover(position: vector, enemy_position: vector, radius: number, min_enemy_distance: number, max_enemy_distance: number): CCoverPoint
    safe_cover(position: vector, radius: number, min_distance: number): CCoverPoint
    accessible(position: vector): boolean
    accessible(level_vertex_id: number): boolean
    accessible_nearest(position: vector, result: vector): number
    location_on_path(distance: number, location: vector): number
    sight_params(): CSightParams
    movement_enabled(enable: boolean): void
    movement_enabled(): boolean
    actor_look_at_point(point: vector): void
    actor_stop_look_at_point(): void
    //
    // Vision & memory
    //
    set_visual_memory_enabled(enabled: boolean): void
    see(tpLuaGameObject: CGameObject): boolean
    see(section_name: string): boolean
    force_visibility_state(state: number): void
    get_visibility_state(): number
    set_manual_invisibility(val: boolean): void
    get_current_direction(): vector
    head_orientation(): vector
    enable_memory_object(_object: CGameObject, enable: boolean): void
    memory_visible_objects(): number
    memory_sound_objects(): number
    memory_hit_objects(): number
    not_yet_visible_objects(): number
    visibility_threshold(): number
    make_object_visible_somewhen(_object: CGameObject): void
    bone_visible(bone_name: string, bHud?: boolean): boolean
    set_bone_visible(bone_name: string, bVisibility: boolean, bRecursive?: boolean, bHud?: boolean): void
    //
    // Sound
    //
    remove_sound(internal_type: number): void
    set_sound_mask(sound_mask: number): void
    set_sound_threshold(value: number): void
    restore_sound_threshold(): void
    disable_show_hide_sounds(val: boolean): void
    sound_voice_prefix(): string
    //
    // Animation & HUD
    //
    clear_override_animation(): void
    set_capture_anim(e: CGameObject, e_str: string, position: vector, factor: number): void
    clear_animations(): void
    animation_count(): number
    animation_slot(): number
    play_hud_motion(M: string, bMixIn: boolean, state: number, speed?: number, end?: number): number
    set_color_animator(name: string, bFlicker: boolean, flickerChance: number, flickerDelay: number, framerate: number): void
    reset_color_animator(): void
    is_hud_item(): boolean
    //
    // Inventory, belt & slots
    //
    enable_inv_upgrade(): void
    disable_inv_upgrade(): void
    is_inv_upgrade_enabled(): boolean
    transfer_item(pItem: CGameObject, pForWho: CGameObject): void
    take_item(pItem: CGameObject): void
    iterate_ruck(iterator: (npc: CGameObject, item: CGameObject) => void, npc: CGameObject): void
    iterate_belt(iterator: (npc: CGameObject, item: CGameObject) => void, npc: CGameObject): void
    iterate_inventory_box(iterator: (npc: CGameObject, item: CGameObject) => void, npc: CGameObject): void
    move_to_ruck(pItem: CGameObject): void
    move_to_slot(pItem: CGameObject, slot_id: number): void
    move_to_belt(pItem: CGameObject): void
    is_on_belt(obj: CGameObject): boolean
    item_on_belt(item_id: number): CGameObject | null
    belt_count(): number
    item_allow_trade(pItem: CGameObject): void
    item_deny_trade(pItem: CGameObject): void
    is_inv_box_empty(): boolean
    inv_box_closed(status: boolean, reason: string): boolean
    inv_box_closed_status(): boolean
    inv_box_can_take(status: boolean): boolean
    inv_box_can_take_status(): boolean
    marked_dropped(item: CGameObject): boolean
    //
    // Combat, weapon & enemy
    //
    set_force_anti_aim(force: boolean): void
    get_force_anti_aim(): boolean
    set_enemy(e: CGameObject): void
    skip_transfer_enemy(val: boolean): void
    set_custom_panic_threshold(value: number): void
    set_default_panic_threshold(): void
    register_in_combat(): void
    unregister_in_combat(): void
    is_weapon_going_to_be_strapped(_object: CGameObject): boolean
    weapon_strapped(): boolean
    weapon_unstrapped(): boolean
    restore_weapon(): void
    weapon_is_grenadelauncher(): boolean
    weapon_is_scope(): boolean
    weapon_is_silencer(): boolean
    weapon_grenadelauncher_status(): number
    weapon_scope_status(): number
    weapon_silencer_status(): number
    ammo_get_count(): number
    ammo_set_count(count: number): void
    ammo_box_size(): number
    weapon_addon_attach(item: CGameObject): void
    weapon_addon_detach(item_section: Section.Item, b_spawn_item?: boolean): void
    weapon_in_grenade_mode(): boolean
    phantom_set_enemy(a0: CGameObject): void
    is_weapon(): boolean
    is_grenade_launcher(): boolean
    is_weapon_magazined(): boolean
    is_ammo(): boolean
    is_weapon_gl(): boolean
    //
    // Relations, community & info
    //
    relation(who: CGameObject): number
    ignore_monster_threshold(): number
    ignore_monster_threshold(threshold: number): void
    restore_ignore_monster_threshold(): void
    max_ignore_monster_distance(): number
    max_ignore_monster_distance(distance: number): void
    restore_max_ignore_monster_distance(): void
    goodwill(pToWho: CGameObject): number
    set_goodwill(goodwill: number, pWhoToSet: CGameObject): void
    force_set_goodwill(goodwill: number, pWhoToSet: CGameObject): void
    change_goodwill(delta_goodwill: number, pWhoToSet: CGameObject): void
    general_goodwill(pToWho: CGameObject): number
    set_relation(relation: number, pWhoToSet: CGameObject): void
    community_goodwill(community: Community): number
    set_community_goodwill(community: Community, goodwill: number): void
    sympathy(): number
    set_sympathy(sympathy: number): void
    change_character_rank(a0: number): void
    character_reputation(): number
    set_character_reputation(a0: number): void
    change_character_reputation(a0: number): void
    get_actor_relation_flags(): Flags
    set_actor_relation_flags(flags: Flags): void
    set_character_icon(iconName: string): void
    //
    // Callbacks & scripting control
    //
    script(f: boolean, g: string): void
    get_script(): boolean
    get_script_name(): string
    set_vis_state(value: number): void
    set_collision_off(val: boolean): void
    can_script_capture(): boolean
    set_visual_name(visual: string, bForce?: boolean): void
    set_nonscript_usable(nonscript_usable: boolean): void
    //
    // Attachable items
    //
    enable_attachable_item(value: boolean): void
    attachable_item_enabled(): boolean
    attachable_item_load_attach(section: Section.Item): void
    //
    // Anomaly zone
    //
    enable_anomaly(): void
    disable_anomaly(): void
    get_anomaly_power(): number
    set_anomaly_power(p: number): void
    get_anomaly_radius(): number
    set_anomaly_radius(p: number): void
    set_anomaly_position(pos: vector): void
    is_anomaly(): boolean
    //
    // Misc
    //
    cost(): number
    power_critical(): number
    psy_factor(): number
    set_psy_factor(val: number): void
    hit(tLuaHit: hit): void
    reset_action_queue(): void
    object_id(id: number): CGameObject | null
    remove_home(): void
    get_current_outfit_protection(hit_type: number): number
    set_npc_position(pos: vector): void
    get_visual_name(): string
    spawn_ini(): system_ini
    enable_vision(value: boolean): void
    vision_enabled(): boolean
    bone_position(bone_name: string, bHud?: boolean): vector
    bone_name(id: number, bHud: boolean): string
    is_body_turning(): boolean
    stop_talk(): void
    allow_sprint(b: boolean): void
    set_idle_particles(name: string, bIdleLight: boolean): void
    get_artefact_health(): number
    get_artefact_radiation(): number
    get_artefact_satiety(): number
    get_artefact_power(): number
    get_artefact_bleeding(): number
    get_artefact_immunity(hit_type: number): number
    set_artefact_health(value: number): void
    set_artefact_radiation(value: number): void
    set_artefact_satiety(value: number): void
    set_artefact_power(value: number): void
    set_artefact_bleeding(value: number): void
    set_artefact_immunity(hit_type: number, value: number): void
    get_helicopter(): CHelicopter
    get_car(): CCar
    get_hanging_lamp(): CHangingLamp
    get_bone_id(bone_name: string): number
    get_physics_shell(): physics_shell | null
    get_holder_class(): CHolderCustom
    get_current_holder(): CHolderCustom
    set_tip_text(tip_text: string): void
    set_tip_text_default(): void
    active_zone_contact(id: number): boolean
    set_fastcall<T>(functor: (object: T) => boolean, object: T): void
    set_const_force(dir: vector, value: number, time_interval: number): void
    info_add(text: string): void
    info_clear(): void
    jump(position: vector, factor: number): void
    buy_item_condition_factor(factor: number): void
    buy_item_exponent(factor: number): void
    sell_item_exponent(factor: number): void
    is_there_items_to_pickup(): boolean
    mark_item_dropped(item: CGameObject, flag: boolean): void
    critically_wounded(): boolean
    get_campfire(): CZoneCampfire
    get_artefact(): CArtefact
    get_physics_object(): CPhysicObject
    enable_level_changer(b: boolean): void
    is_level_changer_enabled(): boolean
    set_level_changer_invitation(str: string): void
    start_particles(pname: string, bone: string): void
    stop_particles(pname: string, bone: string): void
    attach_vehicle(veh: CGameObject, bForce?: boolean): void
    detach_vehicle(bForce?: boolean): void
    get_attached_vehicle(): CGameObject | null
    reset_bone_protections(imm_sect: string, bone_sect: string): void
    iterate_feel_touch(functor: (id: number) => void): void
    get_luminocity_hemi(): number
    get_luminocity(): number
    set_health_ex(hp: number): void
    force_set_position(pos: vector, enable?: boolean): void
    force_set_rotation(rot: vector, enable?: boolean): void
    set_spatial_type(sptype: number): void
    get_spatial_type(): number
    destroy_object(): void
    install_upgrade(upgrade: string): boolean
    has_upgrade(upgrade: string): boolean
    iterate_installed_upgrades(functor: (upgrade_section: string, owner: CGameObject) => boolean): void
    switch_state(state: number): void
    get_state(): number
    cast_Car(): CCar
    cast_Heli(): CHelicopter
    cast_CustomZone(): CCustomZone
    cast_TorridZone(): CTorridZone
    cast_MosquitoBald(): CMosquitoBald
    cast_ZoneCampfire(): CZoneCampfire
    cast_InventoryItem(): CInventoryItem
    cast_Medkit(): CMedkit
    cast_Antirad(): CAntirad
    cast_FoodItem(): CFoodItem
    is_entity_alive(): boolean
    is_inventory_item(): boolean
    is_inventory_owner(): boolean
    is_actor(): boolean
    is_custom_monster(): boolean
    is_outfit(): boolean
    is_helmet(): boolean
    is_scope(): boolean
    is_silencer(): boolean
    is_stalker(): boolean
    is_monster(): boolean
    is_artefact(): boolean
    is_inventory_box(): boolean
    get_actor_max_weight(): number
    set_actor_max_weight(max_weight: number): void
    get_actor_max_walk_weight(): number
    set_actor_max_walk_weight(max_walk_weight: number): void
    get_additional_max_weight(): number
    set_additional_max_weight(add_max_weight: number): void
    get_additional_max_walk_weight(): number
    set_additional_max_walk_weight(add_max_walk_weight: number): void
    get_total_weight(): number
    get_actor_jump_speed(): number
    set_actor_jump_speed(jump_speed: number): void
    get_actor_sprint_koef(): number
    set_actor_sprint_koef(sprint_koef: number): void
    get_actor_run_coef(): number
    set_actor_run_coef(run_coef: number): void
    get_actor_runback_coef(): number
    set_actor_runback_coef(run_back_coef: number): void
    set_can_be_harmed(state: boolean): void
    can_be_harmed(): boolean
    // Engine bindings previously missing — verified against script_game_object.h / *.cpp
    active_sound_count(): number
    add_animation(animation: string, hand_usage: boolean, use_movement_controller: boolean): void
    add_animation(animation: string, hand_usage: boolean, position: vector, rotation: vector, local_animation: boolean): void
    add_sound(prefix: string, max_count: number, type: number, priority: number, mask: number, internal_type: number, bone_name?: string, head_anim?: string): number
    add_combat_sound(prefix: string, max_count: number, type: number, priority: number, mask: number, internal_type: number, bone_name: string): number
    aim_bone_id(): string
    aim_bone_id(value: string): void
    aim_time(weapon: CGameObject): number
    aim_time(weapon: CGameObject, time: number): void
    apply_loophole_direction_distance(): number
    apply_loophole_direction_distance(value: number): void
    buy_condition(ini_file: system_ini, section: Section.Item): void
    buy_condition(friend_factor: number, enemy_factor: number): void
    can_select_weapon(): boolean
    can_select_weapon(status: boolean): void
    can_throw_grenades(): boolean
    change_team(team: number, squad: number, group: number): void
    death_sound_enabled(): boolean
    death_sound_enabled(value: boolean): void
    extrapolate_length(): number
    extrapolate_length(extrapolate_length: number): void
    get_dest_smart_cover(): CCoverPoint
    give_talk_message(caption: string, icon: string, text: string): void
    group_throw_time_interval(): number
    group_throw_time_interval(throw_time_interval: number): void
    idle_max_time(): number
    idle_min_time(): number
    inside(position: vector, epsilon: number): boolean
    invulnerable(): boolean
    invulnerable(invulnerable: boolean): void
    lookout_max_time(): number
    lookout_min_time(): number
    play_cycle(anim: string): void
    play_cycle(anim: string, mix_in: boolean): void
    sell_condition(ini_file: system_ini, section: Section.Item): void
    sell_condition(friend_factor: number, enemy_factor: number): void
    set_callback(type: number): void
    set_callback(type: number, functor: EngineCallback | null, object?: any): void
    set_desired_direction(): void
    set_desired_position(): void
    set_dest_loophole(): void
    set_dest_loophole(loophole_id: string): void
    set_dest_smart_cover(): void
    set_dest_smart_cover(cover_id: string): void
    set_enemy_callback(): void
    set_enemy_callback(functor: (this: void, ...args: any[]) => boolean): void
    set_enemy_callback(functor: (this: void, ...args: any[]) => boolean, object: any): void
    set_home(name: string, r_min: number, r_max: number, aggressive: boolean, r_mid: number): void
    set_home(lv_id: number, r_min: number, r_max: number, aggressive: boolean, r_mid: number): void
    set_item(object_action: number): void
    set_item(object_action: number, game_object: CGameObject): void
    set_item(object_action: number, game_object: CGameObject, queue_size: number): void
    set_item(object_action: number, game_object: CGameObject, queue_size: number, queue_interval: number): void
    set_override_animation(anim_name: string): void
    set_patrol_extrapolate_callback(): void
    set_patrol_extrapolate_callback(functor: EngineCallback | null, object?: any): void
    set_smart_cover_target(): void
    set_smart_cover_target(position: vector): void
    set_smart_cover_target(object: CGameObject): void
    set_smart_cover_target_selector(): void
    set_smart_cover_target_selector(functor: (this: void, ...args: any[]) => void): void
    set_smart_cover_target_selector(functor: (this: void, ...args: any[]) => void, object: any): void
    sniper_fire_mode(): boolean
    sniper_fire_mode(value: boolean): void
    sniper_update_rate(): boolean
    sniper_update_rate(value: boolean): void
    sound_prefix(): string
    sound_prefix(sound_prefix: string): void
    special_danger_move(): boolean
    special_danger_move(value: boolean): void
    take_items_enabled(): boolean
    take_items_enabled(value: boolean): void
    use_smart_covers_only(): boolean
    use_smart_covers_only(value: boolean): void
    wounded(): boolean
    wounded(value: boolean): void
  }
  //
  // casts
  //
  
  //
  // Engine object types returned by game_object getters/casts. Declared as stubs
  // (correct luabind/engine name) to keep return types precise; members to be
  // filled in from the engine as needed. Not registered as script game objects,
  // so they carry no CGameObject methods.
  //
  
  /** Sight parameters (luabind class `CSightParams`). */
  class CSightParams {
    readonly m_object: CGameObject
    readonly m_vector: vector
    /** One of the `CSightParams.eSightType*` constants. */
    readonly m_sight_type: number
  }
  /** Sight-type constants of the `CSightParams` luabind class (`SightManager::ESightType`). */
  const CSightParams: {
    readonly eSightTypeCurrentDirection: 0
    readonly eSightTypePathDirection: 1
    readonly eSightTypeDirection: 2
    readonly eSightTypePosition: 3
    readonly eSightTypeObject: 4
    readonly eSightTypeCover: 5
    readonly eSightTypeSearch: 6
    readonly eSightTypeLookOver: 7
    readonly eSightTypeCoverLookOver: 8
    readonly eSightTypeFireObject: 9
    readonly eSightTypeFirePosition: 10
    readonly eSightTypeAnimationDirection: 11
    readonly eSightTypeDummy: -1
  }
  /**
   * Engine base-client object (luabind class `CGameObject`, C++ `CGameObject` from
   * `base_client_classes`). This is a DIFFERENT class from the `game_object`
   * (`CScriptGameObject`) modelled by {@link CGameObject}: it is the common engine base of
   * non-scriptable objects such as {@link CCar}, {@link CHelicopter}, {@link CPhysicObject}
   * and {@link CZoneCampfire}, which are obtained through the `game_object:get_*()` /
   * `cast_*()` accessors and expose only these low-level members (not the rich `game_object`
   * API). Modelled as an interface so it does not shadow the `CGameObject` value.
   */
  interface CGameObjectBase {
    _construct(): CGameObjectBase
    Visual(): IRender_Visual
    net_Export(packet: net_packet): void
    net_Import(packet: net_packet): void
    net_Spawn(se_abstract: CseAbstract): boolean
    use(who_use: CGameObjectBase): boolean
    getVisible(): boolean
    getEnabled(): boolean
  }
  /** Render visual of an object (luabind class `IRender_Visual`, C++ `IRenderVisual`), returned by {@link CGameObjectBase.Visual}. */
  class IRender_Visual {
    dcast_PKinematicsAnimated(): IKinematicsAnimated | null
  }
  /** Animated skeleton visual (luabind class `IKinematicsAnimated`). */
  class IKinematicsAnimated {
    PlayCycle(anim: string): void
  }
  /** Animation blend handle (luabind class `CBlend`). */
  class CBlend {}
  /** Last monster hit info (luabind class `MonsterHitInfo`, C++ `CScriptMonsterHitInfo`). */
  class CScriptMonsterHitInfo {
    who: CGameObject | null
    direction: vector
    time: number
  }
  /** A perceived danger (luabind class `danger_object`, C++ `CDangerObject`). */
  class CDangerObject {
    position(): vector
    time(): number
    /** One of the `CDangerObject.danger_type` constants. */
    type(): number
    /** One of the `CDangerObject.danger_perceive_type` constants. */
    perceive_type(): number
    object(): CGameObject | null
    dependent_object(): CGameObject | null
  }
  /** Enum constants of the `danger_object` luabind class (`danger_type`/`danger_perceive_type`). */
  const CDangerObject: {
    readonly bullet_ricochet: 0
    readonly attack_sound: 1
    readonly entity_attacked: 2
    readonly entity_death: 3
    readonly entity_corpse: 4
    readonly attacked: 5
    readonly grenade: 6
    readonly enemy_sound: 7
    readonly visual: 0
    readonly sound: 1
    readonly hit: 2
  }
  // --- GOAP planner core (xrGame graph-engine script bindings) ---
  
  /**
   * A single world-state property: a `(condition_id, value)` pair
   * (luabind class `world_property`, C++ `CScriptWorldProperty`).
   * @customConstructor world_property
   */
  class CScriptWorldProperty {
    constructor(condition: number, value: boolean)
    condition(): number
    value(): boolean
  }
  /**
   * A set of {@link CScriptWorldProperty} entries (luabind class `world_state`,
   * C++ `CScriptWorldState`).
   * @customConstructor world_state
   */
  class CScriptWorldState {
    constructor()
    constructor(other: CScriptWorldState)
    add_property(property: CScriptWorldProperty): void
    remove_property(condition: number): void
    clear(): void
    includes(state: CScriptWorldState): boolean
    property(condition: number): CScriptWorldProperty
  }
  /**
   * Solver property storage mapping condition ids to boolean values
   * (luabind class `property_storage`, C++ `CPropertyStorage`).
   * @customConstructor property_storage
   */
  class CPropertyStorage {
    constructor()
    set_property(condition: number, value: boolean): void
    property(condition: number): boolean
  }
  /**
   * Property evaluator, subclassable from Lua/TS (luabind class `property_evaluator`,
   * C++ `CScriptPropertyEvaluator`).
   * @customConstructor property_evaluator
   */
  class CScriptPropertyEvaluator {
    readonly object: CGameObject
    readonly storage: CPropertyStorage
    constructor()
    constructor(object: CGameObject)
    constructor(object: CGameObject, name: string)
    setup(object: CGameObject, storage: CPropertyStorage): void
    evaluate(): boolean
  }
  /**
   * Constant-value property evaluator (luabind class `property_evaluator_const`).
   * @customConstructor property_evaluator_const
   */
  class CPropertyEvaluatorConst extends CScriptPropertyEvaluator {
    constructor(value: boolean)
  }
  /**
   * GOAP action, subclassable from Lua/TS (luabind class `action_base`,
   * C++ `CScriptActionBase`).
   * @customConstructor action_base
   */
  class CScriptActionBase {
    readonly object: CGameObject
    readonly storage: CPropertyStorage
    constructor()
    constructor(object: CGameObject)
    constructor(object: CGameObject, name: string)
    add_precondition(condition: CScriptWorldProperty): void
    add_effect(effect: CScriptWorldProperty): void
    remove_precondition(condition: number): void
    remove_effect(condition: number): void
    setup(object: CGameObject, storage: CPropertyStorage): void
    initialize(): void
    execute(): void
    finalize(): void
    set_weight(weight: number): void
    show(caption: string): void
  }
  /**
   * GOAP action planner: holds actions and evaluators and drives the solver
   * (luabind class `action_planner`, C++ `CScriptActionPlanner`).
   * @customConstructor action_planner
   */
  class CScriptActionPlanner {
    readonly object: CGameObject
    readonly storage: CPropertyStorage
    constructor()
    /** Whether the current plan is still actual. */
    actual(): boolean
    setup(object: CGameObject): void
    update(): void
    add_action(action_id: number, action: CScriptActionBase): void
    remove_action(action_id: number): void
    action(action_id: number): CScriptActionBase
    add_evaluator(evaluator_id: number, evaluator: CScriptPropertyEvaluator): void
    remove_evaluator(evaluator_id: number): void
    evaluator(evaluator_id: number): CScriptPropertyEvaluator
    current_action_id(): number
    current_action(): CScriptActionBase
    initialized(): boolean
    set_goal_world_state(world_state: CScriptWorldState): void
    clear(): void
    show(caption: string): void
  }
  /**
   * An action that is itself a planner (luabind class `planner_action`,
   * C++ `CScriptActionPlannerAction`; engine bases `action_planner` + `action_base`).
   * @customConstructor planner_action
   */
  interface CScriptActionPlannerAction extends CScriptActionPlanner, CScriptActionBase {}
  class CScriptActionPlannerAction {
    constructor()
    constructor(object: CGameObject)
    constructor(object: CGameObject, name: string)
    weight(): number
  }
  
  /**
   * Composite monster/entity action (luabind class `entity_action`, C++ `CScriptEntityAction`).
   * Its `set_action` accepts the monster action objects (`move`/`look`/`anim`/`sound`/`particle`/
   * `object`/`cond`/`act`), which are not yet modelled; typed loosely for now.
   */
  class CScriptEntityAction {
    constructor()
    constructor(other: CScriptEntityAction)
    set_action(action: object): void
    move(): boolean
    look(): boolean
    anim(): boolean
    sound(): boolean
    particle(): boolean
    object(): boolean
    time(): boolean
    all(): boolean
    completed(): boolean
  }
  /** A cover point (luabind class `cover_point`, C++ `CCoverPoint`). */
  class CCoverPoint {
    position(): vector
    level_vertex_id(): number
    is_smart_cover(): boolean
  }
  /** Vehicle/holder interface (luabind class `holder`, C++ `CHolderCustom`). */
  class CHolderCustom {
    /** Whether the holder currently has an owner. */
    engaged(): boolean
    Action(id: number, flags: number): void
    SetParam(id: number, value: vector): void
    SetEnterLocked(locked: boolean): void
    SetExitLocked(locked: boolean): void
  }
  class CInventoryItem {}
}
