diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6d9b5a7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,158 @@ +name: CI + +on: [push, pull_request, workflow_dispatch] + +jobs: + build: + name: Build + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04] + sourcemod-version: [1.11-dev] + protobuf-version: [v2.5.0] + protobuf-valve-version: [master] + include: + - os: ubuntu-20.04 + target-archs: x86,x86_64 + sdks: css,csgo + + steps: + - name: Install Linux packages + if: runner.os == 'Linux' + run: | + sudo apt update + sudo apt install -yq --no-install-recommends g++-multilib + + - name: Set up Python + uses: actions/setup-python@v2 + + - name: Checkout + uses: actions/checkout@v2 + with: + path: extension + + - name: Checkout SourceMod + uses: actions/checkout@v2 + with: + repository: alliedmodders/sourcemod + ref: ${{ matrix.sourcemod-version }} + path: sourcemod + submodules: recursive + + - name: Checkout AMBuild + uses: actions/checkout@v2 + with: + repository: alliedmodders/ambuild + path: ambuild + + - name: Checkout sm-ext-common + uses: actions/checkout@v2 + with: + repository: srcdslab/sm-ext-common + path: sourcemod/extensions/sm-ext-common + + - name: Checkout valve protobuf + uses: actions/checkout@v2 + with: + repository: SteamDatabase/Protobufs + ref: ${{ matrix.protobuf-valve-version }} + path: protobuf-valve + submodules: recursive + + - name: Checkout protobuf + uses: actions/checkout@v2 + with: + repository: protocolbuffers/protobuf + ref: ${{ matrix.protobuf-version }} + path: protobuf + submodules: recursive + + - name: Install sourcemod dependencies + run: | + bash sourcemod/tools/checkout-deps.sh -m -s ${{ matrix.sdks }} + + - name: Install AMBuild + uses: BSFishy/pip-action@v1 + with: + packages: ./ambuild + + - name: Install protobuf + shell: bash + run: | + export EXTENSION_ROOT_DIR=$(pwd) + cd protobuf + + #sh autogen.sh + + # Fix because autogen in protobuf 2.5.0 doesnt work anymore + autoreconf -f -i -Wall,no-obsolete + rm -rf autom4te.cache config.h.in~ + + # Make sure to compile for 32bit with old ABI for std::string compatibility + ./configure --prefix=$EXTENSION_ROOT_DIR/protobuf --build=i686-pc-linux-gnu "CFLAGS=-m32 -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14" "CXXFLAGS=-m32 -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14" "LDFLAGS=-m32 -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14" --disable-shared --enable-static + make -j 8 + make install + + # Compile .proto files to c++ + + cd ../protobuf-valve + ../protobuf/bin/protoc google/protobuf/descriptor.proto --cpp_out=./ + ../protobuf/bin/protoc csgo/netmessages.proto --cpp_out=./ + ls -all + + - name: Build + working-directory: extension + shell: bash + env: + BREAKPAD_SYMBOL_SERVER: ${{ secrets.BREAKPAD_SYMBOL_SERVER }} + run: | + mkdir build && cd build + python ../configure.py --enable-optimize --targets=${{ matrix.target-archs }} --sdks=${{ matrix.sdks }} + ambuild + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ runner.os }} + path: extension/build/package + + + release: + name: Release + if: startsWith(github.ref, 'refs/tags/') + needs: build + runs-on: ubuntu-latest + + steps: + - name: Download artifacts + uses: actions/download-artifact@v2 + + - name: Package + run: | + version=`echo $GITHUB_REF | sed "s/refs\/tags\///"` + ls -Rall + if [ -d "./Linux/" ]; then + cd ./Linux/ + tar -czf ../${{ github.event.repository.name }}-${version}-linux.tar.gz -T <(\ls -1) + cd - + fi + if [ -d "./macOS/" ]; then + cd ./macOS/ + tar -czf ../${{ github.event.repository.name }}-${version}-mac.tar.gz -T <(\ls -1) + cd - + fi + if [ -d "./Windows/" ]; then + cd ./Windows/ + tar -czf ../${{ github.event.repository.name }}-${version}-windows.tar.gz -T <(\ls -1) + cd - + fi + + - name: Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: '*.tar.gz' + tag: ${{ github.ref }} + file_glob: true diff --git a/AMBuildScript b/AMBuildScript index a689c86..3ca79c1 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -31,11 +31,6 @@ class SDK(object): WinOnly = ['windows'] WinLinux = ['windows', 'linux'] WinLinuxMac = ['windows', 'linux', 'mac'] -CSGO = { - 'windows': ['x86'], - 'linux': ['x86', 'x86_64'], - 'mac': ['x86_64'] -} PossibleSDKs = { 'css': SDK('HL2SDKCSS', '2.css', '6', 'CSS', WinLinuxMac, 'css'), @@ -87,6 +82,8 @@ class ExtensionConfig(object): self.versionlib = None self.all_targets = [] self.target_archs = set() + self.protobuf_root = None + self.protobuf_valve_root = None if builder.options.targets: @@ -185,12 +182,36 @@ class ExtensionConfig(object): raise Exception('Could not find a source copy of Metamod:Source') self.mms_root = Normalize(self.mms_root) - # Run protobuf compilation and copy files to corresponding folders - if 'csgo' in self.sdks: - os.chdir("../pb/") - os.chmod('./build_protobuf.sh', 0o755) - subprocess.call("./build_protobuf.sh") + if 'csgo' in sdk_list: + if builder.options.protobuf_valve_path: + self.protobuf_valve_root = builder.options.protobuf_valve_path + else: + self.protobuf_valve_root = ResolveEnvPath('PBVSOURCE110', 'protobuf-valve-2.5.0') + if not self.protobuf_valve_root: + self.protobuf_valve_root = ResolveEnvPath('PBVSOURCE_DEV', 'protobuf-valve-source') + if not self.protobuf_valve_root: + self.protobuf_valve_root = ResolveEnvPath('PBVSOURCE_DEV', 'protobuf-valve-central') + if not self.protobuf_valve_root: + self.protobuf_valve_root = ResolveEnvPath('PBVSOURCE_DEV', 'protobuf-valve') + if not self.protobuf_valve_root or not os.path.isdir(self.protobuf_valve_root): + raise Exception('Could not find a source copy of valve Protobuf') + self.protobuf_valve_root = Normalize(self.protobuf_valve_root) + + if builder.options.protobuf_path: + self.protobuf_root = builder.options.protobuf_path + else: + self.protobuf_root = ResolveEnvPath('PBSOURCE110', 'protobuf-2.5.0') + if not self.protobuf_root: + self.protobuf_root = ResolveEnvPath('PBSOURCE_DEV', 'protobuf-source') + if not self.protobuf_root: + self.protobuf_root = ResolveEnvPath('PBSOURCE_DEV', 'protobuf-central') + if not self.protobuf_root: + self.protobuf_root = ResolveEnvPath('PBSOURCE_DEV', 'protobuf') + + if not self.protobuf_root or not os.path.isdir(self.protobuf_root): + raise Exception('Could not find a source copy of Protobuf') + self.protobuf_root = Normalize(self.protobuf_root) def configure(self): if not set(self.target_archs).issubset(['x86', 'x86_64']): diff --git a/AMBuilder b/AMBuilder index 04c364f..dd95518 100644 --- a/AMBuilder +++ b/AMBuilder @@ -40,15 +40,16 @@ for cxx in builder.targets: if sdk.name in ['csgo']: binary.compiler.cxxincludes += [ - os.path.join(builder.sourcePath, 'pb', 'include'), + os.path.join(SM.protobuf_root, 'include'), + os.path.join(SM.protobuf_valve_root), ] binary.compiler.postlink += [ - '-L' + os.path.join(builder.sourcePath, 'pb', 'lib'), + '-L' + os.path.join(SM.protobuf_root, 'lib'), '-lprotobuf' ] binary.sources += [ - os.path.join(builder.sourcePath, 'pb', 'csgo', 'netmessages.pb.cc'), + os.path.join(SM.protobuf_valve_root, 'csgo', 'netmessages.pb.cc'), ] binary.compiler.cxxincludes += [ diff --git a/configure.py b/configure.py index 2804d35..bdf5816 100755 --- a/configure.py +++ b/configure.py @@ -26,6 +26,10 @@ parser.options.add_argument('--mms-path', type=str, dest='mms_path', default=Non help='Path to Metamod:Source') parser.options.add_argument('--sm-path', type=str, dest='sm_path', default=None, help='Path to SourceMod') +parser.options.add_argument('--protobuf-valve-path', type=str, dest='protobuf_valve_path', default=None, + help='Path to valve protobuf') +parser.options.add_argument('--protobuf-path', type=str, dest='protobuf_path', default=None, + help='Path to protobuf') parser.options.add_argument('--enable-debug', action='store_const', const='1', dest='debug', help='Enable debugging symbols') parser.options.add_argument('--enable-optimize', action='store_const', const='1', dest='opt', diff --git a/extension.h b/extension.h index cda2734..bbb16ab 100644 --- a/extension.h +++ b/extension.h @@ -38,7 +38,7 @@ #include "ringbuffer.h" #if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_INSURGENCY -#include "pb/csgo/netmessages.pb.h" +#include "csgo/netmessages.pb.h" #endif /** diff --git a/pb/build_protobuf.sh b/pb/build_protobuf.sh deleted file mode 100644 index 2d4e251..0000000 --- a/pb/build_protobuf.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -if [[ -d protobuf-master ]]; then - exit 0; -fi; - -# Protouf version used by CSGO -PROTOBUF_VERSION=v2.5.0 - -git clone https://github.com/protocolbuffers/protobuf.git -b $PROTOBUF_VERSION --recursive protobuf-master -cd protobuf-master - -#sh autogen.sh - -# Fix because autogen in protobuf 2.5.0 doesnt work anymore -autoreconf -f -i -Wall,no-obsolete -rm -rf autom4te.cache config.h.in~ - -# Make sure to compile for 32bit with old ABI for std::string compatibility -./configure --prefix=/home/alliedmodders/sourcemod/extensions/sm-ext-voice/pb --build=i686-pc-linux-gnu "CFLAGS=-m32 -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14" "CXXFLAGS=-m32 -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14" "LDFLAGS=-m32 -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14" --disable-shared --enable-static -make -j 8 -make install - -# Compile .proto files to c++ - -cd ../csgo -../bin/protoc google/protobuf/descriptor.proto --cpp_out=./ -../bin/protoc netmessages.proto --cpp_out=./ diff --git a/pb/csgo/google/protobuf/descriptor.proto b/pb/csgo/google/protobuf/descriptor.proto deleted file mode 100644 index b027191..0000000 --- a/pb/csgo/google/protobuf/descriptor.proto +++ /dev/null @@ -1,281 +0,0 @@ -package google.protobuf; - -option optimize_for = SPEED; -option go_package = "google.golang.org/protobuf/types/descriptorpb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "DescriptorProtos"; - -message FileDescriptorSet { - repeated .google.protobuf.FileDescriptorProto file = 1; -} - -message FileDescriptorProto { - optional string name = 1; - optional string package = 2; - repeated string dependency = 3; - repeated int32 public_dependency = 10; - repeated int32 weak_dependency = 11; - repeated .google.protobuf.DescriptorProto message_type = 4; - repeated .google.protobuf.EnumDescriptorProto enum_type = 5; - repeated .google.protobuf.ServiceDescriptorProto service = 6; - repeated .google.protobuf.FieldDescriptorProto extension = 7; - optional .google.protobuf.FileOptions options = 8; - optional .google.protobuf.SourceCodeInfo source_code_info = 9; - optional string syntax = 12; -} - -message DescriptorProto { - message ExtensionRange { - optional int32 start = 1; - optional int32 end = 2; - optional .google.protobuf.ExtensionRangeOptions options = 3; - } - - message ReservedRange { - optional int32 start = 1; - optional int32 end = 2; - } - - optional string name = 1; - repeated .google.protobuf.FieldDescriptorProto field = 2; - repeated .google.protobuf.FieldDescriptorProto extension = 6; - repeated .google.protobuf.DescriptorProto nested_type = 3; - repeated .google.protobuf.EnumDescriptorProto enum_type = 4; - repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; - repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; - optional .google.protobuf.MessageOptions options = 7; - repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; - repeated string reserved_name = 10; -} - -message ExtensionRangeOptions { - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message FieldDescriptorProto { - enum Type { - TYPE_DOUBLE = 1; - TYPE_FLOAT = 2; - TYPE_INT64 = 3; - TYPE_UINT64 = 4; - TYPE_INT32 = 5; - TYPE_FIXED64 = 6; - TYPE_FIXED32 = 7; - TYPE_BOOL = 8; - TYPE_STRING = 9; - TYPE_GROUP = 10; - TYPE_MESSAGE = 11; - TYPE_BYTES = 12; - TYPE_UINT32 = 13; - TYPE_ENUM = 14; - TYPE_SFIXED32 = 15; - TYPE_SFIXED64 = 16; - TYPE_SINT32 = 17; - TYPE_SINT64 = 18; - } - - enum Label { - LABEL_OPTIONAL = 1; - LABEL_REQUIRED = 2; - LABEL_REPEATED = 3; - } - - optional string name = 1; - optional int32 number = 3; - optional .google.protobuf.FieldDescriptorProto.Label label = 4 [default = LABEL_OPTIONAL]; - optional .google.protobuf.FieldDescriptorProto.Type type = 5 [default = TYPE_DOUBLE]; - optional string type_name = 6; - optional string extendee = 2; - optional string default_value = 7; - optional int32 oneof_index = 9; - optional string json_name = 10; - optional .google.protobuf.FieldOptions options = 8; - optional bool proto3_optional = 17; -} - -message OneofDescriptorProto { - optional string name = 1; - optional .google.protobuf.OneofOptions options = 2; -} - -message EnumDescriptorProto { - message EnumReservedRange { - optional int32 start = 1; - optional int32 end = 2; - } - - optional string name = 1; - repeated .google.protobuf.EnumValueDescriptorProto value = 2; - optional .google.protobuf.EnumOptions options = 3; - repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; - repeated string reserved_name = 5; -} - -message EnumValueDescriptorProto { - optional string name = 1; - optional int32 number = 2; - optional .google.protobuf.EnumValueOptions options = 3; -} - -message ServiceDescriptorProto { - optional string name = 1; - repeated .google.protobuf.MethodDescriptorProto method = 2; - optional .google.protobuf.ServiceOptions options = 3; -} - -message MethodDescriptorProto { - optional string name = 1; - optional string input_type = 2; - optional string output_type = 3; - optional .google.protobuf.MethodOptions options = 4; - optional bool client_streaming = 5 [default = false]; - optional bool server_streaming = 6 [default = false]; -} - -message FileOptions { - enum OptimizeMode { - SPEED = 1; - CODE_SIZE = 2; - LITE_RUNTIME = 3; - } - - optional string java_package = 1; - optional string java_outer_classname = 8; - optional bool java_multiple_files = 10 [default = false]; - optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - optional bool java_string_check_utf8 = 27 [default = false]; - optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - optional string go_package = 11; - optional bool cc_generic_services = 16 [default = false]; - optional bool java_generic_services = 17 [default = false]; - optional bool py_generic_services = 18 [default = false]; - optional bool php_generic_services = 42 [default = false]; - optional bool deprecated = 23 [default = false]; - optional bool cc_enable_arenas = 31 [default = true]; - optional string objc_class_prefix = 36; - optional string csharp_namespace = 37; - optional string swift_prefix = 39; - optional string php_class_prefix = 40; - optional string php_namespace = 41; - optional string php_metadata_namespace = 44; - optional string ruby_package = 45; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message MessageOptions { - optional bool message_set_wire_format = 1 [default = false]; - optional bool no_standard_descriptor_accessor = 2 [default = false]; - optional bool deprecated = 3 [default = false]; - optional bool map_entry = 7; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message FieldOptions { - enum CType { - STRING = 0; - CORD = 1; - STRING_PIECE = 2; - } - - enum JSType { - JS_NORMAL = 0; - JS_STRING = 1; - JS_NUMBER = 2; - } - - optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - optional bool packed = 2; - optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - optional bool lazy = 5 [default = false]; - optional bool deprecated = 3 [default = false]; - optional bool weak = 10 [default = false]; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message OneofOptions { - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message EnumOptions { - optional bool allow_alias = 2; - optional bool deprecated = 3 [default = false]; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message EnumValueOptions { - optional bool deprecated = 1 [default = false]; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message ServiceOptions { - optional bool deprecated = 33 [default = false]; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message MethodOptions { - enum IdempotencyLevel { - IDEMPOTENCY_UNKNOWN = 0; - NO_SIDE_EFFECTS = 1; - IDEMPOTENT = 2; - } - - optional bool deprecated = 33 [default = false]; - optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - - extensions 1000 to max; -} - -message UninterpretedOption { - message NamePart { - required string name_part = 1; - required bool is_extension = 2; - } - - repeated .google.protobuf.UninterpretedOption.NamePart name = 2; - optional string identifier_value = 3; - optional uint64 positive_int_value = 4; - optional int64 negative_int_value = 5; - optional double double_value = 6; - optional bytes string_value = 7; - optional string aggregate_value = 8; -} - -message SourceCodeInfo { - message Location { - repeated int32 path = 1 [packed = true]; - repeated int32 span = 2 [packed = true]; - optional string leading_comments = 3; - optional string trailing_comments = 4; - repeated string leading_detached_comments = 6; - } - - repeated .google.protobuf.SourceCodeInfo.Location location = 1; -} - -message GeneratedCodeInfo { - message Annotation { - repeated int32 path = 1 [packed = true]; - optional string source_file = 2; - optional int32 begin = 3; - optional int32 end = 4; - } - - repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; -} \ No newline at end of file diff --git a/pb/csgo/netmessages.proto b/pb/csgo/netmessages.proto deleted file mode 100644 index cab4a65..0000000 --- a/pb/csgo/netmessages.proto +++ /dev/null @@ -1,491 +0,0 @@ -import "google/protobuf/descriptor.proto"; - -option cc_generic_services = false; - -enum NET_Messages { - net_NOP = 0; - net_Disconnect = 1; - net_File = 2; - net_SplitScreenUser = 3; - net_Tick = 4; - net_StringCmd = 5; - net_SetConVar = 6; - net_SignonState = 7; - net_PlayerAvatarData = 100; -} - -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; - clc_CmdKeyValues = 18; - clc_HltvReplay = 20; -} - -enum VoiceDataFormat_t { - VOICEDATA_FORMAT_STEAM = 0; - VOICEDATA_FORMAT_ENGINE = 1; -} - -enum ESplitScreenMessageType { - option allow_alias = true; - MSG_SPLITSCREEN_ADDUSER = 0; - MSG_SPLITSCREEN_REMOVEUSER = 1; - MSG_SPLITSCREEN_TYPE_BITS = 1; -} - -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_PaintmapData = 33; - svc_CmdKeyValues = 34; - svc_EncryptedData = 35; - svc_HltvReplay = 36; - svc_Broadcast_Command = 38; -} - -enum ReplayEventType_t { - REPLAY_EVENT_CANCEL = 0; - REPLAY_EVENT_DEATH = 1; - REPLAY_EVENT_GENERIC = 2; - REPLAY_EVENT_STUCK_NEED_FULL_UPDATE = 3; -} - -message CMsgVector { - optional float x = 1; - optional float y = 2; - optional float z = 3; -} - -message CMsgVector2D { - optional float x = 1; - optional float y = 2; -} - -message CMsgQAngle { - optional float x = 1; - optional float y = 2; - optional float z = 3; -} - -message CMsgRGBA { - optional int32 r = 1; - optional int32 g = 2; - optional int32 b = 3; - optional int32 a = 4; -} - -message CNETMsg_Tick { - optional uint32 tick = 1; - optional uint32 host_computationtime = 4; - optional uint32 host_computationtime_std_deviation = 5; - optional uint32 host_framestarttime_std_deviation = 6; - optional uint32 hltv_replay_flags = 7; -} - -message CNETMsg_StringCmd { - optional string command = 1; -} - -message CNETMsg_SignonState { - optional uint32 signon_state = 1; - optional uint32 spawn_count = 2; - optional uint32 num_server_players = 3; - repeated string players_networkids = 4; - optional string map_name = 5; -} - -message CMsg_CVars { - message CVar { - optional string name = 1; - optional string value = 2; - optional uint32 dictionary_name = 3; - } - - repeated .CMsg_CVars.CVar cvars = 1; -} - -message CNETMsg_SetConVar { - optional .CMsg_CVars convars = 1; -} - -message CNETMsg_NOP { -} - -message CNETMsg_Disconnect { - optional string text = 1; -} - -message CNETMsg_File { - optional int32 transfer_id = 1; - optional string file_name = 2; - optional bool is_replay_demo_file = 3; - optional bool deny = 4; -} - -message CNETMsg_SplitScreenUser { - optional int32 slot = 1; -} - -message CNETMsg_PlayerAvatarData { - optional uint32 accountid = 1; - optional bytes rgb = 2; -} - -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_ENGINE]; - optional int32 sequence_bytes = 4; - optional uint32 section_number = 5; - optional uint32 uncompressed_sample_offset = 6; -} - -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 int32 file_fraction = 5; - optional bytes md5 = 6; - optional uint32 crc = 7; - optional int32 file_hash_type = 8; - optional int32 file_len = 9; - optional int32 pack_file_id = 10; - optional int32 pack_file_number = 11; -} - -message CCLCMsg_LoadingProgress { - optional int32 progress = 1; -} - -message CCLCMsg_SplitPlayerConnect { - optional .CMsg_CVars convars = 1; -} - -message CCLCMsg_CmdKeyValues { - optional bytes keyvalues = 1; -} - -message CSVCMsg_ServerInfo { - optional int32 protocol = 1; - optional int32 server_count = 2; - optional bool is_dedicated = 3; - optional bool is_official_valve_server = 4; - optional bool is_hltv = 5; - optional bool is_replay = 6; - optional bool is_redirecting_to_proxy_relay = 21; - optional int32 c_os = 7; - optional fixed32 map_crc = 8; - optional fixed32 client_crc = 9; - optional fixed32 string_table_crc = 10; - optional int32 max_clients = 11; - optional int32 max_classes = 12; - optional int32 player_slot = 13; - optional float tick_interval = 14; - optional string game_dir = 15; - optional string map_name = 16; - optional string map_group_name = 17; - optional string sky_name = 18; - optional string host_name = 19; - optional uint32 public_ip = 20; - optional uint64 ugc_map_id = 22; -} - -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_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_Print { - optional string text = 1; -} - -message CSVCMsg_SetPause { - optional bool paused = 1; -} - -message CSVCMsg_SetView { - optional int32 entity_index = 1; -} - -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_VoiceInit { - optional int32 quality = 1; - optional string codec = 2; - optional int32 version = 3 [default = 0]; -} - -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 bool caster = 6; - optional .VoiceDataFormat_t format = 7 [default = VOICEDATA_FORMAT_ENGINE]; - optional int32 sequence_bytes = 8; - optional uint32 section_number = 9; - optional uint32 uncompressed_sample_offset = 10; -} - -message CSVCMsg_FixAngle { - optional bool relative = 1; - optional .CMsgQAngle angle = 2; -} - -message CSVCMsg_CrosshairAngle { - optional .CMsgQAngle angle = 1; -} - -message CSVCMsg_Prefetch { - optional int32 sound_index = 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_UserMessage { - optional int32 msg_type = 1; - optional bytes msg_data = 2; - optional int32 passthrough = 3; -} - -message CSVCMsg_PaintmapData { - optional bytes paintmap = 1; -} - -message CSVCMsg_GameEvent { - message key_t { - optional int32 type = 1; - optional string val_string = 2; - optional float val_float = 3; - optional int32 val_long = 4; - optional int32 val_short = 5; - optional int32 val_byte = 6; - optional bool val_bool = 7; - optional uint64 val_uint64 = 8; - optional bytes val_wstring = 9; - } - - optional string event_name = 1; - optional int32 eventid = 2; - repeated .CSVCMsg_GameEvent.key_t keys = 3; - optional int32 passthrough = 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_TempEntities { - optional bool reliable = 1; - optional int32 num_entries = 2; - optional bytes entity_data = 3; -} - -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; -} - -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_EntityMsg { - optional int32 ent_index = 1; - optional int32 class_id = 2; - optional bytes ent_data = 3; -} - -message CSVCMsg_CmdKeyValues { - optional bytes keyvalues = 1; -} - -message CSVCMsg_EncryptedData { - optional bytes encrypted = 1; - optional int32 key_type = 2; -} - -message CSVCMsg_HltvReplay { - optional int32 delay = 1; - optional int32 primary_target = 2; - 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; -} - -message CCLCMsg_HltvReplay { - optional int32 request = 1; - optional float slowdown_length = 2; - optional float slowdown_rate = 3; - optional int32 primary_target_ent_index = 4; - optional float event_time = 5; -} - -message CSVCMsg_Broadcast_Command { - optional string cmd = 1; -} \ No newline at end of file diff --git a/version.rc b/version.rc new file mode 100644 index 0000000..d45a0c7 --- /dev/null +++ b/version.rc @@ -0,0 +1,103 @@ +// Microsoft Visual C++ generated resource script. +// +//#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +#include + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION SM_VERSION_FILE + PRODUCTVERSION SM_VERSION_FILE + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "Comments", "SourceMod Extension" + VALUE "FileDescription", "SourceMod Extension" + VALUE "FileVersion", SM_VERSION_STRING + VALUE "InternalName", "SourceMod Extension" + VALUE "LegalCopyright", "Copyright (c) 2004-2022, AlliedModders LLC" + VALUE "OriginalFilename", BINARY_NAME + VALUE "ProductName", "SourceMod Extension" + VALUE "ProductVersion", SM_VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED