import "networkbasetypes.proto";

option cc_generic_services = false;

enum CLC_Messages {
	clc_ClientInfo = 8;
	clc_Move = 9;
	clc_VoiceData = 10;
	clc_BaselineAck = 11;
	clc_ListenEvents = 12;
	clc_RespondCvarValue = 13;
	clc_FileCRCCheck = 14;
	clc_LoadingProgress = 15;
	clc_SplitPlayerConnect = 16;
	clc_ClientMessage = 17;
}

enum SVC_Messages {
	svc_ServerInfo = 8;
	svc_SendTable = 9;
	svc_ClassInfo = 10;
	svc_SetPause = 11;
	svc_CreateStringTable = 12;
	svc_UpdateStringTable = 13;
	svc_VoiceInit = 14;
	svc_VoiceData = 15;
	svc_Print = 16;
	svc_Sounds = 17;
	svc_SetView = 18;
	svc_FixAngle = 19;
	svc_CrosshairAngle = 20;
	svc_BSPDecal = 21;
	svc_SplitScreen = 22;
	svc_UserMessage = 23;
	svc_EntityMessage = 24;
	svc_GameEvent = 25;
	svc_PacketEntities = 26;
	svc_TempEntities = 27;
	svc_Prefetch = 28;
	svc_Menu = 29;
	svc_GameEventList = 30;
	svc_GetCvarValue = 31;
	svc_PacketReliable = 32;
	svc_FullFrameSplit = 33;
}

enum VoiceDataFormat_t {
	VOICEDATA_FORMAT_STEAM = 0;
	VOICEDATA_FORMAT_ENGINE = 1;
}

enum ESplitScreenMessageType {
	MSG_SPLITSCREEN_ADDUSER = 0;
	MSG_SPLITSCREEN_REMOVEUSER = 1;
}

message CCLCMsg_ClientInfo {
	optional fixed32 send_table_crc = 1;
	optional uint32 server_count = 2;
	optional bool is_hltv = 3;
	optional bool is_replay = 4;
	optional uint32 friends_id = 5;
	optional string friends_name = 6;
	repeated fixed32 custom_files = 7;
}

message CCLCMsg_Move {
	optional uint32 num_backup_commands = 1;
	optional uint32 num_new_commands = 2;
	optional bytes data = 3;
}

message CCLCMsg_VoiceData {
	optional bytes data = 1;
	optional fixed64 xuid = 2;
	optional .VoiceDataFormat_t format = 3 [default = VOICEDATA_FORMAT_STEAM];
	optional int32 sequence_bytes = 4;
	optional uint32 section_number = 5;
	optional uint32 uncompressed_sample_offset = 6;
	optional uint32 tick = 7;
}

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_FileCRCCheck {
	optional int32 code_path = 1;
	optional string path = 2;
	optional int32 code_filename = 3;
	optional string filename = 4;
	optional fixed32 crc = 5;
}

message CCLCMsg_LoadingProgress {
	optional int32 progress = 1;
}

message CCLCMsg_SplitPlayerConnect {
	optional .CMsg_CVars convars = 1;
}

message CCLCMsg_ClientMessage {
	optional int32 msg_type = 1;
	optional bytes data = 2;
}

message CSVCMsg_ServerInfo {
	optional int32 protocol = 1;
	optional int32 server_count = 2;
	optional bool is_dedicated = 3;
	optional bool is_hltv = 4;
	optional bool is_replay = 5;
	optional int32 c_os = 6;
	optional fixed32 map_crc = 7;
	optional fixed32 client_crc = 8;
	optional fixed32 string_table_crc = 9;
	optional int32 max_clients = 10;
	optional int32 max_classes = 11;
	optional int32 player_slot = 12;
	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;
}

message CSVCMsg_ClassInfo {
	message class_t {
		optional int32 class_id = 1;
		optional string data_table_name = 2;
		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 {
	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;
		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 bool reliable_sound = 1;
	repeated .CSVCMsg_Sounds.sounddata_t sounds = 2;
}

message CSVCMsg_Prefetch {
	optional int32 sound_index = 1;
}

message CSVCMsg_SetView {
	optional int32 entity_index = 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;
	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;
}

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_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 {
	optional int32 max_entries = 1;
	optional int32 updated_entries = 2;
	optional bool 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;
}

message CSVCMsg_TempEntities {
	optional bool reliable = 1;
	optional int32 num_entries = 2;
	optional bytes entity_data = 3;
}

message CSVCMsg_CreateStringTable {
	optional string name = 1;
	optional int32 max_entries = 2;
	optional int32 num_entries = 3;
	optional bool user_data_fixed_size = 4;
	optional int32 user_data_size = 5;
	optional int32 user_data_size_bits = 6;
	optional int32 flags = 7;
	optional bytes string_data = 8;
}

message CSVCMsg_UpdateStringTable {
	optional int32 table_id = 1;
	optional int32 num_changed_entries = 2;
	optional bytes string_data = 3;
}

message CSVCMsg_VoiceData {
	optional int32 client = 1;
	optional bool proximity = 2;
	optional fixed64 xuid = 3;
	optional int32 audible_mask = 4;
	optional bytes voice_data = 5;
	optional .VoiceDataFormat_t format = 6 [default = VOICEDATA_FORMAT_STEAM];
	optional int32 sequence_bytes = 7;
	optional uint32 section_number = 8;
	optional uint32 uncompressed_sample_offset = 9;
	optional uint32 tick = 10;
}

message CSVCMsg_PacketReliable {
	optional int32 tick = 1;
	optional int32 messagessize = 2;
}

message CSVCMsg_FullFrameSplit {
	optional int32 tick = 1;
	optional int32 section = 2;
	optional int32 total = 3;
	optional bytes data = 4;
}

