From 4ec6a912ce74e4969a1353a43d55ef38bc6da46d Mon Sep 17 00:00:00 2001 From: Chomp Date: Mon, 21 Mar 2022 15:30:58 +0000 Subject: [PATCH] Further 2.3.0 work --- .../BepInEx/plugins/astealz.SmartSpawn.dll | Bin 53760 -> 56832 bytes ...otSpawnerPatches.BotSpawnerOnStartPatch.cs | 3 +- ...otSpawnerPatches.MaxBotsAliveOnMapPatch.cs | 6 +- src/Patches/BotSpawnerPatches.cs | 72 ++++++++++++++---- src/SmartSpawnPlugin.cs | 17 +++-- src/Utils/GenericPatch`.cs | 24 ++++-- 6 files changed, 90 insertions(+), 32 deletions(-) diff --git a/astealz-SmartSpawnController/BepInEx/plugins/astealz.SmartSpawn.dll b/astealz-SmartSpawnController/BepInEx/plugins/astealz.SmartSpawn.dll index cf657dafce0d8fe3dc423189f6b8e5486ed87cbf..4a5814bb1cb3fb293abafca3941257ed2390b56e 100644 GIT binary patch literal 56832 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

v7CqkTZr{L}UIX=`1~%+a;40JlDB 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 literal 53760 zcmd44349#I(KlQ(vpaj}KD?48Tc;&0y6^?qV8F5@+X7!$@_`N5YiTVnmNfFLWLp+8 za?BCJ=|BjC8v+RlA>nwq31Nc2|}md7d}l`}-EQ zrmDKTy1Kf$`j}pM@tTXsAR-UGpM6Gj51#y)EAWfKD3UWv@5`h+1J9PgYtd(eyX3&R!(f`Y> z?JcS(OVg$jJqeCqaew^{He?v6uz_c%-%Mz+fE^Q!)ghys0{EaIB^mjIg$PX?TQ{)JsNKHNE1q&rUymgq6}m z=cB>e2vY*%ogOb>OL0X>OXYx)UJwKd<+=<(z{qnMf`F0lG6dPkeKC6M z2&Y10<~h>yrW$l1Iv4-v>@CMLT!{K@kp1C_z=Eb##0==B7-@Tv!O4aEika?Lxejv~ z8GFkTxsGRMF@#iElUURWm(KI#coeJKWmTt0-{K0(^X7P!e1rg1VV>!-zLqHJh`%wx zFiYoz(U7`PIG@J{LT3WK;qkjEFt#TE0{&VziiUX()EnMgHwr^|Qk54b%raJgcz4|> z+Ud#hy5iAZPY$aA7q1(gENQAGqPEB>0asZ;G>13Ujh2E}D}IJl9{xGH1^228n&-i5 zi}S~DmPCJ!)Rpn_r*&IHr8YPZX?McXG)3|ckFs21@ zT(^hXT)C-v*h~qrWgr?R`K&OC*mtAD^Yg=p01sot)s1rMP6jX#njFNJis9!Lp6H|; zJzU4-o<%vUo=Y_V==;rSh{*9q;MSp>K2f87y9OXUmB|QW$Px^H8TrB(&voIMjBN)P zg?&A5}?O$!mC zF3p!<_`>bTzLP7d&vn$_g@U4fUADu)IR3l_9gYeRbHhjQvuG!}+yin{p70%mj)FdL zy`21D7`mGl>|};f%FHEe778_#+RwA5%(AO=*A(3#8jcGH3jCmZK*eb$jktZFc;Rj!R;WHuZ0{Ms-Q%wgyk3Vngv>nOVZ0mzRP!Em-gIrN2=OUK5Chx8KOjrTroJWU)05j9=#0 z`r$0xUplN&9wvlm9$O~WB9Oqja`gOgGs{V{XP|-c7T`PfqCv$HH+31@Rx7v-W%gp^ zP@H6r@O-4j7jQAXz*>kW_d7g3SU<_WTM8TpLbnh#gDUePU_0zQgZh(VEY4(?gQp7` zUJN>!TyQ=@yjB(3o8v~|>y^ZU_!4BSvX%m-nbtBq>N9;iPr%c(mIKy>eLLZ6L8}A6 zw{r!cDrv10#wtLS)3b-fo)bU)n9daJ;#y3X;}zY!_dPTF07hif`vhU^>Q1S~0~obu+%$pef}KZd=$P z)wWDJw&kTE!VvqUI8d6Mg~mEQS?m_mt&>?r$0w_hLvi*da-`VSzMRdKNKtO~Jt@N; zr`#-&{O{Q<)#u<$;&T(tq~T0)KV7-s3^VC|=7H`vrVv|86*5yi5mQF0wV1@5Vv_zv zw%X*56314jKy*XMekft9@H%kRsI?FCCI;PlaQ7w(|Nqb$m{?P-!DQ|9onb`({BQ)y zbIdmBK@M{GHE3tuBC_FuP~J`87o1cocLP5wdO+vzlio zgM)~e|B7)fQW8rNHxFoL61EF8dDMn+&!SsUrADD9 zR!b`0%)!%xF|m`G`Bn@CgFCst!t*&6R)usZWL$5ZiiEVCEYd7+Qhe82o58JyzZf(O zIsDPZCN{P?{b9`6!FVq~7)CJd=fKO~Zz3+5@jm7vewz0Cii^OhxVG0s(Y2g(JTMeM zWOb4@Cz9@EY^?m+4Kfp}>DWM-(0IRW|>V-7wVPb?sEc5)|LSoL5Y z3}MdeXC=p00`3-Y8}_N0umS?qOvtj-JeWq6jqW^Xh-^%EIgS%yaT%=FYK78`AjH`$ z&KHj3QRf3a03?i=!VDv5o7Nym)mI)`ggW?Bd_H?iRmh&;qkeRcKD?C+VJb1NuPW4s zwb|i4Y$?jdQWDc%>~_$d{qWUydHAk$-*)|nv8+M@VbcTCPY*LNOTnH=*6)OYrOzP|Iv)o0MxVNd?3ExT@1HDp)sh2uD({Wvai0l>(G0J`o8 zU&O>7A-szCst}n@(#48$(k@|Yn6o#`(1$r^L!Ca%c^WG9VNPu*)`wZPg|HvAe}q#3*Gt#n7n?wg3FB&J}ux1 zM|248AXTxc^i$d?-IQk5mB>~7#^khA1=qPUeDSMT2&#AXVD(hfPLp9etr+{vuK&G0 zp_KZpt5M0nQbFwj>#1nIs-Nc=_S<~e=_l;2QC6j-RLxMYwz00iS_C7&@J?rS-X={>T~3w+nq3)h5j&W z_1X(`I|j0}FyEbr_i}`mEzb4%)^(`1_R&P1gU|Wn3a}4&3DW^hK%3*&Lr5@`rdu}v zNv~Vzx4sD^!xx&CZrW$EGB<**Hgk>eO+f5(!2 zbu&^Le(*-nUvK)=WTy7xwQ4@gqK;19%Hil$FF3K)0|b)=AF^;~$QgBAuKhJguC=cb z_&tX4??CJhnKxcSwosxCrhPZkl>%r_dMINSypH^VZ{&GYYwk~^o23DFu6qbfgj}3} zeHVgx#(7LQ6LUPL-2zVddjJ-CO(vZ8C9N1~w;qr-$@T_W(qu^bKGO2Mxn42O^;ISI z3{H}HDrulV!Rm~F|AN@DYd-tzGt)jBSsYW#sRafL$M7jwSQLCt8x3yb@7y-(P7|yj zNbTdBobms8lg(T+(d2W*8l?f858lQK`Eq^sz2Jp!2X%c_Y0!R1qciHnPX@k&Q})V$)EUh$QVYWf^m4H8NP=x3=uPYFJlg_)*5=-9-@zTol1T(2-+VO!#r+)kEPQ;i2rH z6Kp~g(XU3m$GD(DtJQ}&tMvr37zk^1`KIrZbj9?GD2`1&^Mcs)-_$;BRN!6Fyy<>^ z?r1qY2amruXKVIubZNK?#=#30X{BMT8R0h8?zi7`)9li8tg24q^rU0k?O;mSRCR_C z%IYLCiaZ>eosJ9&M;!K0H=2lba*nPK&xWM%lTdv12&0Mtm9CvT6YT;*_&DxqJnHj()=&5eQ*j}m^$aNFX~Lu7 z=La6oIg-)0!Qia(;46-_bU&Zyni&D>StJ$C#hEJkt)BwtR}5-(l4U=}7U)L4StlSp z5UvM$88 z-9ghvXqxBC!Q38Up+{fL{hxhyV8_)`69$Zq#-MtdhVM1_X5z~q=HH9&H8A#S5H26DvF5^Bh!Mk0 z{9NfSfJd0Edq#v?6vnPd_P!i%F_}^^$J-0R9Bo0q@H!Nx8vg3O(A2WH%NZ+lvXMcB`&>5N|S&RXo)G6Js0+RJ`%g2~d6#+O?Cla`seq zX{J-3%}ZW0Io@}2!%e#t>G=iuJGoBl0!T{>zYm>!)^Axe-bG?lxpN6pVdGJG^81(j zQ5S!lrY(jPdli7wpmUhMI7#2k^c_k1#|O|qXZrPI`X8D8OOh_g0$mB<$e(=x-OTjj zWO{_@%}M$yrf+s>-lD>4{4OG z^(~pE^;e*2b>+EQ_;0|{RaU%#`a38*{u>X;jtu_*-tZDezP3Nqh(V~9-X3N9e7hNP+Z**ztzNJvXqKLG zSejYTSOBCkw=UN#yAt^u{bm`WH_gxsYSp=tm*SwySk48p(!$l}V^CU^BGnqp4Gl0D@&fk%ocgs|UrG^_TJK*8fHIRu0!HeU{G4C(+SoijKa}2rJ_YS-E&*1nND3f*Di%j#f%1aRlEm zH#ju)hrVHMV*OoyOM2Urx=GBDHLlttE~1WW)gG}iehK=1bQOkAVy$|$Vc)^yBoDIk z!}%;R*RUUA)&yZ)1AjwLG{%9LqpMTPZZ%{NuXgDT8HViT6@>t@Q_r_wgq(c5&kjM9 zY$k?15HNZoOW`%RL6~9WbI@~xA>@+~upP*L6SJIJ|5uH2iX7M5AGoTjIJwx77e<^i z>x1@$9K^Scz;~`ekqShEp3oqP*7ACo%y%uC?zI7Sfk=v}(vIBJNPUv_T%3F6qTdcx& zt_5LOh?(Y2<_m2-46<72kaZ6yajtyHg+BTKoKfZgM?5n}Phxzzqo{oqDnf4*v9iZ0 zW$#w3Ls&arb0D_L$F<+vu5S9W#2b96KA|R8;nA1L63*~ie`BRYUrrEx>qB}92Z7t< zU4(f8zc%ya%NisUl7gxa*~a+hxH{D2I(?|;?>B-X%9O@)7v#IGDo(blbfz^4RJed= zrRh?@u|_=vVU?3i z`VsOg7O(nF;Vj($UVRy>}&uFpfilBNnq|yNX>C%ZmR4>W*vxR(rTU%uj=7 zDPFYkypGrNRGHEz=eV}vdl6<(H~CJFIl`?ptq{=qrLGyjm&l3<0atENJ)geSRhbqZ zrnM6QcoE|x00kB-7j#SSb4x1|VnvaW2X}y#aJm;7S%(Up?b~`rjgbgHOe=^CBd01H zVcQ((VO$@Uhrl%>n^kfqC-*Y0`nDPxI(;dqY2jo+Hu)w5=QI8QfU=u~Z548J4_LUN z1(dtVIs~YZ7D}&M;`4taL!}2~jOc;zBPea*76vl2=@mcZY^u1p;$RGn9$Uay*Xpc# zMM1p$hhR0NH+K=#dMR(xg?IY!iRCmqsFlh2Rk%voWw*iPB-{S2ECD@zbgkGo2aS^ zxU%IDD1>&;!sEz)s2!eXe`tDQou{l@Y+r>IE3pQ@`b)8~{U9fu#=aDu4Kd34;*&5- z6RfV|`4dx}beSXi#EwHn@vzq=o3jBNJ ztRtaJO1XK7BOOCVd~GU&BZItSbmvSxUk#r8k@ZMQapW=X%^vGGJ;yEUz|j(tAi!qdM%iG zf)cv$z<0YT#^aX_T1ZZrRjHJB21RxQr^q`4aUfRwRM@KFWaZI5YYytEUkc~o`0cZf z2FZa8=Rc21S8N7*=3$PSRiD>2KI|+KZWpSR6-}C+OFn=235dy1tr+kcf z8;0JYpgxSz%lhiA^P@d21ooB-#bMv4ziU7^Au zl79eYa)Y^Pe9NaU2Qz0*8qP}9Opatsv%ws1jv4+jdY<>-^+jfmZ*`uZp`%oe9~s+_ z5y~8g$C2GQJHu&%u|EVGIHwJc{>LM|;e>H9V--9*IUDQ4yzKMJu(1}QL|(c#C*4{M zOf@v4z^U5I$&i{=i2~EYrAAyHnvF)Khw?J(4t1(s3U*GWwTxwD`~7JvfsqHjJrqW6tzcP0(E6OUHemaS-TM| z*_Z0FfaXimW`}(lxVp45ydF(etK6?nbj|aOG`qn5RGx*lzYvBQ?MFRh6ko}Tquo6J zJ&orfXn!0Ve4O9KS0Sy+E<(Y*&9J$=1}_N3SA%U~$%wQmoR;IJg~p`K;WXIpVCB|u z8pg!I(oX$cnS8awbFh7L>EYHI=z~*697>q+wZOwzSJg?ZFr42;VXP0raMz6!PCry!wflvBc!VHW$hY=9DA`Y_h2$W;nF9$~YUvDw@f zEXmU3s8b(?D@D60OI@u^L z(Z$3PeRvotD&4T6%;Pf78M8;$!{}E0mLUYEPx__(d+Ai<$Nno5z*aoQ?fuAKpc;R;wx+%qjv;%j3|;1I+u!70fS>AL9)d)eaBBGVtnW~y#PEKxAR3ZXr05!})G z1jf_7;ZOO2ds*05Cf;G40;Q#I=1-*l;zZy430abT^AV_I-{8oePtCuA0(D;dQalj+ z_3)p;PIg(59{v~%r^{UDJ~HuE?aR;%CJ&9A!^lhcp%^1j`75IG$ZmdkN6z3!rf1|# zd3s0AlBYRxHlB$6xZ|S{HAo+Dd2Cu_a+|%6`=WlTeLb|(Ph*+lO8PL%m4@lVEL$zK zU*TBJ6P-RR6%BJW;eUc#-)_I0YM7)bxjUMW#!j0Q$o3FPmlHn}~7#A|5(QYe7Nbcg+s&Kba zHzYiU@sh&S)nzHZ=jcJalogmF#>TYW5R!~(ew0j(n*gZfxWW5_lmUVflLp2C1H>ID zsKZ0Y!X8s$55uz1-XL}gay8Lo^@BVVuW8_~nC%c?Le)BcQ-&7;W_%0Ms?tW7?+aJ4 zi6BcSbenvX1jDkC&58rm+hbT5Pr>0q=Hou*9td%=3V$p3hP4e)ZWcGd=MT)nMH@=T z^S4XUA;A5bysp4;usO<6G2uFE3_cDErd*^!unpF_?74{PvK&&kn$enh?Z;uag8+aJ z)@QVJX5-Yx8B=FW!)lrE>$@JnIWurBiZJ+XJbB|$**;*$`nuzs4IUT*mb>Xu;#A)zQ>c}~))TECD z#&a3pm;F{r9-UmusezoQ3r)H~;28qfv#7E1|dZ=TwAfHEM^p z>8$@XlV6+|q`wz4oLa*0d~kBaioXP|L5&4jPZyTp1f5%*KIu!)Z5DKZ^}xxb z^Mb6^k9Ds7VZcl(#U?#OBL>%US;3xyrJ`*n&8oTpmYgrW^9$*zQw=V46f`WM&#JaS z+wBFdo)TJ<#kei_UncCWG3lC@m_#U}kgGrb|o&FA)>2@3?Ntnfw1KVIalPHTk@X4Rg8 zT&l=qdlpUNKI#+LTe7wSxAZ0FM`#g#r6*b)Q^Rd}N&MvQboP_o+3Y7jDqwgIhCn7Q ztYQ45GPZU_6?@dP1+2r`{4Z6P&_4J>2^rN}rj*dqNepLXGW@WR;V%oHLl0h&%QaqA z!CqY;^SWm8A~U6Wc9REtpXbV+Lz zDhKb;M=?~VRdCJ;2sB)7Md4kO&ZlyW`%%2=y{eqkDrp8`)})YrOZm;1Ddz}P<4|*j zdexy?gfbm!p-8!D$}Q!sD7Q%J+m)uMWm4bC$O$i@lZ0wDZYd9fI$5aSBJD*`r%1W( zNnEZLx59Tp&lfbN>S&Xs{id9$snjd=RaEqpw$gODPfxU`R8fPlPB#5~(%Th7bU5vh z8kXcghjMf2OSB8^yJ8Yk^KhS%smCktpV&(C=^V*vRx`DfE|B(JQF#Bv6SSpt5prhJ zcRZZ75)`u1_t6hbT}(!KHtAlbRxyRNV-c=zMjX9VsA`A$MoP}rbT#5IEI)y7@1023 z3H5$H`_o#wQDSrs(u!cQnv01BN|41o^C7Q;yw@dBkqi&`SLoKc71+T_!m?2Uw zBwtF-JbbDqQe%wH><7yN@r)dD*K2YqJ(dZbj?=k-ma zEuQnzrqSOgT@2VI__Dk!fS*`=Jz!5c!=beA0RFs~a}H``OwIr>#9FM&N}l?X(x6E+-zz2O#g7XSs4jos` z@VkW!Gpj@CIdn-yQToc!-YHLND@VJ%3|o*R*-^gbCL`m(dV7xKNWmlR->882T z~OguhfV{7B%U5aXwK82-ATB7KJTQ=>ZlaJs;#6L=`<9Zuhjw%-akjiQrh zrca}+$+Oc>7~Ph~{r+_?_wsAijH@<&R(1^9(j00A{B_wvz{dohR(1k#BYzFx#Z}zu zRaKh+uPLx$nFlgh&dea&r&-`}SuAr}8GF>9OZ#E@8%npK_UPnc(QOp7$1>wg%pOf; z+W;Rxzq95Sg0ImflIL>Zo9JrDpH}p3z{wfk13V}5JCJ!<@NVGedwv8sQT%z1$v#jT z;CkN|&gH=;k@}U)X90D{hi?cxvx@U@D>N#SoNNKE{dv?l9W|QtcX)+KZxnN>KT4^K z%xA&>M>)@UaqTyv;h&JdfIbB*(mqXJR)*nBXZat?FU7IuYKM9@e*#(*aVR^hRLAW^ zhuWDn0V_+}p|(~~hCw?V>hy{rsNISxytD-4jc#$${yS8vd+1Jw$}O0HvKnygtm)o#sEVw&JU)8Yp$^aT;;$fl=upi?_j~>H zSBF|tG$8}CZ8_m{mfv4ilo6nSLxsx9K;=5rGo?itK`L^nS4+!4RXWs`qEbDL>Ktl! z(FFXSeWpWw4fUnd9EZ9U^`%p*L;bj@C?kUwJJhR1WuR6%)TXkUj7&Pkq3p70pf)K= zESNcgT7GA7a_-n!6P^fY$R zMf7ctdG4mCUfnv7x^b*N_VUZa?v zai|X_e-mlHai}}ez60tbhx&u}9j%!D=1_|R-$$CfXrMjx&&mJA6g~!>1zmP%nAU}Q zLVGhZ}9DmqiMA$ za4CIn^4~L#p^LEZ<$ix^av*aq{r(U|jZP}eoJWPC+@&-+sV1|Tsztd={XX*@t%YU^ zrM#y_j@hsRq_u&WnJu)i!I6^JlsTWC6KW5AC2L{k0(#G(ev!X0b0K-8iF@b=#S1gr z@Q2A%xqI@LW*$ekIBD1BugzRUox zv0XG;PJ6~smkad-JzX_ZUrygul>fWgrFuL4z)Ab{#2uOK^p->Y_r$X^SJAsdDVb~N zk3y-o<4@^G$6QKViyt)B&>0SOQPzXTTKYt&i|O_J2aS`cYZ|xVV(Kn=&^Vc15Q=5a z_MO5B_&n}?H<0D&q;1og+C@JMyl-^Ul|r3GXVz%=t!O=;R$v_UV7rtB zi%aR;^6tzoY7^>W`aXR%GfKS6wxnGdEF}LwSpC z$&As$!@0go$y;sCb^`QIyyvPU(Df2Ydb? zaE}qEGaSlFzsDG$JB2!nHU?hF9He`iIH$7NFg+~PrSvWDZ!?FNuKY0bH2Shb z^;iBab0>8)bDC9k%bCFOM5B-CztnP%#zb2dZeV1+?M_g8 zgK1f3Ig~1=P7gUMz8TCmang>Dijlcl*jqRhm%ETIO3~~hx-vzxi|Ct@Gl^^54y zl(aqcj!=&ikB&Vw69I?&L9Z#v+C%3nO04@;xan{A%h$hq_Iunah+EJ>!C`?^4ThMV&R}>a1HC#pj6( z$}81xQv|4cD^sc6!5g!ZY0=DrK$3bd?QAVc{W&cgdwKPFBBQ(NEzj+=P3lvK=1|-#57Q4FihJc@`iVnvuRKg|Iu!THBlIhW;(mXG-V;i-=n*Pe zDea?^g0E&hLSdnvpd0hg)*hu{p_DF<(x^kRE|1b(4#m1WN>4i!>+&f5%%ND9N9i?( zVqG4iw}sl}-%{nJ$LRM?8f*4Aed45L=1ri-2}e`-?51JQzN{b7<3cITo}$LpqP2|M zr|9qm^?ue<)T$^Nouc7B$P$P8;gpZFo~AP#ibwcf@~mMgs{fv+Y@w80o~J^gcH^(> z&D5W#g(+!2qh(Io4lT|68GSh=?dNonllC2*vVTrD2&F9e0^Q_LY{3`kW`|-6zCgDL zwadRP)69N>?sL-Eo-fj)4#oC-k$&n>Y|oeId52;PzCv6X~CCi)fj5MP`l|}nvnf6-QrMK+h@PRg%b1Ms}9BUSXJPc3F_5gW%e5h zir3J;qGL~DhO+hBbi7c?)^Ah0P`e3dyV-BksSY(oo0|O&%4qca-2Zp5aSGQJOJjIQ z2}2Vnc`irc3M#E$!!|~v<53EKw->LSG&(f_b)3YowK!FyPXr#AQ+Ha&r4)`|389qd zUzA#+yLIWr_`g?5>HNiY^%ZAl>#`@uIxq#FT+B5p_z`fO_DH|rS{C@fo^T+1G{|yJ z5gRI~YFBttf$EMvG8f}~5B@fhWk#WoL7zx3Tnnvq zx)=Hw^pR+#EPpfj8YNqSRXR#(I16N0i{5ncRL)lomiBc(gRTVh&~<>W{gvct(#r}@ zg{s$z&}u_$<)KNU&&8t2YtmEfQ3g&iS+b6tUYug`yVzmLqpYX&c|*pR+$kIr@wj%~ zY0HQ3D7P)CzL6Z!D*m`5Wqc%2cBrkHM%Uu3^jbOs-vIH>KL^l@zl_0nIbe{c0cO)| zflUJ21fC%9M1c{3F~A9UN5lDt1nv^J2T;Sij!R35C`Y@rq>P$$=ClEB#d{*g&k@)q z@H(24b`?EEpVr(+`{@15?*U&BxSigoUuQ5ruky$AH!7`qj~>zQs`(UnF7N?*Gnl5G zCh!cvGVMHpmk7L4_}>)#9C}`4?hh=`ZUN^cZKBpWDW*N8hl?%kd3|YcKzjwc?EwBn z)~L2m|Mldv0ryv)tG%z!p7K@g99bJZrFWHB+TX|y+=QGTAm>E1PD6{H$-Nu-Kd5<9 zo2D)Io~_N+p2E9^JLyiGqTNYLgYRh%&`^mFtDSn>W(sJ9CA{((sxH<4reB7g_ddF- zre4o-T`cVi z@UKFtE!s-dbsgPUuC#g>y6vxgLVrYm6n*iD(}O)Vuj*}vzx*xzAK>iJPB50F{ZYS; z9xTZ!F1O0qg;hhX@e1Hn<8m!jc!ZG-8@3uAz#ZBrVx@eIt(32^ebTju za!d8gwd=Au=g+4U>4#|d@vQQ z{h)D<@pSrL;1^WCfEq9M907QZ_Xy)D=%ByY8z z(i-6*<&uA&UL3qf?DJ>id2l{M9^SjZg1(;Mc}lxwLaB#y&IEq@ggKrq+N1D+r^uhZ z%)?gQ=y@Nh8r5qP_He+* zrX22FBxh}N1kMy#FR(@66oDNAAAq&J)B$b1be(=|`ElN-jK?RuCu!U-f07<~ z-niI1flktXkG=CgeQRN-_Z8#o>F0YNAm%)8oCe;dV`N9g?QJzj8N)ko;$ zw6A+l(gGD%c^{#>3vTefZ%mtbGg28Z*Y7XiXcRQ9?z;Q2+tue>=PmR7F+wdg&-p_)GcdM17!{9`8m)q9Sy zz1%eS>4Azgz&xDtbV=`YNi7pSXBuI1qUYB9Mx@?VGt=xrDvy+NYnGVh9`>I@JX-dJ zz?Y+Urg<(8U1si*xD?TgL)VyxczUb7$g?xRIlo+SliB9!@kWg<^!_d80DAvn^EB!4 z)1>zYWCZQQIGu^IuViwm=O(-WJW}wA8PjjieiQh{tar^JiO*Z~rNY;WKLBS=%_ru~ z!oOK>EcE(r){iLk1O6KC-EP*`2<)n6&c}j(cS<_&Q?t{3PZ`(MiNPEq9|UyI;pXuR_|L%gM4 zV2i->1Rf%Kp6IEs>GcIXwNtM2ogx0yA@DqbEe_5-9)q24^0i36bP-GLLgcx{yhLnx zrP#1VTVHdP_e!zkHzf*v6L^t+i{Q5i-XflJiP)J(3XiGhLtZ+;2vq#Vcb-T%Pe#)# z^s~wWf4M$f{GNBVo-JN9T=)m?Bl&-^`hY!=uMw~r;Oz-p2(C1{tl5)FWTNI zb=8YC4$()d)6vq?3)cD>kNE4gKUa499}rHxlzLopp5v)4Jl%he=h5oZ{foq&9Ri<$ z^)%dFxwPb){%1t~b(B_mtN)ka?9i@5e|;U%>En_o{qG3p1Y`M>SN$g#@6`Oa|Mw2Z z3N0}w>i1$lJ5kThI9vNf_JvQ;OOvMucudU?`~#dc&7*T9_vjqM)5WVh#6H*24@<8L z4b6y}%fqiwi!Z zf?q4}I)OKc4i5|dh``72X6Ct^eS(w5+G+yJ1eOb&E3ir6dVvvvqXKscyjI|K0v{Im zh`^_`b7@BITY~QsNV?P_uuNdNz_|jO1g;kt5!i`$)CYrbw{Wf%{9%D_2_%Ch zmkFFJaJ|4$f!7MWLEvKo-x5e3DJ8H{;9P<01x5sp3cOa}!vf2^tkqnB>jidtSFR(0!Q|AiQawTW(4fL%X&x9+$pCYhJ;QA6y9Tj-3 zz=s9CC6G!vwX9sE2~_{$)1h=8y^T%J46ReUTDx6)So=V$)Nj>~H`W>h#+Qt1j7N=E z4b!v0v%~Y8=N(VTyT;q^{mffo9%=TNe>4ASmiQL>w)tN5z3ub*OZ-#(XZq^{ivvA@ za|2%sToJe@pkqg6V0Y%hZDAiqSO(s%XJd>_z#1-u`)dVMhFwtwUU^sICSo;qMfKP@ zO~=k@7EY&L&p$ky=%Or!yDN?a3>7eba|Xk!i(3GX%wl*-(L%tQvPFQuD`j|g5$CyG z_-_<3M=xIvcunO=fG>u+03XcbQlI9rgpT|kz@ziG050%u1*DQ4fX}6k0)FH@6Yzw< zIe=*<C0F82{<;mdU^;<3AnuS4)AH0qWRGmjkZ=)Zsyuz^4G}xR+i9yc$qP{H_5$ z6Huqa@C!yA_dx3akHD{Sbokk!fV1Iw{8y%C04_r=oz@{;r$MCXv=z}`#~sF_0f+Hh z2OT#@n*euHGvGP6nTWeofI4nmE&%*5{98Rb-9^U(K8fGp>DXN_1$-KRuTH0*;BKQ% z&(I2#dKOTppW--P#|_C70pG=pqSJf0y{Thoz7BbQ3#ilYC<6F<%rrV~PeuX%MBRWN z;qSTW^f7Hl&QAb!`ZMmsYV;|fPJh9_?xWFP0r4-lXj=gNS{yK-4T2v8)bV#EwgFEE z)G0$70?gEgVXZ@9fn#tJb_s5^oU`Ktl(P3O*>@&XRxz+Qi=kK0OZ?ku~x7eI(-eW#vp5*KDJ>dJ1 z@29>Oe8>8?__zDd^?$>EkN+x;CNNL1KITRyfDoRd6$>}J`K0gz=+20Sx_Xw1lg)jU0k;uUsRq`D=Bu|1~?KRw%GP)LL#{64;&QI`S^|YPm<<9d8=XsULBf5%~O8#rW zzl`p~-z@qezK>x{-G}dsz+c7lO^mKTU{w79H=*x?e_yU0O}F6t6YW{@7){z*Pm{LZ z6Vp7#W_)|`y%2A2q7*V;(>9o!wUxf*be(UNez$L%{vut7=d<*v{~`U){zvpTX&b&j z!na8~D)20w7C4G_1zywc2>eKYCE!QI3gBc-K68$ly>8vqbyI0hd$h0Xm<N-VSNFPgsC`LvTZbL#i}%C^qIP5;s`NNbiYLX*`kY!(M_YVl zq$k$3IMy4LmeZmxGzj@Sra=K^0$}aYR1ZRA{LTm4acUq#HqbHDA8n8Ah#oy{ zI<@r;%$S}qpz?q*^vrc24`Q$BG=H$KbNzJc80?36K*pjyUCW~zfsSp{bUH3>^*NSl ziHQ*+_RvyW6iO(Ha>qx9;1q+=Ws#T-vfV-hx}<&6DOnIHZab$Z+X*e%Yv8Ig4rtB{ z5}``Z8N~Jh3!P!vGepvgj`_2=G|lOsdJMoc2GbeL09b5w4faHVEVE-<(aUYUXm4+{ zk8Nu8wL}LZv7Y!bG;`XlnKNdz9Dc;i=GiUNn`X~DY<}zPSx3y8H)Gzc!)H!ynbq8K z_|%!RTIbK6(b9C-%-Qp1Pdlt>*7W&@9WlFQ*0kv@qRGnE<@1)dx2|hl(ll>TtKzk^ z&Rely45uyL)JCoII~rHCQTtFF?P+XVN*&9YM_bu|>(ZDhiZ z#^W$WBeKRDcW{;s@$SY>H(LbRm~gWpgOd$|*=;~_e8d|aR}qV}#g+3a0tY+ra14=+ zv7Ts~q83@5(h~=eOE;W~E(UX9G}1*)T`F^H9}i!J$KpIZw?>=#x?DD_u`ZgD#YWb) zxZ6gjTw7m!AksGwgD-SZERNA183N|?L~29Y`=gyPM7bSK$pw+#=qeboi$`HVxb?fFuIyWPt$N+@Dazq`+op0Hl(dJE-6^|lx zbLsJUR>gX{+WRBh`Zz$0Po8HD#Fs^FE;}z0KS+j^QF{aAk1yF4N1dzShU1eK5B3bi z`g>yBhg+k~R&?X|Jm@@_>+@0(KsLs@$Cqk}ZWufWdvRnt8i9ZmU)qN-ZCgF#iz;^z zQ$YH`^RUq|Yp<{mQXYoj0Wn@MD#z>$@9B(oSR#LX9##2@zBu>9_~bDnJ~!8Lt0x-o zus$~(Qn)*tdSKS2eTyUg<13nH#p5Dod{TR7Wb5Z7v3JDBmp}~%;WkJ5#0Xr~_%hAb zVBf$vHX=!Hq^~QkynR7*Kp`9#62ps!I|eQ1BVJljQ-41{=Enfy(N0Sq1MAd0MJ+>p zk=|IRLm@Q|>pA7)5alGeD;8OCVWuCDS>8zmiT{%XB5aaKU8=cp)k*DD(vFYy^em1d z9%JR!8AZ(Db;nYB)g~;jU?Q-vqyg-WY;WIUyFSEZ0%r@T(1d)bK7p@8JW)PJiz9u5 zk)B0Xce^!+cp%ZVJ=PVa)@2;TY{A#XnX|ON8UMDpjDU|> zf_j~2)3(TF$ml~{<7EuZi+0EQ9320QcBBX5`jlTIm%E4p56W{qrZyn`mco~#*Ac>` zTNk1Sk?gQIEIAz5nyLA=)$4H7nu>ZX#6c8cYdG@+{-(Cf7u;p+wVWnT_7{wA?rmD< zbh}#4&|IszrcEt%y(HGTS#U^C#n-iWZo=wBH07Bm(;9w0`IVg5G^sF#)a+&KQsaq}G$6Yq$%Wd` zO>R{#x*^G0H-3^7^Bsh}aoluDJGhZ?$FRJnVh0ryh${;$txesmEz!=N2>&Gp zNpqH95@&?b9_<{o;hFI40jtyM5hmNM1H(?HZK)95I%p@!G4r~#Xe?*lw$zEAU=eYN zsGShMEMlYgu$xG5IAjZ9$vR6=7+9X{;}};1SRy9!Lu1+22xEYoyJ}O^MxavbR~}>3 zjum;7RAA&4hO`C!l)CB=^$+Ah<1u+wMK@q&i$yAAK&b@ImU0#;BFDu$tZwYbTuQ|v zcyd41#L?yW(qIx@ec065&DdGRHu9P!N|CNEXMd&gV@IWe?O3iI?X|W>$MTx(C`(Wc zb~llvxCs(50--;-`b#7rU>rO_mQu8FK&(TzP^Q>;%tms$OT!f1sh+p&>Jm|78B z(BW<48Av(;gKHIhFDmPQgjida=_uRPG=M)IvSAQO3kG8;l&rwIIlw1#U|L-ni^stxvjFzPKuO$W~!`=gdLuH zL~vqfAmcGf#oQeO!ObQ2(mvU(!QXiF&l?hETYOcduP-87T$YzY*=hx>lD2Vu%Vh}S zPa0Z1eENZb>TbeBmGL_f(di&;j`Rm%b971Fsz~uM3@$j1u`0?P$~zw{&jvPa6lIh@ ziUbGcdCNh$qUJ%{MtsG(+F`awZFr(XwDxscUFa#S#QNLNtBqLlVJ*|`hFixE8lCaL zDSV#5OPEH9{mj8m*0M42%3lWJIOjs)K>p7eic8oARQd4}Wud_MQ)3X74MsdS|Xv!3V5fZ~p1N9SmSeDbF z$*JZb`LMKBLYG)}Z={D@JIT5ZM|5diC5MX*#p3zS*~QEL%WOH#t5i z)B;`BHa1;9Hg@X8L0jKO3*(bF&4OaL;i8yqoYdY8QCrZ&enco9P6IX;OqNQ8Mk<%H z=MVyi0I~rQf_2^zwJkT2@sc8W7UtUT0B-vxYuiGce&F1Krw@d6wQOx@Zr>EK`)Qz` z#c`npwl&!AjtcCGw@@?2y-jws8|!Xc-iNSbM42TI#3W3)^9HdI19KkEsqo;%IF6+v zeUWZvIP9^5XO67D2xTl_?v&^dY4)GJW$F(t+ov$<)tCl?VQ44#4y#i$l1$*Y~*1CD34AxHF2oJY?w06xKt`B%S2ji^;z?x zn<86dP~P?bmKe?sEo>Y*<6KG(L*le<5c)fEg|Ehb+%4smG77Hrqq}16DW2{-&YE1I}Hf17wAPenYrKPtWg(bjN8!DuLy$;zBcM&zn~%=r|r9 zSYmRI^Wl2(gr#Fs44LrvO(Q*VYTbeZ^MBz#D+cfen3}LAP>0aU_>GF)f#sT$p|caK zs1B?F)td*sgZ9oB^6?d}<1+}R7r`x#Dz0yr38cTz2PGyDs) zIgtVa+T%UTEDWz9iB(PyCFXP($l2z|l@?I(0i2S?e;c_W(=b<d*+8Y}n=KzsUOx#06 z!Ii%+wVksb7A9jd$!Tli%`d9LQ4nsTpd%Prj#qnK9TtK+Hbz@xw$;b$ap$$2G62is zu7hq!>E<3%M;_FcG_k9FGx9`jvAUeYr_xfCUnQzu6>J;U72>|c7~($O@pFzHs11}N z5TF!-Zd6F8WWu3o7o5xuM}jGc5!xFG>$t&_6Rf|o+|)bQgIzQsFtM` z!88g%yPa2jBro1%bZ>9B}rE7BJZ?GJ>vN$8T;J zUyPIJC5RkuZ*vrJUXeES^awS;EZN1n7rd~skzQD0ZF5hRa9*{Y=J!~U0d@Sq_Z&K` zh0*O|)i$hQx4XMlY*-T%RB%X{W|!H~jj`>t4uh1Riih?nrh_EU>g3W8by(`jo$JnZ zT|?A?p(R@K6Wt(T)#bVCb>6)?$9F^A>>j|rA)4yEZGkn_%@+vh9}<^{CodmyVVM(f za>{sHAG!@|FHlZQ#_(!%r!WjbIRtIn*oq)9#O~^@9dQFNqX~C+TX5GFJ%+2;^Kf$( zK81hFvJZC+ZCvkOgl7adf}_b?6IOwPLjb^JDh1lW*@*I#(~jKeI^5L7)}H?j+Q4$~ zd%&eURRiKHq+7Ue+>bx3t$1rdbFD7D0P=g8&RGIUow)1EH40~fDzO3_1bT2;Upjsf zBt-C6xm3MJ;s$2~=>w1vLG3$md$b+pBd8gEmnhdP^$v(WIH*Eyo3xBWk<)^#IPRL# z?Ekf#tV5wWw`(J`>PFjCZE^6#9vRC;JN!-zcVVfi2|3F|1GbJ0+(P+I*a_P-@Vmg- zhQEXvlhS2?sV#=B%??k`HmK~5%Ch44$7~d0{6{U=&~90L%W=HGWuQpxIg~iX~ufQU=@soy79WXspB-v;ql%p z{>?s$Smtp%v=ILtDP@j?;vt!$jejfgk=pXTLSsA(;Jb<&Ez z*EtXMwgdYg*M0O_tPl9F%CEr8{=X^BwJ%5Q%m3%4H*@QoU_G7>d9LRw}$De*_kGpo@@yf9(3X5@W{(WNw`i8ww#jEi- zM$is?9WDMnx#XP>*;M|oq*FmNVj$bS6FQ}=IVZG0A07d`vQ%~A7cqHlX!|m>D1s5B zEJ4Mqkf#UwCoS87RQ8PIYL?r~YbuQ3Ks)ktM5N+mi6&T;`*aDu>~$3AKrX@7D$6s) zvp+{y_99-7E3L=-rCPHne`3#I&zXkR)l^u!%)zE&9MQ1{TPL%wtSPT*-1RO;#!l%^ z_BQs)E?$q$P`VvVClyz@%{)rf3S6R4T^XVvuM*S>m&e2B=57A>^<#@3RL4V=j572a z*U3G~Q9!L=)p*2JNa)Bj2HKRxI`dw_QoDxcwa&_vqgHa&<&I?)QMN)V?`6s`)4Fkm z^G;XmQS3)pH(sakEWZMpVD#rSfXBI6r*6z2T2_PDLgfRU!F|E&8;&kCVHx7|GKs(K zfV?j|8a~#JG#>L7F z0xsr<50C_v-E)-64_jqP#*ySuC08Olb_Lr>BrBH)M{-$FNFWN1%8^u7in!!ha)~5P zL{(IY_?pF4q*hX;*wQy@T+3yk!vdeCkNcWH-Ak{Ty|g7g5xyOq@q7?caU)aX zY<`wYD}tb$v)xe0S$i{Nl1Hg5471|i=F`{$G!7ygdDXkXdXQ_`an&=EozK#2QZ_;O?-cZG=ON`01iiD# zqAvr>m__b#7A3RZ@&qfWg~L8*xG&Gqtd;6;{}3 zJH?@u6?sUDc}mvOI@<>8Ypy5rT)#Jvo3*ludSL0_rPK#*iXcS1poqZecSG@desQ0GdLd|VJNUIgapND(!-RPB1YSuVeoLUm;$>OK_nf9zX z=2!}(S)BPsw;EAn3_I^4jXytXa30EIJ6N~YvxQV^7_OFLS4mgnGL>7pMk8H409-Ro zX>YwH>FU%j#&Z^%rPe3)ZK|!A9Pfva9+0p9CHeGpY-wFhR$g;C`Am5}jWzXN9!WOA zaavp&uwGeS%+YE-mi0=dZj{Wodg^$QMm!gbBGPp(;mYPBvX}DT7i-Vk-rQc+hyUkR z=7~cY*Hink51M3&HLk=fs||BSr`8uWmr5n*VmrxJk&-yrZA|?yg?58Av@*b&qPxYu zOo`L5u(_&27Z=uQiExOk12m){RZ1sOX@cg0Q!R?5hWug*EV$-HXiWq)h*Px^MN$U2 z2bon(^PJP!XT0_;gwz=`)EhHJc>}UG6r3HiB z0B) z=bRchQ%r}4nVhMIsFZwoV3BWPYVZn=2Ai8KWi6YDTglH1xS8&jj5W}=F^uIhohg?Y z1eVXE+8rslM92hfEmMb0EbtW5g<)z$N>c-gT!QR~1OKWLe^TA(+dv3{NfHTQA zHC#HA=~AAQULUs;M2&m}{Z8Wdu<-;_SEdj$3Coe}MhkUuJg%n0p?WEfMZ!T?qtJRi zo1z%D>q=W}Ho?s_Ww_iFM~1HinWQVA80D@Nb=la$arvhdAsKlkZn z*FX5h8&n&*Xi4wVj_MmqSqj{6I>7B7mTpd-HCkK$62mJ1#6DzDve zxyp;{znP?;Owvy$>1UGkp(Oo-B>h9-?iA9S5~NDY#uheN;<6vQ zOx&-FVJ=!)y=t!2iw8OJ+sdBb5#Q-orvVX>UD>3vATzPu|G2(kBjT~=b^o^U7W4v+2*QoXI`aO6vXAm5K@Q=rUg#38@~sU>O&j` zfgc}^>qqi1;&7BFtA2#;#HFz2`|SpD6NrcXf-8Qw2u1bJ19)%P5jXDQz>`xf9baJe00vH`lfU7~P)sC?t7!O83#Y0i0Q9*bmE9M_bdFu`I3i0W@an9yf z*j5fW_ea-C5{1(j23=J)Ok?RSVTl`WBkU1Rrz1t_SEGVpUEPud&uIZ7qYyq0F0plsl|3?H6laC#C}}w_5*<(**R;Du`pha92ipXQ7fM zr=_kVaoI6M=@xt$hY&jB!!k~{@_h-hHE&Ix%wDclI-FLO&4!tAId3c5V<`Qz!=OC~ zXd4BTsUM1>kSqDiR8Z4Qg>J?T24zJFU5D?O%|@qeQ=>99D2H}%;yH#Q+7$+ph&E_h zx$R}Y1xuAsSe|Cem}a?7IPX(I{v{q+N(Nd*8Y<}{=)k=o9hvnrP^bY}Y0PcGQv1d1 z3?WLs?FolR;c$`0u;_Rm%j;3Bc4s_H0nApxa5UBNj1elrnno{_wF*GWnw1Cu-(zb> zKCEX{!m?KpSeqPqJ9brMj)ue^n8g056~#^gu-^!2jC zACn=^+X1D!+jZ=2lp(08hTd*5RV9~eFOPaoRwoY3?ho#M_4K!%pL%xZgnulJoO$}W?dKkN<}3HT z^22K`_nE5P2k1;rAI{9FTXg5q>kIA{M3}CDhv^b{!L5Lonis(Nnr8F*Hy^ERUjA;) zR=+_FeoqJNx5?#o2z211A|^M91JSiJrg14(kW)ym$^}9NM!QQw5`~FZMA zsVb3HHYMdlNkJqyqRo~>{!zfq7IyoXp27g4xA!XDF#OhDz?DurISLISX zHDP@hfOjOBRI2O}{8MBe6!@>}@GTwwn%=}iIy;$E#o!2soOhc;iiXPHDlDZ53%J+u9K+oc;&NwMXMX0f5#Ey7$ z#TN-MQL%@&$9gNysO$onP8{PQ+R{wbX4AOU z4eMLQX;Fi}iZIXaM8T*N!J{Pjjz@!}my`z9h$ z^n!LvBg$bBCW@GNh$>M$j6SB}S6eOTQ?xQ}tgbX}vTZin0%lRwD3t4ToC!;{f`)3kLjU28*{!95e8Zl$}4>_PjHhx6OV0MQTyhXYPAJD3wV5FF54%w zQ{s}93$9++bwl5>o~}hJdwRN-+_0>-t7rMjB@3^)ddcEteSO64o(X!pd-Q9}O*Gqm z^U4ildw*P&yt}+~|Dx{qcQ1hUXwq1rwsPUUb-fccNwsQYB{d5@TRVp1O|&6Rk&Tns z-H5Y^cMP(tU(@atd@R7k7k2g{S^3^>NHqpJx-P7sC(?O!OYhm+SAuwHcx;!>|8o@{ zkz>#CHTf@oV9j6s=gH}Z-hTDy%qRb5@#mJ#zv3IOe*HbeuYC5e(=lR{ExO%3r@Uaj(%y@C;s*3E2H~|Z{7Omzjo;KCth2= z>Bc#KF@4?oZ`WQr`o_%r=6&_x$!pj2UH8b;*)tD){q^w1GqHK_rT6W8@Zu$k=&hjwQ#v}fGgyl?Mqn|bGDGrOp4AKbTn^Celmd)rp?G&H3@FYCOP zUX4#rHo+OgE=GG-urZrnvbWn`Zr^Sp2c-f3+fpaMN%IjbJ8Ts_qFMJvqaZ6a37w9n@X#^cgzcAaM5^Er9u2t}2%db$YVN zt;}AC>Az4A&ps)or=@yWz}_kzu%op2q1zXF5;VOHZ zd)l6Ew=_RblF>On=Iw^sA=~G7dmlmV^dRS~jg7RSC-pMiz1(^08T%JaGk{+Wy}Fg6 z8y~tuol$dPW4&+)j=m+JX4y~ft*qi4DYF@%hF!R;C&XS_C?UoYj|&(og) W4xAxgp_^~K|7W1DKkwoN9Qa?!BFW+a diff --git a/src/Patches/BotSpawnerPatches.BotSpawnerOnStartPatch.cs b/src/Patches/BotSpawnerPatches.BotSpawnerOnStartPatch.cs index 7ec25e0..da99cfe 100644 --- a/src/Patches/BotSpawnerPatches.BotSpawnerOnStartPatch.cs +++ b/src/Patches/BotSpawnerPatches.BotSpawnerOnStartPatch.cs @@ -16,7 +16,8 @@ namespace astealz.SmartSpawnController.Patches protected override MethodBase GetTargetMethod() { - return botSpawnerType.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + return botSpawnerType + .GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) .Single(); } diff --git a/src/Patches/BotSpawnerPatches.MaxBotsAliveOnMapPatch.cs b/src/Patches/BotSpawnerPatches.MaxBotsAliveOnMapPatch.cs index 157675a..db12748 100644 --- a/src/Patches/BotSpawnerPatches.MaxBotsAliveOnMapPatch.cs +++ b/src/Patches/BotSpawnerPatches.MaxBotsAliveOnMapPatch.cs @@ -8,7 +8,7 @@ namespace astealz.SmartSpawnController.Patches { class MaxBotsAliveOnMapPatch : GenericPatch { - private static string[] targetTypePublicProperties = new string[] { "BotsCountWithDelyaed", "AllTypes", "IsEnable" }; + private static string[] targetTypePublicProperties = new string[] { "BotsCountWithDelayed", "AllTypes", "IsEnable" }; public MaxBotsAliveOnMapPatch() : base(prefix: nameof(PatchPrefix)) { @@ -17,9 +17,7 @@ namespace astealz.SmartSpawnController.Patches protected override MethodBase GetTargetMethod() { // searching type with properties: BotsCountWithDelyaed, AllTypes, AiTaskManager - return typeof(EFT.GameWorld).Assembly.GetTypes() - .Single(type => targetTypePublicProperties.All(p => type.GetProperties(allFlags).Any(tp => tp.Name == p))) - .GetMethod("SetSettings"); + return typeof(BotControllerClass).GetMethod("SetSettings"); } private static void PatchPrefix(ref int maxCount) diff --git a/src/Patches/BotSpawnerPatches.cs b/src/Patches/BotSpawnerPatches.cs index 2f392ea..557e282 100644 --- a/src/Patches/BotSpawnerPatches.cs +++ b/src/Patches/BotSpawnerPatches.cs @@ -1,12 +1,14 @@ -using System; +using BepInEx.Logging; +using System; using System.Linq; using System.Reflection; namespace astealz.SmartSpawnController.Patches { - partial class BotSpawnerPatches + static partial class BotSpawnerPatches { const BindingFlags allFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; + const BindingFlags publicInstanceDeclared = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; private static readonly Type scavWaveDataType; private static readonly Type botSpawnerType; @@ -18,6 +20,8 @@ namespace astealz.SmartSpawnController.Patches // ctor static BotSpawnerPatches() { + var logSource = Logger.CreateLogSource("test"); + var scavWaveDataTypeFieldNames = new[] { "ChanceGroup", @@ -31,32 +35,72 @@ namespace astealz.SmartSpawnController.Patches }; var types = typeof(EFT.GameWorld).Assembly.GetTypes(); + var botControllerClass = types.Single(x => x.Name == "BotControllerClass"); - scavWaveDataType = types - .Where(type => type != typeof(EFT.WildSpawnWave)) - .Where(type => type.GetFields(BindingFlags.Public | BindingFlags.Instance) - .Select(x => x.Name) - .DefaultIfEmpty("") - .All(scavWaveDataTypeFieldNames.Contains)) - .Single(); + if (botControllerClass is null) + { + logSource.LogInfo($"botcontroller null"); + } - botSpawnerType = types - .Where(type => type.GetMethod("SpawnZones", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) != null - && type.GetMethod("ActivateBotsByWave", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new[] { scavWaveDataType }, null) != null) - .SingleOrDefault(); + var activateBotsByWaveMethod = botControllerClass.GetMethods().Single(x => x.Name == "ActivateBotsByWave" && x.GetParameters()[0].ParameterType != typeof(BossLocationSpawn)); + var firstParam = activateBotsByWaveMethod.GetParameters()[0]; + scavWaveDataType = firstParam.ParameterType; + botSpawnerType = types.Single(x => x.Name == "GClass1243"); + + if (botSpawnerType is null) + { + logSource.LogInfo($"botSpawnerType is null"); + } + + + //var dataTypes = types + // .Where(type => type != typeof(EFT.WildSpawnWave) && type.GetFields(BindingFlags.Public | BindingFlags.Instance) + // .Select(x => x.Name) + // .DefaultIfEmpty("") + // .All(scavWaveDataTypeFieldNames.Contains)); + + //var typesFound = dataTypes.Where(type => type.GetMethod("SpawnZones", publicInstanceDeclared) != null + // && type.GetMethod("ActivateBotsByWave", publicInstanceDeclared, null, new[] { scavWaveDataType }, null) != null); + + //foreach (var item in typesFound) + //{ + // logSource.LogInfo($"WOW found: {item.Name}"); + //} + + //scavWaveDataType = dataTypes.Single(); + + //if (scavWaveDataType is null) + //{ + // logSource.LogError("scavWaveDataType is null"); + //} + + //botSpawnerType = types.Single(type => type.GetMethod("SpawnZones", publicInstanceDeclared) != null + // && type.GetMethod("ActivateBotsByWave", publicInstanceDeclared, null, new[] { scavWaveDataType }, null) != null); + + //if (botSpawnerType is null) + //{ + // logSource.LogError("botSpawnerType is null"); + //} } ///

/// Apply patches /// - public static bool Apply() + public static bool ApplyAllPatches(BepInEx.Logging.ManualLogSource logger) { + logger.LogInfo($"MaxBotsAliveOnMapPatch"); new MaxBotsAliveOnMapPatch().Apply(); + logger.LogInfo($"BotSpawnerOnStartPatch"); new BotSpawnerOnStartPatch().Apply(); + logger.LogInfo($"BotSpawnerOnActivateBotsByScavWavePatch"); new BotSpawnerOnActivateBotsByScavWavePatch().Apply(); + logger.LogInfo($"BotSpawnerOnActivateBotsByBossWavePatch"); new BotSpawnerOnActivateBotsByBossWavePatch().Apply(); + logger.LogInfo($"BotSpawnerOnStopPatch"); new BotSpawnerOnStopPatch().Apply(); + logger.LogInfo($"BotSpawnerDelayPatch"); new BotSpawnerDelayPatch().Apply(); + logger.LogInfo($"BotSpawnerOnBossActivationPatch"); new BotSpawnerOnBossActivationPatch().Apply(); return true; } diff --git a/src/SmartSpawnPlugin.cs b/src/SmartSpawnPlugin.cs index 437b897..86c1edd 100644 --- a/src/SmartSpawnPlugin.cs +++ b/src/SmartSpawnPlugin.cs @@ -1,4 +1,5 @@ -using BepInEx; +using astealz.SmartSpawnController.Patches; +using BepInEx; using Newtonsoft.Json; using System; @@ -21,16 +22,20 @@ namespace astealz.SmartSpawnController // get config from server var json = Aki.SinglePlayer.Utils.RequestHandler.GetJson($"/mods/{Name.ToLower()}/config"); - var config = JsonConvert.DeserializeObject(json); - - Globals.Config = config; + Globals.Config = JsonConvert.DeserializeObject(json); // apply patches - isApplyPatchesSuccess = Patches.BotSpawnerPatches.Apply(); + Logger.LogInfo("appying patches"); + + if (!isApplyPatchesSuccess) + { + isApplyPatchesSuccess = BotSpawnerPatches.ApplyAllPatches(Logger); + } } catch (Exception ex) { - Logger.LogError(ex.ToString()); + Logger.LogError($"Start failed: {ex.Message}"); + Logger.LogError($"Start failed: {ex.StackTrace}"); } } diff --git a/src/Utils/GenericPatch`.cs b/src/Utils/GenericPatch`.cs index d3e19d1..e12b955 100644 --- a/src/Utils/GenericPatch`.cs +++ b/src/Utils/GenericPatch`.cs @@ -6,11 +6,11 @@ namespace astealz.SmartSpawnController.Utils { public abstract class GenericPatch where T : GenericPatch { - private Harmony _harmony; - private HarmonyMethod _prefix; - private HarmonyMethod _postfix; - private HarmonyMethod _transpiler; - private HarmonyMethod _finalizer; + private readonly Harmony _harmony; + private readonly HarmonyMethod _prefix; + private readonly HarmonyMethod _postfix; + private readonly HarmonyMethod _transpiler; + private readonly HarmonyMethod _finalizer; public GenericPatch(string name = null, string prefix = null, string postfix = null, string transpiler = null, string finalizer = null) { @@ -52,7 +52,17 @@ namespace astealz.SmartSpawnController.Utils /// public void Apply() { - var targetMethod = GetTargetMethod(); + MethodBase targetMethod; + try + { + targetMethod = GetTargetMethod(); + } + catch (Exception ex) + { + + throw new Exception($"targetMethod bad: {typeof(T).Name}:", ex); + } + if (targetMethod == null) { @@ -65,7 +75,7 @@ namespace astealz.SmartSpawnController.Utils } catch (Exception ex) { - throw new Exception($"{_harmony.Id}:", ex); + throw new Exception($"{typeof(T).Name}:{_harmony.Id}:", ex); } }