--- /dev/null
+*.[oad]
+*.bc
+dist/*
--- /dev/null
+#Mihrtec Standard Makefile
+#Author: ksg
+
+#Project Info
+APPNAME := the_march
+MODULES := core
+CFLAGS := -Wall
+APP_RULES :=
+CLEAN_RULES :=
+SCRUB_RULES :=
+
+
+ifdef EMSCRIPTEN_TOOLS
+#Emscripten build environment
+APP_RULES += move
+HTML := index.html js/the_march.config.js
+CC := emcc
+EXPORTS := '_em_main'
+EMOPTS := --separate-asm -s ALLOW_MEMORY_GROWTH=1 -s FORCE_FILESYSTEM=1 --pre-js html/js/pre.js
+LIBS += -s USE_SDL=2 -s USE_SDL_TTF=2 -s USE_SDL_IMAGE=2 -s SDL2_IMAGE_FORMATS='["png"]'
+EXEPATH := ../dist/bin/jasm/js
+EXE := $(APPNAME).js
+OBJFILE :=bc
+EMFLAGS := $(EMOPTS) $(LIBS) -s EXPORTED_FUNCTIONS="[$(EXPORTS)]"
+EMFLAGS += -I/usr/include/google
+BYPRODUCT := $(APPNAME).asm.js $(APPNAME).js.mem
+else
+#Native Build Environment
+CC := gcc
+LIBS := -lprotobuf-c
+LIBS += -lSDL2_ttf -lSDL2_image -lSDL2main -lSDL2 -lopengl32
+EXEPATH := ../dist/bin/$(shell uname -m)
+#windows mingw build rules
+ifeq ($(OS), Windows_NT)
+LIBS := -lmingw32 -mwindows $(LIBS)
+EXE := $(APPNAME).exe
+else
+EXE := $(APPNAME)
+endif
+OBJFILE :=o
+endif
+
+#-I each of the module directories, include directory, and define APPNAME.
+CFLAGS += $(patsubst %,-I%, $(MODULES))
+CFLAGS += -Iinclude -I.
+CFLAGS += -DAPPNAME=$(APPNAME)
+
+#auto include all .c files
+SRC += $(patsubst %,%/*.c,$(MODULES))
+SRC := $(wildcard $(SRC))
+
+#Targets that don't generate a file
+.PHONY: $(APPNAME) run push dox doc clean scrub all default move
+#Define default rules to point to APPNAME
+all default: clean $(APPNAME)
+
+#include rules from any .mk file found in a module directory
+include $(wildcard $(patsubst %,%/*.mk,$(MODULES)))
+
+#populate C objects and dependency files to generate from SRC
+COBJ += $(patsubst %.c,%.$(OBJFILE), $(filter %.c,$(SRC)))
+CDEP += $(COBJ:.$(OBJFILE)=.d)
+
+include $(CDEP)
+
+#Build the executable
+$(APPNAME): $(APP_RULES) $(CDEP) $(COBJ)
+ @mkdir -p $(EXEPATH)
+ $(CC) -o $(EXEPATH)/$(EXE) $(EMFLAGS) $(CXXFLAGS) $(CFLAGS) core/main.$(OBJFILE) $(LIBS)
+
+#run the game after making it
+run: $(APPNAME)
+ $(EXEPATH)/$(EXE)
+
+#push to github after successful compile
+push: $(APPNAME)
+ @printf '\nEnter a commit message:\n'; \
+ read CMT; \
+ git commit -am "$$CMT"
+ git push origin master
+
+dox doc:
+ doxygen dox.conf
+
+#clean up intermediate dependency files and binaries
+clean: $(CLEAN_RULES)
+ @echo "Cleaning - Recompiling .d (deps) and .$(OBJFILE) (obj)"
+ @rm -f $(EXEPATH)/$(EXE) $(patsubst %,$(EXEPATH)/%, $(BYPRODUCT))
+ @rm -f $(patsubst %,%/*.$(OBJFILE), $(MODULES))
+ @rm -f $(patsubst %,%/*.d, $(MODULES))
+
+#Scrub down to minimal distribution
+scrub: clean $(SCRUB_RULES)
+
+#construct list of move rules for each HTML item
+.PHONY: $(HTML)
+$(HTML):
+ @cp -f html/$@ ../dist/bin/jasm/$@
+#move js/html files
+move: $(HTML)
+
+################## DEFAULTS #####################
+#cancel default %.o behavior for %.d dependency
+%.o : %.c
+
+#new default .o for .c files
+%.bc %.o: %.c %.d
+ $(CC) -c $(EMFLAGS) $(CPPFLAGS) $(CFLAGS) $< -o $@
+
+#default for .d dependency files (output from gcc -M)
+%.d: %.c
+ @./deps.sh 'dirname $*.c' $(CFLAGS) $*.c > $@
+ @sed -i 's/$(*F)[\.]o/$(@D)\/$(*F)\.o/g' $@
+ @cat $@ | sed 's/[\.][o]/.bc/g' >> $@
+
--- /dev/null
+/*!@file
+ \brief engine entry
+ \details initializes necessary subsystems before invoking the preloader,
+ which loads initial game data, before finally invoking the
+ main loop gameloop(void)
+ \author Ken
+ \date 2016
+------------------------------------------------------------------------------*/
+#ifdef __Win32
+#include <windows.h>
+#endif
+#ifdef __EMSCRIPTEN__
+#define main em_main
+#include <emscripten/emscripten.h>
+#else
+#define INFINITE_MAINLOOP
+#endif
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_image.h>
+#include <SDL_ttf.h>
+#include <stdint.h>
+#include <setjmp.h>
+#include <stdio.h>
+
+/* debug level */
+#define DEBUG 1
+
+/* Exit Codes */
+#define EXIT_GRACEFUL 1
+#define EXIT_DEBUG 2
+#define EXIT_PANIC 3
+
+/* Target frames per second */
+#ifndef TARGET_FPS
+#define TARGET_FPS 60
+#endif
+
+/* Target milliseconds per frame */
+#define TARGET_DT (1000 / TARGET_FPS)
+
+/* precompiler round-up division */
+#define DIV_UP(x,y) ((x + (y / 2)) / y)
+
+/* internally exposed functions */
+int main_init(void);
+void main_loop(void);
+
+/* unexposed externs *
+extern int state_init(void);
+extern void state_tick(uint32_t delta_ticks);
+extern const char* state_get_error(void);
+extern void state_quit(void);
+extern void state_handle_event(SDL_Event event);
+extern int io_init(void);
+extern const char* io_get_error(void);
+extern void io_quit(void);*/
+
+/* Function trigger stack for "unwinding" initialization of modules */
+#define MAX_TRIGGERS 16
+struct call_trigger
+{ int num_funcs;
+ void (*func[MAX_TRIGGERS])(void);
+} quit_trigger = {0};
+
+#define TRIGGER_SET(TARG, FUNC) TARG.func[TARG.num_funcs++] = FUNC
+#define TRIGGER(TARG) while(TARG.num_funcs) (TARG.func[--TARG.num_funcs])()
+
+/* main jump buffer */
+jmp_buf jmp_main;
+
+/** initializes subsystems and calls main_loop(void)
+ @return (exit_status - 1), where a normal shutdown's exit_status = 1.
+
+ main sets a jump buffer for its primary switch, which may be jumped to
+ at any time. Jumping with a 0 return value is equivalent to calling
+ setjmp directly, which initializes the system and begins the main loop.
+ Jumping with any other value will process one of the directives associated
+ with the exit codes in core.h
+*******************************************************************************/
+int main (int argc, char** argv)
+{ switch(setjmp(jmp_main))
+ { case 0:
+ if (main_init())
+ return -1;
+ main_loop(); /* no return during native execution */
+#ifdef __EMSCRIPTEN__
+ emscripten_set_main_loop(main_loop,0,0);
+ return 0;
+#endif
+ case EXIT_GRACEFUL:
+ break;
+ default:
+ case EXIT_PANIC:
+ //dump some debug info
+ break;
+ }
+ TRIGGER(quit_trigger);
+ return 0;
+}
+
+/** initializer
+ @return 0 if successful, -1 SDL, -2 IMG, -3 TTF, -4 STATE.
+ SDL and logging is available after this is called
+*******************************************************************************/
+int main_init()
+{ static char bInitialized = 0;
+ if (bInitialized++)
+ { SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Resetting [%d]\n", bInitialized);
+ return 0;
+ }
+
+ if (SDL_Init(SDL_INIT_EVERYTHING & ~(SDL_INIT_TIMER | SDL_INIT_HAPTIC)) < 0)
+ { fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
+ return - 1;
+ }
+ TRIGGER_SET(quit_trigger, SDL_Quit);
+
+ if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG)
+ { fprintf(stderr, "IMG_Init failed: %s\n", IMG_GetError());
+ return -2;
+ }
+ TRIGGER_SET(quit_trigger, IMG_Quit);
+
+ if (TTF_Init() == -1)
+ { fprintf(stderr, "TTF_Init failed: %s\n", TTF_GetError());
+ return -3;
+ }
+ TRIGGER_SET(quit_trigger, TTF_Quit);
+ /*
+ if (state_init())
+ { printf("state_init failed: %s\n", state_get_error());
+ return -4;
+ }
+ TRIGGER_SET(quit_trigger, state_quit);
+ if (renderer_init())
+ { printf("state_init failed: %s\n", renderer_get_error());
+ return -5;
+ }
+ TRIGGER_SET(quit_trigger, renderer_quit);
+ if (io_init())
+ { printf("io_init failed: %s\n", io_get_error());
+ return -6;
+ }
+ TRIGGER_SET(quit_trigger, io_quit);
+ */
+ SDL_Log("Initialization Complete.");
+ return 0;
+}
+
+/** main loop.
+ exits only during core_shutdown and core_panic if in an infinite loop
+*******************************************************************************/
+void main_loop()
+{ static uint32_t main_loop_last_ticks = 0;
+ static SDL_Event event;
+ uint32_t delta_ticks;
+loop:
+ /* Poll events */
+ while (SDL_PollEvent(&event))
+ //state_handle_event(&event);
+ ;
+
+ /* change in time since last loop */
+ delta_ticks = SDL_GetTicks() - main_loop_last_ticks;
+
+ /* handle breakpoints (long pause likely a breakpoint) */
+ if (delta_ticks > 1000)
+ { SDL_LogWarn(SDL_LOG_CATEGORY_SYSTEM, "Recovering from long pause.");
+ delta_ticks = TARGET_DT;
+ }
+
+ /* tick the state manager forward by the change in time */
+ //state_tick(delta_ticks);
+ main_loop_last_ticks = SDL_GetTicks();
+
+ /* render the scene to backbuffer */
+////todo...
+ /* swap in the backbuffer for display */
+////todo...
+
+ /* cap the framerate if we're handling the loop mechanism directly, but only
+ yield if we have a substantial portion of time to yield (1/10th of the
+ target delta) */
+ printf("%d\n", main_loop_last_ticks);
+#ifdef INFINITE_MAINLOOP
+ delta_ticks = SDL_GetTicks() - main_loop_last_ticks;
+ if ((delta_ticks + DIV_UP(TARGET_DT, 10)) < TARGET_DT)
+ SDL_Delay(TARGET_DT - delta_ticks);
+
+ goto loop;
+#endif
+}
--- /dev/null
+/*!@file
+ \brief The March Init
+ \details Initialization of subsystems and third party software
+ \author Ken
+ \date 2016
+ ------------------------------------------------------------------------------*/
+#include <stdio.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <string.h>
+#ifdef __Win32
+#include <windows.h>
+#endif
+#ifdef __EMSCRIPTEN__
+#include <emscripten/emscripten.h>
+#endif
+
+
--- /dev/null
+#!/bin/sh
+DIR="$1"
+shift 1
+case "$DIR" in
+ "" | ".")
+ gcc -MM -MG "$@" |
+ sed -e ’s@ˆ\(.*\)\.o:@\1.d \1.o:@’
+ ;;
+ *)
+ gcc -MM -MG "$@" |
+ sed -e "s@ˆ\(.*\)\.o:@$DIR/\1.d $DIR/\1.o:@"
+ ;;
+esac
--- /dev/null
+<!DOCTYPE html>
+<html language="en">
+ <head>
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
+ <meta charset="UTF-8" />
+ </head>
+ <body>
+ Usage: the_march [-opts]<br>
+ <div class="row">
+ <div class="col-md-5 col-md-offset-5">
+ <input class="" type="submit" value="Launch Game" id="launch_game">
+ </div>
+ </div>
+ <script type="text/javascript" src="http://code.jquery.com/jquery-2.2.4.min.js"></script>
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
+ <script type="text/javascript" src="js/the_march.config.js"></script>
+ <script type="text/javascript" src="js/the_march.asm.js"></script>
+ <script type="text/javascript" src="js/the_march.js"></script>
+ </body>
+</html>
--- /dev/null
+var Module =
+ {
+ 'noExitRuntime': true,
+ 'arguments': [],
+
+ print: function(text) { for(var i=0; i<text.length; i++) document.write(String.fromCharCode(text.charCodeAt(i))); document.write("<br />");},
+ printErr: function(text) { console.log("ERR: " + text); },
+
+ //Execute the default em_main instead of main
+ execute: function(text)
+ {
+ const PTR_BYTES = 4;
+
+ //Parse argv and argc
+ var argv = text.replace(/[\s]+/g," ").split(" ");
+ var argc = argv.length;
+
+ //Allocate C stack memory for the arg pointers
+ var argv_ptr = Runtime.stackAlloc(argc * PTR_BYTES);
+
+ var arg_ptrs = [];
+ for(var i = 0; i < argc; i++)
+ {
+ //stack allocate for each argument
+ arg_ptrs[i] = Runtime.stackAlloc(argv[i].length+1);
+ //Add to argv's list of pointers in c-memory, then copy data
+ setValue(argv_ptr + i * PTR_BYTES, arg_ptrs[i], 'i32');
+ writeStringToMemory(argv[i], arg_ptrs[i]);
+ }
+
+ _em_main(argc, argv_ptr, 0);
+ }
+ };
+
+function start_game(event)
+{
+ Module.execute("the_march");
+};
+document.getElementById("launch_game").addEventListener("click", start_game, false);
+
--- /dev/null
+google
+*.pb-c.*
--- /dev/null
+#Protobuf Compilation
+PROTOCC := protoc-c
+PROTOLIBS := proto
+PBUFV := 2.5.0
+
+#Proto Module Compile rules
+PROTOFLAGS += $(patsubst %,--proto_path=%,$(PROTOLIBS))
+APP_RULES += gen_proto
+CLEAN_RULES += protoclean
+SCRUB_RULES += protoscrub
+PROTO_SRC := $(wildcard proto/*.proto)
+PROTO_TARG := $(PROTO_SRC:.proto=.pb-c.c)
+PROTO_TARG := $(PROTO_TARG) $(PROTO_TARG:.c=.h)
+
+.PHONY: protoclean protoscrub gen_proto
+
+gen_proto: $(PROTO_TARG)
+
+#download protobuf and move the google proto files.
+proto/google:
+ @mkdir tmp
+# @git clone git@github.com:google/protobuf.git tmp
+ @curl https://protobuf.googlecode.com/files/protobuf-$(PBUFV).tar.gz | tar xz --directory=tmp
+ @mv tmp/protobuf-$(PBUFV)/src/google proto/google
+ @$(PROTOCC) --proto_path=proto/google/protobuf --c_out=proto/google/protobuf proto/google/protobuf/descriptor.proto
+ @echo "google" > proto/.gitignore
+ @echo "*.pb-c.*" >> proto/.gitignore
+ @rm -Rf tmp
+
+#default rule for making protobuf-compiled C code
+%.pb-c.h %.pb-c.c: %.proto proto/google
+ @$(PROTOCC) $(PROTOFLAGS) --c_out=$(@D) $<
+
+%.pb-c.h %.pb-c.c: proto/%.proto proto/google
+ @$(PROTOCC) $(PROTOFLAGS) --c_out=proto $<
+
+%.pb-c.o %.pb-c.bc: %.pb-c.h %.pb-c.c
+ @$(CC) -c -static $(CPPFLAGS) $(CFLAGS) -I/usr/include/google $< -o $@
+
+protoclean:
+ rm -f proto/*.pb-c.*
+
+protoscrub:
+ rm -Rf proto/google
+ rm -f proto/.gitignore
--- /dev/null
+import "steammessages.proto";
+
+option optimize_for = SPEED;
+option cc_generic_services = false;
+
+enum ECsgoGCMsg {
+ k_EMsgGCCStrike15_v2_Base = 9100;
+ k_EMsgGCCStrike15_v2_MatchmakingStart = 9101;
+ k_EMsgGCCStrike15_v2_MatchmakingStop = 9102;
+ k_EMsgGCCStrike15_v2_MatchmakingClient2ServerPing = 9103;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate = 9104;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ServerReserve = 9105;
+ k_EMsgGCCStrike15_v2_MatchmakingServerReservationResponse = 9106;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientReserve = 9107;
+ k_EMsgGCCStrike15_v2_MatchmakingServerRoundStats = 9108;
+ k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello = 9109;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientHello = 9110;
+ k_EMsgGCCStrike15_v2_MatchmakingServerMatchEnd = 9111;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon = 9112;
+ k_EMsgGCCStrike15_v2_MatchmakingServer2GCKick = 9113;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm = 9114;
+ k_EMsgGCCStrike15_v2_MatchmakingGCOperationalStats = 9115;
+ k_EMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate = 9116;
+ k_EMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate = 9117;
+ k_EMsgGCCStrike15_v2_ServerNotificationForUserPenalty = 9118;
+ k_EMsgGCCStrike15_v2_ClientReportPlayer = 9119;
+ k_EMsgGCCStrike15_v2_ClientReportServer = 9120;
+ k_EMsgGCCStrike15_v2_ClientCommendPlayer = 9121;
+ k_EMsgGCCStrike15_v2_ClientReportResponse = 9122;
+ k_EMsgGCCStrike15_v2_ClientCommendPlayerQuery = 9123;
+ k_EMsgGCCStrike15_v2_ClientCommendPlayerQueryResponse = 9124;
+ k_EMsgGCCStrike15_v2_WatchInfoUsers = 9126;
+ k_EMsgGCCStrike15_v2_ClientRequestPlayersProfile = 9127;
+ k_EMsgGCCStrike15_v2_PlayersProfile = 9128;
+ k_EMsgGCCStrike15_v2_SetMyMedalsInfo = 9129;
+ k_EMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate = 9131;
+ k_EMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment = 9132;
+ k_EMsgGCCStrike15_v2_PlayerOverwatchCaseStatus = 9133;
+ k_EMsgGCCStrike15_v2_GC2ClientTextMsg = 9134;
+ k_EMsgGCCStrike15_v2_Client2GCTextMsg = 9135;
+ k_EMsgGCCStrike15_v2_MatchEndRunRewardDrops = 9136;
+ k_EMsgGCCStrike15_v2_MatchEndRewardDropsNotification = 9137;
+ k_EMsgGCCStrike15_v2_ClientRequestWatchInfoFriends2 = 9138;
+ k_EMsgGCCStrike15_v2_MatchList = 9139;
+ k_EMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames = 9140;
+ k_EMsgGCCStrike15_v2_MatchListRequestRecentUserGames = 9141;
+ k_EMsgGCCStrike15_v2_GC2ServerReservationUpdate = 9142;
+ k_EMsgGCCStrike15_v2_ClientVarValueNotificationInfo = 9144;
+ k_EMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification = 9145;
+ k_EMsgGCCStrike15_v2_MatchListRequestTournamentGames = 9146;
+ k_EMsgGCCStrike15_v2_MatchListRequestFullGameInfo = 9147;
+ k_EMsgGCCStrike15_v2_GiftsLeaderboardRequest = 9148;
+ k_EMsgGCCStrike15_v2_GiftsLeaderboardResponse = 9149;
+ k_EMsgGCCStrike15_v2_ServerVarValueNotificationInfo = 9150;
+ k_EMsgGCToGCReloadVersions = 9151;
+ k_EMsgGCCStrike15_v2_ClientSubmitSurveyVote = 9152;
+ k_EMsgGCCStrike15_v2_Server2GCClientValidate = 9153;
+ k_EMsgGCCStrike15_v2_MatchListRequestLiveGameForUser = 9154;
+ k_EMsgGCCStrike15_v2_Server2GCPureServerValidationFailure = 9155;
+ k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest = 9156;
+ k_EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse = 9157;
+ k_EMsgGCCStrike15_v2_AccountPrivacySettings = 9158;
+ k_EMsgGCCStrike15_v2_SetMyActivityInfo = 9159;
+ k_EMsgGCCStrike15_v2_MatchListRequestTournamentPredictions = 9160;
+ k_EMsgGCCStrike15_v2_MatchListUploadTournamentPredictions = 9161;
+ k_EMsgGCCStrike15_v2_DraftSummary = 9162;
+ k_EMsgGCCStrike15_v2_ClientRequestJoinFriendData = 9163;
+ k_EMsgGCCStrike15_v2_ClientRequestJoinServerData = 9164;
+ k_EMsgGCCStrike15_v2_ClientRequestNewMission = 9165;
+ k_EMsgGCCStrike15_v2_GC2ServerNotifyXPRewarded = 9166;
+ k_EMsgGCCStrike15_v2_GC2ClientTournamentInfo = 9167;
+ k_EMsgGC_GlobalGame_Subscribe = 9168;
+ k_EMsgGC_GlobalGame_Unsubscribe = 9169;
+ k_EMsgGC_GlobalGame_Play = 9170;
+ k_EMsgGCCStrike15_v2_AcknowledgePenalty = 9171;
+ k_EMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin = 9172;
+ k_EMsgGCCStrike15_v2_GC2ClientGlobalStats = 9173;
+ k_EMsgGCCStrike15_v2_Client2GCStreamUnlock = 9174;
+ k_EMsgGCCStrike15_v2_FantasyRequestClientData = 9175;
+ k_EMsgGCCStrike15_v2_FantasyUpdateClientData = 9176;
+}
+
+message GameServerPing {
+ optional uint64 gameserver_id = 1;
+ optional int32 ping = 2;
+ optional uint32 ip = 3;
+ optional uint32 port = 4;
+ optional uint32 instances = 5;
+}
+
+message DetailedSearchStatistic {
+ optional uint32 game_type = 1;
+ optional uint32 search_time_avg = 2;
+ optional uint32 players_searching = 4;
+}
+
+message TournamentPlayer {
+ optional uint32 account_id = 1;
+ optional string player_nick = 2;
+ optional string player_name = 3;
+ optional uint32 player_dob = 4;
+ optional string player_flag = 5;
+ optional string player_location = 6;
+ optional string player_desc = 7;
+}
+
+message TournamentTeam {
+ optional int32 team_id = 1;
+ optional string team_tag = 2;
+ optional string team_flag = 3;
+ optional string team_name = 4;
+ repeated .TournamentPlayer players = 5;
+}
+
+message TournamentEvent {
+ optional int32 event_id = 1;
+ optional string event_tag = 2;
+ optional string event_name = 3;
+ optional uint32 event_time_start = 4;
+ optional uint32 event_time_end = 5;
+ optional int32 event_public = 6;
+ optional int32 event_stage_id = 7;
+ optional string event_stage_name = 8;
+ optional uint32 active_section_id = 9;
+}
+
+message GlobalStatistics {
+ optional uint32 players_online = 1;
+ optional uint32 servers_online = 2;
+ optional uint32 players_searching = 3;
+ optional uint32 servers_available = 4;
+ optional uint32 ongoing_matches = 5;
+ optional uint32 search_time_avg = 6;
+ repeated .DetailedSearchStatistic search_statistics = 7;
+ optional string main_post_url = 8;
+ optional uint32 required_appid_version = 9;
+ optional uint32 pricesheet_version = 10;
+ optional uint32 twitch_streams_version = 11;
+ optional uint32 active_tournament_eventid = 12;
+ optional uint32 active_survey_id = 13;
+}
+
+message OperationalStatisticDescription {
+ optional string name = 1;
+ optional uint32 idkey = 2;
+}
+
+message OperationalStatisticElement {
+ optional uint32 idkey = 1;
+ repeated int32 values = 2;
+}
+
+message OperationalStatisticsPacket {
+ optional int32 packetid = 1;
+ optional int32 mstimestamp = 2;
+ repeated .OperationalStatisticElement values = 3;
+}
+
+message PlayerRankingInfo {
+ optional uint32 account_id = 1;
+ optional uint32 rank_id = 2;
+ optional uint32 wins = 3;
+ optional float rank_change = 4;
+}
+
+message PlayerCommendationInfo {
+ optional uint32 cmd_friendly = 1;
+ optional uint32 cmd_teaching = 2;
+ optional uint32 cmd_leader = 4;
+}
+
+message PlayerMedalsInfo {
+ optional uint32 medal_team = 1;
+ optional uint32 medal_combat = 2;
+ optional uint32 medal_weapon = 3;
+ optional uint32 medal_global = 4;
+ optional uint32 medal_arms = 5;
+ repeated uint32 display_items_defidx = 7;
+ optional uint32 featured_display_item_defidx = 8;
+}
+
+message AccountActivity {
+ optional uint32 activity = 1;
+ optional uint32 mode = 2;
+ optional uint32 map = 3;
+}
+
+message TournamentMatchSetup {
+ optional int32 event_id = 1;
+ optional int32 team_id_ct = 2;
+ optional int32 team_id_t = 3;
+ optional int32 event_stage_id = 4;
+}
+
+message ServerHltvInfo {
+ optional uint32 tv_udp_port = 1;
+ optional uint64 tv_watch_key = 2;
+ optional uint32 tv_slots = 3;
+ optional uint32 tv_clients = 4;
+ optional uint32 tv_proxies = 5;
+ optional uint32 tv_time = 6;
+ optional uint32 game_type = 8;
+ optional string game_mapgroup = 9;
+ optional string game_map = 10;
+ optional uint64 tv_master_steamid = 11;
+ optional uint32 tv_local_slots = 12;
+ optional uint32 tv_local_clients = 13;
+ optional uint32 tv_local_proxies = 14;
+ optional uint32 tv_relay_slots = 15;
+ optional uint32 tv_relay_clients = 16;
+ optional uint32 tv_relay_proxies = 17;
+ optional uint32 tv_relay_address = 18;
+ optional uint32 tv_relay_port = 19;
+ optional uint64 tv_relay_steamid = 20;
+}
+
+message IpAddressMask {
+ optional uint32 a = 1;
+ optional uint32 b = 2;
+ optional uint32 c = 3;
+ optional uint32 d = 4;
+ optional uint32 bits = 5;
+ optional uint32 token = 6;
+}
+
+message XpProgressData {
+ optional uint32 xp_points = 1;
+ optional int32 xp_category = 2;
+}
+
+message MatchEndItemUpdates {
+ optional uint64 item_id = 1;
+ optional uint32 item_attr_defidx = 2;
+ optional uint32 item_attr_delta_value = 3;
+}
+
+message ScoreLeaderboardData {
+ message Entry {
+ optional uint32 tag = 1;
+ optional uint32 val = 2;
+ }
+
+ message AccountEntries {
+ optional uint32 accountid = 1;
+ repeated .ScoreLeaderboardData.Entry entries = 2;
+ }
+
+ optional uint64 quest_id = 1;
+ optional uint32 score = 2;
+ repeated .ScoreLeaderboardData.AccountEntries accountentries = 3;
+ repeated .ScoreLeaderboardData.Entry matchentries = 5;
+}
+
+message PlayerQuestData {
+ message QuestItemData {
+ optional uint64 quest_id = 1;
+ optional int32 quest_normal_points_earned = 2;
+ optional int32 quest_bonus_points_earned = 3;
+ }
+
+ optional uint32 quester_account_id = 1;
+ repeated .PlayerQuestData.QuestItemData quest_item_data = 2;
+ repeated .XpProgressData xp_progress_data = 3;
+ optional uint32 time_played = 4;
+ optional uint32 mm_game_mode = 5;
+ repeated .MatchEndItemUpdates item_updates = 6;
+}
+
+message CMsgGC_ServerQuestUpdateData {
+ repeated .PlayerQuestData player_quest_data = 1;
+ optional bytes binary_data = 2;
+ optional uint32 mm_game_mode = 3;
+ optional .ScoreLeaderboardData missionlbsdata = 4;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGCOperationalStats {
+ optional int32 packetid = 1;
+ repeated .OperationalStatisticDescription namekeys = 2;
+ repeated .OperationalStatisticsPacket packets = 3;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm {
+ optional uint32 token = 1;
+ optional uint32 stamp = 2;
+ optional uint64 exchange = 3;
+}
+
+message CMsgGCCStrike15_v2_GC2ServerReservationUpdate {
+ optional uint32 viewers_external_total = 1;
+ optional uint32 viewers_external_steam = 2;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingStart {
+ repeated uint32 account_ids = 1;
+ optional uint32 game_type = 2;
+ optional string ticket_data = 3;
+ optional uint32 client_version = 4;
+ optional .TournamentMatchSetup tournament_match = 5;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingStop {
+ optional int32 abandon = 1;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingClient2ServerPing {
+ repeated .GameServerPing gameserverpings = 1;
+ optional int32 offset_index = 2;
+ optional int32 final_batch = 3;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate {
+ message Note {
+ optional int32 type = 1;
+ optional int32 region_id = 2;
+ optional float region_r = 3;
+ optional float distance = 4;
+ }
+
+ optional int32 matchmaking = 1;
+ repeated uint32 waiting_account_id_sessions = 2;
+ optional string error = 3;
+ repeated uint32 ongoingmatch_account_id_sessions = 6;
+ optional .GlobalStatistics global_stats = 7;
+ repeated uint32 failping_account_id_sessions = 8;
+ repeated uint32 penalty_account_id_sessions = 9;
+ repeated uint32 failready_account_id_sessions = 10;
+ repeated uint32 vacbanned_account_id_sessions = 11;
+ optional .IpAddressMask server_ipaddress_mask = 12;
+ repeated .CMsgGCCStrike15_v2_MatchmakingGC2ClientUpdate.Note notes = 13;
+ repeated uint32 penalty_account_id_sessions_green = 14;
+ repeated uint32 insufficientlevel_sessions = 15;
+}
+
+message CDataGCCStrike15_v2_TournamentMatchDraft {
+ message Entry {
+ optional int32 mapid = 1;
+ optional int32 team_id_ct = 2;
+ }
+
+ optional int32 event_id = 1;
+ optional int32 event_stage_id = 2;
+ optional int32 team_id_0 = 3;
+ optional int32 team_id_1 = 4;
+ optional int32 maps_count = 5;
+ optional int32 maps_current = 6;
+ optional int32 team_id_start = 7;
+ optional int32 team_id_veto1 = 8;
+ optional int32 team_id_pickn = 9;
+ repeated .CDataGCCStrike15_v2_TournamentMatchDraft.Entry drafts = 10;
+}
+
+message CPreMatchInfoData {
+ message TeamStats {
+ optional int32 match_info_idxtxt = 1;
+ optional string match_info_txt = 2;
+ repeated string match_info_teams = 3;
+ }
+
+ optional int32 predictions_pct = 1;
+ optional .CDataGCCStrike15_v2_TournamentMatchDraft draft = 4;
+ repeated .CPreMatchInfoData.TeamStats stats = 5;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve {
+ repeated uint32 account_ids = 1;
+ optional uint32 game_type = 2;
+ optional uint64 match_id = 3;
+ optional uint32 server_version = 4;
+ repeated .PlayerRankingInfo rankings = 5;
+ optional uint64 encryption_key = 6;
+ optional uint64 encryption_key_pub = 7;
+ repeated uint32 party_ids = 8;
+ repeated .IpAddressMask whitelist = 9;
+ optional uint64 tv_master_steamid = 10;
+ optional .TournamentEvent tournament_event = 11;
+ repeated .TournamentTeam tournament_teams = 12;
+ repeated uint32 tournament_casters_account_ids = 13;
+ optional uint64 tv_relay_steamid = 14;
+ optional .CPreMatchInfoData pre_match_data = 15;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingServerReservationResponse {
+ optional uint64 reservationid = 1;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 2;
+ optional string map = 3;
+ optional uint64 gc_reservation_sent = 4;
+ optional uint32 server_version = 5;
+ optional .ServerHltvInfo tv_info = 6;
+ repeated uint32 reward_player_accounts = 7;
+ repeated uint32 idle_player_accounts = 8;
+ optional uint32 reward_item_attr_def_idx = 9;
+ optional uint32 reward_item_attr_value = 10;
+ optional uint32 reward_item_attr_reward_idx = 11;
+ optional uint32 reward_drop_list = 12;
+ optional string tournament_tag = 13;
+ optional uint32 steamdatagram_port = 14;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve {
+ optional uint64 serverid = 1;
+ optional string server_address = 7;
+ optional uint32 legacy_serverip = 2;
+ optional uint32 legacy_serverport = 3;
+ optional uint64 reservationid = 4;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 5;
+ optional string map = 6;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingServerRoundStats {
+ message DropInfo {
+ optional uint32 account_mvp = 1;
+ }
+
+ optional uint64 reservationid = 1;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 2;
+ optional string map = 3;
+ optional int32 round = 4;
+ repeated int32 kills = 5;
+ repeated int32 assists = 6;
+ repeated int32 deaths = 7;
+ repeated int32 scores = 8;
+ repeated int32 pings = 9;
+ optional int32 round_result = 10;
+ optional int32 match_result = 11;
+ repeated int32 team_scores = 12;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm confirm = 13;
+ optional int32 reservation_stage = 14;
+ optional int32 match_duration = 15;
+ repeated int32 enemy_kills = 16;
+ repeated int32 enemy_headshots = 17;
+ repeated int32 enemy_3ks = 18;
+ repeated int32 enemy_4ks = 19;
+ repeated int32 enemy_5ks = 20;
+ repeated int32 mvps = 21;
+ optional uint32 spectators_count = 22;
+ optional uint32 spectators_count_tv = 23;
+ optional uint32 spectators_count_lnk = 24;
+ repeated int32 enemy_kills_agg = 25;
+ optional .CMsgGCCStrike15_v2_MatchmakingServerRoundStats.DropInfo drop_info = 26;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingServerMatchEnd {
+ optional .CMsgGCCStrike15_v2_MatchmakingServerRoundStats stats = 1;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm confirm = 3;
+ optional uint64 rematch = 4;
+ optional uint32 replay_token = 5;
+ optional uint32 replay_cluster_id = 6;
+ optional bool aborted_match = 7;
+ optional .CMsgGC_ServerQuestUpdateData match_end_quest_data = 8;
+ optional uint32 server_version = 9;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingClient2GCHello {
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ClientHello {
+ optional uint32 account_id = 1;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve ongoingmatch = 2;
+ optional .GlobalStatistics global_stats = 3;
+ optional uint32 penalty_seconds = 4;
+ optional uint32 penalty_reason = 5;
+ optional int32 vac_banned = 6;
+ optional .PlayerRankingInfo ranking = 7;
+ optional .PlayerCommendationInfo commendation = 8;
+ optional .PlayerMedalsInfo medals = 9;
+ optional .TournamentEvent my_current_event = 10;
+ repeated .TournamentTeam my_current_event_teams = 11;
+ optional .TournamentTeam my_current_team = 12;
+ repeated .TournamentEvent my_current_event_stages = 13;
+ optional uint32 survey_vote = 14;
+ optional .AccountActivity activity = 15;
+ optional int32 player_level = 17;
+ optional int32 player_cur_xp = 18;
+ optional int32 player_xp_bonus_flags = 19;
+}
+
+message CMsgGCCStrike15_v2_AccountPrivacySettings {
+ message Setting {
+ optional uint32 setting_type = 1;
+ optional uint32 setting_value = 2;
+ }
+
+ repeated .CMsgGCCStrike15_v2_AccountPrivacySettings.Setting settings = 1;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ClientAbandon {
+ optional uint32 account_id = 1;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve abandoned_match = 2;
+ optional uint32 penalty_seconds = 3;
+ optional uint32 penalty_reason = 4;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingServer2GCKick {
+ optional uint32 account_id = 1;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve reservation = 2;
+ optional uint32 reason = 3;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingGC2ServerRankUpdate {
+ repeated .PlayerRankingInfo rankings = 1;
+ optional uint64 match_id = 2;
+}
+
+message CMsgGCCStrike15_v2_MatchmakingOperator2GCBlogUpdate {
+ optional string main_post_url = 1;
+}
+
+message CMsgGCCStrike15_v2_ServerNotificationForUserPenalty {
+ optional uint32 account_id = 1;
+ optional uint32 reason = 2;
+ optional uint32 seconds = 3;
+}
+
+message CMsgGCCStrike15_v2_ClientReportPlayer {
+ optional uint32 account_id = 1;
+ optional uint32 rpt_aimbot = 2;
+ optional uint32 rpt_wallhack = 3;
+ optional uint32 rpt_speedhack = 4;
+ optional uint32 rpt_teamharm = 5;
+ optional uint32 rpt_textabuse = 6;
+ optional uint32 rpt_voiceabuse = 7;
+ optional uint64 match_id = 8;
+}
+
+message CMsgGCCStrike15_v2_ClientCommendPlayer {
+ optional uint32 account_id = 1;
+ optional uint64 match_id = 8;
+ optional .PlayerCommendationInfo commendation = 9;
+ optional uint32 tokens = 10;
+}
+
+message CMsgGCCStrike15_v2_ClientReportServer {
+ optional uint32 rpt_poorperf = 1;
+ optional uint32 rpt_abusivemodels = 2;
+ optional uint32 rpt_badmotd = 3;
+ optional uint32 rpt_listingabuse = 4;
+ optional uint32 rpt_inventoryabuse = 5;
+ optional uint64 match_id = 8;
+}
+
+message CMsgGCCStrike15_v2_ClientReportResponse {
+ optional uint64 confirmation_id = 1;
+ optional uint32 account_id = 2;
+ optional uint32 server_ip = 3;
+ optional uint32 response_type = 4;
+ optional uint32 response_result = 5;
+ optional uint32 tokens = 6;
+}
+
+message CMsgGCCStrike15_v2_ClientRequestWatchInfoFriends {
+ optional uint32 request_id = 1;
+ repeated uint32 account_ids = 2;
+ optional uint64 serverid = 3;
+ optional uint64 matchid = 4;
+}
+
+message WatchableMatchInfo {
+ optional uint32 server_ip = 1;
+ optional uint32 tv_port = 2;
+ optional uint32 tv_spectators = 3;
+ optional uint32 tv_time = 4;
+ optional bytes tv_watch_password = 5;
+ optional uint64 cl_decryptdata_key = 6;
+ optional uint64 cl_decryptdata_key_pub = 7;
+ optional uint32 game_type = 8;
+ optional string game_mapgroup = 9;
+ optional string game_map = 10;
+ optional uint64 server_id = 11;
+ optional uint64 match_id = 12;
+ optional uint64 reservation_id = 13;
+}
+
+message CMsgGCCStrike15_v2_ClientRequestJoinFriendData {
+ optional uint32 version = 1;
+ optional uint32 account_id = 2;
+ optional uint32 join_token = 3;
+ optional uint32 join_ipp = 4;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve res = 5;
+ optional string errormsg = 6;
+}
+
+message CMsgGCCStrike15_v2_ClientRequestJoinServerData {
+ optional uint32 version = 1;
+ optional uint32 account_id = 2;
+ optional uint64 serverid = 3;
+ optional uint32 server_ip = 4;
+ optional uint32 server_port = 5;
+ optional .CMsgGCCStrike15_v2_MatchmakingGC2ClientReserve res = 6;
+}
+
+message CMsgGCCstrike15_v2_ClientRequestNewMission {
+ optional uint32 mission_id = 2;
+ optional uint32 campaign_id = 3;
+}
+
+message CMsgGCCstrike15_v2_GC2ServerNotifyXPRewarded {
+ repeated .XpProgressData xp_progress_data = 1;
+ optional uint32 account_id = 2;
+ optional uint32 current_xp = 3;
+ optional uint32 current_level = 4;
+ optional uint32 upgraded_defidx = 5;
+}
+
+message CMsgGCCStrike15_v2_WatchInfoUsers {
+ optional uint32 request_id = 1;
+ repeated uint32 account_ids = 2;
+ repeated .WatchableMatchInfo watchable_match_infos = 3;
+ optional uint32 extended_timeout = 5;
+}
+
+message CMsgGCCStrike15_v2_ClientRequestPlayersProfile {
+ optional uint32 request_id__deprecated = 1;
+ repeated uint32 account_ids__deprecated = 2;
+ optional uint32 account_id = 3;
+ optional uint32 request_level = 4;
+}
+
+message CMsgGCCStrike15_v2_PlayersProfile {
+ optional uint32 request_id = 1;
+ repeated .CMsgGCCStrike15_v2_MatchmakingGC2ClientHello account_profiles = 2;
+}
+
+message CMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate {
+ optional uint64 caseid = 1;
+ optional uint32 suspectid = 3;
+ optional uint32 fractionid = 4;
+ optional uint32 rpt_aimbot = 5;
+ optional uint32 rpt_wallhack = 6;
+ optional uint32 rpt_speedhack = 7;
+ optional uint32 rpt_teamharm = 8;
+ optional uint32 reason = 9;
+}
+
+message CMsgGCCStrike15_v2_PlayerOverwatchCaseAssignment {
+ optional uint64 caseid = 1;
+ optional string caseurl = 2;
+ optional uint32 verdict = 3;
+ optional uint32 timestamp = 4;
+ optional uint32 throttleseconds = 5;
+ optional uint32 suspectid = 6;
+ optional uint32 fractionid = 7;
+ optional uint32 numrounds = 8;
+ optional uint32 fractionrounds = 9;
+ optional int32 streakconvictions = 10;
+ optional uint32 reason = 11;
+}
+
+message CMsgGCCStrike15_v2_PlayerOverwatchCaseStatus {
+ optional uint64 caseid = 1;
+ optional uint32 statusid = 2;
+}
+
+message CClientHeaderOverwatchEvidence {
+ optional uint32 accountid = 1;
+ optional uint64 caseid = 2;
+}
+
+message CMsgGCCStrike15_v2_GC2ClientTextMsg {
+ optional uint32 id = 1;
+ optional uint32 type = 2;
+ optional bytes payload = 3;
+}
+
+message CMsgGCCStrike15_v2_Client2GCTextMsg {
+ optional uint32 id = 1;
+ repeated bytes args = 2;
+}
+
+message CMsgGCCStrike15_v2_MatchEndRunRewardDrops {
+ optional .CMsgGCCStrike15_v2_MatchmakingServerReservationResponse serverinfo = 3;
+ optional .CMsgGC_ServerQuestUpdateData match_end_quest_data = 4;
+}
+
+message CEconItemPreviewDataBlock {
+ message Sticker {
+ optional uint32 slot = 1;
+ optional uint32 sticker_id = 2;
+ optional float wear = 3;
+ optional float scale = 4;
+ optional float rotation = 5;
+ }
+
+ optional uint32 accountid = 1;
+ optional uint64 itemid = 2;
+ optional uint32 defindex = 3;
+ optional uint32 paintindex = 4;
+ optional uint32 rarity = 5;
+ optional uint32 quality = 6;
+ optional uint32 paintwear = 7;
+ optional uint32 paintseed = 8;
+ optional uint32 killeaterscoretype = 9;
+ optional uint32 killeatervalue = 10;
+ optional string customname = 11;
+ repeated .CEconItemPreviewDataBlock.Sticker stickers = 12;
+ optional uint32 inventory = 13;
+ optional uint32 origin = 14;
+ optional uint32 questid = 15;
+ optional uint32 dropreason = 16;
+}
+
+message CMsgGCCStrike15_v2_MatchEndRewardDropsNotification {
+ optional .CEconItemPreviewDataBlock iteminfo = 6;
+}
+
+message CMsgItemAcknowledged {
+ optional .CEconItemPreviewDataBlock iteminfo = 1;
+}
+
+message CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest {
+ optional uint64 param_s = 1;
+ optional uint64 param_a = 2;
+ optional uint64 param_d = 3;
+ optional uint64 param_m = 4;
+}
+
+message CMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse {
+ optional .CEconItemPreviewDataBlock iteminfo = 1;
+}
+
+message CMsgGCCStrike15_v2_TournamentMatchRewardDropsNotification {
+ optional uint64 match_id = 1;
+ optional uint32 defindex = 2;
+ repeated uint32 accountids = 3;
+}
+
+message CMsgGCCStrike15_v2_MatchListRequestCurrentLiveGames {
+}
+
+message CMsgGCCStrike15_v2_MatchListRequestLiveGameForUser {
+ optional uint32 accountid = 1;
+}
+
+message CMsgGCCStrike15_v2_MatchListRequestRecentUserGames {
+ optional uint32 accountid = 1;
+}
+
+message CMsgGCCStrike15_v2_MatchListRequestTournamentGames {
+ optional int32 eventid = 1;
+}
+
+message CMsgGCCStrike15_v2_MatchListRequestFullGameInfo {
+ optional uint64 matchid = 1;
+ optional uint64 outcomeid = 2;
+ optional uint32 token = 3;
+}
+
+message CDataGCCStrike15_v2_MatchInfo {
+ optional uint64 matchid = 1;
+ optional uint32 matchtime = 2;
+ optional .WatchableMatchInfo watchablematchinfo = 3;
+ optional .CMsgGCCStrike15_v2_MatchmakingServerRoundStats roundstats_legacy = 4;
+ repeated .CMsgGCCStrike15_v2_MatchmakingServerRoundStats roundstatsall = 5;
+}
+
+message CDataGCCStrike15_v2_TournamentGroupTeam {
+ optional int32 team_id = 1;
+ optional int32 score = 2;
+ optional bool correctpick = 3;
+}
+
+message CDataGCCStrike15_v2_TournamentGroup {
+ message Picks {
+ repeated int32 pickids = 1;
+ }
+
+ optional uint32 groupid = 1;
+ optional string name = 2;
+ optional string desc = 3;
+ optional uint32 picks__deprecated = 4;
+ repeated .CDataGCCStrike15_v2_TournamentGroupTeam teams = 5;
+ repeated int32 stage_ids = 6;
+ optional uint32 picklockuntiltime = 7;
+ optional uint32 pickableteams = 8;
+ optional uint32 points_per_pick = 9;
+ repeated .CDataGCCStrike15_v2_TournamentGroup.Picks picks = 10;
+}
+
+message CDataGCCStrike15_v2_TournamentSection {
+ optional uint32 sectionid = 1;
+ optional string name = 2;
+ optional string desc = 3;
+ repeated .CDataGCCStrike15_v2_TournamentGroup groups = 4;
+}
+
+message CDataGCCStrike15_v2_TournamentInfo {
+ repeated .CDataGCCStrike15_v2_TournamentSection sections = 1;
+ optional .TournamentEvent tournament_event = 2;
+ repeated .TournamentTeam tournament_teams = 3;
+}
+
+message CMsgGCCStrike15_v2_MatchList {
+ optional uint32 msgrequestid = 1;
+ optional uint32 accountid = 2;
+ optional uint32 servertime = 3;
+ repeated .CDataGCCStrike15_v2_MatchInfo matches = 4;
+ repeated .TournamentTeam streams = 5;
+ optional .CDataGCCStrike15_v2_TournamentInfo tournamentinfo = 6;
+}
+
+message CMsgGCCStrike15_v2_Predictions {
+ message GroupMatchTeamPick {
+ optional int32 sectionid = 1;
+ optional int32 groupid = 2;
+ optional int32 index = 3;
+ optional int32 teamid = 4;
+ optional uint64 itemid = 5;
+ }
+
+ optional uint32 event_id = 1;
+ repeated .CMsgGCCStrike15_v2_Predictions.GroupMatchTeamPick group_match_team_picks = 2;
+}
+
+message CMsgGCCStrike15_v2_Fantasy {
+ message FantasySlot {
+ optional int32 type = 1;
+ optional int32 pick = 2;
+ optional uint64 itemid = 3;
+ }
+
+ message FantasyTeam {
+ optional int32 sectionid = 1;
+ repeated .CMsgGCCStrike15_v2_Fantasy.FantasySlot slots = 2;
+ }
+
+ optional uint32 event_id = 1;
+ repeated .CMsgGCCStrike15_v2_Fantasy.FantasyTeam teams = 2;
+}
+
+message CAttribute_String {
+ optional string value = 1;
+}
+
+message CMsgGCToGCReloadVersions {
+}
+
+message CMsgCStrike15Welcome {
+ optional uint32 store_item_hash = 5;
+ optional uint32 timeplayedconsecutively = 6;
+ optional uint32 time_first_played = 10;
+ optional uint32 last_time_played = 12;
+ optional uint32 last_ip_address = 13;
+ optional uint64 gscookieid = 18;
+ optional uint64 uniqueid = 19;
+}
+
+message CMsgGCCStrike15_v2_ClientVarValueNotificationInfo {
+ optional string value_name = 1;
+ optional int32 value_int = 2;
+ optional uint32 server_addr = 3;
+ optional uint32 server_port = 4;
+ repeated string choked_blocks = 5;
+}
+
+message CMsgGCCStrike15_v2_ServerVarValueNotificationInfo {
+ optional uint32 accountid = 1;
+ repeated uint32 viewangles = 2;
+ optional uint32 type = 3;
+}
+
+message CMsgGCCStrike15_v2_GiftsLeaderboardRequest {
+}
+
+message CMsgGCCStrike15_v2_GiftsLeaderboardResponse {
+ message GiftLeaderboardEntry {
+ optional uint32 accountid = 1;
+ optional uint32 gifts = 2;
+ }
+
+ optional uint32 servertime = 1;
+ optional uint32 time_period_seconds = 2;
+ optional uint32 total_gifts_given = 3;
+ optional uint32 total_givers = 4;
+ repeated .CMsgGCCStrike15_v2_GiftsLeaderboardResponse.GiftLeaderboardEntry entries = 5;
+}
+
+message CMsgGCCStrike15_v2_ClientSubmitSurveyVote {
+ optional uint32 survey_id = 1;
+ optional uint32 vote = 2;
+}
+
+message CMsgGCCStrike15_v2_Server2GCClientValidate {
+ optional uint32 accountid = 1;
+}
+
+message CMsgGCCStrike15_v2_Server2GCPureServerValidationFailure {
+ optional uint32 accountid = 1;
+ optional string path = 2;
+ optional string file = 3;
+ optional uint32 crc = 4;
+ optional int32 hash = 5;
+ optional int32 len = 6;
+ optional int32 pack_number = 7;
+ optional int32 pack_file_id = 8;
+}
+
+message CMsgGCCStrike15_v2_GC2ClientTournamentInfo {
+ optional uint32 eventid = 1;
+ optional uint32 stageid = 2;
+ optional uint32 game_type = 3;
+ repeated uint32 teamids = 4;
+}
+
+message CSOEconCoupon {
+ optional uint32 entryid = 1 [(key_field) = true];
+ optional uint32 defidx = 2;
+ optional fixed32 expiration_date = 3;
+}
+
+message CSOQuestProgress {
+ optional uint32 questid = 1 [(key_field) = true];
+ optional uint32 points_remaining = 2;
+ optional uint32 bonus_points = 3;
+}
+
+message CSOPersonaDataPublic {
+ optional int32 player_level = 1;
+ optional .PlayerCommendationInfo commendation = 2;
+}
+
+message CMsgGC_GlobalGame_Subscribe {
+ optional uint64 ticket = 1;
+}
+
+message CMsgGC_GlobalGame_Unsubscribe {
+ optional int32 timeleft = 1;
+}
+
+message CMsgGC_GlobalGame_Play {
+ optional uint64 ticket = 1;
+ optional uint32 gametimems = 2;
+ optional uint32 msperpoint = 3;
+}
+
+message CMsgGCCStrike15_v2_AcknowledgePenalty {
+ optional int32 acknowledged = 1;
+}
+
+message CMsgGCCStrike15_v2_Client2GCRequestPrestigeCoin {
+}
+
+message CMsgGCCStrike15_v2_Client2GCStreamUnlock {
+ optional uint64 ticket = 1;
+ optional int32 os = 2;
+}
+
--- /dev/null
+//====== Copyright (c) 2013, Valve Corporation, All rights reserved. ========//
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+// Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+// THE POSSIBILITY OF SUCH DAMAGE.
+//===========================================================================//
+//
+// Purpose: The file defines our Google Protocol Buffers which are used in over
+// the wire messages for the Source engine.
+//
+//=============================================================================
+
+// We care more about speed than code size
+option optimize_for = SPEED;
+
+// We don't use the service generation functionality
+option cc_generic_services = false;
+
+
+//
+// STYLE NOTES:
+//
+// Use CamelCase CMsgMyMessageName style names for messages.
+//
+// Use lowercase _ delimited names like my_steam_id for field names, this is non-standard for Steam,
+// but plays nice with the Google formatted code generation.
+//
+// Try not to use required fields ever. Only do so if you are really really sure you'll never want them removed.
+// Optional should be preffered as it will make versioning easier and cleaner in the future if someone refactors
+// your message and wants to remove or rename fields.
+//
+// Use fixed64 for JobId_t, GID_t, or SteamID. This is appropriate for any field that is normally
+// going to be larger than 2^56. Otherwise use int64 for 64 bit values that are frequently smaller
+// than 2^56 as it will safe space on the wire in those cases.
+//
+// Similar to fixed64, use fixed32 for RTime32 or other 32 bit values that are frequently larger than
+// 2^28. It will safe space in those cases, otherwise use int32 which will safe space for smaller values.
+// An exception to this rule for RTime32 is if the value will frequently be zero rather than set to an actual
+// time.
+//
+
+import "google/protobuf/descriptor.proto";
+
+// for CMsgVector, etc.
+import "netmessages_public.proto";
+
+import "cstrike15_gcmessages.proto";
+//=============================================================================
+// CStrike15 User Messages
+//=============================================================================
+
+enum ECstrike15UserMessages {
+ CS_UM_VGUIMenu = 1;
+ CS_UM_Geiger = 2;
+ CS_UM_Train = 3;
+ CS_UM_HudText = 4;
+ CS_UM_SayText = 5;
+ CS_UM_SayText2 = 6;
+ CS_UM_TextMsg = 7;
+ CS_UM_HudMsg = 8;
+ CS_UM_ResetHud = 9;
+ CS_UM_GameTitle = 10;
+ CS_UM_Shake = 12;
+ CS_UM_Fade = 13;
+ CS_UM_Rumble = 14;
+ CS_UM_CloseCaption = 15;
+ CS_UM_CloseCaptionDirect = 16;
+ CS_UM_SendAudio = 17;
+ CS_UM_RawAudio = 18;
+ CS_UM_VoiceMask = 19;
+ CS_UM_RequestState = 20;
+ CS_UM_Damage = 21;
+ CS_UM_RadioText = 22;
+ CS_UM_HintText = 23;
+ CS_UM_KeyHintText = 24;
+ CS_UM_ProcessSpottedEntityUpdate = 25;
+ CS_UM_ReloadEffect = 26;
+ CS_UM_AdjustMoney = 27;
+ CS_UM_StopSpectatorMode = 29;
+ CS_UM_KillCam = 30;
+ CS_UM_DesiredTimescale = 31;
+ CS_UM_CurrentTimescale = 32;
+ CS_UM_AchievementEvent = 33;
+ CS_UM_MatchEndConditions = 34;
+ CS_UM_DisconnectToLobby = 35;
+ CS_UM_PlayerStatsUpdate = 36;
+ CS_UM_DisplayInventory = 37;
+ CS_UM_WarmupHasEnded = 38;
+ CS_UM_ClientInfo = 39;
+ CS_UM_XRankGet = 40;
+ CS_UM_XRankUpd = 41;
+ CS_UM_CallVoteFailed = 45;
+ CS_UM_VoteStart = 46;
+ CS_UM_VotePass = 47;
+ CS_UM_VoteFailed = 48;
+ CS_UM_VoteSetup = 49;
+ CS_UM_ServerRankRevealAll = 50;
+ CS_UM_SendLastKillerDamageToClient = 51;
+ CS_UM_ServerRankUpdate = 52;
+ CS_UM_ItemPickup = 53;
+ CS_UM_ShowMenu = 54;
+ CS_UM_BarTime = 55;
+ CS_UM_AmmoDenied = 56;
+ CS_UM_MarkAchievement = 57;
+ CS_UM_MatchStatsUpdate = 58;
+ CS_UM_ItemDrop = 59;
+ CS_UM_GlowPropTurnOff = 60;
+ CS_UM_SendPlayerItemDrops = 61;
+ CS_UM_RoundBackupFilenames = 62;
+ CS_UM_SendPlayerItemFound = 63;
+ CS_UM_ReportHit = 64;
+ CS_UM_XpUpdate = 65;
+ CS_UM_QuestProgress = 66;
+ CS_UM_ScoreLeaderboardData = 67;
+}
+
+message CCSUsrMsg_VGUIMenu {
+ message Subkey {
+ optional string name = 1;
+ optional string str = 2;
+ }
+
+ optional string name = 1;
+ optional bool show = 2;
+ repeated .CCSUsrMsg_VGUIMenu.Subkey subkeys = 3;
+}
+
+message CCSUsrMsg_Geiger {
+ optional int32 range = 1;
+}
+
+message CCSUsrMsg_Train {
+ optional int32 train = 1;
+}
+
+message CCSUsrMsg_HudText {
+ optional string text = 1;
+}
+
+message CCSUsrMsg_SayText {
+ optional int32 ent_idx = 1;
+ optional string text = 2;
+ optional bool chat = 3;
+ optional bool textallchat = 4;
+}
+
+message CCSUsrMsg_SayText2 {
+ optional int32 ent_idx = 1;
+ optional bool chat = 2;
+ optional string msg_name = 3;
+ repeated string params = 4;
+ optional bool textallchat = 5;
+}
+
+message CCSUsrMsg_TextMsg {
+ optional int32 msg_dst = 1;
+ repeated string params = 3;
+}
+
+message CCSUsrMsg_HudMsg {
+ optional int32 channel = 1;
+ optional CMsgVector2D pos = 2;
+ optional CMsgRGBA clr1 = 3;
+ optional CMsgRGBA clr2 = 4;
+ optional int32 effect = 5;
+ optional float fade_in_time = 6;
+ optional float fade_out_time = 7;
+ optional float hold_time = 9;
+ optional float fx_time = 10;
+ optional string text = 11;
+}
+
+message CCSUsrMsg_Shake {
+ optional int32 command = 1;
+ optional float local_amplitude = 2;
+ optional float frequency = 3;
+ optional float duration = 4;
+}
+
+message CCSUsrMsg_Fade {
+ optional int32 duration = 1;
+ optional int32 hold_time = 2;
+ optional int32 flags = 3;
+ optional CMsgRGBA clr = 4;
+}
+
+message CCSUsrMsg_Rumble {
+ optional int32 index = 1;
+ optional int32 data = 2;
+ optional int32 flags = 3;
+}
+
+message CCSUsrMsg_CloseCaption {
+ optional uint32 hash = 1;
+ optional int32 duration = 2;
+ optional bool from_player = 3;
+}
+
+message CCSUsrMsg_CloseCaptionDirect {
+ optional uint32 hash = 1;
+ optional int32 duration = 2;
+ optional bool from_player = 3;
+}
+
+message CCSUsrMsg_SendAudio {
+ optional string radio_sound = 1;
+}
+
+message CCSUsrMsg_RawAudio {
+ optional int32 pitch = 1;
+ optional int32 entidx = 2;
+ optional float duration = 3;
+ optional string voice_filename = 4;
+}
+
+message CCSUsrMsg_VoiceMask {
+ message PlayerMask {
+ optional int32 game_rules_mask = 1;
+ optional int32 ban_masks = 2;
+ }
+
+ repeated .CCSUsrMsg_VoiceMask.PlayerMask player_masks = 1;
+ optional bool player_mod_enable = 2;
+}
+
+message CCSUsrMsg_Damage {
+ optional int32 amount = 1;
+ optional CMsgVector inflictor_world_pos = 2;
+ optional int32 victim_entindex = 3;
+}
+
+message CCSUsrMsg_RadioText {
+ optional int32 msg_dst = 1;
+ optional int32 client = 2;
+ optional string msg_name = 3;
+ repeated string params = 4;
+}
+
+message CCSUsrMsg_HintText {
+ optional string text = 1;
+}
+
+message CCSUsrMsg_KeyHintText {
+ repeated string hints = 1;
+}
+
+message CCSUsrMsg_ProcessSpottedEntityUpdate {
+ message SpottedEntityUpdate {
+ optional int32 entity_idx = 1;
+ optional int32 class_id = 2;
+ optional int32 origin_x = 3;
+ optional int32 origin_y = 4;
+ optional int32 origin_z = 5;
+ optional int32 angle_y = 6;
+ optional bool defuser = 7;
+ optional bool player_has_defuser = 8;
+ optional bool player_has_c4 = 9;
+ }
+
+ optional bool new_update = 1;
+ repeated .CCSUsrMsg_ProcessSpottedEntityUpdate.SpottedEntityUpdate entity_updates = 2;
+}
+
+message CCSUsrMsg_SendPlayerItemDrops {
+ repeated .CEconItemPreviewDataBlock entity_updates = 1;
+}
+
+message CCSUsrMsg_SendPlayerItemFound {
+ optional CEconItemPreviewDataBlock iteminfo = 1;
+ optional int32 entindex = 2;
+}
+
+message CCSUsrMsg_ReloadEffect {
+ optional int32 entidx = 1;
+ optional int32 actanim = 2;
+ optional float origin_x = 3;
+ optional float origin_y = 4;
+ optional float origin_z = 5;
+}
+
+message CCSUsrMsg_AdjustMoney {
+ optional int32 amount = 1;
+}
+
+message CCSUsrMsg_ReportHit {
+ optional float pos_x = 1;
+ optional float pos_y = 2;
+ optional float timestamp = 4;
+ optional float pos_z = 3;
+}
+
+message CCSUsrMsg_KillCam {
+ optional int32 obs_mode = 1;
+ optional int32 first_target = 2;
+ optional int32 second_target = 3;
+}
+
+message CCSUsrMsg_DesiredTimescale {
+ optional float desired_timescale = 1;
+ optional float duration_realtime_sec = 2;
+ optional int32 interpolator_type = 3;
+ optional float start_blend_time = 4;
+}
+
+message CCSUsrMsg_CurrentTimescale {
+ optional float cur_timescale = 1;
+}
+
+message CCSUsrMsg_AchievementEvent {
+ optional int32 achievement = 1;
+ optional int32 count = 2;
+ optional int32 user_id = 3;
+}
+
+message CCSUsrMsg_MatchEndConditions {
+ optional int32 fraglimit = 1;
+ optional int32 mp_maxrounds = 2;
+ optional int32 mp_winlimit = 3;
+ optional int32 mp_timelimit = 4;
+}
+
+message CCSUsrMsg_PlayerStatsUpdate {
+ message Stat {
+ optional int32 idx = 1;
+ optional int32 delta = 2;
+ }
+
+ optional int32 version = 1;
+ repeated .CCSUsrMsg_PlayerStatsUpdate.Stat stats = 4;
+ optional int32 user_id = 5;
+ optional int32 crc = 6;
+}
+
+message CCSUsrMsg_DisplayInventory {
+ optional bool display = 1;
+ optional int32 user_id = 2;
+}
+
+message CCSUsrMsg_QuestProgress {
+ optional uint32 quest_id = 1;
+ optional uint32 normal_points = 2;
+ optional uint32 bonus_points = 3;
+ optional bool is_event_quest = 4;
+}
+
+message CCSUsrMsg_ScoreLeaderboardData {
+ optional ScoreLeaderboardData data = 1;
+}
+
+message CCSUsrMsg_XRankGet {
+ optional int32 mode_idx = 1;
+ optional int32 controller = 2;
+}
+
+message CCSUsrMsg_XRankUpd {
+ optional int32 mode_idx = 1;
+ optional int32 controller = 2;
+ optional int32 ranking = 3;
+}
+
+message CCSUsrMsg_CallVoteFailed {
+ optional int32 reason = 1;
+ optional int32 time = 2;
+}
+
+message CCSUsrMsg_VoteStart {
+ optional int32 team = 1;
+ optional int32 ent_idx = 2;
+ optional int32 vote_type = 3;
+ optional string disp_str = 4;
+ optional string details_str = 5;
+ optional string other_team_str = 6;
+ optional bool is_yes_no_vote = 7;
+}
+
+message CCSUsrMsg_VotePass {
+ optional int32 team = 1;
+ optional int32 vote_type = 2;
+ optional string disp_str = 3;
+ optional string details_str = 4;
+}
+
+message CCSUsrMsg_VoteFailed {
+ optional int32 team = 1;
+ optional int32 reason = 2;
+}
+
+message CCSUsrMsg_VoteSetup {
+ repeated string potential_issues = 1;
+}
+
+message CCSUsrMsg_SendLastKillerDamageToClient {
+ optional int32 num_hits_given = 1;
+ optional int32 damage_given = 2;
+ optional int32 num_hits_taken = 3;
+ optional int32 damage_taken = 4;
+}
+
+message CCSUsrMsg_ServerRankUpdate {
+ message RankUpdate {
+ optional int32 account_id = 1;
+ optional int32 rank_old = 2;
+ optional int32 rank_new = 3;
+ optional int32 num_wins = 4;
+ optional float rank_change = 5;
+ }
+
+ repeated .CCSUsrMsg_ServerRankUpdate.RankUpdate rank_update = 1;
+}
+
+message CCSUsrMsg_XpUpdate {
+ optional CMsgGCCstrike15_v2_GC2ServerNotifyXPRewarded data = 1;
+}
+
+message CCSUsrMsg_ItemPickup {
+ optional string item = 1;
+}
+
+message CCSUsrMsg_ShowMenu {
+ optional int32 bits_valid_slots = 1;
+ optional int32 display_time = 2;
+ optional string menu_string = 3;
+}
+
+message CCSUsrMsg_BarTime {
+ optional string time = 1;
+}
+
+message CCSUsrMsg_AmmoDenied {
+ optional int32 ammoIdx = 1;
+}
+
+message CCSUsrMsg_MarkAchievement {
+ optional string achievement = 1;
+}
+
+message CCSUsrMsg_MatchStatsUpdate {
+ optional string update = 1;
+}
+
+message CCSUsrMsg_ItemDrop {
+ optional int64 itemid = 1;
+ optional bool death = 2;
+}
+
+message CCSUsrMsg_GlowPropTurnOff {
+ optional int32 entidx = 1;
+}
+
+message CCSUsrMsg_RoundBackupFilenames {
+ optional int32 count = 1;
+ optional int32 index = 2;
+ optional string filename = 3;
+ optional string nicename = 4;
+}
+
+message CCSUsrMsg_ResetHud {
+ optional bool reset = 1;
+}
+
+message CCSUsrMsg_GameTitle {
+ optional int32 dummy = 1;
+}
+
+message CCSUsrMsg_RequestState {
+ optional int32 dummy = 1;
+}
+
+message CCSUsrMsg_StopSpectatorMode {
+ optional int32 dummy = 1;
+}
+
+message CCSUsrMsg_DisconnectToLobby {
+ optional int32 dummy = 1;
+}
+
+message CCSUsrMsg_WarmupHasEnded {
+ optional int32 dummy = 1;
+}
+
+message CCSUsrMsg_ClientInfo {
+ optional int32 dummy = 1;
+}
+
+message CCSUsrMsg_ServerRankRevealAll {
+ optional int32 seconds_till_shutdown = 1;
+}
+
+
--- /dev/null
+//====== Copyright (c) 2013, Valve Corporation, All rights reserved. ========//\r
+//\r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are met:\r
+//\r
+// Redistributions of source code must retain the above copyright notice, this\r
+// list of conditions and the following disclaimer.\r
+// Redistributions in binary form must reproduce the above copyright notice, \r
+// this list of conditions and the following disclaimer in the documentation \r
+// and/or other materials provided with the distribution.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \r
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE \r
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS \r
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \r
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \r
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF \r
+// THE POSSIBILITY OF SUCH DAMAGE.\r
+//===========================================================================//\r
+//\r
+// Purpose: The file defines our Google Protocol Buffers which are used in over \r
+// the wire messages for the Source engine.\r
+//\r
+//=============================================================================\r
+\r
+// Note about encoding:\r
+// http://code.google.com/apis/protocolbuffers/docs/encoding.html\r
+//\r
+// TL;DR: Use sint32/sint64 for values that may be negative.\r
+//\r
+// There is an important difference between the signed int types (sint32 and sint64)\r
+// and the "standard" int types (int32 and int64) when it comes to encoding negative\r
+// numbers. If you use int32 or int64 as the type for a negative number, the\r
+// resulting varint is always ten bytes long \96 it is, effectively, treated like a\r
+// very large unsigned integer. If you use one of the signed types, the resulting\r
+// varint uses ZigZag encoding, which is much more efficient.\r
+\r
+\r
+// Commenting this out allows it to be compiled for SPEED or LITE_RUNTIME.\r
+// option optimize_for = SPEED;\r
+\r
+// We don't use the service generation functionality\r
+option cc_generic_services = false;\r
+\r
+\r
+// \r
+// STYLE NOTES:\r
+//\r
+// Use CamelCase CMsgMyMessageName style names for messages.\r
+// \r
+// Use lowercase _ delimited names like my_steam_id for field names, this is non-standard for Steam,\r
+// but plays nice with the Google formatted code generation. \r
+// \r
+// Try not to use required fields ever. Only do so if you are really really sure you'll never want them removed. \r
+// Optional should be preffered as it will make versioning easier and cleaner in the future if someone refactors\r
+// your message and wants to remove or rename fields.\r
+//\r
+// Use fixed64 for JobId_t, GID_t, or SteamID. This is appropriate for any field that is normally\r
+// going to be larger than 2^56. Otherwise use int64 for 64 bit values that are frequently smaller\r
+// than 2^56 as it will safe space on the wire in those cases.\r
+//\r
+// Similar to fixed64, use fixed32 for RTime32 or other 32 bit values that are frequently larger than\r
+// 2^28. It will safe space in those cases, otherwise use int32 which will safe space for smaller values.\r
+// An exception to this rule for RTime32 is if the value will frequently be zero rather than set to an actual \r
+// time.\r
+//\r
+\r
+import "google/protobuf/descriptor.proto";\r
+\r
+enum NET_Messages {\r
+ net_NOP = 0;\r
+ net_Disconnect = 1;\r
+ net_File = 2;\r
+ net_SplitScreenUser = 3;\r
+ net_Tick = 4;\r
+ net_StringCmd = 5;\r
+ net_SetConVar = 6;\r
+ net_SignonState = 7;\r
+ net_PlayerAvatarData = 100;\r
+}\r
+\r
+enum CLC_Messages {\r
+ clc_ClientInfo = 8;\r
+ clc_Move = 9;\r
+ clc_VoiceData = 10;\r
+ clc_BaselineAck = 11;\r
+ clc_ListenEvents = 12;\r
+ clc_RespondCvarValue = 13;\r
+ clc_FileCRCCheck = 14;\r
+ clc_LoadingProgress = 15;\r
+ clc_SplitPlayerConnect = 16;\r
+ clc_ClientMessage = 17;\r
+ clc_CmdKeyValues = 18;\r
+ clc_HltvReplay = 20;\r
+}\r
+\r
+enum VoiceDataFormat_t {\r
+ VOICEDATA_FORMAT_STEAM = 0;\r
+ VOICEDATA_FORMAT_ENGINE = 1;\r
+}\r
+\r
+enum ESplitScreenMessageType {\r
+ option allow_alias = true;\r
+ MSG_SPLITSCREEN_ADDUSER = 0;\r
+ MSG_SPLITSCREEN_REMOVEUSER = 1;\r
+ MSG_SPLITSCREEN_TYPE_BITS = 1;\r
+}\r
+\r
+enum SVC_Messages {\r
+ svc_ServerInfo = 8;\r
+ svc_SendTable = 9;\r
+ svc_ClassInfo = 10;\r
+ svc_SetPause = 11;\r
+ svc_CreateStringTable = 12;\r
+ svc_UpdateStringTable = 13;\r
+ svc_VoiceInit = 14;\r
+ svc_VoiceData = 15;\r
+ svc_Print = 16;\r
+ svc_Sounds = 17;\r
+ svc_SetView = 18;\r
+ svc_FixAngle = 19;\r
+ svc_CrosshairAngle = 20;\r
+ svc_BSPDecal = 21;\r
+ svc_SplitScreen = 22;\r
+ svc_UserMessage = 23;\r
+ svc_EntityMessage = 24;\r
+ svc_GameEvent = 25;\r
+ svc_PacketEntities = 26;\r
+ svc_TempEntities = 27;\r
+ svc_Prefetch = 28;\r
+ svc_Menu = 29;\r
+ svc_GameEventList = 30;\r
+ svc_GetCvarValue = 31;\r
+ svc_PaintmapData = 33;\r
+ svc_CmdKeyValues = 34;\r
+ svc_EncryptedData = 35;\r
+ svc_HltvReplay = 36;\r
+}\r
+\r
+enum ReplayEventType_t {\r
+ REPLAY_EVENT_CANCEL = 0;\r
+ REPLAY_EVENT_DEATH = 1;\r
+ REPLAY_EVENT_GENERIC = 2;\r
+ REPLAY_EVENT_STUCK_NEED_FULL_UPDATE = 3;\r
+}\r
+\r
+message CMsgVector {\r
+ optional float x = 1;\r
+ optional float y = 2;\r
+ optional float z = 3;\r
+}\r
+\r
+message CMsgVector2D {\r
+ optional float x = 1;\r
+ optional float y = 2;\r
+}\r
+\r
+message CMsgQAngle {\r
+ optional float x = 1;\r
+ optional float y = 2;\r
+ optional float z = 3;\r
+}\r
+\r
+message CMsgRGBA {\r
+ optional int32 r = 1;\r
+ optional int32 g = 2;\r
+ optional int32 b = 3;\r
+ optional int32 a = 4;\r
+}\r
+\r
+message CNETMsg_Tick {\r
+ optional uint32 tick = 1;\r
+ optional uint32 host_computationtime = 4;\r
+ optional uint32 host_computationtime_std_deviation = 5;\r
+ optional uint32 host_framestarttime_std_deviation = 6;\r
+ optional uint32 hltv_replay_flags = 7;\r
+}\r
+\r
+message CNETMsg_StringCmd {\r
+ optional string command = 1;\r
+}\r
+\r
+message CNETMsg_SignonState {\r
+ optional uint32 signon_state = 1;\r
+ optional uint32 spawn_count = 2;\r
+ optional uint32 num_server_players = 3;\r
+ repeated string players_networkids = 4;\r
+ optional string map_name = 5;\r
+}\r
+\r
+message CMsg_CVars {\r
+ message CVar {\r
+ optional string name = 1;\r
+ optional string value = 2;\r
+ optional uint32 dictionary_name = 3;\r
+ }\r
+\r
+ repeated .CMsg_CVars.CVar cvars = 1;\r
+}\r
+\r
+message CNETMsg_SetConVar {\r
+ optional .CMsg_CVars convars = 1;\r
+}\r
+\r
+message CNETMsg_NOP {\r
+}\r
+\r
+message CNETMsg_Disconnect {\r
+ optional string text = 1;\r
+}\r
+\r
+message CNETMsg_File {\r
+ optional int32 transfer_id = 1;\r
+ optional string file_name = 2;\r
+ optional bool is_replay_demo_file = 3;\r
+ optional bool deny = 4;\r
+}\r
+\r
+message CNETMsg_SplitScreenUser {\r
+ optional int32 slot = 1;\r
+}\r
+\r
+message CNETMsg_PlayerAvatarData {\r
+ optional uint32 accountid = 1;\r
+ optional bytes rgb = 2;\r
+}\r
+\r
+message CCLCMsg_ClientInfo {\r
+ optional fixed32 send_table_crc = 1;\r
+ optional uint32 server_count = 2;\r
+ optional bool is_hltv = 3;\r
+ optional bool is_replay = 4;\r
+ optional uint32 friends_id = 5;\r
+ optional string friends_name = 6;\r
+ repeated fixed32 custom_files = 7;\r
+}\r
+\r
+message CCLCMsg_Move {\r
+ optional uint32 num_backup_commands = 1;\r
+ optional uint32 num_new_commands = 2;\r
+ optional bytes data = 3;\r
+}\r
+\r
+message CCLCMsg_VoiceData {\r
+ optional bytes data = 1;\r
+ optional fixed64 xuid = 2;\r
+ optional .VoiceDataFormat_t format = 3 [default = VOICEDATA_FORMAT_ENGINE];\r
+ optional int32 sequence_bytes = 4;\r
+ optional uint32 section_number = 5;\r
+ optional uint32 uncompressed_sample_offset = 6;\r
+}\r
+\r
+message CCLCMsg_BaselineAck {\r
+ optional int32 baseline_tick = 1;\r
+ optional int32 baseline_nr = 2;\r
+}\r
+\r
+message CCLCMsg_ListenEvents {\r
+ repeated fixed32 event_mask = 1;\r
+}\r
+\r
+message CCLCMsg_RespondCvarValue {\r
+ optional int32 cookie = 1;\r
+ optional int32 status_code = 2;\r
+ optional string name = 3;\r
+ optional string value = 4;\r
+}\r
+\r
+message CCLCMsg_FileCRCCheck {\r
+ optional int32 code_path = 1;\r
+ optional string path = 2;\r
+ optional int32 code_filename = 3;\r
+ optional string filename = 4;\r
+ optional int32 file_fraction = 5;\r
+ optional bytes md5 = 6;\r
+ optional uint32 crc = 7;\r
+ optional int32 file_hash_type = 8;\r
+ optional int32 file_len = 9;\r
+ optional int32 pack_file_id = 10;\r
+ optional int32 pack_file_number = 11;\r
+}\r
+\r
+message CCLCMsg_LoadingProgress {\r
+ optional int32 progress = 1;\r
+}\r
+\r
+message CCLCMsg_SplitPlayerConnect {\r
+ optional .CMsg_CVars convars = 1;\r
+}\r
+\r
+message CCLCMsg_CmdKeyValues {\r
+ optional bytes keyvalues = 1;\r
+}\r
+\r
+message CSVCMsg_ServerInfo {\r
+ optional int32 protocol = 1;\r
+ optional int32 server_count = 2;\r
+ optional bool is_dedicated = 3;\r
+ optional bool is_official_valve_server = 4;\r
+ optional bool is_hltv = 5;\r
+ optional bool is_replay = 6;\r
+ optional bool is_redirecting_to_proxy_relay = 21;\r
+ optional int32 c_os = 7;\r
+ optional fixed32 map_crc = 8;\r
+ optional fixed32 client_crc = 9;\r
+ optional fixed32 string_table_crc = 10;\r
+ optional int32 max_clients = 11;\r
+ optional int32 max_classes = 12;\r
+ optional int32 player_slot = 13;\r
+ optional float tick_interval = 14;\r
+ optional string game_dir = 15;\r
+ optional string map_name = 16;\r
+ optional string map_group_name = 17;\r
+ optional string sky_name = 18;\r
+ optional string host_name = 19;\r
+ optional uint32 public_ip = 20;\r
+ optional uint64 ugc_map_id = 22;\r
+}\r
+\r
+message CSVCMsg_ClassInfo {\r
+ message class_t {\r
+ optional int32 class_id = 1;\r
+ optional string data_table_name = 2;\r
+ optional string class_name = 3;\r
+ }\r
+\r
+ optional bool create_on_client = 1;\r
+ repeated .CSVCMsg_ClassInfo.class_t classes = 2;\r
+}\r
+\r
+message CSVCMsg_SendTable {\r
+ message sendprop_t {\r
+ optional int32 type = 1;\r
+ optional string var_name = 2;\r
+ optional int32 flags = 3;\r
+ optional int32 priority = 4;\r
+ optional string dt_name = 5;\r
+ optional int32 num_elements = 6;\r
+ optional float low_value = 7;\r
+ optional float high_value = 8;\r
+ optional int32 num_bits = 9;\r
+ }\r
+\r
+ optional bool is_end = 1;\r
+ optional string net_table_name = 2;\r
+ optional bool needs_decoder = 3;\r
+ repeated .CSVCMsg_SendTable.sendprop_t props = 4;\r
+}\r
+\r
+message CSVCMsg_Print {\r
+ optional string text = 1;\r
+}\r
+\r
+message CSVCMsg_SetPause {\r
+ optional bool paused = 1;\r
+}\r
+\r
+message CSVCMsg_SetView {\r
+ optional int32 entity_index = 1;\r
+}\r
+\r
+message CSVCMsg_CreateStringTable {\r
+ optional string name = 1;\r
+ optional int32 max_entries = 2;\r
+ optional int32 num_entries = 3;\r
+ optional bool user_data_fixed_size = 4;\r
+ optional int32 user_data_size = 5;\r
+ optional int32 user_data_size_bits = 6;\r
+ optional int32 flags = 7;\r
+ optional bytes string_data = 8;\r
+}\r
+\r
+message CSVCMsg_UpdateStringTable {\r
+ optional int32 table_id = 1;\r
+ optional int32 num_changed_entries = 2;\r
+ optional bytes string_data = 3;\r
+}\r
+\r
+message CSVCMsg_VoiceInit {\r
+ optional int32 quality = 1;\r
+ optional string codec = 2;\r
+ optional int32 version = 3 [default = 0];\r
+}\r
+\r
+message CSVCMsg_VoiceData {\r
+ optional int32 client = 1;\r
+ optional bool proximity = 2;\r
+ optional fixed64 xuid = 3;\r
+ optional int32 audible_mask = 4;\r
+ optional bytes voice_data = 5;\r
+ optional bool caster = 6;\r
+ optional .VoiceDataFormat_t format = 7 [default = VOICEDATA_FORMAT_ENGINE];\r
+ optional int32 sequence_bytes = 8;\r
+ optional uint32 section_number = 9;\r
+ optional uint32 uncompressed_sample_offset = 10;\r
+}\r
+\r
+message CSVCMsg_FixAngle {\r
+ optional bool relative = 1;\r
+ optional .CMsgQAngle angle = 2;\r
+}\r
+\r
+message CSVCMsg_CrosshairAngle {\r
+ optional .CMsgQAngle angle = 1;\r
+}\r
+\r
+message CSVCMsg_Prefetch {\r
+ optional int32 sound_index = 1;\r
+}\r
+\r
+message CSVCMsg_BSPDecal {\r
+ optional .CMsgVector pos = 1;\r
+ optional int32 decal_texture_index = 2;\r
+ optional int32 entity_index = 3;\r
+ optional int32 model_index = 4;\r
+ optional bool low_priority = 5;\r
+}\r
+\r
+message CSVCMsg_SplitScreen {\r
+ optional .ESplitScreenMessageType type = 1 [default = MSG_SPLITSCREEN_ADDUSER];\r
+ optional int32 slot = 2;\r
+ optional int32 player_index = 3;\r
+}\r
+\r
+message CSVCMsg_GetCvarValue {\r
+ optional int32 cookie = 1;\r
+ optional string cvar_name = 2;\r
+}\r
+\r
+message CSVCMsg_Menu {\r
+ optional int32 dialog_type = 1;\r
+ optional bytes menu_key_values = 2;\r
+}\r
+\r
+message CSVCMsg_UserMessage {\r
+ optional int32 msg_type = 1;\r
+ optional bytes msg_data = 2;\r
+ optional int32 passthrough = 3;\r
+}\r
+\r
+message CSVCMsg_PaintmapData {\r
+ optional bytes paintmap = 1;\r
+}\r
+\r
+message CSVCMsg_GameEvent {\r
+ message key_t {\r
+ optional int32 type = 1;\r
+ optional string val_string = 2;\r
+ optional float val_float = 3;\r
+ optional int32 val_long = 4;\r
+ optional int32 val_short = 5;\r
+ optional int32 val_byte = 6;\r
+ optional bool val_bool = 7;\r
+ optional uint64 val_uint64 = 8;\r
+ optional bytes val_wstring = 9;\r
+ }\r
+\r
+ optional string event_name = 1;\r
+ optional int32 eventid = 2;\r
+ repeated .CSVCMsg_GameEvent.key_t keys = 3;\r
+ optional int32 passthrough = 4;\r
+}\r
+\r
+message CSVCMsg_GameEventList {\r
+ message key_t {\r
+ optional int32 type = 1;\r
+ optional string name = 2;\r
+ }\r
+\r
+ message descriptor_t {\r
+ optional int32 eventid = 1;\r
+ optional string name = 2;\r
+ repeated .CSVCMsg_GameEventList.key_t keys = 3;\r
+ }\r
+\r
+ repeated .CSVCMsg_GameEventList.descriptor_t descriptors = 1;\r
+}\r
+\r
+message CSVCMsg_TempEntities {\r
+ optional bool reliable = 1;\r
+ optional int32 num_entries = 2;\r
+ optional bytes entity_data = 3;\r
+}\r
+\r
+message CSVCMsg_PacketEntities {\r
+ optional int32 max_entries = 1;\r
+ optional int32 updated_entries = 2;\r
+ optional bool is_delta = 3;\r
+ optional bool update_baseline = 4;\r
+ optional int32 baseline = 5;\r
+ optional int32 delta_from = 6;\r
+ optional bytes entity_data = 7;\r
+}\r
+\r
+message CSVCMsg_Sounds {\r
+ message sounddata_t {\r
+ optional sint32 origin_x = 1;\r
+ optional sint32 origin_y = 2;\r
+ optional sint32 origin_z = 3;\r
+ optional uint32 volume = 4;\r
+ optional float delay_value = 5;\r
+ optional int32 sequence_number = 6;\r
+ optional int32 entity_index = 7;\r
+ optional int32 channel = 8;\r
+ optional int32 pitch = 9;\r
+ optional int32 flags = 10;\r
+ optional uint32 sound_num = 11;\r
+ optional fixed32 sound_num_handle = 12;\r
+ optional int32 speaker_entity = 13;\r
+ optional int32 random_seed = 14;\r
+ optional int32 sound_level = 15;\r
+ optional bool is_sentence = 16;\r
+ optional bool is_ambient = 17;\r
+ }\r
+\r
+ optional bool reliable_sound = 1;\r
+ repeated .CSVCMsg_Sounds.sounddata_t sounds = 2;\r
+}\r
+\r
+message CSVCMsg_EntityMsg {\r
+ optional int32 ent_index = 1;\r
+ optional int32 class_id = 2;\r
+ optional bytes ent_data = 3;\r
+}\r
+\r
+message CSVCMsg_CmdKeyValues {\r
+ optional bytes keyvalues = 1;\r
+}\r
+\r
+message CSVCMsg_EncryptedData {\r
+ optional bytes encrypted = 1;\r
+ optional int32 key_type = 2;\r
+}\r
+\r
+message CSVCMsg_HltvReplay {\r
+ optional int32 delay = 1;\r
+ optional int32 primary_target = 2;\r
+ optional int32 replay_stop_at = 3;\r
+ optional int32 replay_start_at = 4;\r
+ optional int32 replay_slowdown_begin = 5;\r
+ optional int32 replay_slowdown_end = 6;\r
+ optional float replay_slowdown_rate = 7;\r
+}\r
+\r
+message CCLCMsg_HltvReplay {\r
+ optional int32 request = 1;\r
+ optional float slowdown_length = 2;\r
+ optional float slowdown_rate = 3;\r
+ optional int32 primary_target_ent_index = 4;\r
+ optional float event_time = 5;\r
+}\r
--- /dev/null
+#ifndef PROTO_H
+#define PROTO_H
+
+typedef void proto_data;
+typedef void proto_info;
+
+proto_info* parse_proto_data(proto_data*);
+
+proto_info*
+parse_proto_data(proto_data* pd)
+{ static char buf[256];
+ return (proto_info*)&buf;
+}
+#endif
--- /dev/null
+import "google/protobuf/descriptor.proto";
+
+option optimize_for = SPEED;
+option cc_generic_services = false;
+
+extend .google.protobuf.FieldOptions {
+ optional bool key_field = 60000 [default = false];
+}
+
+extend .google.protobuf.MessageOptions {
+ optional int32 msgpool_soft_limit = 60000 [default = 32];
+ optional int32 msgpool_hard_limit = 60001 [default = 384];
+}
+
+enum GCProtoBufMsgSrc {
+ GCProtoBufMsgSrc_Unspecified = 0;
+ GCProtoBufMsgSrc_FromSystem = 1;
+ GCProtoBufMsgSrc_FromSteamID = 2;
+ GCProtoBufMsgSrc_FromGC = 3;
+ GCProtoBufMsgSrc_ReplySystem = 4;
+}
+
+message CMsgProtoBufHeader {
+ option (msgpool_soft_limit) = 256;
+ option (msgpool_hard_limit) = 1024;
+ optional fixed64 client_steam_id = 1;
+ optional int32 client_session_id = 2;
+ optional uint32 source_app_id = 3;
+ optional fixed64 job_id_source = 10 [default = 18446744073709551615];
+ optional fixed64 job_id_target = 11 [default = 18446744073709551615];
+ optional string target_job_name = 12;
+ optional int32 eresult = 13 [default = 2];
+ optional string error_message = 14;
+ optional .GCProtoBufMsgSrc gc_msg_src = 200 [default = GCProtoBufMsgSrc_Unspecified];
+ optional uint32 gc_dir_index_source = 201;
+}
+
+message CMsgWebAPIKey {
+ optional uint32 status = 1 [default = 255];
+ optional uint32 account_id = 2 [default = 0];
+ optional uint32 publisher_group_id = 3 [default = 0];
+ optional uint32 key_id = 4;
+ optional string domain = 5;
+}
+
+message CMsgHttpRequest {
+ message RequestHeader {
+ optional string name = 1;
+ optional string value = 2;
+ }
+
+ message QueryParam {
+ optional string name = 1;
+ optional bytes value = 2;
+ }
+
+ optional uint32 request_method = 1;
+ optional string hostname = 2;
+ optional string url = 3;
+ repeated .CMsgHttpRequest.RequestHeader headers = 4;
+ repeated .CMsgHttpRequest.QueryParam get_params = 5;
+ repeated .CMsgHttpRequest.QueryParam post_params = 6;
+ optional bytes body = 7;
+ optional uint32 absolute_timeout = 8;
+}
+
+message CMsgWebAPIRequest {
+ optional string UNUSED_job_name = 1;
+ optional string interface_name = 2;
+ optional string method_name = 3;
+ optional uint32 version = 4;
+ optional .CMsgWebAPIKey api_key = 5;
+ optional .CMsgHttpRequest request = 6;
+ optional uint32 routing_app_id = 7;
+}
+
+message CMsgHttpResponse {
+ message ResponseHeader {
+ optional string name = 1;
+ optional string value = 2;
+ }
+
+ optional uint32 status_code = 1;
+ repeated .CMsgHttpResponse.ResponseHeader headers = 2;
+ optional bytes body = 3;
+}
+
+message CMsgAMFindAccounts {
+ optional uint32 search_type = 1;
+ optional string search_string = 2;
+}
+
+message CMsgAMFindAccountsResponse {
+ repeated fixed64 steam_id = 1;
+}
+
+message CMsgNotifyWatchdog {
+ optional uint32 source = 1;
+ optional uint32 alert_type = 2;
+ optional uint32 alert_destination = 3;
+ optional bool critical = 4;
+ optional uint32 time = 5;
+ optional uint32 appid = 6;
+ optional string text = 7;
+}
+
+message CMsgAMGetLicenses {
+ optional fixed64 steamid = 1;
+}
+
+message CMsgPackageLicense {
+ optional uint32 package_id = 1;
+ optional uint32 time_created = 2;
+ optional uint32 owner_id = 3;
+}
+
+message CMsgAMGetLicensesResponse {
+ repeated .CMsgPackageLicense license = 1;
+ optional uint32 result = 2;
+}
+
+message CMsgAMGetUserGameStats {
+ optional fixed64 steam_id = 1;
+ optional fixed64 game_id = 2;
+ repeated uint32 stats = 3;
+}
+
+message CMsgAMGetUserGameStatsResponse {
+ message Stats {
+ optional uint32 stat_id = 1;
+ optional uint32 stat_value = 2;
+ }
+
+ message Achievement_Blocks {
+ optional uint32 achievement_id = 1;
+ optional uint32 achievement_bit_id = 2;
+ optional fixed32 unlock_time = 3;
+ }
+
+ optional fixed64 steam_id = 1;
+ optional fixed64 game_id = 2;
+ optional int32 eresult = 3 [default = 2];
+ repeated .CMsgAMGetUserGameStatsResponse.Stats stats = 4;
+ repeated .CMsgAMGetUserGameStatsResponse.Achievement_Blocks achievement_blocks = 5;
+}
+
+message CMsgGCGetCommandList {
+ optional uint32 app_id = 1;
+ optional string command_prefix = 2;
+}
+
+message CMsgGCGetCommandListResponse {
+ repeated string command_name = 1;
+}
+
+message CGCMsgMemCachedGet {
+ repeated string keys = 1;
+}
+
+message CGCMsgMemCachedGetResponse {
+ message ValueTag {
+ optional bool found = 1;
+ optional bytes value = 2;
+ }
+
+ repeated .CGCMsgMemCachedGetResponse.ValueTag values = 1;
+}
+
+message CGCMsgMemCachedSet {
+ message KeyPair {
+ optional string name = 1;
+ optional bytes value = 2;
+ }
+
+ repeated .CGCMsgMemCachedSet.KeyPair keys = 1;
+}
+
+message CGCMsgMemCachedDelete {
+ repeated string keys = 1;
+}
+
+message CGCMsgMemCachedStats {
+}
+
+message CGCMsgMemCachedStatsResponse {
+ optional uint64 curr_connections = 1;
+ optional uint64 cmd_get = 2;
+ optional uint64 cmd_set = 3;
+ optional uint64 cmd_flush = 4;
+ optional uint64 get_hits = 5;
+ optional uint64 get_misses = 6;
+ optional uint64 delete_hits = 7;
+ optional uint64 delete_misses = 8;
+ optional uint64 bytes_read = 9;
+ optional uint64 bytes_written = 10;
+ optional uint64 limit_maxbytes = 11;
+ optional uint64 curr_items = 12;
+ optional uint64 evictions = 13;
+ optional uint64 bytes = 14;
+}
+
+message CGCMsgSQLStats {
+ optional uint32 schema_catalog = 1;
+}
+
+message CGCMsgSQLStatsResponse {
+ optional uint32 threads = 1;
+ optional uint32 threads_connected = 2;
+ optional uint32 threads_active = 3;
+ optional uint32 operations_submitted = 4;
+ optional uint32 prepared_statements_executed = 5;
+ optional uint32 non_prepared_statements_executed = 6;
+ optional uint32 deadlock_retries = 7;
+ optional uint32 operations_timed_out_in_queue = 8;
+ optional uint32 errors = 9;
+}
+
+message CMsgAMAddFreeLicense {
+ optional fixed64 steamid = 1;
+ optional uint32 ip_public = 2;
+ optional uint32 packageid = 3;
+ optional string store_country_code = 4;
+}
+
+message CMsgAMAddFreeLicenseResponse {
+ optional int32 eresult = 1 [default = 2];
+ optional int32 purchase_result_detail = 2;
+ optional fixed64 transid = 3;
+}
+
+message CGCMsgGetIPLocation {
+ repeated fixed32 ips = 1;
+}
+
+message CIPLocationInfo {
+ optional uint32 ip = 1;
+ optional float latitude = 2;
+ optional float longitude = 3;
+ optional string country = 4;
+ optional string state = 5;
+ optional string city = 6;
+}
+
+message CGCMsgGetIPLocationResponse {
+ repeated .CIPLocationInfo infos = 1;
+}
+
+message CGCMsgSystemStatsSchema {
+ optional uint32 gc_app_id = 1;
+ optional bytes schema_kv = 2;
+}
+
+message CGCMsgGetSystemStats {
+}
+
+message CGCMsgGetSystemStatsResponse {
+ optional uint32 gc_app_id = 1;
+ optional bytes stats_kv = 2;
+ optional uint32 active_jobs = 3;
+ optional uint32 yielding_jobs = 4;
+ optional uint32 user_sessions = 5;
+ optional uint32 game_server_sessions = 6;
+ optional uint32 socaches = 7;
+ optional uint32 socaches_to_unload = 8;
+ optional uint32 socaches_loading = 9;
+ optional uint32 writeback_queue = 10;
+ optional uint32 steamid_locks = 11;
+ optional uint32 logon_queue = 12;
+ optional uint32 logon_jobs = 13;
+}
+
+message CMsgAMSendEmail {
+ message ReplacementToken {
+ optional string token_name = 1;
+ optional string token_value = 2;
+ }
+
+ message PersonaNameReplacementToken {
+ optional fixed64 steamid = 1;
+ optional string token_name = 2;
+ }
+
+ optional fixed64 steamid = 1;
+ optional uint32 email_msg_type = 2;
+ optional uint32 email_format = 3;
+ repeated .CMsgAMSendEmail.PersonaNameReplacementToken persona_name_tokens = 5;
+ optional uint32 source_gc = 6;
+ repeated .CMsgAMSendEmail.ReplacementToken tokens = 7;
+}
+
+message CMsgAMSendEmailResponse {
+ optional uint32 eresult = 1 [default = 2];
+}
+
+message CMsgGCGetEmailTemplate {
+ optional uint32 app_id = 1;
+ optional uint32 email_msg_type = 2;
+ optional int32 email_lang = 3;
+ optional int32 email_format = 4;
+}
+
+message CMsgGCGetEmailTemplateResponse {
+ optional uint32 eresult = 1 [default = 2];
+ optional bool template_exists = 2;
+ optional string template = 3;
+}
+
+message CMsgAMGrantGuestPasses2 {
+ optional fixed64 steam_id = 1;
+ optional uint32 package_id = 2;
+ optional int32 passes_to_grant = 3;
+ optional int32 days_to_expiration = 4;
+ optional int32 action = 5;
+}
+
+message CMsgAMGrantGuestPasses2Response {
+ optional int32 eresult = 1 [default = 2];
+ optional int32 passes_granted = 2 [default = 0];
+}
+
+message CGCSystemMsg_GetAccountDetails {
+ option (msgpool_soft_limit) = 128;
+ option (msgpool_hard_limit) = 512;
+ optional fixed64 steamid = 1;
+ optional uint32 appid = 2;
+}
+
+message CGCSystemMsg_GetAccountDetails_Response {
+ option (msgpool_soft_limit) = 128;
+ option (msgpool_hard_limit) = 512;
+ optional uint32 eresult_deprecated = 1 [default = 2];
+ optional string account_name = 2;
+ optional string persona_name = 3;
+ optional bool is_profile_public = 4;
+ optional bool is_inventory_public = 5;
+ optional bool is_vac_banned = 7;
+ optional bool is_cyber_cafe = 8;
+ optional bool is_school_account = 9;
+ optional bool is_limited = 10;
+ optional bool is_subscribed = 11;
+ optional uint32 package = 12;
+ optional bool is_free_trial_account = 13;
+ optional uint32 free_trial_expiration = 14;
+ optional bool is_low_violence = 15;
+ optional bool is_account_locked_down = 16;
+ optional bool is_community_banned = 17;
+ optional bool is_trade_banned = 18;
+ optional uint32 trade_ban_expiration = 19;
+ optional uint32 accountid = 20;
+ optional uint32 suspension_end_time = 21;
+ optional string currency = 22;
+ optional uint32 steam_level = 23;
+ optional uint32 friend_count = 24;
+ optional uint32 account_creation_time = 25;
+ optional bool is_steamguard_enabled = 27;
+ optional bool is_phone_verified = 28;
+ optional bool is_two_factor_auth_enabled = 29;
+ optional uint32 two_factor_enabled_time = 30;
+ optional uint32 phone_verification_time = 31;
+ optional uint64 phone_id = 33;
+ optional bool is_phone_identifying = 34;
+}
+
+message CMsgGCGetPersonaNames {
+ repeated fixed64 steamids = 1;
+}
+
+message CMsgGCGetPersonaNames_Response {
+ message PersonaName {
+ optional fixed64 steamid = 1;
+ optional string persona_name = 2;
+ }
+
+ repeated .CMsgGCGetPersonaNames_Response.PersonaName succeeded_lookups = 1;
+ repeated fixed64 failed_lookup_steamids = 2;
+}
+
+message CMsgGCCheckFriendship {
+ optional fixed64 steamid_left = 1;
+ optional fixed64 steamid_right = 2;
+}
+
+message CMsgGCCheckFriendship_Response {
+ optional bool success = 1;
+ optional bool found_friendship = 2;
+}
+
+message CMsgGCMsgMasterSetDirectory {
+ message SubGC {
+ optional uint32 dir_index = 1;
+ optional string name = 2;
+ optional string box = 3;
+ optional string command_line = 4;
+ optional string gc_binary = 5;
+ }
+
+ optional uint32 master_dir_index = 1;
+ repeated .CMsgGCMsgMasterSetDirectory.SubGC dir = 2;
+}
+
+message CMsgGCMsgMasterSetDirectory_Response {
+ optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgGCMsgWebAPIJobRequestForwardResponse {
+ optional uint32 dir_index = 1;
+}
+
+message CGCSystemMsg_GetPurchaseTrust_Request {
+ optional fixed64 steamid = 1;
+}
+
+message CGCSystemMsg_GetPurchaseTrust_Response {
+ optional bool has_prior_purchase_history = 1;
+ optional bool has_no_recent_password_resets = 2;
+ optional bool is_wallet_cash_trusted = 3;
+ optional uint32 time_all_trusted = 4;
+}
+
+message CMsgGCHAccountVacStatusChange {
+ optional fixed64 steam_id = 1;
+ optional uint32 app_id = 2;
+ optional uint32 rtime_vacban_starts = 3;
+ optional bool is_banned_now = 4;
+ optional bool is_banned_future = 5;
+}
+
+message CMsgGCGetPartnerAccountLink {
+ optional fixed64 steamid = 1;
+}
+
+message CMsgGCGetPartnerAccountLink_Response {
+ optional uint32 pwid = 1;
+ optional uint32 nexonid = 2;
+}
+
+message CMsgGCRoutingInfo {
+ enum RoutingMethod {
+ RANDOM = 0;
+ DISCARD = 1;
+ CLIENT_STEAMID = 2;
+ PROTOBUF_FIELD_UINT64 = 3;
+ WEBAPI_PARAM_UINT64 = 4;
+ }
+
+ repeated uint32 dir_index = 1;
+ optional .CMsgGCRoutingInfo.RoutingMethod method = 2 [default = RANDOM];
+ optional .CMsgGCRoutingInfo.RoutingMethod fallback = 3 [default = DISCARD];
+ optional uint32 protobuf_field = 4;
+ optional string webapi_param = 5;
+}
+
+message CMsgGCMsgMasterSetWebAPIRouting {
+ message Entry {
+ optional string interface_name = 1;
+ optional string method_name = 2;
+ optional .CMsgGCRoutingInfo routing = 3;
+ }
+
+ repeated .CMsgGCMsgMasterSetWebAPIRouting.Entry entries = 1;
+}
+
+message CMsgGCMsgMasterSetClientMsgRouting {
+ message Entry {
+ optional uint32 msg_type = 1;
+ optional .CMsgGCRoutingInfo routing = 2;
+ }
+
+ repeated .CMsgGCMsgMasterSetClientMsgRouting.Entry entries = 1;
+}
+
+message CMsgGCMsgMasterSetWebAPIRouting_Response {
+ optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgGCMsgMasterSetClientMsgRouting_Response {
+ optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgGCMsgSetOptions {
+ message MessageRange {
+ required uint32 low = 1;
+ required uint32 high = 2;
+ }
+
+ enum Option {
+ NOTIFY_USER_SESSIONS = 0;
+ NOTIFY_SERVER_SESSIONS = 1;
+ NOTIFY_ACHIEVEMENTS = 2;
+ NOTIFY_VAC_ACTION = 3;
+ }
+
+ repeated .CMsgGCMsgSetOptions.Option options = 1;
+ repeated .CMsgGCMsgSetOptions.MessageRange client_msg_ranges = 2;
+}
+
+message CMsgGCHUpdateSession {
+ message ExtraField {
+ optional string name = 1;
+ optional string value = 2;
+ }
+
+ optional fixed64 steam_id = 1;
+ optional uint32 app_id = 2;
+ optional bool online = 3;
+ optional fixed64 server_steam_id = 4;
+ optional uint32 server_addr = 5;
+ optional uint32 server_port = 6;
+ optional uint32 os_type = 7;
+ optional uint32 client_addr = 8;
+ repeated .CMsgGCHUpdateSession.ExtraField extra_fields = 9;
+}
+
+message CMsgNotificationOfSuspiciousActivity {
+ message MultipleGameInstances {
+ optional uint32 app_instance_count = 1;
+ repeated fixed64 other_steamids = 2;
+ }
+
+ optional fixed64 steamid = 1;
+ optional uint32 appid = 2;
+ optional .CMsgNotificationOfSuspiciousActivity.MultipleGameInstances multiple_instances = 3;
+}
+
+++ /dev/null
-i
-Deah im the shit i should put febreeze on it
-A
-A
-
+++ /dev/null
-i
-Deah im the fuck i should put febreeze on it
-A
-A
-