From 4bb9d6c42ca70fe047cfb1057d25a86263212237 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:56:25 -0300 Subject: [PATCH 1/5] Medical - Add Painkillers (#9720) Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- AUTHORS.txt | 1 + addons/medical_gui/ui/painkillers.paa | Bin 0 -> 5625 bytes .../ACE_Medical_Treatment.hpp | 9 ++++-- .../ACE_Medical_Treatment_Actions.hpp | 13 ++++++++ addons/medical_treatment/CfgVehicles.hpp | 12 ++++++++ addons/medical_treatment/CfgWeapons.hpp | 13 ++++++++ addons/medical_treatment/config.cpp | 4 +-- addons/medical_treatment/sounds/Pills.ogg | Bin 0 -> 65172 bytes addons/medical_treatment/stringtable.xml | 28 ++++++++++++++++++ .../medical_treatment/ui/painkillers_ca.paa | Bin 0 -> 27837 bytes 10 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 addons/medical_gui/ui/painkillers.paa create mode 100644 addons/medical_treatment/sounds/Pills.ogg create mode 100644 addons/medical_treatment/ui/painkillers_ca.paa diff --git a/AUTHORS.txt b/AUTHORS.txt index 190b12bb6a..a11e39d78e 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -191,3 +191,4 @@ YetheSamartaka xrufix Zakant zGuba +Zman6258 diff --git a/addons/medical_gui/ui/painkillers.paa b/addons/medical_gui/ui/painkillers.paa new file mode 100644 index 0000000000000000000000000000000000000000..3c5da9b30b4d36d599a03d66f0a3d1c8146f5662 GIT binary patch literal 5625 zcmdT|eN0&5~wSat-VKiBUvKh(1u;L8z z&mvljWP~Ba%x#Yt@QXhh`A}yen3Nbo2UOdbK+4dp5VDkv$FAqR$NSiXA%G$P*jQ+-hAZ`f{kw|l(!=axUG%guBklo^QTE?uH94=BD+M<{~r z?p81`qBm|xcp!whtW1qNZ7loAw^{tSjUPw;1`uJe9rTD>)V~p^sS4nFX+UTrhN{T7 zld=!c6{H6^#e%JHV;4z%eIbDA^z)w87__;9aa2~ zcM;YG+nVSyw&MmN;Sv!~NH{Zq`k=n1zv9bqHLzJ(%rCYVrh2truMft_HyXv!cFvQw zGO+|MO7{k?r=+Av{!=>bDFZhZT2my2>c_~BQ1sivntyS??!b7J z`1tAZGaTXM{73#~qgln@>4{__Rrzw(9nS0jZ~k@%TRkN6^V1WK6m5#k-%npVL-;G{ z(tJ@`>$X&ccl?`f+0W{Ok?>|$_}Lw%;$pKJYxZbW`v>q3tNdT_-Fg4BI~pttD*oTJ zw`gKi*zRaC@hS}bkCung{F>Yt%lsH!vCg!4jORN!u1oU2&>iZB*PVQxb$UYm5iBd`yVobQ%kKlH=Su%$ zEfX~TDxLvptkaX>I#6f+UgU3=&OdmB+EJnjpOg zJAIQ!)p*30SFXmEAFf)|m`Qyf>fcH)&SO6G-)^!xq9X*qFo>dqADr(sh>ZeHbM#dv zK$(X@$wHZT#M-BQ6!ZiPIwmXB?0~ThLLW0seOm7Yu}ouCWtub|s0gBi=X&kr93#>d^YU+9h^ zLqm#vyF>r*)M?2+#^c?!j||Bk$v&k%#0}eR|Gfphb^qEnqS3^$PaK1+u~c}Wh(=+b zwE}*;T*mi*H@G_4TPc*u27^)FHgur8UcSZRr$ET7HPOK@s%b|)oZ(mea@xgQe2^ce zp+WI$l%&0JSf$U71bKImM}5M8WYDEVx|m4mSvUKLZof2w4*sm?7MUGs=HbHrNl6St z84{s`i_&+$N=iGJx>^6HXTkV2Yb2%(nrHq38LR_VyL;Q6ETzs zMbWuMQFNll>O`xp4q9z>);e4JyzlS*e&1Q=d~2Qc{de}-*}3*TUHiV~``Y{V+Oow5 zfCB#{u*<(q;cN+5V^TIf&O{&wn3_Jt5$oN@eGJRrWc}BVxC0 zjSk-$XSj$40{=6Hp@Sm_0wBN=Gk0Q_us??l0B8UR(lu1c-|S*oSx`paU0mS22z8mJ z7Z;>=;X^acy8m?{T7=;M00s!jirMAQT?Dsnw%`r2V@qu!JgrX=6~xR58^w-K`k`B^ znyVtW-Zs=jDEq-d0svHJ?Nlsl@e(4^PQ!zjgIcjY+NX}iB8{p`laS^;#AJ8#mlgS* zwlAy8vu$6IoBJJ-B-cRI?md#qja{k^2zdxz`9wUGX z((?Ltt?S!$87$rFu@r^h6z%~)o>Ezqu2_rpJ1nm6SPP!(!d-&`aRB39)D|0atN92Q@O za76vV1U3+rO%Y4_OFrJRQ7L&=T7x}0*q-it)Zlzg@zLKLjJmDy6y&90-;u7;BmE^i zZo8mLD*r&cRgWsv)!YTkG+rE2>DCAa+eO?hQK-4c1^fE-mprdNj|HLhf};j4=Y9W- z_m5cA1RlHHZZiq?NFP5Md0sI9guaCxdwWZ9vFyK#4;AEF@EE@PcoK1cwtNUyyGlEM zdE6nD{8FT+ruhxZ z;zf4tw(aYNYiLK587RdROHhilTArWSQE%fMS=lneGp;OPxf)jf(I}9q#IPKiyvA=O zNh^-+Gdu-q#eXtxR`(8O*}#9Cciw9;RrSDgz}&=V)jGB>d&ACXzr*qO&!z^9#Xlb1 z|9CWO)6%s6E?EE88~{|Bl;1j85Rz$j{aCW6gW?|s|4VbWW3T6G_2%ljHR*cXrQG^p z;q}pCK#jq)@bJL}4B+Ai)x&+P0tPL^2if7nJHzj_hWnr0@7MZ|!u(O2$D{H8p*f2x zLbAzz>YNArFU=_>XFsvd)^W+x^~=-WU9=^=q~^$pmo*aPf72Yk_*Aj@lt}zSlub@A zibyY!o|i=R)xW;*zdir0IqPF}!4uRRMy&3CXil4%mLsT5O%#uhf9AMu03>J}W9fe~ z007!@P;S5N2$N+p%(5J2nXrA={jW6!tR1%S7__~R$Z7g&7`%PrTwg00W^CE zpiBc$xen3tkkfLL12u2)a2W(Vu#j77i(Ujg+6FABYU`+Kj6b*kXIBuB1rr9I{|o~n z8t{b-Sp0(v#L~8kLA3xq$^ZHBKf%Scgn0c2E~c5|<+*uU>tn&?&bgUVgA3D{x^gWAsGM;O1SDV zS~sBCp?=gnic*jt;32n*K*d598$%bLPSZk9U4d*7rU#(mz(fr8#$5~Mlyy;MgrsLX z#chzD8x96R=_Csf#GH7syGrrSM{wR`u_OWtx)+e_@I|s)@m(n@-uxa{fT#lWe#$L+kuD*ZR7o$a1QFf&?V`Zoj$iWcVhax}XoW#* z9I&+HdHUiAQfa*s*mBUq18g}8m+(ufYNVhiq5f_-93QY$v{)tuy$f`)5j$YCFkBb` z_PbC|k@Nj?uTd(MzPeCvd;zw)8pJMfF(4M z01+q)nZd4Rm8eiv2V_~WyMwcK7>i|OSc!Bn(ko=qoGU9>=B_4{MJ%{>VV-LZv4X`i zgag85*5HqeNKKQ$fDd4_7g`W<)8>V)gR9x|V>?u}EAe1>Q-cj%jByI`%)mI=)3vu4 zEHkJK1KSfDqz472R5lFU^z@5+X2QO$H68Lfcl5p;wVp3Ro~y_#sO^;i|jgK z0Fv7!uWI)R12AqCABDOr2xAL{Qu@ehq-13+#p5=!sJB9CgMQY3gc2ofrFG2WF* zUw5=F(tk8Q`2HgCUteeg=^h`hac`pXnEgdrGn z$!k}j9h?nQbN-*=4-tZWgy?@(C{~%l|3KT3|G8@Uul39SpU@aDvaW>#;BTkOQT^da_P`U&QYa8C;4kMyjfy>=v-VeyJdiKe01N5G07>cZDmsWW_ot{;4R)1KU;pQvo6Z z$N#4SLGb(uy$`1??8DTR4%{ z=i+)i31KK-lbUH%S)5+F;_!isfmdwz?$lu z0|k&usAbm}RO(9Y^0v|#cWZ;=RscW~-9)F0x`<|F1hP?;oUjX?wh!p(A9KEVPPkHT zV}DnGf&;<GbSZKoO&% zZD?jg!~CvZ1AGMlXO>VT;y<^xU28{mpgTFcx_f$q<_+@O6H);P0`X_Txp}%an+z_}g)Thu`mnKTa@f zOj}skqc^Ny;`Hm$X4^Xh55|>dl*ww9-VTs6rW!!ShTfatbGOAEyS?hx3bg#plNDfSNJ%;T}0wAynX3RUsFPc6I*5^br$$SI>9;b{!BA%Zshxh z0}W8BoG>-HpDD_eIaE8O7QvOl!JE^KZ2F;t-T<&`VWaCAbCWBE>CJIyu{Z7p6s3|4 zTD%Z%pM#usC?LP9Q3qi8Ke;6b2%Scrz7EyA!N+k`=)Rai5uBQn$&94Jdxzwx-7kj% z*1hKp-Lj3OP3gQW{_&XrJPMzG6#JN9FtYIe>y6c!YwtO&cw_!6s&LygwZm5rT;G%s zJQcd?d-aOiclEf+YUc-Kn`2z$LEOMoOBhfyGDZxN$!NwMT(&~9Fw^0Z?L!P$Yw7-! zsKX+l)o^&aC=396$W(TrlvD$)sLntk_0_8xXK-y=@h#!<{{K;rDBxFA?{bYkHq{9KIPe z-b;QRdS*acBVG6fx;OxZ*%`9`F`3pBy)69V-A3sK_|^fS%>@RSP8i(}+)yd-z5!wa zf@1J#NNhx!5Q|nBYu#}A#1RcZ7`m-yO{`Jh*QEQA&3ay4(pAs_?v zx`=8i6c9$YMNUHis54q_yE>$e6$Asu9^yQ`oM0{COhhLZRfwlg67%lg7S&|WoFXl)T^!=75`J23Mn0szAn=o~78 z{rTmNBb)jrHck)AQF3j5yt`opQx1Jy~9?sq5GF+jlJC*GNEEoRct43GlL<+$09rGlxC{5vVGrPMoX#Yf z$N_IPaOeRdoqiEEKQGRmIuliRAn8~(@9WV`8YR0=gnv8j`)YdcDV2^g8U;9}y!wYW zCfOaD1TWPyou4FDDVG`v`I@k0gmf?pi?Z;C1M8q7U>>*;+h?(F6fs`|9VsZNi=!)?*-WN zTNVRuZ&gH$(TL^Ru%X*qm7Kz9FwH?{fSG>G$XT18MV1c08s#A5@w=pOL3LJZG#kLa z4grl_W6>Btz{m!m!lq{HU&&tF4*#ou{``-dlL5oS%PyFn+4V~}zHp|)tofNT;B$a6 zLA^!N7u<4iV7`Xd@VnsCe6#w}LTH9(7a26~<0YvjEC9%`wdD{{JVxXjMkvr^3B$Q; zREf-vjavRt+xcgmHt6E4f1b8MXRKfC@}nz6P~uQD%&j!{u`{xwM_a#Fc`~`o84B6y zhYHb!G<>)8I`%R!D?8Fm87B+gvZZTfd30p!23da%g}c7YTY)6mEC{=;Z;UhodPJPa zE|Sam2*ElAtI(L$33L=e)eI812T_cVN#$nGYHjn~K9Jdqx%$fjc~Mh1lFXeu-zH?lAg zKq&SZB*js+p3t5l%a#hbm21iY8My?1BDj25ZXs7cld ztpdI$0quem#`GJxn@@HxIkP6;`D!bml0ef!1Oc#@^{TOJy$x9FZ0^qJcAgVLTikvw zIgTdsLI9@?OGeY-CUc+1&MBECT2NN&73PXDN|(}rHitG6tY8P`slu`M{E`P0M)*2L zw1!tj!zyfHJho-^jd8mBkiIG&pMSBss5*S5guP+9t(r8V$E|CIHaIqzk6U0c4N}Ll zZ8E_Iv_Rx^2%-M|)@Rw$3XQ+{omfXX)#CVS! z_%Nf2x>F%U9J%VZBR8cwODj>oE>l`9ZYrfI;^foV>>UC1>l?esKFhda4wtuH#`y!X zYQpROBz%LVRqcio`;I7#TTZP-3pcJP-$z886wDA}6%~nZ|9UCs!j-;|TQ#%uN5#0c zU7tXMp)q#wl+Lz?d(Kwudat|2)NBwIqAMp7+v=mnj#{-$ef{eHSNX$0(|UeKwXmAY z(+ItFx1rh8?(coL7p7-Z_@){iUkQCz|F>7934uXK$$fZHEkH!Wp395N{C6$-Q6^Hb`<^Wy_ zy6s>6_2=~30+q*zfPT=afXjo1ZNs}DBaCJP9l$qX%X}JnAM0u)|1VE~JhkP{V`}yM zdT_j)3@<%GXMM8uW@U4wUQg%EoAou&SWIsa(a+s4OcnZ7O}X7y@kHLpc>^x@X}FoT zL{w!&63ZGxg7w@o%&IKg?}}?#KL_^|V1owbQccBDQs@9eC=vH%EDh$Si?_i{kUWcM zEF1=UruRsOFU&YdZX_xHvMV{Dc?j*@kz|>Y@ObB4XrM@ryk+1X1nRLyn|*ENhT~I2 z6r~njRnS>Pmp6(5-l~TAA&R@22$#l$RCQq+ZB6mkzuzwFg2+=Z7A5#zcgwOleOxtO z)QyLt=qthHH68N?>l*a=4o*QER)&^`y^EZ+xi3e)Pj@nG`*F|8*7Bu&(5(%S-fzu5 zV-S2M^ucuC7NK`4EA~hE-s9y6T$ayG$m$niIX&=FRh=AjsrRnIXF$}*DPbfu8_kh&1m zI@p_uE5fFuA*U609sYi1*@LB$H&tVMp^qvj{bLb5rW)P&l(d@Sh;4U{v^3XNW!C=u zxNS=YYfaR^NqhaL?=LAs<{u=uZa(-{A97eaKapUx*}(U(;yJdS%^W95%PmuAl98E} z_3WiurV0b%vZY+0=kb(F$tk0X-%*TTE6h(P_|0hV9)ZD-B`Y5ORlAPZWI*)pp9=$Y z5_?VM({44_MQqbUwPiPlw5*rUP(Qk7#crh&wq5pDGDV)7IV$thSL#e`T1o)g=uZ&5 zW$RHQq>g@CwVIc6n1~9CL`8}Nk|Nss`s$>9Jjfsk$-4wYIvS&yOMSB(YC2dc(aZ28 zV;FqhM)jvgJ0Iz20rN2XxVu4_>DJhA5VY8t)9RolesE{JATRfDqk4LyYI3@uH8q}E z&P_IImGH`WPcQac7G8Cdi7M3_REvq3;m|d0n5|DUyezp?=FwX0{A}PsWiOSQ?U=V~ ze!lrH_#rRX+`~IZ%Ly`C{c6seuIHq%Qx?hUFEZ?Zv$a|>I!iU%-yRkXJp00rJD~5Un=77ejY*gH71H-0m zgNjF#pZt_agN3II#{89-QyfNiA|$k-TY|J@G_oTtI8iig^N2{0k;I1A)nSr{Eal#Y zv$Mu{^r+sVzo+)LbUMm`bRsk@Ga?yuTZnuX&y*?{tY5*(qW7 zL%6uX5+q5T-6-EoR>#zpRwH>0L?^Vd)XCuQeI+06IKCz{zCg^)1v=iFAsmUlDPDJZ z)O+Verz)*8A@;qU$RaJFd|p~z7s+TufHC0>NEp#AC*ceXBbnJO&#mFGEiJ}Et$0{W zR?jVu3+D}4&^d&CXOnfi7`B#tWf3-Cgi+W{-(B3%MaPbzhLo)2xmglHT`99gJXTHc zZ;yTW%4kGeT6y7hHFTs}TyL`_VCB`$QSHA0kAKn$PT*n*JQmXli?70F#9Q60yq&0a zYrR;W3uFgJS5I$Gmv#1FKEZ>|DD3%VS93uz+6%N%|VhM{FLx#by*S z8u)Atxl9L_5s^vH!NR|m+;>WjYg<0|^-9C9jo-!YZMcd!mqYKAO72u{(t&Kqxm)6X zhHhw1fyweyIjE?z%C(wxQjy==%%qXAK9ru?6D#k_Z`Wzqs<2Q{V16R7vNlx773!&D zZ-4%8sjXG1?gT1#UOz=yPQJTsq-IB*%JByk`YI+S-1AYYu!!p&=7PaNqT%0KPPW@! zA#-2t&JBrOUD|94PCQcBa!|rjjZrbN8KcCSpfZI8yWCG5Wru0vvS?+;%1p}kytLrS zsaBtT*!QI2@N6n{>P?_qGsZj(7Q4e_%NL#`E5}SX=V+t?)}b1btaZ%{TKsmH9DDb` z{Mc9ZxB<7V7v;5AWGQl8Ja(^v%uNLv7~N?irTd7{dt*jm%C3za=eGle4c?O25 z-U~95edb(~V3r|5v`6SD7s39>FLhV1ZaeV0OUs4XKMiMy#zI_NwpiZVOiNLkpS6pB zvr1?{4O=+%#jxp4K|`+4X7^cr9r~DS&M_1>PY)IuiLSH8wQx5Xr8b^i%kC6?vJ!L5 z^x#rbt$Iu1Fy(AJn8(|ecUiOV`(4Wi z6N8Eg!jS8ZunYB*@+UoKQq8Bu)F-E-*j z`*$|0v6sX6?-#adqSYseF!XEFBpjO>q@?SuOL_fK@8`W8F4W6>$C*Iq7iacHRvPY| z-y|AZv3|`OSa2q%!&`MPHcd?AMSq>0zqCpYcr%sI^Wl^$A{W?wZP4@WLCOIstOWSh zL5rPU1*Ys9idDCrjJ_3XsXYyA%)}{00vW?)x=D8fFVzc<+7krF*8`w=yHoKz_LgE? z&fTALS48I34|YJ8ed{k@a(*&~0*jj2f@(P{+JJ#QUq-vNuqEb>(PoE9>Jp;+P+N%E ztRbp1NC^c$;4^Mz_Go)gr1$LV@G<@FH7dK$hx_KJPE93ERS2uQMYl%CwiZaK0Gq{) zx6Qa}FCJad^;Yvm){_@bXy3?qX&DcpaPky@Qas=rYiAzrX_50YXLh~b(iKO{4G29~ zPDZOjbRbLRLlBJoq>yDiI2+DB#eH=#U&taWNJBC>Q$LK(k195Buf5RvWV%^Vm!y=r z6F@0%dU|#*HW!u@a+?2D`uHuAu8I&}PWbG%ek(pK=&rz^y+jn>gJcefyF-kVLb90d z^!07>=+_~^65SVG=1p7%9-j((y=T+5fJ2!%fCc=3;v2i-pPk3&ik8NS%aVsVU*sGA@-i&48)-3zysE z)+#R$>R^AVHjP@$N22t0<>p+zqCL=~7Gs_hl)l51=E2Tt;n5=-8Mzx`rMzpZY&x!a zggdoI;W+1#i0!-Y{hdTcb@e)y`WwUo`i_FoIwm3IfM|;{@h;TBX8a5c795n>W;znG zXUTlsV@1ra%3WKz*vuJ-k5PjINbhvSKRI^d5NQF(4IWn+~QU*ueyMH|Jnkg!kLB%Lz z8~cw#A~EU8!tD_AUB$AditK>@`v1i-%sNp6DHocZ8ZME(8H8Y87s29)&bv=Dtx34`OB> zfB$W4)D8P~aT{bT_ty7tV57$Yyk_oQk#jF&!{CZ;`3egXE0(z_!z0GjG-qOFCd*ng zvX0LVWeiu7OPOqVh7qBTOp=fy)oUL2aZB#krI{Y5KSnZo%f1L3U&SX>8rn?B?+Eux(>WTPm21_QjrCO0vxqV3ffqh|zDG(mK#Irk}I#qJxDv2rY8P8#?URoH>&LDeyR5FcuZ` zQIyWRF*fJgcsxGj6h^Kk&)B%KXDp>R*je{^xGXHw=`R7>LPB;hs>B^flrV8@tTFeX zI-?~-!*A;iXumoCD8-&D5E|3C zTesCBsWN7x6Pq6Qs)56l8C7y{%g{CjnNBSdF7Da+kH5aH3{h0l5$#&gxknl)QUY`t zrwu>739gKV3P`B)+a*C_SrF_#E1jC){qu#efe=c&b!5l z39I9r>~g)jTd4B~e2*pa?n{1&L#sMN8Ak7;iSS>}Xe zvLmZRcT>s2IzAJxshbIYh$m*?A{LsUuxEj|nH8xLGbgozz3k?_SaCPr%Py>b23 zQu%U`6qhydLMI{qr;+9WN&n+%WPov&()^Si|A(0c>aK7h|3~SY>;0zAatV=!M@otE zMPXaYaBhuQrp(c_Dl1JQVa8P>#ey<%Wwqr&vE$VH#|wTYKM-}IuFYq8>0Q$vm;K=2 za+H~O3r*05CB$6i_ijdH$%Q+Wmth@-uIA56(#@;ZN1&GhtT7E`5%wFdl?6wMVAbL*^@5koz4 zm+ZFZ`!Heju<+8-pIUT#8amYMVe`lO)tlk-Qwb^NV~ir4d_s)9gXSC34V0XMZx2~b z!$$ua{s`-k+4#lydCP5IKkC+R62v_YVX;3{6!bd>Y=X|eNf_*|+w&l!o{BuM^J>I3 z&bqgZ4fCD;>*;i7*hV)`d71QmFPQlTZQrd@Y3q+)SC=q}>Yy2{lS+->`9WyOf;yx` zHfD+ahFKX6hkg1Lw6`g-*Zb>=&L7D$J@WdFlM8j}WcoNqUrtch!jv^ihD*6L8OGQN z>t8P6V~jbzX8dM#NPBgXWEkMbiOry=F-7m2cq-Uers@D{CPD3@+5OmTpU`Ojm!tQx z?%BPt?yOopE(v$>ECQ@p_eRs}#KjUT$w*<8v8Ysp-GjZH4r8#>XzEPaCc(-CZ_>PDnxi2a3=H_uu2_P`F)mGk}caiq51UbAj021aK? zmVG^>d827c=LUA;hikl%$5u-d@LeB|JA;w&`#rxdHQfITGI+h?&Rg8+Eq9bI{!}yF zuQjK$UT0}B(Mi2FS=w%jvk*(f!w$0hqGF=){Z~I17EGQzf4+8!c2WU`sstKq!#P$M zrXT1zb=w=5n@$k7DxfU`z1Ga`jk8B*dF4pDUuGzL7@5k&+CcD%_%I-UNYgB2KwX_( zE+98GNW@YzyKNtF^1%~bi97ZOK9h}=vir!Pdz$UY6|*bm-`J%Gzy6%7=6%80{^F?W zwfgb(o^33hPvv*?DP%S0xMo%1&0R z)DoZBd|~p8dikrN<&5M-;^}Q3P3$iH4Xg%%xxLQrZt_d%Y0B|Cxlt63Z&qbUftXYH z{eq(b*|S~T;w)&KZoakJu;qSJ-HQWqRJ!e8jfF^rkk^7-?b|zUviYWBfBWCCd82pl zxi^c|N|R4VPEAe4K*DZy-fcBO4bq3Pks-?(Lf{zM0GV^Bq;}=^j{)ohJWA28eH(5~ zn{@;xE!$KSnzDVL5*R+0oxss74h^z`48ACRl95ZUAHhzq&*VCQi=gzD+xL0Vj25z3 zIw*cag-L{4jl^99|425|Qc5$EsxaJU9M=9#F%hPenQ35{-ZZcqQ&)jiS_3XvV^B)>pss;$YxveLr{EnS4(RHr%qU0}` zno1CK>m!cZY~K-UZ+VTl2ra4BHdnPlxu=;mk?N8A>^wPZCSTiav2A+Pd{&)hhO4~( zfd+Xqoq#ZP^2oO_TyuT}w1Pbt=9%|AlxT20%mGhSAM6f{I#atV|3Jcqy@%Eoo?bX! zzrHKAZ-fzpt5=OHgsSz=}7o)2)Hx_HjJE><>Ta6uY zvXBTGrLTt414zI+#U;XZjn_evU;PW@bj?DCp5AdnQK?ZvFu*^DMMOKczX5p zbDbuXH!;DUQ-YTjmrFLm$}6+__!W2|NLWj93LQYV2y(3I-I{Aw$x!FFD2B}GjApUP5Q7Q?bI|m)T*eegr%_S6k#xI*f zTs!&b5bJY!vdHw!sRqT&Oq2(K)6%jkdLXEdpUKA_H%f{g<|QY!$YU7Z#$T=&B9uvW zJUFAA2{fF({<%0t=MEC}EFt2AG7I;^dHtG!gt)8pJL_xCl$Rgp|2>Yy1nVqK3)QW> z6@q5cb;P1>VFHS2z zutqD`{=n`#e$^`GDOGFwO`R$Ufy^_2nKf}KBSx*&$dV^MgVjW7_rnbXhNZ*RYvb1_ zo{&HqCoY!n8@@)6vtIsSC75yytktl(fmdw*lK*2!W4#hA?5$jsdRkXCbo1Rx?Q`0f zI=J3(Bo2j8SD|zt$27tz`WN=sjn)xKSTQB@iHKWjjreBQD^<@h7T=dOLbWFCGG>-1 znkC1i?2S%;m>((=E-AeSO9{>?N9OcDOP@yU@WW{GKkUD)r@$)K#74t>gcsA<$12BVanLwfqtMBimsvd`mIx>z zh5Ikf##NJ~#a$OJD%!?=6NJ^BM$OpqL(NK^oWE*6REVa?Pa$0Xj${}o77Ah*M3?J1QlXPhxU`Nz-bia|A@kwH*+Uax0$?E+tjW5hS-qK9w8ownK zZOf-{Q^maU!?y~rBLm@YW*=?uzuj=lC*2Na*eYw`S(aE=y*ItbbuX|w}S%w@zh?JTcosFo&}zP!7U?Tys_}QBB_(;C^`y* z&2lm$RbOrn+Vag&2bAsp)~^sS>&&>bB9Cm9*mKM4t^eG-cElM)^!b;k2Fzvp_>P|2 zk0L?|`aC9`jl&F@Mkf}F7?HjioG9a}M4NG}-2f9pAI`+UhQ_{MI$vd{r-ob~lM6+? z3_L{m0;m$_i4R{h?=PpWouBF_Oil4JwS|T)Ny84o@wumZCE@Fi$Bpq&Pqu~KY>156 zX9Gn|UTF-5p_9#1esrf{s9FV6rfuky(9A@UbxCVlOXXba*6yX>BR8FD#Q4uv$q|kn zX_Ds0!sX_s5{lhC5*7Bcyxtx>Kcuy*!9Z`la|gK5tkgEfxJBTXrK-FPnZtSYlp<6%BscFpx%w_I;|#jicvy7p z>d7f@*rc7S@}1NqMa*G+$8(2R*LIWzb#zwtDvZI@c#6m%g(CAL(u8;f%zR3~g)9wdbwaV#Kl4bY7E47oW`V33? z@KxClK5s8PcYb~<@J@k8ZvfIkaF+p*M5tAdT*PKeapB1raCueCt5d~*CF|lzgM}@@k7Wp$q$HXH(tjZ*zru& z#9oGn&~!@0W2NtX52fqD5zT39OCA-P@bBfZfGGh$J;Ll5|%rdxEADX z5W)*kVE6WoX}BlfcNzbzO)ABh5*m^&krMG)jW5C#CnIx7N0qO}Evgs3aTU@$+vR)j zep-k@3+1Vw`Q1ag7}e}vVV7Wt{swzozA=PSXF>4CdFvh&T87}&H8jtzY3=ObdH1KN zL#C$eUN*(79mXw*Hu%CTL-9_0cNO-3H`jAgQIboRk2KynHYQ3c9pKZwEjZRbb_{PU z;~<#;zB(yzc=c=K(uYIc(w325M}J-29l8u$`XKa9nD2;9(yRDn@Wqk5pK~u?Ey{s+ zk**ii+bcA=6&4lEJ?rA#S#sPrlg%!Ca`7yQM{D$hDtX5Vd>OS&`^2}0s|m-E`m?W9 zYqT`r;|#6OGgn4qJKZ)o=S^P_UAyw|%bx6A)5zYA07C2N{adt4yWZCvLul)tC=Td_ z1!f*eKXSwcaO`Y2eY(~ws(PFA$SGT#QV3d38rJwFOOzTMTyE*lW8Mny#t##8q)sxs zC!brR9=L?{)VbacKS2#{K;EE{pIC(gfXvzy*j~8t?Ab~hhoaPmN6T@2vpD6Gef2o4 zltfJc)^O420kS}kdu8QT%g08+#7`H0yiHLDXylaefr1}4mrZxGS${7ar~mLC2@3Pe z9Jw_&e7EMr-GJ9ya_<$}ZBe(*Z|iBIl(WmlkjCneE|xteCfj|r{fb92?SXhGa_4A; zi^QeQa^)wRVnZ#5EY>G|*?k`m&Lx5k5=Bux^dDqIBXP@l+K^oumY<2Z80o8?TUI0Qpqr0Y#@eP>?WJT4dtbs7Dd&3bkye1wYdR^+C7 zC!3Z*6HNd`jzdWPS3XgPqGUpb`9a6gFmb$;iqiyy3~i?lE0>E#@Q%EtigJK@kV|B! zPL@x^rf_HXj1c9JMmPo0gakAYXO5QC;=xx)+yAC>agX8?MWEO7`ov>RFxf^v{qKN1bD=rvVXp9*C@3kH_+96L+(QH zRZM`K;`%*?Y6-8g_AkFz`gtfih__Tl$OA;gEu%yPT11|Pg#t|FLHS1X4p{97cCZ7R zjK_knsYFKTAPRy~7X)Vk^2kscL^d2j83R)`^hO4bk;elfQDtkXliP#XM~xDbXqnUD z*v{l)%D(OjIlv!+NrpR=X?Z6>b^4J2(VI*URjL307Tb7)>B`2I-pC}UKZ26oXx2?a zdE&atu!@evc41imNISU*TaZ4sXj3&@+1W zvPQ4utGW2ljk8DVR4d=lO;VVN`&Pv7uq|=HrAoycJDklYQGgK47QB+SN6aVn2@ zw%N2p8WGGu*QW8_TjbZIoih}RBDh@*4fSP&WK4r3sW_+2SOraVEA9zO?C6R$fR#}w zVG6C_Li(h=n-F~cGR%*!t|qwMAE{LKg_H_g!oA7Ka!Y#5je?3yOMQC5&p*}C3PlhN zz`NRcpvEzr(0~W<1IqzAbLOWyYtYHKTwzbo6%5?`ZVi>{Pmu@q07foP9LnIS{04f z+&TR&0d}%`?6WJ>WYi0sRZ1ULJA#GB zP?bLfH>dChxM%<%rKW<<5n~ZNQM?BbR=xmCsY&fhUA?wK(~7uVeh&D zbk=bNFI`&K z4n$&R3K0Qf07RbH*F$_PCQh@fhb8mll}N#z?{}r@!>JOtja97@BctlgOVn)%dh5yg zO9~yrI$*j=ia;dWG*Gz=9^_6=%}bOA$eH0sEHfXL84XDThf#YN7M)EZaDUNS1$mTp zEX4EB8}v0i?c4woC;?z6n1E+JO3bX|TG=OB3ZxEw_L(y(|Sj8z*lyX*EEe=L|(%(As>7fSW zh$`DTqKy@ABypw%(aRmn&%y1fz(ZaVJhDX!KG+3u7Pz~qT_|cE9u`#YS)|(aV0?G$ zqNJ4KU>)Etd~ge!3qaHZs7y5775o5MOk%bw=Mh)6XGd!aTgIW({bcXmL6-6a-M;3O60rbK@Dx^ zpkk~I86zoHK-(CzbXY6`vq;qW zZTm9{RE;P0>7W4<5=ktP4Ty9jPDkyPr%v^^UT=+F+6uG<_a-1qC$A^`{N7f@!$qKg zm;|bYZ5&@62cgqp!1(^hyh?fD=hZPu+ksq=I@S$C`_%6=+IHSeCgU>!hMyiUFUZ})qAPKXr?pOURa9w3q@TeR7*YIeV$MYzT@EKy*^sa z$K21Q3CE>m!#j2W#exNI8>6Bo=jEbi;w(PuPH7WAx9+qp*^e-TY45aegDI?mxdLnd zy0dTrmK7*MKZG;RV?9`^A+ zFrQ(mZ)f9;*XJKv=?d)bR~S=OQ!54bxT<~lv73-BY2Y`K!3+<5Ktv=-N5mI|_+*tV zrUjwX?k$C&Iol@^LP9DsMP+G0Cc-1oW6#9+MxX0xOFOUm)rkB+GC20dHNKZN>vg9<8jKnMiT@<$n49BH zVCp5hGMkmNz2(v}(lD(rOl$9r3&SbG-MTP6Q;EcAL_A_7w(>?hV2hHtaRSZ1yW@h~ zm-CeFN}d>nl+`CSJb;$}GMYBoqvj`6=zK|kgK}_MvfCOYu^jBd0qJ7ZgI~kb-hwS8>9uZrgN#rLZE@?{HGcc&^%+|d`q`yS53nGI6~P@ z3@I#Nt6iJ^T8Ozfd={TypCDY(v&vcaG%QDmJNNxjr-;c{*%(23c!Fm=|yYGkJ=Ys;GT`yS>$ zPVnQsK2m-53ZORUgyh3wc$gJw6CL3z$0y=;^XT;fL4DKc~J1`w=r*60-D_HZR!jhkjL9tnr3S&L;$*5*vewnR%L)tq% zew+~j=gVYRK&5;}`81}Dgfd1;|xEO6;rz1yYuWjf(j+s{YllLMCCg%>Z$K~relbXVw6r7p~7 z#8Sxy3l3#O%$%&>xmsa`$TQPORLV3F>Ku*L;(6nIkEG(vBv2xDRXLC{6Iiov+Wj>3 ze1+SW64!&hpOKSOo~tl$U7j*WY0j{k$&8cuVl%3zS#^C60}L{YxvLs0Tx0~qwG&mgAxq+lP#R?r#gS;}k^8)9f1l-jA%hNn2n&;UdO?UL<)hDvi9 z5)~0>e+asdNgm5T2ef%nM!@ZQVd{%cj4K0owyrv`3qBo;7mKr%)Nsx7XNN3>;7LPOvvkyOM9Q#_ZA^KD0Re1j`rUIgl!9+YEA zdR|+z=*SojS_RUXjBO#`t*TP4(;&u$`Z86(3*cQI?DgLI2-dD;%)U-2REcSfZBQdzA^IbHVJVIiDybF* zgpF=4y2sRz;NLKUEDtER3ZUwA`Q*W?re!o_t!hBy`A#AxbYFcUe#{9_xZ({*s01tia@jHM=u>K45n$V zYuG0Hf!PiK7z2QwJ-T=G&h#d%0Ps<_{80;~mgY~P4U4kA@HX<0$`aA6#-TTtH!k9^ z8Qms4bckQ144}6O*EO2#rH-YBZjA^M<)Qe^xNHnwZV+j@_s($aO?~93ge#i{XS3ie z@;}}HLrIM!#u;!S7CnGcoyUaS*CGKv4C1})ZwMlE(-wgswm+?8gh1mKGNDQfu;%gN$7x}4UAMF zpyySDsYCkj&K?{T;0XHt9Nlrx1c=6#7C#E@{rri?0YqfKx!RvAO zaOk!z??M_*Yi_ZyXx%)pw75tlCg^XjVt7OoOd;kXluRVyWpFUWO&gV=IlH18vtf>Y zD;P0XzY#RZMpPtsi9?Z?MoKg$KA69Uze|MzgHQn^)za-cZ~W4MdOqgAQjk`LJWv;` zO-}XbvNXla0yzj@)s{iUwcxM7B}#jdx(3v=3aTJR6n|Gavaoyx3g94J4fS$bpwp87 zQJ@QN6<`JAIW#~HI=7|&pO@zn5kdqG{8IjDX}h1SuiyLi)h^Jrw_W4QhAW@Wy&3Sx zz^B|uVSYt!nmq7f(>XLbn#Ll>0WV3qjh+4qV_=cdefr@?_D^H7EkW; z?{#46cRDvc%DYP5h{nX$=L%$!UTCRfy@{d#cXe<0#ibHPDhwEDt%yCK0SF2_+c=Qe z9MvkkK?S2u3j@xW*OQ9o?S&BT6hG6dtpE)NxSgPpIKoWSD$A4lOpj;?hMm9uTbT?# z6_C9>!ri+N$W5+MG}Z?Dsp-c1*A&W=k}`$d%qL=$er&`6UEq*1xaFAJAaaQg z1^8#g7}-xrKX~08>-NTnFFvNGT@y-P=07xm9m3mzRlx{L ztsHuWe9R+Dv&Pdm*t#L?QPem?#RcCtvaH3HfH~QiWXRAgF3t&&4?lAo!Itqf$*Bis zg{NYsOzM2yQ`If(GrM?^do8LgP}wkhbs0aWs&I{)y1V z>nV1yW7Y!g-C(q>i4l-}(6+F}7L{$F0sVp^+VT*p+gc!vVgpBGK3opS?CM|uKyYuf zDnKyowKMR0yS4qON@_J34I01&nFb$Rpg=BO!F($J#jQ0E?ywIassBB2#LFx+nXCo? z2WoTxNG@QozR+XHFl=RfGZ{BK*oALZ#Ui$TmO~Wu=4vEQxFAoN(z`FP^f@sM z1IMh16H(VAU#(qw(6}d3J0?>Stu_N^;&aiN@1BD{^=;M4RspVnWsylP1BO8fK|s?# z8`2>3N}t>~lGSFdOX}8VzUqqw=1sqX5Cb@aiusI#&&9*pljxE6P_xvlE5e08$!> zzNAS08Mw&_mZ>E7LJ!?i&7M)cEDxI_gf|LiAw3M^4{v`kT)#NF0C!)Qu=*jQisf{P zog#1yC{QX0LX4c5mDf9vqg_R0QtK_+5sMTeBzg33c+LJ|a_&O~q0i0GPc^Q<*qaD6 zx-PV?`^lq9gfYd?>G1tENTUqP0gYXT+)FG{klZlCOpNG>GJxNB&U|yc`paa!?#qJ_ zZ$4?(t%LV1Q58eIeP^xW?em~deb@1i9JO`K%`VrGcau!=)KUE%lLdV*#F&97TAwsx z7qMPzG!~WldEZHIUAHfuryOxB_0yJH8v%z+cQkhX^f(iMb~&%;50joZAh?zdtA8$SzTdZc5<;XO z)Cjv`c^3cD%<+F)ub&-}h9QfbRpsO!3&9fa1uKaLjb2Zo+5dV zN3DheD zy)~=L6RsEXO@ebwqAuTP+B`lrZmfRu`p;|DQOX9NhU4LD6bf<&O>bk$amjJfgkb~g z1PcvN3rrsi1&iTQdcA-Hqm3j>79eI)I#o%$^nK3AD<1V``_y)aM?VIjcqw*0+!C6l zP@HbQHCVqHQAG^Vh-tu6{28+;R58qV}oWFnPyqWQDg-fpCB}d%Y zMNaeHhdeDFjm74VBYy$&J)rZ42c@1dx|@zq1s&fh`H4mE-WbzxRniL`#?#lmw>+*2 zC_B-zY4OjnKaz|G4tMFw!yt&RWbm_kB>5cJM5%eWFpRtGe_Lhq0sk*R3X;nSh&H-_9e~zzS`kl;Xw{q^d8SMXgJ)kRA`dhyN` zy@!mk>W2ZEFB*MWnP)VvRRGEcRQ(BO5Sr958bs}$d77x+C=sI)TkTksru_cp`z>K1 z%!cH-_NPrq{3D~cEEO<>bvH!%wB>g`UqdV;yNtVi`nzUf4Qyy=$Xp63uG12^xfDRp zq71n8Y_L$R#ZL3OA|0;`&N^^#m++n6?lp!o!K1`LYRr)tPm%g;8DgSVn+#WNByJ6O(fl7x<2a7UX=xE+njk< zrIW7IJx80C0!Ks5dE8DH7vPLV)-;x2){Sy6p%uQm)CzNczqHmpw;<2GVscsoPpG|7 zHx;p2DE6wSk5`BQ9(z3Mk}q%FeP?F*tviy(BWr!8Hu#I7k^e%@_|RBeo}>rl`?+D5 z_d>N3+ynRBTBoLt78uHj`a!RLx)#>Nx}+{xrD*zdQzb2n%d`Tw8(Fy{;sJu#_|;lo ztm`&<%mIdcXjy8YlHQ<}T)KYx|J!)hu`?V}yob_AhPq}dR@6p58gN~Nm&45cUrbrncW`yMWdA3`lnNnic@5WS zH#FHzc-#2pT(Vj;m5o-B1k+gOBsB!BR*9reI)JUUQfDsDc3cvQq^>Daf&>#nX102D zWNmU#bcZacseUDK70G8A%~t}$G+l^;Lxaqna-fB3TI-y&q5^YgX*g4i%@Map=_}^b z)}SWpgl}@o_nsc1ZH(HFe4XH1DZ~f2FXfe?d ziS7#3fb47RPcju^*_LrUhH^wrJ(ixg?cA}e@olToolhW^%VOKC1W!%g6hrG^e>v^i z1!c2XlQr)$?+)TpyIc(Qoyat{2ge+8)HhhSuRV;SFNmdD3a{!8RuRVR&(fZhuh;pR zlyLVJ#q8aN|I?@~`nVP*ps31)z!U|aen=csExz1YUH*}ka!L9#!JoK)ac}vI>2);| z^xt9s(iANvy<6W++Y(fxh^fDmL3=f600>ayUSWz#!x6DIqb(1lQLWzF=RaJ?zy4|S zBePwu3OdV*wulkfy=O0)a#H}$uEnQznqhgt!YP=J{+O0&R3jxr>Vr8DK~l71q5XgD z-ylqsh+>(oqMt#91PPq^eg7f%_*wH@zb${W02cJPa-Ac*Qf(oGj3FTQFxluHqvoK{ z4%tK#Z=5jjcc{aj}Kob2IiS*WOE=W)H$5AuwN@i1=p%zg#NuG zmc_;;St&=ZUNIeL?|w3FUVZ%5O^Q!iAS!B z>g~a+_?>+w!QeIo1hN4%xu_Z+=C7~cOcR;0^=!5-rJKILAb;i0bDwkoo@)B>e#KER zHFaqa#$u&JoY>Ij$A%J0awg}$!6zTWlr2~;g9L^E6n0fC3Q&Tq3A7Du<~r35ap(d;B3_B0y-uCsWRPBQvW5OE$pVH zch5cUm%zT5aTH)_ed)nK3!=)t|M8cB*I%A+u~r?v$9A2B7?tDH`zlnr++@lqj6fs3 za-uOy9!*2R*`B6H40|{lc$+p!o6u}#x51Cq!Z76*k41C}Y(2z-eo3Pd#&lT!EObTu z&<)wIE=oNKfjKcWHZkjA!L@h@g(Sv2DiWu~zvqCVOciQ8NaUx$W@BmydY@8+6Ic^r zF77A#FB~STF;^yIWlR9=wfn`Cmjc21VBAlF%_3`%ka^>ZfM}xJ8yb-bOiISiYod~Eyc5$>HcmLw)${%?>qsi#ddiM%yNdGs{5xr`8Ym@o&6HlGg-r%*8}Y$odIV}&P) zQ-^RnW2&}3zMtD0cB91qYUahS*S!9@r8ZWZP;wp);6yU~S%~NtJY?6_%}}}Rbu)FF zsq1eUWo9;h-f{XVcw*$+)>0--K(gcWgCwS2@emKcT)$N zWmmSKU-nN(gH!a1YbU3lOe&_=1&O6`$DB2b7>sm*esNT?O4K;A%kuu%HM0y28Ha7& zUhF8`%ObZVr|%^16VQb^2Mb60J*t$Jd3mZOuKqsf2Q@2F`xz{JHRN{Cm6I zxpOubGiu}3A0n>ig*9AO$i%hzHhrdA-ivjr00J{+#wJ9h6I9L3kAJ+&Et}FJ4V*T4 z`O0q91`MK;oK>G;?&t;tlh%ZjNJ)ICQFtjg8>oW-btR7FIsL8b(HDK4JZ^WQ?=T## zEP}cfcXF?=d_AM(MUg6|QIW}!LAfG_5VEpdHgqygo zJH6iD`4@Njc%#)j9f99(wNK}Jrpx|`H~Y{T*oVraa(5gJYd?;78Ji)>O(Pk_Shf4S zmrqixa~u5SckwVJP<|%c7uXty62{#+UcFs}cjA@ZvBsXfF;f>n)b!=41k*slXWmK(^G&u5N zv2}1tT9Cx{wLAPM6ZECaqb2@BF7`vr7<^%;iJB)HW-4KV@D~h*W-6~QIPNk}K2S0r zD2O@)5y;2TFx_~q5EQ&Y+dyNBOHK@oZYsLfVQ8%}3;+#F%zQ-$QvT%ov*8`%ui|@_d!t(P%5N%FeB5 z%2f@-Cxf)`>;G1jf2&R&AV@0exX8TUqUC*WQrzxikx~Fz`}U|`w%DqIHxdP4OtFo@ zus8s>IlZfbQDkVK-fn;V_`mz!dcJqc={3vRu`41=hJs*Zbj-JZ4qs9I^y1=MJx?eK^|%wU==VRf&>_SO^p2&oNme-x}Ow$G%(^FmyCcFGK`#@)s30 z$8Yyk>{@y`*mOSEZ#nvkeEGfzDUv8@jq3J0edGGNe|s9Kx859cT?Yp&-voNLhij}0 z@{WFZqg45x`6kDvuRvD-BR>dMYLGc@9-l@u(sK$uGTcn2+kAMq15)+Y98o%Mz1$tn zEcqcveG@4A>P`1T6hAe2YC7DTe8>qIo?(}9bBA&L43z$m)k_CS@{V@~;{h#wu3QmpaNCKm;0oZo?9;k zCJx^p+?e68A15&ILx(URf3oA@hmcrNq(Tlu_Y12hL104-yyK2 zo25&7EUQZ3y~>-L(vNy9ydu`8(~0$)m5IN+_fj|5KarGog>5l{vkT{oTF7% z6tTn$Pk(gKp8-=IZ^DkP*Tidu#@8h^-b%tnTB7d1ls(IJEy-8P?Z(M9iN&&DVWLV% zsB%#-Pgre;IN6Ky+%%w&7I z`uI?MyjS&B5v$N|i#s9zzsud-Z5xF`aq?w&c=>P`-o7g{f$la)taQv=#!A_7`_X#&$OC(Yu9zrN_g{xR6-bBAW16{*)>uEjt7C$Min_R+X&DFsxzEy zYW+6e)B1AtA+6DlYWcOZJ>5C}{70bkO-5YTHrPf6Xh;=~{+FLGq0ow8aMN z_6k{4qe^q|E_Wy~!yO6J(`%3p;BlY?oK{sE>X_oDTA54yR;Ru=erR-+1)2@xw&jk0 z^UvOs5Wes=`CW3u&F3!<8SVK+kI_#F5^(RK{k0p|mQXv4Ou7I=p+_U(jj_y_5rPCH zfYggPD0cI_cj24&=|AynpMbVqK!1MznbXK+Y33P#(!bAZc^mAXM9;}X49)4aEuN-u zlzHr1%kGz@6(FU9U3izu=*Kpyo)vMkupE=R2xTpH2BFM9Jx?yx=E~K!dXt(utvGp5 zLGAhVC?XO`&%A#AY5maN&3un+q}z(>p`t;P6amhI8=UL%u*~XO*(-W`yQk*$4ak%80nU_?jR5FpmYWXfS9mZlyPy2G@YMz|=cL z?;T&+?jm=j!5LYCsrJbhz@uZG2`HBe_ZV*%mwp)PjDmS1$?LI~(_K%ZW@1XG;eXHJ zXEh5EnGc+Q`b8>l38?hiBgtUeIvZsI#7{iU}ZBy3Xp# zf#u#Y7Gz~Husn9n?GP7_2g`;08JKg3OWPVUmn;ZTR_uC^UJ;XPNl@o+CaSp*0%!i< z6MzKSw6a_SQN-=$PV9S72`b>9ssF=31sTLXSl;$R0ps`~-$oGUx>XZq0&G7kgC03g zQn>*$L2#J$I)V#6yp2PsE@aO^U*kZhl;mfoCMyd~AN>?-@HCIV?94AR4q_buQvJr0445Zc;?mL{}cwZD3%~1A}QK%gq(G|TK?&VXL}oA zmOO`a`KSJ<5{t450bnaXprx!v&F0V&ts17H+$P2Nl-gtU6I?Jpz3%oQxS^#XIR(Sd zyA?2kU52lG4^(e6Cg=1@ZhtGS+XgwJQ?zCbQIgPOsB8=-KT=}9HLkM9rA$k_#Dv#f zMb6K%*yC?HG3kb&$ea>guBI#$-blCB8-^`@542f4Z-4Qhu0wB9o_)NrcXG#C`XT6C z!-kFxRPDoP=$CdW)*V#^+LgOT?(Xcjgi&c#N5UF}VyPfvzVHi=@ggdBof)=Sz_+{` zRb+4;nE(E)Y>)R-{(k7E>44WO&#wP($Nv5=R6=DH>hiGV1a@?)n>%&nSuuOf( z`+&kyn62gjf_o)OA8Q?c|E>7`zAq{K=n9dKrl2yS2(GlHbo(G_LT=@EVCFoZTCZ?O zwxQ$pH#giGeV%t$){WdhcQezz;N`wX8Q+AojhbjNEk%hYMOaY!UPViG;balpCwjIX zh)LP+=wIKK^VJvNZWMkMDmudEzXw`e-!h`}XanK)!Q9t6p5a)DaXm92Xn8MV0Ql_VbCL2oe?|!;KFft%Bn#kxl;3|npjv3&-0etCa#W^f zOiJ&%l&xvy0)k1CPYN1ABS@sgS%Hi_E8)4}*SnP#s-TpRbonF=MJroTUU?%pZ@NQA7#j)-TpD;uw_-<-dY;F zv!%xTIzL)1pjm^;QdChSzyO-a?hKBG1akUCTzSVFWjauy3YKZN`lQiX#oEk% zM?6l%Y!$;3JjiEYgWL%Xw<5U$EC65^s7A52KsMtlcrb(Dp~b%TaA-d>do)GabE-UK|29+h2k8qH-^SB zfcW_XrA`4j3)u*@7GrZVT5>6mW4!Y-N6l3WL$~_PyaMLg?pgI0^faBpXz9yj7 z9H{t+jA&jIb_s9;04P@?1FGqyY=E!mbr!gh6H(_(H4PpmNF5_03LVEbT~mRZC-BK# z!P#-tAYl~5os42Hsu=Yc8 zX$mAy(Y%O~)R*67SZcQqu2-eGo?O71pEQQTbby;-9;Yu|f6jw1$r8WK?K$!wM)S_x z=cX$h(&gBv$Jrjc??R>ro>48U)p;FfLN~JW|J!oL5NmHt?p#zpYTstFq%4cl2p(@O zs%Oja9M5-dMIiX(}% z%v!vBwWLlAG5?~`C6S?uySSN5u2&cb6Z|~4$sWAqQYj^q_-v6^jR;%y~q7Wy@SoHnU9I@=XR&Mj4T(h|# zS_qmu!hSzFwYx*GH0gNu<73i^XvIzU;!`21>^wopf3NjF7a=$jWM`QrK0v6bbJu1%s=%A_(C?OQ$xjxQLyYeMo3NEzL7Vz*Yah>%XGj3gXV%!@g-+@!M;i zxlMQM{pv_F`))n0QhP*AC;O<#ygjTe!ELoKhovu8qf*E^cp-12Ox^nm0h+_?;~n5` z0a)8C|CR^oDa^wzE&cd%ti{?q>DY7NJa790`w%&&+ll|EPr;zlW*_(IyTLeY6~jzK zCoZ%}V#oC}Fm~9eF`h2p+j2PYf?{3WTN)5Oe8U#_{X2=f`tN-;1&!rT|N1=}+W_PV zUX*$=wseDmSa{w`j834fOddkgh!*wT(vl;r}03@g+ANDOxS zyl&-tQfa!3g;dBrdSU%@uSYIKLn`!|9}!|v5CmI5=A81Ws&L9pJoRj{wl_)9bUK%l z-CG1vFG-;a_D}p?X=+nRanBW?%>RPT9Lgp=HC$~POU)f8Fz|2|c_-8AmQ2M`z7lsBWj{pq}-N;9J1#zycJiVy7B zYC%zydF;4Rze!8wtPw@4DBRg&*+{|5NI-((T{jlK^M$y!rJ8y;7r_!hg9USSZLwF+ z3GGW|rrDQ(mG4d5p8*yr#yFYzbYEvsArcutm-F?iqoyBm7eNnv-Af+E^1jFx<8DKieEDnlwEdWhvMS*XT~?fdJA0mO%vZw zy+8iJO#2@ybbs5#J{3_p-*AwmRv(;?An>9S5j=_;_`j;z%5JT01nU6TfNvPwEx?#I zbhObY5+5ks9Gkdi55m2Z2rnTYwmSTno30TV3q-xXSN1BD*gE<0IzO(wrk4H|P4} z$fG~sPpXdn2Ei;2sU4R;)wJyvC?e zgh(>V!gPN-e)pj?vA))Ey70pltWE#lU;U2j;aPw|^4u?Z^p6wS1@?tDW#oSyOh5h6 zFt+)h_Pe!3L(bMd1nqi_+I~*ASjs+A80;^rYnLc$H9|%GeLWpPxV1x97Ai{#?W*+^ z#Xf=u!C6+kZZ>($3w-Mn{BgZU&RHQ5Yrj1DmHgdwbtGPG~`ag*YvcvyP zOd!DZ@Q&dwFKcf%A5SKOwZp@U#qegXQaKEUouk7J@(vGQR|dm-8)e(p9S+_g#M0fD z<4N}QVeIhoST!W7oV2tHDQYvG-D2mV^*5q5o%qh9YtMm0myM9Hvq%GHlTD_gHeN_h z3q5{!I$k;;;u3jgp!ZkE(dWqo_PIWiN^FN!6lKp{p zk<$`_IO>A6zAzJnyePvUwTMKinUbQ?jvajwm~08e0JXY)c{DK!y6GlO?c@6wy1OnI z&;G#PxM4s_?#A=|-<}I>!1lr(b@1xAtOn07by`fgY?L5Bw%pvF2{|(*u&R)ecAdww z(HElEu6(%J@$2wpfV!x7Ipdqv%!A(7r2uN~$d;WGDLN@{eg-uXIFBsdVtv@HAOwGs z$LQg;iol$y-xg3`{*Gaz*sBJjWJg5uuTbx5+Sg7)b>JuOUd`$2REsNkVRK5jBV1=A z=@P8msCS<=h4KPMl(*Ih4a=@!D^0u|liFPQ5!t8MURoU^e?Bn!C&3#xtdbr?VjNt@O-Wry zj6}2BSj|=(MpQ_SqLht3C!)9gGMRJV8W2~($j4@p>76Z~T!+Ag{Y3T864&B#!R+4; ze_Ka3IlhJ=uIy3!1k*W%YOZH*zdzw$1W$v_Uz>cC{H*w4^%2XPK-as6WU=x;t`Pt@ zW>qH8BtzU)`_A_UiY{9q-Ahl&<||YjKU%r0G_jT^2`+0<8-yd$md%4+v+`3+E`}yLy(p1s^v^#dPkaVfzoKKcGL%_!(KHSmSub%#s`G#;_c%Fv+0h(@8J;r&|r@}rui zf+=KOM)`Bg-)qOwXDh)8_d56U^}azH z*nvM6%{(6wgglbRJ3N%r`l;HX%}P-yS{MsLA50P5B@bxr1gmhg3uf63!L)`HsXBU~F3hycBdd-0cxl)0e*Q0+eK+{xd{d(_ABU&iBE| z9UeLqkBGCzK{_e`5Tsnc3u+*jqN3^q@R9ZLh);^`%JRzfX36HOpoCVyhiin+Zi8+k z13F75ezawnQ@sS&JbI%?m(T7#TBnx)y&I=E!D%{Uhl~c9DV1L3xj}n{n@%r024VocW(GzxQ1*% zo|$}%eF;m0lgJ@o(@Xf6@ia~{H;6$UxNlJ>>Pi*+T4sg{ zALr5Pd*#hRoWZkJx5=rNfj!k;KZkBa7B;tqc?vWysvrF_2^&g9nOkYp=1h3>0`D{? z6tN&Lz=;i@8ad4bsTHXI>DWkTV*D-yG`-c!9Em<@kOc)3c7SX@Q0=;QSqW*shFtpP ziV9I#1F8XOb8qmlVzyyXAFo7HTA@(`7p_0zsEpZlLunO1+cM43uL863uk*zswDy@_ z6@wWCo^uAjfYc&T@~{BWy?=T?teiZQN8ZX2YmC-S;LcHLy9U$oqZyWP@8-z(s%4iFUnSicwXPhM)ys0eZ~fFZV8?U z8&l*&=&Fb2N?wAaD4Cx zy?__j4v~L!zV=(2S7nb+y6G}pr&Qk@*Jav|bCx5%IuXpjh+a73aW>(3u4=*@TKOHAc zk1)Z~CnzpBVlbnSTD^scJ443p;Wc##RYdjAu}s=oMKyOlMg5lvS77L;H!E0ZgHVsl zmDB6ah=r*hk^g-&1xjdn&K%B&Q$G#@7j>mha8hN*f$81s4Q?0y9#h-?CMzpBg{|7E zi0zUQGk(^d2hguhP+PbJhx(ulXR`|U0(7?8mMimIy zS@dQxhMFN|URe$#nMt2LRE4ZaDU5M3$T-+p`51IiygFf9qc=AEx!w5NohZ-2p25#~ z1{q&LHL>213nVYZzg%Guv+UOxb$?USrl$l9ryTvP+6$@ZQF+4I8E``k0$VkUL3AKJqpj z*XX=B;fL+jPcsm&QF(D4DG#F|~cL8*8QB*y;7o7wXZEG7F zpBP))N^h=<7{$4sqH=3I_njQn*B)vjfIRdQcTFCorQP0Nvtj16=2A)XheJ(ckJHPQ z!C>3Nd0PHa@MbAONDpMasd7#J^z}j6>anQpc<$A2XDUH*5c+yFS$$FLIX!gTHR-v) zX!3B3LXwXYJw_M@QQqo%Crhlcpdmv?H!6Y-U`)yc$gdOcjAT`Zut`|6sHrrem7uBN zWt`REDHK5bazeSKvF^Bw;6uTY9qCUvV|GTfFTS;fBJ$lWe2||S8cUNn`eLx=VWOBC zk|h~6l}LX!e8YnJDRO!Lvc8!$1t~hY<@YzQXG`BypaFWTuYyf$i3&;SpKALtpLTD2 zFW%@cJXhNpIclo6;Rl~&GGtf(sMVK9RB5K{d;dB9#wA}?OpOq~z##_sDICSs1zXyY z#QnBACbg)o-f-{m&8og2!X?Mpg)gNHC0bUp=i7;ww2rTomc zyt2oYQYq#@ogGU~dgP#ST5VF>baSH|72a4UNs^8qZ+HU(fox855r`|ZtMex`Cav9j zh0h;&s-s=Hy6Q%oJ?A`~Y6xH*F`kw+De+^_6pzoa=6veKYR_Y7%}^{Yrj<8*W_97{ zw%dcdpe)R)TwYSqhvQJZ?{^N^3HtV5hd%IONvQ~2O-X8xHZfyk`=o4)u4427a=m0! zD#3Bu_?MXIw!OTrEnYS!&!0Njeq``E^1S;{_*t15OXZ}p+Qqu3)oVMeeWl_Z>5&_w zY!p;G$6DWv@0l+{8}+v;Yl|)mF(i0&twfB!Dvn~K8%;jm`(u9|RmBUb!jK!tu{q)h zh_aBoVG}gy>b=7U0i7==s9K>m__=MqW4}<5=1)Z)vk~4=CR^anML1(8E+#R%o7&%z zmR4@##dsA*%WwBbBfzyI1ZPGl zANtdow7isW5p)X|E@vMOlQW4f*{y^VP+e{j2T zf_k{M8m~5UY}tF+`OKeO7FCEjKiv+Nk2Fo(O?UD`lWWqreY}3jIG2VplYlbzHp!&4 zP7w<_c+I5Jq3Y?U@6VO(*ZFLl<#Busc)vl7+dZxyb!mY=UrQ1XYCX-kA2Pil z-6F0Fv??>mFq9j7n|&_F%vy2YTC;*lO=;wfPqnknuuPbLJsaKzdXEoA{XEyk+b>2F zc-6pNILMN9*WVa}A3Xf?#h+%&YBg&WTkqo~MlSy#lv$ViBRLIiv5msUUI`a9CX@JP zFwe4SS+v4WA3&lRwJ|vLosS5s4jx~lax)dkr_Frd^HoInchqv z-&G}hduvxuh6lr!NhUjNV=z~-AgQ$Pq1m+><5|gm@nX)hGf`%EWd-JN&UfBQ-#7!* z6fv&vdRNt0Mlk-ft8?=v+hNqtAtUBhrTIC`47LfnvT##(i*(8=`9AOTvVCsZFk9Vx zPnBjiOgWo0Xyxudc|SC=>eQX{>u$eK#f;1yI4@nhZSwfopeV11}8fA(TTq z3XYyL$iSKF=}q7CFrVehDZ@No#%>gHNZ7PXVZ|@cGl6%C&#O0pI53z(#2?j_+3htS zpWyCpf?Qr!UG~*Fuj06@_F>@0Clf=xY%4yjZ!scY#-lU~{f2tP;;ZC>O3GKWjcpF5 z9j55)?O)h*Z8N2#Vd3d(gLM`N9Zqh-GW zcU~CPtNU}!NUK5XRo%BeH+HZhst0^m{`DXGeeA^GWg`}9wPv9T`NU|};UJ5F`M6uW zU6C0Jy}$p$#aKh4i=xT?FA?tVILhNm>@`xh*(5e+QkwWChsj`H#0R6mqhjPYL&EcF zMp`QdSKHIr+X`U#Vt5PvB_4J}v4(9-mIx3NhJAUqszW2k_Sexb13nTZpDm3pc z7E17SrDD94D<={5C-}csraRZOe?M!zHQHgXC#`F1WG2>en-!6^@5GH7)CMLzi<8og z9lglqC(Ngv?U&$k-M4HsLr5zy=q;8v&eN`DvHL5B2Ib=}B+y^=JEovF$pa(WLl(KP zgo)WS>-{#dNq<@omYfQsmr_pjwggvP)#n$F*^f4jMo<5JFrf2I;q87GgNTy<*B(ku~=U z^3kx6ejS9%D^5*e+0=0nxDN|9$1hlKygzwhUx;2J&NZJAxoQexe`sh(jC~gCMb_P^ z{a7Y?6eo;rWNXVwDj=wOeI-G68!ZK@G50!Q_wv`PdoJPWS1p2^?e}eX(5~FKpMF50)$lakKl;#St8BZpcq8ETWb8CLnztfqo-c>7- zzZwG)yaq_Jzx8YyWtbF`n0@J4|3u7BL06vHnjrpX*ZV+4_U8bD1WomVSK_uo&_tUBR~-gzh`G6_Ho9#9lO&D(+OJZ7h1m)(;W%3Xs1GVK^t{k27x$#3A2 zY-0TfqghMUKkA*^uYQ$&GMtQ@YrU7xQicG^DJr#WU$#n?JdCMELxi|0=p8%xdP^zo z)sFra@D$Ta@hTyZ6AFiBeyshV_1GLcdsc9JSG5od)sO>Xr=|W^HXWrRd`Ed=xnxHNbVC5~)sqkg>LYcr<_HFK{3VS`*^EvGQA?)4bng0L(|L10y z8EtHuQ_V4Egb+GyY{((Twq_2^P;-ieiqagLp%5yinDdwr(%CuE0U;@rD5B$wj$Zja z`@BD&-}m>sT)vm@cmM41ys+ox`Mf-zkJJ5ryI*gYg#W4}i&{~n-p36Od6UhIQMSct zyZeO}!emD6oipmvwd_%+yuCVLlJmM4i>69#Kni4*aG)E=>W@UuBGl;25$NM6@y92h zWLr%dz8>B53R#7%cZ*^}U=+va_%X9)gu`fn1-RDkZZcqNvRgE4L5?(*9)>E$dBi5; ztJTu(9}7Nk-ya5FhVAoGM-=cZA!nY)CtvMXNE`H2{`~S^e{wi98P2h0_0$Bg&x^9M z#(GZc-2d9d9K>O;L*Rm28=34t4?uT}+cG!0lMPt>#Fj6JOeyerwpeO?S=M`nyt^WG zd#vcmS*J+o<5xZ>4E1vg;Xrw14>!_4C}{b{HRhpeXPl{3`C7YJso6hak9NymB_bvQ}MN29@v ziIor#wmm96p;{uUq4AhDH^fiM1v6MW0Ua0jc8U?K>+OxH=cD!FK)0*<>|b4aiE`Fb z4{m+>;-|cFz|Q<0?2^pfzt_9dr68t_+=)(th~3DPBG^*DE(+P3jXJo&#zH2l8zWSa zm+@0OvKA3YO^s_n+D7>PP1ME4>a-W|pPKHvz36+wsRL{_Nc!ZVQhfHfcaOuUc1bn= zpodm)s{I3{Kk57yE2Mybyd^9F0m{anu3nLfhaOB`y*w3Gw6=vjs2rs{yEQ2_H4tbQ z=6+};>98<5winua%|Pm3zA-|^NdJwe8I-AlL4fa;vfuBTLz~8LnEea3U;eI{zsNa| z#g5HP_QgR<3WFLR+M&%T#u6j7x?~5#aI|I-UOU6cFscX4F|;_Ojs}trbNwXn>h&)a zMQvH~V3PJstZc%0r}mK6g{mVb>f}EKXhW)=S6Y27>^Ey~ILKBf*0IrLEj&v$xvpAR z=wbOsTz+e818%Ib8BpNk_ykVT7^A0i<;V{N1+x6PJ}I`{vP`b6K)dn45rvo?M^c7h zFP(Eo^h*wD8Dv3{WnoX7!6ivR>4Z?mCo{QMEaA6|tn6H0>gdT)&rZf`c(sUSMtjX5 z26v80Z2(rs{cA_DxR6ZPr4$eW&X&}-JNbZ4XFn$T)Mw?89$gKmv&X)OK+*^mn=P#K z$O7H6PVUQZDFT6tTVa||{{6^+l%ndiv@sspsAsSFEDZD?8-3rI?4=xK8!T!9NwQDh z_eO<6AD1Hu3C8v&2IoltM!wd{dwuE1xRAi6W{K0qoEPzL{UaLaW<9rE{7QN_hKHI& z1`axGG_ml`>ATQjDstzeBdQV=67Q}F_w&NtfzTGX-9K=5d%N&TrNgs*xj%&0(HO(G zsXgcSL-QczJSUmjh+--lWCiu6YKpK%V2ACAt;!QQ9D66OUW>1jgA4h_^BB<2Nn541 z1PWJ?NQc4D;=N^w5*q{~Wbytza`B@JgM0-Xg(5k9{Fs)uXdY`uu#Irui-OQ=ORz*? z8vbIJfsoLY)1g(E)}D$D)RLBI(2=4{shbA?)iLZta-Ai*dj`nh(mBWT3}6l3^$h@* z(;=Lr^t}Z*fXKmc#0M+^y7~_S9|dSPk(j1|+yY6tqJoSD_cC6dE*Br=00&6Y zs2;KMw)SlqM=b7D>t#F++kPv18_1XU53jdCZ6m0a-0iG4f%R z?>pI}tgzY=Te!xlD811^BeezxCNbucot*^>eSC-NL#UNv;A4lQ$)Xyq@`{f z;-b_Cx|gVbojR_)?@MxR4_O^8`yIg4gakqNys6UH&_4x{!jJV71q5h`4C1LZ=k!>! zmbdTSySFdmMF0)76>%=QGv>&A!* zT^4kDxVigKTGD=4R~~S|KxI;GRFJRq!{n5ZDVt0>N3HcpK))ygXY-|<<&mU;Tuv4F zTVmYR+`ABC3rH39p7IDHFpJNXs#M?xlps`T3Cdwa7D`@ibaB*-(pOx*yvp9#Z;J-g zrT%X^?~~xUd?TsY-pi9=;cXk?T1rvDC68Ufh!)Zs%G1^GOah(rqJq^*!1idj! z5dD63DZ=xUGM6LUbc1(-CcX9V?rySIl53l6tU7XMd53DBQ+q^uQ3oCin$1)T0s>MB zbRB=)y%U}vzhV_B;`Nv;7koT8_b2K$4bG4I7IlnX)NTa3c63 z#=R-(BRqs{Q&>lTo^bruA-5pR{^a6xS+Pb$a*Ez2DGs-1SpTANiC4;ep_06|t+9x` zFkLysMPqxo-D-mqR&tXF?42HOiN8|mwGv>MO5eG9y>0{^-z{_0k20r|IN+RJ;uy|% z#Kmno8$H{danyTrs6a=~_ni0key%QH+IHL07#t5m14fG~0@Nx?xoVXG?8fl0%3xtd zDQY~LIAH$z^f7=*hcL_#yjUWan4D$lFn_Rh-+`K~Cc?I+F0=}n$Qk1DStx%OB*s%`8KTGem_Zr>}e?dtO&A@@QVolq7@1bNy z3$yQJO)ysd>agf3GwNg`-xAI`+C)-(_<2Li7g9x0$K&O{jps!jE;+l6(;)z!En&Xc ze6r)?l}HFm{rVQHozAOnx2di*L#fr(2X=1)_P)nDF86KZc!%G{WAKl(+eHq#uH^ZQ$~=$ z(1lhv`LkfvS5N5v%8L9@V_Ro%N{28MXch#caLkC9)lu^0eN8%b@we9w!%rY558a^# zgX_$$`fq)z`6?|XF7fKcpBp}RlCQHd7o6HdKkCn#qJFrMvqpdAMT`_;xsuSZ76GkW z_V{o6_LBZ9l{a}cCw_lFI!pmpQTvKlugp4L;3t$AeYZaz`}Jhrz6Y?E*pkzJd*$3Z z8vtCo8;cu|k(RMvpTLU=ZG;A(WOUWau(kbnalx4nPl-D+0XTEzl;WipPclqu6~6Cz zbk*$g$zL_bIlDUdw!Sp9`S;475&Z}Hz*+q)v?!&k1TDI?qJR!mr+#J8+fqaj=VV`g4&_;y346#T~vao$M?~L#1|2s-_VG zEIDU|K@Jd)`&i@@wx}2r)3Up6B3I!q4v))F?@piFyQ^y^_XNTE$nE$#@6b*hkPYsE z801rY13f$M){Z14EzD1exR^!_$gu3t239dg9%ipQxcH*&_J_egxW5M`nb!~9cu{&i zwPAm{G%2M-{J^=XF}) z%H$X7!~|NnmZ8OI{3}wgE zZIk1STwPr$F7mI$8cKq2V?G9;5{44yzft=Uw&GN5amVn%TVz6O`V{PJ;tT0q*+mKix% z3CdYTjj|3 zt3wo{w51SJ!OK^_zoXr^UpxLjFA9CZr0m#<^PQ7L+%Vs5!f%F23_P)o;_}@}(Qm@3B z{A!WtnUD~aWYP}CEC}D_q(Pnc_WEbv?L3;VyvY!B7k+8;pOz;N{W-l!8>}u{C_l@A zo0~zT!OQ&nX@`m!^r10rA`57LkX+3gLWrOwJ0Iw53Gy@HRU-E^P`b=(3p<&Bwj$?NkB@Je z0Eyn{&%hQBZNk7dwRy0rmw+HuhBYAfSKs}KxX&4ooj3n;q;RtyUkY&2qUZf5n*LuW zMujczmBj~ulgN&0&GQ}X^(heh*RzJtxBmU@cjCSxKymPY8vk=Gf4~13mU>Wn(?=SE9 zeQ6fJ`Jld02Mf}(*8%KkE!WyHNfAJj|Kl_Iex%07Qd=8JO85L}ilo7jnx%Agy7O-j zZpCgC6$pN$Mtx<943x53y?L*7_0z%cwm=@t3Z9kB$pu-Ad=+ctUa6&TGVMa!lD?*% zT6k9rWaN$*q)U|pQ5qm}9RR$5S0J4!IR8n^z28h6QO(n3dk}V|YkGRBVnK6nfKzCO z+^qjB^+NTBoP5+&zAnVN7o2QTITBVlV9Hmioe(mwGa0g8KDUwrvKW?XF;^SAWv~d6(gsPK(8iR-zs!ndo>`V+8`+`Ab8X)a)JoK&gkoNHse2y-JB#$u| z6>ATUbEG^|w8_vPq$E?!pWkcJd*FER9)TYU21?YP#$3_7VJy-&A?kkTw_Wy5ju)f{Ih;tc)R~?q(55UJWw{ z1;C~Ij|Z%-#@%zSCI5(IS^idP#t!u`?j7l~C^)CMY?OW70ZmEG@ipF`W4Bzmd_D?a zYmRp)cW70PA>(Z~e1fdPqy!)vnE4BY}YiyMz~Glo@;(q@+-EVM5I4 z@ekflBz}fjFrSIsTpB0Ok1^<`+H#=i**Z(~&^}8B1%VAAb_#h};1>Dr{7t*0pDyjH zzB8x3Q=e%f9-agPZK)?ZVA3r)TABvC8+&@Sh1#rI&^VmKpbi;uTUvHf%HU%0FHE~w zJStWpX2-#nM%mBG4!p=-1Ty*(&vM_sE<=_sCZg# zP2k6i%0(H;VEn$oHNE=0HoHe4=BOd83RxDS352saUg!EoFOMz@NsXG0eCS@XTfc?~ z-1ST~7mZ{8ac@6*m$UAZTb*hf_m3RzNuv70S~9_qlOG~q7Z^|@AXKX{P!ev6VpxyC z{bQl1T2%=G5ceMKz>jdVvhZSQI)omyjI-Z{fUK_i2V~E9%6PA37p~1Yx0hk> zpm)3Rw9wGNYx_qr@=rT?ODf;D>&P3hHN57$W<){ zo%db!ug>268$_vk-!-u1>Y*Rq8>SZNCwRx+?ohNjang(|O3jktL|)_vaGAa|a1;^o zVt5$P626RPvGoPGgHxl@@-NmCMp>g`v1WAzXZyH`B?5#xs)0$F)z3Q(4@6oX+LW{9 z-~Tkf=#w6!uiBFAP*#u{c8PZuw~p6r5Xt~mPSwH*!|BnFq1pywUV&sAY^a7NEm1`4 z*vScleD_jRe8{7v0PIV>&M%XpN!J|M;br_(EJag!dIe@^daA8}?R3$S>>xF-;t^;> zFklB$MsW<1tR9cvsLd)vWU`dGIa1lKy6v4}OX^T@gFs}QJyvnI++z91RQSKp{_$<6 z4=-<+uB}gmWZiyaGx|oB)x+5>i}iRANYNZYNa9` zusno4^YqZ-GBt0&0ytIMOU$b<&_*n;)+_xCP?lxA3a38t3b`7_NW->=$R2`MtRtJS< zzM>tJo5T-YqzeM;#^u$Ph~#H5dJq7b=+;M1k6}NWKUDf8j5))Yan9%L;zt=8JCw*Y z91{hwqDn+hRT}jz^41qO3iOB3PTH`mX;eoqe+Y+B_h#oO$nx@(&WU9gBdFsY=Ks!zWxka(SeB+=XiQE0zpU)z>QHqz+gj8uMwF7YLsOb z6AJ_{ry|%f+D#9X3W251{<1%}*mRCpUYc4oJ(;JI6|oBV^pQAb?Pn}Bc&bvMIvP|E zH4>@~2t`yZJ(J6z%Cb9zqkK6aBZ=*o#s-=XYop|enZ4|QG+E@&`n=CtA>anKWF6T2 zv3odXw3@$>qq8n>5Z(^`8D(o*nRZK--uw7eD( zgSO&eAvCt7UMn#97#YKsQBWiDd`4N#LO^T@gw6m-Iuu-504Ea{4q_ERRtNHg09W1i z2W<8on78jv5`JS2 z3;>o+$;?qEB#@eDNcbPRXDGO^1V4Z2o*?!eF!WIDv|zZeZ6%SsygixpH4=$p??Ut1 zv&Yj5Bya3;qwm>cN7+et2caG09V8~h-Hx<<`?j4fpa|$j6R+fFx4yGJ@&PEp9U}cB zbSpRi7=jgyTd}NJ-l#w`H6I$IN9@q7Er#=`nTqOV^I%neD3OOXL$HjT7vV_GH6?}f z3}XUlpyG2>8Ui{-c10wVY0sGb`R|sJ;7is7$$^{8#{!hvP!BJ(OW1iHy~Sb9=ewM( z0+-P&5EC95AfX|u5&|b1aC)bB{aRBAoEOpng*QoSeCuhuKX&X-{ngp6-7lbuzeO+Y z-7eo-9QvaCNiLsS9Gb*&nd@G6^E9Ey;LAr2S5_Z1RtwQjVoRMyhh>8Ui?&*^8iQ2E zqXZf;Bbu5GTeRw`u`O^2)=zCQcD-{A%Obg&o0TnMAoB)B%V0>E8`uZztCdT8aPpkl zb_Z+F~YeI0mC>V#sFc8mrd^Gd+?&*G~!|fLm8g$Q1{*e zD~I7rzk+*NX_1l}^{yG}Y;oOlse-5Uoh}bUQB3SzMo&0H`|>DH1LRTdh@`#Cw|v-W zV<^5FYHi`K&PR(sRJ0!L04!W~j^8ld?cT%Z?!>~KZa}&c*19=vj};3($9i;xpSNnt z`Ezw;%SK(d8;=jFkT@wz0^~{Hhx;Kgq~5SES%RIdsg{_=&wEu7iSl0 z2oYm`{8yWxVD-1Xyk5sW6;L(o3H4D{&rnxT169@CV5q5f0-RFbPcC}(TIm4V4tRO^1a|i^8x`qhO+(2{h&u%K z<6OBO+*=2>ZTgh`UrW#rB&J@Nv#)1EwW{TFXzacBWpf{V?`U$oA6` z&(IlJOdZjazY;*ygPG2>3^XG#dRJ8Np&7eg0YMhp91J0w(}Bc5jlwkihscld-9?rR z%OMU^M#8Nz7HO-E@rQT~TpP767Vz1Vw+fm<#F3X~dfd5=Gd=5M_2X_Rp4K>j0c4D+@(s+r>@pnH!b3hQ zoaXM{bT&UJRo=p}!lIMwd#!Gvap3W#+#9Hbu4WJU7Ll42r)PM$dsv%p8v3$G+6kA| z$&&LVL|Lii4!pq$j=HA{Py9uT0Q{zmTN}1HTIB(SfH!bIY z8-C2*Xdl6_EUGRyAk`V@mP6IgcomD#-R9UUcy6<6;HVM&C0vTFN3MkfF*CEft3Q=W z*UbrU_?H`c)u_2D4zcS~FFJYYTbkOyu2=d)<=S*pFsA0c`Yl#W4{1zN!5$B%ufN}X z%keNxX5fx|tEjOMrHf=>S#t=(pJw6;GE#j2TQbvlp$jlulFIKl)hLSt=A!geAH0i} zKq#n1nZa{*8tieq*RKrFHI1z9DxaNBcrwMJ8Z;%^K6p$9mG1xIv6Ms>u>UmXvq{fe zS@%=`hpl*;L%BXw!opf0)M#)lp?PLZNX3w`%@ML}koXZC6ANseXJHi{vQ;}DpZ*RbDB;WNFfho?@XUHG?v zI-7k}&F^{!-M2@N7yT3KoZz4JuW*aaEb~1zy*U*ey9Y1tH63FIf@yl1{6Hg-qHrqd zEK7wRe8@82&Rbc=h-@&~YU294)5zC;^N*Y@hxg^nU1fd!=}?=QcI?7uXZ)4OZdhaN z4_Ocr8&oaFsc17xe-cHF(H19Ti-iagmPX6sa5Z4L!3qeJZB`J*01IpV{GKiKiqK1P zbrR@R`)&g0bBWd515U=}9)bt|J|0))X-hwqC++kM;2;ZuAD0ksUD0;orZntaTivyJ zfF9<7M9jpy{<$2CC!#QK3D&y+e=wA__F@xO5V}XCWFq0CxAZXpiW#0v;Bzn z@hg|_e~y-k+lKewoso5cII zts7+Lgqg9BgC%k)rO4W6R0fu=$x%?ZRL5pBq{~9J0w0FA3wbTcrn!<5ERFoEw!**C zvqI&?7sH=G{+D`#KjARN{dGsELkFbbgF8ttVEtx1s8u27g?b=~o^9D0p>~0Y>cZSH z*i-9CMpGe~4n`~;G2d83z|y{udnY_8b+&Rh*WS9A`hr&HsvA@celYHCj7{Iv)t0;l ziRLD=k)eRH*`qv8`hAg9SXRkAJ)asxakzMc16MJ&rBCDzWpr@6X9)LIRA>?4@IFSb z_|PddvY1O$3b~pdEZt_|{ovo(VSj}!vrikOH@QUseF2I4)F`I-mAMvEEk-p zu_=JG#7bNa&#e3U!1MuyPeKGO#K8+bUtZD{Qu>EKpv13sJf{+g!%08}C;~zfN;Kq5 z!hS-Qo(01+#l3d6VC}Z8$Mb|#E->-CP{tpq`<3!+%JsFsW5ZTEHtp@61%JoBJLq9S zG*c1g)Xq;bgBd`q*ExPmP3L2tfV5Cp?kIO9Sb4qCrTaP9KYlz!6V!LEUaz2R|9QO0 zQhoHZJYltJCCPU@kuT>gF;xwfL+v!BE3K!%B@Q%7CZjlv!C*+Z>L0E|WHZTBEo3-Y zo?{w124P?hk8FQ0&jbPVh5D|C*X%U&?hO06oUgL;bIAJ_P`6RFQEh`jm?7`_ zj{VROF;Fca%T>V4!b-$k8rDcOZ_1T8-}43y!fjI2%n3i6>$5{ zqwV$^UC$I_T+)$t4`m05x%m5XBT9IZM|)LQz;=)&qnPE^(%gJ7@=Ek&Z;wH(nR62- zeB{OA=*edFxtf&L9&uqB=REiFi-59tnN`RpljBAu)!>`prQnhUrPypDG zn(_j4EYeUPTcdAz_gACY_?IX6V@g4@NfQe2jdwA@24@U}4x|>tF*B?^m0ZT{v8eOm za_Xeeb!7S>;kEit4+chC4xU(qaI;$AR#4vs|IHU3y$2o?d|b(Uo+npwoZk_U6PUq< zVwB&a(*^dMxYF_jwQkN3Kfm^anh|iaBA8y{n;x=MD^CIHy&yra6G^j<=T0YWf6)0a zzweBRrrfa@JYZv!E_XIbg>QkF`;ti8ENQu-Mp2+nGn)AQ^ zg_w}&V{d5m-FDCRCzq$kJbr@a4MH;+1^)DQ`biUA`hVJ@_QZF8*g`LU^` z&>i>o%(VqWz)3Uu!ws!eVWGx^-lTiwj;*O4LwPCx0?H%lEhW0Ij^dM39kH4`iWxJO zU?3`y!ZOO8PF@uojWWq~e%_0B!uFB`zD8=&Flnc5QXkZXN=Cks-o8+e-Hwx6-&wxW zR({L>bGK6)N?&q+T@Fjz%zR`+LvX-Y?fL_fJrst8xKWW&=GAzqrUvx37K#C*Y+*#E zWg&mKx@j2UrfM;cQ*a=;y@5wVw$IfEw8*+xMifhiKkV;)R~R~B`x`P*i0_&&hFnQr zK{RL_lx7U#Tsl1KN>#{4pdzM`xil&evU=FqOaxE4IfS@8mb&w9ar2W%Q)&8Z|0l}_ zJgel)LJ;4j^e>kis@avVD>2S8GX%pPE-`8Ugh;iAW)Wn_DQ!8+*{nxGl+)>K-zwXi zHZOixep+`Ja9!}%(jzp z({9D}`@-Db8{K1$MW1q;AC1}nn)lW3#XfP2EPc+O+`p*`DCaV6?Dg1wSZDy%li3K! zAaS_B5g8Q6Ir32yL^8(L_DLKKo^v01*YxYHPuz>k<_A5H;dAv6Jv?aNHdimLhvx&Y zrT#MEaF&n+vtW{I6S7P&R&t((;mWCv8i?z3ekk6#QSIM%M83&E4jja^zWVc%OKp%u-v+O9IPsdagaOH=6ypZ{Okm?H=Gf z?w=I*B)<=uU-L3dFnLx3Oiaw9hiiBit{&66Xf}lN0u; zWc()bQQ(sIUPGN`SWWV5Ip0M4IopWq=SEe)HV#p+Xg@fePNz0Dxo>=D6lC9Yc&}v% zxzXxFPU5k>3J_P-wK9pqNTSl!A71y@=0l}gu5=p(?n_O5#mUKqf|#iZA6Ja#7&~Q* zHzas}acy?j;Q$n^Wgev?mJXC)y>CZ-sro%K{o~t;>~`?lMsRw@x{5?RDv?n|$|(<4YJr z898|e7jEv1_&4Pr?@+bK!Bf^(_z>MMiJhMLafFh`$D4AeeH28hk1(o&5grm@YZa! zZRL8rmNkyGg$^K}oiCX?&rf<(9l{P}FevD?moHypR{W*wLc#UB6yE?eD5=?dGj96D z=`}(+)@ZDbReb?MG2Zv4N*J-5EL^i;jr_}DjH7Xa@iIBwnd^}Cb{Bo)p z^{(K%&f{yFR&=urzh2*vo6B>UQko4is1@SEBs?q`jeS~_ao#U~_w?J%r;ZoORQKU7 z3_=CkT#K(2KAR66r(LlbCN%xM<8i|$RUJjvkB|$A;~`+P@2K0Y*d`?TFKbhk9pXL0 zqGdBNX2?3uSp$_AZDF>^rG*vFzo@wW>a-*+gW%5OnT3mjd$|*&_>l_$`E|^s@MTaCpXOc7 zlw1^z<10Bea7L|Kvw;d-+Ndo`ua6ato66r@;MdAWECEo*=;0%*))UWb0pyoIxZjT7 z2Gs^U_E>cP4qV#s+&;|O-iEd-h4PeZp4HSdwR39BLps|)gr*Y3vBT3_)j4ho^yVyD zkD7FL^8Si<*Mr}kUE4Yt^0PH~N)aqFJ+FS`sIA(m^I+9gruz5cr$g4=#QuO(ysAwv z4qw>U+r0jW&^)-7N5~=i&*6nNOJH^OPsDgrO!#(r zFjV8;C?EIysEY0>w`8)unM`F%+sagLUlofQ!Rrm(d2Eoo#|V;3!8G z_8&eSXGAt8s+wk_?IW5^>hT}=E%2%3x!U)oR&VO#z?mU76}?d z!$`<=?@5#v%aWJ(bisc9GEtnYLN!u+;HtdHmUGBju{tl~tGRYRj1q8B|8eD?kuSTx zPBgrz4Dh*8mKj^EIvMPh`?dQ2&f(wLO$!7hw{(jnr~}{HIh?o zoz|#nJN8C7SIxDwmUWYr8|t3dyt&t~A?d|SdtrpSw_Og>yD_xP>|3y!*a2KYi+Mw= zI#wBX)M1|iD-4Uy{=Aho?U=%C9CD=X%Ot^kT$tDolXi6Sn$gkiO4o}_I%<>u)Eqwmh7Zm=oFd3bw3C1N6|pzpGm$654*|S^ zyDv7G7f!;0G}m-$jN7&!aVyDQt9x@&w?+EgfqJ>-FVj{Lb~veqgJ)xn3Rz`X2I%=P zl+oq^61$Vd=&-uvF|`J2Evp-`2pzIAICs~d-`S&mKy!8m3YO@VU;ifWELzZm+%cZf zKf&8oqN_G=3bw4+{Nh90wkIDRelV_qb#GHT+_TNJxO0h<2L{S7T!3uzN%>(ds{!9% z?`HAv;nGHp&0evw3*kF`AsO`uy4hH*Fl|C46iQPpc$i0zyf4{A zA6(1wrPP8-AfcK5IqP$+!LBJ-DCOYD^?-I22~j08OyYM_cj=n$MXPjER^zxcMCX7) zJHgul8uRj3+oQ+ygO->p+gdl??ze+_A566)a%q+-B-Ef}LGwBpgn*G-RUheYn&rO; za|s@Iny3a{N}DuT{&relN%GHE5@ij3T^Q-P#W=L5{_VHG=)kAAZ$s8&SMqiodv?x9 zMtxy0CVtz)#bc-HXpZK`@S8USt&Eo=(`6e?J>j)mx7;+Isa!pn*q)7Iy6<0w9w-bD zXb3dBx1p;Z`FaKK->;&xUq6Y1HR^DvU`0eIwA?s++^(C~!)DZaRqZJrtEY@siwI&a zgapQ)7>%O$#ss@k0-VYrp8KbXcq^O?WK)eC!fqrd1%BE0q-lCNuu#P_T~XW8cD?b= zj7_&^>;24e-kBX7-Jo#YtBTY&l}|n|RNI{Mv~ju(;9dD_Z#M)jA{8h5AH z?>fb{i`3OG=79ye;BS?mzssxG^vc5L*N24@ux~acn_i_~^@ihI07_n?ccb3hE5l?T z{c0g;!Q;)OYSIwmH7+URY2KA1fM8s9cHTd*?;Uet2jpqF#$*`s=Szb-n>a<~s>h&( zTo}qI^iih_efo4x!aMbjLNvwe(Wnv{9hU3Uw{rAJ<=RH~g#Xv^Bl3W8?G{ z@9En6+vVE6WcV>cPVqx!bhemZ<)owuYE%@e*{5I#fv#|9CfKaiqf}YP4rByaQ$Rn1 zgFff@n4(T5Rc9Hpw0w8l&s6eW=-1WasUw@Nn9jSBrp5~mzM`O&X=wo|0oh|Uyc%J0 z9fKa2%`78ujKm^r+7F*oW7dy4)tKq|S+@qV;itNLW3$K7;Ycv+IyY?Z{Xy=0#=n|V zwZ8ENwOb(98mE6ZQZt0%29HxQCG|9?m z4T&dSD#$F)`g`GbnH%nhe$3Q*l@N8+kiPK(W((w54=T#d!^0yAs7?xb)Y;0uT0O=- zJpB>MpjxQO-MELLW2t3CBO`G57qKa@5D;T_Ay- z%Rp`!fnC}*-C(Q*KL+8esRY(lCyAf3Jt|^_y{tO>s^lIaNNv7Hh-}e$Lj~dc4qEBp zV#bu|VL7bita6j_@c4r>1>WiyJJ1R+B>SI z19!@C=!@eJ4K0j`gYVNAMlvMPN2i~0oe;QVDMXwz;HtL%L|W`5h0~L}1Lv*7?yzJv zqNC+ojUpwRW#qk85K^CYoV5iS)>m}~z7D?LThZG+YfG1WwFq1fl`jEcOE!>#@84df zUAY5q>qP&b0aM`kX>eoj~ONrdl!$)fD$P-6IMIlOyZmqOahLpEDw^OX&7CX1= zc3=CO3jT(dgO7IOB8*>{x;-6MQY|i~T81}k1RJV^#I**n=P?qyE;Yt_u7@SlEkHVj zEvSHJ8MVT*v+$TwULaJuFW;dgrbjIZF*$R34{XqY(A%6<(tu#kxAth*A73l^BA{f;$4kPnmWRxf9=R>K*C$ok_q!D-U94H^s zx^pu=;gvPgND-RQf<+)6!?FO`*3aTWP-zM~^NYHP=kmrO*;wc3*qOl;m&J<@vYkRg z5+=UU_gtc5X1p~nn;7ndpT8ipI}a$a`Vz+k_j<*zn=`L%1>~7b#Mt}@3nbM~Dh^~_ zAXJ^1P2y0CQ|;zL!2gm0EF#Yx(I-jlW_?mpOyNC!ga$kB zoC2WzFktHQGkTZ&ch#|m8WZ5st)IG2$p&Exo$XD;k6SLa2SfiVNB_?v)2ZM~AD>($ z2Haly^x>Rj((&A(dy{ut^S@kNKD=19B2{{O#^_hXM6Zo+{rwBAKU#1i=UhV4A_=ga0@x7*ryEo{k&i6vdR6fa1p(h*cN5+H%6n%VPuVViy2OKcse zD<(`ITfn}vzHhr&ckOY!`GHyqxFcoZN^t1~M7Ohb^@XM+Y$z3=5w**t)oYs-{K_-q zaPh#!UMHZ6W+4;^1QfpUC&JGg*q4cZ=;-C$sZ#aMG%v!S`|ad!h7*foc>%{yH^*T9Oh8Ito^b zpUx~Ug(K}L#P`Aw+ldLbx#c#Urv3XZBpJp?Bk*QL;&g_Ou|mSOgl$g;>y_JX)w*9v z{NssBOCHCTEBO<9|o*!OOIx^=6z1qwHI4)eg~M9HOi zloAK*j5GiX3_u3UGqdZ#=MLwB`uN(gSXPDrRLlPUwC>?yP)c3>Y`zrL0RWgUarGIy z0)DUYnz;)J@z26<99L>t*c{rtzo#O($Yr07v76cv4#xSW) zv9(r3x+kRiAHNK;JxkSn(KoKh35&P`0QlbkW0}MNbmjK_d^mdGsFQn1h2(;s+`eN^ zz@xrPfN_ND@cOWR@_V=@fP2pDo^lupeH^6ZK_>^&802PcwksBEZR+)KNCm)gUAmw^ zS=~jc{Rb5Q;?FqW=!h%f%dofVyZ1Z)`tb7I%@a*SZ~n2*!~Kp9EV6fZ97F=OlMSuf ztzwwfq8rwTXFMiCmtnK3MXc_;&oN8ape0s8nIM0i_sHT0O!q_FlZ+kL@=kO;HwFUs zmfy17^oQ8^P5zx9#C%VY5hZVbQ3wx!9T*19{EFPSiL8Kh%FWVbL4^YRGqJ_3u^w=) zRRcU!%PMDDWB~BFO5`#VW-pjr36c}WKl`3)yq)U4^(p`xEZd>gR!2Up3ec?reOe^2 zc70q{I0kk*-2lpxuQrN^07yR0W%Cfg$h&vK41mBEcCwRC1$7IR<$3ZN!zY?y>-q)C zXXSD7OJ?>Q?FBi2$lkccHR0(nw>-{h-E4s(u;`%#kg6t9l>nT|h3kp{AW|=`1dwy} zb2na|xq0$XKfC?HBm0|S$4tIooIB#%WK@!^V>63?=4&@raw8o2YQh$^xj>>NJi?Oa zv#%A4E$&VnZzf(+L{p@JF5&2qr!@aEs7&3-O@1e{;zly0w{JZ{Za;JB)eWu1i@?)r z{((waN-WWGx5tazdO7}3Sht$rbzVgk>l6fHF)?iFT>|ljv^Vd+;{6sZ(a_vR{)6^i zS=~M~R&9f>zIa`{7q7e|6QJm^Ei$?}P&Zx`6s5}mE|XWzWO}2MCnzcqqJFEQ-`20S zOsW^W#a$ZU)G9s;&4BV*6TGq(I)HLBWB|9#2F84!SN$_@8v7XR zp7_C}%AxZwrD2dKCz<=#R}-#pqXs27I7d`uWtp3QeK>*d-ln~0&Onc< z^!9GR5!=QxOhGLXDX<2b*VEMCqgGlPx!}ozRF-u^ z4f^=w_Hi#USh&fm4|vPGFDKNL+p}R{hkAmTJ9uD%)l!bfpf4^|ge1mxNbq-{BFNXJ zX8Eg2rqu7h{rdBFGuNi7Hm?LRBaJsLJ?vaMkhkkC5mU12TsZ;a(7_)z6Usxjs%!f= zqfPUj@P=bv)~z06nEJlPrVEqhv8H@W7ghsH6%)$rlZa(R8DX5=dfH6v#TFB?s7+kr zS)=v_cJ7x3gA5zuae{u4jz*TfS|bvcX}D6mZ?dJoL_%h7+c8!s_QI0xqC_MleoD?p zSx}J_rPo!(z5~RW(sn5Yvjz~Tgj!Q=i_J1s zBEbhQfg%9rc-rmt5AyDkY81QxON>tqNv!AWICpFQR)S}J7g5REtrET4q1uht@b!k= zLkSU$M2)L3jLs%^jeSO)Pa^(Axswq9^L^UAUfAvfk!1zt^! z4eAF-Z(dGyaHKWDL7F%0va$&qli)zldZEDG)BxN5#eiJl#j0at8Tj_^`{)wc&8j_5 z5ub@&M3bl6e|J_aF(a5|{JJ@Lnxos$MRd!#!i|q-GI3R#97%2LdJ%bZ-_(^&OkB|f zQ37g|RgX}>JQmZDHy+WHc;Kz9$Q=sz@lEOK@H<}e(!Zj`UGq^izftGPtD%;dd?U!F z@s=jS842fXlU(5L&a`&XW9S94^jf%j5Y=4G7#H<=fr&FVkn+k9)nN^vf9+ZN$$w{; zFgzt+IXN@B@*x72rm}->&TqYn^ev3@SL>aKZMEy820C#=9c6(Cic9J}l!OCf8UiQI zcltb@?Jig zlC*OZt#8VyilgE)-~5rI@^L5MEgz)D5gW_FJeD;_g-eE3C2%} zbI+R9dNP$RecnOm2_k$D>+Jlih(RjkNCJJS$d7p#X8hO3rSYkhAOnp}j^d=WAyf!WI~4Y-1lT8a?88`{d_qRyw^` z$D2+Y=|sRMyJz%4djdJ(^q|mTxc)P81(I<*yhm$wPbc@#J0Z~e{h(MZ3pyL%9~kAK zn!;U5Q&(4SVn%c>z8>wpI*Dhe)5{<39Tv7qIIS`ZL@RB6e2L*553}{lO(L8=h6u*H zC0cD$w|FcH!;V6sQ0?Lyw`lpY?wpX|uh#vFx_8CfN@qT|YRa2mKziujG!|5JyCU0b zM~tR>i<}2@PTMFBCBC-HQhUrmY-Y8Jc{X$%uazW(hmyBecZ%1qov?kNOvr>CmwEE#ypNL;pS*OKg-34ryV%eRx?&Gh5w6&02+Ty zwEq^efZhmz`QWK#LG=z`Y}~lc&p&X%egVI*_}}J*Mbr&zTxgy?9t)ID3%~+>!`gKz z&m`V}W;`aa#yS`cGb8z7UKJM`>1V8!piOz3xxFo%PwTzcND>d&EPI7AXSCwcnZbM_ z#`gduBKOwkn?UvaIr!?z%|&)UV>+y9oD_=v)z|H##fR3K0I-k*1GsfwzueNrv2XP4 z&I1C_RF{Z3txk+XlY8ZYSja6yYuEKp%Bd4)pzyHI`vsH7^ZTX)f;*SaetFKfn>-WR zPIBnA@LMlEC3!W$)ih8@QhCfK5VdJ)Kx2%Ec_~~Q^XylJNfR3u=a#fCX0-4_t01Pv zgStSx{(-f&ZaU{alp0;Oesb-g@!`bM^G`=k#|{;mc?3l0h`(*?HGus@^LgR*GNe4c z`ZyFMrH9w!=^&Fv%0t$xQv7(R9)r4KjR*2Nk_PEqeW2XIZ09Sxhzrku1>P#|thv7H z%BG1kUI|g%jRdbBxUs@oF7I&UcuS+27=PIkr^V5WYnAY=Wwd3IvGp#l_iY-+OW7+B z!41k;g+q(RKjz9=c7>ngw)5WelVmvsxSTsnv{!JN)H*I%p3qpxG?gBs_crf$(fp(CS#XT* z9+1+Gw>U+uVnuWLFfnMyI!xb&iZ*Zy5o5eFB}pEF2VeZUd3C+=SM zW9RUjOEr5RannF@={lJjS0r7FQI0mo_Q|v5Hejuhj8rZWII-hZwFJ7q?CqP&6CFR_ z%#9viyE%?7XjmLrsO6X`2ct1SuTO@B`eEQzPJ~h-($Q<#9JWBrxoLGk^VRlUYVkG;OUu@0)hsz;?;kq2 zko#;=WK3_39|$)}C?divE*3!~mU543i3gTK;ws1z2`|n)S01SUpk*nRtJB zyYkGYT>pIbW(?@^Q9vC}1%P*(U;q70;rW}3Ha8J@eSCU-g$56HuY=sW|KEoX!xbc~ zAkLVAwl8UqH^L*?d-u-)DCY2YUF8_Pa!?2C1ZMBW;8L>ALzw|jl*WrfMatCiH zJ84F0u4v1#0i(0c!#ZjiPKGwN3UPD>uUsS-(8mq5km4-4m@GGz3%W>O&xv}^nFc*` zt_3)OHc&1C^6%yFi4OzQKxWNR4RA3?c$oM~I)XNDq_z_&A>-+1IcR96YoC2t*D9>3 z(8>HTF;m$LH?c_OVQOtxK}|JRLn${PguZSzL^Z)0;ATKyZQi}jvCR(Vn&B6Kx)W5IbT&XO*pg zo{r$tQ+It&A$WK+R#-Z})Iw^A!x5p8OgMGqpn#zeCZnkOp`c;57Z3dPz94-7PsU6k z%O))wT~%c8)PPK)YynJupMg^lK%qEnv8c5KwZH)4-lSr~(JZGFy~WOuW`tpK5(L2A zNwY9*+9^$9ohd-w&1 z^FpVgYN}9K2SBF(F6{kM2wNgYbD9WUDD%sus>)3zm`s!@qVhH1E=EtoX{;8q0ZtR? zJWGU%`X#DZty-~w9uIe?jWH0Zn88W72@F6BfNrJ!g$uzgaxnt1Cg&jiJcs}+3QZiM z)pprdim?QUV^r;DE&`mI+9R!M1mJBQTPY}AsRv|c-!@k)#3HT`PI&gbPrSZRlelEDAi|3jp&ST!^K~A^>B6tym=B1S@iIU6&uDv_wOH!JmZ&!r>M&8 zR-M{k*ZS?3dCp1u<{ciIU;hqu@>qdIxm)3}07RrKxRu~l;q2f52I7fJmL95lmOShw z+0t$paWFtqHna$@ht?0`?26xP7$;>7VedHlgYQi&@MNoJslc2LP0J+PE%zBl4={lM z=2A|kf<8{{N1D9$nv!ubn^h>93)LhCVs=Q7;pQ&XN?VQg*M|u8=suBVHw4w$G26G3 z9|A;>zpW{@Ud|rpHnQXPH0ePn$`oTZpisq7GsU+;t+1kA-dvf9wgININIo`NLQ6?R z)ncY1;H2E)FvBtZy-eN)&Wz}ex*`)hzLS$rK>@V!PBh;-Y{Ry$h_iMn5A4K>_uq!X zx^DR!BQc;bBp^hQQdaggmVCI6!(t$I`2rT~RFZg}hC69ssJ!wHa5NrDpw_L9?>ceNHWgGW;jD?e*M0P?e-2AL8&SkTznq`{_+)DLiK1AAjB0E5Vd^{Tn+ z`$8GZwa-_abe3~;ghAnFL}><#z(B-7kS-qjv0DeNIbmAGI5?G|dgvUb&!15vu-vR1 zqqGtrYq6R(1XlPqv!dN3e28tW%Q~`P$9SH|3qqr#fQo&`i{ewDY>w=S2|jZ!WSHE* zvx4Rz%WDfAJGCHcsP{)7?Jmuxw?D5!LO%$4k()GOXdtfZcNeM2WEI`-X|Ada<`A{j6ZYTDcwjACj*8*{|zc z=-|9#kaN0ekl!41t=w70Jq`drQxY+6y}}L#g>{z?)@9uyA51&FvN#cij$f)+CeKVhw~ys^9%+~WVdoaWemm3@ws|Iq&RjdqXPYTapcMBCZt zi3)&85qpKqi7Y20@g5tlmPnp9S!?f}*Q+~`M03v^NIrwX8xCp1-WBb#`Dj=#CbpG` zz8nXCpaAs-$0f+&G@^j3dO4Dh>y>S4Bu)yQ;!9&5W3oVQoqA1W1AzdO^Ripdq9u?Bu@F(MO_>nW8eG14LKa)ITsbAMS@Ct4v z%EAIcSdYJh^fS~vH~y%9J%{q;i$D$h#?FRv;UM;gGnf<<_EV|6E&**IBOBhFUepR? zVl2^81YUy@Nb41atRCKo>qC|5r9g>a5oF)8>&o(gOROcf8lECu0mAo;8T z7I4*W#A?auQaY{}c5&~X_^~zUX)Sc?y5*plqbVPt>1j={`L4=J4dbZ{D4-nikVohX zAMC(_BU}yv)z(60s~rFckPAF=V&1nbPU6q)s89QOqt`xTUeJ*9kIn6!3 z4khQ`;eyJc5=yh!oJ!Tv90j8mmL=IXQUD(rX+xMRC|vH&QgOyGo6TaPHKGg9fY(<; zU4d(eBd^GUf$j%0<$$oYXtyR-4}b$0lrP;b`z0fFj@clfCBpQr8sWhEWdKo)CS5a@XHQo%&t#=RQIs(&<6GKebx zO>v%E2M7c&L1KqDSj%UsDy~=~BUichYu!0xr-)-4JPU1)&EZJfw%n9t2WEg+cbORJ zoGp`pe92H07u)XKi*gNFh3};U$om9kg{@<(uNA_>u{s{A4$?;2+tEyM(`3C0A~?+4 z$WLZKN+8_W;HP3Sl*f>gw7KzP?t4F=5naLAXxlOjHzY~*skmk%wne?<*(Xxr1mOJG`s`gRvp66WYHS*3Unq=@!XP=)rw6zb^LiaTu3TA!d*B^KHGFuGV?SD^x%Q_SX&>mPOh271Xq=wusR#X&o6z zt@GwWqZQRfAGa~;iUZLL z8tb>C)K7SxrDN+GF>9CXG)QiDSG&G%?Hk9Z+ivI|#a{f)F5Ya*<3%+&Xj!wHAeWRuy9?5TsEq@*9@If@oI71bghs#3^1x&UG)}T*iv?e|*!gNM>jl6g!Us9M+T z}%v48uHV|h=q&JQKm|EZZpHm;nFGJ}K4aD+ntHhg~S6e(Gc zk0_AwFQ%HHxU?~+`IgeucxUqsQ1uqFQ(e(_9!CqTu%Xku)`E=OW@N z8Ue~>n(?xvO-5=tFF}xcL%x^9Nnq>Z4#&pzsRbs_yN!eFZ0V~Po}M2lwbb$@$+c1C?2eiId_Y>CKStZ6tl)H#cYAB|5#}(Y; z=4zp)Z61`gN0$V*>6lY(3Ya76cfc0!c#Z^^`d5QoWR%HnVQU0xRP%AOwGF6<42EtgD1hWrR~ zON1%U_;Dr=Z@<5S+vL%RYf!~XMI04b6>-V^FDXt*(bv3z)S;Ha?x_P2aTb?XKB%@A zeN{I)37LPCsCx&gTB;MemHP8P?vPOsh+MDH(KX$&g@2~6Jlqcaw8$7hN&qJvGwSY0 z^L_mNuJ^Mw(X`!WyM{d`ZT;?N<0e$KsHqJ#R2pu<$7u@93EFmcMaqzI7mdb;K1AV3nGZyl?60e_ss0E_yxWFWvNN z&B}Yh^^CbY_b$H=d>sY=BjilKsKi^jxtv%kk(@827}wI^NC zdgQL=Q|PzkYwI8wg$H+Zy;KwrDp6a>WT^ z&y)O3RczivSYbTS`@~w&7am&@qgKq?@ zeV0*ooc214{drv!V?m=*dkqQ$jq5sZFRN4#iBY8usYx$ZWGz2FqJ|boLDeN3J&?RL zt~HcVPu{-UH@(g|D&9l~Dk2m%QnGG@tJrNPH$_pP;0-x-RtP1^WpCcYqVS; zQaIraJu;gBD4Q=Gstxu!_PG}nsrGcraX@Fw+ z@=f0aAoG%RA|DG!UCbm(XvO0I!<@w}^MmFXAnbmd^${wNH@6g7DD)Qcr9MEI1`RuC zGHi9WAgiKl_K@YN8jle3_z}x@S`YsqhCS8jK*PL`apEjqbRZ#kmda?y`~oS=Qn~gc zdcw0q*y<7ty@`!0P?02LsDVO?*DET+$yJp-7yl%#A6m!~guDlAbRSvFIVzri7ES z5Gv(|J%G6)`SUR#l%bk_J9YTPuzDGPI-%s*pnB@Cm#N|Yq2y;(E?YZG)-;=ZIJ3@y84Z)j==W2&@7slX=ZzFmX&oW`!HMUzB5zRG!U%G84{n z*+vxOb^GTwZhbki_}^OAGy56d{L3ZnZ&Gr$T^jUI%&x~o*R%zkOrQ0~Hrt1XoFU23 zMID&B*+QRT+FnT})#LT$tXE9%G0+{u??zVe$6Nd1Tdnv7#)Et26s;sH{T@d@>>Y;n zQIPbTLHUFymRcks(k}5 zKrpP+c)c;V4j)gho8@+5jUH--tH#{et}gy&9QM=vkL?fw zK^zxCfXO6%62!W#%mCsYWQieXv39+^ZE z!Ioii#JsNlbWNP?os|7euiq>xZ{6`QnwA9G|4Ke(7tF(6_?j58?GIF2cVCGb=m`ve z4SDB#pyQAGJU8h<8usH85>YwQe)n|DUCEO#yG@cW^II%hs|*03!}NWCOC8f)bBYfM z6b>I*8-#@2pm-?Z+P!9pr^MmIJGUAeduD>vzO~fo@-tO2lNJQfvMkpoh@Sg9b552_ zAH{!w+pf6Aah(!1S(wd z?5vZ^=^OJnOw_==*H#vvQ;7E8(d`Ion@M6c3G%hm`=iEw$h7GZL(|P?mW+EqK&pla znBM$3Hm$WzeaMa?*qJcHtnz5|Tix{JpY4{#L?Wl#7PD(7yQ`m*(R7TxRNG1PpxzCw zjMXAK0+H?*n9!*Lac$T`@BO*s4|}52JsHV6cb%t9l;5z!Y&|fXpe0btqaPvFK1w_2MvZr~wn@5D{#vlSuEL#|JNjfJHN+AfxsjS8hvu86 zb0Na#Q#(Mx(lm?0r^!#MZ*P2i42|BnG9chLFhvfUCWLvdvRPkl<#TC7b9U0aEt_ne z&Tqn(Il&VtL>3Of_wTD2jiL=0sjdA!xN=*jS8IbaS?&8dV`bi0T|vOtgiSc1Hv?2! zIT6#rFXo(Ax>hoB*z@KmUC|YrL~1b&rH9Yf*U?l{^s4c zg)c49L?c2FKz#EYUE5ok(8Q5wMp>srSoj*QD_|9o1jfzTO8#1k6-*B@MCWEXxs-kU z2`O8|Up8zqleqtD@Uvd8W)`xCl(?niI9Hc_L?V_PyaDlTsOV{xkIGC+iI|j%@ogqB zyfOc=mn0k-rTTLDBB2xhJB{8PsB6)XD_mn55*5BHyYb4>A3GLDiezd7*mp;+x);kU zSndrqjL$OsWcs+|(~AR}Z7O6LLIO-Y8Kh<-tCrVh*-E43uIhS-Ay3D}F<9+T_=6%d z(OJatxYO~7503U~`sj(PCqpT~(P?X3bW6jCffmco#UpX9LO{iaZm-r`!DViqov;Za zf~XJ1x!L2(b5iko-v`$yh?*cW?)#u&G#qX;_a0+J^=u1Y1*T?xuCSB{gO0n8^ zYYZQ23zb4XHy!Y2nWiCJwfkxfvebdF&px^X)W_w)SBn8?)T%E@_)VU$99{D$U{%Ts zr#SyGNZVp)bw4V}Ha`vy&sY?_->wC(Hhh#(C?9<3~#=-r=yRuK& zZhKz0PHeG?6lHsH@S7{Mi(4;FZFF>}*L^0{6`UFMk8Bu6A)y8krj5a}DOefIM zfDVeZ&5p^dXFR|lS_b$18&<1KE{|Qc9V}Y-WKci?&L)HS@~ruDItk~!@>*_8g>OVJ zqBjpGZ68cW>gtWb^)q*BUuCLh8BUxQkSmrsXC@~9fef7=n zkC(noDneTA$@S4~Rt2@7=E&c7Oyt93HQD3wxD5MtNlL`^WyQ5SwdJpoS1<@I4@4$$ z?anKrTH-{l1lOuIv<#dw(1N1cs?l)?Cq=cAKE8^KKRZ$rFmSK(zB{rIAvS-_zQzg0 zi85^)f!g!kH{{k}bUusg<;UZ&B6K)R=*Dq<;eh7U-eW-UVKso7bUp@D{#A~ey% z5~JXtoG>ssX-X-SHWbsu7B6`=+Y`d5?TU%g7bQ0XF8)naVPv8Z<{4EI3v79K`@8cC`l&)xNz?`68wbg!vF5AarZg&m`AwD-Pm^Z< zs6Wvyw>pGbo8)^u6oylx1kYW*lwm=_cBsyxn+NYn*Vgc>K1h#X?qLHK=jB zv4{XM5e*3cxyMBOU?{v=!ocal}G_mRVG=Q28lt_Y5Jd+571Ej6{YR6?V3PL_s zjb|qebZVD^T_uIM0MicOjrj7G1n@Tirmbk9mgonC04J;(r|`fn#)F%zhVqT19f7t$ zYytP6YlCDZ0kF+afGpXPwe)!Y0mrUfCUXY1k5l(X*|~ zDO%k$W5DdLULtH6*drK9;%HLXt39 z+Ve;Cb!Y#(I~)7_szJTa6EhV5zpL_}3v7o+KWkYpi=|i*z78Pe9tnNjJ{)*=x3DCs zm&KON`qNKac?jPQ>;{14ORl$!d`NjqGfvr7PL8ecg#Z-{JQAp6JpiKCfbBI3QeU#s z02)+K==|sQ_C1I@hn~0zmp}Q~eBk~v!lQ%hys6WcmS_K)3jEvuQGH$*K2vsKR>`-+ v4Zeus操作中は、すべての治療時間にこの係数を掛けます。 제우스일 때 모든 치료 시간에 이 계수를 곱합니다. + + Painkillers + Léky proti bolesti + Schmerztabellen + Болеутоляющее + Środki przeciwbólowe + Antidolorifici + Analgésicos + Analgésiques + 止痛藥 + 鎮痛剤 + 진통제 + Analgésicos + 止痛药 + Ağrı kesici + + + Administer Painkillers + + + Administering Painkillers... + + + Over-the-counter analgesic used to combat light to moderate pain experiences. + + + Over-the-counter analgesic used to combat light to moderate pain experiences. + diff --git a/addons/medical_treatment/ui/painkillers_ca.paa b/addons/medical_treatment/ui/painkillers_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..15036c85cb563a85e4f11b98e887d727b19205b9 GIT binary patch literal 27837 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 JLI| Date: Mon, 5 Feb 2024 10:57:22 -0300 Subject: [PATCH 2/5] Arsenal - Exit refresh early if no display is found (#9754) Co-authored-by: Mike-MF --- addons/arsenal/XEH_postInit.sqf | 3 ++- addons/arsenal/functions/fnc_refresh.sqf | 7 +++++-- addons/arsenal/functions/fnc_removeBox.sqf | 14 ++++++++++---- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/addons/arsenal/XEH_postInit.sqf b/addons/arsenal/XEH_postInit.sqf index ac6283e604..33646a25d7 100644 --- a/addons/arsenal/XEH_postInit.sqf +++ b/addons/arsenal/XEH_postInit.sqf @@ -22,7 +22,8 @@ GVAR(lastSortDirectionRight) = DESCENDING; params ["_object"]; // If the arsenal is already open, refresh arsenal display - if (!isNil QGVAR(currentBox) && {GVAR(currentBox) isEqualTo _object}) then { + // Deliberate == check, fail on objNull + if (!isNil QGVAR(currentBox) && {GVAR(currentBox) == _object}) then { [true, true] call FUNC(refresh); }; }] call CBA_fnc_addEventHandler; diff --git a/addons/arsenal/functions/fnc_refresh.sqf b/addons/arsenal/functions/fnc_refresh.sqf index d40d59c0ff..849b49d16b 100644 --- a/addons/arsenal/functions/fnc_refresh.sqf +++ b/addons/arsenal/functions/fnc_refresh.sqf @@ -25,6 +25,11 @@ if (canSuspend) exitWith { [{_this call FUNC(refresh)}, _this] call CBA_fnc_directCall; }; +private _display = findDisplay IDD_ace_arsenal; + +// Exit quietly if no display found +if (isNull _display) exitWith {}; + if (_updateItems) then { // Update current item list call FUNC(updateCurrentItemsList); @@ -65,6 +70,4 @@ if (!_animate) then { [{GVAR(refreshing) = false}, nil, 3] call CBA_fnc_execAfterNFrames; }; -private _display = findDisplay IDD_ace_arsenal; - [_display, _display displayCtrl GVAR(currentLeftPanel), _animate] call FUNC(fillLeftPanel); diff --git a/addons/arsenal/functions/fnc_removeBox.sqf b/addons/arsenal/functions/fnc_removeBox.sqf index 984db8d099..9fa3ec377a 100644 --- a/addons/arsenal/functions/fnc_removeBox.sqf +++ b/addons/arsenal/functions/fnc_removeBox.sqf @@ -42,8 +42,14 @@ if (_global && {isMultiplayer} && {!isNil "_id"}) then { }; // If the arsenal is already open and not ignoring content (see FUNC(openBox)), close arsenal display -if (!isNil QGVAR(currentBox) && {GVAR(currentBox) isEqualTo _object} && {isNil QGVAR(ignoredVirtualItems)}) then { - [LLSTRING(noVirtualItems), false, 5, 1] call EFUNC(common,displayText); - // Delay a frame in case this is running on display open - [{(findDisplay IDD_ace_arsenal) closeDisplay 0}] call CBA_fnc_execNextFrame; +// Deliberate == check, fail on objNull +if (!isNil QGVAR(currentBox) && {GVAR(currentBox) == _object} && {isNil QGVAR(ignoredVirtualItems)}) then { + // Delay a frame in case this is running on display open/close + [{ + private _display = findDisplay IDD_ace_arsenal; + if (isNull _display) exitWith {}; + + [LLSTRING(noVirtualItems), false, 5, 1] call EFUNC(common,displayText); + _display closeDisplay 0; + }] call CBA_fnc_execNextFrame; }; From a3aef6a06624ac65f52392c6512ba26fe5110b1a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 5 Feb 2024 11:04:24 -0600 Subject: [PATCH 3/5] General - Cleanup spaces in macros (#9769) Co-authored-by: LinkIsGrim --- .../functions/fnc_handleFired.sqf | 2 +- .../fnc_initializeTerrainExtension.sqf | 6 +++--- .../functions/fnc_readAmmoDataFromConfig.sqf | 2 +- addons/ai/functions/fnc_garrison.sqf | 10 +++++----- addons/ai/functions/fnc_garrisonMove.sqf | 4 ++-- addons/ai/functions/fnc_unGarrison.sqf | 2 +- addons/arsenal/functions/fnc_addAction.sqf | 6 +++--- addons/arsenal/functions/fnc_addSort.sqf | 2 +- addons/arsenal/functions/fnc_addStat.sqf | 2 +- .../functions/fnc_buttonActionsPage.sqf | 2 +- .../arsenal/functions/fnc_buttonStatsPage.sqf | 2 +- addons/arsenal/functions/fnc_compileStats.sqf | 2 +- addons/atragmx/functions/fnc_initGunList.sqf | 2 +- .../fnc_findEmptyNonFFVCargoSeat.sqf | 2 +- addons/cargo/functions/fnc_initObject.sqf | 4 ++-- addons/cargo/functions/fnc_initVehicle.sqf | 6 +++--- addons/common/XEH_postInit.sqf | 2 +- addons/common/XEH_preStart.sqf | 2 +- addons/common/dev/test_cfgPatches.sqf | 12 +++++------ .../fnc__handleRequestSyncedEvent.sqf | 2 +- .../functions/fnc__handleSyncedEvent.sqf | 2 +- .../fnc_cbaSettings_convertHelper.sqf | 2 +- .../fnc_cbaSettings_transferUserSettings.sqf | 2 +- addons/common/functions/fnc_checkFiles.sqf | 2 +- addons/common/functions/fnc_firedEH.sqf | 2 +- addons/common/functions/fnc_getDeathAnim.sqf | 2 +- .../functions/fnc_getTurretDirection.sqf | 2 +- .../functions/fnc_playConfigSound3D.sqf | 2 +- .../functions/fnc_readSettingFromModule.sqf | 2 +- .../fnc_readSettingsFromParamsArray.sqf | 4 ++-- .../fnc_removeSyncedEventHandler.sqf | 2 +- addons/common/functions/fnc_runTests.sqf | 8 ++++---- .../fnc_setApproximateVariablePublic.sqf | 2 +- .../functions/fnc_setVariablePublic.sqf | 4 ++-- addons/common/functions/fnc_showHud.sqf | 6 +++--- .../functions/fnc_statusEffect_addType.sqf | 4 ++-- .../functions/fnc_statusEffect_localEH.sqf | 6 +++--- .../functions/fnc_statusEffect_respawnEH.sqf | 6 +++--- .../fnc_statusEffect_sendEffects.sqf | 6 +++--- .../common/functions/fnc_statusEffect_set.sqf | 2 +- addons/common/functions/fnc_syncedEvent.sqf | 2 +- .../functions/fnc_unloadPersonLocal.sqf | 2 +- .../functions/fnc_detonateAmmunition.sqf | 2 +- addons/csw/dev/checkStaticWeapons.sqf | 2 +- .../fnc_reload_handleAddTurretMag.sqf | 6 +++--- .../fnc_reload_handleRemoveTurretMag.sqf | 6 +++--- .../csw/functions/fnc_reload_loadMagazine.sqf | 2 +- addons/explosives/XEH_postInit.sqf | 2 +- .../functions/fnc_setupExplosive.sqf | 2 +- addons/fcs/functions/fnc_firedEH.sqf | 4 ++-- addons/finger/XEH_postInit.sqf | 2 +- .../finger/functions/fnc_incomingFinger.sqf | 4 ++-- addons/finger/functions/fnc_perFrameEH.sqf | 2 +- addons/fire/XEH_postInit.sqf | 2 +- addons/fire/functions/fnc_burn.sqf | 4 ++-- addons/frag/functions/fnc_addPfhRound.sqf | 2 +- addons/frag/functions/fnc_fired.sqf | 2 +- addons/frag/functions/fnc_frago.sqf | 2 +- addons/frag/functions/fnc_masterPFH.sqf | 2 +- addons/goggles/functions/fnc_handleFired.sqf | 2 +- .../grenades/functions/fnc_throwGrenade.sqf | 2 +- .../headless/functions/fnc_transferGroups.sqf | 4 ++-- .../hellfire/functions/fnc_attackProfile.sqf | 2 +- .../functions/fnc_addActionToZeus.sqf | 4 ++-- .../functions/fnc_addMainAction.sqf | 2 +- .../functions/fnc_compileMenu.sqf | 4 ++-- .../functions/fnc_removeActionFromClass.sqf | 2 +- .../javelin/functions/fnc_mapHelperDraw.sqf | 2 +- addons/javelin/functions/fnc_onOpticDraw.sqf | 4 ++-- .../fnc_handleLaserTargetCreation.sqf | 6 +++--- addons/laser/functions/fnc_laserTargetPFH.sqf | 2 +- .../functions/fnc_seekerFindLaserSpot.sqf | 2 +- addons/laser/functions/fnc_shootRay.sqf | 4 ++-- addons/map/XEH_postInitClient.sqf | 4 ++-- .../functions/fnc_blueForceTrackingModule.sqf | 2 +- .../marker_flags/functions/fnc_placeFlag.sqf | 4 ++-- addons/markers/XEH_postInit.sqf | 2 +- .../medical/functions/fnc_addDamageToUnit.sqf | 10 +++++----- .../medical/functions/fnc_setUnconscious.sqf | 2 +- addons/medical_ai/XEH_postInit.sqf | 2 +- .../functions/fnc_parseConfigForInjuries.sqf | 20 +++++++++---------- .../functions/fnc_woundReceived.sqf | 7 +++---- .../fnc_woundsHandlerVehiclecrash.sqf | 2 +- .../functions/fnc_woundsHandlerVehiclehit.sqf | 2 +- addons/medical_engine/XEH_postInit.sqf | 4 ++-- .../functions/fnc_handleDamage.sqf | 4 ++-- .../functions/fnc_collectActions.sqf | 4 ++-- .../functions/fnc_handleBandageOpening.sqf | 4 ++-- .../functions/fnc_isInMedicalFacility.sqf | 2 +- .../functions/fnc_getDetectedObject.sqf | 2 +- .../functions/fnc_attackProfile_JAV_DIR.sqf | 4 ++-- .../functions/fnc_attackProfile_JAV_TOP.sqf | 8 ++++---- .../functions/fnc_attackProfile_LIN.sqf | 2 +- .../functions/fnc_guidancePFH.sqf | 6 +++--- .../missileguidance/functions/fnc_onFired.sqf | 4 ++-- .../functions/fnc_seekerType_Optic.sqf | 4 ++-- .../functions/fnc_seekerType_SALH.sqf | 2 +- .../functions/fnc_csw_getProxyWeapon.sqf | 2 +- addons/modules/XEH_postInit.sqf | 2 +- .../functions/fnc_drawNameTagIcon.sqf | 2 +- .../functions/fnc_onFiredPlayer.sqf | 4 ++-- addons/nightvision/functions/fnc_pfeh.sqf | 2 +- .../functions/fnc_refreshGoggleType.sqf | 2 +- addons/nlaw/functions/fnc_attackProfile.sqf | 2 +- addons/optics/functions/fnc_handleFired.sqf | 2 +- addons/overheating/XEH_postInit.sqf | 2 +- addons/overheating/functions/fnc_firedEH.sqf | 2 +- .../overpressure/functions/fnc_firedEHBB.sqf | 2 +- .../overpressure/functions/fnc_firedEHOP.sqf | 2 +- .../functions/fnc_getDistance.sqf | 2 +- .../parachute/functions/fnc_cutParachute.sqf | 2 +- addons/recoil/functions/fnc_camshake.sqf | 2 +- addons/refuel/functions/fnc_getCapacity.sqf | 2 +- .../repair/functions/fnc_addRepairActions.sqf | 2 +- addons/repair/functions/fnc_doRepair.sqf | 4 ++-- addons/repair/functions/fnc_doRepairTrack.sqf | 2 +- .../repair/functions/fnc_doReplaceTrack.sqf | 2 +- .../repair/functions/fnc_doReplaceWheel.sqf | 2 +- .../functions/fnc_getHitPointString.sqf | 2 +- .../functions/fnc_getSelectionsToIgnore.sqf | 2 +- .../fnc_getWheelHitPointsWithSelections.sqf | 4 ++-- .../functions/fnc_isInRepairFacility.sqf | 2 +- .../functions/fnc_normalizeHitPoints.sqf | 6 +++--- addons/repair/functions/fnc_repair.sqf | 2 +- .../repair/functions/fnc_repair_failure.sqf | 2 +- .../repair/functions/fnc_repair_success.sqf | 2 +- .../functions/fnc_setHitPointDamage.sqf | 4 ++-- .../functions/fnc_handlePlayerChanged.sqf | 12 +++++------ addons/respawn/functions/fnc_restoreGear.sqf | 2 +- addons/scopes/functions/fnc_firedEH.sqf | 2 +- addons/sitting/XEH_clientInit.sqf | 2 +- addons/sitting/functions/fnc_sit.sqf | 2 +- .../functions/fnc_createSlideshow.sqf | 2 +- addons/tagging/functions/fnc_tag.sqf | 4 ++-- .../functions/fnc_addEventHandler.sqf | 2 +- .../functions/fnc_processHit.sqf | 4 ++-- .../functions/fnc_onOpenInventory.sqf | 4 ++-- .../functions/fnc_setVehicleLockEH.sqf | 2 +- addons/viewports/dev/debugPoints.sqf | 2 +- .../functions/fnc_throwGrenade.sqf | 2 +- .../weather/functions/fnc_displayAirTemp.sqf | 2 +- .../weather/functions/fnc_displayWindInfo.sqf | 4 ++-- .../functions/fnc_handleFired.sqf | 2 +- .../fnc_moduleCargoParadropWaypoint.sqf | 2 +- .../functions/fnc_moduleRemoveArsenal.sqf | 2 +- 145 files changed, 234 insertions(+), 235 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index a167d027f3..b41fd7a7c0 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -17,7 +17,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); if (!(_ammo isKindOf "BulletBase")) exitWith {}; if (!alive _projectile) exitWith {}; diff --git a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf index 4c01043875..89e89b9f7e 100644 --- a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf +++ b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf @@ -22,7 +22,7 @@ private _initStartTime = diag_tickTime; private _mapSize = worldSize; if (("ace_advanced_ballistics" callExtension format["init:%1:%2", worldName, _mapSize]) == "Terrain already initialized") exitWith { - INFO_1("Terrain already initialized [world: %1]", worldName); + INFO_1("Terrain already initialized [world: %1]",worldName); #ifdef DEBUG_MODE_FULL systemChat "AdvancedBallistics: Terrain already initialized"; #endif @@ -33,14 +33,14 @@ private _gridCells = _mapGrids * _mapGrids; GVAR(currentGrid) = 0; -INFO_2("Starting Terrain Extension [cells: %1] [world: %2]", _gridCells, worldName); +INFO_2("Starting Terrain Extension [cells: %1] [world: %2]",_gridCells,worldName); [{ params ["_args","_idPFH"]; _args params ["_mapGrids", "_gridCells", "_initStartTime"]; if (GVAR(currentGrid) >= _gridCells) exitWith { - INFO_2("Finished terrain initialization in %1 seconds [world: %2]", (diag_tickTime - _initStartTime) toFixed 2, worldName); + INFO_2("Finished terrain initialization in %1 seconds [world: %2]",(diag_tickTime - _initStartTime) toFixed 2,worldName); #ifdef DEBUG_MODE_FULL systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", (diag_tickTime - _initStartTime) toFixed 2]; #endif diff --git a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf index 103ce3d1cd..d6081e6f9e 100644 --- a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf @@ -66,7 +66,7 @@ if ((_typicalSpeed > 0) && {_typicalSpeed < 360}) then { if (_inheritedBarrelConfig || _inheritedTempConfig) then { private _parentConfig = inheritsFrom _ammoConfig; private _parentSpeed = getNumber (_parentConfig >> "typicalSpeed"); - WARNING_4("Subsonic Ammo %1 (%2 m/s) missing `ACE_muzzleVelocities` or `ACE_ammoTempMuzzleVelocityShifts` configs, attempting to use parent %3 (%4m/s)",_this,_typicalSpeed,configName _parentConfig, _parentSpeed); + WARNING_4("Subsonic Ammo %1 (%2 m/s) missing `ACE_muzzleVelocities` or `ACE_ammoTempMuzzleVelocityShifts` configs, attempting to use parent %3 (%4m/s)",_this,_typicalSpeed,configName _parentConfig,_parentSpeed); if (_parentSpeed <= 0) exitWith {//Handle weird or null parent _muzzleVelocityTable = []; _ammoTempMuzzleVelocityShifts = []; diff --git a/addons/ai/functions/fnc_garrison.sqf b/addons/ai/functions/fnc_garrison.sqf index 301333a4b4..0f9613dd9f 100644 --- a/addons/ai/functions/fnc_garrison.sqf +++ b/addons/ai/functions/fnc_garrison.sqf @@ -128,7 +128,7 @@ switch (_fillingType) do { } else { private _pos = _building select 0; private _nearestUnits = (_pos nearEntities ["CAManBase", 2]); - LOG(format [ARR_3("fnc_garrison: Unit detection | %1 units nearby | %2 units within height",count _nearestUnits, {floor ((getPos _x) select 2) == floor (_pos select 2)} count _nearestUnits)]); + LOG(format [ARR_3("fnc_garrison: Unit detection | %1 units nearby | %2 units within height",count _nearestUnits,{floor ((getPos _x) select 2) == floor (_pos select 2)} count _nearestUnits)]); if (count _nearestUnits > 0 && {[_nearestUnits, _pos] call _fnc_comparePos}) then { LOG(format [ARR_2("fnc_garrison: Unit present | removing position | %1 positions remaining for this building",count (_buildingsIndex select (_buildingsIndex find _building)) - 1)]); @@ -177,7 +177,7 @@ switch (_fillingType) do { } else { private _pos = _building select 0; private _nearestUnits = (_pos nearEntities ["CAManBase", 2]); - LOG(format [ARR_3("fnc_garrison: Unit detection | %1 units nearby | %2 units within height",count _nearestUnits, {floor ((getPos _x) select 2) == floor (_pos select 2)} count _nearestUnits)]); + LOG(format [ARR_3("fnc_garrison: Unit detection | %1 units nearby | %2 units within height",count _nearestUnits,{floor ((getPos _x) select 2) == floor (_pos select 2)} count _nearestUnits)]); if (count _nearestUnits > 0 && {[_nearestUnits, _pos] call _fnc_comparePos}) then { LOG(format [ARR_2("fnc_garrison: Unit present | removing position | %1 positions remaining for this building",count (_buildingsIndex select (_buildingsIndex find _building)) - 1)]); @@ -224,7 +224,7 @@ switch (_fillingType) do { } else { private _pos = selectRandom _building; private _nearestUnits = (_pos nearEntities ["CAManBase", 2]); - LOG(format [ARR_3("fnc_garrison: Unit detection | %1 units nearby | %2 units within height",count _nearestUnits, {floor ((getPos _x) select 2) == floor (_pos select 2)} count _nearestUnits)]); + LOG(format [ARR_3("fnc_garrison: Unit detection | %1 units nearby | %2 units within height",count _nearestUnits,{floor ((getPos _x) select 2) == floor (_pos select 2)} count _nearestUnits)]); if (count _nearestUnits > 0 && {[_nearestUnits, _pos] call _fnc_comparePos}) then { LOG(format [ARR_2("fnc_garrison: Unit present | removing position | %1 positions remaining for this building",count (_buildingsIndex select (_buildingsIndex find _building)) - 1)]); @@ -258,7 +258,7 @@ switch (_fillingType) do { }; }; -TRACE_1(format [ARR_2("fnc_garrison: while loop ended | %1 units ready to be treated by PFH",count _unitMoveList)], _teleport); +TRACE_1(format [ARR_2("fnc_garrison: while loop ended | %1 units ready to be treated by PFH",count _unitMoveList)],_teleport); // Update the unit list and remove duplicate positions and units private _garrison_unitMoveList = missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []]; @@ -279,5 +279,5 @@ if (_teleport) then { [_unitMoveList] call FUNC(garrisonMove); }; -TRACE_1(format [ARR_3("fnc_garrison: End | %1 units left | %2 buildings left", count _unitsArray, count _buildingsIndex)], _unitsArray); +TRACE_1(format [ARR_3("fnc_garrison: End | %1 units left | %2 buildings left",count _unitsArray,count _buildingsIndex)],_unitsArray); _unitsArray diff --git a/addons/ai/functions/fnc_garrisonMove.sqf b/addons/ai/functions/fnc_garrisonMove.sqf index 588ebb2016..4d1c471a0e 100644 --- a/addons/ai/functions/fnc_garrisonMove.sqf +++ b/addons/ai/functions/fnc_garrisonMove.sqf @@ -81,13 +81,13 @@ if (isNil QGVAR(garrison_moveUnitPFH)) then { [QGVAR(enableAttack), [[_unit], true], _unit] call CBA_fnc_targetEvent; }; - LOG(format [ARR_2("garrisonMove PFH: unit in position | %1 units left", count _unitMoveList)]); + LOG(format [ARR_2("garrisonMove PFH: unit in position | %1 units left",count _unitMoveList)]); }; // Check if unit is alive or even existing if (!alive _unit || {_unit getVariable [QGVAR(garrisoned), false]}) then { _unitMoveList deleteAt (_unitMoveList find _x); - LOG(format [ARR_2("garrisonMove PFH: unit dead, deleted or garrisoned via TP | %1 units left", count _unitMoveList)]); + LOG(format [ARR_2("garrisonMove PFH: unit dead, deleted or garrisoned via TP | %1 units left",count _unitMoveList)]); } else { private _unitPos = getPos _unit; diff --git a/addons/ai/functions/fnc_unGarrison.sqf b/addons/ai/functions/fnc_unGarrison.sqf index ab0c525a24..09ebc3e63d 100644 --- a/addons/ai/functions/fnc_unGarrison.sqf +++ b/addons/ai/functions/fnc_unGarrison.sqf @@ -28,7 +28,7 @@ _units = _units select {local _x}; private _leader = leader _unit; - TRACE_3("fnc_ungarrison: unit and leader",_unit , _leader, (_leader == _unit)); + TRACE_3("fnc_ungarrison: unit and leader",_unit,_leader,(_leader == _unit)); _unit setVariable [QGVAR(garrisonned), false, true]; diff --git a/addons/arsenal/functions/fnc_addAction.sqf b/addons/arsenal/functions/fnc_addAction.sqf index 4606be5abe..9f69d2d51f 100644 --- a/addons/arsenal/functions/fnc_addAction.sqf +++ b/addons/arsenal/functions/fnc_addAction.sqf @@ -38,13 +38,13 @@ call FUNC(compileActions); // Skip if not allowed in editor and in editor if (is3DEN && {_scopeEditor != 2}) exitWith { - TRACE_1("Skipping action because in editor", _rootClass); + TRACE_1("Skipping action because in editor",_rootClass); [] }; // Class can't contain ~, because it's used for formatting result if ("~" in _rootClass) exitWith { - TRACE_1("Classname can't contain '~'", _rootClass); + TRACE_1("Classname can't contain '~'",_rootClass); [] }; @@ -65,7 +65,7 @@ private _fnc_addToGroup = { // Don't allow two of the same class if (_group findIf {(_x select 0) == _class} != -1) then { - TRACE_1("An action with this ID already exists", _class); + TRACE_1("An action with this ID already exists",_class); continue; }; diff --git a/addons/arsenal/functions/fnc_addSort.sqf b/addons/arsenal/functions/fnc_addSort.sqf index 053f2ff52f..767660402f 100644 --- a/addons/arsenal/functions/fnc_addSort.sqf +++ b/addons/arsenal/functions/fnc_addSort.sqf @@ -72,7 +72,7 @@ private _fnc_addToTabs = { _currentTab pushBack _sort; _return pushBack _sortName; } else { - TRACE_1("A sort with this ID already exists", _sortName); + TRACE_1("A sort with this ID already exists",_sortName); }; } forEach _tabsToAddTo; }; diff --git a/addons/arsenal/functions/fnc_addStat.sqf b/addons/arsenal/functions/fnc_addStat.sqf index 40530262d7..d618b96a93 100644 --- a/addons/arsenal/functions/fnc_addStat.sqf +++ b/addons/arsenal/functions/fnc_addStat.sqf @@ -77,7 +77,7 @@ private _fnc_addToTabs = { // Find if there is an entry with same ID if (_currentTab findIf {_x select 5 == _statName} != -1) then { - TRACE_1("A stat with this ID already exists", _statName); + TRACE_1("A stat with this ID already exists",_statName); } else { _stat = +_finalArray; _stat set [5, _statName]; diff --git a/addons/arsenal/functions/fnc_buttonActionsPage.sqf b/addons/arsenal/functions/fnc_buttonActionsPage.sqf index d135cc6a80..b3a46a68e3 100644 --- a/addons/arsenal/functions/fnc_buttonActionsPage.sqf +++ b/addons/arsenal/functions/fnc_buttonActionsPage.sqf @@ -17,7 +17,7 @@ params ["_display", "_control", "_nextPage"]; -TRACE_1("control enabled", ctrlEnabled _control); +TRACE_1("control enabled",ctrlEnabled _control); if !(ctrlEnabled _control) exitWith {}; GVAR(currentActionPage) = GVAR(currentActionPage) + ([-1, 1] select _nextPage); diff --git a/addons/arsenal/functions/fnc_buttonStatsPage.sqf b/addons/arsenal/functions/fnc_buttonStatsPage.sqf index a03aa6958a..33eec398e9 100644 --- a/addons/arsenal/functions/fnc_buttonStatsPage.sqf +++ b/addons/arsenal/functions/fnc_buttonStatsPage.sqf @@ -17,7 +17,7 @@ params ["_display", "_control", "_nextPage"]; -TRACE_1("control enabled", ctrlEnabled _control); +TRACE_1("control enabled",ctrlEnabled _control); if !(ctrlEnabled _control) exitWith {}; GVAR(currentStatPage) = GVAR(currentStatPage) + ([-1, 1] select _nextPage); diff --git a/addons/arsenal/functions/fnc_compileStats.sqf b/addons/arsenal/functions/fnc_compileStats.sqf index ef8cba2f40..f19854793a 100644 --- a/addons/arsenal/functions/fnc_compileStats.sqf +++ b/addons/arsenal/functions/fnc_compileStats.sqf @@ -101,7 +101,7 @@ private _priority = 0; (_finalArray select 4) set [1, compile (getText (_x >> "textStatement"))]; }; - TRACE_3("stats array", _finalArray, _leftTabsList, _rightTabsList); + TRACE_3("stats array",_finalArray,_leftTabsList,_rightTabsList); if (_leftTabsList isNotEqualTo []) then { [_statsListLeftPanel, _leftTabsList, "L"] call _fnc_addToTabs; diff --git a/addons/atragmx/functions/fnc_initGunList.sqf b/addons/atragmx/functions/fnc_initGunList.sqf index 783a68202a..2ae67bb78d 100644 --- a/addons/atragmx/functions/fnc_initGunList.sqf +++ b/addons/atragmx/functions/fnc_initGunList.sqf @@ -15,7 +15,7 @@ * Public: No */ -LOG_2("Trying to load gunlist from profile [Version: %1][Count: %2]", profileNamespace getVariable [ARR_2(QGVAR(profileNamespaceVersion), 'none')], count (profileNamespace getVariable [ARR_2(QGVAR(gunList), [])])); +LOG_2("Trying to load gunlist from profile [Version: %1][Count: %2]",profileNamespace getVariable [ARR_2(QGVAR(profileNamespaceVersion),'none')],count (profileNamespace getVariable [ARR_2(QGVAR(gunList),[])])); private _resetGunList = true; if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && {count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0}) then { diff --git a/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf b/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf index 4341867b29..2e07a353df 100644 --- a/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf +++ b/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf @@ -16,7 +16,7 @@ */ params ["_vehicle"]; -TRACE_1("params", _vehicle); +TRACE_1("params",_vehicle); scopeName "main"; diff --git a/addons/cargo/functions/fnc_initObject.sqf b/addons/cargo/functions/fnc_initObject.sqf index a8522ad283..734fe99c39 100644 --- a/addons/cargo/functions/fnc_initObject.sqf +++ b/addons/cargo/functions/fnc_initObject.sqf @@ -44,7 +44,7 @@ if (_item getVariable [QGVAR(initObject),false]) exitWith {}; if (_canLoadConfig) then { GVAR(initializedItemClasses) pushBack _type; - TRACE_1("Adding load cargo action to class", _type); + TRACE_1("Adding load cargo action to class",_type); { [_type, 0, ["ACE_MainActions"], _x] call EFUNC(interact_menu,addActionToClass); @@ -52,7 +52,7 @@ if (_canLoadConfig) then { } else { _item setVariable [QGVAR(initObject), true]; - TRACE_1("Adding load cargo action to object", _item); + TRACE_1("Adding load cargo action to object",_item); { [_item, 0, ["ACE_MainActions"], _x] call EFUNC(interact_menu,addActionToObject); diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index ed0a02cba9..3361897e50 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -16,7 +16,7 @@ */ params ["_vehicle"]; -TRACE_1("params", _vehicle); +TRACE_1("params",_vehicle); private _type = typeOf _vehicle; private _config = configOf _vehicle; @@ -68,13 +68,13 @@ if (_type in GVAR(initializedVehicleClasses)) exitWith {}; if (_hasCargoConfig) then { GVAR(initializedVehicleClasses) pushBack _type; - TRACE_1("Adding unload cargo action to class", _type); + TRACE_1("Adding unload cargo action to class",_type); [_type, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass); } else { _vehicle setVariable [QGVAR(initVehicle), true]; - TRACE_1("Adding unload cargo action to object", _vehicle); + TRACE_1("Adding unload cargo action to object",_vehicle); [_vehicle, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToObject); }; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 4c98e813b1..af4b33d49b 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -142,7 +142,7 @@ if (isServer) then { if ((!isNil "_zeusLogic") && {!isNull _zeusLogic}) then { { if ((_x getvariable ["bis_fnc_moduleRemoteControl_owner", objnull]) isEqualTo _dcPlayer) exitWith { - INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`", [_x] call FUNC(getName), _dcPlayer, _x); + INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`",[_x] call FUNC(getName),_dcPlayer,_x); _x setVariable ["bis_fnc_moduleRemoteControl_owner", nil, true]; }; nil diff --git a/addons/common/XEH_preStart.sqf b/addons/common/XEH_preStart.sqf index b872756af8..208adea7b1 100644 --- a/addons/common/XEH_preStart.sqf +++ b/addons/common/XEH_preStart.sqf @@ -5,7 +5,7 @@ if (isFilePatchingEnabled) then { private _notLoaded = configProperties [configfile >> "ace_notLoaded", "isText _x"]; { - INFO_2("%1 not loaded because %2",configName _x, getText _x); + INFO_2("%1 not loaded because %2",configName _x,getText _x); } forEach _notLoaded; }; diff --git a/addons/common/dev/test_cfgPatches.sqf b/addons/common/dev/test_cfgPatches.sqf index bd00869360..281c16eca3 100644 --- a/addons/common/dev/test_cfgPatches.sqf +++ b/addons/common/dev/test_cfgPatches.sqf @@ -18,11 +18,11 @@ private _allUnits = []; { private _class = configFile >> "CfgVehicles" >> _x; if (isNull _class) then { - WARNING_1("in units[] but null - %1", _x); + WARNING_1("in units[] but null - %1",_x); _testPass = false; } else { // if (((getNumber (_class >> "scope")) != 2) && {((getNumber (_class >> "scopeCurator")) != 2)}) then { - // WARNING_2("in units[] but not public - %1 from %2", configName _class, configSourceMod _class); + // WARNING_2("in units[] but not public - %1 from %2",configName _class,configSourceMod _class); // _testPass = false; // }; }; @@ -36,11 +36,11 @@ private _allWeapons = []; { private _class = configFile >> "CfgWeapons" >> _x; if (isNull _class) then { - WARNING_1("in weapons[] but null - %1", _x); + WARNING_1("in weapons[] but null - %1",_x); _testPass = false; } else { // if (((getNumber (_class >> "scope")) != 2) && {((getNumber (_class >> "scopeCurator")) != 2)}) then { - // WARNING_2("in weapons[] but not public - %1 from %2", configName _class, configSourceMod _class); + // WARNING_2("in weapons[] but not public - %1 from %2",configName _class,configSourceMod _class); // _testPass = false; // }; }; @@ -51,7 +51,7 @@ private _vics = "(configName _x) select [0,3] == 'ace'" configClasses (configFil { if (((getNumber (_x >> "scope")) == 2) || {((getNumber (_x >> "scopeCurator")) == 2)}) then { if (!((toLower configName _x) in _allUnits)) then { - WARNING_2("Not in any units[] - %1 from %2", configName _x, configSourceMod _x); + WARNING_2("Not in any units[] - %1 from %2",configName _x,configSourceMod _x); _testPass = false; }; }; @@ -63,7 +63,7 @@ private _weapons = "(configName _x) select [0,3] == 'ace'" configClasses (config private _type = toLower configName _x; if (((getNumber (_x >> "scope")) == 2) || {((getNumber (_x >> "scopeCurator")) == 2)}) then { if (!((toLower configName _x) in _allWeapons)) then { - WARNING_2("Not in any weapons[] - %1 from %2", configName _x, configSourceMod _x); + WARNING_2("Not in any weapons[] - %1 from %2",configName _x,configSourceMod _x); _testPass = false; }; }; diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index a5bb286768..299dff8373 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -27,7 +27,7 @@ if (isServer) then { params ["_eventName", "_client"]; if !(_eventName in GVAR(syncedEvents)) exitWith { - ERROR_1("Request for synced event - key [%1] not found.", _eventName); + ERROR_1("Request for synced event - key [%1] not found.",_eventName); false }; diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf index a7b28de1a6..aac8ac873e 100644 --- a/addons/common/functions/fnc__handleSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleSyncedEvent.sqf @@ -20,7 +20,7 @@ params ["_name", "_args", "_ttl"]; if !(_name in GVAR(syncedEvents)) exitWith { - ERROR_1("Synced event key [%1] not found (_handleSyncedEvent).", _name); + ERROR_1("Synced event key [%1] not found (_handleSyncedEvent).",_name); false }; diff --git a/addons/common/functions/fnc_cbaSettings_convertHelper.sqf b/addons/common/functions/fnc_cbaSettings_convertHelper.sqf index 4597cf3d40..b7ef446cf6 100644 --- a/addons/common/functions/fnc_cbaSettings_convertHelper.sqf +++ b/addons/common/functions/fnc_cbaSettings_convertHelper.sqf @@ -22,7 +22,7 @@ private _output = [format ["// CBA Settings [ADDON: %1]:", _addon]]; private _addonSearch = _addon + "_"; private _addonSearchCount = count _addonSearch; -TRACE_2("",_addonSearch, _addonSearchCount); +TRACE_2("",_addonSearch,_addonSearchCount); private _settings = configProperties [configFile >> "ACE_Settings", "(isClass _x) && {((configName _x) select [0, _addonSearchCount]) == _addonSearch}"]; diff --git a/addons/common/functions/fnc_cbaSettings_transferUserSettings.sqf b/addons/common/functions/fnc_cbaSettings_transferUserSettings.sqf index eaa9d089fc..8b6e62cbf6 100644 --- a/addons/common/functions/fnc_cbaSettings_transferUserSettings.sqf +++ b/addons/common/functions/fnc_cbaSettings_transferUserSettings.sqf @@ -34,7 +34,7 @@ private _aceSettings = configProperties [configFile >> "ACE_Settings", "isClass if (_isClientSettable && {_currentValue isNotEqualTo _profileVar}) then { // CBA_settings_fnc_set will do type checking for the old profile var private _ret = [_settingName, _profileVar, 0, "client", true] call CBA_settings_fnc_set; - INFO_3("Transfering setting [%1: %2] returned %3", _settingName, _profileVar, _ret); + INFO_3("Transfering setting [%1: %2] returned %3",_settingName,_profileVar,_ret); }; }; } forEach _aceSettings; diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf index 8b00cad533..47de2290dd 100644 --- a/addons/common/functions/fnc_checkFiles.sqf +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -80,7 +80,7 @@ if (_oldCompats isNotEqualTo []) then { _oldCompats = _oldCompats apply {format ["%1 (%2)", _x select 0, _x select 1]}; [{ // Lasts for ~10 seconds - ERROR_WITH_TITLE_3("The following ACE compatiblity PBOs are outdated", "%1. ACE Main version is %2 from %3.",_this select 0,_this select 1,_this select 2); + ERROR_WITH_TITLE_3("The following ACE compatiblity PBOs are outdated","%1. ACE Main version is %2 from %3.",_this select 0,_this select 1,_this select 2); }, [_oldCompats, _mainVersion, _mainSource], 1] call CBA_fnc_waitAndExecute; }; diff --git a/addons/common/functions/fnc_firedEH.sqf b/addons/common/functions/fnc_firedEH.sqf index 9a4c8e50d6..cee874782a 100644 --- a/addons/common/functions/fnc_firedEH.sqf +++ b/addons/common/functions/fnc_firedEH.sqf @@ -24,7 +24,7 @@ BEGIN_COUNTER(firedEH); params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; -TRACE_7("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile); +TRACE_7("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); if (_unit isKindOf "CAManBase") then { // The unit it on foot diff --git a/addons/common/functions/fnc_getDeathAnim.sqf b/addons/common/functions/fnc_getDeathAnim.sqf index 2b92e6ef10..4d2e53d3da 100644 --- a/addons/common/functions/fnc_getDeathAnim.sqf +++ b/addons/common/functions/fnc_getDeathAnim.sqf @@ -27,7 +27,7 @@ if (getNumber (_unitAnimationCfg >> "terminal") == 1) exitWith {_animationState} private _unitActionsCfg = configFile >> "CfgMovesBasic" >> "Actions" >> getText (_unitAnimationCfg >> "actions"); -TRACE_2("Animation/Action", configName _unitAnimationCfg, configName _unitActionsCfg); +TRACE_2("Animation/Action",configName _unitAnimationCfg,configName _unitActionsCfg); if (vehicle _unit != _unit) then { private _interpolateArray = getArray (_unitAnimationCfg >> "interpolateTo"); diff --git a/addons/common/functions/fnc_getTurretDirection.sqf b/addons/common/functions/fnc_getTurretDirection.sqf index 6f24b40f3e..7592bc8f33 100644 --- a/addons/common/functions/fnc_getTurretDirection.sqf +++ b/addons/common/functions/fnc_getTurretDirection.sqf @@ -25,7 +25,7 @@ private _pov = getText (_turret >> "memoryPointGunnerOptics"); private _gunBeg = getText (_turret >> "gunBeg"); private _gunEnd = getText (_turret >> "gunEnd"); -TRACE_3("", _pov, _gunBeg, _gunEnd); +TRACE_3("",_pov,_gunBeg,_gunEnd); // Pull the PIP pov or barrel direction, depending on how the model is set up private _povPos = _vehicle modelToWorldVisualWorld (_vehicle selectionPosition _pov); diff --git a/addons/common/functions/fnc_playConfigSound3D.sqf b/addons/common/functions/fnc_playConfigSound3D.sqf index c282199365..788a2a6b4e 100644 --- a/addons/common/functions/fnc_playConfigSound3D.sqf +++ b/addons/common/functions/fnc_playConfigSound3D.sqf @@ -22,7 +22,7 @@ params ["_soundClass", "_posASL", "_volume", "_distance"]; private _sound = getArray (configFile >> "CfgSounds" >> _soundClass >> "sound"); if (_sound isEqualTo []) exitWith { - ERROR_1("CfgSounds class [%1] does not exist or contains empty sound array", _soundClass); + ERROR_1("CfgSounds class [%1] does not exist or contains empty sound array",_soundClass); }; TRACE_2("sound",_soundClass,_sound); diff --git a/addons/common/functions/fnc_readSettingFromModule.sqf b/addons/common/functions/fnc_readSettingFromModule.sqf index dc9ead397f..5f9678f97b 100644 --- a/addons/common/functions/fnc_readSettingFromModule.sqf +++ b/addons/common/functions/fnc_readSettingFromModule.sqf @@ -23,7 +23,7 @@ params ["_logic", "_settingName", "_moduleVariable"]; // Check if the variable is already defined if (isNil _settingName) exitWith { - ERROR_1("readSettingFromModule - param [%1] is not an ace_setting", _settingName); + ERROR_1("readSettingFromModule - param [%1] is not an ace_setting",_settingName); }; // Check if the parameter is defined in the module diff --git a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf index 2abb5fa73e..7273fc61ca 100644 --- a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf +++ b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf @@ -32,7 +32,7 @@ TRACE_1("Reading missionConfigFile params",_paramsArray); // Check if the variable is already defined if (isNil _settingName) exitWith { - ERROR_1("readSettingsFromParamsArray - param [%1] is not an ace_setting", _settingName); + ERROR_1("readSettingsFromParamsArray - param [%1] is not an ace_setting",_settingName); }; // The setting is not forced, so update the value @@ -52,7 +52,7 @@ TRACE_1("Reading missionConfigFile params",_paramsArray); }; if (!_validValue) exitWith { - WARNING_3("readSettingsFromParamsArray - param [%1] type not valid [%2] - expected type [%3]", _settingName,_settingValue,_settingType); + WARNING_3("readSettingsFromParamsArray - param [%1] type not valid [%2] - expected type [%3]",_settingName,_settingValue,_settingType); }; if ([_settingName, "mission"] call CBA_settings_fnc_isForced) then { diff --git a/addons/common/functions/fnc_removeSyncedEventHandler.sqf b/addons/common/functions/fnc_removeSyncedEventHandler.sqf index 5aed6270f4..615f50ce49 100644 --- a/addons/common/functions/fnc_removeSyncedEventHandler.sqf +++ b/addons/common/functions/fnc_removeSyncedEventHandler.sqf @@ -18,7 +18,7 @@ params ["_name"]; if !(_name in GVAR(syncedEvents)) exitWith { - ERROR_1("Synced event key [%1] not found (removeSyncedEventHandler).", _name); + ERROR_1("Synced event key [%1] not found (removeSyncedEventHandler)",_name); false }; diff --git a/addons/common/functions/fnc_runTests.sqf b/addons/common/functions/fnc_runTests.sqf index 946255c42f..4a449fb7eb 100644 --- a/addons/common/functions/fnc_runTests.sqf +++ b/addons/common/functions/fnc_runTests.sqf @@ -22,7 +22,7 @@ private _startTime = diag_tickTime; private _fails = []; private _total = 0; -INFO_1("ace_common_fnc_runTests starting for [%1]", _specificTest); +INFO_1("ace_common_fnc_runTests starting for [%1]",_specificTest); { private _testName = configName _x; @@ -41,8 +41,8 @@ INFO_1("ace_common_fnc_runTests starting for [%1]", _specificTest); }; } forEach (configProperties [configFile >> "ACE_Tests"]); -INFO_1("ace_common_fnc_runTests finished in %1 ms", (1000 * (diag_tickTime - _startTime)) toFixed 1); -INFO_2("[%1 / %2] Tests Passed", (_total - (count _fails)), _total); +INFO_1("ace_common_fnc_runTests finished in %1 ms",(1000 * (diag_tickTime - _startTime)) toFixed 1); +INFO_2("[%1 / %2] Tests Passed",(_total - (count _fails)),_total); if (_fails isNotEqualTo []) then { - INFO_1("Failed: %1", _fails); + INFO_1("Failed: %1",_fails); }; diff --git a/addons/common/functions/fnc_setApproximateVariablePublic.sqf b/addons/common/functions/fnc_setApproximateVariablePublic.sqf index 3ef9595121..ebd4476de5 100644 --- a/addons/common/functions/fnc_setApproximateVariablePublic.sqf +++ b/addons/common/functions/fnc_setApproximateVariablePublic.sqf @@ -38,4 +38,4 @@ if (abs(_value - _oldValue) < _tolerance) exitWith {}; _object setVariable [_varName, _value, true]; _object setVariable [_oldVarName, _value]; -TRACE_2("Published variable:", _varName, _value); +TRACE_2("Published variable:",_varName,_value); diff --git a/addons/common/functions/fnc_setVariablePublic.sqf b/addons/common/functions/fnc_setVariablePublic.sqf index 8b583849be..678e2bc057 100644 --- a/addons/common/functions/fnc_setVariablePublic.sqf +++ b/addons/common/functions/fnc_setVariablePublic.sqf @@ -34,7 +34,7 @@ if (_object isEqualTo (_object getVariable [format ["ACE_onEmbargo_%1", _varName _object setVariable [_varName, _value, true]; _object setVariable [format ["ACE_onEmbargo_%1", _varName], _object]; -TRACE_2("Starting Embargo", _varName, _delay); +TRACE_2("Starting Embargo",_varName,_delay); [{ params ["_object", "_varName", "_value"]; @@ -43,7 +43,7 @@ TRACE_2("Starting Embargo", _varName, _delay); _object setVariable [format ["ACE_onEmbargo_%1", _varName], nil]; //Remove Embargo private _curValue = _object getVariable _varName; - TRACE_4("End of embargo", _object, _varName, _value, _curValue); + TRACE_4("End of embargo",_object,_varName,_value,_curValue); //If value at start of embargo doesn't equal current, then broadcast and start new embargo if (_value isNotEqualTo _curValue) then { diff --git a/addons/common/functions/fnc_showHud.sqf b/addons/common/functions/fnc_showHud.sqf index da6f2e0975..1ca7ca8106 100644 --- a/addons/common/functions/fnc_showHud.sqf +++ b/addons/common/functions/fnc_showHud.sqf @@ -41,11 +41,11 @@ if (isArray (missionConfigFile >> "showHUD")) then { if (_reason != "") then { _reason = toLower _reason; if (_mask isEqualTo []) then { - TRACE_2("Removing", _reason, _mask); + TRACE_2("Removing",_reason,_mask); GVAR(showHudHash) deleteAt _reason; } else { while {(count _mask) < 10} do { _mask pushBack true; }; - TRACE_2("Setting", _reason, _mask); + TRACE_2("Setting",_reason,_mask); GVAR(showHudHash) set [_reason, _mask]; }; }; @@ -63,7 +63,7 @@ for "_index" from 0 to 9 do { _resultMask pushBack _set; }; -TRACE_2("showHud", _resultMask, keys GVAR(showHudHash)); +TRACE_2("showHud",_resultMask,keys GVAR(showHudHash)); showHud _resultMask; _resultMask diff --git a/addons/common/functions/fnc_statusEffect_addType.sqf b/addons/common/functions/fnc_statusEffect_addType.sqf index 44b39b10c9..c7bd61762e 100644 --- a/addons/common/functions/fnc_statusEffect_addType.sqf +++ b/addons/common/functions/fnc_statusEffect_addType.sqf @@ -21,8 +21,8 @@ params [["_name", "", [""]], ["_isGlobal", false, [false]], ["_commonReasonsArray", [], [[]]], ["_sendJIP", false, [false]]]; TRACE_3("params",_name,_isGlobal,_commonReasonsArray); -if (_name == "") exitWith {ERROR_1("addStatusEffect - Bad Name %1", _this)}; -if (_name in GVAR(statusEffect_Names)) exitWith {WARNING_1("addStatusEffect - Effect Already Added (note, will not update global bit) %1", _this)}; +if (_name == "") exitWith {ERROR_1("addStatusEffect - Bad Name %1",_this)}; +if (_name in GVAR(statusEffect_Names)) exitWith {WARNING_1("addStatusEffect - Effect Already Added (note, will not update global bit) %1",_this)}; if (_sendJIP && !_isGlobal) exitWith {WARNING_1("addStatusEffect - Trying to add non-global JIP effect %1",_this)}; GVAR(statusEffect_Names) pushBack _name; diff --git a/addons/common/functions/fnc_statusEffect_localEH.sqf b/addons/common/functions/fnc_statusEffect_localEH.sqf index f8ff93dba7..e60679350d 100644 --- a/addons/common/functions/fnc_statusEffect_localEH.sqf +++ b/addons/common/functions/fnc_statusEffect_localEH.sqf @@ -22,12 +22,12 @@ TRACE_2("params",_object,_isLocal); //Only run this after the settings are initialized //Need to wait for all EH to be installed (local event will happen between pre and post init) if !(GVAR(settingsInitFinished)) exitWith { - TRACE_1("pushing to runAtSettingsInitialized", _this); + TRACE_1("pushing to runAtSettingsInitialized",_this); GVAR(runAtSettingsInitialized) pushBack [FUNC(statusEffect_localEH), _this]; }; -if (!_isLocal) exitWith {TRACE_1("object no longer local", _this)}; -if (isNull _object) exitWith {TRACE_1("object null", _this)}; +if (!_isLocal) exitWith {TRACE_1("object no longer local",_this)}; +if (isNull _object) exitWith {TRACE_1("object null",_this)}; //Reset any variables because of respawn [_object, false] call FUNC(statusEffect_resetVariables); diff --git a/addons/common/functions/fnc_statusEffect_respawnEH.sqf b/addons/common/functions/fnc_statusEffect_respawnEH.sqf index 2c4a4840fe..edad032a9a 100644 --- a/addons/common/functions/fnc_statusEffect_respawnEH.sqf +++ b/addons/common/functions/fnc_statusEffect_respawnEH.sqf @@ -21,12 +21,12 @@ TRACE_1("params",_object); //Only run this after the settings are initialized //Need to wait for all EH to be installed (local event will happen between pre and post init) if !(GVAR(settingsInitFinished)) exitWith { - TRACE_1("pushing to runAtSettingsInitialized", _this); + TRACE_1("pushing to runAtSettingsInitialized",_this); GVAR(runAtSettingsInitialized) pushBack [FUNC(statusEffect_respawnEH), _this]; }; -if (!local _object) exitWith {TRACE_1("object no longer local", _this)}; -if (isNull _object) exitWith {TRACE_1("object null", _this)}; +if (!local _object) exitWith {TRACE_1("object no longer local",_this)}; +if (isNull _object) exitWith {TRACE_1("object null",_this)}; //Reset any variables on "real" respawn [_object, false] call FUNC(statusEffect_resetVariables); diff --git a/addons/common/functions/fnc_statusEffect_sendEffects.sqf b/addons/common/functions/fnc_statusEffect_sendEffects.sqf index bae2807782..a4e3f2d2a4 100644 --- a/addons/common/functions/fnc_statusEffect_sendEffects.sqf +++ b/addons/common/functions/fnc_statusEffect_sendEffects.sqf @@ -32,17 +32,17 @@ if (isNull _object) exitWith {}; private _eventName = format [QGVAR(%1), _x]; switch (true) do { case (GVAR(statusEffect_sendJIP) select _forEachIndex): { - TRACE_2("Sending Global JIP Event", _object, _effectNumber); + TRACE_2("Sending Global JIP Event",_object,_effectNumber); private _jipID = format [QGVAR(effect_%1_%2), _eventName, hashValue _object]; [_eventName, [_object, _effectNumber], _jipID] call CBA_fnc_globalEventJIP; [_jipID, _object] call CBA_fnc_removeGlobalEventJIP; }; case (GVAR(statusEffect_isGlobal) select _forEachIndex): { - TRACE_2("Sending Global Event", _object, _effectNumber); + TRACE_2("Sending Global Event",_object,_effectNumber); [_eventName, [_object, _effectNumber]] call CBA_fnc_globalEvent; }; default { - TRACE_2("Sending Target Event", _object, _effectNumber); + TRACE_2("Sending Target Event",_object,_effectNumber); [_eventName, [_object, _effectNumber], _object] call CBA_fnc_targetEvent; }; }; diff --git a/addons/common/functions/fnc_statusEffect_set.sqf b/addons/common/functions/fnc_statusEffect_set.sqf index 48af4bf771..6e8a74bd3e 100644 --- a/addons/common/functions/fnc_statusEffect_set.sqf +++ b/addons/common/functions/fnc_statusEffect_set.sqf @@ -23,7 +23,7 @@ TRACE_4("params",_object,_effectName,_ID,_set); //Only run this after the settings are initialized if !(GVAR(settingsInitFinished)) exitWith { - TRACE_1("pushing to runAtSettingsInitialized", _this); + TRACE_1("pushing to runAtSettingsInitialized",_this); GVAR(runAtSettingsInitialized) pushBack [FUNC(statusEffect_set), _this]; }; diff --git a/addons/common/functions/fnc_syncedEvent.sqf b/addons/common/functions/fnc_syncedEvent.sqf index 5bcb678524..75170fe7d1 100644 --- a/addons/common/functions/fnc_syncedEvent.sqf +++ b/addons/common/functions/fnc_syncedEvent.sqf @@ -20,7 +20,7 @@ params ["_name", "_args", ["_ttl", 0]]; if !(_name in GVAR(syncedEvents)) exitWith { - ERROR_1("Synced event key [%1] not found (syncedEvent).", _name); + ERROR_1("Synced event key [%1] not found (syncedEvent)",_name); false }; diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf index d7a2f57db0..0378c6a4b8 100644 --- a/addons/common/functions/fnc_unloadPersonLocal.sqf +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -35,7 +35,7 @@ if (_emptyPos isEqualTo []) then { }; if (count _emptyPos != 3) exitwith { - WARNING_4("Could not find unload pos %1-ASL: %2 isTouchingGround: %3 Speed: %4",_vehicle, getPosASL _vehicle, isTouchingGround _vehicle, speed _vehicle); + WARNING_4("Could not find unload pos %1-ASL: %2 isTouchingGround: %3 Speed: %4",_vehicle,getPosASL _vehicle,isTouchingGround _vehicle,speed _vehicle); if ((!isNull _unloader) && {[_unloader] call FUNC(isPlayer)}) then { //display text saying there are no safe places to exit the vehicle [QGVAR(displayTextStructured), [localize LSTRING(NoRoomToUnload)], [_unloader]] call CBA_fnc_targetEvent; diff --git a/addons/cookoff/functions/fnc_detonateAmmunition.sqf b/addons/cookoff/functions/fnc_detonateAmmunition.sqf index c089982e31..cc39ff43cf 100644 --- a/addons/cookoff/functions/fnc_detonateAmmunition.sqf +++ b/addons/cookoff/functions/fnc_detonateAmmunition.sqf @@ -33,7 +33,7 @@ private _magazine = _magazines select _magazineIndex; _magazine params ["_magazineClassname", "_amountOfMagazines"]; if (_amountOfMagazines < 0) exitWith { - ERROR_1("mag with no ammo - %1", _magazine); + ERROR_1("mag with no ammo - %1",_magazine); }; private _removed = _amountOfMagazines min floor(1 + random(6 / GVAR(ammoCookoffDuration))); diff --git a/addons/csw/dev/checkStaticWeapons.sqf b/addons/csw/dev/checkStaticWeapons.sqf index 59e712cb70..1d7ffe988d 100644 --- a/addons/csw/dev/checkStaticWeapons.sqf +++ b/addons/csw/dev/checkStaticWeapons.sqf @@ -7,7 +7,7 @@ INFO("Checking static weapons"); private _staticWeaponConfigs = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(configName _x) isKindOf 'StaticWeapon'}", true]; private _staticPublic = _staticWeaponConfigs select {(getNumber (_x >> "scope")) == 2}; -INFO_2("Static Weapons [%1] - CSW Enabled [%2]",count _staticPublic, {(getNumber (_x >> "ace_csw" >> "enabled")) == 1} count _staticPublic); +INFO_2("Static Weapons [%1] - CSW Enabled [%2]",count _staticPublic,{(getNumber (_x >> "ace_csw" >> "enabled")) == 1} count _staticPublic); INFO("------ Checking static weapons inheritance ------"); private _explicitBases = []; diff --git a/addons/csw/functions/fnc_reload_handleAddTurretMag.sqf b/addons/csw/functions/fnc_reload_handleAddTurretMag.sqf index 9a2eae2bd4..74cd9f73b5 100644 --- a/addons/csw/functions/fnc_reload_handleAddTurretMag.sqf +++ b/addons/csw/functions/fnc_reload_handleAddTurretMag.sqf @@ -24,7 +24,7 @@ params ["_vehicle", "_turret", "_magSource", "_carryMag", "_ammoReceived", ["_returnTo", _magSource]]; TRACE_6("reload_handleAddTurretMag",_vehicle,_turret,_magSource,_carryMag,_ammoReceived,_returnTo); -TRACE_2("",local _vehicle, _vehicle turretLocal _turret); +TRACE_2("",local _vehicle,_vehicle turretLocal _turret); if (!(_vehicle turretLocal _turret)) exitWith {}; ([_vehicle, _turret, _carryMag] call FUNC(reload_canLoadMagazine)) params ["_canAdd", "_loadedMag", "_neededAmmo", "_isBeltLinking"]; @@ -43,10 +43,10 @@ if (_canAdd) then { // setMagazineTurretAmmo is broken on split locality, use setAmmo for now (this may not work for multi turret vehicles) private _weapon = (_vehicle weaponsTurret _turret) param [0, ""]; - TRACE_3("setAmmo",_vehicle,_weapon, _currentAmmo); + TRACE_3("setAmmo",_vehicle,_weapon,_currentAmmo); _vehicle setAmmo [_weapon, _currentAmmo]; private _currentAmmo = _vehicle magazineTurretAmmo [_loadedMag, _turret]; - if ((_weapon == "") || {_currentAmmo != _currentAmmo}) then { ERROR_1("failed to setAmmo - %1", _this); }; + if ((_weapon == "") || {_currentAmmo != _currentAmmo}) then { ERROR_1("failed to setAmmo - %1",_this); }; } else { if (_loadedMag != "") then { TRACE_1("Removing emtpy mag",_loadedMag); diff --git a/addons/csw/functions/fnc_reload_handleRemoveTurretMag.sqf b/addons/csw/functions/fnc_reload_handleRemoveTurretMag.sqf index d53d35a0d8..d718811d55 100644 --- a/addons/csw/functions/fnc_reload_handleRemoveTurretMag.sqf +++ b/addons/csw/functions/fnc_reload_handleRemoveTurretMag.sqf @@ -23,7 +23,7 @@ params ["_vehicle", "_turretPath", "_carryMag", "_vehMag", "_unloadTo"]; TRACE_5("removeTurretMag EH",_vehicle,_turretPath,_carryMag,_vehMag,_unloadTo); -TRACE_3("",local _vehicle, _vehicle turretLocal _turretPath,local _unloadTo); +TRACE_3("",local _vehicle,_vehicle turretLocal _turretPath,local _unloadTo); if (!(_vehicle turretLocal _turretPath)) exitWith {}; private _magsInWeapon = []; // Check how much ammo it has now: @@ -55,10 +55,10 @@ if ((_magsInWeapon isEqualTo []) && {_ammoInFirstMag > _ammoRemoved}) then { // setMagazineTurretAmmo is broken on split locality, use setAmmo for now private _weapon = (_vehicle weaponsTurret _turretPath) param [0, ""]; - TRACE_3("setAmmo",_vehicle,_weapon, _ammoLeft); + TRACE_3("setAmmo",_vehicle,_weapon,_ammoLeft); _vehicle setAmmo [_weapon, _ammoLeft]; private _currentAmmo = _vehicle magazineTurretAmmo [_vehMag, _turretPath]; - if ((_weapon == "") || {_currentAmmo != _ammoLeft}) then { ERROR_1("failed to setAmmo - %1", _this); }; + if ((_weapon == "") || {_currentAmmo != _ammoLeft}) then { ERROR_1("failed to setAmmo - %1",_this); }; } else { diff --git a/addons/csw/functions/fnc_reload_loadMagazine.sqf b/addons/csw/functions/fnc_reload_loadMagazine.sqf index 42508daf1d..9526b5adb8 100644 --- a/addons/csw/functions/fnc_reload_loadMagazine.sqf +++ b/addons/csw/functions/fnc_reload_loadMagazine.sqf @@ -51,7 +51,7 @@ private _onFinish = { [_magSource, _carryMag, _bestAmmoToSend] call EFUNC(common,removeSpecificMagazine); if (_bestAmmoToSend == 0) exitWith {}; - TRACE_6("calling addTurretMag event",_vehicle,_turret,_magSource,_carryMag,_bestAmmoToSend, _unit); + TRACE_6("calling addTurretMag event",_vehicle,_turret,_magSource,_carryMag,_bestAmmoToSend,_unit); [QGVAR(addTurretMag), [_vehicle, _turret, _magSource, _carryMag, _bestAmmoToSend, _unit]] call CBA_fnc_globalEvent; }; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index bee84c5b0f..40b3bb6959 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -50,7 +50,7 @@ if (isServer) then { ["ace_unconscious", { params ["_unit", "_isUnconscious"]; if (!_isUnconscious) exitWith {}; - TRACE_1("Knocked Out, Doing Deadman", _unit); + TRACE_1("Knocked Out, Doing Deadman",_unit); [_unit] call FUNC(onIncapacitated); }] call CBA_fnc_addEventHandler; }; diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 423e8932c3..918bbb0c33 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -161,7 +161,7 @@ GVAR(TweakedAngle) = 0; private _placeAngle = 0; private _expSetupVehicle = _setupObjectClass createVehicle (_virtualPosASL call EFUNC(common,ASLToPosition)); - TRACE_1("Planting Mass", (getMass _expSetupVehicle)); + TRACE_1("Planting Mass",(getMass _expSetupVehicle)); //If the object is too heavy, it can kill a player if it colides if ((getMass _expSetupVehicle) > 5) then {_expSetupVehicle setMass 5;}; diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index dedef1c74e..52edd6417f 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); private _FCSMagazines = _vehicle getVariable [format ["%1_%2", QGVAR(Magazines), _turret], []]; @@ -50,7 +50,7 @@ if (_zeroDistance > 0) then { private _antiOffset = _gunner getVariable QGVAR(lastAntiOffset); _offset = _offset - _antiOffset; - TRACE_4("fired",_gunner, currentZeroing _gunner, _antiOffset, _offset); + TRACE_4("fired",_gunner,currentZeroing _gunner,_antiOffset,_offset); }; [_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, 0] call EFUNC(common,changeProjectileDirection); diff --git a/addons/finger/XEH_postInit.sqf b/addons/finger/XEH_postInit.sqf index caa2ab54e8..641c94ff92 100644 --- a/addons/finger/XEH_postInit.sqf +++ b/addons/finger/XEH_postInit.sqf @@ -4,7 +4,7 @@ if (!hasInterface) exitWith {}; ["CBA_settingsInitialized", { //If not enabled, dont't bother adding eventhandler - TRACE_1("CBA_settingsInitialized eh", GVAR(enabled)); + TRACE_1("CBA_settingsInitialized eh",GVAR(enabled)); if (!GVAR(enabled)) exitWith {}; GVAR(lastFPTime) = -1; diff --git a/addons/finger/functions/fnc_incomingFinger.sqf b/addons/finger/functions/fnc_incomingFinger.sqf index fb65d8eac9..4509a270db 100644 --- a/addons/finger/functions/fnc_incomingFinger.sqf +++ b/addons/finger/functions/fnc_incomingFinger.sqf @@ -25,12 +25,12 @@ private _fingerPos = if (_sourceUnit == ACE_player) then { _fingerPosPrecise vectorAdd ([random (2 * FP_RANDOMIZATION_X) - FP_RANDOMIZATION_X, random (2 * FP_RANDOMIZATION_X) - FP_RANDOMIZATION_X, random (2 * FP_RANDOMIZATION_Y) - FP_RANDOMIZATION_Y] vectorMultiply _distance) }; -TRACE_3("incoming finger:", _sourceUnit, _fingerPosPrecise, _fingerPos); +TRACE_3("incoming finger:",_sourceUnit,_fingerPosPrecise,_fingerPos); private _data = [diag_tickTime, _fingerPos, ([_sourceUnit, false, true] call EFUNC(common,getName)), _sourceUnit]; GVAR(fingersHash) set [hashValue _sourceUnit, _data]; if (GVAR(pfeh_id) == -1) then { GVAR(pfeh_id) = [DFUNC(perFrameEH), 0, []] call CBA_fnc_addPerFrameHandler; - TRACE_1("Started PFEH", GVAR(pfeh_id)); + TRACE_1("Started PFEH",GVAR(pfeh_id)); }; diff --git a/addons/finger/functions/fnc_perFrameEH.sqf b/addons/finger/functions/fnc_perFrameEH.sqf index e499ff8808..4af4f6b643 100644 --- a/addons/finger/functions/fnc_perFrameEH.sqf +++ b/addons/finger/functions/fnc_perFrameEH.sqf @@ -44,7 +44,7 @@ private _iconBaseSize = GVAR(sizeCoef) * BASE_SIZE * 0.10713 * (call EFUNC(commo } forEach GVAR(fingersHash); if (GVAR(fingersHash) isEqualTo createHashMap) then { - TRACE_1("Ending PFEH", GVAR(pfeh_id)); + TRACE_1("Ending PFEH",GVAR(pfeh_id)); [GVAR(pfeh_id)] call CBA_fnc_removePerFrameHandler; GVAR(pfeh_id) = -1; }; diff --git a/addons/fire/XEH_postInit.sqf b/addons/fire/XEH_postInit.sqf index 125cb59140..382c06293b 100644 --- a/addons/fire/XEH_postInit.sqf +++ b/addons/fire/XEH_postInit.sqf @@ -10,7 +10,7 @@ }] call CBA_fnc_addEventHandler; ["ace_settingsInitialized", { - TRACE_1("settingsInit", GVAR(enabled)); + TRACE_1("settingsInit",GVAR(enabled)); if (!GVAR(enabled)) exitWith {}; if (isServer) then { diff --git a/addons/fire/functions/fnc_burn.sqf b/addons/fire/functions/fnc_burn.sqf index 08d52bd05c..a98aea9bc8 100644 --- a/addons/fire/functions/fnc_burn.sqf +++ b/addons/fire/functions/fnc_burn.sqf @@ -189,7 +189,7 @@ if (_isBurning) exitWith {}; if ((_unit isEqualTo vehicle _unit) && (_sdr || ({ 0.05 > random 1 }))) then { _unit setVariable [QGVAR(stopDropRoll), true]; if !(_sdr) then { - TRACE_1("stop, drop, roll!", _unit); + TRACE_1("stop,drop,roll!",_unit); _unit setUnitPos "DOWN"; doStop _unit; }; @@ -203,7 +203,7 @@ if (_isBurning) exitWith {}; private _vehicle = vehicle _unit; if (_vehicle != _unit) then { - TRACE_1("Ejecting", _unit); + TRACE_1("Ejecting",_unit); _unit leaveVehicle _vehicle; unassignVehicle _unit; _unit action ["eject",_vehicle]; diff --git a/addons/frag/functions/fnc_addPfhRound.sqf b/addons/frag/functions/fnc_addPfhRound.sqf index 7c2b5d1681..358a9ee71e 100644 --- a/addons/frag/functions/fnc_addPfhRound.sqf +++ b/addons/frag/functions/fnc_addPfhRound.sqf @@ -67,7 +67,7 @@ if (alive _round) then { getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force)), getNumber (configFile >> "CfgAmmo" >> _type >> "indirecthit") * (sqrt (getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"))) ]; - TRACE_1("Initializing track", _round); + TRACE_1("Initializing track",_round); GVAR(objects) pushBack _round; GVAR(arguments) pushBack _args; diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 355da901c6..7ea4212d9a 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -17,7 +17,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); private _shouldAdd = GVAR(cacheRoundsTypesToTrack) getVariable _ammo; if (isNil "_shouldAdd") then { diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index f2700654c3..87fabc4fc5 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -144,7 +144,7 @@ if (_objects isNotEqualTo []) then { private _vel = _vec vectorMultiply _fp; private _fragObj = (selectRandom _fragTypes) createVehicleLocal [0,0,10000]; - // TRACE_4("targeted",_fp, typeOf _fragObj,_lastPos vectorDistance _targetPos,typeOf _x); + // TRACE_4("targeted",_fp,typeOf _fragObj,_lastPos vectorDistance _targetPos,typeOf _x); _fragObj setPosASL _lastPos; _fragObj setVectorDir _vec; _fragObj setVelocity _vel; diff --git a/addons/frag/functions/fnc_masterPFH.sqf b/addons/frag/functions/fnc_masterPFH.sqf index 6e75e80951..ef0fbc3eda 100644 --- a/addons/frag/functions/fnc_masterPFH.sqf +++ b/addons/frag/functions/fnc_masterPFH.sqf @@ -45,7 +45,7 @@ while {_objectCount > 0 && {_iter < (GVAR(maxTrackPerFrame) min _objectCount)}} // Clean up dead object references private _deletionCount = 0; { - TRACE_1("GC Projectile", _x); + TRACE_1("GC Projectile",_x); private _deleteIndex = _x - _deletionCount; GVAR(objects) deleteAt _deleteIndex; GVAR(arguments) deleteAt _deleteIndex; diff --git a/addons/goggles/functions/fnc_handleFired.sqf b/addons/goggles/functions/fnc_handleFired.sqf index ea3455dcee..0c711169ef 100644 --- a/addons/goggles/functions/fnc_handleFired.sqf +++ b/addons/goggles/functions/fnc_handleFired.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); // no dust in rain if (rain > 0.1) exitWith {true}; diff --git a/addons/grenades/functions/fnc_throwGrenade.sqf b/addons/grenades/functions/fnc_throwGrenade.sqf index 4105e861f6..9a0168da3e 100644 --- a/addons/grenades/functions/fnc_throwGrenade.sqf +++ b/addons/grenades/functions/fnc_throwGrenade.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); if (_weapon != "Throw") exitWith {}; diff --git a/addons/headless/functions/fnc_transferGroups.sqf b/addons/headless/functions/fnc_transferGroups.sqf index cee85a5109..37580c4fff 100644 --- a/addons/headless/functions/fnc_transferGroups.sqf +++ b/addons/headless/functions/fnc_transferGroups.sqf @@ -132,7 +132,7 @@ private _numTransferredHC3 = 0; }; }; default { - TRACE_1("No Valid HC to transfer to", _currentHC); + TRACE_1("No Valid HC to transfer to",_currentHC); }; }; }; @@ -140,7 +140,7 @@ private _numTransferredHC3 = 0; if (XGVAR(log)) then { private _numTransferredTotal = _numTransferredHC1 + _numTransferredHC2 + _numTransferredHC3; - INFO_4("Groups Transferred: Total: %1 - HC1: %2 - HC2: %3 - HC3: %4", _numTransferredTotal, _numTransferredHC1, _numTransferredHC2, _numTransferredHC3); + INFO_4("Groups Transferred: Total: %1 - HC1: %2 - HC2: %3 - HC3: %4",_numTransferredTotal,_numTransferredHC1,_numTransferredHC2,_numTransferredHC3); }; // Allow rebalance flag diff --git a/addons/hellfire/functions/fnc_attackProfile.sqf b/addons/hellfire/functions/fnc_attackProfile.sqf index 28dda99086..26bc3f1ff0 100644 --- a/addons/hellfire/functions/fnc_attackProfile.sqf +++ b/addons/hellfire/functions/fnc_attackProfile.sqf @@ -93,5 +93,5 @@ if (_attackStage >= 3 && { _seekerType isEqualTo "ARH" }) then { }; }; -// TRACE_1("Adjusted target position", _returnTargetPos); +// TRACE_1("Adjusted target position",_returnTargetPos); _returnTargetPos; diff --git a/addons/interact_menu/functions/fnc_addActionToZeus.sqf b/addons/interact_menu/functions/fnc_addActionToZeus.sqf index b4dbb69f4a..3175bf14ad 100644 --- a/addons/interact_menu/functions/fnc_addActionToZeus.sqf +++ b/addons/interact_menu/functions/fnc_addActionToZeus.sqf @@ -19,7 +19,7 @@ if (!hasInterface) exitWith { [] }; if (!params [["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith {ERROR("Bad Params"); []}; -if ((_parentPath param [0, ""]) != "ACE_ZeusActions") exitWith {ERROR_1("Bad path %1 - should have ACE_ZeusActions as base", _parentPath); []}; +if ((_parentPath param [0, ""]) != "ACE_ZeusActions") exitWith {ERROR_1("Bad path %1 - should have ACE_ZeusActions as base",_parentPath); []}; TRACE_2("addActionToZeus",_parentPath,_action); private _currentPath = GVAR(ZeusActions); @@ -37,7 +37,7 @@ private _pathValid = false; } forEach _currentPath; } forEach _parentPath; -if (!_pathValid) exitWith {ERROR_1("Bad path %1", _parentPath); []}; +if (!_pathValid) exitWith {ERROR_1("Bad path %1",_parentPath); []}; TRACE_1("Adding Action",_currentPath); _currentPath pushBack [_action, []]; diff --git a/addons/interact_menu/functions/fnc_addMainAction.sqf b/addons/interact_menu/functions/fnc_addMainAction.sqf index 86b37bf416..83349c21b3 100644 --- a/addons/interact_menu/functions/fnc_addMainAction.sqf +++ b/addons/interact_menu/functions/fnc_addMainAction.sqf @@ -27,7 +27,7 @@ if (isNil "_actionTrees") then { private _parentNode = [_actionTrees, ["ACE_MainActions"]] call FUNC(findActionNode); if (isNil {_parentNode}) then { - TRACE_2("No Main Action on object", _objectType, _typeNum); + TRACE_2("No Main Action on object",_objectType,_typeNum); private _mainAction = ["ACE_MainActions", localize ELSTRING(interaction,MainAction), "", {}, {true}] call FUNC(createAction); [_objectType, _typeNum, [], _mainAction] call EFUNC(interact_menu,addActionToClass); }; diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 35b0ea7177..5290d8f284 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -45,7 +45,7 @@ private _recurseFnc = { private _displayName = getText (_entryCfg >> "displayName"); private _distance = _parentDistance; if (isNumber (_entryCfg >> "distance")) then {_distance = getNumber (_entryCfg >> "distance");}; - // if (_distance < _parentDistance) then {WARNING_3("[%1] distance %2 less than parent %3", configName _entryCfg, _distance, _parentDistance);}; + // if (_distance < _parentDistance) then {WARNING_3("[%1] distance %2 less than parent %3",configName _entryCfg,_distance,_parentDistance);}; private _icon = if (isArray (_entryCfg >> "icon")) then { getArray (_entryCfg >> "icon"); } else { @@ -74,7 +74,7 @@ private _recurseFnc = { if (_condition isEqualTo "") then {_condition = "true"}; } else { // Add canInteract (including exceptions) and canInteractWith to condition - private _canInteractCondition = format [QUOTE([ARR_3(ACE_player,_target,%1)] call EFUNC(common,canInteractWith)), getArray (_entryCfg >> "exceptions")]; + private _canInteractCondition = format [QUOTE([ARR_3(ACE_player,_target,%1)] call EFUNC(common,canInteractWith)),getArray (_entryCfg >> "exceptions")]; private _conditionFormatPattern = ["%1 && {%2}", "%2"] select (_condition isEqualTo "" || {_condition == "true"}); _condition = format [_conditionFormatPattern, _condition, _canInteractCondition]; }; diff --git a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf index 55aa0f4f82..6772b61c54 100644 --- a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf +++ b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf @@ -35,7 +35,7 @@ if (isNil {_parentNode}) exitWith {}; private _found = false; { if (((_x select 0) select 0) == _actionName) exitWith { - TRACE_2("Deleting Action", _forEachIndex, _x); + TRACE_2("Deleting Action",_forEachIndex,_x); _found = true; (_parentNode select 1) deleteAt _forEachIndex; }; diff --git a/addons/javelin/functions/fnc_mapHelperDraw.sqf b/addons/javelin/functions/fnc_mapHelperDraw.sqf index 2794d46f58..4f7ac84b4a 100644 --- a/addons/javelin/functions/fnc_mapHelperDraw.sqf +++ b/addons/javelin/functions/fnc_mapHelperDraw.sqf @@ -18,7 +18,7 @@ */ if (isNil QGVAR(arguments)) then { - TRACE_1("Starting optic draw", _this); + TRACE_1("Starting optic draw",_this); // reset shooter var: private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index e6809a8e04..aacc4f5fa1 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -146,13 +146,13 @@ if (isNull _newTarget) then { _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); } else { if ((!isNull _newTarget) && {_currentTarget != _newTarget}) then { - TRACE_1("New Target, reseting locking", _newTarget); + TRACE_1("New Target, reseting locking",_newTarget); _lockStartTime = CBA_missionTime; _currentTarget = _newTarget; }; if ((CBA_missionTime - _lockStartTime) > __LOCKONTIME) then { // Lock on after 3 seconds - TRACE_2("LOCKED!", _currentTarget, _lockStartTime); + TRACE_2("LOCKED!",_currentTarget,_lockStartTime); __JavelinIGUISeek ctrlSetTextColor __ColorGreen; __JavelinIGUITargetingLines ctrlShow true; diff --git a/addons/laser/functions/fnc_handleLaserTargetCreation.sqf b/addons/laser/functions/fnc_handleLaserTargetCreation.sqf index b8cedf22c3..bd42a3e5a5 100644 --- a/addons/laser/functions/fnc_handleLaserTargetCreation.sqf +++ b/addons/laser/functions/fnc_handleLaserTargetCreation.sqf @@ -24,13 +24,13 @@ TRACE_1("params",_this); private _owners = allUnits select {(lasertarget _x) == _targetObject}; if (count _owners == 1) exitWith { - TRACE_2("Laser target owner [allUnits]", _targetObject, _owners select 0); + TRACE_2("Laser target owner [allUnits]",_targetObject,_owners select 0); [_targetObject, _owners select 0] call FUNC(addLaserTarget); }; _owners = vehicles select {(lasertarget _x) == _targetObject}; if (count _owners == 1) exitWith { - TRACE_2("Laser target owner [vehicles]", _targetObject, _owners select 0); + TRACE_2("Laser target owner [vehicles]",_targetObject,_owners select 0); [_targetObject, _owners select 0] call FUNC(addLaserTarget); }; @@ -58,7 +58,7 @@ TRACE_1("params",_this); }; }; if (!_foundSource) then { - WARNING_1("Laser target doesn't have owner", _targetObject); + WARNING_1("Laser target doesn't have owner",_targetObject); }; }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index 5c5f51931b..0b19b4d1c3 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -26,7 +26,7 @@ GVAR(trackedLaserTargets) = GVAR(trackedLaserTargets) select { // Turn off the laser in ace_laser [_laserUuid] call FUNC(laserOff); - TRACE_1("Laser off:", _laserUuid); + TRACE_1("Laser off:",_laserUuid); false } else { private _newCode = _owner getVariable [QEGVAR(laser,code), ACE_DEFAULT_LASER_CODE]; diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index 9d3e2d6fa1..d1e4626d53 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -101,7 +101,7 @@ private _finalOwner = objNull; }; } forEach (values GVAR(laserEmitters)); // Go through all values in hash -TRACE_2("",count _spots, _spots); +TRACE_2("",count _spots,_spots); if ((count _spots) > 0) then { private _bucketList = nil; diff --git a/addons/laser/functions/fnc_shootRay.sqf b/addons/laser/functions/fnc_shootRay.sqf index 434560eea7..862e972dd1 100644 --- a/addons/laser/functions/fnc_shootRay.sqf +++ b/addons/laser/functions/fnc_shootRay.sqf @@ -21,7 +21,7 @@ BEGIN_COUNTER(shootRay); params ["_posASL", "_dir", ["_ignoreVehicle1", objNull], ["_ignoreVehicle2", objNull]]; -// TRACE_2("ray origin:", _posASL, _dir); +// TRACE_2("ray origin:",_posASL,_dir); private _distance = 0; private _resultPos = nil; @@ -43,7 +43,7 @@ if (_intersects isNotEqualTo []) then { _resultPos = _posASL vectorAdd (_dir vectorMultiply _distance); }; -TRACE_3("", _resultPos, _distance, _intersects); +TRACE_3("",_resultPos,_distance,_intersects); #ifdef DRAW_LASER_INFO if (!isNil "_resultPos") then { diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 56b2b560f4..49b8239e0a 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -19,9 +19,9 @@ GVAR(flashlights) = [] call CBA_fnc_createNamespace; setCurrentChannel GVAR(DefaultChannel); if (currentChannel == GVAR(DefaultChannel)) then { - // INFO_1("Channel Set - %1", currentChannel); + // INFO_1("Channel Set - %1",currentChannel); } else { - ERROR_2("Failed To Set Channel %1 (is %2)", GVAR(DefaultChannel), currentChannel); + ERROR_2("Failed To Set Channel %1 (is %2)",GVAR(DefaultChannel),currentChannel); }; }, 0, []] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/map/functions/fnc_blueForceTrackingModule.sqf b/addons/map/functions/fnc_blueForceTrackingModule.sqf index f7436e7bf9..af95ce3d6d 100644 --- a/addons/map/functions/fnc_blueForceTrackingModule.sqf +++ b/addons/map/functions/fnc_blueForceTrackingModule.sqf @@ -22,4 +22,4 @@ params ["_logic"]; [_logic, QGVAR(BFT_HideAiGroups), "HideAiGroups"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_ShowPlayerNames), "ShowPlayerNames"] call EFUNC(common,readSettingFromModule); -INFO_3("Blue Force Tracking Module Initialized:", GVAR(BFT_Enabled), GVAR(BFT_Interval), GVAR(BFT_HideAiGroups)); +INFO_3("Blue Force Tracking Module Initialized:",GVAR(BFT_Enabled),GVAR(BFT_Interval),GVAR(BFT_HideAiGroups)); diff --git a/addons/marker_flags/functions/fnc_placeFlag.sqf b/addons/marker_flags/functions/fnc_placeFlag.sqf index 74dc615588..5dd2abb376 100644 --- a/addons/marker_flags/functions/fnc_placeFlag.sqf +++ b/addons/marker_flags/functions/fnc_placeFlag.sqf @@ -18,13 +18,13 @@ */ params [["_player", objNull, [objNull]], ["_item", QGVAR(white), [""]]]; -TRACE_2("Placing flag", _player, _item); +TRACE_2("Placing flag",_player,_item); (GVAR(flagCache) get _item) params ["_vehicleClass"]; private _flag = _vehicleClass createVehicle [0, 0, 0]; -TRACE_1("Created flag", _flag); +TRACE_1("Created flag",_flag); // Set flag start height GVAR(objectHeight) = MAX_HEIGHT; diff --git a/addons/markers/XEH_postInit.sqf b/addons/markers/XEH_postInit.sqf index 25e8317b75..43a1acbf29 100644 --- a/addons/markers/XEH_postInit.sqf +++ b/addons/markers/XEH_postInit.sqf @@ -32,7 +32,7 @@ GVAR(userPlacedMarkers) = []; if (_index < 0) exitWith { if (!isMultiplayer) exitWith {}; - WARNING_1("Could not find data for %1", _marker); + WARNING_1("Could not find data for %1",_marker); }; private _data = GVAR(allMapMarkersProperties) select _index; diff --git a/addons/medical/functions/fnc_addDamageToUnit.sqf b/addons/medical/functions/fnc_addDamageToUnit.sqf index 23ac9f0990..3d82cbe77a 100644 --- a/addons/medical/functions/fnc_addDamageToUnit.sqf +++ b/addons/medical/functions/fnc_addDamageToUnit.sqf @@ -37,12 +37,12 @@ TRACE_7("addDamageToUnit",_unit,_damageToAdd,_bodyPart,_typeOfDamage,_instigator _bodyPart = toLower _bodyPart; private _bodyPartIndex = ALL_BODY_PARTS find _bodyPart; if (_bodyPartIndex < 0) then { _bodyPartIndex = ALL_SELECTIONS find _bodyPart; }; // 2nd attempt with selection names ("hand_l", "hand_r", "leg_l", "leg_r") -if (_bodyPartIndex < 0) exitWith {ERROR_1("addDamageToUnit - bad selection %1", _this); false}; -if (isNull _unit || {!local _unit} || {!alive _unit}) exitWith {ERROR_2("addDamageToUnit - badUnit %1 [local %2]", _this, local _unit); false}; -if (_damageToAdd < 0) exitWith {ERROR_1("addDamageToUnit - bad damage %1", _this); false}; +if (_bodyPartIndex < 0) exitWith {ERROR_1("addDamageToUnit - bad selection %1",_this); false}; +if (isNull _unit || {!local _unit} || {!alive _unit}) exitWith {ERROR_2("addDamageToUnit - badUnit %1 [local %2]",_this,local _unit); false}; +if (_damageToAdd < 0) exitWith {ERROR_1("addDamageToUnit - bad damage %1",_this); false}; if (!_overrideInvuln && {!((isDamageAllowed _unit) && {_unit getVariable [QEGVAR(medical,allowDamage), true]})}) exitWith { - ERROR_1("addDamageToUnit - unit invulnerable %1", _this); false + ERROR_1("addDamageToUnit - unit invulnerable %1",_this); false }; // Extension is case sensitive and expects this format (different from ALL_BODY_PARTS) @@ -69,7 +69,7 @@ private _selectionSpecific = true; if (isClass _config) then { _selectionSpecific = (getNumber (_config >> "selectionSpecific")) == 1; } else { - WARNING_2("Damage type not in config [%1:%2]", _typeOfDamage, _config); + WARNING_2("Damage type not in config [%1:%2]",_typeOfDamage,_config); }; INFO_4("Debug AddDamageToUnit: Type [%1] - Selection Specific [%2] - HitPoint [%3 -> %4]",_typeOfDamage,_selectionSpecific,_startDmg select _bodyPartIndex,_endDmg select _bodyPartIndex); INFO_4("Pain Change [%1 -> %2] - BodyPartDamage Change [%3 -> %4]",_startPain,_endPain,_startDmg,_endDmg); diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index cf078ae64b..a1de71c36b 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -38,7 +38,7 @@ if (!local _unit) exitWith { }; if (_knockOut isEqualTo IS_UNCONSCIOUS(_unit)) exitWith { - WARNING_2("setUnconscious called with no change [Unit %1] [State [%2]", _unit, _knockOut); + WARNING_2("setUnconscious called with no change [Unit %1] [State [%2]",_unit,_knockOut); false }; diff --git a/addons/medical_ai/XEH_postInit.sqf b/addons/medical_ai/XEH_postInit.sqf index c53cb78934..0b225c7f0b 100644 --- a/addons/medical_ai/XEH_postInit.sqf +++ b/addons/medical_ai/XEH_postInit.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" ["CBA_settingsInitialized", { - TRACE_1("settingsInitialized", GVAR(enabledFor)); + TRACE_1("settingsInitialized",GVAR(enabledFor)); if (GVAR(enabledFor) == 0) exitWith {}; // 0: disabled if ((GVAR(enabledFor) == 1) && {!isServer} && {hasInterface}) exitWith {}; // 1: Don't Run on non-hc Clients diff --git a/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf b/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf index f2441b3704..4dfcbe840a 100644 --- a/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf +++ b/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf @@ -38,7 +38,7 @@ private _classID = 0; private _details = [_selections, _bleeding, _pain, _causeLimping, _causeFracture]; GVAR(woundDetails) set [_className, _details]; GVAR(woundDetails) set [_classID, _details]; - + GVAR(woundClassNames) pushBack _className; { GVAR(woundClassNamesComplex) set [10 * _classID + _forEachIndex, format ["%1%2", _className, _x]]; @@ -61,7 +61,7 @@ if (isClass (_damageTypesConfig >> "woundHandlers")) then { _defaultWoundHandlers = [_damageTypesConfig >> "woundHandlers"] call FUNC(parseWoundHandlersCfg); reverse _defaultWoundHandlers; }; -TRACE_1("Found default wound handlers", count _defaultWoundHandlers); +TRACE_1("Found default wound handlers",count _defaultWoundHandlers); // Collect all available damage types from the config { @@ -77,15 +77,15 @@ TRACE_1("Found default wound handlers", count _defaultWoundHandlers); private _thresholds = GET_ARRAY(_damageTypeSubClassConfig >> "thresholds",_thresholdsDefault); private _selectionSpecific = GET_NUMBER(_damageTypeSubClassConfig >> "selectionSpecific",_selectionSpecificDefault); - + private _woundHandlers = []; if (isClass (_damageTypeSubClassConfig >> "woundHandlers")) then { _woundHandlers = [_damageTypeSubClassConfig >> "woundHandlers"] call FUNC(parseWoundHandlersCfg); reverse _woundHandlers; - TRACE_2("Damage type found wound handlers", _className, count _woundHandlers); + TRACE_2("Damage type found wound handlers",_className,count _woundHandlers); } else { _woundHandlers = _defaultWoundHandlers; - TRACE_1("Damage type has no wound handlers, using default", _className); + TRACE_1("Damage type has no wound handlers, using default",_className); }; /* @@ -115,11 +115,11 @@ TRACE_1("Found default wound handlers", count _defaultWoundHandlers); if (_woundType == "woundHandlers") then {continue}; if (_woundType in GVAR(woundDetails)) then { private _weighting = GET_ARRAY(_x >> "weighting",[[ARR_2(0,1)]]); - private _dmgMulti = GET_NUMBER(_x >> "damageMultiplier", 1); - private _bleedMulti = GET_NUMBER(_x >> "bleedingMultiplier", 1); - private _sizeMulti = GET_NUMBER(_x >> "sizeMultiplier", 1); - private _painMulti = GET_NUMBER(_x >> "painMultiplier", 1); - private _fractureMulti = GET_NUMBER(_x >> "fractureMultiplier", 1); + private _dmgMulti = GET_NUMBER(_x >> "damageMultiplier",1); + private _bleedMulti = GET_NUMBER(_x >> "bleedingMultiplier",1); + private _sizeMulti = GET_NUMBER(_x >> "sizeMultiplier",1); + private _painMulti = GET_NUMBER(_x >> "painMultiplier",1); + private _fractureMulti = GET_NUMBER(_x >> "fractureMultiplier",1); _damageWoundDetails pushBack [_woundType, _weighting, _dmgMulti, _bleedMulti, _sizeMulti, _painMulti, _fractureMulti]; } else { WARNING_2("Damage type %1 refers to wound %2, but it doesn't exist: skipping.",_className,configName _x); diff --git a/addons/medical_damage/functions/fnc_woundReceived.sqf b/addons/medical_damage/functions/fnc_woundReceived.sqf index 52dbcba265..a7e3861dee 100644 --- a/addons/medical_damage/functions/fnc_woundReceived.sqf +++ b/addons/medical_damage/functions/fnc_woundReceived.sqf @@ -22,14 +22,13 @@ params ["_unit", "_allDamages", "_shooter", "_ammo"]; private _typeOfDamage = _ammo call FUNC(getTypeOfDamage); if (_typeOfDamage in GVAR(damageTypeDetails)) then { (GVAR(damageTypeDetails) get _typeOfDamage) params ["", "", "_woundHandlers"]; - + private _damageData = [_unit, _allDamages, _typeOfDamage]; { _damageData = _damageData call _x; - TRACE_1("Wound handler returned", _damageData); + TRACE_1("Wound handler returned",_damageData); if !(_damageData isEqualType [] && {(count _damageData) >= 3}) exitWith { - TRACE_1("Return invalid, terminating wound handling", _damageData); + TRACE_1("Return invalid, terminating wound handling",_damageData); }; } forEach _woundHandlers; - }; diff --git a/addons/medical_damage/functions/fnc_woundsHandlerVehiclecrash.sqf b/addons/medical_damage/functions/fnc_woundsHandlerVehiclecrash.sqf index 64ac637107..9aaaf4a382 100644 --- a/addons/medical_damage/functions/fnc_woundsHandlerVehiclecrash.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandlerVehiclecrash.sqf @@ -24,5 +24,5 @@ private _newDamages = _allDamages apply { [_x select 0, selectRandom ALL_BODY_PARTS, _x select 2]; }; -TRACE_1("Vehicle crash handled, passing damage", _newDamages); +TRACE_1("Vehicle crash handled, passing damage",_newDamages); [_unit, _newDamages, _typeOfDamage] //return diff --git a/addons/medical_damage/functions/fnc_woundsHandlerVehiclehit.sqf b/addons/medical_damage/functions/fnc_woundsHandlerVehiclehit.sqf index 5f4bd35941..8f9af8262c 100644 --- a/addons/medical_damage/functions/fnc_woundsHandlerVehiclehit.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandlerVehiclehit.sqf @@ -42,5 +42,5 @@ private _newDamages = []; _newDamages pushBack [_damageMap get _x, _x, _damageToApply]; } forEach (keys _damageMap); // micro-optimization again, two 'get's is still faster than iterating over a hashmap -TRACE_1("Vehicle explosion handled, passing damage", _newDamages); +TRACE_1("Vehicle explosion handled, passing damage",_newDamages); [_unit, _newDamages, _typeOfDamage] //return diff --git a/addons/medical_engine/XEH_postInit.sqf b/addons/medical_engine/XEH_postInit.sqf index 81de63775b..2514c62254 100644 --- a/addons/medical_engine/XEH_postInit.sqf +++ b/addons/medical_engine/XEH_postInit.sqf @@ -13,7 +13,7 @@ // Check if last hit point is our dummy. private _allHitPoints = getAllHitPointsDamage _unit param [0, []]; reverse _allHitPoints; - while {(_allHitPoints param [0, ""]) select [0,1] == "#"} do { WARNING_1("Ignoring Reflector hitpoint %1", _allHitPoints deleteAt 0); }; + while {(_allHitPoints param [0, ""]) select [0,1] == "#"} do { WARNING_1("Ignoring Reflector hitpoint %1",_allHitPoints deleteAt 0); }; if (_allHitPoints param [0, ""] != "ACE_HDBracket") then { if (unitIsUAV _unit) exitWith {TRACE_1("ignore UAV AI",typeOf _unit);}; @@ -32,7 +32,7 @@ #ifdef DEBUG_MODE_FULL [QEGVAR(medical,woundReceived), { params ["_unit", "_damages", "_shooter", "_ammo"]; - TRACE_4("wound",_unit,_damages, _shooter, _ammo); + TRACE_4("wound",_unit,_damages,_shooter,_ammo); //systemChat str _this; }] call CBA_fnc_addEventHandler; #endif diff --git a/addons/medical_engine/functions/fnc_handleDamage.sqf b/addons/medical_engine/functions/fnc_handleDamage.sqf index 755b8ad552..a60816222f 100644 --- a/addons/medical_engine/functions/fnc_handleDamage.sqf +++ b/addons/medical_engine/functions/fnc_handleDamage.sqf @@ -90,8 +90,8 @@ if ( {_ammo isNotEqualTo ""} && { private _ammoCfg = configFile >> "CfgAmmo" >> _ammo; - GET_NUMBER(_ammoCfg >> "explosive", 0) > 0 || - {GET_NUMBER(_ammoCfg >> "indirectHit", 0) > 0} + GET_NUMBER(_ammoCfg >> "explosive",0) > 0 || + {GET_NUMBER(_ammoCfg >> "indirectHit",0) > 0} } ) exitwith { TRACE_5("Vehicle hit",_unit,_shooter,_instigator,_damage,_newDamage); diff --git a/addons/medical_gui/functions/fnc_collectActions.sqf b/addons/medical_gui/functions/fnc_collectActions.sqf index f9392897f3..1620b2c5cb 100644 --- a/addons/medical_gui/functions/fnc_collectActions.sqf +++ b/addons/medical_gui/functions/fnc_collectActions.sqf @@ -22,8 +22,8 @@ GVAR(actions) = []; private _configName = configName _x; private _displayName = getText (_x >> "displayName"); private _category = getText (_x >> "category"); - private _condition = compile format [QUOTE([ARR_4(ACE_player, GVAR(target), %1 select GVAR(selectedBodyPart), '%2')] call DEFUNC(medical_treatment,canTreatCached)), ALL_BODY_PARTS, _configName]; - private _statement = compile format [QUOTE([ARR_4(ACE_player, GVAR(target), %1 select GVAR(selectedBodyPart), '%2')] call DEFUNC(medical_treatment,treatment)), ALL_BODY_PARTS, _configName]; + private _condition = compile format [QUOTE([ARR_4(ACE_player,GVAR(target),%1 select GVAR(selectedBodyPart),'%2')] call DEFUNC(medical_treatment,canTreatCached)), ALL_BODY_PARTS, _configName]; + private _statement = compile format [QUOTE([ARR_4(ACE_player,GVAR(target),%1 select GVAR(selectedBodyPart),'%2')] call DEFUNC(medical_treatment,treatment)), ALL_BODY_PARTS, _configName]; private _items = getArray (_x >> "items"); GVAR(actions) pushBack [_displayName, _category, _condition, _statement, _items]; diff --git a/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf b/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf index 69a6118099..b90198f0eb 100644 --- a/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf +++ b/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf @@ -36,7 +36,7 @@ if (isClass (_config >> _bandage)) then { _reopeningMinDelay = getNumber (_config >> "reopeningMinDelay"); _reopeningMaxDelay = getNumber (_config >> "reopeningMaxDelay") max _reopeningMinDelay; } else { - WARNING_2("No config for bandage [%1] config base [%2]", _bandage, _config); + WARNING_2("No config for bandage [%1] config base [%2]",_bandage,_config); }; if (isClass (_config >> _className)) then { @@ -54,7 +54,7 @@ if (isClass (_config >> _className)) then { _reopeningMaxDelay = getNumber (_woundTreatmentConfig >> "reopeningMaxDelay") max _reopeningMinDelay; }; } else { - WARNING_2("No config for wound type [%1] config base [%2]", _className, _config); + WARNING_2("No config for wound type [%1] config base [%2]",_className,_config); }; TRACE_5("configs",_bandage,_className,_reopeningChance,_reopeningMinDelay,_reopeningMaxDelay); diff --git a/addons/medical_treatment/functions/fnc_isInMedicalFacility.sqf b/addons/medical_treatment/functions/fnc_isInMedicalFacility.sqf index 2d4468d2c4..d04c1497bd 100644 --- a/addons/medical_treatment/functions/fnc_isInMedicalFacility.sqf +++ b/addons/medical_treatment/functions/fnc_isInMedicalFacility.sqf @@ -21,7 +21,7 @@ params ["_unit"]; private _fnc_check = { private _position = _unit modelToWorldVisual [0, 0, eyePos _unit select 2]; - CHECK_OBJECTS(lineIntersectsWith [ARR_3(_position, _position vectorAdd [ARR_3(0, 0, 10)], _unit)]) || {CHECK_OBJECTS(_unit nearObjects 7.5)} + CHECK_OBJECTS(lineIntersectsWith [ARR_3(_position,_position vectorAdd [ARR_3(0,0,10)],_unit)]) || {CHECK_OBJECTS(_unit nearObjects 7.5)} }; [[], _fnc_check, _unit, QGVAR(inMedicalFacilityCache), IN_MEDICAL_FACILITY_CACHE_EXPIRY] call EFUNC(common,cachedCall); diff --git a/addons/minedetector/functions/fnc_getDetectedObject.sqf b/addons/minedetector/functions/fnc_getDetectedObject.sqf index 6827e59c99..810e4d4ff4 100644 --- a/addons/minedetector/functions/fnc_getDetectedObject.sqf +++ b/addons/minedetector/functions/fnc_getDetectedObject.sqf @@ -49,7 +49,7 @@ private _distance = -1; if (_isDetectable && {!isNull _x}) exitWith { _distance = _detectorPointAGL distance _x; _mine = _x; - TRACE_3("return", _isDetectable, _mine, _distance); + TRACE_3("return",_isDetectable,_mine,_distance); }; } forEach _nearestObjects; diff --git a/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf b/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf index 6ddb60d21b..b690ab2075 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf @@ -39,7 +39,7 @@ private _distanceToTarget = _projectilePos vectorDistance _seekerTargetPos; private _distanceToShooter = _projectilePos vectorDistance _shooterPos; private _distanceShooterToTarget = _shooterPos vectorDistance _seekerTargetPos; -TRACE_2("", _distanceToTarget, _distanceToShooter); +TRACE_2("",_distanceToTarget,_distanceToShooter); // Add height depending on distance for compensate private _returnTargetPos = _seekerTargetPos; @@ -69,5 +69,5 @@ switch (_attackProfileStateParams select 0) do { }; }; -TRACE_1("Adjusted target position", _returnTargetPos); +TRACE_1("Adjusted target position",_returnTargetPos); _returnTargetPos; diff --git a/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf b/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf index d7092a924d..f1f360e403 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf @@ -39,7 +39,7 @@ private _distanceToTarget = _projectilePos vectorDistance _seekerTargetPos; private _distanceToShooter = _projectilePos vectorDistance _shooterPos; private _distanceShooterToTarget = _shooterPos vectorDistance _seekerTargetPos; -TRACE_2("", _distanceToTarget, _distanceToShooter); +TRACE_2("",_distanceToTarget,_distanceToShooter); // Add height depending on distance for compensate private _returnTargetPos = _seekerTargetPos; @@ -58,7 +58,7 @@ switch( (_attackProfileStateParams select 0) ) do { private _cruisAlt = 140; if (_distanceShooterToTarget < 1250) then { _cruisAlt = 140 * (_distanceShooterToTarget/1250); - TRACE_1("_cruisAlt", _cruisAlt); + TRACE_1("_cruisAlt",_cruisAlt); }; if ( ((ASLToAGL _projectilePos) select 2) - ((ASLToAGL _seekerTargetPos) select 2) >= _cruisAlt) then { if (_cruisAlt < 140) then { @@ -72,7 +72,7 @@ switch( (_attackProfileStateParams select 0) ) do { }; case STAGE_COAST: { TRACE_1("STAGE_COAST",""); - TRACE_1("", ((ASLToAGL _projectilePos) select 2) - (( ASLToAGL _seekerTargetPos) select 2) ); + TRACE_1("",((ASLToAGL _projectilePos) select 2) - (( ASLToAGL _seekerTargetPos) select 2)); if (_distanceToTarget < ( ((ASLToAGL _projectilePos) select 2) - (( ASLToAGL _seekerTargetPos) select 2) ) * 2) then { _attackProfileStateParams set [0, STAGE_TERMINAL]; } else { @@ -86,5 +86,5 @@ switch( (_attackProfileStateParams select 0) ) do { }; }; -TRACE_1("Adjusted target position", _returnTargetPos); +TRACE_1("Adjusted target position",_returnTargetPos); _returnTargetPos; diff --git a/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf b/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf index 23476ec46c..e346b16eb6 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf @@ -30,7 +30,7 @@ private _distanceToTarget = _projectilePos vectorDistance _seekerTargetPos; private _distanceToShooter = _projectilePos vectorDistance _shooterPos; private _distanceShooterToTarget = _shooterPos vectorDistance _seekerTargetPos; -TRACE_2("", _distanceToTarget, _distanceToShooter); +TRACE_2("",_distanceToTarget,_distanceToShooter); // Add height depending on distance for compensate private _addHeight = [0,0,0]; diff --git a/addons/missileguidance/functions/fnc_guidancePFH.sqf b/addons/missileguidance/functions/fnc_guidancePFH.sqf index 132af330c3..0620e9e3c0 100644 --- a/addons/missileguidance/functions/fnc_guidancePFH.sqf +++ b/addons/missileguidance/functions/fnc_guidancePFH.sqf @@ -37,7 +37,7 @@ private _adjustTime = 1; if (accTime > 0) then { _adjustTime = 1/accTime; _adjustTime = _adjustTime * (_runtimeDelta / TIMESTEP_FACTOR); - TRACE_4("Adjust timing", 1/accTime, _adjustTime, _runtimeDelta, (_runtimeDelta / TIMESTEP_FACTOR) ); + TRACE_4("Adjust timing",1/accTime,_adjustTime,_runtimeDelta,(_runtimeDelta / TIMESTEP_FACTOR)); } else { _adjustTime = 0; }; @@ -89,8 +89,8 @@ if ((_minDeflection != 0 || {_maxDeflection != 0}) && {_profileAdjustedTargetPos }; private _finalAdjustVector = [_yaw, _roll, _pitch]; - TRACE_3("", _pitch, _yaw, _roll); - TRACE_3("", _targetVector, _adjustVector, _finalAdjustVector); + TRACE_3("",_pitch,_yaw,_roll); + TRACE_3("",_targetVector,_adjustVector,_finalAdjustVector); if (accTime > 0) then { private _changeVector = (vectorDir _projectile) vectorAdd _finalAdjustVector; diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 1c964c5113..1f3519f8c9 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -71,14 +71,14 @@ if (isNil "_target") then { if (!isPlayer _shooter) then { // This was an AI shot, lets still guide it on the AI target _target = _shooter getVariable [QGVAR(vanilla_target), nil]; - TRACE_1("Detected AI Shooter!", _target); + TRACE_1("Detected AI Shooter!",_target); } else { private _canUseLock = getNumber (_config >> "canVanillaLock"); // @TODO: Get vanilla target if (_canUseLock > 0 || difficulty < 1) then { private _vanillaTarget = cursorTarget; - TRACE_1("Using Vanilla Locking", _vanillaTarget); + TRACE_1("Using Vanilla Locking",_vanillaTarget); if (!isNil "_vanillaTarget") then { _target = _vanillaTarget; }; diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 7fc30fb30b..bac01d05b4 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -34,12 +34,12 @@ private _losOkay = false; if (_angleOkay) then { _losOkay = [_projectile, _target] call FUNC(checkLos); }; -TRACE_2("", _angleOkay, _losOkay); +TRACE_2("",_angleOkay,_losOkay); // Can't see target, return [0,0,0] and let doSeekerSearch handle it if (!_angleOkay || !_losOkay) exitWith {[0,0,0]}; -TRACE_2("", _target, _foundTargetPos); +TRACE_2("",_target,_foundTargetPos); // @TODO: Configurable lead for seekers private _projectileSpeed = (vectorMagnitude velocity _projectile); private _distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos; diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index 4b74d0f7e3..a16c58ce5f 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -27,6 +27,6 @@ _laserParams params ["_code", "_wavelengthMin", "_wavelengthMax"]; private _laserResult = [(getPosASL _projectile), (velocity _projectile), _seekerAngle, _seekerMaxRange, [_wavelengthMin, _wavelengthMax], _code, _projectile] call EFUNC(laser,seekerFindLaserSpot); private _foundTargetPos = _laserResult select 0; -TRACE_1("Search", _laserResult); +TRACE_1("Search",_laserResult); _foundTargetPos; diff --git a/addons/mk6mortar/functions/fnc_csw_getProxyWeapon.sqf b/addons/mk6mortar/functions/fnc_csw_getProxyWeapon.sqf index 3356e91c11..663afa2cc7 100644 --- a/addons/mk6mortar/functions/fnc_csw_getProxyWeapon.sqf +++ b/addons/mk6mortar/functions/fnc_csw_getProxyWeapon.sqf @@ -55,7 +55,7 @@ if (_proxyWeaponNeeded || GVAR(useAmmoHandling)) then { }; }; } else { - WARNING_1("unknown mag %1", _xMag); + WARNING_1("unknown mag %1",_xMag); }; }; } forEach (magazinesAllTurrets _mortar); diff --git a/addons/modules/XEH_postInit.sqf b/addons/modules/XEH_postInit.sqf index bdc6a9cc40..c391916f19 100644 --- a/addons/modules/XEH_postInit.sqf +++ b/addons/modules/XEH_postInit.sqf @@ -26,7 +26,7 @@ _function = missionNamespace getVariable _function; }; if (_isSingular && {_logicType in _uniqueModulesHandled}) then { //ToDo: should this be an exit? - WARNING_1("Module [%1] - More than 1 singular module placed", _logicType); + WARNING_1("Module [%1] - More than 1 singular module placed",_logicType); }; if (_isSingular) then {_uniqueModulesHandled pushBack _logicType;}; diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index aa9c900390..428cf037d5 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -21,7 +21,7 @@ * Public: No */ -TRACE_1("drawName:", _this); +TRACE_1("drawName:",_this); params ["", "_target", "", "_heightOffset"]; diff --git a/addons/nightvision/functions/fnc_onFiredPlayer.sqf b/addons/nightvision/functions/fnc_onFiredPlayer.sqf index 0be73062d2..5bc7ff621e 100644 --- a/addons/nightvision/functions/fnc_onFiredPlayer.sqf +++ b/addons/nightvision/functions/fnc_onFiredPlayer.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; -TRACE_7("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile); +TRACE_7("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); if ((!GVAR(running)) || {!GVAR(shutterEffects)} @@ -55,7 +55,7 @@ _visibleFire = _visibleFireCoef * _visibleFire; if (_ammo isKindOf "BulletBase") then { _visibleFire = _visibleFire min 5; // Prevent every shot from triggering with HMG }; -TRACE_1("final", _visibleFire); +TRACE_1("final",_visibleFire); if (_visibleFire <= 1.5) exitWith {}; if ((random (linearConversion [1, 4, GVAR(nvgGeneration), 10, 20])) > _visibleFire) exitWith {}; diff --git a/addons/nightvision/functions/fnc_pfeh.sqf b/addons/nightvision/functions/fnc_pfeh.sqf index ad484d097e..dbd101631c 100644 --- a/addons/nightvision/functions/fnc_pfeh.sqf +++ b/addons/nightvision/functions/fnc_pfeh.sqf @@ -36,7 +36,7 @@ if (EGVAR(common,OldIsCamera)) exitWith { }; }; if (!GVAR(running)) then { - TRACE_1("Un-Pausing", GVAR(paused)); + TRACE_1("Un-Pausing",GVAR(paused)); GVAR(running) = true; [true] call FUNC(setupDisplayEffects); [] call FUNC(refreshGoggleType); diff --git a/addons/nightvision/functions/fnc_refreshGoggleType.sqf b/addons/nightvision/functions/fnc_refreshGoggleType.sqf index 7414e58d02..ccfbd017b6 100644 --- a/addons/nightvision/functions/fnc_refreshGoggleType.sqf +++ b/addons/nightvision/functions/fnc_refreshGoggleType.sqf @@ -51,7 +51,7 @@ if ((alive ACE_player) && {isNull (ACE_controlledUAV select 0)}) then { if (isArray (_config >> QGVAR(colorPreset))) then {_preset = getArray (_config >> QGVAR(colorPreset));}; }; - TRACE_1("source: hmd",GVAR(playerHMD)); // Source is player's HMD (or possibly a NVG scope, but no good way to detect that) + TRACE_1("source: hmd",GVAR(playerHMD)); // Source is player's HMD (or possibly a NVG scope,but no good way to detect that) private _config = configFile >> "CfgWeapons" >> GVAR(playerHMD); if (!isClass _config) exitWith {}; diff --git a/addons/nlaw/functions/fnc_attackProfile.sqf b/addons/nlaw/functions/fnc_attackProfile.sqf index ad7622eadd..9628974800 100644 --- a/addons/nlaw/functions/fnc_attackProfile.sqf +++ b/addons/nlaw/functions/fnc_attackProfile.sqf @@ -56,5 +56,5 @@ if ((count _test) > 0) then { }; #endif -// TRACE_1("Adjusted target position", _returnTargetPos); +// TRACE_1("Adjusted target position",_returnTargetPos); _returnTargetPos; diff --git a/addons/optics/functions/fnc_handleFired.sqf b/addons/optics/functions/fnc_handleFired.sqf index 5a1ae0eca0..f36f04d881 100644 --- a/addons/optics/functions/fnc_handleFired.sqf +++ b/addons/optics/functions/fnc_handleFired.sqf @@ -18,7 +18,7 @@ */ // IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); disableSerialization; diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index bbcd9da97f..8f02d734e5 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -20,7 +20,7 @@ if (hasInterface) then { }; ["CBA_settingsInitialized", { - TRACE_1("SettingsInitialized eh", GVAR(enabled)); + TRACE_1("SettingsInitialized eh",GVAR(enabled)); if (!GVAR(enabled)) exitWith {}; if (isServer) then { diff --git a/addons/overheating/functions/fnc_firedEH.sqf b/addons/overheating/functions/fnc_firedEH.sqf index 9db3a73dd6..bdb7f864c9 100644 --- a/addons/overheating/functions/fnc_firedEH.sqf +++ b/addons/overheating/functions/fnc_firedEH.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); BEGIN_COUNTER(firedEH); diff --git a/addons/overpressure/functions/fnc_firedEHBB.sqf b/addons/overpressure/functions/fnc_firedEHBB.sqf index a36eb8bd56..2ef48bf4d9 100644 --- a/addons/overpressure/functions/fnc_firedEHBB.sqf +++ b/addons/overpressure/functions/fnc_firedEHBB.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); // Retrieve backblast values private _bbValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues); diff --git a/addons/overpressure/functions/fnc_firedEHOP.sqf b/addons/overpressure/functions/fnc_firedEHOP.sqf index 7a76f4b2be..2345d09327 100644 --- a/addons/overpressure/functions/fnc_firedEHOP.sqf +++ b/addons/overpressure/functions/fnc_firedEHOP.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); // Retrieve overpressure values private _opValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues); diff --git a/addons/overpressure/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf index 891178cb52..64ee563974 100644 --- a/addons/overpressure/functions/fnc_getDistance.sqf +++ b/addons/overpressure/functions/fnc_getDistance.sqf @@ -19,7 +19,7 @@ */ params ["_posASL", "_direction", "_maxDistance", "_shooter"]; -TRACE_4("params",_posASL,_direction,_maxDistance, _shooter); +TRACE_4("params",_posASL,_direction,_maxDistance,_shooter); private _intersections = lineIntersectsSurfaces [_posASL, _posASL vectorAdd (_direction vectorMultiply _maxDistance), _shooter, objNull, true, 99]; diff --git a/addons/parachute/functions/fnc_cutParachute.sqf b/addons/parachute/functions/fnc_cutParachute.sqf index 564a9e09cd..c66d9ff050 100644 --- a/addons/parachute/functions/fnc_cutParachute.sqf +++ b/addons/parachute/functions/fnc_cutParachute.sqf @@ -16,7 +16,7 @@ * Public: No */ params ["_unit", "_parachute"]; -TRACE_2("cutParachute", _unit, _parachute); +TRACE_2("cutParachute",_unit,_parachute); playSound3d ["A3\Sounds_F\characters\parachute\parachute_landing.wss", _unit]; _unit action ["GetOut", _parachute]; diff --git a/addons/recoil/functions/fnc_camshake.sqf b/addons/recoil/functions/fnc_camshake.sqf index 8ffa0eb755..e2a7e3a4a1 100644 --- a/addons/recoil/functions/fnc_camshake.sqf +++ b/addons/recoil/functions/fnc_camshake.sqf @@ -17,7 +17,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); #define BASE_POWER 0.40 #define BASE_TIME 0.19 diff --git a/addons/refuel/functions/fnc_getCapacity.sqf b/addons/refuel/functions/fnc_getCapacity.sqf index 94681480ae..c6218831da 100644 --- a/addons/refuel/functions/fnc_getCapacity.sqf +++ b/addons/refuel/functions/fnc_getCapacity.sqf @@ -30,7 +30,7 @@ if (isNil "_capacity") then { // Set capacity even if this isn't a fuel source to save on config lookup time in the event this function is used in a loop _source setVariable [QGVAR(capacity), _capacity, true]; // handle weird edge case when trying to run on "camera"/CfgNonAIVehicles which won't support setVariable and will inf-loop - if (isNil {_source getVariable QGVAR(capacity)}) exitWith { WARNING_1("trying to getCapacity from non-CfgVehicle %1", _this); }; + if (isNil {_source getVariable QGVAR(capacity)}) exitWith { WARNING_1("trying to getCapacity from non-CfgVehicle %1",_this); }; [_source, _capacity] call FUNC(setFuel); }; diff --git a/addons/repair/functions/fnc_addRepairActions.sqf b/addons/repair/functions/fnc_addRepairActions.sqf index d071f577a6..1e0147d7e2 100644 --- a/addons/repair/functions/fnc_addRepairActions.sqf +++ b/addons/repair/functions/fnc_addRepairActions.sqf @@ -23,7 +23,7 @@ if !(hasInterface && {GVAR(enabled)}) exitWith {}; params ["_vehicle"]; private _type = typeOf _vehicle; -TRACE_2("addRepairActions", _vehicle,_type); +TRACE_2("addRepairActions",_vehicle,_type); // do nothing if the class is already initialized private _initializedClasses = GETMVAR(GVAR(initializedClasses),[]); diff --git a/addons/repair/functions/fnc_doRepair.sqf b/addons/repair/functions/fnc_doRepair.sqf index d02ab33fb7..58dd4590bb 100644 --- a/addons/repair/functions/fnc_doRepair.sqf +++ b/addons/repair/functions/fnc_doRepair.sqf @@ -35,7 +35,7 @@ private _hitPointNewDamage = (_hitPointCurDamage - 0.5) max _postRepairDamageMin if (_hitPointNewDamage < _hitPointCurDamage) then { // raise event to set the new hitpoint damage - TRACE_3("repairing main point", _vehicle, _hitPointIndex, _hitPointNewDamage); + TRACE_3("repairing main point",_vehicle,_hitPointIndex,_hitPointNewDamage); [QGVAR(setVehicleHitPointDamage), [_vehicle, _hitPointIndex, _hitPointNewDamage], _vehicle] call CBA_fnc_targetEvent; _hitPointCurDamage = _hitPointNewDamage; }; @@ -57,7 +57,7 @@ if (isArray _hitpointGroupConfig) then { private _subPointCurDamage = _vehicle getHitIndex _hitPointIndex; private _subPointNewDamage = (_subPointCurDamage - 0.5) max _postRepairDamageMin; if (_subPointNewDamage < _subPointCurDamage) then { - TRACE_3("repairing sub point", _vehicle, _subHitIndex, _subPointNewDamage); + TRACE_3("repairing sub point",_vehicle,_subHitIndex,_subPointNewDamage); [QGVAR(setVehicleHitPointDamage), [_vehicle, _subHitIndex, _subPointNewDamage], _vehicle] call CBA_fnc_targetEvent; }; }; diff --git a/addons/repair/functions/fnc_doRepairTrack.sqf b/addons/repair/functions/fnc_doRepairTrack.sqf index a970488268..519a3f78d6 100644 --- a/addons/repair/functions/fnc_doRepairTrack.sqf +++ b/addons/repair/functions/fnc_doRepairTrack.sqf @@ -26,7 +26,7 @@ TRACE_4("params",_unit,_vehicle,_hitPoint,_claimedObjects); _claimedObjects params [["_track", objNull]]; if ((isNull _track) || {!([_unit, _track, ["isNotDragging", "isNotCarrying", "isNotOnLadder"]] call EFUNC(common,canInteractWith))}) exitWith { - ERROR_1("Bad Track", _claimedObjects); + ERROR_1("Bad Track",_claimedObjects); }; // can't use a destroyed track diff --git a/addons/repair/functions/fnc_doReplaceTrack.sqf b/addons/repair/functions/fnc_doReplaceTrack.sqf index d52072b647..a512089c89 100644 --- a/addons/repair/functions/fnc_doReplaceTrack.sqf +++ b/addons/repair/functions/fnc_doReplaceTrack.sqf @@ -26,7 +26,7 @@ TRACE_4("params",_unit,_vehicle,_hitPoint,_claimedObjects); _claimedObjects params [["_track", objNull]]; if ((isNull _track) || {!([_unit, _track, ["isNotDragging", "isNotCarrying", "isNotOnLadder"]] call EFUNC(common,canInteractWith))}) exitWith { - ERROR_1("Bad Track", _claimedObjects); + ERROR_1("Bad Track",_claimedObjects); }; // get current hitpoint damage diff --git a/addons/repair/functions/fnc_doReplaceWheel.sqf b/addons/repair/functions/fnc_doReplaceWheel.sqf index 98c3d95cf9..7ec617127c 100644 --- a/addons/repair/functions/fnc_doReplaceWheel.sqf +++ b/addons/repair/functions/fnc_doReplaceWheel.sqf @@ -26,7 +26,7 @@ TRACE_4("params",_unit,_vehicle,_hitPoint,_claimedObjects); _claimedObjects params [["_wheel", objNull]]; if ((isNull _wheel) || {!([_unit, _wheel, ["isNotDragging", "isNotCarrying", "isNotOnLadder"]] call EFUNC(common,canInteractWith))}) exitWith { - WARNING_1("Bad Claimed Wheel", _claimedObjects); + WARNING_1("Bad Claimed Wheel",_claimedObjects); }; // get current hitpoint damage diff --git a/addons/repair/functions/fnc_getHitPointString.sqf b/addons/repair/functions/fnc_getHitPointString.sqf index 5611a6f4e3..93a4c153b2 100644 --- a/addons/repair/functions/fnc_getHitPointString.sqf +++ b/addons/repair/functions/fnc_getHitPointString.sqf @@ -86,7 +86,7 @@ for "_i" from 0 to (count _hitPoint) do { // Don't display part name if no string is found in stringtable if (_text == LSTRING(Hit)) then { - if (_hitPoint != "") then { LOG_1("Hitpoint [%1] - could not be localized", _hitPoint); }; + if (_hitPoint != "") then { LOG_1("Hitpoint [%1] - could not be localized",_hitPoint); }; _text = _textDefault; }; diff --git a/addons/repair/functions/fnc_getSelectionsToIgnore.sqf b/addons/repair/functions/fnc_getSelectionsToIgnore.sqf index d455950a3b..b90e44e8e6 100644 --- a/addons/repair/functions/fnc_getSelectionsToIgnore.sqf +++ b/addons/repair/functions/fnc_getSelectionsToIgnore.sqf @@ -134,7 +134,7 @@ private _processedSelections = []; continue }; - if (ANY_OF(_hitpointGroups, ANY_OF(_x select 1, _x == _hitpoint))) then { // skip child hitpoints + if (ANY_OF(_hitpointGroups,ANY_OF(_x select 1,_x == _hitpoint))) then { // skip child hitpoints TRACE_3("Skipping child hitpoint",_hitpoint,_forEachIndex,_selection); /*#ifdef DEBUG_MODE_FULL systemChat format ["Skipping child hitpoint, hitpoint %1, index %2, selection %3", _hitpoint, _forEachIndex, _selection]; diff --git a/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf b/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf index 1952707204..347c3878d7 100644 --- a/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf +++ b/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf @@ -50,7 +50,7 @@ private _wheelHitPointSelections = []; if ((_wheelBoneNameResized != "") && {_x find _wheelBoneNameResized == 0}) exitWith { // same as above. Requirement for physx. _wheelHitPoint = _hitPoints select _forEachIndex; _wheelHitPointSelection = _hitPointSelections select _forEachIndex; - TRACE_2("wheel found [Orginal]", _wheelName, _wheelHitPoint); + TRACE_2("wheel found [Orginal]",_wheelName,_wheelHitPoint); }; } forEach _hitPointSelections; @@ -83,7 +83,7 @@ private _wheelHitPointSelections = []; if (_bestIndex != -1) then { _wheelHitPoint = _hitPoints select _bestIndex; _wheelHitPointSelection = _hitPointSelections select _bestIndex; - TRACE_2("wheel found [Backup]", _wheelName, _wheelHitPoint); + TRACE_2("wheel found [Backup]",_wheelName,_wheelHitPoint); }; }; }; diff --git a/addons/repair/functions/fnc_isInRepairFacility.sqf b/addons/repair/functions/fnc_isInRepairFacility.sqf index 7ea8ace60f..51cc5424bb 100644 --- a/addons/repair/functions/fnc_isInRepairFacility.sqf +++ b/addons/repair/functions/fnc_isInRepairFacility.sqf @@ -34,7 +34,7 @@ private _checkObject = { private _fnc_check = { private _position = _unit modelToWorldVisual [0, 0, eyePos _unit select 2]; - CHECK_OBJECTS(lineIntersectsWith [ARR_3(_position, _position vectorAdd [ARR_3(0, 0, 10)], _unit)]) + CHECK_OBJECTS(lineIntersectsWith [ARR_3(_position,_position vectorAdd [ARR_3(0,0,10)],_unit)]) || {CHECK_OBJECTS(_unit nearObjects 7.5)} }; diff --git a/addons/repair/functions/fnc_normalizeHitPoints.sqf b/addons/repair/functions/fnc_normalizeHitPoints.sqf index 9abeec718c..5e61ef8c88 100644 --- a/addons/repair/functions/fnc_normalizeHitPoints.sqf +++ b/addons/repair/functions/fnc_normalizeHitPoints.sqf @@ -16,10 +16,10 @@ */ params ["_vehicle"]; -TRACE_2("params",_vehicle, typeOf _vehicle); +TRACE_2("params",_vehicle,typeOf _vehicle); // Can't execute all commands if the vehicle isn't local, exit if that's so -if !(local _vehicle) exitWith {ERROR_1("Vehicle Not Local %1", _vehicle);}; +if !(local _vehicle) exitWith {ERROR_1("Vehicle Not Local %1",_vehicle);}; (getAllHitPointsDamage _vehicle) params [["_allHitPoints", []]]; @@ -57,7 +57,7 @@ total = damage _vehicle; // apply normalized damage to all dependand hitpoints { private _damage = call (_dependentHitPointScripts select _forEachIndex); - TRACE_2("setting depend hitpoint", _x, _damage); + TRACE_2("setting depend hitpoint",_x,_damage); _vehicle setHitPointDamage [_x, _damage]; } forEach _dependentHitPoints; diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index a86f8f22db..b537963e0f 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -107,7 +107,7 @@ if !(_return && alive _target) exitWith {false}; //Claim required objects { - TRACE_2("Claiming", _x, (typeOf _x)); + TRACE_2("Claiming",_x,(typeOf _x)); [_caller, _x, false] call EFUNC(common,claim); } forEach _claimObjectsAvailable; diff --git a/addons/repair/functions/fnc_repair_failure.sqf b/addons/repair/functions/fnc_repair_failure.sqf index ce8d29b25d..c305c90b6b 100644 --- a/addons/repair/functions/fnc_repair_failure.sqf +++ b/addons/repair/functions/fnc_repair_failure.sqf @@ -51,7 +51,7 @@ if (_weaponSelect != "") then { //Unclaim repair objects: { - TRACE_2("Releasing", _x, (typeOf _x)); + TRACE_2("Releasing",_x,(typeOf _x)); [objNull, _x, false] call EFUNC(common,claim); } forEach _claimedObjects; diff --git a/addons/repair/functions/fnc_repair_success.sqf b/addons/repair/functions/fnc_repair_success.sqf index 083daa6cc7..271d662cd4 100644 --- a/addons/repair/functions/fnc_repair_success.sqf +++ b/addons/repair/functions/fnc_repair_success.sqf @@ -47,7 +47,7 @@ if (_weaponSelect != "") then { //Unclaim repair objects: { - TRACE_2("Releasing", _x, (typeOf _x)); + TRACE_2("Releasing",_x,(typeOf _x)); [objNull, _x, false] call EFUNC(common,claim); } forEach _claimedObjects; diff --git a/addons/repair/functions/fnc_setHitPointDamage.sqf b/addons/repair/functions/fnc_setHitPointDamage.sqf index 9a28adc211..bfce0e3f5e 100644 --- a/addons/repair/functions/fnc_setHitPointDamage.sqf +++ b/addons/repair/functions/fnc_setHitPointDamage.sqf @@ -23,13 +23,13 @@ params ["_vehicle", "_hitPointIndex", "_hitPointDamage", ["_useEffects", false]] TRACE_4("params",_vehicle,typeOf _vehicle,_hitPointIndex,_hitPointDamage); // can't execute all commands if the vehicle isn't local. exit here. -if !(local _vehicle) exitWith {ERROR_1("Vehicle Not Local %1", _vehicle);}; +if !(local _vehicle) exitWith {ERROR_1("Vehicle Not Local %1",_vehicle);}; // get all hitpoints and selections and damages (getAllHitPointsDamage _vehicle) params [["_allHitPoints", []], ["_allHitPointsSelections", []], ["_allHitPointDamages", []]]; // exit if the hitpoint is not valid -if ((_hitPointIndex < 0) || {_hitPointIndex >= (count _allHitPoints)}) exitWith {ERROR_2("NOT A VALID HITPOINT: %1-%2", _hitPointIndex,_vehicle);}; +if ((_hitPointIndex < 0) || {_hitPointIndex >= (count _allHitPoints)}) exitWith {ERROR_2("NOT A VALID HITPOINT: %1-%2",_hitPointIndex,_vehicle);}; // save structural damage and sum of hitpoint damages diff --git a/addons/respawn/functions/fnc_handlePlayerChanged.sqf b/addons/respawn/functions/fnc_handlePlayerChanged.sqf index 81dd5eb9a9..9514966541 100644 --- a/addons/respawn/functions/fnc_handlePlayerChanged.sqf +++ b/addons/respawn/functions/fnc_handlePlayerChanged.sqf @@ -19,9 +19,9 @@ params ["_newUnit"]; private _side = side group _newUnit; -((GETMVAR(ACE_Rallypoint_West, objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == west)); -((GETMVAR(ACE_Rallypoint_West_Base, objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == west)); -((GETMVAR(ACE_Rallypoint_East, objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == east)); -((GETMVAR(ACE_Rallypoint_East_Base, objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == east)); -((GETMVAR(ACE_Rallypoint_Independent, objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == independent)); -((GETMVAR(ACE_Rallypoint_Independent_Base, objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == independent)); +((GETMVAR(ACE_Rallypoint_West,objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == west)); +((GETMVAR(ACE_Rallypoint_West_Base,objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == west)); +((GETMVAR(ACE_Rallypoint_East,objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == east)); +((GETMVAR(ACE_Rallypoint_East_Base,objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == east)); +((GETMVAR(ACE_Rallypoint_Independent,objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == independent)); +((GETMVAR(ACE_Rallypoint_Independent_Base,objNull)) getVariable [QGVAR(marker), ""]) setMarkerAlphaLocal (parseNumber (_side == independent)); diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index e0823fe6e0..afbc7def86 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -17,7 +17,7 @@ */ params ["_unit", "_allGear", "_activeWeaponAndMuzzle"]; -TRACE_3("restoreGear",_unit, count _allGear, _activeWeaponAndMuzzle); +TRACE_3("restoreGear",_unit,count _allGear,_activeWeaponAndMuzzle); // restore all gear if (!isNil "_allGear") then { diff --git a/addons/scopes/functions/fnc_firedEH.sqf b/addons/scopes/functions/fnc_firedEH.sqf index 86d9848162..f1b8e91bf4 100644 --- a/addons/scopes/functions/fnc_firedEH.sqf +++ b/addons/scopes/functions/fnc_firedEH.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); if (!(_ammo isKindOf "BulletBase")) exitWith {}; diff --git a/addons/sitting/XEH_clientInit.sqf b/addons/sitting/XEH_clientInit.sqf index 12adfb9f6c..f0b0b7c2f0 100644 --- a/addons/sitting/XEH_clientInit.sqf +++ b/addons/sitting/XEH_clientInit.sqf @@ -4,7 +4,7 @@ if (!hasInterface) exitWith {}; ["ace_settingsInitialized", { - TRACE_1("SettingInit", XGVAR(enable)); + TRACE_1("SettingInit",XGVAR(enable)); // If not enabled, then do not add CanInteractWith Condition or event handlers if (!XGVAR(enable)) exitWith {}; diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 98ece0c62f..2d7cc999da 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -92,7 +92,7 @@ private _seatDistOrig = (getPosASL _player) distance _seat; // Remove PFH if not sitting any more if (isNil {_player getVariable QGVAR(sittingStatus)}) exitWith { [_pfhId] call CBA_fnc_removePerFrameHandler; - TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(sittingStatus), false)]); + TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(sittingStatus),false)]); }; // Stand up if chair gets deleted or moved diff --git a/addons/slideshow/functions/fnc_createSlideshow.sqf b/addons/slideshow/functions/fnc_createSlideshow.sqf index 87fd40bbbe..9021a92613 100644 --- a/addons/slideshow/functions/fnc_createSlideshow.sqf +++ b/addons/slideshow/functions/fnc_createSlideshow.sqf @@ -61,7 +61,7 @@ private _currentSlideshow = GVAR(slideshows); // Local variable in case GVAR get // If interaction menu module is not present, set default duration value if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then { _duration = NOINTERACTMENU_DURATION; - INFO_1("Interaction Menu module not present, defaulting duration value to %1",_duration); + INFO_1("Interaction Menu module not present,defaulting duration value to %1",_duration); }; // Add interactions if automatic transitions are disabled, else setup automatic transitions diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index 4e4310a0cf..aa0ba9fac9 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -45,7 +45,7 @@ if (_intersections isEqualTo []) exitWith { }; (_intersections select 0) params ["_touchingPoint", "_surfaceNormal", "", "_object"]; -TRACE_3("",_touchingPoint, _surfaceNormal, _object); +TRACE_3("",_touchingPoint,_surfaceNormal,_object); // Exit if trying to tag a non static object if ((!isNull _object) && { @@ -93,7 +93,7 @@ private _vectorDirAndUp = if (abs (_v1 select 2) < 0.94) then { [_v1, _v3] }; -TRACE_3("Reference:", _v1, _v2, _v3); +TRACE_3("Reference:",_v1,_v2,_v3); private _fnc_isOk = { params ["_rx", "_ry"]; diff --git a/addons/vehicle_damage/functions/fnc_addEventHandler.sqf b/addons/vehicle_damage/functions/fnc_addEventHandler.sqf index ffd64cc77f..3697ff2cf9 100644 --- a/addons/vehicle_damage/functions/fnc_addEventHandler.sqf +++ b/addons/vehicle_damage/functions/fnc_addEventHandler.sqf @@ -103,7 +103,7 @@ if (isNil "_eh") then { // Maybe its overridden somewhere else, but this makes sure it is the last one [{ params ["_vehicle"]; - TRACE_1("EH not added yet - added eh now", _vehicle); + TRACE_1("EH not added yet - added eh now",_vehicle); private _hd = _vehicle addEventHandler ["HandleDamage", { _this call FUNC(handleDamage) }]; _vehicle setVariable [QGVAR(handleDamage), _hd]; }, [_vehicle]] call CBA_fnc_execNextFrame; diff --git a/addons/vehicle_damage/functions/fnc_processHit.sqf b/addons/vehicle_damage/functions/fnc_processHit.sqf index 48d6ec0055..17575e8f38 100644 --- a/addons/vehicle_damage/functions/fnc_processHit.sqf +++ b/addons/vehicle_damage/functions/fnc_processHit.sqf @@ -248,7 +248,7 @@ switch (_hitArea) do { }; { - TRACE_1("doing damage to hitpoint", _x); + TRACE_1("doing damage to hitpoint",_x); [_vehicle, -1, _x, 1 * _penChance] call FUNC(addDamage); } forEach _partKill; @@ -270,7 +270,7 @@ switch (_hitArea) do { }; if (0.8 * _ammoEffectiveness > random 1) then { - TRACE_1("damaged turret", _ammoEffectiveness * 0.8); + TRACE_1("damaged turret",_ammoEffectiveness * 0.8); [_vehicle, _hitIndex, _hitpointName, 1 * _penChance] call FUNC(addDamage); _vehicle setVariable [QGVAR(canShoot), false]; }; diff --git a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf index 03562a6180..f8ccc59a0f 100644 --- a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf +++ b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf @@ -37,10 +37,10 @@ if (GVAR(LockVehicleInventory) && //if setting not enabled !isNull (findDisplay 602) }, { - TRACE_1("car display open: closing", _this); + TRACE_1("car display open: closing",_this); (findDisplay 602) closeDisplay 0; [{ - TRACE_1("Opening Player Inventory", _this); + TRACE_1("Opening Player Inventory",_this); ACE_player action ["Gear", objNull]; }, []] call CBA_fnc_execNextFrame; }, []] call CBA_fnc_waitUntilAndExecute; diff --git a/addons/vehiclelock/functions/fnc_setVehicleLockEH.sqf b/addons/vehiclelock/functions/fnc_setVehicleLockEH.sqf index c34dbb78e2..7b99f093a7 100644 --- a/addons/vehiclelock/functions/fnc_setVehicleLockEH.sqf +++ b/addons/vehiclelock/functions/fnc_setVehicleLockEH.sqf @@ -20,5 +20,5 @@ params ["_veh", "_isLocked"]; TRACE_2("params",_veh,_isLocked); private _lockNumber = [0, 2] select _isLocked; -TRACE_2("Setting Lock State", _veh, _lockNumber); +TRACE_2("Setting Lock State",_veh,_lockNumber); _veh lock _lockNumber; diff --git a/addons/viewports/dev/debugPoints.sqf b/addons/viewports/dev/debugPoints.sqf index 24b393d70f..53fe016b62 100644 --- a/addons/viewports/dev/debugPoints.sqf +++ b/addons/viewports/dev/debugPoints.sqf @@ -22,7 +22,7 @@ #define IDD_3DEN 313 [] spawn { - INFO_2("Pre-Init [is3den %1][3den display: %2]", is3den, !isNull findDisplay IDD_3DEN); + INFO_2("Pre-Init [is3den %1][3den display: %2]",is3den,!isNull findDisplay IDD_3DEN); if (!is3den) exitWith {}; GVAR(3denIndex) = 0; diff --git a/addons/weaponselect/functions/fnc_throwGrenade.sqf b/addons/weaponselect/functions/fnc_throwGrenade.sqf index 4856a7b738..ffe289a589 100644 --- a/addons/weaponselect/functions/fnc_throwGrenade.sqf +++ b/addons/weaponselect/functions/fnc_throwGrenade.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); if (_weapon != "Throw") exitWith {}; diff --git a/addons/weather/functions/fnc_displayAirTemp.sqf b/addons/weather/functions/fnc_displayAirTemp.sqf index 4eb5bdf3ac..08b325dcac 100644 --- a/addons/weather/functions/fnc_displayAirTemp.sqf +++ b/addons/weather/functions/fnc_displayAirTemp.sqf @@ -17,7 +17,7 @@ */ params ["_apparent_temperature", "_bias"]; -TRACE_2("displayAirTemp",_apparent_temperature, _bias); +TRACE_2("displayAirTemp",_apparent_temperature,_bias); private _temperature1 = floor(_apparent_temperature + (_bias select 0) - (random 2)); private _temperature2 = floor(_apparent_temperature + (_bias select 1) + (random 2)); diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index d7c45e595a..23a87ecbf4 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -29,14 +29,14 @@ EGVAR(advanced_ballistics,Protractor) = false; GVAR(WindInfo) = true; -TRACE_1("Starting Wind Info PFEH", GVAR(WindInfo)); +TRACE_1("Starting Wind Info PFEH",GVAR(WindInfo)); [{ disableSerialization; params ["", "_pfID"]; if ((!GVAR(WindInfo)) || {!([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith))}) exitWith { - TRACE_1("Ending Wind Info PFEH", GVAR(WindInfo)); + TRACE_1("Ending Wind Info PFEH",GVAR(WindInfo)); GVAR(WindInfo) = false; (["RscWindIntuitive"] call BIS_fnc_rscLayer) cutText ["", "PLAIN"]; [_pfID] call CBA_fnc_removePerFrameHandler; diff --git a/addons/winddeflection/functions/fnc_handleFired.sqf b/addons/winddeflection/functions/fnc_handleFired.sqf index e4b547c032..c1b93818f0 100644 --- a/addons/winddeflection/functions/fnc_handleFired.sqf +++ b/addons/winddeflection/functions/fnc_handleFired.sqf @@ -16,7 +16,7 @@ */ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; -TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); +TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_vehicle,_gunner,_turret); if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false] && {_projectile isKindOf "BulletBase" && {_unit isKindOf "Man"}}) exitWith {false}; diff --git a/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf b/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf index 615a11d271..dded460710 100644 --- a/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf +++ b/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf @@ -48,7 +48,7 @@ waitUntil { }; TRACE_2("Finished primary movement",_vehicle distance2D _wpPos,_closeEnoughTicks); -if ((!alive _vehicle) || {!alive _commander}) exitWith {TRACE_2("died",alive _vehicle, alive _commander); true}; +if ((!alive _vehicle) || {!alive _commander}) exitWith {TRACE_2("died",alive _vehicle,alive _commander); true}; if (((getPos _vehicle) select 2) < 25) exitWith {TRACE_1("too low",getPos _vehicle); true}; // Fly level and straight diff --git a/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf b/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf index 6c511bae07..6d2a94139b 100644 --- a/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf +++ b/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf @@ -30,7 +30,7 @@ switch (true) do { }; default { - TRACE_1("Calling removeVirtualXXXCargo functions", _object); + TRACE_1("Calling removeVirtualXXXCargo functions",_object); [_object, (_object call BIS_fnc_getVirtualItemCargo), true] call BIS_fnc_removeVirtualItemCargo; [_object, (_object call BIS_fnc_getVirtualWeaponCargo), true] call BIS_fnc_removeVirtualWeaponCargo; [_object, (_object call BIS_fnc_getVirtualMagazineCargo), true] call BIS_fnc_removeVirtualMagazineCargo; From b54992b8fcfc267d1da34d2c7168f91b66d5f9d8 Mon Sep 17 00:00:00 2001 From: Dystopian Date: Mon, 5 Feb 2024 22:54:51 +0400 Subject: [PATCH 4/5] Towing - Fix some issues (#9007) Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: LinkIsGrim --- addons/towing/CfgVehicles.hpp | 101 +++++++----------- addons/towing/XEH_PREP.hpp | 6 +- addons/towing/XEH_postInit.sqf | 40 +++++-- addons/towing/XEH_preInit.sqf | 16 +++ addons/towing/functions/fnc_attachRopePFH.sqf | 28 ++++- .../towing/functions/fnc_attachVehicles.sqf | 65 +++++++++++ addons/towing/functions/fnc_canStartTow.sqf | 21 ---- addons/towing/functions/fnc_detach.sqf | 48 --------- addons/towing/functions/fnc_detachChild.sqf | 33 ++++++ addons/towing/functions/fnc_detachRope.sqf | 60 +++++++++++ .../towing/functions/fnc_getDetachActions.sqf | 40 +++++++ .../functions/fnc_isSuitableSimulation.sqf | 5 +- addons/towing/functions/fnc_startTow.sqf | 1 + .../functions/fnc_towStateMachinePFH.sqf | 79 ++++++-------- addons/towing/initSettings.inc.sqf | 5 +- addons/towing/script_component.hpp | 1 - 16 files changed, 351 insertions(+), 198 deletions(-) create mode 100644 addons/towing/functions/fnc_attachVehicles.sqf delete mode 100644 addons/towing/functions/fnc_canStartTow.sqf delete mode 100644 addons/towing/functions/fnc_detach.sqf create mode 100644 addons/towing/functions/fnc_detachChild.sqf create mode 100644 addons/towing/functions/fnc_detachRope.sqf create mode 100644 addons/towing/functions/fnc_getDetachActions.sqf diff --git a/addons/towing/CfgVehicles.hpp b/addons/towing/CfgVehicles.hpp index df791d95d3..6775a8c9e2 100644 --- a/addons/towing/CfgVehicles.hpp +++ b/addons/towing/CfgVehicles.hpp @@ -1,84 +1,61 @@ -#define TOW_ACTION \ -class ACE_Actions {\ - class ACE_MainActions {\ - class ADDON {\ - displayName = CSTRING(displayName);\ - distance = TOW_ACTION_DISTANCE;\ - condition = QUOTE([ARR_1(_target)] call FUNC(isSuitableSimulation));\ - statement = "";\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - showDisabled = 0;\ - icon = "";\ - class GVAR(startTow3) {\ - displayName = CSTRING(start3);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope3')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope3')] call FUNC(startTow));\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - };\ - class GVAR(startTow6) {\ - displayName = CSTRING(start6);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope6')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope6')] call FUNC(startTow));\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - };\ - class GVAR(startTow12) {\ - displayName = CSTRING(start12);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope12')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope12')] call FUNC(startTow));\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - };\ - class GVAR(startTow15) {\ - displayName = CSTRING(start15);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope15')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope15')] call FUNC(startTow));\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - };\ - class GVAR(startTow18) {\ - displayName = CSTRING(start18);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope18')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope18')] call FUNC(startTow));\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - };\ - class GVAR(startTow27) {\ - displayName = CSTRING(start27);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope27')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope27')] call FUNC(startTow));\ - exceptions[] = { INTERACTION_EXCEPTIONS };\ - };\ - class GVAR(startTow36) {\ - displayName = CSTRING(start36);\ - condition = QUOTE(([ARR_2(_player,_target)] call FUNC(canStartTow)) && [ARR_2(_player,'ACE_rope36')] call EFUNC(common,hasItem));\ - statement = QUOTE([ARR_3(_player,_target,'ACE_rope36')] call FUNC(startTow));\ +#define CONCAT(a,b) a##b +#define TOW_ACTION(length) \ + class GVAR(CONCAT(startTow,length)) {\ + displayName = CSTRING(CONCAT(start,length));\ + condition = QUOTE([ARR_2(_player,'CONCAT(ACE_rope,length)')] call DEFUNC(common,hasItem));\ + statement = QUOTE([ARR_3(_player,_target,'CONCAT(ACE_rope,length)')] call DFUNC(startTow));\ + exceptions[] = { INTERACTION_EXCEPTIONS };\ + } +#define TOW_ACTIONS \ + class ACE_Actions {\ + class ACE_MainActions {\ + class ADDON {\ + displayName = CSTRING(displayName);\ + distance = TOW_ACTION_DISTANCE;\ + condition = QUOTE(alive _target && {_target call DFUNC(isSuitableSimulation)});\ exceptions[] = { INTERACTION_EXCEPTIONS };\ + insertChildren = QUOTE(_target call DFUNC(getDetachActions));\ + TOW_ACTION(3);\ + TOW_ACTION(6);\ + TOW_ACTION(12);\ + TOW_ACTION(15);\ + TOW_ACTION(18);\ + TOW_ACTION(27);\ + TOW_ACTION(36);\ };\ };\ - };\ -} + } class CfgVehicles { class LandVehicle; class Car: LandVehicle { - TOW_ACTION; + TOW_ACTIONS; }; class Tank: LandVehicle { - TOW_ACTION; + TOW_ACTIONS; + }; + + class Ship; + class Ship_F: Ship { + TOW_ACTIONS; }; class ThingX; - class GVAR(hook): ThingX { - displayName = "hook"; // not publicly visible, no stringtable needed + class GVAR(helper): ThingX { + displayName = "helper"; // not publicly visible, no stringtable needed scope = 1; scopeCurator = 1; - model = "\a3\Structures_F_Orange\VR\Helpers\Sign_sphere10cm_Geometry_F.p3d"; + model = "\A3\Weapons_f\empty"; destrType = "DestructNo"; - + }; + class GVAR(hook): GVAR(helper) { + displayName = "hook"; class ACE_Actions { class ACE_MainActions { displayName = CSTRING(detach); - condition = "true"; - statement = QUOTE(private _parent = _target getVariable [ARR_2(QQGVAR(parent),objNull)]; private _child = _target getVariable [ARR_2(QQGVAR(child),objNull)]; [ARR_3(_player,_parent,_child)] call FUNC(detach)); - distance = 2; + statement = QUOTE([ARR_2(_player,_target)] call DFUNC(detachRope)); + distance = TOW_ACTION_DISTANCE; }; }; }; diff --git a/addons/towing/XEH_PREP.hpp b/addons/towing/XEH_PREP.hpp index d26b29e5f0..b72f70c55b 100644 --- a/addons/towing/XEH_PREP.hpp +++ b/addons/towing/XEH_PREP.hpp @@ -1,7 +1,9 @@ PREP(addRopeToVehicle); PREP(attachRopePFH); -PREP(canStartTow); -PREP(detach); +PREP(attachVehicles); +PREP(detachChild); +PREP(detachRope); +PREP(getDetachActions); PREP(isSuitableSimulation); PREP(onMouseButtonDown); PREP(onMouseButtonUp); diff --git a/addons/towing/XEH_postInit.sqf b/addons/towing/XEH_postInit.sqf index 187af19244..01c7d6e48e 100644 --- a/addons/towing/XEH_postInit.sqf +++ b/addons/towing/XEH_postInit.sqf @@ -1,14 +1,40 @@ #include "script_component.hpp" -["MouseButtonDown", LINKFUNC(onMouseButtonDown)] call CBA_fnc_addDisplayHandler; + ["MouseButtonUp", LINKFUNC(onMouseButtonUp)] call CBA_fnc_addDisplayHandler; GVAR(mouseLeft) = false; GVAR(mouseRight) = false; GVAR(blockFireEHID) = -1; -GVAR(cancel) = false; -GVAR(canAttach) = false; - -[QGVAR(setTowParent), { - params ["_parent", "_child"]; - _child setTowParent _parent; +[QGVAR(ropeAttachTo), { + params ["_child", "_relativeAttachPos", "_rope", "_helper"]; + TRACE_4("ropeAttachTo",_child,_relativeAttachPos,_rope,_helper); + _helper ropeDetach _rope; + [_child, _relativeAttachPos] ropeAttachTo _rope; + deleteVehicle _helper; }] call CBA_fnc_addEventHandler; + +[QGVAR(attachVehicles), LINKFUNC(attachVehicles)] call CBA_fnc_addEventHandler; +[QGVAR(detachChild), LINKFUNC(detachChild)] call CBA_fnc_addEventHandler; + +if (!isServer) exitWith {}; + +[QGVAR(cleanupParent), { + params ["_parent"]; + TRACE_1("cleanupParent",_parent); + _parent removeEventHandler ["RopeBreak", _parent getVariable [QGVAR(RopeBreakEHID), -1]]; + _parent setVariable [QGVAR(RopeBreakEHID), -1]; + private _parentParentHooks = _parent getVariable [QGVAR(parentHooks), []]; + if (_parentParentHooks isEqualTo []) then { + TRACE_1("remove Deleted EH",_parent); + _parent removeEventHandler ["Deleted", _parent getVariable [QGVAR(DeletedEHID), -1]]; + _parent setVariable [QGVAR(DeletedEHID), -1]; + }; +}] call CBA_fnc_addEventHandler; + +addMissionEventHandler ["PlayerConnected", { + if (GVAR(allChildren) isEqualTo []) exitWith {}; + params ["", "", "", "_jip", "_owner"]; + if (!_jip) exitWith {}; + TRACE_2("pushing children",_owner,GVAR(allChildren)); + [QGVAR(setTowParentAllChildren), [GVAR(allChildren)], _owner] call CBA_fnc_ownerEvent; +}]; diff --git a/addons/towing/XEH_preInit.sqf b/addons/towing/XEH_preInit.sqf index 894773534a..6a85ba442f 100644 --- a/addons/towing/XEH_preInit.sqf +++ b/addons/towing/XEH_preInit.sqf @@ -8,4 +8,20 @@ PREP_RECOMPILE_END; #include "initSettings.inc.sqf" +// handle JIP +if (isServer) then { + GVAR(allChildren) = []; +} else { + // can't use CBA EH in postInit because too late for server PlayerConnected EH + [QGVAR(setTowParentAllChildren), { + params ["_children"]; + TRACE_1("setTowParentAllChildren",_children); + { + private _parent = _x getVariable QGVAR(parent); + TRACE_2("setTowParent",_x,_parent); + _x setTowParent _parent; + } forEach _children; + }] call CBA_fnc_addEventHandler; +}; + ADDON = true; diff --git a/addons/towing/functions/fnc_attachRopePFH.sqf b/addons/towing/functions/fnc_attachRopePFH.sqf index e8336ecc25..37f626e0a9 100644 --- a/addons/towing/functions/fnc_attachRopePFH.sqf +++ b/addons/towing/functions/fnc_attachRopePFH.sqf @@ -40,13 +40,32 @@ if (_intersections isNotEqualTo []) then { _intersectionToUse params ["_intersectPosition", "", "_intersectObject"]; - // if we have a target object, we assume we are attaching to the parent. If no target object, we are attaching to child - GVAR(canAttach) = (_intersectObject isNotEqualTo _ignoreParent) && { (!isNull _target && { _intersectObject isEqualTo _target }) || { isNull _target && { [_intersectObject] call FUNC(isSuitableSimulation) }}} && { !(_intersectObject getVariable [QGVAR(towing), false]) }; + GVAR(canAttach) = + _intersectObject isNotEqualTo _ignoreParent + && { + // if we have a target object, we assume we are attaching to the parent. If no target object, we are attaching to child + if (!isNull _target) then { + _intersectObject isEqualTo _target + } else { + [_intersectObject] call FUNC(isSuitableSimulation) + && { // ignore _intersectObject which has parent != _ignoreParent + private _intersectObjectParent = _intersectObject getVariable [QGVAR(parent), objNull]; + isNull _intersectObjectParent || {_intersectObjectParent == _ignoreParent} + } && { // arma prevents making rings (ropeAttachTo silently fails) + private _ancestor = _ignoreParent getVariable [QGVAR(parent), objNull]; + while {!isNull _ancestor && {_ancestor != _intersectObject}} do { + _ancestor = _ancestor getVariable [QGVAR(parent), objNull]; + }; + isNull _ancestor + } + } + } + ; if (GVAR(canAttach)) then { - TRACE_4("can attach",_target,_intersectObject,_ignoreParent,_ignoreRope); + // TRACE_4("can attach",_target,_intersectObject,_ignoreParent,_ignoreRope); GVAR(attachHelper) setPosASL _intersectPosition; - _hintLMB = localize LSTRING(attach); + _hintLMB = LLSTRING(attach); GVAR(attachHelper) setVariable [QGVAR(object), _intersectObject]; }; @@ -76,4 +95,3 @@ if (_hint isNotEqualTo (_unit getVariable [QGVAR(hint), []])) then { _unit setVariable [QGVAR(hint), _hint]; _hint call EFUNC(interaction,showMouseHint); }; - diff --git a/addons/towing/functions/fnc_attachVehicles.sqf b/addons/towing/functions/fnc_attachVehicles.sqf new file mode 100644 index 0000000000..9fd95f3742 --- /dev/null +++ b/addons/towing/functions/fnc_attachVehicles.sqf @@ -0,0 +1,65 @@ +#include "..\script_component.hpp" +/* + * Author: Dystopian + * Attaches child to parent vehicle. + * Run globally. + * + * Arguments: + * 0: Vehicle to tow from + * 1: Vehicle to tow + * 2: Rope End Position + * 3: Rope + * 4: Attached Helper Object + * + * Return Value: + * None + * + * Example: + * [parent, cursorObject, [0,0,0], ropes parent select 0] call ace_towing_fnc_attachVehicles + * + * Public: No + */ +params ["_parent", "_child", "_relativeAttachPos", "_rope", "_helper"]; +TRACE_5("attachVehicles",_parent,_child,_relativeAttachPos,_rope,_helper); + +if (local _parent) then { + _helper ropeDetach _rope; + [_child, _relativeAttachPos] ropeAttachTo _rope; + deleteVehicle _helper; +}; + +_child setTowParent _parent; +if (!isServer) exitWith {}; + +_child setVariable [QGVAR(parent), _parent, true]; +GVAR(allChildren) pushBack _child; + +{ + if (-1 == _x getVariable [QGVAR(DeletedEHID), -1]) then { + _x setVariable [QGVAR(DeletedEHID), _x addEventHandler ["Deleted", { + params ["_entity"]; + private _childHooks = _entity getVariable [QGVAR(childHooks), []]; + private _parentHooks = _entity getVariable [QGVAR(parentHooks), []]; + TRACE_3("Deleted EH",_entity,_childHooks,_parentHooks); + { + [objNull, _x, _entity] call FUNC(detachRope); + } forEach (_childHooks + _parentHooks); + if (_childHooks isNotEqualTo []) then { // only for parent + // because deleting lasts for several frames we have to delete RB EH to fix double cleanup + _entity removeEventHandler ["RopeBreak", _entity getVariable QGVAR(RopeBreakEHID)]; + }; + }]]; + }; +} forEach [_parent, _child]; + +if (-1 == _parent getVariable [QGVAR(RopeBreakEHID), -1]) then { + _parent setVariable [QGVAR(RopeBreakEHID), _parent addEventHandler ["RopeBreak", { + params ["_parent", "_rope", "_child"]; + if (isNull _rope) exitWith {}; // happens + private _hook = _rope getVariable [QGVAR(hook), objNull]; + private _hookChild = _hook getVariable [QGVAR(vars), []] param [1, objNull]; + if (isNull _hook || {_child != _hookChild}) exitWith {}; // handle helper detach + TRACE_4("RopeBreak EH",_parent,_rope,_child,_hook); + [objNull, _hook] call FUNC(detachRope); + }]]; +}; diff --git a/addons/towing/functions/fnc_canStartTow.sqf b/addons/towing/functions/fnc_canStartTow.sqf deleted file mode 100644 index 1ffca3df86..0000000000 --- a/addons/towing/functions/fnc_canStartTow.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: tcvm - * Condition for whether or not we can tow from this object - * - * Arguments: - * 0: Unit wanting to start towing - * 1: Vehicle to tow from - * - * Return Value: - * Whether or not we can start towing - * - * Example: - * [player, cursorObject] call ace_towing_fnc_canStartTow - * - * Public: No - */ -params ["_unit", "_target"]; -private _isTowing = _target getVariable [QGVAR(towing), false]; -TRACE_1("is towing",_isTowing); -!_isTowing diff --git a/addons/towing/functions/fnc_detach.sqf b/addons/towing/functions/fnc_detach.sqf deleted file mode 100644 index 92494eae0e..0000000000 --- a/addons/towing/functions/fnc_detach.sqf +++ /dev/null @@ -1,48 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: tcvm - * Detaches child from parent, and gives rope item back - * - * Arguments: - * 0: Parent - * 1: Child - * - * Return Value: - * None - * - * Example: - * [player, cursorObject] call ace_towing_fnc_detach - * - * Public: No - */ -params ["_unit", "_parent", "_child"]; -TRACE_3("detach",_unit,_parent,_child); - -private _hook = _child getVariable [QGVAR(hook), objNull]; - -_parent removeEventHandler ["Deleted", _hook getVariable QGVAR(parentDeleteEventHandler)]; -_hook setVariable [QGVAR(parentDeleteEventHandler), -1]; - -_child removeEventHandler ["Deleted", _hook getVariable QGVAR(childDeleteEventHandler)]; -_hook setVariable [QGVAR(childDeleteEventHandler), -1]; - -_parent removeEventHandler ["RopeBreak", _parent getVariable QGVAR(ropeBreakEventHandler)]; -_parent setVariable [QGVAR(ropeBreakEventHandler), -1]; - -private _rope = _child getVariable [QGVAR(rope), objNull]; -ropeDestroy _rope; - -private _ropeClass = _hook getVariable [QGVAR(ropeClass), ""]; -deleteVehicle _hook; - -TRACE_1("rope",_ropeClass); - -if (_ropeClass isNotEqualTo "") then { - [_unit, _ropeClass, true] call CBA_fnc_addItem; -}; - -[QGVAR(setTowParent), [objNull, _child], _child] call CBA_fnc_targetEvent; - -_child setVariable [QGVAR(towing), false, true]; -_parent setVariable [QGVAR(towing), false, true]; - diff --git a/addons/towing/functions/fnc_detachChild.sqf b/addons/towing/functions/fnc_detachChild.sqf new file mode 100644 index 0000000000..a30f90d8c6 --- /dev/null +++ b/addons/towing/functions/fnc_detachChild.sqf @@ -0,0 +1,33 @@ +#include "..\script_component.hpp" +/* + * Author: Dystopian + * Detaches child. + * Run globally. + * + * Arguments: + * 0: Child + * + * Return Value: + * None + * + * Example: + * cursorObject call ace_towing_fnc_detachChild + * + * Public: No + */ +params ["_child"]; +TRACE_1("detachChild",_child); + +_child setTowParent objNull; + +if (!isServer) exitWith {}; + +_child setVariable [QGVAR(parent), objNull, true]; +GVAR(allChildren) = GVAR(allChildren) - [_child]; + +private _childChildHooks = _child getVariable [QGVAR(childHooks), []]; +if (_childChildHooks isEqualTo []) then { + TRACE_1("remove Deleted EH",_child); + _child removeEventHandler ["Deleted", _child getVariable [QGVAR(DeletedEHID), -1]]; + _child setVariable [QGVAR(DeletedEHID), -1]; +}; diff --git a/addons/towing/functions/fnc_detachRope.sqf b/addons/towing/functions/fnc_detachRope.sqf new file mode 100644 index 0000000000..8baed5532d --- /dev/null +++ b/addons/towing/functions/fnc_detachRope.sqf @@ -0,0 +1,60 @@ +#include "..\script_component.hpp" +/* + * Author: Dystopian + * Detaches rope of given hook and gives rope item back. + * + * Arguments: + * 0: Player + * 1: Rope Hook + * 2: Deleted object (default: objNull) + * + * Return Value: + * None + * + * Example: + * [player, cursorObject] call ace_towing_fnc_detachRope + * + * Public: No + */ +params ["_unit", "_hook", ["_deletedObject", objNull]]; + +private _hookVars = _hook getVariable QGVAR(vars); +if (isNil "_hookVars") then { // this is hookParent + _hook = _hook getVariable QGVAR(hook); + _hookVars = _hook getVariable QGVAR(vars); +}; + +_hookVars params ["_parent", "_child", "_rope", "_ropeClass", "_hookParent"]; + +TRACE_8("detachRope",_unit,_parent,_child,_hook,_hookParent,_rope,_ropeClass,_deletedObject); + +ropeDestroy _rope; // can run on client + +if (!isNull _unit && {_ropeClass isNotEqualTo ""}) then { + [_unit, _ropeClass, true] call CBA_fnc_addItem; +}; + +{ + detach _x; + deleteVehicle _x; +} forEach [_hook, _hookParent]; + +// cleanup object variables and EHs only if function isn't called from Deleted EH +if (isNull _deletedObject || {_parent isNotEqualTo _deletedObject}) then { + private _parentChildHooks = _parent getVariable [QGVAR(childHooks), []]; + _parentChildHooks = _parentChildHooks - [_hook]; + _parent setVariable [QGVAR(childHooks), _parentChildHooks, true]; + + if (_parentChildHooks isEqualTo []) then { + [QGVAR(cleanupParent), _parent] call CBA_fnc_serverEvent; + }; +}; +if (isNull _deletedObject || {_child isNotEqualTo _deletedObject}) then { + private _childParentHooks = _child getVariable [QGVAR(parentHooks), []]; + _childParentHooks = _childParentHooks - [_hook]; + _child setVariable [QGVAR(parentHooks), _childParentHooks, true]; + + if (_childParentHooks isEqualTo []) then { + [QGVAR(detachChild), _child] call CBA_fnc_globalEvent; + }; +}; diff --git a/addons/towing/functions/fnc_getDetachActions.sqf b/addons/towing/functions/fnc_getDetachActions.sqf new file mode 100644 index 0000000000..4f86220797 --- /dev/null +++ b/addons/towing/functions/fnc_getDetachActions.sqf @@ -0,0 +1,40 @@ +#include "..\script_component.hpp" +/* + * Author: Dystopian + * Creates vehicle detach actions for attached ropes. + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * Detach actions + * + * Example: + * cursorObject call ace_towing_fnc_getDetachActions + * + * Public: No + */ +params ["_vehicle"]; + +private _statement = { + params ["", "_player", "_hook"]; + [_player, _hook] call FUNC(detachRope); +}; + +private _parentHooks = _vehicle getVariable [QGVAR(parentHooks), []]; +private _childHooks = _vehicle getVariable [QGVAR(childHooks), []]; + +(_parentHooks + _childHooks) apply { + private _hook = _x; + _hook getVariable QGVAR(vars) params ["_hookParent", "_hookChild"]; + private _partner = [_hookParent, _hookChild] select (_vehicle == _hookParent); + private _partnerName = getText (configOf _partner >> "displayName"); + private _partnerOwnerName = [_partner, true] call EFUNC(common,getName); + if (_partnerOwnerName != "") then { + _partnerName = format ["%1, %2", _partnerName, _partnerOwnerName]; + }; + private _name = format ["%1 (%2)", LLSTRING(detach), _partnerName]; + private _icon = [_partner] call EFUNC(common,getVehicleIcon); + private _action = [format ["%1", _hook], _name, _icon, _statement, {true}, {}, _hook] call EFUNC(interact_menu,createAction); + [_action, [], _vehicle] +} diff --git a/addons/towing/functions/fnc_isSuitableSimulation.sqf b/addons/towing/functions/fnc_isSuitableSimulation.sqf index c808dc20c4..6df9c3d40e 100644 --- a/addons/towing/functions/fnc_isSuitableSimulation.sqf +++ b/addons/towing/functions/fnc_isSuitableSimulation.sqf @@ -19,8 +19,7 @@ params ["_target"]; // need toLower since apparently this isn't case sensitive private _simulationType = getText ((configOf _target) >> "simulation"); -TRACE_1("sim type",_simulationType); +// TRACE_1("sim type",_simulationType); // Biki lies, you can both tow and tow as either TankX or CarX -(toLower _simulationType) in ["tankx", "carx"] - +(toLower _simulationType) in ["tankx", "carx", "shipx"] diff --git a/addons/towing/functions/fnc_startTow.sqf b/addons/towing/functions/fnc_startTow.sqf index fa70d91cff..33cee1cb7b 100644 --- a/addons/towing/functions/fnc_startTow.sqf +++ b/addons/towing/functions/fnc_startTow.sqf @@ -32,5 +32,6 @@ GVAR(isSwimming) = _unit call EFUNC(common,isSwimming); GVAR(putWeaponAwayNextFrame) = false; GVAR(cancel) = false; GVAR(canAttach) = false; +GVAR(onMouseButtonDownEHID) = ["MouseButtonDown", LINKFUNC(onMouseButtonDown)] call CBA_fnc_addDisplayHandler; [LINKFUNC(towStateMachinePFH), 0, [TOW_STATE_ATTACH_PARENT, _unit, _target, objNull, _ropeLength, _ropeClass]] call CBA_fnc_addPerFrameHandler; [QGVAR(ropeDeployed), [_unit, _target, _ropeClass]] call CBA_fnc_localEvent; diff --git a/addons/towing/functions/fnc_towStateMachinePFH.sqf b/addons/towing/functions/fnc_towStateMachinePFH.sqf index 0adcce76e6..c3b7e19720 100644 --- a/addons/towing/functions/fnc_towStateMachinePFH.sqf +++ b/addons/towing/functions/fnc_towStateMachinePFH.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: tcvm - * Called per frame. Handles current unit state for attaching a rope to two vehicles + * Called per frame. Handles current unit state for attaching a rope to two vehicles. * * Arguments: * 0: PFEH Args @@ -62,14 +62,16 @@ if (_exitCondition && {_state < TOW_STATE_CANCEL}) then { switch (_state) do { case TOW_STATE_ATTACH_PARENT: { - TRACE_2("state attach parent",_unit,_parent); + // TRACE_2("state attach parent",_unit,_parent); [_unit, _parent, objNull, objNull, [0, 0, 0], _length] call FUNC(attachRopePFH); if (GVAR(canAttach) && { GVAR(mouseLeft) }) then { _args set [0, TOW_STATE_ATTACH_CHILD]; - _rope = ropeCreate [_parent, _parent worldToModelVisual ASLtoAGL getPosASLVisual GVAR(attachHelper), _length]; - [GVAR(attachHelper), [0, 0, 0]] ropeAttachTo _rope; - + // can't use unit hand because rope doesn't change position when hand moving + // can't use createVehicleLocal because rope can be non-local (like parent) and it must be attached to global vehicle + GVAR(helper) = createVehicle [QGVAR(helper), [0, 0, 0], [], 0, "CAN_COLLIDE"]; + GVAR(helper) attachTo [_unit, [0, 0, 0], "LeftHand", true]; + _rope = ropeCreate [_parent, _parent worldToModelVisual ASLtoAGL getPosASLVisual GVAR(attachHelper), GVAR(helper), [0, 0, 0], _length]; _args set [3, _rope]; }; @@ -79,7 +81,7 @@ switch (_state) do { }; }; case TOW_STATE_ATTACH_CHILD: { - TRACE_3("state attach child",_unit,_parent,_rope); + // TRACE_3("state attach child",_unit,_parent,_rope); [_unit, objNull, _parent, _rope, getPosASLVisual _rope, _length] call FUNC(attachRopePFH); if (GVAR(canAttach) && { GVAR(mouseLeft) }) then { @@ -108,60 +110,42 @@ switch (_state) do { GVAR(cancel) = false; }; - [QGVAR(setTowParent), [_parent, _child], _parent] call CBA_fnc_targetEvent; + detach GVAR(helper); + // can't delete GVAR(helper) without ropeDetach which requires local rope (==parent), so pass it to owner + if (isNull (_child getVariable [QGVAR(parent), objNull])) then { + [QGVAR(attachVehicles), [_parent, _child, _relativeAttachPos, _rope, GVAR(helper)]] call CBA_fnc_globalEvent; + } else { + [QGVAR(ropeAttachTo), [_child, _relativeAttachPos, _rope, GVAR(helper)], _parent] call CBA_fnc_targetEvent; + }; - GVAR(attachHelper) ropeDetach _rope; - [_child, _relativeAttachPos] ropeAttachTo _rope; + private _hookParent = createVehicle [QGVAR(hook), [0, 0, 0], [], 0, "CAN_COLLIDE"]; + _hookParent attachTo [_parent, _parent worldToModelVisual ASLtoAGL getPosASLVisual _rope]; - private _hook = createVehicle [QGVAR(hook), [0, 0, 0], [], 0, "NONE"]; + private _hook = createVehicle [QGVAR(hook), [0, 0, 0], [], 0, "CAN_COLLIDE"]; _hook attachTo [_child, _relativeAttachPos]; - _hook setVariable [QGVAR(parent), _parent, true]; - _hook setVariable [QGVAR(child), _child, true]; - _child setVariable [QGVAR(rope), _rope, true]; - _child setVariable [QGVAR(hook), _hook, true]; + // use array to decrease public setVar count + private _hookVars = [_parent, _child, _rope, _ropeClass, _hookParent]; + _hook setVariable [QGVAR(vars), _hookVars, true]; - _parent setVariable [QGVAR(hook), _hook, true]; + _hookParent setVariable [QGVAR(hook), _hook, true]; + _rope setVariable [QGVAR(hook), _hook, true]; - _hook setVariable [QGVAR(ropeClass), _ropeClass, true]; + private _childParentHooks = _child getVariable [QGVAR(parentHooks), []]; + _childParentHooks pushBack _hook; + _child setVariable [QGVAR(parentHooks), _childParentHooks, true]; - _child setVariable [QGVAR(towing), true, true]; - _parent setVariable [QGVAR(towing), true, true]; - - _hook setVariable [QGVAR(parentDeleteEventHandler), _parent addEventHandler ["Deleted", { - params ["_entity"]; - - private _hook = _entity getVariable [QGVAR(hook), objNull]; - private _child = _hook getVariable [QGVAR(child), objNull]; - private _parent = _hook getVariable [QGVAR(parent), objNull]; - - [objNull, _parent, _child] call FUNC(detach); - }], true]; - - _hook setVariable [QGVAR(childDeleteEventHandler), _child addEventHandler ["Deleted", { - params ["_entity"]; - - private _hook = _entity getVariable [QGVAR(hook), objNull]; - private _child = _hook getVariable [QGVAR(child), objNull]; - private _parent = _hook getVariable [QGVAR(parent), objNull]; - - [objNull, _parent, _child] call FUNC(detach); - }], true]; - - _parent setVariable [QGVAR(ropeBreakEventHandler), _parent addEventHandler ["RopeBreak", { - params ["_parent", "_rope", "_child"]; - - [objNull, _parent, _child] call FUNC(detach); - - _parent removeEventHandler ["RopeBreak", _parent getVariable QGVAR(ropeBreakEventHandler)]; - _parent setVariable [QGVAR(ropeBreakEventHandler), -1]; - }], true]; + private _parentChildHooks = _parent getVariable [QGVAR(childHooks), []]; + _parentChildHooks pushBack _hook; + _parent setVariable [QGVAR(childHooks), _parentChildHooks, true]; _args set [0, TOW_STATE_CLEANUP]; }; case TOW_STATE_CANCEL: { TRACE_1("state cancel",_rope); if !(isNull _rope) then { + detach GVAR(helper); + deleteVehicle GVAR(helper); ropeDestroy _rope; }; [_unit, _ropeClass, true] call CBA_fnc_addItem; @@ -174,6 +158,7 @@ switch (_state) do { TRACE_2("state cleanup",GVAR(attachHelper),_handle); deleteVehicle GVAR(attachHelper); [_handle] call CBA_fnc_removePerFrameHandler; + ["MouseButtonDown", GVAR(onMouseButtonDownEHID)] call CBA_fnc_removeDisplayHandler; _unit setVariable [QGVAR(hint), []]; call EFUNC(interaction,hideMouseHint); if (GVAR(blockFireEHID) != -1) then { diff --git a/addons/towing/initSettings.inc.sqf b/addons/towing/initSettings.inc.sqf index 03d20781cb..dbfe326d4c 100644 --- a/addons/towing/initSettings.inc.sqf +++ b/addons/towing/initSettings.inc.sqf @@ -7,7 +7,8 @@ { if !(_this && {isServer} && {isNil QGVAR(addRopeToVehicleInventory_initialized)}) exitWith {}; GVAR(addRopeToVehicleInventory_initialized) = true; - ["Tank", "initPost", LINKFUNC(addRopeToVehicle), true, [], true] call CBA_fnc_addClassEventHandler; - ["Car", "initPost", LINKFUNC(addRopeToVehicle), true, [], true] call CBA_fnc_addClassEventHandler; + { + [_x, "initPost", LINKFUNC(addRopeToVehicle), true, [], true] call CBA_fnc_addClassEventHandler; + } forEach ["Car", "Ship", "Tank"]; } ] call CBA_fnc_addSetting; diff --git a/addons/towing/script_component.hpp b/addons/towing/script_component.hpp index 2d9790ac20..c52e84046e 100644 --- a/addons/towing/script_component.hpp +++ b/addons/towing/script_component.hpp @@ -24,4 +24,3 @@ #define TOW_STATE_ATTACH 2 #define TOW_STATE_CANCEL 3 #define TOW_STATE_CLEANUP 4 - From 5a3f3d3b8220ba0c9e9e031710d44eab4e8dfdf1 Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Mon, 5 Feb 2024 18:58:15 +0000 Subject: [PATCH 5/5] Add CUP Terrains Compatibility (#9627) Co-authored-by: PabstMirror Co-authored-by: jonpas --- addons/compat_cup_terrains/$PBOPREFIX$ | 1 + .../compat_cup_terrains/CfgEventHandlers.hpp | 5 ++ addons/compat_cup_terrains/CfgVehicles.hpp | 48 +++++++++++++++++++ addons/compat_cup_terrains/XEH_postInit.sqf | 5 ++ addons/compat_cup_terrains/config.cpp | 27 +++++++++++ .../compat_cup_terrains/script_component.hpp | 5 ++ 6 files changed, 91 insertions(+) create mode 100644 addons/compat_cup_terrains/$PBOPREFIX$ create mode 100644 addons/compat_cup_terrains/CfgEventHandlers.hpp create mode 100644 addons/compat_cup_terrains/CfgVehicles.hpp create mode 100644 addons/compat_cup_terrains/XEH_postInit.sqf create mode 100644 addons/compat_cup_terrains/config.cpp create mode 100644 addons/compat_cup_terrains/script_component.hpp diff --git a/addons/compat_cup_terrains/$PBOPREFIX$ b/addons/compat_cup_terrains/$PBOPREFIX$ new file mode 100644 index 0000000000..f904236cf3 --- /dev/null +++ b/addons/compat_cup_terrains/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_cup_terrains diff --git a/addons/compat_cup_terrains/CfgEventHandlers.hpp b/addons/compat_cup_terrains/CfgEventHandlers.hpp new file mode 100644 index 0000000000..9cc1b0427b --- /dev/null +++ b/addons/compat_cup_terrains/CfgEventHandlers.hpp @@ -0,0 +1,5 @@ +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; diff --git a/addons/compat_cup_terrains/CfgVehicles.hpp b/addons/compat_cup_terrains/CfgVehicles.hpp new file mode 100644 index 0000000000..08176b77fe --- /dev/null +++ b/addons/compat_cup_terrains/CfgVehicles.hpp @@ -0,0 +1,48 @@ +class CfgVehicles { + class House; + class House_Small_F; + class Strategic; + class House_EP1: House {}; + + class Land_Benzina_schnell: House { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{-1.5,-3.93,-1.25}, {2.35,-3.93,-1.25}}; + EGVAR(refuel,fuelCargo) = REFUEL_INFINITE_FUEL; + class ACE_Actions { + class ACE_MainActions { + displayName = ECSTRING(interaction,MainAction); + position = "[0,-3.93,-1.25]"; + distance = 5; + condition = "true"; + }; + }; + }; + class Land_A_FuelStation_Feed: Strategic { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{-0.34,0,0}, {0.34,0,0}}; + EGVAR(refuel,fuelCargo) = REFUEL_INFINITE_FUEL; + }; + class Land_Ind_FuelStation_Feed_EP1: House_EP1 { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{-0.34,0,0}, {0.34,0,0}}; + EGVAR(refuel,fuelCargo) = REFUEL_INFINITE_FUEL; + }; + class Land_FuelStation_Feed_PMC: Strategic { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{-0.34,0,0}, {0.34,0,0}}; + EGVAR(refuel,fuelCargo) = REFUEL_INFINITE_FUEL; + }; + class FuelStation: House_Small_F { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{1.25, .2, -1.1}}; + EGVAR(refuel,fuelCargo) = REFUEL_INFINITE_FUEL; + class ACE_Actions { + class ACE_MainActions { + displayName = ECSTRING(interaction,MainAction); + position = "[1.25, .2, -1]"; + distance = 5; + condition = "true"; + }; + }; + }; +}; diff --git a/addons/compat_cup_terrains/XEH_postInit.sqf b/addons/compat_cup_terrains/XEH_postInit.sqf new file mode 100644 index 0000000000..32b9393d98 --- /dev/null +++ b/addons/compat_cup_terrains/XEH_postInit.sqf @@ -0,0 +1,5 @@ +#include "script_component.hpp" + +if (["CUP_Terrains_ACE_compat"] call EFUNC(common,isModLoaded)) exitWith { + ERROR_WITH_TITLE("Duplicate CUP/ACE Compats","Compats are now part of ACE - Uninstall 'CUP ACE3 Compatibility Addon - Terrains'"); +}; diff --git a/addons/compat_cup_terrains/config.cpp b/addons/compat_cup_terrains/config.cpp new file mode 100644 index 0000000000..a7020be4da --- /dev/null +++ b/addons/compat_cup_terrains/config.cpp @@ -0,0 +1,27 @@ +#include "script_component.hpp" +#include "\z\ace\addons\refuel\defines.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "CABuildings", + "CAStructuresHouse_A_FuelStation", + "CAStructures_E_Ind_Ind_FuelStation", + "CAStructures_PMC_FuelStation", + "CUP_Buildings_Config", + "ace_refuel" // not a sub-component because it's all this compat does + }; + skipWhenMissingDependencies = 1; + author = ECSTRING(common,ACETeam); + authors[] = {"Community Upgrade Project", "Mike"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgVehicles.hpp" +#include "CfgEventHandlers.hpp" diff --git a/addons/compat_cup_terrains/script_component.hpp b/addons/compat_cup_terrains/script_component.hpp new file mode 100644 index 0000000000..633de5584b --- /dev/null +++ b/addons/compat_cup_terrains/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT compat_cup_terrains +#define COMPONENT_BEAUTIFIED CUP Terrains Compatibility + +#include "\z\ace\addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_macros.hpp"