import "dota_gcmessages_common_bot_script.proto";
import "dota_commonmessages.proto";
import "dota_shared_enums.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum MLBot_MessageId {
	mlbot_MatchMetadata = 1;
	mlbot_TickBoundary = 2;
	mlbot_TeamState_Radiant = 3;
	mlbot_TeamState_Radiant_Delta = 4;
	mlbot_TeamState_Dire = 5;
	mlbot_TeamState_Dire_Delta = 6;
	mlbot_PlayerCommand = 7;
	mlbot_PlayerOrder = 8;
}

message CMsgMLBotMatchMetadata {
	message Player {
		optional int32 player_id = 1;
		optional int32 team_id = 2;
		optional int32 hero_id = 3;
		optional int32 rank = 4;
	}

	optional uint64 match_id = 1;
	optional uint64 lobby_id = 2;
	optional int32 lobby_type = 3 [default = -1];
	optional uint32 game_mode = 4;
	repeated .CMsgMLBotMatchMetadata.Player players = 5;
}

message CMsgMLBotTickBoundary {
	optional uint32 tick_number = 1;
}

message CMsgMLBot_PlayerOrder {
	optional int32 player_id = 1;
	optional int32 team_id = 2;
	optional int32 order_type = 3;
	repeated uint32 selected_unit_handles = 4;
	optional int32 target_index = 5 [default = -1];
	optional uint32 target_handle = 6 [default = 4294967295];
	optional int32 ability_index = 7 [default = -1];
	optional uint32 ability_handle = 8 [default = 4294967295];
	optional float pos_x = 9;
	optional float pos_y = 10;
	optional float pos_z = 11;
	optional bool queue = 12;
}

message CMsgMLBot_TeamInference {
	optional int32 team_id = 1;
	repeated int32 bot_player_ids = 2;
	optional .CMsgBotWorldState world_state = 3;
}

message CMsgMLBot_TeamInferenceResponse {
	repeated .CMsgMLBot_PlayerOrder orders = 1;
}

message CMsgMLBot_TeamInferenceList {
	repeated .CMsgMLBot_TeamInference messages = 1;
}
