import "networkbasetypes.proto";
import "source2_steam_stats.proto";

enum CLC_Messages {
	clc_ClientInfo = 20;
	clc_Move = 21;
	clc_VoiceData = 22;
	clc_BaselineAck = 23;
	clc_RespondCvarValue = 25;
	clc_LoadingProgress = 27;
	clc_SplitPlayerConnect = 28;
	clc_SplitPlayerDisconnect = 30;
	clc_ServerStatus = 31;
	clc_RequestPause = 33;
	clc_CmdKeyValues = 34;
	clc_RconServerDetails = 35;
	clc_HltvReplay = 36;
	clc_Diagnostic = 37;
}

enum SVC_Messages {
	svc_ServerInfo = 40;
	svc_FlattenedSerializer = 41;
	svc_ClassInfo = 42;
	svc_SetPause = 43;
	svc_CreateStringTable = 44;
	svc_UpdateStringTable = 45;
	svc_VoiceInit = 46;
	svc_VoiceData = 47;
	svc_Print = 48;
	svc_Sounds = 49;
	svc_SetView = 50;
	svc_ClearAllStringTables = 51;
	svc_CmdKeyValues = 52;
	svc_BSPDecal = 53;
	svc_SplitScreen = 54;
	svc_PacketEntities = 55;
	svc_Prefetch = 56;
	svc_Menu = 57;
	svc_GetCvarValue = 58;
	svc_StopSound = 59;
	svc_PeerList = 60;
	svc_PacketReliable = 61;
	svc_HLTVStatus = 62;
	svc_ServerSteamID = 63;
	svc_FullFrameSplit = 70;
	svc_RconServerDetails = 71;
	svc_UserMessage = 72;
	svc_Broadcast_Command = 74;
	svc_HltvFixupOperatorStatus = 75;
	svc_UserCmds = 76;
	svc_NextMsgPredicted = 77;
}

enum VoiceDataFormat_t {
	VOICEDATA_FORMAT_STEAM = 0;
	VOICEDATA_FORMAT_ENGINE = 1;
	VOICEDATA_FORMAT_OPUS = 2;
}

enum RequestPause_t {
	RP_PAUSE = 0;
	RP_UNPAUSE = 1;
	RP_TOGGLEPAUSE = 2;
}

enum PrefetchType {
	PFT_SOUND = 0;
}

enum ESplitScreenMessageType {
	MSG_SPLITSCREEN_ADDUSER = 0;
	MSG_SPLITSCREEN_REMOVEUSER = 1;
}

enum EQueryCvarValueStatus {
	eQueryCvarValueStatus_ValueIntact = 0;
	eQueryCvarValueStatus_CvarNotFound = 1;
	eQueryCvarValueStatus_NotACvar = 2;
	eQueryCvarValueStatus_CvarProtected = 3;
}

enum DIALOG_TYPE {
	DIALOG_MSG = 0;
	DIALOG_MENU = 1;
	DIALOG_TEXT = 2;
	DIALOG_ENTRY = 3;
	DIALOG_ASKCONNECT = 4;
}

enum SVC_Messages_LowFrequency {
	svc_dummy = 600;
}

enum Bidirectional_Messages {
	bi_RebroadcastGameEvent = 16;
	bi_RebroadcastSource = 17;
	bi_GameEvent = 18;
	bi_PredictionEvent = 19;
}

enum Bidirectional_Messages_LowFrequency {
	bi_RelayInfo = 700;
	bi_RelayPacket = 701;
}

enum ReplayEventType_t {
	REPLAY_EVENT_CANCEL = 0;
	REPLAY_EVENT_DEATH = 1;
	REPLAY_EVENT_GENERIC = 2;
	REPLAY_EVENT_STUCK_NEED_FULL_UPDATE = 3;
	REPLAY_EVENT_VICTORY = 4;
}

message CCLCMsg_ClientInfo {
	optional fixed32 send_table_crc = 1;
	optional uint32 server_count = 2;
	optional bool is_hltv = 3;
	optional uint32 friends_id = 5;
	optional string friends_name = 6;
}

message CCLCMsg_Move {
	optional bytes data = 3;
	optional uint32 last_command_number = 4;
}

message CMsgVoiceAudio {
	optional .VoiceDataFormat_t format = 1 [default = VOICEDATA_FORMAT_STEAM];
	optional bytes voice_data = 2;
	optional int32 sequence_bytes = 3;
	optional uint32 section_number = 4;
	optional uint32 sample_rate = 5;
	optional uint32 uncompressed_sample_offset = 6;
	optional uint32 num_packets = 7;
	repeated uint32 packet_offsets = 8 [packed = true];
	optional float voice_level = 9;
}

message CCLCMsg_VoiceData {
	optional .CMsgVoiceAudio audio = 1;
	optional fixed64 xuid = 2;
	optional uint32 tick = 3;
}

message CCLCMsg_BaselineAck {
	optional int32 baseline_tick = 1;
	optional int32 baseline_nr = 2;
}

message CCLCMsg_ListenEvents {
	repeated fixed32 event_mask = 1;
}

message CCLCMsg_RespondCvarValue {
	optional int32 cookie = 1;
	optional int32 status_code = 2;
	optional string name = 3;
	optional string value = 4;
}

message CCLCMsg_LoadingProgress {
	optional int32 progress = 1;
}

message CCLCMsg_SplitPlayerConnect {
	optional string playername = 1;
}

message CCLCMsg_SplitPlayerDisconnect {
	optional int32 slot = 1;
}

message CCLCMsg_ServerStatus {
	optional bool simplified = 1;
}

message CCLCMsg_RequestPause {
	optional .RequestPause_t pause_type = 1 [default = RP_PAUSE];
	optional int32 pause_group = 2;
}

message CCLCMsg_CmdKeyValues {
	option (maximum_size_bytes) = 1500;

	optional bytes data = 1;
}

message CCLCMsg_RconServerDetails {
	optional bytes token = 1;
}

message CCLCMsg_Diagnostic {
	option (maximum_size_bytes) = 16384;

	optional .CMsgSource2SystemSpecs system_specs = 1;
	optional .CMsgSource2VProfLiteReport vprof_report = 2;
	optional .CMsgSource2NetworkFlowQuality downstream_flow = 3;
	optional .CMsgSource2NetworkFlowQuality upstream_flow = 4;
	repeated .CMsgSource2PerfIntervalSample perf_samples = 5;
}

message CSVCMsg_ServerInfo {
	option (maximum_size_bytes) = 409600;

	optional int32 protocol = 1;
	optional int32 server_count = 2;
	optional bool is_dedicated = 3;
	optional bool is_hltv = 4;
	optional int32 c_os = 6;
	optional int32 max_clients = 10;
	optional int32 max_classes = 11;
	optional int32 player_slot = 12 [default = -1];
	optional float tick_interval = 13;
	optional string game_dir = 14;
	optional string map_name = 15;
	optional string sky_name = 16;
	optional string host_name = 17;
	optional string addon_name = 18;
	optional .CSVCMsg_GameSessionConfiguration game_session_config = 19;
	optional bytes game_session_manifest = 20;
}

message CSVCMsg_ClassInfo {
	option (maximum_size_bytes) = 8192;

	message class_t {
		optional int32 class_id = 1;
		optional string class_name = 3;
	}

	optional bool create_on_client = 1;
	repeated .CSVCMsg_ClassInfo.class_t classes = 2;
}

message CSVCMsg_SetPause {
	optional bool paused = 1;
}

message CSVCMsg_VoiceInit {
	optional int32 quality = 1;
	optional string codec = 2;
	optional int32 version = 3 [default = 0];
}

message CSVCMsg_Print {
	option (maximum_size_bytes) = 8192;

	optional string text = 1;
}

message CSVCMsg_Sounds {
	message sounddata_t {
		optional sint32 origin_x = 1;
		optional sint32 origin_y = 2;
		optional sint32 origin_z = 3;
		optional uint32 volume = 4;
		optional float delay_value = 5;
		optional int32 sequence_number = 6;
		optional int32 entity_index = 7 [default = -1];
		optional int32 channel = 8;
		optional int32 pitch = 9;
		optional int32 flags = 10;
		optional uint32 sound_num = 11;
		optional fixed32 sound_num_handle = 12;
		optional int32 speaker_entity = 13;
		optional int32 random_seed = 14;
		optional int32 sound_level = 15;
		optional bool is_sentence = 16;
		optional bool is_ambient = 17;
		optional uint32 guid = 18;
		optional fixed64 sound_resource_id = 19;
	}

	optional bool reliable_sound = 1;
	repeated .CSVCMsg_Sounds.sounddata_t sounds = 2;
}

message CSVCMsg_Prefetch {
	optional int32 sound_index = 1;
	optional .PrefetchType resource_type = 2 [default = PFT_SOUND];
}

message CSVCMsg_SetView {
	optional int32 entity_index = 1 [default = -1];
	optional int32 slot = 2 [default = -1];
}

message CSVCMsg_FixAngle {
	optional bool relative = 1;
	optional .CMsgQAngle angle = 2;
}

message CSVCMsg_CrosshairAngle {
	optional .CMsgQAngle angle = 1;
}

message CSVCMsg_BSPDecal {
	optional .CMsgVector pos = 1;
	optional int32 decal_texture_index = 2;
	optional int32 entity_index = 3 [default = -1];
	optional int32 model_index = 4;
	optional bool low_priority = 5;
}

message CSVCMsg_SplitScreen {
	optional .ESplitScreenMessageType type = 1 [default = MSG_SPLITSCREEN_ADDUSER];
	optional int32 slot = 2;
	optional int32 player_index = 3 [default = -1];
}

message CSVCMsg_GetCvarValue {
	optional int32 cookie = 1;
	optional string cvar_name = 2;
}

message CSVCMsg_Menu {
	optional int32 dialog_type = 1;
	optional bytes menu_key_values = 2;
}

message CSVCMsg_UserMessage {
	optional int32 msg_type = 1;
	optional bytes msg_data = 2;
	optional int32 passthrough = 3;
}

message CSVCMsg_SendTable {
	message sendprop_t {
		optional int32 type = 1;
		optional string var_name = 2;
		optional int32 flags = 3;
		optional int32 priority = 4;
		optional string dt_name = 5;
		optional int32 num_elements = 6;
		optional float low_value = 7;
		optional float high_value = 8;
		optional int32 num_bits = 9;
	}

	optional bool is_end = 1;
	optional string net_table_name = 2;
	optional bool needs_decoder = 3;
	repeated .CSVCMsg_SendTable.sendprop_t props = 4;
}

message CSVCMsg_GameEventList {
	message key_t {
		optional int32 type = 1;
		optional string name = 2;
	}

	message descriptor_t {
		optional int32 eventid = 1;
		optional string name = 2;
		repeated .CSVCMsg_GameEventList.key_t keys = 3;
	}

	repeated .CSVCMsg_GameEventList.descriptor_t descriptors = 1;
}

message CSVCMsg_PacketEntities {
	option (maximum_size_bytes) = 0;

	message alternate_baseline_t {
		optional int32 entity_index = 1;
		optional int32 baseline_index = 2;
	}

	message non_transmitted_entities_t {
		optional int32 header_count = 1;
		optional bytes data = 2;
	}

	message outofpvs_entity_updates_t {
		optional int32 count = 1;
		optional bytes data = 2;
	}

	optional int32 max_entries = 1;
	optional int32 updated_entries = 2;
	optional bool legacy_is_delta = 3;
	optional bool update_baseline = 4;
	optional int32 baseline = 5;
	optional int32 delta_from = 6;
	optional bytes entity_data = 7;
	optional bool pending_full_frame = 8;
	optional uint32 active_spawngroup_handle = 9;
	optional uint32 max_spawngroup_creationsequence = 10;
	optional uint32 last_cmd_number_executed = 11;
	optional sint32 last_cmd_number_recv_delta = 17;
	optional uint32 server_tick = 12;
	optional bytes serialized_entities = 13;
	repeated .CSVCMsg_PacketEntities.alternate_baseline_t alternate_baselines = 15;
	optional uint32 has_pvs_vis_bits_deprecated = 16;
	repeated sint32 cmd_recv_status = 22 [packed = true];
	optional .CSVCMsg_PacketEntities.non_transmitted_entities_t non_transmitted_entities = 19;
	optional uint32 cq_starved_command_ticks = 20;
	optional uint32 cq_discarded_command_ticks = 21;
	optional .CSVCMsg_PacketEntities.outofpvs_entity_updates_t outofpvs_entity_updates = 23;
	optional bytes dev_padding = 999;
}

message CSVCMsg_TempEntities {
	optional bool reliable = 1;
	optional int32 num_entries = 2;
	optional bytes entity_data = 3;
}

message CSVCMsg_CreateStringTable {
	option (maximum_size_bytes) = 102400;

	optional string name = 1;
	optional int32 num_entries = 2;
	optional bool user_data_fixed_size = 3;
	optional int32 user_data_size = 4;
	optional int32 user_data_size_bits = 5;
	optional int32 flags = 6;
	optional bytes string_data = 7;
	optional int32 uncompressed_size = 8;
	optional bool data_compressed = 9;
	optional bool using_varint_bitcounts = 10;
}

message CSVCMsg_UpdateStringTable {
	option (maximum_size_bytes) = 262144;

	optional int32 table_id = 1;
	optional int32 num_changed_entries = 2;
	optional bytes string_data = 3;
}

message CSVCMsg_VoiceData {
	optional .CMsgVoiceAudio audio = 1;
	optional int32 client = 2 [default = -1];
	optional bool proximity = 3;
	optional fixed64 xuid = 4;
	optional int32 audible_mask = 5;
	optional uint32 tick = 6;
	optional int32 passthrough = 7;
}

message CSVCMsg_PacketReliable {
	optional int32 tick = 1;
	optional int32 messagessize = 2;
	optional bool state = 3;
}

message CSVCMsg_FullFrameSplit {
	optional int32 tick = 1;
	optional int32 section = 2;
	optional int32 total = 3;
	optional bytes data = 4;
}

message CSVCMsg_HLTVStatus {
	optional string master = 1;
	optional int32 clients = 2;
	optional int32 slots = 3;
	optional int32 proxies = 4;
}

message CSVCMsg_ServerSteamID {
	optional uint64 steam_id = 1;
}

message CSVCMsg_CmdKeyValues {
	optional bytes data = 1;
}

message CSVCMsg_RconServerDetails {
	optional bytes token = 1;
	optional string details = 2;
}

message CMsgIPCAddress {
	optional fixed64 computer_guid = 1;
	optional uint32 process_id = 2;
}

message CMsgServerPeer {
	optional int32 player_slot = 1 [default = -1];
	optional fixed64 steamid = 2;
	optional .CMsgIPCAddress ipc = 3;
	optional bool they_hear_you = 4;
	optional bool you_hear_them = 5;
	optional bool is_listenserver_host = 6;
}

message CSVCMsg_PeerList {
	repeated .CMsgServerPeer peer = 1;
}

message CSVCMsg_ClearAllStringTables {
	optional string mapname = 1;
	optional bool create_tables_skipped = 3;
}

message ProtoFlattenedSerializerField_t {
	message polymorphic_field_t {
		optional int32 polymorphic_field_serializer_name_sym = 1;
		optional int32 polymorphic_field_serializer_version = 2;
	}

	optional int32 var_type_sym = 1;
	optional int32 var_name_sym = 2;
	optional int32 bit_count = 3;
	optional float low_value = 4;
	optional float high_value = 5;
	optional int32 encode_flags = 6;
	optional int32 field_serializer_name_sym = 7;
	optional int32 field_serializer_version = 8;
	optional int32 send_node_sym = 9;
	optional int32 var_encoder_sym = 10;
	repeated .ProtoFlattenedSerializerField_t.polymorphic_field_t polymorphic_types = 11;
	optional int32 var_serializer_sym = 12;
}

message ProtoFlattenedSerializer_t {
	optional int32 serializer_name_sym = 1;
	optional int32 serializer_version = 2;
	repeated int32 fields_index = 3;
}

message CSVCMsg_FlattenedSerializer {
	option (maximum_size_bytes) = 0;

	repeated .ProtoFlattenedSerializer_t serializers = 1;
	repeated string symbols = 2;
	repeated .ProtoFlattenedSerializerField_t fields = 3;
}

message CSVCMsg_StopSound {
	optional fixed32 guid = 1;
}

message CBidirMsg_RebroadcastGameEvent {
	optional bool posttoserver = 1;
	optional int32 buftype = 2;
	optional uint32 clientbitcount = 3;
	optional uint64 receivingclients = 4;
}

message CBidirMsg_RebroadcastSource {
	optional int32 eventsource = 1;
}

message CBidirMsg_PredictionEvent {
	enum ESyncType {
		ST_Tick = 0;
		ST_UserCmdNum = 1;
	}

	optional uint32 event_id = 1;
	optional bytes event_data = 2;
	optional uint32 sync_type = 3;
	optional uint32 sync_val_uint32 = 4;
}

message CMsgServerNetworkStats {
	message Port {
		optional int32 port = 1;
		optional string name = 2;
	}

	message Player {
		optional uint64 steamid = 1;
		optional string remote_addr = 2;
		optional int32 ping_avg_ms = 4;
		optional float packet_loss_pct = 5;
		optional bool is_bot = 6;
		optional float loss_in = 7;
		optional float loss_out = 8;
		optional int32 engine_latency_ms = 9;
	}

	optional bool dedicated = 1;
	optional int32 cpu_usage = 2;
	optional int32 memory_used_mb = 3;
	optional int32 memory_free_mb = 4;
	optional int32 uptime = 5;
	optional int32 spawn_count = 6;
	optional int32 num_clients = 8;
	optional int32 num_bots = 9;
	optional int32 num_spectators = 10;
	optional int32 num_tv_relays = 11;
	optional float fps = 12;
	repeated .CMsgServerNetworkStats.Port ports = 17;
	optional float avg_ping_ms = 18;
	optional float avg_engine_latency_out = 19;
	optional float avg_packets_out = 20;
	optional float avg_packets_in = 21;
	optional float avg_loss_out = 22;
	optional float avg_loss_in = 23;
	optional float avg_data_out = 24;
	optional float avg_data_in = 25;
	optional uint64 total_data_in = 26;
	optional uint64 total_packets_in = 27;
	optional uint64 total_data_out = 28;
	optional uint64 total_packets_out = 29;
	repeated .CMsgServerNetworkStats.Player players = 30;
}

message CSVCMsg_HltvReplay {
	optional int32 delay = 1;
	optional int32 primary_target = 2 [default = -1];
	optional int32 replay_stop_at = 3;
	optional int32 replay_start_at = 4;
	optional int32 replay_slowdown_begin = 5;
	optional int32 replay_slowdown_end = 6;
	optional float replay_slowdown_rate = 7;
	optional int32 reason = 8;
}

message CCLCMsg_HltvReplay {
	optional int32 request = 1;
	optional float slowdown_length = 2;
	optional float slowdown_rate = 3;
	optional int32 primary_target = 4 [default = -1];
	optional float event_time = 5;
}

message CSVCMsg_Broadcast_Command {
	optional string cmd = 1;
}

message CCLCMsg_HltvFixupOperatorTick {
	optional int32 tick = 1;
	optional bytes props_data = 2;
	optional .CMsgVector origin = 3;
	optional .CMsgQAngle eye_angles = 4;
	optional int32 observer_mode = 5;
	optional bool cameraman_scoreboard = 6;
	optional int32 observer_target = 7;
	optional .CMsgVector view_offset = 8;
}

message CSVCMsg_HltvFixupOperatorStatus {
	optional uint32 mode = 1;
	optional string override_operator_name = 2;
}

message CMsgServerUserCmd {
	optional bytes data = 1;
	optional int32 cmd_number = 2;
	optional int32 player_slot = 3 [default = -1];
	optional int32 server_tick_executed = 4;
	optional int32 client_tick = 5;
}

message CSVCMsg_UserCommands {
	repeated .CMsgServerUserCmd commands = 1;
}

message CSVCMsg_NextMsgPredicted {
	optional int32 predicted_by_player_slot = 1 [default = -1];
	optional uint32 message_type_id = 2;
}
