import "valveextensions.proto"; message CMsgBotWorldState { message Vector { optional float x = 1; optional float y = 2; optional float z = 3; } message Player { optional int32 player_id = 1 [(valve_map_key) = true]; optional uint32 hero_id = 2; optional bool is_alive = 3; optional float respawn_time = 4; optional uint32 kills = 5; optional uint32 deaths = 6; optional uint32 assists = 7; optional uint32 team_id = 8; optional uint32 primary_unit_handle = 9 [default = 4294967295]; optional int32 mmr = 10; optional .CMsgBotWorldState.Vector location = 11; } message Ability { optional uint32 handle = 1 [(valve_map_key) = true]; optional int32 ability_id = 2 [default = -1]; optional uint32 slot = 3; optional uint32 caster_handle = 5 [default = 4294967295]; optional uint32 level = 6; optional uint32 cast_range = 10; optional float channel_time = 11; optional float cooldown_remaining = 12 [default = 0]; optional bool is_activated = 20; optional bool is_toggled = 21; optional bool is_in_ability_phase = 22; optional bool is_channeling = 23; optional bool is_stolen = 24; optional bool is_fully_castable = 25; optional uint32 charges = 30; optional uint32 secondary_charges = 31; optional bool is_combined_locked = 40; optional int32 power_treads_stat = 50 [default = -1]; } message DroppedItem { optional int32 item_id = 1 [default = -1]; optional .CMsgBotWorldState.Vector location = 2; } message RuneInfo { optional int32 type = 1; optional .CMsgBotWorldState.Vector location = 2; optional uint32 status = 3; optional float time_since_seen = 4; } message TeleportInfo { optional int32 player_id = 1; optional .CMsgBotWorldState.Vector location = 2; optional float time_remaining = 3; } message Modifier { optional uint32 handle = 7 [(valve_map_key) = true]; optional string name = 1; optional uint32 stack_count = 2; optional uint32 ability_handle = 3 [default = 4294967295]; optional int32 ability_id = 4 [default = -1]; optional float remaining_duration = 5; repeated uint32 auxiliary_units_handles = 6; } message LinearProjectile { optional uint32 handle = 1 [(valve_map_key) = true]; optional uint32 caster_handle = 2 [default = 4294967295]; optional .CMsgBotWorldState.UnitType caster_unit_type = 9 [default = INVALID]; optional int32 caster_player_id = 3; optional uint32 ability_handle = 4 [default = 4294967295]; optional int32 ability_id = 5 [default = -1]; optional .CMsgBotWorldState.Vector location = 6; optional .CMsgBotWorldState.Vector velocity = 7; optional uint32 radius = 8; } message TrackingProjectile { optional uint32 handle = 10 [(valve_map_key) = true]; optional uint32 caster_handle = 1 [default = 4294967295]; optional .CMsgBotWorldState.UnitType caster_unit_type = 9 [default = INVALID]; optional int32 caster_player_id = 2; optional uint32 ability_handle = 3 [default = 4294967295]; optional int32 ability_id = 4 [default = -1]; optional .CMsgBotWorldState.Vector location = 5; optional uint32 velocity = 6; optional bool is_dodgeable = 7; optional bool is_attack = 8; } message AvoidanceZone { optional .CMsgBotWorldState.Vector location = 1; optional uint32 caster_handle = 2 [default = 4294967295]; optional .CMsgBotWorldState.UnitType caster_unit_type = 7 [default = INVALID]; optional int32 caster_player_id = 3; optional uint32 ability_handle = 4 [default = 4294967295]; optional int32 ability_id = 5 [default = -1]; optional uint32 radius = 6; } message Courier { optional uint32 handle = 1 [(valve_map_key) = true]; optional .CMsgBotWorldState.CourierState state = 2 [default = COURIER_STATE_INIT]; optional int32 player_id = 3; } message EventAbility { optional int32 ability_id = 1 [default = -1]; optional int32 player_id = 2; optional uint32 unit_handle = 3 [default = 4294967295]; optional .CMsgBotWorldState.Vector location = 4; optional bool is_channel_start = 5; } message EventDamage { optional uint32 damage = 1; optional int32 victim_player_id = 2; optional uint32 victim_unit_handle = 3 [default = 4294967295]; optional int32 attacker_player_id = 4; optional uint32 attacker_unit_handle = 5 [default = 4294967295]; optional int32 ability_id = 6 [default = -1]; } message EventCourierKilled { optional uint32 team_id = 1; optional uint32 courier_unit_handle = 2 [default = 4294967295]; optional int32 killer_player_id = 3; optional uint32 killer_unit_handle = 4 [default = 4294967295]; } message EventRoshanKilled { optional int32 killer_player_id = 1; optional uint32 killer_unit_handle = 2 [default = 4294967295]; } message EventTree { optional uint32 tree_id = 1; optional bool destroyed = 2; optional bool respawned = 3; optional .CMsgBotWorldState.Vector location = 4; optional bool delayed = 5; } message Unit { optional uint32 handle = 1 [(valve_map_key) = true]; optional .CMsgBotWorldState.UnitType unit_type = 2 [default = INVALID]; optional string name = 3; optional uint32 team_id = 4; optional uint32 level = 5; optional .CMsgBotWorldState.Vector location = 6; optional bool is_alive = 7; optional int32 player_id = 8; optional int32 bounding_radius = 10; optional int32 facing = 11; optional uint32 ground_height = 12; optional uint32 vision_range_daytime = 15; optional uint32 vision_range_nighttime = 16; optional int32 health = 20; optional int32 health_max = 21; optional float health_regen = 22; optional int32 mana = 25; optional int32 mana_max = 26; optional float mana_regen = 27; optional int32 base_movement_speed = 30; optional int32 current_movement_speed = 31; optional int32 anim_activity = 35; optional float anim_cycle = 36; optional int32 base_damage = 40; optional int32 base_damage_variance = 41; optional int32 bonus_damage = 42; optional int32 attack_damage = 43; optional int32 attack_range = 44; optional float attack_speed = 45; optional float attack_anim_point = 46; optional int32 attack_acquisition_range = 47; optional int32 attack_projectile_speed = 48; optional uint32 attack_target_handle = 49 [default = 4294967295]; optional string attack_target_name = 52; optional int32 attacks_per_second = 50 [default = -1]; optional float last_attack_time = 51 [default = -1]; optional uint32 bounty_xp = 60; optional uint32 bounty_gold_min = 61; optional uint32 bounty_gold_max = 62; optional bool is_channeling = 65; optional uint32 active_ability_handle = 66 [default = 4294967295]; optional bool is_attack_immune = 70; optional bool is_blind = 71; optional bool is_block_disabled = 72; optional bool is_disarmed = 73; optional bool is_dominated = 74; optional bool is_evade_disabled = 75; optional bool is_hexed = 76; optional bool is_invisible = 77; optional bool is_invulnerable = 78; optional bool is_magic_immune = 79; optional bool is_muted = 80; optional bool is_nightmared = 82; optional bool is_rooted = 83; optional bool is_silenced = 84; optional bool is_specially_deniable = 85; optional bool is_stunned = 86; optional bool is_unable_to_miss = 87; optional bool has_scepter = 88; optional bool is_specially_undeniable = 94; repeated .CMsgBotWorldState.Ability abilities = 90 [(valve_map_field) = true]; repeated .CMsgBotWorldState.Ability items = 91 [(valve_map_field) = true]; repeated .CMsgBotWorldState.Modifier modifiers = 92 [(valve_map_field) = true]; repeated .CMsgBotWorldState.TrackingProjectile incoming_tracking_projectiles = 93 [(valve_map_field) = true]; optional uint32 action_type = 100; optional uint32 ability_target_handle = 101 [default = 4294967295]; optional string ability_target_name = 103; optional bool is_using_ability = 102; optional uint32 primary_attribute = 110; optional bool is_illusion = 111; optional float respawn_time = 112; optional uint32 buyback_cost = 113; optional float buyback_cooldown = 114; optional float spell_amplification = 115; optional float armor = 116; optional float magic_resist = 117; optional float evasion = 118; optional uint32 xp_needed_to_level = 120; optional uint32 ability_points = 121; optional int32 reliable_gold = 122 [default = -1]; optional int32 unreliable_gold = 123 [default = -1]; optional uint32 last_hits = 124; optional uint32 denies = 125; optional uint32 net_worth = 126; optional uint32 strength = 127; optional uint32 agility = 128; optional uint32 intelligence = 129; optional float remaining_lifespan = 130; optional bool flying_courier = 140; optional float shrine_cooldown = 150; optional bool is_shrine_healing = 151; } enum UnitType { INVALID = 0; HERO = 1; CREEP_HERO = 2; LANE_CREEP = 3; JUNGLE_CREEP = 4; ROSHAN = 5; TOWER = 6; BARRACKS = 7; SHRINE = 8; FORT = 9; BUILDING = 10; COURIER = 11; WARD = 12; } enum CourierState { COURIER_STATE_INIT = -1; COURIER_STATE_IDLE = 0; COURIER_STATE_AT_BASE = 1; COURIER_STATE_MOVING = 2; COURIER_STATE_DELIVERING_ITEMS = 3; COURIER_STATE_RETURNING_TO_BASE = 4; COURIER_STATE_DEAD = 5; } optional uint32 team_id = 1; optional float game_time = 2; optional float dota_time = 3; optional uint32 game_state = 4; optional uint32 hero_pick_state = 5; optional float time_of_day = 6; optional float glyph_cooldown = 7; optional float glyph_cooldown_enemy = 8; repeated .CMsgBotWorldState.Player players = 10 [(valve_map_field) = true]; repeated .CMsgBotWorldState.Unit units = 11 [(valve_map_field) = true]; repeated .CMsgBotWorldState.DroppedItem dropped_items = 12 [(diff_encode_field) = 112]; repeated int32 dropped_items_deltas = 112; repeated .CMsgBotWorldState.RuneInfo rune_infos = 13 [(diff_encode_field) = 113]; repeated int32 rune_infos_deltas = 113; repeated .CMsgBotWorldState.TeleportInfo incoming_teleports = 14; repeated .CMsgBotWorldState.LinearProjectile linear_projectiles = 15 [(valve_map_field) = true]; repeated .CMsgBotWorldState.AvoidanceZone avoidance_zones = 16; repeated .CMsgBotWorldState.Courier couriers = 17 [(valve_map_field) = true]; repeated .CMsgBotWorldState.EventAbility ability_events = 20; repeated .CMsgBotWorldState.EventDamage damage_events = 21; repeated .CMsgBotWorldState.EventCourierKilled courier_killed_events = 22; repeated .CMsgBotWorldState.EventRoshanKilled roshan_killed_events = 23; repeated .CMsgBotWorldState.EventTree tree_events = 24; }