From 9780ba40d0eb73c28b06307933dee41c874ea913 Mon Sep 17 00:00:00 2001 From: Saul Rennison Date: Thu, 30 Jan 2025 19:32:56 +0000 Subject: [PATCH 1/3] Update to CS2 schema v14065 --- RELEASE_NOTES.md | 4 + demos/14065.dem | Bin 0 -> 321484 bytes .../Protobufs/base_gcmessages_csgo.proto | 2 +- .../Protobufs/c_peer2peer_netmessages.proto | 4 +- .../Protobufs/clientmessages.proto | 2 +- .../connectionless_netmessages.proto | 2 +- .../Protobufs/cs_gameevents.proto | 2 +- .../Protobufs/cs_usercmd.proto | 23 +- .../Protobufs/cstrike15_gcmessages.proto | 71 ++- .../Protobufs/cstrike15_usermessages.proto | 20 +- src/DemoFile.Game.Cs/Protobufs/demo.proto | 17 +- .../Protobufs/econ_gcmessages.proto | 15 +- .../Protobufs/engine_gcmessages.proto | 2 +- .../Protobufs/enums_clientserver.proto | 62 +- src/DemoFile.Game.Cs/Protobufs/fatdemo.proto | 2 +- .../Protobufs/gameevents.proto | 2 +- .../Protobufs/gcsdk_gcmessages.proto | 2 +- .../Protobufs/gcsystemmsgs.proto | 2 +- .../Protobufs/netmessages.proto | 113 +++- .../Protobufs/network_connection.proto | 6 +- .../Protobufs/networkbasetypes.proto | 13 +- .../networksystem_protomessages.proto | 4 +- src/DemoFile.Game.Cs/Protobufs/normalise.ps1 | 0 .../steamdatagram_messages_auth.proto | 2 +- .../steamdatagram_messages_sdr.proto | 15 +- .../Protobufs/steammessages.proto | 577 +----------------- .../Protobufs/steammessages_base.proto | 33 +- .../steammessages_cloud.steamworkssdk.proto | 2 +- .../steammessages_gamenetworkingui.proto | 2 +- ...ammessages_helprequest.steamworkssdk.proto | 2 +- .../steammessages_oauth.steamworkssdk.proto | 2 +- .../steammessages_player.steamworkssdk.proto | 2 +- ...messages_publishedfile.steamworkssdk.proto | 2 +- ...eammessages_steamlearn.steamworkssdk.proto | 2 +- ...mmessages_unified_base.steamworkssdk.proto | 2 +- .../steamnetworkingsockets_messages.proto | 2 +- ...teamnetworkingsockets_messages_certs.proto | 2 +- .../steamnetworkingsockets_messages_udp.proto | 2 +- src/DemoFile.Game.Cs/Protobufs/te.proto | 5 +- .../Protobufs/uifontfile_format.proto | 2 +- src/DemoFile.Game.Cs/Protobufs/usercmd.proto | 4 +- .../Protobufs/usermessages.proto | 27 +- .../Protobufs/valveextensions.proto | 2 +- src/DemoFile.Game.Cs/Schema/!GlobalTypes.json | 90 ++- src/DemoFile.Game.Cs/Schema/client.json | 249 ++++++-- src/DemoFile.Game.Cs/Schema/server.json | 233 ++++--- src/DemoFile.Game.Cs/Sdk/Schema.cs | 175 ++++-- src/DemoFile.Test/GlobalUtil.cs | 2 + .../Integration/DemoParserIntegrationTest.cs | 1 + version.json | 2 +- 50 files changed, 969 insertions(+), 842 deletions(-) create mode 100644 demos/14065.dem create mode 100644 src/DemoFile.Game.Cs/Protobufs/normalise.ps1 diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ef2cd29..99e7d21 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,7 @@ +### 0.28.1 (2025-01-30) + +- Update to latest CS2 schema (v14065) + ### 0.27.1 (2024-11-02) - BREAKING CHANGE: Exceptions when fetching data from the broadcast server are now immediately propagated to `MoveNextAsync`. You must handle retries and rate limiting in your `HttpClient`, e.g. by using `RetryingBroadcastHttpHandler` diff --git a/demos/14065.dem b/demos/14065.dem new file mode 100644 index 0000000000000000000000000000000000000000..6a2f34f096e3fe6f9a70c37a83eb83794e525f38 GIT binary patch literal 321484 zcmYIw30xD`^Z47{T#yhpoZ(QHLyROqID~Mh%OPSxjoMl)YJ(i21VynnipO$!0X7g3 z5Uo+PML7(jNVpn6DI(B-)uK`wE2Y!|rGEXjSgiaXet*BuKeBI+H#=|Mym>S8=FKV% z30tvxgBNJ|l?Jr%KxX03^Z{bblKyWE{%4An@d=;q`YbuY>*LUX&CF==E~UA)U?fU zyHiqj@7f%?`?Fp9685@nfM}Bwh?Vl)+hXO!+Qh_!U1>Y^Cv4sxo070OE^Yg62}&Xn z$a?SzXMe1Gf5NBnu+>k!wmC}@{Nw#RW4F19ePTV`eB#8OZrir`db-8NB__ltc=^SN zeSDMtUaKhNvfg)zX-mHgLat!{z2n+)9y$x`l|_fOkE)CMBi@5tkycAzM?2YGm!8iP z1f4I^7Tv#^-*&$!KPUfEQ7}zLqiAZD4veul1c8wBRL2Ijp4{kb)yY`&v9Fcyv5kya zJBkO)C`W*)UsQ{iAxkR6T1~w_Rqd8n6Xoufmok}CCAUu{uU6-|=S?J>uBpm1ap}BQ z=T6d+#VSq zR&VpzJHC1sXCh&jeX3r%LiW?JAwu@k{O4UEUQwr`#@(V$k0*$R)OvlU?C($QseW)` zo2jRq%XQ1kpImsJ(#zUqvlrK#b);l}UmVt*ko|FSSaw48>&0R4K=#wczQyjJ<6kZVn`FUcR0_@ zgjvSS8}rY}iTv?jCMV{Fu9VF_HTyvJ_gwME)7P+5Gr|rU1wr!M$?aHyiZ_aFLBlRuk z+bDh0l}#DJdhOihot{k@8U4Y|k*e}^o|MeoQ=81513p`zguuf}2>ew)fn*(uOD|8a zE3->i*@ddeV14jr1GysiO{OY+1H>+Lnz^is%!*^Du~iSnDET2?mdc(gRCE43mGS0O zKM2>)F3`;*5M@8f(qACjsB3RBpJNhzcR6mL8i{DokKA~v(j~s$2 zZGn!ZS2-ZM0s_$&5IprGDop>!PhizlVZRK6sCeKB$=2IBAXB!N==x0r@@HYeo6LR# zQ~xo%K6UNQsVDHwB7&#;2|n9Ev`xW!+gMD`b6EF$rT(V{z=kwyGu3Y))`2H#x<1AM zQO=!99r`H~h=WHMEBj>}{YS()-A}N^4Gz2)M*4LGPiCGGrvL6eB{tZ4f=5|6AdrrA z5Z9);yHMKP+cNXmxp#S_89c*xVNc<^Ar=`QI;?XzNAMiYuPO;%JO7sf*zb%tg-?Fg zLzY~7WA>sHB8h*&loGCSn3Np&Ss(jwTM@C&uqYJ8byh1LlOa^bjxaWuGJCNpcs(`% z+jw?G?-1*3j5}n6$k}P3Y`Yk{%5qgAsh@qU3D*BRtkewzpAQuZ%T?)iG3lEw=}9;) z))XRrs7Cc$3_$wK0Q52N{4i|gKyY>(yR2NOO7Ewn4m9OMkfr~(_?ep0&lGQnHBV)x z@}xKtm$*vTpK&GdUx!{_eF;IGd{JBLR)_1nPy&n!GMJLAFr?-IdZeMw+{ z-%jvXuN?d}{&cvjdk`>umStD~OWnz9`Doa=XZBl4o<)~N4{o-JITvG-ZOi~HU<{%t zu6niDwD~)EDyX@e&4ds2mMqHAiRi!pa28}xOp6oSj57cEqpi^d%>86OK41p|1ap_h zHFBt?Cs%VxDm)ncy9H?YHulu=|70yXCl`Uy{0n;^6bVfSGdL&+45@|6hw!GYx#`C1 zRj}qLJlbin0Q=}Dn4Xl*9w6DboNPr1&z$C*21Q;2zw&Mi~OhK1-yaqb1!!syY=m(lSSR) zce8%1DZoJi7&8YtFxPQlU}}^EAm>2gAM=a`l83;Sqv-yN>=-05KZ?!*!2M|k2FUCk z*X*)0;57=bli)Sr0Kh^m_%9joZHN{i$e#=L8KiF!0N&E$!y3fk1Ra8KzGcYPI?*Fs z?AU-h5VzeP7^6hn;~_|6u&JpjYHHhokNSHA`6|Tys z>zZr5xsW(81}Rn_XR>tj#cb*g96yq^7&1&pk$UWG4I~KGGa=SFUeKu5w6Q4Vr#QXY zoJ5w-LuhXiBNN)&3?tT;2%s5E%dR1VH+_}&J5ky2pbe9vfaEn~0#3V&DUCOp5btJZ z7q9>YQOz-ik)4Sz`>)g-mG06z+mL`X)QC8fy%WN5E~HLP6=p(GP;4`Zr`CjmGf%z; zJ->Vn?#IU=K)icA4m^`VezO*o`0ejR21__V?mT}mB1r#U z7EDaxbYO$@jm8KS93jTQmJE_|>@Wo=N!rb4@gXut29Pd>V>thq&R~WD@#3?V`{#do z!)H}U1nmdq(5p)r#(~vND3C4Q>bZY@=ZBxK3IUAFL#)pMvl(Aw8zw*j?s{zJ=kwQ` z>0NXA5bN(bX^r*v0&!MMuP4!<$1d;%z;SRKcHJ~nq0pJGTYTvvqz_B^*d5Nxb&M=2 zj$Z4_0R)_~Lq$1lE!x8ua%!*E=G=#%8&S}0>iIeMfNx=Zu@NM~2;H(wp59J>K z&AwHPAoCL};_0~=C_=3E=Lm}ajEZ3krh-e;=5un+A=-lB^gn-4;68lqM3bFib~j5W z(GlDCANqmKy2hfw^Jns>i&JHp2m(0dNmCS{haW27dvo3+QwisK32b7c)QjjRNHGDBUTL$U9gHw?BU?9*Bm_Q`41VOxuYzPki zm;iuOi#6XwoM5q1W5JX$>_XvvSa6i#j<8PW01WH4L84>d&PmD;NB8|UsGIgX`&m2F zWV?F*g->bEr+^_N1i1o9V4|b}3@iZP@t*r{e(jlj%bT5D#FG9StY*`1837p}FGWh( zG@RBH+eyohco0mL*R@D1yae(M@Hght+m8glmyS zsxf1@NP?Q($Zj)>bi@!Ki&)%&0Fo5jtRXWHE{6#+F~n^R0;GfPE}3g=Kqdl^0GuSr zx6FC2;OIOKg3yj42;(3e3N*LvB$Bjkp>vy66hTK>XoxzkG+pmQo5lc0J+Xie)IuDP z8GaXEsXEKWR^QGmK0b(~; z13LeCE*M}krFUTK?+(G&96;vb|J)+VDWr#jnv(qU19HE!8{~#WeLN8mVkznCLaxJ= zQv`|r8N7}%=w@f>(N}IQm*hPmA!UpRcrD0#63QY;UxwPy?FT>{=9}4eW*cjvk#0E! zNW$TMPOyzDE%+-8gi>}~oRE2nLEJwAa!zHC+r;Z|%BX&Hj*X`j3hJz(gxyeN>(1&CKGGeJ1YU251yBTC`804E}{9m8* zK}M?1l5fZihYJ2Ye-u=hF#yRm16@`FP;2Wg1T6lPgFV1y7(%1nJ*vNiP5sb@q79mB!Ydx>6<=QO7o-;GpBuyRjyvA;ILeFUtW2q#egFBNR3U;HqJvDfm1W0MT(M zdephn(nBF*X@5C4<0UZA{k7;He(;7QkMSpr2I_}1ux4B2g+mV@Ow482Joj1U>n2P_B;E2VIPz)1~>otxZi z1QZoY0=d|`V>$6{f;cG1S)G9xQ#3~+gB$);-t|J|^%JdM8M-^i+Q+(E)g#?q1D#_7 z!$YG4d2cx&;dp}%Q!WLL3dOv=#G5((DIYwXPN*gsI#9E`2kz#!?1p$>L z$UvZC#HG%2Lel|3-#sh{rIzdaNgS$pTqd&yB=&Z8G&Fhlm#3jPfOpC^6nU4Fm^cq0 zn2)#jyOPqg&MTXlH2}IMWu4XHJkTDT|NjKQdZW1zn)Of^60m zy(wyKgKV>A$qrFu-}rP5Gb({b4*uEw%9IwQ+kikeT9B*egQQwDON3dd{~cOBi>P&^ zfg)4+;5E7SuZ(Xxj-ht1smv^vdYw$!mn(Cf`oaLO32L*+r|VmcWlE!ynSd7mh5=}U zsi_Vfi`18?j^0e#N=$Tgp|e&DDxjM(=iuX{$Yqpas9`Wu2czelbr3TsaFJV>12eQi z_7(OCdcx6uKFO8|#d3*p^LMdq8X(aimXwBapp3ux>wm`kkKL=-WIR6)gHkl>M8n_B zGXFIKZ{PoYZvg0N{)&I*LBA|Di8N=iPB2MJ+>SgHybbJ9EM;+6bcaLG zf7aZ!%)CpWCL{&T>XuFXp|WQm+ntA+AOcxPhr&T;DEcF$9|r^GyRu8jw3nZ>rTF*^ zs>eD)XNq}75p#TJt;hzXQC8Lroby~`6eEF74PjR1k3!E&4OEY2&{MsGK)%VY3p$^g zuo*Oj1e>9XVg3BP*8Xk|?Z}*-{E&6!STV-NLV{Trp-e;X;bLe;NUFIF0m#&ktr&lg z{$;tJ2_1PUxhfa{Sq8EuBTev8FgT%0O$DtSlS4O;O`w3Z2lv*U`RXDfJ)*VJ0aFJm zvpp0vuvS8g#01K4-SW`ho}Si@2N-m*6ZdV&|Mz0}T9kP--rE~&XB@|WLRkl8ir4O! zERj{I?&zBzb2?UKh9+Rp$;+&OwTR$6{U>x?K~c_y+9D{p7Swt;m7-;2#ihIJLqY&s zQ)*Aeoct9zhsos>?Z<&RZ=OpX0}7$W+1o zshW8V`YBu&ce2%$P~3QRYPexHR-J7t*-69EZ(y&n zIB&8gvUIb>Cu`VSJ}H$-BhL;=&u@&hFE|@zL1CYvcXyMR>wJn@IizrU?H=@WqM{wcCA-+r#P!I>n>}qnBJkZm91Zn`-2)CllTzz@ z0H~J@pR-;~brjRss7p2qlJ-(SMg-&53=(=?0n4HbSjbS4!PUMQ#k?w@u;L3&2Y5U{ zF9tA@pzlEdT<|e^E2|5$Bv4~VG~O17FmPr&aD*HiN(bk$BdA<{5Evh08|R@Q-W}L( z;~5x)9Il&4$a6=iy2M}+G#(^jERj%@Iuyl%)~W*T;?Q;(vy4%`?tcV5)dSdO_=drf zWtN00P_!9`4K$PBtr(sUNdbx;5`eb^fI!XB6t+eJpPU!K!ch#5Xp|F90$Vh@B7~$x zI-)3nvK-OPd=S!xV(?Wd6pJKk<+t!D4&UPg$D~k{HY5P&6{ImpU18)3VI5INK>)sU z5JdyT#%MDEkq1Z|Pi%&i@Hb0g5F#Me6-5OhIvYw#*&~w7A5lPSmViU4G*1Lg&4>g7 zIwaDO2+`TYMjd5fA=s8FgoKlA^U%!_5^*+p3p+u=mQd-Oiyra;T#%tsY6BV??1VN; z$lQ~~d~yX_?1-|an6K2ZA5+XxbrFbr(i|TSM%*(1F%^3M)553b>_l8fju_(v1>>qxSb1oP<0+mI*A7JB0ZG5@)6ssw11JF96FvtH7K-A08bDbRu=qpVtWgXF z3Ip~VEpcc-<^@?ovJIw=762IYSq2X;q8U0}RJ<23{tCJ{2-M<%B~|dz3HH<`gP{2b zlw}ryTA(Zzk!eOi*> z&?7wP7^2*_81O=kZ(fDcC0k-n?#_)RVckKJQ$PAIF zdrJ}X=Yx&F92D7zj~Zwh%c-zxXmrTz)sGPdcyJ#%(SDNoFAbHC%PZ_M2w4PmZz_wi zD<`xigrrPyFt1GKr4!{>NB#Os!rB`7Wc8X|Rq~oYa@<6JRG*%_%3z^8^F|-ISC3D! z-FvF@dhc;> z9m6s^0EgYp2+Zbw5|G1{facT|^ytkk$bZ&JW_KF@fS7!K1nKXIddK1`2#N7^C~jit z@(eEf8B;pJplC`wf`e(cqfZYC){7ibkED}KF zXFQeg3SB=~l2wL=8GjN@lH_3$un}`Bl{cpOs|54eps|N*$sL-z2T)6Q7{}E;7Cmfx z2#&+P)2)4U`=<8kqHt##9*mfi5vc8W*=TE1Z=G@sf&E4-EfJhpTD>rc&JBxRjp)co zouciG6ujQqD z)M&21$ns7E@WW0a{~$UZ0;YZc1D(2QHqSN@0gJgjgg#(T8a|qOLjW4xj!rj%<7>q9 zf>DCkfaz`q!=z$_d#HWlCI0c3Q*ArHDxp(6#y#o;fw!}J4b$^A&d-g>J(rJ&OSbU8D%=cNGp^8 zz@w4stUV~h8A>SoHTk`dZzje=+hRc?-7Us+BeVCyMy5UJGX3JH-8q{hk6tgN?qpod zaDmsX@gj=G3Bv6uYQb|r^4USAb8%tt(+PmS&0ytZLu0I@x4<@V8z?shDv3jgg$;6C zmz~eW0a0p6WmD7vDl0oDn>yqEW!TnGl6=lG5mWbcdT{>VUqSEP&P>cKJIew!c>#L@ z)r-8>YhI8E)iF*BZ=;(;G1q2w4AR@YgTa!I+Gr+pAZ^OMX!>%}&fmsxGz_3Rb!ZrB zMvGcI)*qTdD?t#rF#w26kariwGH4Wb3SGKtE-s&{-HRP1NDkM1e)cDye)jF|(Uge< z)9G0|RLlikFeV7qJdBvK%(zu>+63S*cxjBo1trVK7zI*eP5|^Gp_+#geJM+anVki1 z&AG0)BO38G_SB(&5J0g|F9|fvD9WF+R&#cDTlzdBN64sK8sJEVyh(W@0GTVyLYjow zAp(TFISN9)J$BCv6@QO|oh8i?(EftA=@MJ1W2z%=j6xHPqPEd;9QwnY)Ol~Molz17 z4(d~nkb3%jz_;pgwDMU7eACKdEIz4rC+Ybl8ZM%wxGpn4wv=^<806oqmE!AoAS>U& z_w1avHOG_aDI_tjq1N}9jA0Sbpul$?el+i!(mS_{ml|e&!YNNctc1M4NhK6EWva{) zNc9;6Af%KIj+e6(#?;oy^pIT}bR-~f3I#u@X;WWk0h~v@I==YTZ*WYYTTZM%aZ1%u zfzmUe)72);Le9XoPYxYN%qSfCVFvgDjKr+Fi!uzMhyg>S^pI~EZ~1sI4}z`LB$5ZGY=pc>7M)=$F) zmDqGW_z*0rpc%8}JGLk7OWSt<=4ap}9}sY(OAG>z({waR79zNXh!})bO3E&nqCv-K zyLKaN+O9naV=5e|kcibKgZxdUPi#Ip_tZ9~?3vx>^F#JqF8nxe>z7;S4`0|a@5l3- z?T5-@?4F(b#P(_FCYvWE(R^JZSTpb#{;cMHk1dV)RxZBb8x!}NF!>CzEwwr(+7cb) z>vn<q990oDy(Db5@kRRK@#JE9D*b! z0XYOolmj^gNlb-xOkI);I$8uGMb3|z3W)D}Vfu@n9RNC$}s5HYBv2dxJiO3rWI z`eBe`STIW)gi>;F@DiD7*%`iFLvvK*NE1be%X!JKyLkzFF;7#70XPdK)1lYvhz>&Oou|K;+L?_Vw}H@a*O zb5!Gn@nP-1n`uh;a{{3$u>rZ4;K>%`*20q=$Zdlsd!Wid#HD&pt=N4wm?-2 zPj*1n22b{&ECbO%kTQq`g22d(27;79ED)p&Vu2v#5X(6}D2G_i*?@A0<(w@jhgi

8W1jxaY?% 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⩔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 literal 0 HcmV?d00001 diff --git a/src/DemoFile.Game.Cs/Protobufs/base_gcmessages_csgo.proto b/src/DemoFile.Game.Cs/Protobufs/base_gcmessages_csgo.proto index 2173f25..4f60796 100644 --- a/src/DemoFile.Game.Cs/Protobufs/base_gcmessages_csgo.proto +++ b/src/DemoFile.Game.Cs/Protobufs/base_gcmessages_csgo.proto @@ -1,4 +1,4 @@ -import "steammessages.proto"; +import "steammessages.proto"; enum EGCBaseMsg { k_EMsgGCSystemMessage = 4001; diff --git a/src/DemoFile.Game.Cs/Protobufs/c_peer2peer_netmessages.proto b/src/DemoFile.Game.Cs/Protobufs/c_peer2peer_netmessages.proto index 9c869f2..ca4fc3d 100644 --- a/src/DemoFile.Game.Cs/Protobufs/c_peer2peer_netmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/c_peer2peer_netmessages.proto @@ -1,4 +1,4 @@ -import "netmessages.proto"; +import "netmessages.proto"; import "networkbasetypes.proto"; enum P2P_Messages { @@ -7,6 +7,8 @@ enum P2P_Messages { p2p_Ping = 258; p2p_VRAvatarPosition = 259; p2p_WatchSynchronization = 260; + p2p_FightingGame_GameData = 261; + p2p_FightingGame_Connection = 262; } message CP2P_TextMessage { diff --git a/src/DemoFile.Game.Cs/Protobufs/clientmessages.proto b/src/DemoFile.Game.Cs/Protobufs/clientmessages.proto index 484ae57..789d541 100644 --- a/src/DemoFile.Game.Cs/Protobufs/clientmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/clientmessages.proto @@ -1,4 +1,4 @@ -enum EBaseClientMessages { +enum EBaseClientMessages { CM_CustomGameEvent = 280; CM_CustomGameEventBounce = 281; CM_ClientUIEvent = 282; diff --git a/src/DemoFile.Game.Cs/Protobufs/connectionless_netmessages.proto b/src/DemoFile.Game.Cs/Protobufs/connectionless_netmessages.proto index 10f7a9e..be26b48 100644 --- a/src/DemoFile.Game.Cs/Protobufs/connectionless_netmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/connectionless_netmessages.proto @@ -1,4 +1,4 @@ -import "netmessages.proto"; +import "netmessages.proto"; message C2S_CONNECT_Message { optional uint32 host_version = 1; diff --git a/src/DemoFile.Game.Cs/Protobufs/cs_gameevents.proto b/src/DemoFile.Game.Cs/Protobufs/cs_gameevents.proto index e7f64d8..8fa8549 100644 --- a/src/DemoFile.Game.Cs/Protobufs/cs_gameevents.proto +++ b/src/DemoFile.Game.Cs/Protobufs/cs_gameevents.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; diff --git a/src/DemoFile.Game.Cs/Protobufs/cs_usercmd.proto b/src/DemoFile.Game.Cs/Protobufs/cs_usercmd.proto index 223a4f7..b853080 100644 --- a/src/DemoFile.Game.Cs/Protobufs/cs_usercmd.proto +++ b/src/DemoFile.Game.Cs/Protobufs/cs_usercmd.proto @@ -1,4 +1,4 @@ -import "networkbasetypes.proto"; +import "networkbasetypes.proto"; import "usercmd.proto"; message CSGOInterpolationInfoPB { @@ -7,22 +7,26 @@ message CSGOInterpolationInfoPB { optional float frac = 3 [default = 0]; } +message CSGOInterpolationInfoPB_CL { + optional float frac = 3 [default = 0]; +} + message CSGOInputHistoryEntryPB { optional .CMsgQAngle view_angles = 2; optional int32 render_tick_count = 4; optional float render_tick_fraction = 5; optional int32 player_tick_count = 6; optional float player_tick_fraction = 7; - optional .CSGOInterpolationInfoPB cl_interp = 12; + optional .CSGOInterpolationInfoPB_CL cl_interp = 12; optional .CSGOInterpolationInfoPB sv_interp0 = 13; optional .CSGOInterpolationInfoPB sv_interp1 = 14; optional .CSGOInterpolationInfoPB player_interp = 15; - optional int32 frame_number = 20; - optional int32 target_ent_index = 8 [default = -1]; - optional .CMsgVector shoot_position = 3; - optional .CMsgVector target_head_pos_check = 9; - optional .CMsgVector target_abs_pos_check = 10; - optional .CMsgQAngle target_abs_ang_check = 11; + optional int32 frame_number = 64; + optional int32 target_ent_index = 65 [default = -1]; + optional .CMsgVector shoot_position = 66; + optional .CMsgVector target_head_pos_check = 67; + optional .CMsgVector target_abs_pos_check = 68; + optional .CMsgQAngle target_abs_ang_check = 69; } message CSGOUserCmdPB { @@ -32,4 +36,7 @@ message CSGOUserCmdPB { optional int32 attack2_start_history_index = 7 [default = -1]; optional int32 attack3_start_history_index = 8 [default = -1]; optional bool left_hand_desired = 9 [default = false]; + optional bool is_predicting_body_shot_fx = 11 [default = false]; + optional bool is_predicting_head_shot_fx = 12 [default = false]; + optional bool is_predicting_kill_ragdolls = 13 [default = false]; } diff --git a/src/DemoFile.Game.Cs/Protobufs/cstrike15_gcmessages.proto b/src/DemoFile.Game.Cs/Protobufs/cstrike15_gcmessages.proto index 6cc17e0..0171220 100644 --- a/src/DemoFile.Game.Cs/Protobufs/cstrike15_gcmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/cstrike15_gcmessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "steammessages.proto"; import "engine_gcmessages.proto"; @@ -107,6 +107,10 @@ enum ECsgoGCMsg { k_EMsgGCCStrike15_v2_SetPlayerLeaderboardSafeName = 9218; k_EMsgGCCStrike15_v2_ClientRedeemFreeReward = 9219; k_EMsgGCCStrike15_v2_ClientNetworkConfig = 9220; + k_EMsgGCCStrike15_v2_GC2ClientNotifyXPShop = 9221; + k_EMsgGCCStrike15_v2_Client2GcAckXPShopTracks = 9222; + k_EMsgGCCStrike15_v2_MatchmakingGC2ClientSearchStats = 9223; + k_EMsgGCCStrike15_v2_PremierSeasonSummary = 9224; } enum ECsgoSteamUserStat { @@ -242,6 +246,7 @@ message PlayerRankingInfo { optional uint32 rank_if_tie = 12; repeated .PlayerRankingInfo.PerMapRank per_map_rank = 13; optional uint32 leaderboard_name_status = 14; + optional uint32 highest_rank = 15; } message PlayerCommendationInfo { @@ -406,6 +411,7 @@ message CMsgGC_ServerQuestUpdateData { optional bytes binary_data = 2; optional uint32 mm_game_mode = 3; optional .ScoreLeaderboardData missionlbsdata = 4; + optional uint32 flags = 5; } message CMsgGCCStrike15_v2_MatchmakingGC2ServerConfirm { @@ -535,6 +541,7 @@ message CMsgGCCStrike15_v2_MatchmakingGC2ServerReserve { optional uint32 tv_control = 17; repeated .OperationalVarValue op_var_values = 19; optional uint32 socache_control = 20; + repeated int32 teammate_colors = 21; } message CMsgGCCStrike15_v2_MatchmakingServerReservationResponse { @@ -819,6 +826,35 @@ message CMsgGCCStrike15_v2_PlayersProfile { repeated .CMsgGCCStrike15_v2_MatchmakingGC2ClientHello account_profiles = 2; } +message CMsgGCCStrike15_v2_PremierSeasonSummary { + message DataPerWeek { + optional uint64 week_id = 1; + optional uint32 rank_id = 2; + optional uint32 matches_played = 3; + } + + message DataPerMap { + optional uint32 map_id = 1; + optional uint32 wins = 2; + optional uint32 ties = 3; + optional uint32 losses = 4; + optional uint32 rounds = 5; + optional uint32 kills = 6; + optional uint32 headshots = 7; + optional uint32 assists = 8; + optional uint32 deaths = 9; + optional uint32 mvps = 10; + optional uint32 rounds_3k = 11; + optional uint32 rounds_4k = 12; + optional uint32 rounds_5k = 13; + } + + optional uint32 account_id = 1; + optional uint32 season_id = 2; + repeated .CMsgGCCStrike15_v2_PremierSeasonSummary.DataPerWeek data_per_week = 3; + repeated .CMsgGCCStrike15_v2_PremierSeasonSummary.DataPerMap data_per_map = 4; +} + message CMsgGCCStrike15_v2_PlayerOverwatchCaseUpdate { optional uint64 caseid = 1; optional uint32 suspectid = 3; @@ -880,6 +916,8 @@ message CEconItemPreviewDataBlock { optional uint32 tint_id = 6; optional float offset_x = 7; optional float offset_y = 8; + optional float offset_z = 9; + optional uint32 pattern = 10; } optional uint32 accountid = 1; @@ -901,6 +939,7 @@ message CEconItemPreviewDataBlock { optional uint32 musicindex = 17; optional int32 entindex = 18; optional uint32 petindex = 19; + repeated .CEconItemPreviewDataBlock.Sticker keychains = 20; } message CMsgGCCStrike15_v2_MatchEndRewardDropsNotification { @@ -1119,11 +1158,21 @@ message CSOEconCoupon { } message CSOAccountItemPersonalStore { - optional uint32 generation_time = 1 [(key_field) = true]; + optional uint32 generation_time = 1; optional uint32 redeemable_balance = 2; repeated uint64 items = 3; } +message CSOAccountXpShop { + optional uint32 generation_time = 1; + optional uint32 redeemable_balance = 2; + repeated uint32 xp_tracks = 3; +} + +message CSOAccountKeychainRemoveToolCharges { + optional uint32 charges = 1; +} + message CSOQuestProgress { optional uint32 questid = 1 [(key_field) = true]; optional uint32 points_remaining = 2; @@ -1153,6 +1202,24 @@ message CSOPersonaDataPublic { optional uint32 xp_trail_level = 5; } +message CMsgGCCStrike15_v2_GC2ClientNotifyXPShop { + optional .CSOAccountXpShop prematch = 1; + optional .CSOAccountXpShop postmatch = 2; + optional uint32 current_xp = 3; + optional uint32 current_level = 4; +} + +message CMsgGCCStrike15_v2_Client2GcAckXPShopTracks { +} + +message CMsgGCCStrike15_v2_MatchmakingGC2ClientSearchStats { + optional uint32 gs_location_id = 1; + optional uint32 data_center_id = 2; + optional uint32 num_locked_in = 3; + optional uint32 num_found_nearby = 4; + optional uint32 note_level = 5; +} + message CMsgGC_GlobalGame_Subscribe { optional uint64 ticket = 1; } diff --git a/src/DemoFile.Game.Cs/Protobufs/cstrike15_usermessages.proto b/src/DemoFile.Game.Cs/Protobufs/cstrike15_usermessages.proto index 11c667d..702bc9c 100644 --- a/src/DemoFile.Game.Cs/Protobufs/cstrike15_usermessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/cstrike15_usermessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; import "cstrike15_gcmessages.proto"; @@ -79,6 +79,8 @@ enum ECstrike15UserMessages { CS_UM_CurrentRoundOdds = 380; CS_UM_DeepStats = 381; CS_UM_ShootInfo = 383; + CS_UM_CounterStrafe = 385; + CS_UM_DamagePrediction = 386; } enum ECSUsrMsg_DisconnectToLobby_Action { @@ -595,3 +597,19 @@ message CCSUsrMsgPreMatchSayText { optional string text = 2; optional bool all_chat = 3; } + +message CCSUsrMsg_CounterStrafe { + optional int32 press_to_release_ns = 1; + optional int32 total_keys_down = 2; +} + +message CCSUsrMsg_DamagePrediction { + optional int32 command_num = 1; + optional int32 pellet_idx = 2; + optional int32 victim_slot = 3; + optional int32 victim_starting_health = 4; + optional int32 victim_damage = 5; + optional .CMsgVector shoot_pos = 6; + optional .CMsgQAngle shoot_dir = 7; + optional .CMsgQAngle aim_punch = 8; +} diff --git a/src/DemoFile.Game.Cs/Protobufs/demo.proto b/src/DemoFile.Game.Cs/Protobufs/demo.proto index f57f7a7..a58617a 100644 --- a/src/DemoFile.Game.Cs/Protobufs/demo.proto +++ b/src/DemoFile.Game.Cs/Protobufs/demo.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; enum EDemoCommands { DEM_Error = -1; @@ -20,7 +20,8 @@ enum EDemoCommands { DEM_SpawnGroups = 15; DEM_AnimationData = 16; DEM_AnimationHeader = 17; - DEM_Max = 18; + DEM_Recovery = 18; + DEM_Max = 19; DEM_IsCompressed = 64; } @@ -55,7 +56,7 @@ message CGameInfo { message CHeroSelectEvent { optional bool is_pick = 1; optional uint32 team = 2; - optional uint32 hero_id = 3; + optional int32 hero_id = 3; } optional uint64 match_id = 1; @@ -173,3 +174,13 @@ message CDemoUserCmd { message CDemoSpawnGroups { repeated bytes msgs = 3; } + +message CDemoRecovery { + message DemoInitialSpawnGroupEntry { + optional uint32 spawngrouphandle = 1; + optional bool was_created = 2; + } + + optional .CDemoRecovery.DemoInitialSpawnGroupEntry initial_spawn_group = 1; + optional bytes spawn_group_message = 2; +} diff --git a/src/DemoFile.Game.Cs/Protobufs/econ_gcmessages.proto b/src/DemoFile.Game.Cs/Protobufs/econ_gcmessages.proto index 039c01c..f8a3dbd 100644 --- a/src/DemoFile.Game.Cs/Protobufs/econ_gcmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/econ_gcmessages.proto @@ -1,4 +1,4 @@ -import "steammessages.proto"; +import "steammessages.proto"; enum EGCItemMsg { k_EMsgGCBase = 1000; @@ -114,6 +114,7 @@ enum EGCItemMsg { k_EMsgGCDev_NewItemRequest = 2001; k_EMsgGCDev_NewItemRequestResponse = 2002; k_EMsgGCDev_PaintKitDropItem = 2003; + k_EMsgGCDev_SchemaReservationRequest = 2004; k_EMsgGCStoreGetUserData = 2500; k_EMsgGCStoreGetUserDataResponse = 2501; k_EMsgGCStorePurchaseInit_DEPRECATED = 2502; @@ -191,12 +192,16 @@ enum EGCItemCustomizationNotification { k_EGCItemCustomizationNotification_StatTrakSwap = 1088; k_EGCItemCustomizationNotification_RemovePatch = 1089; k_EGCItemCustomizationNotification_ApplyPatch = 1090; + k_EGCItemCustomizationNotification_ApplyKeychain = 1091; + k_EGCItemCustomizationNotification_RemoveKeychain = 1092; k_EGCItemCustomizationNotification_ActivateFanToken = 9178; k_EGCItemCustomizationNotification_ActivateOperationCoin = 9179; k_EGCItemCustomizationNotification_GraffitiUnseal = 9185; k_EGCItemCustomizationNotification_GenerateSouvenir = 9204; k_EGCItemCustomizationNotification_ClientRedeemMissionReward = 9209; k_EGCItemCustomizationNotification_ClientRedeemFreeReward = 9219; + k_EGCItemCustomizationNotification_XpShopUseTicket = 9221; + k_EGCItemCustomizationNotification_XpShopAckTracks = 9222; } message CMsgGCGiftedItems { @@ -207,6 +212,13 @@ message CMsgGCGiftedItems { repeated uint32 recipients_accountids = 5; } +message CMsgGCDev_SchemaReservationRequest { + optional string schema_typename = 1; + optional string instance_name = 2; + optional uint64 context = 3; + optional uint64 id = 4; +} + message CMsgCasketItem { optional uint64 casket_item_id = 1; optional uint64 item_item_id = 2; @@ -219,4 +231,5 @@ message CMsgGCUserTrackTimePlayedConsecutively { message CMsgGCItemCustomizationNotification { repeated uint64 item_id = 1; optional uint32 request = 2; + repeated uint64 extra_data = 3; } diff --git a/src/DemoFile.Game.Cs/Protobufs/engine_gcmessages.proto b/src/DemoFile.Game.Cs/Protobufs/engine_gcmessages.proto index 0dce47f..7ee7a08 100644 --- a/src/DemoFile.Game.Cs/Protobufs/engine_gcmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/engine_gcmessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "google/protobuf/descriptor.proto"; diff --git a/src/DemoFile.Game.Cs/Protobufs/enums_clientserver.proto b/src/DemoFile.Game.Cs/Protobufs/enums_clientserver.proto index 54bf0f7..5a28178 100644 --- a/src/DemoFile.Game.Cs/Protobufs/enums_clientserver.proto +++ b/src/DemoFile.Game.Cs/Protobufs/enums_clientserver.proto @@ -1,4 +1,4 @@ -option optimize_for = SPEED; +option optimize_for = SPEED; option cc_generic_services = false; enum EMsg { @@ -77,7 +77,6 @@ enum EMsg { k_EMsgLicenseProcessingComplete = 316; k_EMsgSetTestFlag = 317; k_EMsgQueuedEmailsComplete = 318; - k_EMsgGMReportPHPError = 319; k_EMsgGMDRMSync = 320; k_EMsgPhysicalBoxInventory = 321; k_EMsgUpdateConfigFile = 322; @@ -95,6 +94,8 @@ enum EMsg { k_EMsgExpectShellRestart = 336; k_EMsgHotFixProgress = 337; k_EMsgGMStatsForwardToAdminConnections = 338; + k_EMsgGMGetModifiedConVars = 339; + k_EMsgGMGetModifiedConVarsResponse = 340; k_EMsgBaseAIS = 400; k_EMsgAISRequestContentDescription = 402; k_EMsgAISUpdateAppInfo = 403; @@ -503,11 +504,8 @@ enum EMsg { k_EMsgClientDPSendSpecialSurveyResponse = 1622; k_EMsgClientDPSendSpecialSurveyResponseReply = 1623; k_EMsgDPStoreSaleStatistics = 1624; - k_EMsgClientDPUpdateAppJobReport = 1625; - k_EMsgClientDPUnsignedInstallScript = 1627; k_EMsgDPPartnerMicroTxns = 1628; k_EMsgDPPartnerMicroTxnsResponse = 1629; - k_EMsgClientDPContentStatsReport = 1630; k_EMsgDPVRUniquePlayersStat = 1631; k_EMsgBaseCM = 1700; k_EMsgCMSetAllowState = 1701; @@ -553,6 +551,9 @@ enum EMsg { k_EMsgGCHAppCheersReceived = 2242; k_EMsgGCHAppCheersGetAllowedTypes = 2243; k_EMsgGCHAppCheersGetAllowedTypesResponse = 2244; + k_EMsgGCHRoutingRulesFromGCHtoGM = 2245; + k_EMsgGCHRoutingRulesToGCHfromGM = 2246; + k_EMsgUpdateCMMessageRateRules = 2247; k_EMsgBaseP2P = 2500; k_EMsgP2PIntroducerMessage = 2502; k_EMsgBaseSM = 2900; @@ -699,8 +700,6 @@ enum EMsg { k_EMsgAMSendQueuedEmails = 4152; k_EMsgAMSetLicenseFlags = 4153; k_EMsgCommunityDeleteUserNews = 4155; - k_EMsgAMAllowUserFilesRequest = 4156; - k_EMsgAMAllowUserFilesResponse = 4157; k_EMsgAMGetAccountStatus = 4158; k_EMsgAMGetAccountStatusResponse = 4159; k_EMsgAMEditBanReason = 4160; @@ -728,7 +727,6 @@ enum EMsg { k_EMsgAMSupportIsAccountEnabledResponse = 4210; k_EMsgUGSGetUserStats = 4211; k_EMsgAMGSSearch = 4213; - k_EMsgMarketingMessageUpdate = 4216; k_EMsgChatServerRouteFriendMsg = 4219; k_EMsgAMTicketAuthRequestOrResponse = 4220; k_EMsgAMAddFreeLicense = 4224; @@ -755,7 +753,6 @@ enum EMsg { k_EMsgAMCreateFinancialAdjustment = 4265; k_EMsgAMPlayerNicknameList = 4266; k_EMsgAMPlayerNicknameListResponse = 4267; - k_EMsgAMSetDRMTestConfig = 4268; k_EMsgAMGetUserCurrentGameInfo = 4269; k_EMsgAMGetUserCurrentGameInfoResponse = 4270; k_EMsgAMGetGSPlayerList = 4271; @@ -886,6 +883,7 @@ enum EMsg { k_EMsgAMPerfectWorldPaymentResponse = 4422; k_EMsgAMECommPayPayment = 4423; k_EMsgAMECommPayPaymentResponse = 4424; + k_EMsgAMSetRemoteClientID = 4425; k_EMsgBasePSRange = 5000; k_EMsgPSCreateShoppingCart = 5001; k_EMsgPSCreateShoppingCartResponse = 5002; @@ -975,7 +973,6 @@ enum EMsg { k_EMsgClientP2PConnectionFailInfo = 5435; k_EMsgClientGetDepotDecryptionKey = 5438; k_EMsgClientGetDepotDecryptionKeyResponse = 5439; - k_EMsgGSPerformHardwareSurvey = 5440; k_EMsgClientEnableTestLicense = 5443; k_EMsgClientEnableTestLicenseResponse = 5444; k_EMsgClientDisableTestLicense = 5445; @@ -1015,8 +1012,10 @@ enum EMsg { k_EMsgClientOGSEndSession = 5492; k_EMsgClientOGSEndSessionResponse = 5493; k_EMsgClientOGSWriteRow = 5494; - k_EMsgClientDRMTest = 5495; - k_EMsgClientDRMTestResult = 5496; + k_EMsgClientGetPeerContentInfo = 5495; + k_EMsgClientGetPeerContentInfoResponse = 5496; + k_EMsgClientStartPeerContentServer = 5497; + k_EMsgClientStartPeerContentServerResponse = 5498; k_EMsgClientServerUnavailable = 5500; k_EMsgClientServersAvailable = 5501; k_EMsgClientRegisterAuthTicketWithCM = 5502; @@ -1026,7 +1025,6 @@ enum EMsg { k_EMsgClientMicroTxnAuthorizeResponse = 5506; k_EMsgClientGetMicroTxnInfo = 5508; k_EMsgClientGetMicroTxnInfoResponse = 5509; - k_EMsgClientMarketingMessageUpdate2 = 5510; k_EMsgClientDeregisterWithServer = 5511; k_EMsgClientSubscribeToPersonaFeed = 5512; k_EMsgClientLogon = 5514; @@ -1241,8 +1239,6 @@ enum EMsg { k_EMsgClientUCMUpdatePublishedFileResponse = 7326; k_EMsgUCMUpdatePublishedFile = 7327; k_EMsgUCMUpdatePublishedFileResponse = 7328; - k_EMsgUCMDeletePublishedFile = 7329; - k_EMsgUCMDeletePublishedFileResponse = 7330; k_EMsgUCMUpdatePublishedFileStat = 7331; k_EMsgUCMReloadPublishedFile = 7337; k_EMsgUCMReloadUserFileListCaches = 7338; @@ -1271,8 +1267,6 @@ enum EMsg { k_EMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse = 7379; k_EMsgUCMPublishedFileContentUpdated = 7380; k_EMsgClientUCMPublishedFileUpdated = 7381; - k_EMsgClientWorkshopItemChangesRequest = 7382; - k_EMsgClientWorkshopItemChangesResponse = 7383; k_EMsgFSBase = 7500; k_EMsgClientRichPresenceUpload = 7501; k_EMsgClientRichPresenceRequest = 7502; @@ -1443,14 +1437,14 @@ enum EMsg { k_EMsgRemoteClientStartStreamResponse = 9504; k_EMsgRemoteClientPing = 9505; k_EMsgRemoteClientPingResponse = 9506; - k_EMsgClientUnlockStreaming = 9507; - k_EMsgClientUnlockStreamingResponse = 9508; + k_EMsgClientUnlockH264 = 9507; + k_EMsgClientUnlockH264Response = 9508; k_EMsgRemoteClientAcceptEULA = 9509; k_EMsgRemoteClientGetControllerConfig = 9510; k_EMsgRemoteClientGetControllerConfigResponse = 9511; k_EMsgRemoteClientStreamingEnabled = 9512; - k_EMsgClientUnlockHEVC = 9513; - k_EMsgClientUnlockHEVCResponse = 9514; + k_EMsgClientUnlockHEVC_OBSOLETE = 9513; + k_EMsgClientUnlockHEVCResponse_OBSOLETE = 9514; k_EMsgRemoteClientStatusRequest = 9515; k_EMsgRemoteClientStatusResponse = 9516; k_EMsgClientConcurrentSessionsBase = 9600; @@ -1460,7 +1454,6 @@ enum EMsg { k_EMsgClientBroadcastInit = 9700; k_EMsgClientBroadcastFrames = 9701; k_EMsgClientBroadcastDisconnect = 9702; - k_EMsgClientBroadcastScreenshot = 9703; k_EMsgClientBroadcastUploadConfig = 9704; k_EMsgBaseClient3 = 9800; k_EMsgClientVoiceCallPreAuthorize = 9800; @@ -1469,9 +1462,13 @@ enum EMsg { k_EMsgClientServerTimestampResponse = 9803; k_EMsgServiceMethodCallFromClientNonAuthed = 9804; k_EMsgClientHello = 9805; + k_EMsgClientEnableOrDisableDownloads = 9806; + k_EMsgClientEnableOrDisableDownloadsResponse = 9807; k_EMsgClientLANP2PBase = 9900; k_EMsgClientLANP2PRequestChunk = 9900; k_EMsgClientLANP2PRequestChunkResponse = 9901; + k_EMsgClientPeerChunkRequest = 9902; + k_EMsgClientPeerChunkResponse = 9903; k_EMsgClientLANP2PMax = 9999; k_EMsgBaseWatchdogServer = 10000; k_EMsgNotifyWatchdog = 10000; @@ -1488,6 +1485,12 @@ enum EMsg { k_EMsgChatServerGetPendingNotificationCountResponse = 12001; k_EMsgBaseSecretServer = 12100; k_EMsgServerSecretChanged = 12100; + k_EMsgBaseWG = 12200; + k_EMsgWGConnectionProtocolError = 12200; + k_EMsgWGConnectionValidateUserToken = 12201; + k_EMsgWGConnectionValidateUserTokenResponse = 12202; + k_EMsgWGConnectionLegacyWGRequest = 12203; + k_EMsgWGConnectionLegacyWGResponse = 12204; } enum EClientPersonaStateFlag { @@ -1527,3 +1530,18 @@ enum ESteamReviewScore { k_ESteamReviewScore_OverwhelminglyNegative = 1; k_ESteamReviewScore_None = 0; } + +enum ECodecUsagePlatform { + k_ECodecUsagePlatformUnknown = 0; + k_ECodecUsagePlatformWindows = 1; + k_ECodecUsagePlatformMacOS = 2; + k_ECodecUsagePlatformLinux = 3; + k_ECodecUsagePlatformSteamDeck = 4; +} + +enum ECodecUsageReason { + k_ECodecUsageReasonUnknown = 0; + k_ECodecUsageReasonRemotePlay = 1; + k_ECodecUsageReasonBroadcasting = 2; + k_ECodecUsageReasonGameVideo = 3; +} diff --git a/src/DemoFile.Game.Cs/Protobufs/fatdemo.proto b/src/DemoFile.Game.Cs/Protobufs/fatdemo.proto index 0228c1d..cc58f0e 100644 --- a/src/DemoFile.Game.Cs/Protobufs/fatdemo.proto +++ b/src/DemoFile.Game.Cs/Protobufs/fatdemo.proto @@ -1,4 +1,4 @@ -import "networkbasetypes.proto"; +import "networkbasetypes.proto"; enum EHitGroup { EHG_Generic = 0; diff --git a/src/DemoFile.Game.Cs/Protobufs/gameevents.proto b/src/DemoFile.Game.Cs/Protobufs/gameevents.proto index 9d10f80..125dee1 100644 --- a/src/DemoFile.Game.Cs/Protobufs/gameevents.proto +++ b/src/DemoFile.Game.Cs/Protobufs/gameevents.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; diff --git a/src/DemoFile.Game.Cs/Protobufs/gcsdk_gcmessages.proto b/src/DemoFile.Game.Cs/Protobufs/gcsdk_gcmessages.proto index d07da1b..26ef583 100644 --- a/src/DemoFile.Game.Cs/Protobufs/gcsdk_gcmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/gcsdk_gcmessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "steammessages.proto"; diff --git a/src/DemoFile.Game.Cs/Protobufs/gcsystemmsgs.proto b/src/DemoFile.Game.Cs/Protobufs/gcsystemmsgs.proto index 828e389..c53fa62 100644 --- a/src/DemoFile.Game.Cs/Protobufs/gcsystemmsgs.proto +++ b/src/DemoFile.Game.Cs/Protobufs/gcsystemmsgs.proto @@ -1,4 +1,4 @@ -enum EGCSystemMsg { +enum EGCSystemMsg { k_EGCMsgInvalid = 0; k_EGCMsgMulti = 1; k_EGCMsgGenericReply = 10; diff --git a/src/DemoFile.Game.Cs/Protobufs/netmessages.proto b/src/DemoFile.Game.Cs/Protobufs/netmessages.proto index 4cf048a..8a8c7de 100644 --- a/src/DemoFile.Game.Cs/Protobufs/netmessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/netmessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; @@ -7,19 +7,17 @@ enum CLC_Messages { clc_Move = 21; clc_VoiceData = 22; clc_BaselineAck = 23; - clc_ListenEvents = 24; clc_RespondCvarValue = 25; clc_FileCRCCheck = 26; clc_LoadingProgress = 27; clc_SplitPlayerConnect = 28; - clc_ClientMessage = 29; clc_SplitPlayerDisconnect = 30; clc_ServerStatus = 31; - clc_ServerPing = 32; clc_RequestPause = 33; clc_CmdKeyValues = 34; clc_RconServerDetails = 35; clc_HltvReplay = 36; + clc_Diagnostic = 37; } enum SVC_Messages { @@ -50,7 +48,6 @@ enum SVC_Messages { svc_FullFrameSplit = 70; svc_RconServerDetails = 71; svc_UserMessage = 72; - svc_HltvReplay = 73; svc_Broadcast_Command = 74; svc_HltvFixupOperatorStatus = 75; svc_UserCmds = 76; @@ -125,8 +122,7 @@ message CCLCMsg_ClientInfo { message CCLCMsg_Move { optional bytes data = 3; - optional uint32 command_number = 4; - optional uint32 num_commands = 5; + optional uint32 last_command_number = 4; } message CMsgVoiceAudio { @@ -179,11 +175,6 @@ message CCLCMsg_SplitPlayerConnect { optional string playername = 1; } -message CCLCMsg_ClientMessage { - optional int32 msg_type = 1; - optional bytes data = 2; -} - message CCLCMsg_SplitPlayerDisconnect { optional int32 slot = 1; } @@ -205,6 +196,101 @@ message CCLCMsg_RconServerDetails { optional bytes token = 1; } +message CMsgSource2SystemSpecs { + optional string cpu_id = 1; + optional string cpu_brand = 2; + optional uint32 cpu_model = 3; + optional uint32 cpu_num_physical = 4; + optional uint32 ram_physical_total_mb = 21; + optional string gpu_rendersystem_dll_name = 41; + optional uint32 gpu_vendor_id = 42; + optional string gpu_driver_name = 43; + optional uint32 gpu_driver_version_high = 44; + optional uint32 gpu_driver_version_low = 45; + optional uint32 gpu_dx_support_level = 46; + optional uint32 gpu_texture_memory_size_mb = 47; +} + +message CMsgSource2VProfLiteReportItem { + optional string name = 1; + optional uint32 active_samples = 2; + optional uint32 active_samples_1secmax = 4; + optional uint32 usec_max = 3; + optional uint32 usec_avg_active = 11; + optional uint32 usec_p50_active = 12; + optional uint32 usec_p99_active = 13; + optional uint32 usec_avg_all = 21; + optional uint32 usec_p50_all = 22; + optional uint32 usec_p99_all = 23; + optional uint32 usec_1secmax_avg_active = 31; + optional uint32 usec_1secmax_p50_active = 32; + optional uint32 usec_1secmax_p95_active = 33; + optional uint32 usec_1secmax_p99_active = 34; + optional uint32 usec_1secmax_avg_all = 41; + optional uint32 usec_1secmax_p50_all = 42; + optional uint32 usec_1secmax_p95_all = 43; + optional uint32 usec_1secmax_p99_all = 44; +} + +message CMsgSource2VProfLiteReport { + optional .CMsgSource2VProfLiteReportItem total = 1; + repeated .CMsgSource2VProfLiteReportItem items = 2; + optional uint32 discarded_frames = 3; +} + +message CMsgSource2NetworkFlowQuality { + optional uint32 duration = 1; + optional uint64 bytes_total = 5; + optional uint64 bytes_total_reliable = 6; + optional uint64 bytes_total_voice = 7; + optional uint32 bytes_sec_p95 = 10; + optional uint32 bytes_sec_p99 = 11; + optional uint32 enginemsgs_total = 20; + optional uint32 enginemsgs_sec_p95 = 21; + optional uint32 enginemsgs_sec_p99 = 22; + optional uint32 ticks_total = 40; + optional uint32 ticks_good = 41; + optional uint32 ticks_good_almost_late = 42; + optional uint32 ticks_fixed_dropped = 43; + optional uint32 ticks_fixed_late = 44; + optional uint32 ticks_bad_dropped = 45; + optional uint32 ticks_bad_late = 46; + optional uint32 ticks_bad_other = 47; + optional uint32 tick_missrate_samples_total = 50; + optional uint32 tick_missrate_samples_perfect = 51; + optional uint32 tick_missrate_samples_perfectnet = 52; + optional uint32 tick_missratenet_p75_x10 = 53; + optional uint32 tick_missratenet_p95_x10 = 54; + optional uint32 tick_missratenet_p99_x10 = 55; + optional sint32 recvmargin_p1 = 61; + optional sint32 recvmargin_p5 = 62; + optional sint32 recvmargin_p25 = 63; + optional sint32 recvmargin_p50 = 64; + optional sint32 recvmargin_p75 = 65; + optional sint32 recvmargin_p95 = 66; +} + +message CCLCMsg_Diagnostic { + optional .CMsgSource2SystemSpecs system_specs = 1; + optional .CMsgSource2VProfLiteReport vprof_report = 2; +} + +message CSource2Metrics_MatchPerfSummary_Notification { + message Client { + optional .CMsgSource2SystemSpecs system_specs = 1; + optional .CMsgSource2VProfLiteReport profile = 2; + optional uint32 build_id = 3; + optional fixed64 steamid = 10; + } + + optional uint32 appid = 1; + optional string game_mode = 2; + optional uint32 server_build_id = 3; + optional .CMsgSource2VProfLiteReport server_profile = 10; + repeated .CSource2Metrics_MatchPerfSummary_Notification.Client clients = 11; + optional string map = 20; +} + message CSVCMsg_ServerInfo { optional int32 protocol = 1; optional int32 server_count = 2; @@ -385,7 +471,7 @@ message CSVCMsg_PacketEntities { optional bytes serialized_entities = 13; repeated .CSVCMsg_PacketEntities.alternate_baseline_t alternate_baselines = 15; optional uint32 has_pvs_vis_bits = 16; - optional uint32 last_cmd_recv_margin = 18; + repeated sint32 cmd_recv_status = 22 [packed = true]; optional .CSVCMsg_PacketEntities.non_transmitted_entities_t non_transmitted_entities = 19; optional uint32 cq_starved_command_ticks = 20; optional uint32 cq_discarded_command_ticks = 21; @@ -618,6 +704,7 @@ message CMsgServerUserCmd { optional int32 cmd_number = 2; optional int32 player_slot = 3 [default = -1]; optional int32 server_tick_executed = 4; + optional int32 client_tick = 5; } message CSVCMsg_UserCommands { diff --git a/src/DemoFile.Game.Cs/Protobufs/network_connection.proto b/src/DemoFile.Game.Cs/Protobufs/network_connection.proto index dbade48..e148d22 100644 --- a/src/DemoFile.Game.Cs/Protobufs/network_connection.proto +++ b/src/DemoFile.Game.Cs/Protobufs/network_connection.proto @@ -1,9 +1,10 @@ -syntax = "proto2"; +syntax = "proto2"; import "google/protobuf/descriptor.proto"; extend .google.protobuf.EnumValueOptions { optional string network_connection_token = 50500; + optional string network_connection_detail_token = 50501; } enum ENetworkDisconnectionReason { @@ -125,4 +126,7 @@ enum ENetworkDisconnectionReason { NETWORK_DISCONNECT_KICKED_SUICIDE = 159 [(network_connection_token) = "#Player_DisconnectReason_Suicide"]; NETWORK_DISCONNECT_KICKED_NOSTEAMLOGIN = 160 [(network_connection_token) = "#Player_DisconnectReason_NoSteamLogin"]; NETWORK_DISCONNECT_KICKED_NOSTEAMTICKET = 161 [(network_connection_token) = "#Player_DisconnectReason_NoSteamTicket"]; + NETWORK_DISCONNECT_KICKED_INPUTAUTOMATION = 162 [(network_connection_token) = "#Player_DisconnectReason_InputAutomation", (network_connection_detail_token) = "#Player_DisconnectReason_InputAutomation_Detail"]; + NETWORK_DISCONNECT_KICKED_VACNETABNORMALBEHAVIOR = 163 [(network_connection_token) = "#Player_DisconnectReason_VacNetAbnormalBehavior"]; + NETWORK_DISCONNECT_KICKED_INSECURECLIENT = 164 [(network_connection_token) = "#Player_DisconnectReason_InsecureClient"]; } diff --git a/src/DemoFile.Game.Cs/Protobufs/networkbasetypes.proto b/src/DemoFile.Game.Cs/Protobufs/networkbasetypes.proto index 1066857..5ef5b2a 100644 --- a/src/DemoFile.Game.Cs/Protobufs/networkbasetypes.proto +++ b/src/DemoFile.Game.Cs/Protobufs/networkbasetypes.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "network_connection.proto"; @@ -107,22 +107,17 @@ message CNETMsg_SplitScreenUser { optional int32 slot = 1; } -message CNETMsg_Disconnect_Legacy { - optional .ENetworkDisconnectionReason reason = 2 [default = NETWORK_DISCONNECT_INVALID]; -} - message CNETMsg_Tick { optional uint32 tick = 1; - optional uint32 host_frametime = 2; - optional uint32 host_frametime_std_deviation = 3; optional uint32 host_computationtime = 4; optional uint32 host_computationtime_std_deviation = 5; - optional uint32 host_framestarttime_std_deviation = 6; - optional uint32 host_loss = 7; + optional uint32 legacy_host_loss = 7; optional uint32 host_unfiltered_frametime = 8; optional uint32 hltv_replay_flags = 9; optional uint32 expected_long_tick = 10; optional string expected_long_tick_reason = 11; + optional uint32 host_frame_dropped_pct_x10 = 12; + optional uint32 host_frame_irregular_arrival_pct_x10 = 13; } message CNETMsg_StringCmd { diff --git a/src/DemoFile.Game.Cs/Protobufs/networksystem_protomessages.proto b/src/DemoFile.Game.Cs/Protobufs/networksystem_protomessages.proto index 1fa36b3..9a17b86 100644 --- a/src/DemoFile.Game.Cs/Protobufs/networksystem_protomessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/networksystem_protomessages.proto @@ -1,13 +1,15 @@ -message NetMessageSplitscreenUserChanged { +message NetMessageSplitscreenUserChanged { optional uint32 slot = 1; } message NetMessageConnectionClosed { optional uint32 reason = 1; + optional string message = 2; } message NetMessageConnectionCrashed { optional uint32 reason = 1; + optional string message = 2; } message NetMessagePacketStart { diff --git a/src/DemoFile.Game.Cs/Protobufs/normalise.ps1 b/src/DemoFile.Game.Cs/Protobufs/normalise.ps1 new file mode 100644 index 0000000..e69de29 diff --git a/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_auth.proto b/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_auth.proto index c97793e..b250dfe 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_auth.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_auth.proto @@ -1,4 +1,4 @@ -import "steamnetworkingsockets_messages_certs.proto"; +import "steamnetworkingsockets_messages_certs.proto"; option optimize_for = SPEED; option cc_generic_services = false; diff --git a/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_sdr.proto b/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_sdr.proto index 11cb3ac..601f3e3 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_sdr.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steamdatagram_messages_sdr.proto @@ -1,4 +1,4 @@ -import "steamnetworkingsockets_messages_certs.proto"; +import "steamnetworkingsockets_messages_certs.proto"; import "steamnetworkingsockets_messages.proto"; option optimize_for = SPEED; @@ -63,7 +63,6 @@ message CMsgSteamDatagramRouterPingReply { message AltAddress { enum Protocol { DefaultProtocol = 0; - NetworkNext = 1; } optional fixed32 ipv4 = 1; @@ -89,11 +88,16 @@ message CMsgSteamDatagramRouterPingReply { optional fixed64 challenge = 6; optional uint32 seconds_until_shutdown = 7; optional fixed32 client_cookie = 8; + optional uint32 recv_tos = 16; + optional uint32 echo_sent_tos = 17; + optional uint32 sent_tos = 18; + optional uint32 echo_request_reply_tos = 19; optional uint32 scoring_penalty_relay_cluster = 9; optional uint32 flags = 12; repeated .CMsgSteamDatagramRouterPingReply.RouteException route_exceptions = 10; repeated .CMsgSteamDatagramRouterPingReply.AltAddress alt_addresses = 13; optional bytes dummy_pad = 99; + optional uint64 dummy_varint = 100; } message CMsgSteamDatagramGameserverPingRequestBody { @@ -148,6 +152,12 @@ message CMsgSteamDatagramNoSessionRelayToPeer { optional fixed64 kludge_pad = 99; } +message CMsgTOSTreatment { + optional string l4s_detect = 1; + optional string up_ecn1 = 2; + optional string down_dscp45 = 3; +} + message CMsgSteamDatagramClientPingSampleRequest { optional fixed32 connection_id = 1; } @@ -186,6 +196,7 @@ message CMsgSteamDatagramClientPingSampleReply { optional fixed32 connection_id = 1; optional bool relay_override_active = 5; + optional .CMsgTOSTreatment tos = 6; repeated .CMsgSteamDatagramClientPingSampleReply.POP pops = 2; repeated .CMsgSteamDatagramClientPingSampleReply.LegacyDataCenter legacy_data_centers = 3; } diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages.proto index 61b63d0..623e87d 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "google/protobuf/descriptor.proto"; @@ -36,581 +36,6 @@ message CMsgProtoBufHeader { 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 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; - optional uint32 rt_identity_linked = 35; - optional uint32 rt_birth_date = 36; - optional string txn_country_code = 37; - optional bool has_accepted_china_ssa = 38; - optional bool is_banned_steam_china = 39; -} - -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]; - optional string message = 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; - optional int32 ageclass = 3; - optional bool id_verified = 4 [default = true]; - optional bool is_adult = 5; -} - -message CMsgGCAddressMask { - optional fixed32 ipv4 = 1; - optional uint32 maskbits = 2 [default = 32]; -} - -message CMsgGCAddressMaskGroup { - repeated .CMsgGCAddressMask addrs = 1; -} - -message CMsgGCRoutingInfo { - message TokenBucketConfiguration { - optional int32 tokens_start = 1; - optional int32 tokens_grant = 2; - optional int32 grant_seconds = 3; - } - - message PolicyRule { - optional int32 account_type = 1; - optional int32 address_mask_group_id = 2; - optional .CMsgGCRoutingInfo.TokenBucketConfiguration token_bucket = 3; - } - - 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; - repeated .CMsgGCRoutingInfo.PolicyRule policy_rules = 6; -} - -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; - repeated .CMsgGCAddressMaskGroup address_mask_groups = 2; -} - -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; - optional fixed64 owner_id = 10; - optional uint32 cm_session_sysid = 11; - optional uint32 cm_session_identifier = 12; - repeated uint32 depot_ids = 13; -} - -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; -} - -message CMsgDPPartnerMicroTxns { - message PartnerMicroTxn { - optional uint32 init_time = 1; - optional uint32 last_update_time = 2; - optional uint64 txn_id = 3; - optional uint32 account_id = 4; - optional uint32 line_item = 5; - optional uint64 item_id = 6; - optional uint32 def_index = 7; - optional uint64 price = 8; - optional uint64 tax = 9; - optional uint64 price_usd = 10; - optional uint64 tax_usd = 11; - optional uint32 purchase_type = 12; - optional uint32 steam_txn_type = 13; - optional string country_code = 14; - optional string region_code = 15; - optional int32 quantity = 16; - optional uint64 ref_trans_id = 17; - } - - message PartnerInfo { - optional uint32 partner_id = 1; - optional string partner_name = 2; - optional string currency_code = 3; - optional string currency_name = 4; - } - - optional uint32 appid = 1; - optional string gc_name = 2; - optional .CMsgDPPartnerMicroTxns.PartnerInfo partner = 3; - repeated .CMsgDPPartnerMicroTxns.PartnerMicroTxn transactions = 4; -} - -message CMsgDPPartnerMicroTxnsResponse { - enum EErrorCode { - k_MsgValid = 0; - k_MsgInvalidAppID = 1; - k_MsgInvalidPartnerInfo = 2; - k_MsgNoTransactions = 3; - k_MsgSQLFailure = 4; - k_MsgPartnerInfoDiscrepancy = 5; - k_MsgTransactionInsertFailed = 7; - k_MsgAlreadyRunning = 8; - k_MsgInvalidTransactionData = 9; - } - - optional uint32 eresult = 1 [default = 2]; - optional .CMsgDPPartnerMicroTxnsResponse.EErrorCode eerrorcode = 2 [default = k_MsgValid]; -} - message CChinaAgreementSessions_StartAgreementSessionInGame_Request { optional uint32 appid = 1; optional fixed64 steamid = 2; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_base.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_base.proto index d558826..17e0418 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_base.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_base.proto @@ -1,4 +1,4 @@ -import "google/protobuf/descriptor.proto"; +import "google/protobuf/descriptor.proto"; option optimize_for = SPEED; option cc_generic_services = true; @@ -86,7 +86,17 @@ message CMsgIPAddressBucket { optional fixed64 bucket = 2; } +message CMsgGCRoutingProtoBufHeader { + optional uint64 dst_gcid_queue = 1; + optional uint32 dst_gc_dir_index = 2; +} + message CMsgProtoBufHeader { + enum ESessionDisposition { + k_ESessionDispositionNormal = 0; + k_ESessionDispositionDisconnect = 1; + } + optional fixed64 steamid = 1; optional int32 client_sessionid = 2; optional uint32 routing_appid = 3; @@ -112,6 +122,12 @@ message CMsgProtoBufHeader { optional uint32 realm = 32 [default = 0]; optional int32 timeout_ms = 33 [default = -1]; optional string debug_source = 34; + optional uint32 debug_source_string_index = 35; + optional uint64 token_id = 36; + optional .CMsgGCRoutingProtoBufHeader routing_gc = 37; + optional .CMsgProtoBufHeader.ESessionDisposition session_disposition = 38 [default = k_ESessionDispositionNormal]; + optional string wg_token = 39; + optional string webui_auth_key = 40; oneof ip_addr { uint32 ip = 15; @@ -136,6 +152,8 @@ message CMsgAuthTicket { optional uint32 h_steam_pipe = 5; optional uint32 ticket_crc = 6; optional bytes ticket = 7; + optional bytes server_secret = 8; + optional uint32 ticket_type = 9; } message CCDDBAppDetailCommon { @@ -151,6 +169,9 @@ message CCDDBAppDetailCommon { optional bool has_adult_content = 12; optional bool is_visible_in_steam_china = 13; optional uint32 app_type = 14; + optional bool has_adult_content_sex = 15; + optional bool has_adult_content_violence = 16; + repeated uint32 content_descriptorids = 17; } message CMsgAppRights { @@ -232,6 +253,7 @@ message CCommunity_ClanAnnouncementInfo { optional int32 voteupcount = 14; optional int32 votedowncount = 15; optional .EBanContentCheckResult ban_check_result = 16 [default = k_EBanContentCheckResult_NotScanned]; + optional bool banned = 17; } message CClanEventData { @@ -299,3 +321,12 @@ message CMsgKeyValuePair { message CMsgKeyValueSet { repeated .CMsgKeyValuePair pairs = 1; } + +message UserContentDescriptorPreferences { + message ContentDescriptor { + optional uint32 content_descriptorid = 1; + optional uint32 timestamp_added = 2; + } + + repeated .UserContentDescriptorPreferences.ContentDescriptor content_descriptors_to_exclude = 1; +} diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_cloud.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_cloud.steamworkssdk.proto index 7e4e759..d7a5521 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_cloud.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_cloud.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "steammessages_unified_base.steamworkssdk.proto"; +import "steammessages_unified_base.steamworkssdk.proto"; message CCloud_GetUploadServerInfo_Request { optional uint32 appid = 1 [(description) = "App ID to which a file will be uploaded to."]; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_gamenetworkingui.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_gamenetworkingui.proto index e6b7029..b8aa255 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_gamenetworkingui.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_gamenetworkingui.proto @@ -1,4 +1,4 @@ -import "steamnetworkingsockets_messages.proto"; +import "steamnetworkingsockets_messages.proto"; import "steamdatagram_messages_sdr.proto"; option optimize_for = SPEED; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_helprequest.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_helprequest.steamworkssdk.proto index bc9ec35..2c0f5df 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_helprequest.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_helprequest.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "steammessages_unified_base.steamworkssdk.proto"; +import "steammessages_unified_base.steamworkssdk.proto"; option cc_generic_services = true; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_oauth.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_oauth.steamworkssdk.proto index ee6449d..9275d1a 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_oauth.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_oauth.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "steammessages_unified_base.steamworkssdk.proto"; +import "steammessages_unified_base.steamworkssdk.proto"; message COAuthToken_ImplicitGrantNoPrompt_Request { optional string clientid = 1 [(description) = "Client ID for which to count the number of issued tokens"]; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_player.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_player.steamworkssdk.proto index 298c5dd..5166695 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_player.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_player.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "steammessages_unified_base.steamworkssdk.proto"; +import "steammessages_unified_base.steamworkssdk.proto"; option cc_generic_services = true; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_publishedfile.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_publishedfile.steamworkssdk.proto index 96d60af..2671285 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_publishedfile.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_publishedfile.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "steammessages_unified_base.steamworkssdk.proto"; +import "steammessages_unified_base.steamworkssdk.proto"; message CPublishedFile_Subscribe_Request { optional uint64 publishedfileid = 1; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_steamlearn.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_steamlearn.steamworkssdk.proto index 508178b..3c8798d 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_steamlearn.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_steamlearn.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "steammessages_unified_base.steamworkssdk.proto"; +import "steammessages_unified_base.steamworkssdk.proto"; enum ESteamLearnDataType { STEAMLEARN_DATATYPE_INVALID = 0; diff --git a/src/DemoFile.Game.Cs/Protobufs/steammessages_unified_base.steamworkssdk.proto b/src/DemoFile.Game.Cs/Protobufs/steammessages_unified_base.steamworkssdk.proto index 84ab32a..55c8bde 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steammessages_unified_base.steamworkssdk.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steammessages_unified_base.steamworkssdk.proto @@ -1,4 +1,4 @@ -import "google/protobuf/descriptor.proto"; +import "google/protobuf/descriptor.proto"; option optimize_for = SPEED; option cc_generic_services = false; diff --git a/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages.proto b/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages.proto index 0550740..98b1ded 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages.proto @@ -1,4 +1,4 @@ -import "steamnetworkingsockets_messages_certs.proto"; +import "steamnetworkingsockets_messages_certs.proto"; option optimize_for = SPEED; option cc_generic_services = false; diff --git a/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_certs.proto b/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_certs.proto index 6ad2c3f..27ba9b4 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_certs.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_certs.proto @@ -1,4 +1,4 @@ -option optimize_for = SPEED; +option optimize_for = SPEED; option cc_generic_services = false; message CMsgSteamNetworkingIdentityLegacyBinary { diff --git a/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_udp.proto b/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_udp.proto index cc50836..998a217 100644 --- a/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_udp.proto +++ b/src/DemoFile.Game.Cs/Protobufs/steamnetworkingsockets_messages_udp.proto @@ -1,4 +1,4 @@ -import "steamnetworkingsockets_messages_certs.proto"; +import "steamnetworkingsockets_messages_certs.proto"; import "steamnetworkingsockets_messages.proto"; option optimize_for = SPEED; diff --git a/src/DemoFile.Game.Cs/Protobufs/te.proto b/src/DemoFile.Game.Cs/Protobufs/te.proto index 6568f46..3c53fec 100644 --- a/src/DemoFile.Game.Cs/Protobufs/te.proto +++ b/src/DemoFile.Game.Cs/Protobufs/te.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; @@ -199,6 +199,9 @@ message CMsgTEExplosion { optional bool affect_ragdolls = 9; optional string effect_name = 10; optional uint32 explosion_type = 11; + optional bool create_debris = 12; + optional .CMsgVector debris_origin = 13; + optional fixed32 debris_surfaceprop = 14; } message CMsgTEDust { diff --git a/src/DemoFile.Game.Cs/Protobufs/uifontfile_format.proto b/src/DemoFile.Game.Cs/Protobufs/uifontfile_format.proto index 5602e48..eb0f8f6 100644 --- a/src/DemoFile.Game.Cs/Protobufs/uifontfile_format.proto +++ b/src/DemoFile.Game.Cs/Protobufs/uifontfile_format.proto @@ -1,4 +1,4 @@ -message CUIFontFilePB { +message CUIFontFilePB { optional string font_file_name = 1; optional bytes opentype_font_data = 2; } diff --git a/src/DemoFile.Game.Cs/Protobufs/usercmd.proto b/src/DemoFile.Game.Cs/Protobufs/usercmd.proto index aae17f1..3bc7089 100644 --- a/src/DemoFile.Game.Cs/Protobufs/usercmd.proto +++ b/src/DemoFile.Game.Cs/Protobufs/usercmd.proto @@ -1,4 +1,4 @@ -import "networkbasetypes.proto"; +import "networkbasetypes.proto"; message CInButtonStatePB { optional uint64 buttonstate1 = 1; @@ -15,7 +15,7 @@ message CSubtickMoveStep { } message CBaseUserCmdPB { - optional int32 command_number = 1; + optional int32 legacy_command_number = 1; optional int32 client_tick = 2; optional .CInButtonStatePB buttons_pb = 3; optional .CMsgQAngle viewangles = 4; diff --git a/src/DemoFile.Game.Cs/Protobufs/usermessages.proto b/src/DemoFile.Game.Cs/Protobufs/usermessages.proto index ac27b04..8c006b8 100644 --- a/src/DemoFile.Game.Cs/Protobufs/usermessages.proto +++ b/src/DemoFile.Game.Cs/Protobufs/usermessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; @@ -109,6 +109,8 @@ enum PARTICLE_MESSAGE { GAME_PARTICLE_MANAGER_EVENT_CLEAR_MODELLIST_OVERRIDE = 31; GAME_PARTICLE_MANAGER_EVENT_CREATE_PHYSICS_SIM = 32; GAME_PARTICLE_MANAGER_EVENT_DESTROY_PHYSICS_SIM = 33; + GAME_PARTICLE_MANAGER_EVENT_SET_VDATA = 34; + GAME_PARTICLE_MANAGER_EVENT_SET_MATERIAL_OVERRIDE = 35; } enum EHapticPulseType { @@ -352,6 +354,7 @@ message CUserMsg_ParticleManager { optional string control_point_configuration = 7; optional bool cluster = 8; optional float endcap_time = 9; + optional .CMsgVector aggregation_position = 10; } message DestroyParticle { @@ -533,11 +536,22 @@ message CUserMsg_ParticleManager { message CreatePhysicsSim { optional string prop_group_name = 1; + optional bool use_high_quality_simulation = 2; + optional uint32 max_particle_count = 3; } message DestroyPhysicsSim { } + message SetVData { + optional string vdata_name = 1; + } + + message SetMaterialOverride { + optional string material_name = 1; + optional bool include_children = 2; + } + required .PARTICLE_MESSAGE type = 1 [default = GAME_PARTICLE_MANAGER_EVENT_CREATE]; required uint32 index = 2; optional .CUserMsg_ParticleManager.ReleaseParticleIndex release_particle_index = 3; @@ -573,6 +587,8 @@ message CUserMsg_ParticleManager { optional .CUserMsg_ParticleManager.ClearModellistOverride clear_modellist_override = 34; optional .CUserMsg_ParticleManager.CreatePhysicsSim create_physics_sim = 35; optional .CUserMsg_ParticleManager.DestroyPhysicsSim destroy_physics_sim = 36; + optional .CUserMsg_ParticleManager.SetVData set_vdata = 37; + optional .CUserMsg_ParticleManager.SetMaterialOverride set_material_override = 38; extensions 100 to 201; } @@ -779,6 +795,13 @@ message CUserMessage_NotifyResponseFound { optional string response_value = 3; optional string response_concept = 4; repeated .CUserMessage_NotifyResponseFound.Criteria criteria = 5; + repeated uint32 int_criteria_names = 6 [packed = true]; + repeated int32 int_criteria_values = 7 [packed = true]; + repeated uint32 float_criteria_names = 8 [packed = true]; + repeated float float_criteria_values = 9; + repeated uint32 symbol_criteria_names = 10 [packed = true]; + repeated uint32 symbol_criteria_values = 11 [packed = true]; + optional int32 speak_result = 12; } message CUserMessage_PlayResponseConditional { @@ -786,4 +809,6 @@ message CUserMessage_PlayResponseConditional { repeated int32 player_slots = 2; optional string response = 3; optional .CMsgVector ent_origin = 4; + optional float pre_delay = 5; + optional int32 mix_priority = 6; } diff --git a/src/DemoFile.Game.Cs/Protobufs/valveextensions.proto b/src/DemoFile.Game.Cs/Protobufs/valveextensions.proto index d391cfa..9c347fa 100644 --- a/src/DemoFile.Game.Cs/Protobufs/valveextensions.proto +++ b/src/DemoFile.Game.Cs/Protobufs/valveextensions.proto @@ -1,4 +1,4 @@ -import "google/protobuf/descriptor.proto"; +import "google/protobuf/descriptor.proto"; extend .google.protobuf.FieldOptions { optional bool valve_map_field = 61000 [default = false]; diff --git a/src/DemoFile.Game.Cs/Schema/!GlobalTypes.json b/src/DemoFile.Game.Cs/Schema/!GlobalTypes.json index 2487dd9..0eee5ce 100644 --- a/src/DemoFile.Game.Cs/Schema/!GlobalTypes.json +++ b/src/DemoFile.Game.Cs/Schema/!GlobalTypes.json @@ -609,6 +609,19 @@ } ] }, + "EDestructiblePartDamagePassThroughType": { + "align": 4, + "items": [ + { + "name": "Normal", + "value": 0 + }, + { + "name": "Absorb", + "value": 1 + } + ] + }, "StateActionBehavior": { "align": 4, "items": [ @@ -4507,6 +4520,31 @@ } ] }, + "EIKEndEffectorRotationFixUpMode": { + "align": 4, + "items": [ + { + "name": "None", + "value": 0 + }, + { + "name": "MatchTargetOrientation", + "value": 1 + }, + { + "name": "LookAtTargetForward", + "value": 2 + }, + { + "name": "MaintainParentOrientation", + "value": 3 + }, + { + "name": "Count", + "value": 4 + } + ] + }, "AnimNodeNetworkMode": { "align": 4, "items": [ @@ -11928,6 +11966,15 @@ } }, "classes": { + "CSkillInt": { + "metadata": [ + { + "name": "MPropertyCustomEditor" + } + ], + "fields": [ + ] + }, "CPulseGraphComponentBase": { "metadata": [ ], @@ -18027,6 +18074,15 @@ "fields": [ ] }, + "CDestructiblePartsSystemData_HitGroupInfoAndPartData": { + "metadata": [ + { + "name": "MGetKV3ClassDefaults" + } + ], + "fields": [ + ] + }, "C_INIT_RemapScalar": { "parent": "CParticleFunctionInitializer", "metadata": [ @@ -19119,6 +19175,15 @@ "fields": [ ] }, + "CDestructiblePartRuntimeData": { + "metadata": [ + { + "name": "MGetKV3ClassDefaults" + } + ], + "fields": [ + ] + }, "C_OP_ControlpointLight": { "parent": "CParticleFunctionOperator", "metadata": [ @@ -20881,10 +20946,10 @@ "fields": [ ] }, - "CSkillInt": { + "CDestructiblePartsSystemData_PartData": { "metadata": [ { - "name": "MPropertyCustomEditor" + "name": "MGetKV3ClassDefaults" } ], "fields": [ @@ -26158,6 +26223,15 @@ "fields": [ ] }, + "CDestructiblePartRuntimeDataVector": { + "metadata": [ + { + "name": "MGetKV3ClassDefaults" + } + ], + "fields": [ + ] + }, "C_INIT_InitFloatCollection": { "parent": "CParticleFunctionInitializer", "metadata": [ @@ -26288,6 +26362,18 @@ "fields": [ ] }, + "CDestructiblePartsSystemData": { + "metadata": [ + { + "name": "MModelGameData" + }, + { + "name": "MGetKV3ClassDefaults" + } + ], + "fields": [ + ] + }, "C_OP_FadeInSimple": { "parent": "CParticleFunctionOperator", "metadata": [ diff --git a/src/DemoFile.Game.Cs/Schema/client.json b/src/DemoFile.Game.Cs/Schema/client.json index ea8f5e1..69e0c71 100644 --- a/src/DemoFile.Game.Cs/Schema/client.json +++ b/src/DemoFile.Game.Cs/Schema/client.json @@ -2493,6 +2493,13 @@ } ] }, + "CEnvSoundscape": { + "parent": "C_BaseEntity", + "metadata": [ + ], + "fields": [ + ] + }, "C_SoundEventEntity": { "parent": "C_BaseEntity", "metadata": [ @@ -3464,6 +3471,15 @@ "metadata": [ ] }, + { + "name": "m_nextPrevOwnerUseTime", + "type": { + "name": "GameTime_t", + "category": 5 + }, + "metadata": [ + ] + }, { "name": "m_hPrevOwner", "type": { @@ -5743,6 +5759,13 @@ "fields": [ ] }, + "CEnvSoundscapeProxy": { + "parent": "CEnvSoundscape", + "metadata": [ + ], + "fields": [ + ] + }, "C_BaseClientUIEntity": { "parent": "C_BaseModelEntity", "metadata": [ @@ -7331,6 +7354,22 @@ } ] }, + "CRagdollManager": { + "parent": "C_BaseEntity", + "metadata": [ + ], + "fields": [ + { + "name": "m_iCurrentMaxRagdollCount", + "type": { + "name": "int8", + "category": 0 + }, + "metadata": [ + ] + } + ] + }, "C_TeamRoundTimer": { "parent": "C_BaseEntity", "metadata": [ @@ -9258,6 +9297,13 @@ "fields": [ ] }, + "CEnvSoundscapeAlias_snd_soundscape": { + "parent": "CEnvSoundscape", + "metadata": [ + ], + "fields": [ + ] + }, "C_WeaponM249": { "parent": "C_CSWeaponBaseGun", "metadata": [ @@ -13397,6 +13443,13 @@ "fields": [ ] }, + "CEnvSoundscapeTriggerable": { + "parent": "CEnvSoundscape", + "metadata": [ + ], + "fields": [ + ] + }, "C_CSGameRulesProxy": { "parent": "C_GameRulesProxy", "metadata": [ @@ -14152,6 +14205,13 @@ "fields": [ ] }, + "CEnvSoundscapeProxyAlias_snd_soundscape_proxy": { + "parent": "CEnvSoundscapeProxy", + "metadata": [ + ], + "fields": [ + ] + }, "C_SoundEventOBBEntity": { "parent": "C_SoundEventEntity", "metadata": [ @@ -15119,15 +15179,6 @@ "metadata": [ ], "fields": [ - { - "name": "m_flMaxFallVelocity", - "type": { - "name": "float32", - "category": 0 - }, - "metadata": [ - ] - }, { "name": "m_vecLadderNormal", "type": { @@ -15265,24 +15316,6 @@ "metadata": [ ] }, - { - "name": "m_flJumpUntil", - "type": { - "name": "float32", - "category": 0 - }, - "metadata": [ - ] - }, - { - "name": "m_flJumpVel", - "type": { - "name": "float32", - "category": 0 - }, - "metadata": [ - ] - }, { "name": "m_fStashGrenadeParameterWhen", "type": { @@ -15330,6 +15363,13 @@ } ] }, + "CEnvSoundscapeTriggerableAlias_snd_soundscape_triggerable": { + "parent": "CEnvSoundscapeTriggerable", + "metadata": [ + ], + "fields": [ + ] + }, "CBasePlayerVData": { "parent": "CEntitySubclassVDataBase", "metadata": [ @@ -17478,10 +17518,10 @@ { "name": "m_VoxelFrameData", "type": { - "name": "CUtlVector< uint8 >", + "name": "C_NetworkUtlVectorBase< uint8 >", "category": 4, "atomic": 2, - "outer": "CUtlVector", + "outer": "C_NetworkUtlVectorBase", "inner": { "name": "uint8", "category": 0 @@ -17493,6 +17533,24 @@ "value": "OnSimulationChanged" } ] + }, + { + "name": "m_nVoxelFrameDataSize", + "type": { + "name": "int32", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_nVoxelUpdate", + "type": { + "name": "int32", + "category": 0 + }, + "metadata": [ + ] } ] }, @@ -19095,6 +19153,15 @@ "metadata": [ ], "fields": [ + { + "name": "m_bFirstAttack", + "type": { + "name": "bool", + "category": 0 + }, + "metadata": [ + ] + } ] }, "C_EnvCubemapBox": { @@ -19920,22 +19987,6 @@ "fields": [ ] }, - "C_RagdollManager": { - "parent": "C_BaseEntity", - "metadata": [ - ], - "fields": [ - { - "name": "m_iCurrentMaxRagdollCount", - "type": { - "name": "int8", - "category": 0 - }, - "metadata": [ - ] - } - ] - }, "C_EnvSky": { "parent": "C_BaseModelEntity", "metadata": [ @@ -21324,6 +21375,20 @@ "metadata": [ ] }, + { + "name": "m_BackgroundMaterialName", + "type": { + "name": "char[64]", + "category": 3, + "arraySize": 64, + "inner": { + "name": "char", + "category": 0 + } + }, + "metadata": [ + ] + }, { "name": "m_bEnabled", "type": { @@ -21369,6 +21434,42 @@ "metadata": [ ] }, + { + "name": "m_bDrawBackground", + "type": { + "name": "bool", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_flBackgroundBorderWidth", + "type": { + "name": "float32", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_flBackgroundBorderHeight", + "type": { + "name": "float32", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_flBackgroundWorldToUV", + "type": { + "name": "float32", + "category": 0 + }, + "metadata": [ + ] + }, { "name": "m_Color", "type": { @@ -21887,20 +21988,37 @@ ] }, { - "name": "m_vecKills", + "name": "m_recentKillQueue", "type": { - "name": "C_NetworkUtlVectorBase< EKillTypes_t >", - "category": 4, - "atomic": 2, - "outer": "C_NetworkUtlVectorBase", + "name": "uint8[8]", + "category": 3, + "arraySize": 8, "inner": { - "name": "EKillTypes_t", - "category": 6 + "name": "uint8", + "category": 0 } }, "metadata": [ ] }, + { + "name": "m_nFirstKill", + "type": { + "name": "uint8", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_nKillCount", + "type": { + "name": "uint8", + "category": 0 + }, + "metadata": [ + ] + }, { "name": "m_bMvpNoMusic", "type": { @@ -21949,6 +22067,19 @@ "value": "OnMVPCountChanged" } ] + }, + { + "name": "m_bFireBulletsSeedSynchronized", + "type": { + "name": "bool", + "category": 0 + }, + "metadata": [ + { + "name": "MNetworkUserGroup", + "value": "LocalPlayerExclusive" + } + ] } ] }, @@ -22362,6 +22493,13 @@ } ] }, + "CCSPlayer_DamageReactServices": { + "parent": "CPlayerPawnComponent", + "metadata": [ + ], + "fields": [ + ] + }, "C_CSGOViewModel": { "parent": "C_PredictedViewModel", "metadata": [ @@ -22770,6 +22908,13 @@ "fields": [ ] }, + "CMapInfo": { + "parent": "C_PointEntity", + "metadata": [ + ], + "fields": [ + ] + }, "C_PlantedC4": { "parent": "CBaseAnimGraph", "metadata": [ diff --git a/src/DemoFile.Game.Cs/Schema/server.json b/src/DemoFile.Game.Cs/Schema/server.json index def8629..f713f69 100644 --- a/src/DemoFile.Game.Cs/Schema/server.json +++ b/src/DemoFile.Game.Cs/Schema/server.json @@ -2179,6 +2179,13 @@ "fields": [ ] }, + "CEnvSoundscape": { + "parent": "CBaseEntity", + "metadata": [ + ], + "fields": [ + ] + }, "CBtActionAim": { "parent": "CBtNode", "metadata": [ @@ -2218,13 +2225,6 @@ } ] }, - "CEnvSoundscape": { - "parent": "CServerOnlyEntity", - "metadata": [ - ], - "fields": [ - ] - }, "fogplayerparams_t": { "metadata": [ ], @@ -4152,6 +4152,15 @@ "metadata": [ ] }, + { + "name": "m_nextPrevOwnerUseTime", + "type": { + "name": "GameTime_t", + "category": 5 + }, + "metadata": [ + ] + }, { "name": "m_hPrevOwner", "type": { @@ -8494,6 +8503,15 @@ "metadata": [ ], "fields": [ + { + "name": "m_bFirstAttack", + "type": { + "name": "bool", + "category": 0 + }, + "metadata": [ + ] + } ] }, "CFuncTrackTrain": { @@ -9258,15 +9276,15 @@ "fields": [ ] }, - "CInfoInstructorHintHostageRescueZone": { - "parent": "CPointEntity", + "CEnvSoundscapeAlias_snd_soundscape": { + "parent": "CEnvSoundscape", "metadata": [ ], "fields": [ ] }, - "CEnvSoundscapeAlias_snd_soundscape": { - "parent": "CEnvSoundscape", + "CInfoInstructorHintHostageRescueZone": { + "parent": "CPointEntity", "metadata": [ ], "fields": [ @@ -11283,15 +11301,15 @@ "fields": [ ] }, - "CLightOrthoEntity": { - "parent": "CLightEntity", + "CEnvSoundscapeTriggerable": { + "parent": "CEnvSoundscape", "metadata": [ ], "fields": [ ] }, - "CEnvSoundscapeTriggerable": { - "parent": "CEnvSoundscape", + "CLightOrthoEntity": { + "parent": "CLightEntity", "metadata": [ ], "fields": [ @@ -13053,6 +13071,13 @@ "fields": [ ] }, + "CEnvSoundscapeProxyAlias_snd_soundscape_proxy": { + "parent": "CEnvSoundscapeProxy", + "metadata": [ + ], + "fields": [ + ] + }, "CSoundEventPathCornerEntity": { "parent": "CSoundEventEntity", "metadata": [ @@ -13075,13 +13100,6 @@ } ] }, - "CEnvSoundscapeProxyAlias_snd_soundscape_proxy": { - "parent": "CEnvSoundscapeProxy", - "metadata": [ - ], - "fields": [ - ] - }, "CLightComponent": { "parent": "CEntityComponent", "metadata": [ @@ -13941,10 +13959,10 @@ { "name": "m_VoxelFrameData", "type": { - "name": "CUtlVector< uint8 >", + "name": "CNetworkUtlVectorBase< uint8 >", "category": 4, "atomic": 2, - "outer": "CUtlVector", + "outer": "CNetworkUtlVectorBase", "inner": { "name": "uint8", "category": 0 @@ -13952,6 +13970,24 @@ }, "metadata": [ ] + }, + { + "name": "m_nVoxelFrameDataSize", + "type": { + "name": "int32", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_nVoxelUpdate", + "type": { + "name": "int32", + "category": 0 + }, + "metadata": [ + ] } ] }, @@ -14274,15 +14310,6 @@ "metadata": [ ], "fields": [ - { - "name": "m_flMaxFallVelocity", - "type": { - "name": "float32", - "category": 0 - }, - "metadata": [ - ] - }, { "name": "m_vecLadderNormal", "type": { @@ -14420,24 +14447,6 @@ "metadata": [ ] }, - { - "name": "m_flJumpUntil", - "type": { - "name": "float32", - "category": 0 - }, - "metadata": [ - ] - }, - { - "name": "m_flJumpVel", - "type": { - "name": "float32", - "category": 0 - }, - "metadata": [ - ] - }, { "name": "m_fStashGrenadeParameterWhen", "type": { @@ -14506,19 +14515,19 @@ "fields": [ ] }, - "CBasePlayerVData": { - "parent": "CEntitySubclassVDataBase", + "CEnvSoundscapeTriggerableAlias_snd_soundscape_triggerable": { + "parent": "CEnvSoundscapeTriggerable", "metadata": [ - { - "name": "MGetKV3ClassDefaults" - } ], "fields": [ ] }, - "CEnvSoundscapeTriggerableAlias_snd_soundscape_triggerable": { - "parent": "CEnvSoundscapeTriggerable", + "CBasePlayerVData": { + "parent": "CEntitySubclassVDataBase", "metadata": [ + { + "name": "MGetKV3ClassDefaults" + } ], "fields": [ ] @@ -19049,6 +19058,20 @@ "metadata": [ ] }, + { + "name": "m_BackgroundMaterialName", + "type": { + "name": "char[64]", + "category": 3, + "arraySize": 64, + "inner": { + "name": "char", + "category": 0 + } + }, + "metadata": [ + ] + }, { "name": "m_bEnabled", "type": { @@ -19094,6 +19117,42 @@ "metadata": [ ] }, + { + "name": "m_bDrawBackground", + "type": { + "name": "bool", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_flBackgroundBorderWidth", + "type": { + "name": "float32", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_flBackgroundBorderHeight", + "type": { + "name": "float32", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_flBackgroundWorldToUV", + "type": { + "name": "float32", + "category": 0 + }, + "metadata": [ + ] + }, { "name": "m_Color", "type": { @@ -22208,20 +22267,37 @@ ] }, { - "name": "m_vecKills", + "name": "m_recentKillQueue", "type": { - "name": "CNetworkUtlVectorBase< EKillTypes_t >", - "category": 4, - "atomic": 2, - "outer": "CNetworkUtlVectorBase", + "name": "uint8[8]", + "category": 3, + "arraySize": 8, "inner": { - "name": "EKillTypes_t", - "category": 6 + "name": "uint8", + "category": 0 } }, "metadata": [ ] }, + { + "name": "m_nFirstKill", + "type": { + "name": "uint8", + "category": 0 + }, + "metadata": [ + ] + }, + { + "name": "m_nKillCount", + "type": { + "name": "uint8", + "category": 0 + }, + "metadata": [ + ] + }, { "name": "m_bMvpNoMusic", "type": { @@ -22270,6 +22346,19 @@ "value": "OnMVPCountChanged" } ] + }, + { + "name": "m_bFireBulletsSeedSynchronized", + "type": { + "name": "bool", + "category": 0 + }, + "metadata": [ + { + "name": "MNetworkUserGroup", + "value": "LocalPlayerExclusive" + } + ] } ] }, @@ -22958,13 +23047,6 @@ "fields": [ ] }, - "CCSPlayer_DamageReactServices": { - "parent": "CPlayerPawnComponent", - "metadata": [ - ], - "fields": [ - ] - }, "ServerAuthoritativeWeaponSlot_t": { "metadata": [ ], @@ -22998,6 +23080,13 @@ } ] }, + "CCSPlayer_DamageReactServices": { + "parent": "CPlayerPawnComponent", + "metadata": [ + ], + "fields": [ + ] + }, "CCSGameRules": { "parent": "CTeamplayRules", "metadata": [ diff --git a/src/DemoFile.Game.Cs/Sdk/Schema.cs b/src/DemoFile.Game.Cs/Sdk/Schema.cs index e7483c5..9587b0d 100644 --- a/src/DemoFile.Game.Cs/Sdk/Schema.cs +++ b/src/DemoFile.Game.Cs/Sdk/Schema.cs @@ -1,5 +1,5 @@ // -// Generated from protocol v14034 +// Generated from protocol v14065 #nullable enable #pragma warning disable CS1591 @@ -8282,8 +8282,6 @@ public partial class CCSPlayer_ItemServices : CPlayer_ItemServices public partial class CCSPlayer_MovementServices : CPlayer_MovementServices_Humanoid { - public float MaxFallVelocity { get; private set; } - // MNetworkEncoder "normal" public Vector LadderNormal { get; private set; } @@ -8315,10 +8313,6 @@ public partial class CCSPlayer_MovementServices : CPlayer_MovementServices_Human public bool OldJumpPressed { get; private set; } - public float JumpUntil { get; private set; } - - public float JumpVel { get; private set; } - public GameTime StashGrenadeParameterWhen { get; private set; } = new(); public UInt64 ButtonDownMaskPrev { get; private set; } @@ -8331,14 +8325,6 @@ public partial class CCSPlayer_MovementServices : CPlayer_MovementServices_Human internal new static SendNodeDecoder CreateFieldDecoder(SerializableField field, DecoderSet decoderSet) { - if (field.VarName == "m_flMaxFallVelocity") - { - var decoder = FieldDecode.CreateDecoder_float(field.FieldEncodingInfo); - return (CCSPlayer_MovementServices @this, ReadOnlySpan path, ref BitBuffer buffer) => - { - @this.MaxFallVelocity = decoder(ref buffer); - }; - } if (field.VarName == "m_vecLadderNormal") { var decoder = FieldDecode.CreateDecoder_Vector(field.FieldEncodingInfo); @@ -8435,22 +8421,6 @@ public partial class CCSPlayer_MovementServices : CPlayer_MovementServices_Human @this.OldJumpPressed = decoder(ref buffer); }; } - if (field.VarName == "m_flJumpUntil") - { - var decoder = FieldDecode.CreateDecoder_float(field.FieldEncodingInfo); - return (CCSPlayer_MovementServices @this, ReadOnlySpan path, ref BitBuffer buffer) => - { - @this.JumpUntil = decoder(ref buffer); - }; - } - if (field.VarName == "m_flJumpVel") - { - var decoder = FieldDecode.CreateDecoder_float(field.FieldEncodingInfo); - return (CCSPlayer_MovementServices @this, ReadOnlySpan path, ref BitBuffer buffer) => - { - @this.JumpVel = decoder(ref buffer); - }; - } if (field.VarName == "m_fStashGrenadeParameterWhen") { var decoder = FieldDecode.CreateDecoder_GameTime(field.FieldEncodingInfo); @@ -8761,7 +8731,11 @@ internal CCSPlayerController(CsDemoParser.EntityContext context, SendNodeDecoder public Int32 Score { get; private set; } - public NetworkedVector Kills { get; private set; } = new NetworkedVector(); + public byte[] RecentKillQueue { get; private set; } = Array.Empty(); + + public byte FirstKill { get; private set; } + + public byte KillCount { get; private set; } public bool MvpNoMusic { get; private set; } @@ -8774,6 +8748,9 @@ internal CCSPlayerController(CsDemoParser.EntityContext context, SendNodeDecoder // MNetworkChangeCallback "OnMVPCountChanged" public Int32 MVPs { get; private set; } + // MNetworkUserGroup "LocalPlayerExclusive" + public bool FireBulletsSeedSynchronized { get; private set; } + internal new static SendNodeDecoder CreateFieldDecoder(SerializableField field, DecoderSet decoderSet) { if (field.VarName == "m_pInGameMoneyServices") @@ -9156,24 +9133,30 @@ internal CCSPlayerController(CsDemoParser.EntityContext context, SendNodeDecoder @this.Score = decoder(ref buffer); }; } - if (field.VarName == "m_vecKills") + if (field.VarName == "m_recentKillQueue") { - var decoder = FieldDecode.CreateDecoder_enum(field.FieldEncodingInfo); + var fixedArraySize = field.VarType.ArrayLength; + var decoder = FieldDecode.CreateDecoder_byte(field.FieldEncodingInfo); return (CCSPlayerController @this, ReadOnlySpan path, ref BitBuffer buffer) => { - if (path.Length == 1) - { - var newSize = (int)buffer.ReadUVarInt32(); - @this.Kills.Resize(newSize); - } - else - { - Debug.Assert(path.Length == 2); - var index = path[1]; - @this.Kills.EnsureSize(index + 1); - var element = decoder(ref buffer); - @this.Kills[index] = element; - } + if (@this.RecentKillQueue.Length == 0) @this.RecentKillQueue = new byte[fixedArraySize]; + @this.RecentKillQueue[path[1]] = decoder(ref buffer); + }; + } + if (field.VarName == "m_nFirstKill") + { + var decoder = FieldDecode.CreateDecoder_byte(field.FieldEncodingInfo); + return (CCSPlayerController @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.FirstKill = decoder(ref buffer); + }; + } + if (field.VarName == "m_nKillCount") + { + var decoder = FieldDecode.CreateDecoder_byte(field.FieldEncodingInfo); + return (CCSPlayerController @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.KillCount = decoder(ref buffer); }; } if (field.VarName == "m_bMvpNoMusic") @@ -9216,6 +9199,14 @@ internal CCSPlayerController(CsDemoParser.EntityContext context, SendNodeDecoder @this.MVPs = decoder(ref buffer); }; } + if (field.VarName == "m_bFireBulletsSeedSynchronized") + { + var decoder = FieldDecode.CreateDecoder_bool(field.FieldEncodingInfo); + return (CCSPlayerController @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.FireBulletsSeedSynchronized = decoder(ref buffer); + }; + } return CBasePlayerController.CreateFieldDecoder(field, decoderSet); } @@ -10930,6 +10921,8 @@ internal CCSWeaponBase(CsDemoParser.EntityContext context, SendNodeDecoder PrevOwnerHandle { get; private set; } public CCSPlayerPawn? PrevOwner => PrevOwnerHandle.Get(Demo); @@ -11127,6 +11120,14 @@ internal CCSWeaponBase(CsDemoParser.EntityContext context, SendNodeDecoder path, ref BitBuffer buffer) => + { + @this.NextPrevOwnerUseTime = decoder(ref buffer); + }; + } if (field.VarName == "m_hPrevOwner") { var decoder = FieldDecode.CreateDecoder_CHandle(field.FieldEncodingInfo); @@ -17564,8 +17565,18 @@ public partial class CKnife : CCSWeaponBase { internal CKnife(CsDemoParser.EntityContext context, SendNodeDecoder decoder) : base(context, decoder) {} + public bool FirstAttack { get; private set; } + internal new static SendNodeDecoder CreateFieldDecoder(SerializableField field, DecoderSet decoderSet) { + if (field.VarName == "m_bFirstAttack") + { + var decoder = FieldDecode.CreateDecoder_bool(field.FieldEncodingInfo); + return (CKnife @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.FirstAttack = decoder(ref buffer); + }; + } return CCSWeaponBase.CreateFieldDecoder(field, decoderSet); } @@ -22414,6 +22425,8 @@ internal CPointWorldText(CsDemoParser.EntityContext context, SendNodeDecoder path, ref BitBuffer buffer) => + { + @this.BackgroundMaterialName = decoder(ref buffer); + }; + } if (field.VarName == "m_bEnabled") { var decoder = FieldDecode.CreateDecoder_bool(field.FieldEncodingInfo); @@ -22490,6 +22519,38 @@ internal CPointWorldText(CsDemoParser.EntityContext context, SendNodeDecoder path, ref BitBuffer buffer) => + { + @this.DrawBackground = decoder(ref buffer); + }; + } + if (field.VarName == "m_flBackgroundBorderWidth") + { + var decoder = FieldDecode.CreateDecoder_float(field.FieldEncodingInfo); + return (CPointWorldText @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.BackgroundBorderWidth = decoder(ref buffer); + }; + } + if (field.VarName == "m_flBackgroundBorderHeight") + { + var decoder = FieldDecode.CreateDecoder_float(field.FieldEncodingInfo); + return (CPointWorldText @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.BackgroundBorderHeight = decoder(ref buffer); + }; + } + if (field.VarName == "m_flBackgroundWorldToUV") + { + var decoder = FieldDecode.CreateDecoder_float(field.FieldEncodingInfo); + return (CPointWorldText @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.BackgroundWorldToUV = decoder(ref buffer); + }; + } if (field.VarName == "m_Color") { var decoder = FieldDecode.CreateDecoder_Color(field.FieldEncodingInfo); @@ -23976,6 +24037,10 @@ internal CSmokeGrenadeProjectile(CsDemoParser.EntityContext context, SendNodeDec public NetworkedVector VoxelFrameData { get; private set; } = new NetworkedVector(); + public Int32 VoxelFrameDataSize { get; private set; } + + public Int32 VoxelUpdate { get; private set; } + internal new static SendNodeDecoder CreateFieldDecoder(SerializableField field, DecoderSet decoderSet) { if (field.VarName == "m_nSmokeEffectTickBegin") @@ -24038,6 +24103,22 @@ internal CSmokeGrenadeProjectile(CsDemoParser.EntityContext context, SendNodeDec } }; } + if (field.VarName == "m_nVoxelFrameDataSize") + { + var decoder = FieldDecode.CreateDecoder_Int32(field.FieldEncodingInfo); + return (CSmokeGrenadeProjectile @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.VoxelFrameDataSize = decoder(ref buffer); + }; + } + if (field.VarName == "m_nVoxelUpdate") + { + var decoder = FieldDecode.CreateDecoder_Int32(field.FieldEncodingInfo); + return (CSmokeGrenadeProjectile @this, ReadOnlySpan path, ref BitBuffer buffer) => + { + @this.VoxelUpdate = decoder(ref buffer); + }; + } return CBaseCSGrenadeProjectile.CreateFieldDecoder(field, decoderSet); } diff --git a/src/DemoFile.Test/GlobalUtil.cs b/src/DemoFile.Test/GlobalUtil.cs index b0f3a38..692e335 100644 --- a/src/DemoFile.Test/GlobalUtil.cs +++ b/src/DemoFile.Test/GlobalUtil.cs @@ -33,6 +33,8 @@ public static class GlobalUtil public static byte[] GotvProtocol14034 { get; } = File.ReadAllBytes(Path.Combine(DemoBase, "14034.dem")); + public static byte[] GotvProtocol14065 { get; } = File.ReadAllBytes(Path.Combine(DemoBase, "14065.dem")); + public static byte[] ToBitStream(string input) { var bitArray = new BitArray(input.Length); diff --git a/src/DemoFile.Test/Integration/DemoParserIntegrationTest.cs b/src/DemoFile.Test/Integration/DemoParserIntegrationTest.cs index dad42ea..3e1be75 100644 --- a/src/DemoFile.Test/Integration/DemoParserIntegrationTest.cs +++ b/src/DemoFile.Test/Integration/DemoParserIntegrationTest.cs @@ -54,6 +54,7 @@ public record CompatibilityTestCase( new("v14011", GotvProtocol14011, new DemoTick(391)), new("pov_14000", Pov14000, new DemoTick(127743)), new("v14034", GotvProtocol14034, new DemoTick(210)), + new("v14065", GotvProtocol14065, new DemoTick(185)), }; [Test] diff --git a/version.json b/version.json index 814cb7a..5434a85 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "0.27.1", + "version": "0.28.1", "publicReleaseRefSpec": [ "^refs/heads/main", "^refs/heads/v\\d+(?:\\.\\d+)?$" From 511e29ef922f62fb73959e26950b2f74328c4c5c Mon Sep 17 00:00:00 2001 From: Saul Rennison Date: Thu, 30 Jan 2025 19:39:31 +0000 Subject: [PATCH 2/3] Add support for DemRecovery --- src/DemoFile/DemoEvents.cs | 4 + src/DemoFile/Protobufs/demo.proto | 17 ++- src/DemoFile/Protobufs/gameevents.proto | 2 +- src/DemoFile/Protobufs/netmessages.proto | 113 ++++++++++++++++-- .../Protobufs/network_connection.proto | 6 +- src/DemoFile/Protobufs/networkbasetypes.proto | 13 +- src/DemoFile/Protobufs/te.proto | 5 +- src/DemoFile/Protobufs/usermessages.proto | 27 ++++- 8 files changed, 158 insertions(+), 29 deletions(-) diff --git a/src/DemoFile/DemoEvents.cs b/src/DemoFile/DemoEvents.cs index a514f73..e5eb300 100644 --- a/src/DemoFile/DemoEvents.cs +++ b/src/DemoFile/DemoEvents.cs @@ -64,6 +64,9 @@ internal bool ReadDemoCommand(EDemoCommands msgType, ReadOnlySpan buffer, case EDemoCommands.DemAnimationHeader: DemoAnimationHeader?.Invoke(CDemoAnimationHeader.Parser.ParseFrom(buffer)); return true; + case EDemoCommands.DemRecovery: + DemoRecovery?.Invoke(CDemoRecovery.Parser.ParseFrom(buffer)); + return true; default: throw new ArgumentOutOfRangeException(nameof(msgType), msgType, $"Unknown demo command: {msgType}"); } @@ -105,4 +108,5 @@ private static void ReadDemoCommandCore(Action? callback, MessageParser public Action? DemoSpawnGroups; public Action? DemoAnimationData; public Action? DemoAnimationHeader; + public Action? DemoRecovery; } diff --git a/src/DemoFile/Protobufs/demo.proto b/src/DemoFile/Protobufs/demo.proto index f57f7a7..a58617a 100644 --- a/src/DemoFile/Protobufs/demo.proto +++ b/src/DemoFile/Protobufs/demo.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; enum EDemoCommands { DEM_Error = -1; @@ -20,7 +20,8 @@ enum EDemoCommands { DEM_SpawnGroups = 15; DEM_AnimationData = 16; DEM_AnimationHeader = 17; - DEM_Max = 18; + DEM_Recovery = 18; + DEM_Max = 19; DEM_IsCompressed = 64; } @@ -55,7 +56,7 @@ message CGameInfo { message CHeroSelectEvent { optional bool is_pick = 1; optional uint32 team = 2; - optional uint32 hero_id = 3; + optional int32 hero_id = 3; } optional uint64 match_id = 1; @@ -173,3 +174,13 @@ message CDemoUserCmd { message CDemoSpawnGroups { repeated bytes msgs = 3; } + +message CDemoRecovery { + message DemoInitialSpawnGroupEntry { + optional uint32 spawngrouphandle = 1; + optional bool was_created = 2; + } + + optional .CDemoRecovery.DemoInitialSpawnGroupEntry initial_spawn_group = 1; + optional bytes spawn_group_message = 2; +} diff --git a/src/DemoFile/Protobufs/gameevents.proto b/src/DemoFile/Protobufs/gameevents.proto index 9d10f80..125dee1 100644 --- a/src/DemoFile/Protobufs/gameevents.proto +++ b/src/DemoFile/Protobufs/gameevents.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; diff --git a/src/DemoFile/Protobufs/netmessages.proto b/src/DemoFile/Protobufs/netmessages.proto index 4cf048a..8a8c7de 100644 --- a/src/DemoFile/Protobufs/netmessages.proto +++ b/src/DemoFile/Protobufs/netmessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; @@ -7,19 +7,17 @@ enum CLC_Messages { clc_Move = 21; clc_VoiceData = 22; clc_BaselineAck = 23; - clc_ListenEvents = 24; clc_RespondCvarValue = 25; clc_FileCRCCheck = 26; clc_LoadingProgress = 27; clc_SplitPlayerConnect = 28; - clc_ClientMessage = 29; clc_SplitPlayerDisconnect = 30; clc_ServerStatus = 31; - clc_ServerPing = 32; clc_RequestPause = 33; clc_CmdKeyValues = 34; clc_RconServerDetails = 35; clc_HltvReplay = 36; + clc_Diagnostic = 37; } enum SVC_Messages { @@ -50,7 +48,6 @@ enum SVC_Messages { svc_FullFrameSplit = 70; svc_RconServerDetails = 71; svc_UserMessage = 72; - svc_HltvReplay = 73; svc_Broadcast_Command = 74; svc_HltvFixupOperatorStatus = 75; svc_UserCmds = 76; @@ -125,8 +122,7 @@ message CCLCMsg_ClientInfo { message CCLCMsg_Move { optional bytes data = 3; - optional uint32 command_number = 4; - optional uint32 num_commands = 5; + optional uint32 last_command_number = 4; } message CMsgVoiceAudio { @@ -179,11 +175,6 @@ message CCLCMsg_SplitPlayerConnect { optional string playername = 1; } -message CCLCMsg_ClientMessage { - optional int32 msg_type = 1; - optional bytes data = 2; -} - message CCLCMsg_SplitPlayerDisconnect { optional int32 slot = 1; } @@ -205,6 +196,101 @@ message CCLCMsg_RconServerDetails { optional bytes token = 1; } +message CMsgSource2SystemSpecs { + optional string cpu_id = 1; + optional string cpu_brand = 2; + optional uint32 cpu_model = 3; + optional uint32 cpu_num_physical = 4; + optional uint32 ram_physical_total_mb = 21; + optional string gpu_rendersystem_dll_name = 41; + optional uint32 gpu_vendor_id = 42; + optional string gpu_driver_name = 43; + optional uint32 gpu_driver_version_high = 44; + optional uint32 gpu_driver_version_low = 45; + optional uint32 gpu_dx_support_level = 46; + optional uint32 gpu_texture_memory_size_mb = 47; +} + +message CMsgSource2VProfLiteReportItem { + optional string name = 1; + optional uint32 active_samples = 2; + optional uint32 active_samples_1secmax = 4; + optional uint32 usec_max = 3; + optional uint32 usec_avg_active = 11; + optional uint32 usec_p50_active = 12; + optional uint32 usec_p99_active = 13; + optional uint32 usec_avg_all = 21; + optional uint32 usec_p50_all = 22; + optional uint32 usec_p99_all = 23; + optional uint32 usec_1secmax_avg_active = 31; + optional uint32 usec_1secmax_p50_active = 32; + optional uint32 usec_1secmax_p95_active = 33; + optional uint32 usec_1secmax_p99_active = 34; + optional uint32 usec_1secmax_avg_all = 41; + optional uint32 usec_1secmax_p50_all = 42; + optional uint32 usec_1secmax_p95_all = 43; + optional uint32 usec_1secmax_p99_all = 44; +} + +message CMsgSource2VProfLiteReport { + optional .CMsgSource2VProfLiteReportItem total = 1; + repeated .CMsgSource2VProfLiteReportItem items = 2; + optional uint32 discarded_frames = 3; +} + +message CMsgSource2NetworkFlowQuality { + optional uint32 duration = 1; + optional uint64 bytes_total = 5; + optional uint64 bytes_total_reliable = 6; + optional uint64 bytes_total_voice = 7; + optional uint32 bytes_sec_p95 = 10; + optional uint32 bytes_sec_p99 = 11; + optional uint32 enginemsgs_total = 20; + optional uint32 enginemsgs_sec_p95 = 21; + optional uint32 enginemsgs_sec_p99 = 22; + optional uint32 ticks_total = 40; + optional uint32 ticks_good = 41; + optional uint32 ticks_good_almost_late = 42; + optional uint32 ticks_fixed_dropped = 43; + optional uint32 ticks_fixed_late = 44; + optional uint32 ticks_bad_dropped = 45; + optional uint32 ticks_bad_late = 46; + optional uint32 ticks_bad_other = 47; + optional uint32 tick_missrate_samples_total = 50; + optional uint32 tick_missrate_samples_perfect = 51; + optional uint32 tick_missrate_samples_perfectnet = 52; + optional uint32 tick_missratenet_p75_x10 = 53; + optional uint32 tick_missratenet_p95_x10 = 54; + optional uint32 tick_missratenet_p99_x10 = 55; + optional sint32 recvmargin_p1 = 61; + optional sint32 recvmargin_p5 = 62; + optional sint32 recvmargin_p25 = 63; + optional sint32 recvmargin_p50 = 64; + optional sint32 recvmargin_p75 = 65; + optional sint32 recvmargin_p95 = 66; +} + +message CCLCMsg_Diagnostic { + optional .CMsgSource2SystemSpecs system_specs = 1; + optional .CMsgSource2VProfLiteReport vprof_report = 2; +} + +message CSource2Metrics_MatchPerfSummary_Notification { + message Client { + optional .CMsgSource2SystemSpecs system_specs = 1; + optional .CMsgSource2VProfLiteReport profile = 2; + optional uint32 build_id = 3; + optional fixed64 steamid = 10; + } + + optional uint32 appid = 1; + optional string game_mode = 2; + optional uint32 server_build_id = 3; + optional .CMsgSource2VProfLiteReport server_profile = 10; + repeated .CSource2Metrics_MatchPerfSummary_Notification.Client clients = 11; + optional string map = 20; +} + message CSVCMsg_ServerInfo { optional int32 protocol = 1; optional int32 server_count = 2; @@ -385,7 +471,7 @@ message CSVCMsg_PacketEntities { optional bytes serialized_entities = 13; repeated .CSVCMsg_PacketEntities.alternate_baseline_t alternate_baselines = 15; optional uint32 has_pvs_vis_bits = 16; - optional uint32 last_cmd_recv_margin = 18; + repeated sint32 cmd_recv_status = 22 [packed = true]; optional .CSVCMsg_PacketEntities.non_transmitted_entities_t non_transmitted_entities = 19; optional uint32 cq_starved_command_ticks = 20; optional uint32 cq_discarded_command_ticks = 21; @@ -618,6 +704,7 @@ message CMsgServerUserCmd { optional int32 cmd_number = 2; optional int32 player_slot = 3 [default = -1]; optional int32 server_tick_executed = 4; + optional int32 client_tick = 5; } message CSVCMsg_UserCommands { diff --git a/src/DemoFile/Protobufs/network_connection.proto b/src/DemoFile/Protobufs/network_connection.proto index dbade48..e148d22 100644 --- a/src/DemoFile/Protobufs/network_connection.proto +++ b/src/DemoFile/Protobufs/network_connection.proto @@ -1,9 +1,10 @@ -syntax = "proto2"; +syntax = "proto2"; import "google/protobuf/descriptor.proto"; extend .google.protobuf.EnumValueOptions { optional string network_connection_token = 50500; + optional string network_connection_detail_token = 50501; } enum ENetworkDisconnectionReason { @@ -125,4 +126,7 @@ enum ENetworkDisconnectionReason { NETWORK_DISCONNECT_KICKED_SUICIDE = 159 [(network_connection_token) = "#Player_DisconnectReason_Suicide"]; NETWORK_DISCONNECT_KICKED_NOSTEAMLOGIN = 160 [(network_connection_token) = "#Player_DisconnectReason_NoSteamLogin"]; NETWORK_DISCONNECT_KICKED_NOSTEAMTICKET = 161 [(network_connection_token) = "#Player_DisconnectReason_NoSteamTicket"]; + NETWORK_DISCONNECT_KICKED_INPUTAUTOMATION = 162 [(network_connection_token) = "#Player_DisconnectReason_InputAutomation", (network_connection_detail_token) = "#Player_DisconnectReason_InputAutomation_Detail"]; + NETWORK_DISCONNECT_KICKED_VACNETABNORMALBEHAVIOR = 163 [(network_connection_token) = "#Player_DisconnectReason_VacNetAbnormalBehavior"]; + NETWORK_DISCONNECT_KICKED_INSECURECLIENT = 164 [(network_connection_token) = "#Player_DisconnectReason_InsecureClient"]; } diff --git a/src/DemoFile/Protobufs/networkbasetypes.proto b/src/DemoFile/Protobufs/networkbasetypes.proto index 1066857..5ef5b2a 100644 --- a/src/DemoFile/Protobufs/networkbasetypes.proto +++ b/src/DemoFile/Protobufs/networkbasetypes.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "network_connection.proto"; @@ -107,22 +107,17 @@ message CNETMsg_SplitScreenUser { optional int32 slot = 1; } -message CNETMsg_Disconnect_Legacy { - optional .ENetworkDisconnectionReason reason = 2 [default = NETWORK_DISCONNECT_INVALID]; -} - message CNETMsg_Tick { optional uint32 tick = 1; - optional uint32 host_frametime = 2; - optional uint32 host_frametime_std_deviation = 3; optional uint32 host_computationtime = 4; optional uint32 host_computationtime_std_deviation = 5; - optional uint32 host_framestarttime_std_deviation = 6; - optional uint32 host_loss = 7; + optional uint32 legacy_host_loss = 7; optional uint32 host_unfiltered_frametime = 8; optional uint32 hltv_replay_flags = 9; optional uint32 expected_long_tick = 10; optional string expected_long_tick_reason = 11; + optional uint32 host_frame_dropped_pct_x10 = 12; + optional uint32 host_frame_irregular_arrival_pct_x10 = 13; } message CNETMsg_StringCmd { diff --git a/src/DemoFile/Protobufs/te.proto b/src/DemoFile/Protobufs/te.proto index 6568f46..3c53fec 100644 --- a/src/DemoFile/Protobufs/te.proto +++ b/src/DemoFile/Protobufs/te.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; @@ -199,6 +199,9 @@ message CMsgTEExplosion { optional bool affect_ragdolls = 9; optional string effect_name = 10; optional uint32 explosion_type = 11; + optional bool create_debris = 12; + optional .CMsgVector debris_origin = 13; + optional fixed32 debris_surfaceprop = 14; } message CMsgTEDust { diff --git a/src/DemoFile/Protobufs/usermessages.proto b/src/DemoFile/Protobufs/usermessages.proto index ac27b04..8c006b8 100644 --- a/src/DemoFile/Protobufs/usermessages.proto +++ b/src/DemoFile/Protobufs/usermessages.proto @@ -1,4 +1,4 @@ -syntax = "proto2"; +syntax = "proto2"; import "networkbasetypes.proto"; @@ -109,6 +109,8 @@ enum PARTICLE_MESSAGE { GAME_PARTICLE_MANAGER_EVENT_CLEAR_MODELLIST_OVERRIDE = 31; GAME_PARTICLE_MANAGER_EVENT_CREATE_PHYSICS_SIM = 32; GAME_PARTICLE_MANAGER_EVENT_DESTROY_PHYSICS_SIM = 33; + GAME_PARTICLE_MANAGER_EVENT_SET_VDATA = 34; + GAME_PARTICLE_MANAGER_EVENT_SET_MATERIAL_OVERRIDE = 35; } enum EHapticPulseType { @@ -352,6 +354,7 @@ message CUserMsg_ParticleManager { optional string control_point_configuration = 7; optional bool cluster = 8; optional float endcap_time = 9; + optional .CMsgVector aggregation_position = 10; } message DestroyParticle { @@ -533,11 +536,22 @@ message CUserMsg_ParticleManager { message CreatePhysicsSim { optional string prop_group_name = 1; + optional bool use_high_quality_simulation = 2; + optional uint32 max_particle_count = 3; } message DestroyPhysicsSim { } + message SetVData { + optional string vdata_name = 1; + } + + message SetMaterialOverride { + optional string material_name = 1; + optional bool include_children = 2; + } + required .PARTICLE_MESSAGE type = 1 [default = GAME_PARTICLE_MANAGER_EVENT_CREATE]; required uint32 index = 2; optional .CUserMsg_ParticleManager.ReleaseParticleIndex release_particle_index = 3; @@ -573,6 +587,8 @@ message CUserMsg_ParticleManager { optional .CUserMsg_ParticleManager.ClearModellistOverride clear_modellist_override = 34; optional .CUserMsg_ParticleManager.CreatePhysicsSim create_physics_sim = 35; optional .CUserMsg_ParticleManager.DestroyPhysicsSim destroy_physics_sim = 36; + optional .CUserMsg_ParticleManager.SetVData set_vdata = 37; + optional .CUserMsg_ParticleManager.SetMaterialOverride set_material_override = 38; extensions 100 to 201; } @@ -779,6 +795,13 @@ message CUserMessage_NotifyResponseFound { optional string response_value = 3; optional string response_concept = 4; repeated .CUserMessage_NotifyResponseFound.Criteria criteria = 5; + repeated uint32 int_criteria_names = 6 [packed = true]; + repeated int32 int_criteria_values = 7 [packed = true]; + repeated uint32 float_criteria_names = 8 [packed = true]; + repeated float float_criteria_values = 9; + repeated uint32 symbol_criteria_names = 10 [packed = true]; + repeated uint32 symbol_criteria_values = 11 [packed = true]; + optional int32 speak_result = 12; } message CUserMessage_PlayResponseConditional { @@ -786,4 +809,6 @@ message CUserMessage_PlayResponseConditional { repeated int32 player_slots = 2; optional string response = 3; optional .CMsgVector ent_origin = 4; + optional float pre_delay = 5; + optional int32 mix_priority = 6; } From d3543a60cb0ac79384094f8aa6b31a526c23d350 Mon Sep 17 00:00:00 2001 From: Saul Rennison Date: Thu, 30 Jan 2025 19:44:48 +0000 Subject: [PATCH 3/3] Fix build --- RELEASE_NOTES.md | 1 + examples/DemoFile.Example.Chat/DemoFile.Example.Chat.csproj | 2 +- .../DemoFile.Example.VoiceExtraction.csproj | 2 +- src/DemoFile.Benchmark/DemoFile.Benchmark.csproj | 2 +- src/DemoFile/PacketEvents.cs | 4 ---- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 99e7d21..3e47fb1 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,6 +1,7 @@ ### 0.28.1 (2025-01-30) - Update to latest CS2 schema (v14065) +- Add support for new `DemRecovery` message ### 0.27.1 (2024-11-02) diff --git a/examples/DemoFile.Example.Chat/DemoFile.Example.Chat.csproj b/examples/DemoFile.Example.Chat/DemoFile.Example.Chat.csproj index e48bd07..0a05780 100644 --- a/examples/DemoFile.Example.Chat/DemoFile.Example.Chat.csproj +++ b/examples/DemoFile.Example.Chat/DemoFile.Example.Chat.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net7.0 enable enable diff --git a/examples/DemoFile.Example.VoiceExtraction/DemoFile.Example.VoiceExtraction.csproj b/examples/DemoFile.Example.VoiceExtraction/DemoFile.Example.VoiceExtraction.csproj index c76d93e..93d4f0a 100644 --- a/examples/DemoFile.Example.VoiceExtraction/DemoFile.Example.VoiceExtraction.csproj +++ b/examples/DemoFile.Example.VoiceExtraction/DemoFile.Example.VoiceExtraction.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net7.0 enable enable true diff --git a/src/DemoFile.Benchmark/DemoFile.Benchmark.csproj b/src/DemoFile.Benchmark/DemoFile.Benchmark.csproj index fef731b..06ddeb6 100644 --- a/src/DemoFile.Benchmark/DemoFile.Benchmark.csproj +++ b/src/DemoFile.Benchmark/DemoFile.Benchmark.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net7.0 enable enable $(DefineConstants);BASELINE diff --git a/src/DemoFile/PacketEvents.cs b/src/DemoFile/PacketEvents.cs index fdf6078..8352c8d 100644 --- a/src/DemoFile/PacketEvents.cs +++ b/src/DemoFile/PacketEvents.cs @@ -4,7 +4,6 @@ namespace DemoFile; public struct PacketEvents { - public Action? NetDisconnect; public Action? NetSplitScreenUser; public Action? NetTick; public Action? NetStringCmd; @@ -52,9 +51,6 @@ internal bool ParseNetMessage(int msgType, ReadOnlySpan buf) { switch (msgType) { - case (int)NET_Messages.NetDisconnectLegacy: - NetDisconnect?.Invoke(CNETMsg_Disconnect_Legacy.Parser.ParseFrom(buf)); - return true; case (int)NET_Messages.NetSplitScreenUser: NetSplitScreenUser?.Invoke(CNETMsg_SplitScreenUser.Parser.ParseFrom(buf)); return true;