From 209999fc9d4782f57714d54394a62b090be5eeb2 Mon Sep 17 00:00:00 2001 From: Raymix Date: Tue, 23 May 2017 20:48:17 +0100 Subject: [PATCH] @EpochDevLibs initial commit --- .../@EpochDevTools/Addons/rmx_init.pbo | Bin 0 -> 291739 bytes .../@EpochDevTools/Addons/rmx_sandbox.pbo | Bin 0 -> 114062 bytes Tools/DevFrameWork/@EpochDevTools/mod.cpp | Bin 0 -> 824 bytes Tools/DevFrameWork/@EpochDevTools/mod.paa | Bin 0 -> 56272 bytes Tools/DevFrameWork/README.md | 99 ++ Tools/DevFrameWork/x/addons/include.txt | 1 + Tools/DevFrameWork/x/addons/pack.bat | 42 + .../x/addons/rmx_init/$PBOPREFIX$ | 1 + .../x/addons/rmx_init/BIS_AddonInfo.hpp | 5 + .../x/addons/rmx_init/CfgGUI/atmosFEAR.hpp | 680 ++++++++ .../x/addons/rmx_init/CfgGUI/console.hpp | 399 +++++ .../x/addons/rmx_init/CfgGUI/console2.hpp | 7 + .../x/addons/rmx_init/CfgGUI/editor.hpp | 218 +++ .../rmx_init/CfgGUI/gui_dependencies.hpp | 103 ++ .../x/addons/rmx_init/CfgGUI/ppEffects.hpp | 1213 +++++++++++++ .../addons/rmx_init/CfgGUI/quickFunction.hpp | 56 + .../x/addons/rmx_init/CfgGUI/watcher.hpp | 111 ++ .../x/addons/rmx_init/CfgGUI/watcher2.hpp | 7 + .../DevFrameWork/x/addons/rmx_init/config.cpp | 127 ++ .../x/addons/rmx_init/data/critical.paa | Bin 0 -> 22016 bytes .../x/addons/rmx_init/data/info.paa | Bin 0 -> 22016 bytes .../addons/rmx_init/data/retardedPinDown.paa | Bin 0 -> 22016 bytes .../x/addons/rmx_init/data/retardedPinUp.paa | Bin 0 -> 22016 bytes .../x/addons/rmx_init/data/w_error.paa | Bin 0 -> 7065 bytes .../x/addons/rmx_init/data/w_off.paa | Bin 0 -> 5728 bytes .../x/addons/rmx_init/data/w_on.paa | Bin 0 -> 5711 bytes .../x/addons/rmx_init/data/warning.paa | Bin 0 -> 22016 bytes .../x/addons/rmx_init/defines.inc | 18 + .../x/addons/rmx_init/fn_recompile.sqf | 16 + .../x/addons/rmx_init/functions.sqf | 374 +++++ .../x/addons/rmx_init/functions/atmosFear.sqf | 106 ++ .../rmx_init/functions/atmosFearActions.sqf | 272 +++ .../rmx_init/functions/atmosFearUpdate.sqf | 35 + .../x/addons/rmx_init/functions/buffer.sqf | 114 ++ .../addons/rmx_init/functions/codeEditor.sqf | 48 + .../rmx_init/functions/codeEditorActions.sqf | 102 ++ .../x/addons/rmx_init/functions/console.sqf | 64 + .../rmx_init/functions/consoleFilters.sqf | 82 + .../rmx_init/functions/consoleUpdate.sqf | 18 + .../addons/rmx_init/functions/dialogVars.sqf | 107 ++ .../x/addons/rmx_init/functions/epoch.sqf | 0 .../rmx_init/functions/eventHandlers.sqf | 18 + .../rmx_init/functions/getColorScheme.sqf | 14 + .../x/addons/rmx_init/functions/keyDown.sqf | 113 ++ .../x/addons/rmx_init/functions/keyUp.sqf | 23 + .../x/addons/rmx_init/functions/output.sqf | 48 + .../x/addons/rmx_init/functions/ppViewer.sqf | 250 +++ .../rmx_init/functions/ppViewerEffects.sqf | 86 + .../rmx_init/functions/ppViewerGetSet.sqf | 117 ++ .../rmx_init/functions/ppViewerUpdate.sqf | 196 +++ .../x/addons/rmx_init/functions/quickFnc.sqf | 34 + .../x/addons/rmx_init/functions/watcher.sqf | 156 ++ .../rmx_init/functions/watcherActions.sqf | 66 + .../rmx_init/functions/watcherAddRemove.sqf | 114 ++ .../rmx_init/functions/watcherRunner.sqf | 122 ++ .../x/addons/rmx_init/texHeaders.bin | Bin 0 -> 799 bytes .../x/addons/rmx_sandbox/$PBOPREFIX$ | 1 + .../x/addons/rmx_sandbox/config.cpp | 45 + .../x/addons/rmx_sandbox/epoch/CfgPricing.hpp | 1494 +++++++++++++++++ .../rmx_sandbox/epoch/Epoch_GUI_rmx.hpp | 550 ++++++ .../rmx_sandbox/epoch/Epoch_tradeLoad.sqf | 132 ++ .../rmx_sandbox/epoch/Epoch_tradeMainLoop.sqf | 19 + .../epoch/Epoch_tradeMouseEvents.sqf | 119 ++ .../epoch/Epoch_tradePopulateLB.sqf | 45 + .../rmx_sandbox/epoch/Epoch_tradeRefresh.sqf | 0 .../rmx_sandbox/epoch/Epoch_tradeUnLoad.sqf | 19 + .../rmx_sandbox/epoch/epoch_configs.hpp | 559 ++++++ .../trader_menu_v2/trade_placeholder.paa | Bin 0 -> 5625 bytes .../epoch/trader_menu_v2/tradebg.paa | Bin 0 -> 2881 bytes .../x/addons/rmx_sandbox/sandbox.sqf | 198 +++ .../x/addons/rmx_sandbox/variables.sqf | 41 + 71 files changed, 9004 insertions(+) create mode 100644 Tools/DevFrameWork/@EpochDevTools/Addons/rmx_init.pbo create mode 100644 Tools/DevFrameWork/@EpochDevTools/Addons/rmx_sandbox.pbo create mode 100644 Tools/DevFrameWork/@EpochDevTools/mod.cpp create mode 100644 Tools/DevFrameWork/@EpochDevTools/mod.paa create mode 100644 Tools/DevFrameWork/README.md create mode 100644 Tools/DevFrameWork/x/addons/include.txt create mode 100644 Tools/DevFrameWork/x/addons/pack.bat create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/$PBOPREFIX$ create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/BIS_AddonInfo.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/atmosFEAR.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console2.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/editor.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/gui_dependencies.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/ppEffects.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/quickFunction.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher2.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/config.cpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/critical.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/info.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/retardedPinDown.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/retardedPinUp.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/w_error.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/w_off.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/w_on.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/data/warning.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/defines.inc create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/fn_recompile.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFear.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearActions.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearUpdate.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/buffer.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditor.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditorActions.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/console.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/consoleFilters.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/consoleUpdate.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/dialogVars.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/epoch.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/eventHandlers.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/getColorScheme.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/keyDown.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/keyUp.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/output.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewer.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerEffects.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerGetSet.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerUpdate.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/quickFnc.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/watcher.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/watcherActions.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/watcherAddRemove.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/functions/watcherRunner.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_init/texHeaders.bin create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/$PBOPREFIX$ create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/config.cpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/CfgPricing.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_GUI_rmx.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeLoad.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMainLoop.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMouseEvents.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradePopulateLB.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeRefresh.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeUnLoad.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/epoch_configs.hpp create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/trader_menu_v2/trade_placeholder.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/trader_menu_v2/tradebg.paa create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/sandbox.sqf create mode 100644 Tools/DevFrameWork/x/addons/rmx_sandbox/variables.sqf diff --git a/Tools/DevFrameWork/@EpochDevTools/Addons/rmx_init.pbo b/Tools/DevFrameWork/@EpochDevTools/Addons/rmx_init.pbo new file mode 100644 index 0000000000000000000000000000000000000000..ba48f9a7530572fcf0b2c03085f586e0ba6d3318 GIT binary patch literal 291739 zcmeFa3w#vixj#M|t_emsR@77R*Ck4kOGx&bjcB=qYrRFtl28(oO|l`YVRzkZAV48o zIH#gL*3^G#sjW3FZB0Wxp`Jpiri2y5Q_&;u|({Vpkgj0?Em}DJMYXpvpbt1 z1eAWx0wK@NJMa5G_vd}yn@}C{E)z7LV8~nHs}*VsJ>}&Ae|2GKb#1ZF?+XjUO}TUL z&RsHp!Qz6ORPRifa@74V_-5|nrNwi|ON;##ff<#-psLi?2X0zE58vcetXk+^T<8g} z4pc9gKW9ly!6i9I-NP2j1+#B@z%f0?GpSL=u{ErI#`HM!&<%7Zb6&2pHaBM+>&6+iG!TW1`W%n(p@t1{t z0e?)br0@qL~`(6p}=sI;O;;k;mM= znOq4;RlJ^1OxbeFQFk(=P_9iWJ4ckT*y_nE--g=6dBq(Bk7K(`-q<^wf1|Vp!XDe3 ztVKuNZ(Ye3EDMx-=Tn8#5@Ori6PG_cEPi3VzHfP~F#p#OSf%gGIB07peg0N*oRSNC zRbg)^K3T4eS9JoS{E6pdVY$y!6*6Q}Z@y=z`R_A0(N-e91tGKQVYzv9m)(xTw! zUE}qK7kT{URq;Cglb@w6JE!WzDsMO^P!$L*h22;k%gSGTzcByHsu%9_t`pT%OTep+ zOkDnA3f~o!gpO*fwsQ4WWF7tWU#*rh!yfs(z zb+V$&$ZC5*-bhuko4v8n8(!*-?G1V1;MjOgB;a?as!!CC`^#c5{SxYaTBR?{j%&Le zYMi*-t5O)Lq@Du2ffrIn@!e)Gl$S5@t`4k;W%=_jO&a5%GF7AJYM5&vi%ltv%q~l2CaJ^g z_moz7m-<%MRC$Pd#Ul&(9&~{{pD#XT-v#`)Q_05{X~p46U$q&|ugXlKoeF z#m)u%Zhuw4L)uDPF}X(keR7fd1-WAq@93Loo%S7uDjW(_Rg2wD#@ERi8FPW}s!*WD zUrt~S$BN=o`Oz)r#R!*3QBsH?oeZ?g(3Nx%x#Z+p{GK_(mTAv)TFq0<)t(CP`hee? zZ=NRqUO>o@oV-pfX>nz{xN?iQa?5GCwY0`;i_6Xx%%=}4#fQ!;3-@RdeN;wFkAl^T zA{5<_IbHlS!$BCCoJ@a`-!d{5ggmRg)#P^-@)gCaybw)aS@kXECDmnODN<+y`4Jy^ zi_PZb`lE}x)#~7i>7$;NX>qA4ET4cEf%Zk9Nff0lr zhC#-(1%Xv*GtC(p>FMd_yuiG`E#^A{kXYY(FYTHn1t5f-@0>0r?3p%RS`v`LqN15f z3M>|vN|ZPbYj9ob^OqY(HXo&j6kCTaQ`J#jna@gqt<|ogn2anHX2SXyQ4ZIJiwWu; zYq2L3@~jg{z)Ei5NR3##mmA1nOWpid4 zp^Yokmc=W-E^VB4hauWzIx-zL3olj|jX1t=l~ms1UD{`jmqpXWLX&swfvv*(l;FTT4vN9llkSVKRs{j<@oP zLF6qqBgk8AE)~N$@lpjFnRbUQ%bv|wIauWHUgHgwd8)&P6^6ZF5OEbZb*+fi$s?oB z^r6E$CDP5~(cRBfTmjZbbJ{MPqLx$CSX*lHduL@ThMcfeA9d^~= z`jR1zaM&>7^L)rVlf;KH%q_fw(&f0*Zg)C)5?wOXD?(+4QC|=Um3fV!Z7^zcWMyCK zz-6sxjn{aB8D?5uXIq)!8XV^k$V!Z&G+;#VoyhSRaEWO*Ex5yAxtS&VUdQ{1>*c>X$ zscR31mM%8KbP;XgEJH{e6@@IjI`zd7XGkmq8INaV(&}T82=v zQDHb=lx$!qmyNmTDADYNA&l&U#K>v6m>9*eSgMh_A=Df(sHyatv%4x+ZCB4$4K=fL zQ4>evh7fbcAjb1T*900KY!8uQsYlv|Fv}VwW=2QSgTpKi%ann%A-r5Mc=6*QU5*(Z zC=VT8bl7AFsq7e}42hwW515BqyE3NgF-sf)$Kr)qV1FQN_N@+9VUdqN>@7F1^TteU zxGYvF5Mrj^X0;i@){&K!?c%4(h8p9k83f~ujKzMe6f#%%yjA5`1rS4paIu`yCX2|( z^9|&Ov;@Fqv2l?e3GvU%imB^l*-iPtBB)d^bb4}juL8`E%-%tx`X)6gVo zG3=8V{p!#|Glgu79>{E|IB*GF= zL<$GlWU(=d*i~Z)U5$a^$g&&D4_`u(C}}kvt&!r%^CXGW*u1$x*KzUa5yz~uq_Pe@ zq#*Pn(ZkM1w4Vv1N|TVqwTaY5ieDK`YK^2Pt3yule#qL86}91)OkrZb2- zav(*v3}++LXm*0LA#Y-I1ybf9G$T%WBV6pQ4F*DVQGgD<>WJ5ZXo(k9U90C(hgJIA z%eK1`Epf0qRYD*}s&O$Xm*zip(2!zW#x^Tf(GIw75Is}PZ|NeNPWrV*=4o!!lZ8_E~VP|{54@|!cm7N+F;R0vd7QQ^i-VT|U9w>G&D+fcvXbSp+f-H3>;_wDsa~*2 zpBY`8n~|}!%13s8#KaEO%0vv+Ct8q{+dzKEqjQHU{Xpg&Rr6-L_#0g^XvubDt7}xF zuNu6IkK%aKYHr#Cdku7PQO$M`T#VR3gKGeX2oZUvBM}~|2@d0P!B&G497BYPvSe46 zA*yK&qYN=RsWC)o$muIxEL2k&#@S&rIF&I(c#y34JTF^zr;Chg^1|*yw7{#NuD%=1 z@ed&~{PIa%bW~FoB078)SRWmO%OZym9o5=EU3^p%6~HIcZfKxpceyNl)Tir@h6o{L znj(=MQ;pS(D~{3GiJ`=Wtz*+=jA~K>xY)A|t;{pJLT#vUkyoebA>xd2_y!jm8C-WZ zM2N8Lmo6HE^7Te{4Gj(n5?EzqkWLoTYTb3$oqK?T_tG$@l046H5$QiscG!nABGpyEs#bg$ zrnkf5&}5-i8ac%D)*&3Hzq$gd$-mrz{q_b3X18QQo{S8}jB2{ok%cvce2prC#mmw{ z(+4e~Iuzrw)w&eZWM`JbK@Ta#3@5f7I1RwX$B1g39%_;esMOUSa^M49->F02YA>~$ zy2RBac~IT}Z5?(bja7uu)!&Pm5FC1O3|7_9WREVrG?RwY3{VTJ?lqgs^{54nM({X_Rv#nH8QIMkV`Y4m~Mnz*l}!ZWN?|0tK3Vs`|HYS;DT;KpmQMY|+(cD~1#5B$A5UJZt&EL=3Hp ziRcsutFRWlI8($X4_|1bWFVsn+sHwN(l!CQh%VEao$Yk-?dnCuM$iMXuyUW5JdNX2 z4^Bkfwf;=v6OW<(wjyAt3A1vfWB*`(2sxy~gfLTq6PP#@E(l8-&YDr#?;*ibf1?nv z)PzR)^hiIlU5>{R=a;CqSX>a6kW`D69|H{umbOIFs)FQP z>BLNiq>XwB3vg1ERL;!K#G*_?0TwI~Z>M!lOeRtVSq_!KQrQ@FE%Z^qFLu~lo_J`_ zOej5akRAvYGqhy-D^rAOZvu*_^3q7SSXD>)=*jSm%a$Ni(Gw6v3J<7-#_47b^;ks5 z|6INVp*A4_K~%|cE6(^ac2)~<-ki<<%&SbPm=}{wNc`Xt21K(QibUF+g~TannHF`% z^1|gMOLN?q#uLQP6;cEe<+#qvo=C)@)tPt8fXd7(2EaYc}&c_5GPXx#pokPI=fQ*hLqhP z$_PD$5+0dPy>s?M&l7P)bW99SCti2>H>oF1bSxN+l#{C~J>`M5w~LG_~O2IYvWQmu|XX24W zB)&Tcx1~OE9a|K?W0hXA`}sWTq18w`sU?olT_ z5S5+DhRV`GtdcZ;1!uKN6CKdPxF@L2u!2$SpH1cnqq6+bW z*Q8+~>l(ABMmjbqnmLSiOd89{9lQ8~<}}(hX;3A1?V<}>meHO`qZ_$r7hlj^M!P1B zGg#Nyc>AIWTDH-SNio0Nv5PNg7Nbsph1_!AF1n;yj5-2~#t~RAzNlG@dIF2a6R;HQ zMUyp)QBPpecmmrc5H_Q(z@l*l^0MWNM>eC*z@l*m%HhmL`Zg#BYBA~!EE;dXmg5`g z*`PeA#i%#1XuN^_5(t}7cVN-D19`{G#UqR3ep|fl>OE3N;KjN(9lT4g6y^HxM zG8t7~6Ou2n^G?G8KXC%70ypyc$i;S7u$C-(BQ(HC(FaHDmQM zE~fO6sT=c($>ff^HJ(th)Sz|pbh{!sbj|HAVWFG1YuyzV|-w{n(Ln(+YIS zG9%Mzn~q;rq)D%)O<%Es-0p_Cog$>NF>^qE+NY=C%DUo(OBT;d!`I|bk@#A=6$_H4 zr;d-y>cr#7>nQof_2W-vurenDhD#&(_>Qks=TzV99%|fCI=k^LgE+b7HNufSXCI1mrbUUvmX}oqUpqQuBDz_v4 zHUoE}k-CSl9jn-mO>Rg0Z3b@V8{&3sj5VN{owPOs={cnh*HF+5;x6Oi5ZgdjMrmV6 z_~PK&aEfhUFh0a>IJq{m#5OPn8{#&yxHep38_@hAZo|d3kuA1?h>Nv>?Ly-37o;bd znM6-&!=&=*X?Y=!A7&Ppj+Ctvo6F23O=RQxvKbcgBh%)Lu>j1n!Nh5w#p)%dju}p3 z16ZC*8n65R28=hXsk9-E$4i32||n~5v?q=GL%ihmX(Q1gG6Z%R|%2E z#I}(88KTxwQ;Jek$ib=nZMa_1o0&%GEz+HwbedjF};{yHrZnM;T4G^PX0S#F^qKY5r*YpP4Y-tEVR`f_i z*8vw;uq6!i(qQ>T8pX+76~hYMrP*0Fw$y`dS>a=k0Z(I7Fq0My#bQI$krs=KkgPbg z+tLllddLtdnj5GU(TR5u6bLU-Puc{*a&^*u!VHwU2@6ZRMi)}y9vume+f{D$2+@A2 z!`0z+2vxx~GSCulK9PP@`TX9ch-t}=UCLDcsn`NpfWxm(66@qkRpZj!`4TF$Yg+Dl zN|CL>@e}cv27(?^vVpO8PE~~mD+33*omZv|C0wR79-?$35gbo96@wL=)N!y~qL)X! z_X!li{nQBHswd+T3(W=9@fBIM9=*(4jF*uON`$(U&0wg{4SCjJkIaC$BZj2dT?*VS zgT);~u|&8_I>&Iw^8Zkk&&Wd+T7aM@B0V_7VyVdn|ek8WczlZYjyBPn3CUjB?zoZ>s4t1Ms+L1QO zGP_cvPD!5w{yPKMElC4Bw|G9xWYV-ZWN7@O4V%d6Fw%fFv0Q1QCpHKkn6etl%9cnV zQC2Hi5|%OXu$0w|i5e$+>Ck-8$dkc#V$3zM6C0BoF(@jL8e+sr#|MqIIPOo3wj`TO zpOo~#z${1d;9_DfcK$q2Cqlz!FJL-zeP!f&J$y+=#j-W!zhSrZ@!yFjc=2D{;j1R& zPx&i(>x%r1vMEOXO4-08e}x_pqsGIy3%Ew?W_ipL)qz?3JBu-Sp+4V%qh+z^AGYD=wS}OnTmfvx87*Gc?ZV3b3n4H2T<#ZzrgI2`ho zk`tZzTE$Zv_%GPDQT{tJ=;vW-ckxYXN=C+lnzH-IXxs1e-|In+$6tm`HGc0}a$wdR z+boX#6oWW&p?Yw;*BhKu9mGtN*Z>tC&7KSM28<_h=d;8+v#32dugfgWJBj(OG7NWd z-8b346AvI&$PpRu-%(TMEB8RE$ljy5qBX4yhlAC(WMq^DR_f5#S8tL@$FwSM1r7Y^ zH-QR~Gc(M~JXJN`Y9bssS4}E5-JDiNE~g5mnZdZU5ZS+$M%q{-SGO8TOU%v@ONhHC z!@e?4l{sgH%j+`k|i{o~ml1bnL4fva3qOs-i-{N+Nrj zWrh_8c%w8maOw$T7KL0+CvnQV_AO_V~+jW~2BbP154rBYa4U zUO$!!_#8bKqcSP`C?`*~{U!6dOY>}W{HYoz*fi^Vs%8$Zlh8LWrGafmUc7wRC_ACqR^T%%u?w zzJ>1SQ-oM_^jzd|+XiXtpQuEJwN2W$NmWADZxBaCeWLwZ1;JMv@K02c+tPAtLXdvX zoyc<5tQKX>oVFwYxd}jN$U(qfoHIv?i#@w7?Zyi6!+i%Ed>_7_mzh1+Zlm9eQhFN` zaPf6Ttcj443V96T@oKFnTvq7~F&`<)7y~F1=@wfUIaEj3C0%Db(C$j9=zQ*;TZ!!2 zyK7m-ReX%{dbit(&-L%NrGdC8(lotC!&4~&C%u=9ABjt;iYRtJ7@S{G0e4W%tH_|{ zF>d#+n-^FsTB5IxrxIhb)He{(XOhq`d}vZ#T+e}2y+c%I(P)xpI0_K)BVQ@F zR|QrDWD`mr#lxGtMvSx~50w0(&ZeiQoAUzmP|FC-pUg;+qg~m?EU`*jjU-~YWkwq(Nz$W{9|S4Hu(OFAzd=FYw=GBGI0EFJR74w+1Z?+0>^y6L}~3B(jiC#7;fjjK!0!7-t5QylB7zIH0Vm z1LpJ&>_B{MP(%iC23qXdxs&N>!J5njQ=@q#RvV+6Ci}bOu6YJ%X2%h4@>1!v3n#la*eY4h(eKrviF31iO%8y9ZbY}q*Bn%8EH|G)TR zX6T@Qr-f~sU{=lGLH~qe{5V3NVuoexQ>U00%iibQafdP0)J*U%AupTpwgGXoxo{@1 zDh|+%HeD{KD(Ket2@agvXJs4D<3w8*LExmoL`;^I1wtW=$$bGo{Wk8Xwrt=*El%T> zPu^lxotgIMgvEouOk?HqVSBr9$ zCzVl+MzGC6it}U_Iahwoh(N(Os|Oo;0%cP#-S8-B;Ug! zPqqGd)M*vBj1!v4h$G1+zGMJxyDJlyM{-=(H9|IWzY-+LQAX^PV-j>ScyFmIQIP}>ND5k>GuKwrYMUD?^HRGP}|W!f_NFjXG$&<^JY zsuQ1C%_4XyCC`ns2~x5rl!&782)ZO8<7|#3b_@ZHT@3eGCrKiIt4fg^5WaI}?r+ zhU^9|`1(xSjX0#3o0t@`Upa45I1JvL{VAEyIHZ`9m=t7G%9&0ZF0?V`O>nc)WhND6 zmH~`KmYNpCjTrH(m!GL9vkYJ>=qx%0SyVxcJJie1R+L!=FcxHyI;SB;j82Yhr6*kBK+!4)xjwy&)%(F_|tt zGQAAKtTJn2dtujvoVfou(@?|-gW=5N^9q**F$ORhnxGTJ!1aknoGO-txU%_F-Di#( z#3x``DHg7J!(p#E81m9@;wE)jF);vR$|<#29_C zc!T4EK6M9~?xM87>O=7sE&|Cz`%>JPT&yApTQW|HsRwWl)shn%762K$b=#?4c%Y9S zZbQbcY8)jDh%XGv{@KW03x^)<42QZd zl~gHV6@k>Z@($f3$eKk<6R3)K$vh#NJPEMKycB6sqs!6^nxJfhDFAYZc@|Gd6^U^B zlgf@EoMhLs$SOhReby{Xh_W1T$kyQ^pqynhIMg4K>7F%i|9yTer%l9ZIksSE&oW{L z4Ub~8vJ4LBoi2=v`2p|XcwCvA2w6FFV8|{qBcEzSsvYE#L6sTPi@BVaTB;LbEXM~7 z<7GpSF(v?v23A8O)=Tr~;2|&W)UCMZPG!8Xhs^6=6|OYQXq6o5G1{E-2JS|5$I8pamT8rIoQDeV}S8j?HHrH1U#q$Dh;VN-F1W1woH(y){IEK!4Zb-E;x zot;7wV*+AW*FPna#8VdP7j$VM`$9?!j2xl0ywd84$7fwx;?QE*0JM<3B%=i;^i=Vt z9xX0QRblQ^S2Q%!HzdQN8qDercRuTC64#C<&ak*-*Ggr>o`t1dhRmp8fB7ld4C-%l zDno(Q*t%L~_LO?*fyMNJdbG?@&SPM_jIC<&bRg5Bz1$Fj^({qhu zcfpYmN`)>NJQnB=D{%iX!<9u}1x6w-aVpSIq-k>+94K3G!MjtH45b8M`?m%fD0{>O zlFJj}Dn}Iz*X2fVwd3?qbrwj^qS~BRTv^QdAzdNJ92#urBp6HB#7k<3Fvy7zdhmgH z3EAy!1ak-0u^UT=80Io=N5{%yjzq@dYm!Z^7T0m`(Y1#ykD{kX>i7g(%&I6ymO8hk z>k|y4^(mP_Ib4t_u}+kKT}sFrAUOn=#cpu*k5M)L)F^>1z_AHsPjOkPND?BFM+CG{48?pdb#9eqWR<>&QS4Htv0U;d3*_0(^srA;2G_o zmS@x~GP-cj2y}^O#2E>pVB*#E_E-xsYg%m`^u=v;&z6 z)x61P1!`GVxV zHo>ZTyLdyLiu)Y?76bTWy_dz zFF%T`qTB0qg+ulcloa9uFMiyoYxF+rq#*pIQx|c>L-HKDRFQoLCm<@jtrtogwg{in z;36?qs6WxAiY7k`LtVoKyWju+;U3Sg5%Z3{W45cP< z9swU;=u_nqtlo(ocM(y^$XMdRfz4Is(yE#e{X(6Pq#70~H8A9Id}>23o*6^1b_dv! z5mzWdGSU${)LP;tM-$@yoKGt&iDmwYmVgbke1~D3AT8;L9c9T_8_G{QGOg;&v93ii zJj5IttjiMeTK1uAq>+R3IzvOwX-xm{K1knO3=z%=IW2og4bH~-tV)pU`qPVyGqq{e z+I%d8oqor(T*oImw86Cv4osCdziRTfne7e@et)p`;=g zl10!Zg=`a~2-2`z7}oO74k-qZ3fWYg?-1j&P6}!~@^M&X$c$sZaGMLxUQTq-%i3}S zaT4a}Sl*6}J`61kyWmONxEtOt@A)rkc`J3eJ$qs`e_N)$8`EZWD*NA>&&4NpH z0I05h8^$~fD=<~(7Y_>a+?+)EEic|;`kh#s`;+5S@>Z*;pg zNMZEks!usSg~C~OC!aIbwHY{}!C~-ZyH80r;z@=rF*RhT!l>cQRvjp< zPYp-5YInAN?&vc_40~c?XjTNOUPU^KE=q^0;1KJBe58TPEqEDIlD zTn?f!X8@}a=Uf+l(S@Erxm-?l;q2#}0W3z$sV=xX(-0{xLxV9VvB8LUu8R>;;8YjQ zr7oQOsJGmGW{hVrC$YKs=Rem)(UD+IVrvn5u8YxaN0*!)tnUKC}Z3JORA)qyfPS=x-wc_cA-^gnYEC)E$}5Nh*c zKW@~lPB^Pm<})y>EHRelhGrN$#oKUd---)4 zR0)Ig%Ir(nt_pd*365`Z#jblHK(D0nsJO>t}N9;k@L%LODIG6={@9e zCvse|6FHc)Gji*bGZWX>8Jfrd!Y+dc#o_8kT*Si%^9H%h%pboM&&TXvNRn}#MxiADd2#L9>N;v_wTJA|#O13Gl07vg!cR4X@lqhwd@Mn2ETmFcI1 zXxJCVCFFXyivUp~jojwxdkD+S6%x-3c&STFn@rWVqeQf^h^Gg{x$#w^OcmWSdj}Th z;OcNfgbgAk=)w7*44IWzL?BzsF|YBj)x(XA3#CsG_T;lfdEUZ4gy`IyV9i2hVjp)&iz-qmK% zZhoz|tR`$E2Exuv*cv`u(UUW$>V6VkieauROMR%6nqqv)*8ssdF(bcjoS8AzeB+Xu z(!g4r{d&_1ki;?r2V6|YFDuf@t37GcSF9j1itFi%a7}Zj)j@vRr>8B1e^|I=@w_yA zP5u;#ui#d%%;{-s*0NC(UI#4x6kp4nfo+nc23OJa73r4g>@OhP0Zs0Kmj2nb&rwNQ zx&^JRNTV8#u+TCyt%$aZtI%n?qP?W8&I@@~5$3@gd1((&x72)0^{VE9s=9OW8n@0w zkE+A#AT+m`MS!|JKw1EH4KuxuGu6T8=JBY8px{|0Pjze5&#`WA)=FsZe;tGFR zv2@4%9MR2I&-^Nnl|`gx&_{+`#VGlCw%QqaMQ3v#jv<7Q;q$d6cxFy4Skpa%qi3PC(t*z^!a z#|ZYpG@w#f4sf%0pScAAYo6=CEjm1Jml!#&$m3OT`sKrAK z#cS0ew~F(^X{)#wbxwIXZC3ha1}?hF%!K2EevltS)VPyy$3ufSB86UR&5SYz_chTT zuL=bfDxrTCqO44zE|@V{GKs(#D)!=y=Eb-g&kv7<118JXsoEEbBr)rPn-@8hno^XS zGBty2ttWqI7)s&|NkzFB80KdXF|gZD?kOiHV^6LTf7M(?tT6>?#MTG=wM?L9?TT09_CBJz``0}GcWUP@$$bz*6g(QyMZs704p zb=@EqywwD;qU1}Lx6p1Hkw99BhR~uF5u45lz|hAbtP~1T3c;YL8kD4(N(=k}eW)Un zra@}i#TKdekJBVs;lf3q!~qN_!IFE>?;RXQoZeA|B)Ps7MbO&~k|(E~PL};b+GNQu z41&4v3=)B{ISwQCg`q%AFb>vaB@3{Qu`3oyv*W2GeTAycvZZCHzN*xNO$W;FVx1er zpUG=|&rfR#lRV3q;e-R93Q3EFH0dR;ppTC}nw^t4b(wl2FAE zB2y)8vM9!pHh6`(OTAUxO@)&yJmp>k%p)Bq|0q#7?}oW_4oXcSBrUI@Cl-Px7Vk6? zW)s4amT=k(aRQ>m5japI5{`bM_^cYAJmNItde~*2kk3N~S}P`#Fm;V5#C)rD@^pGz zdbPI-w3mBCJf7QNeDC7mAbXS zIY3qNTXI!Y^2oi;BnQhIjd|V*Pfb-A(H;>4@V*=-3m52!0jxRXtq#Z}sZu>~X+u>zzwL@%Zd<|8T;F<2}+U5&(~FKkXXmj}%LK-f$qY`WREI*7fN9)Eb^ z1++wY2eo0d7hoUQ1>Z3_Z1#X3$h(*!vXUlyg2;{rpKhKMT2&=pETt_xhbFwpJ6t<*UG&l+%~N(G zk-8yKxnmk)WfNA!Y=ycL?A3+d@KSGB(+5dwq%MFd1XrsWwzOL15n?(dy@-=8F+>Ex zRd`De<93!Ba)>M?uhgWCm>${)_9zn}`l6%=(DBqr6}Ko}Q9B&Yt8 z4BjMn5mO%okM>74`El@Ougfe?&@0L2#P(cnN$X=`8kDLykJg~&OS~jg9NR2MFsa@p zHGV%)tawO>JS9KKKWYccDpsk@(7e0Ncio+5oFSA`{Z{+iV|A-&oRQzIrhZiY@&_*RLyf9Xr+$q3kF zLQXc5Z-|+mJZ0vER?IsJb;TkU$q0sI{7JVZ`c0lfI7q0Unld7~aN(T1oQ2Eg3>O69Ymoy_i*Ui5I|&@chrkQx z+_8YbCj2At(gh3do{irl`1b&Q`DU&lY|9gbAGihK9sD!?iI6&G%jKg{Q@xOzi|Xh{ zgxzkr%1;5_E~wj&3y%~QKYG*RtLCDA;`5{{_N+b}`B^%HhvfhkGMx-gUPa&oHvw)S z^;5WBfeXmlZV46lt$6>F2CIli2=d@_yX@arD$auh-yrzVKGf`{xgj zA3vV!Up?3_^FOIx*xG~-dw#yKsou18Dn8u%^{V=|o9g@Vk)Lm;?Tw-Q9BbO1M9R+? z_2{0}*N+q|!Y^->-c4N>hWW z9{k;%a?&Y8a$EX#ohAIU$b+WUA8sqkYZq zf2nr!wCD>|J~}^|(@@X~d{gd9`cmWyAyc$x%YrG9J*kHyH<(~AK(D+IlZVSi|J~sC z@mHSsg3v(Zxg{ey`jzjEy~Zr~3BR|c4rBZr_i@J?Uu&G2!r=S+{AW|Q)aLVWcd=XM zSM%9BRs7Pzla(`7D7Iehmc2)~Bvt`@9qVPvPpf zpnt7n_Q~y^I=lGKb8l{lT+!CtxiI=s^v;h!ue@OEn5tc=?IZdG=uaft*ZEwMXg@dK zbP??TR^I;$^`bqJtQ(|I2mZ3i@5jF&Y^VIbqO*1LyRSYGO$EQ(9I0CvKVLul>f3+& z?xY79+f z?One<$lzDeUemeaVg}!8$T&}hQ`x7PabdmdD9Fz9($nYijTfKDLIMZ+tKsDdpv(TP7eV0RJcSNeBa+g~+({?PkC4=)c7eK`E*m5mLX zQ$P4Z=jgiAbx*!R_@7rWd<^1;U;gn8qMwMjkQ$&L@NX;oo&0Zv|71Kd@|$}+!<-f7 zv<6aN+xY0Df6XNk%maTiHKZmFOJn$sIKA`ak?&4UW$>z=N$+hvSuErCz z{1!%E^7B=Ig{E0v_I~%fLZq%Ze>{WH-ypEQ&H?N7z&5k}w^rGD^pc7e?AXmn!jHcsA;M0Z3=L^|UKK8HUM zYSF!1)%%=0Ja9T5JvjQ{IWNy&{&3RiZ=^fgqJO9HK{zr)aAHnH+Q%kh&s(1F3b}qZ}+=~ZHTemqT$^3n&cldL= z9Y6ge!{^JrJ38K6ro>+(-rBKWXgnv|yAf}^aDeash&Ofso>jx%2fw!_;&)55{}kyz zD}OY)PX!<88veE1*}OcMKySA!568Q=>~G@i!|{&N4xxbv0Hx6JjC@2;9ct z7dr^QbLIMoJo5ZL8a>k0eGacn@5lCUO9b7M<@fL>rdo7QmWSiV)b;`NYgf_hEkZ9v z9*%eJXiwVNa)!0Hzh~Gh!P49R`1xN)`$k2(W)1tLY3s7Q!h+8WcmMgOjY*RU|IeQ5 z>!a9;`XAAZ|0)0H@A2d~D{ds^5q@uTyuKf#k487Qn(C8HH_H0n@t&#U`O;k3|CV*k zZEfi2-NgE{WB=S%zQ0AkicYhKWFIM!-J(lX&))qZQ?ZN!h6C*1(eYJMfpSIlD`Y(OYfuFSv4Lg1` z5dTO2W@P2fFZ(+YPej_bjdw8ozy6-Naht;-$6xzLyO7eX^naJB zAu_c^hG7pIO)7bK?2^g@@Ps`dBirYT&hO~(U-JHB(krH2c`#6n-pC&}z&;hrFzChS zD@A%XZsN;tPvQ6v`?jm}_E-P-#rNw@FN}6QA%Oos`PH|-ZAyLmw)Sl|yg~R)?Emo5 zd%P?5cxDp&M*M$t%*1-rwLueRgKA&#`PQ-ax3tgM{@{ZTKF472duvB+?RpvBD%7IC z5NXN6ApbmVU;h~fgZo>jw(OI~$B?i3ozXM$bHLlbyl=M*N27BZk|%AG@jKF`mWLx< zKkR~kk?WISx&8Bni9U97`J?lFUt6B)cbkLZe#OcqahNIDqr=sp{vVZ)chTqWk7=E8r^LP8XO`BwUPUz9yyGb5jKp(d@ zbSU};eU2PER;lnG^qx8+V-}+a>~noOJ`A3?S12jOXS;Cwk8i5oJel$TTH%$)YaiTp z9pnEucXl6*_JIGjW|wPwJLH7Q-;VvJ?QfTbFfU4B=yS=jj$XNaq1IHAk}^$}KOtfY zPMzBH6e~~qJ1zaE%5#iQr#-b>fr0O|=6woG?8D9$S$>E-%uSiLlhxPviJ7?Tgz|sc6-yw-gB%x!RKUe z-6k0Z{taNT41+$ANW(D>jzC_N@`&epdlmbD(S2>pueWVu${A*lH&HUpaj5 zzf5=ze;NO;5gzTdZt=(V%u zDFxnTs!ch$ekFU3xHrPb=RZ7k_DCOR4U3$?-7+<5NDL{&T~^1G?= zebzt1?*<3}gW=8VPlACACipgS&q0q!L&r%KzZ)8RWqF1^l{7W=7R&EPOa)V$TG|+F zY7}b6jN$ZuyV=#<{^py*f34M?Dv zuD<_%x&Ey}0r;=TXRffw-L~gu_8jt%yL)%Koc}{~U67uhoFYFD3MI|W&5FIR6@tl} zy@GtyPCIi(mIo4#B<-v_%-%nGVxo%Q(Nljr$otc?N1i#z=a()9eDb6sPiK$3vy~rj zK6a3d=kg0#e+BqEfy;*p@P{fG_zJzs{3M=MHuTmh`~|&^Z7Npa5+V24rcLYR`YVOp zZ5W_281}vv$oKF z-xUm&l(6?-I3_IG^0lwY@jvW;CD^a&N^bi(k@q{mj92ukrl;RA5dXo;mnV zgqMfquT6~b`3EB3y}c*989v~5kgVsBVbEv&`t>JexRUtqO7KaF2cb{-E7vRZkBIsv z(;MUOtr)I-<5$tekN#xwcZQpS=Gk_;^NXXFf9=lpE$Quy|Cmp#FUJ(U%>Ut2#tr*T z{S_#`sAP7l+}?;DVfMohPm<#sQ>(Cb<)&J`|0T;-7Ai3K-QPS-;Vt#3Q*I4`O zUhCS2`epxlzV(yx5iXy&?zI~kGuD!%luC}V6J@i`MITEcqQ6X7d3XwDYb@F(k=n%2zihkdE=(?AA{dT>4i0~uI+CN|TNY}M5Bi%THy?>z6IYmj^W0e(deOlm~VZ7m3O`To!vrX)6W(7{Q9#T@^mu##CZ1p*(1ZY2V0f+ z;kFZ4zgASI@Ei15SsOgY$`kvrsh8tFVE3UcncvXI$eDfnWElC&MWsRHXH$e>t^>oq zXsR^NHVsQk8X+uto2+jm{1)xMhX13!%| zB))wrJ)=>E5&wSv_LQj%#{UhQL2w1Gc?#i^EDzt=T?2Y6@*u&oJRIq&+0E-W_`R3c z@8Qo0dwF{Tec2V|_zifkI~tYogFH0e%RP^k2lrFx-t(-#-`RcjPkDLJ_U~vE__&pP z(9y2ryHe0W_I^>9&`_AK8@UZ}B--UVyw* zf;g;w$V02zKG=WC%R@A3|EY@K(RWn*zBQ_`KaHk_l7@&}KN&yPZF)u-Phq_%!e`l^ zZs`PU+6QvUB9Uvr%8cNkXp=NU3o`1^DmSrpRwak7@t1!q9uHMbiOc zSMj-y1{rP@8r}KlIv6bMHNiGCH}mlIzgOZ#^mlJk@+7DzX-^Q2M!}KU1u{JR6+y*s z@UOLP-$_MZ4hXH$XiExv-_$PbM{i|$5ZX;D82v^0CeVqtN8sXURJLD4KJMk@MJo@O z|8Et961jiix61wi-(85`PqO-jU8cr!-3_A|413gwcuC=Rhp82_v9i2x=@3dv3JUX+ z-->o!`$(q=`d;wV&YevuLgD7gcZv490Ns=Io$!l?2j)LU@G!U(d&m#Q8w5@flIsf> z|L`UXH#9{@j2M^HQ(q{c{tupc{}k*0{P%>CR4$%^JhZ!)70B_Psom6?&&9K#=dQMB zuPh(1zq^`uD)s>I-uH(o>puwnpK4N`i~MR)=p`I8?LX79Q{i`qaNta|Nv5Z%Lud#4 z75?HmKps{-7dlJ_@}s>n|B1ZhZ|aCJd`bIt(cWVWCibTPq+(x4|Ic-E{u}n>T<^xM(%As(|C2pJWwN79 z)(24@3WIX~-qc~*UmQIt(--;)`B2lh?Tn&-g#L(s#<2Rq&jbA&zbAGI$Ifu_u({jR z(bnHA>-(1OiJk7KA|Di1weqkmX}yr|Fox_?*J;W2OVe>pA;I z><1K@y-(!B-Ik%qALPG(r!xM1p%ePi=16AcU+fTS!SDRi9!wI~b+(!#rjl?`zI#kb z#<!9xDFx?VobtX2{X>5h{?q;|?VX1F?0&dZuD??V9;?NA=qm(acI%a20=)`4Y7h2b zaq?fyjNfl{x3nY)i?H7f_FYFGwfxY7FBbom_DlsNpOqp^sh=SF3sb?-;^N}uwpYiV z5h{ie{H`rJZ$m_B ze@8dMmj(rfd=y7z`I^}MtU z!Gkr$W2#I-`z~xjgnsuPYHMTkBybBp48C0Wuk_bc0QMJ;!hEwRzXjBvr2JQFsQ~{0 z{BqxKiAJw!iMI5;TzWm`4-3-U-0tWSQbT>pob9kDJ9o?S@w?NeNXkAum*TV0y_f+@ zdP;`x?cLJYBqW_-&pUejA2swAA7k+1UjIkJwB2&Nxw!XLtS@)VFxHR%4aT#MmH%?@ z{O6j4NHK#)e^|O*5ISTS{n-l8-Slphd`4BgVG7n_0p0bl!hXM=*-r2|wi5CAi?7c% zQTv_SeDWOJ`SX9_>A};h4Ic*ov+$qcW0LsK;G_}(W8o;$RqI6g5DJoVi9Z<~rt)Db zFy(HZda`Ns-kwJ+f;b+{brhd*k3JE7BKr9;WPNKv(izBu1vMts|F@|gEu^%$qdy}p zjQj4t?Gkdy`ucazl2*okandV@XR$x*V`SW;(bq?gcn&b0w}||E;>s;3PvE=6=Px9u zLH>jW%+DmFy3d~_>nRH&o6z0};U{gIV2`1{WPzdinI8#{5oVghr@IX>p@Z}R{`Ej# z#y<_qFo=O*&tV2cc;qQ;OLvw}Psg?_ROcA;7w6aCMY4L_$JhonDM{FWZa;Y~`j@_c z{4F^JhD54i`MF2?wrqZ1c2igPV;gGYIW-Kk!^(fewvnC|l1LvO?R)jlB^ZWJ>-@L= zao8r9`7ySg7es^+zr(hV;eDgi-x2#$$ogxlPs6eTWf-8v2mI7-1K-NykM|?wee(f= zZ|U)Wd`RlwHtBOM9ZwMa;6%4$R|d=lZLt&E?jns!|C=@2@W?hdVpduC=E1>r?EP_l zJ9|@5U*7w5ouoh5Hd!Bx2tso0t{d9N_Ko_-+oZqCNa{lT7{&h!Zxi|T-nigTblb~S zd-fkC_3!*ps81f2vYEB-Kl@}4zibfOg2*+luefdCEVUmmc28^w zmEL~pnm3=m6Y}r|@E4Z>UvtD+`u->Wj~M<8zZbEL^sW0>tYEMS%RYtw?2`4@gk|4Y z#UX2b^S**|qOAn;+InwoP7tD$L{<9i-9K|*b9$#&F3ErmEH>ZJLRts#m zM@|;Y`bPTKz%5Iki)E46Hsu)o)|36ukL`OE_>0S6cO7*4Ppt`@0RBND|E&Hkm{twe z*2>db2;(bLrcHZ_J%_i6q)bzm**(=b@pvnahyS(YVi6-vhJZj<>fY{xJ+LxFES zO8o`H_v{hVR-V5TPCRpv$6pJdJ@U;RvmrO^eUz@}^&R*|uq>{aJ;$_jFw(GIfg=d( zJ66gtqKSfxbjPG5Kaj6G{Wk45#|^TXOxi zSk~0_>@Q?EB9xqIR?%RpNLCM=>qT zFB{XAU-#NKzdsxAvGS-bqM`@zFD|Y-#-77l6s+XZk`wm|x#{U+zcKu+mcG`EuRee1 zB|)49x~_3g*#->58UEiRG4Y+7Z$cWf;Jt_cUADi_uiE@&D`k0b{hcgx8!z|&x|dB6 z9^dQ4WgE&cedDPv4B8cZpZQ?UE?$3sh-tAcoc(wS8NS#Q zu-&~?xt~#}6vg*pHtg)4uMj+4G`P zrF&E6D%%K!*3w-+Pf_?urVZTOH1ttS8|`?Qv!~)Ta{imFzW+WVG^8L;%;0f}wk`L4W>y9}~SHMM1EHRZ3X}yxj zZ2u#D$1&~n;E3_EzHjLeFwNU1%Nv=-ai58Hv;Ls}tw}zGenR`iz5P)oEsM1Me)pN3 za+*$rxip;V7}Dm&N}3h*whsGWrM^?Is;AX9ccT5a{#kebFX{D1UnoU?e;+DXHsZC( z6WTYEX%e%TR-o7l0`QNS1||B>o~L1&h14|ew+s9?ifO8}g0zR4n#Lhf6zzHB-0;&v z$(Gb@U>SX*;xy8}?m}gns}uOOwaECDb_>Va_GP57@*{dM4biXQKcZ(&r@QVX_(1F1 z(Jf%wL0R@=LVd-Xlr-gw-2&pHeUB_WPI?&~Mfgjm4O04|_0MfdJxr!y$hK51J`6UB zKPxYkq>0l&9m3*o9f$k?&YcQ}p8Pv36DshR0e>-V_ghFnGzxjaw6u_vafbEa>pgR~ zPgSLH(?3G|D#ue_??Hsk#m_HvfB9`3>$5NVj@Se9@E%i%ARH?;zlXHi*g5S)KTD8S z8@~6E*{vjP3Vg#wT;4+JFY7i6Ty zNScAc!=8;cJ4Tks@YQcbpXd|HN&Fc+<95%!$^vrzTzpQl!ovL5qEB2&-xu3I4l$JU zRjhx6P$^CWu=-gC}Ahdrxryyv&#uzK57|GQ^( zS;-HhmVaQFzb#ov{U7InKJ@%!a(WTozUuFh{wD$7Plly{Z+d#qo$YlW)AGwogw$=M zz8l)5`j)W<@BbAYh9@l}&pk8AFdohS^*habJ|Jtz?!;*_lae>X2+=nlIr}r!ZvJm# z7{-SY5-gjk=Ce;?_k3@DT6D?}u3r4uP3dP%^#vu*H;rpRdl&}XgZ7aHxHjjlJ!PlX z`1?qj;je%Fs~iU2^JdxpC^`K=YCqbw|Cju3yL25GQBX&Xo!&6W2yfWu{x^(tI5axsjlw}(KE$Z zEnK@~>HX^-IQ-hFzP|_hcI*`j7XI#c53uq=Ey9M~irGGV5W`3gzX>Py>^3zuwXpIN zuv)jZDJs*i;AL`JiL$yDVPiqV`b`~U|AfY)r+t36e+K^OK3Sh+@Vk-Lt2RWdEQ>Vi^3*A4MODz7}|Y$1zjMj)y17^7Nf|h5aKC zm$3S_bi>SZW*lbwfSa2={N4wq10lEDeZwE=Z0=mt_fToUvMV3^Wh(UR@I60JyCI^M zK)=!S6=x~w51xx^e`QC{*uOg~4&U<=A=uyM7Op1BS5`_%9L z@QKfL|NW7^-j?Xs$uT6^MRIlmi`=%q9Z?QJdHmGzj)#XuN=&VFoyF0fmT&$Ai=M)6 z_f=hIo1^;!=e9Hoxqmu+<2M+YuX|0{nmSBjzF=tob~jeGu?gA=zGgo+LgheZWFZGTu)KdWcU@O2*?-*tA5PjV*e z^Iu!)H~-*MJ^z(S!vFpMe-yZ!C_pD3-oA?UIVm0HZKQdM{ilKegFAlYLx6?WFCuY3 zU?KS>0@vS!v`bu=maqRdD=*e3Ojs<{mq*)6LT&%|xfm3XCX%jZb&u{O{1hxjlwZmJ zZx13+%&AW}3jR$(M0Le0x08fJA)W&io_vW;ylle$Ppl7=BcP3B|L-8+Ctsoy3#7jF z3$ee#gcQ;r$Xf};XY&_P^#4Af0GnuF#7N#q zCYFXDr~0;S#F$3s@OP0eE;@yS%`tf%Z6w?k1VaCxbNnkhwJrx=*Rs$+gdjSb?7Ex=FoePDtMEJlOv-Y|41fgSn|gS2zwp>=L_U_~QhIE@iM;dA_@U={|L{77+vsNmFwLTdqoCmdau6Dd^a-@bJDOyo82p*4RmryvL9 zmi7HY;q5u=a!|RPm{^xni~326w7uG#-pFw zXJsc?eD;VSj2~eVqNk}o7oGY6G(ZXEMSU$Plt)xVKl%L|L&VQI#vh{JP;YsJ{?(Uj z2`ncvm)~AH6KukVVxol$a%yMpywg~}#zmc#(+hrl z6Y+oJCz<5LXVIy%*uSOlo7ih4BxHIF4S(yp7=5++O4@6ilxkwnH+D@p#Pd%Z9~7P1 ze*3cA*%4Nr^0Nu6!6>F#;IAki61*-aO9kV(jhBb~oa~VN+O_l>fxtvc!SaVQvXlS3wu;f6{hTWmYZ=NEU{m0 z<8l74tlxzvK;L^Aej87H@AmWIw`70o*!vWQIhN@Sdn`HtN&&5YYT=?&-+$Z$&&=M} z@_QioE87ZY<}Xt+Qd)j$;jEe0&J=`*>>orJ8!B1*1crRb@^tM?r%FC2W^|4v_B1~)w}kTJ(!~!~!bXV>V^=1F@_DA}NJ(@HkS*E8L4-2g&tiKz!sr@(MugG2rA1yz% zuns>#P}&n}kICX(3dga(#2)Wt&x=msKH^DjGXIKB)slE!UdT~&s(S_C^{o7Du*b85 zihmkNUkBpvH8Z;i|K%1-T`&!LJW7aX*<-<-&iCeF%pE;5=BIb|C6|(bL^epkElzT&=RFMJH-=f(369R14=h&>ql z5HwdD{bepOxa@qsgyqyDs@#W5oD<(uffZzoHYLe;EFavyTNim{5`F zEyYW+yi-__cP)QuJk=uWtJa^2@lu^qKjD`k9^g#rOJJB|nZ8F;=?kHqt- z$tKy}7b4#=yQCz@`V*g@(H8dHh`wTmN|qmyznuRkFxV^06Xma>4>A1I_*bpIzIpJP znHY{`u>Ng4Mc@oMJ}f%*iM57{7Z0uY#Og)>z{dpKece1b=y?lAMLjO75x7H+4~Z>sLJmD=gvNCGYBXu#IT9tzCf8M zBbKjN<^&9qfs9~_nnEsVIXEL){mKg5+C(vz7JSVmnR*LlG&8jlOEHuLO-)4&3;~xJ z?*E*7=iV763Aal9b3f>CxX(PxInQ~P?{m(1?Bl`aKBl0i^pYkt%3mxFjp(tAzF?p) zN2C1J5Wq*^KX(Mi`)yhC*%ZB~-R~qpJWwwE=d~bzI9!c7^~6p}DCGHx`&Ec1$QTu0BzxV2AIp-@*N< zqlHFG@^seMb_42gzH`uLm|s!6w)Q*Eug>!+(6~M}*wZ&%Ke761Ur(a^A{fu1{>5B=i~DT;lYATLQGEYh96lB1{}ly%dY~QG zJ1BoJVDaJJU#%#wfch5n7lQCJuV4ON{Ug(Y;fK?Ix)Og=!g&|2DD3h1qfWK$3-agp z_cnR*^<&phPWlQB=IUo#FBv%6S-#hrU!gfwe0pX*Y#&dqJ^qpvT>6yi!f+7(Eyy4B z)!v@XeVXd0vplb*uT_l(UY@AGj^ha{7M>c0Qvs@%lY(`9Kaj;tq}<9>pwr( zeLnQU90p+24fU%=mkSPUXr+8ir$DzSq=O5D1r^l_z#6RwgJkS@dwk$)%hTRIW;}M-KRL^nm8V@_|0K_Au7~aV=)7KH z=U4mtlAK z|D4BTm`}rDdgbwil!vatE2uo%eN(c1$mfmKOJ5!3Zz_M&}^$Jgs?mEg8$4XIqfSdU9b4x`X&IkN{$+o}Y^%eIwTbTy1HE@>iwbo0}e13n!jK2_@IW{vrd}@=~hfgKlj7S2oXa{wAm+L17f=z>b-Fq#ymd z{-jdT9mf}Os1H9LT&;LwnHmyt?H#>yaX8*b$ye1DiR4f=z_{d?EeS7abt-ziNg^M6+L)F5}cT*&3$^7^lXNo}_G=P%d6 zcnh9=-1kwQj{3^T(_#OHwBvm3EYFtc$mc-b4vw7KLqsdg9s^O{aNMfV zQb+rSW!*-7Z=t)ueIW~WILs$)RwgOBzw-1DTyJ9h*D>gb2#%sSJ}~DIHhGpGoEiiU zKzx7DJ~FjQfB5tKx~R$erlt8ctNOr$bq@Rcl+ANV{U6p3{Dify)l#Trc5h%kjU1DK1D38QAGQL2v;2x6u#6cx-gYza{xPzi+q1S>A0J zc{BW?YeC)&ztkS{3=NOHr{4A=@KXZ^tp4QLpTb7o{CbX))8F+O4)NO@`$Ndd(H=NH zfU6et2dy^kd!|1$mb2pnzkV#Q*xx6~Y}ePTzhQq!zMu^aCcZwzQ1>ZgZyy4 zI|@P{aq=!__?dW=qd$9)(Izjnlv%Gq zXqiOGn~G77EmE10A7I|D4M2H2%Z?wL@=&7_CN~G zG~y}RQhR!ahEs8SehH5-=gCZch{{$UHB(>1K~}!xXkzeQgD=V#+k^2x#|V=~L_3b( zuI*J&?bgS}0fEmx7%#v@&-MsMrwb>MaUD7Ov~o@6=a=(CaD40z`l8xLm;82EGK}dT zU10&S5Bf{GP|fz2_1YI2fc`;2nA0mTiF$t-&=CK#{NQ(^Ax|5fujFVZy}^Y~&*ax7 z4Eh_^;0l&UFD?(E7#bo}pH?c%uh5H_`pks-2uFAM9G2;P{RKYnsW28ISO3<}TjPM3 z^k(D3+OqK_zvWgsjFZXK#6W)?wy~11I<#k zKK-6S`pr-rmVqWLz08fH+4TODEj@3>db{d#tL@{=WV!lyo`Lp6{&tda1J;I8$}^@p zb?C+l$7V|e#Q03Pj@hjyqZ=uN5aT$^y0O}~wJcqyeWqLiF~-nM5YxMqD$i`NdT?%} zMj~L!n``|ZmlaxVlA1H~)d#HT(hJodCtcQ>v+Jpp6OY-;nWoU*Kg4lr3 z8v!pDew%@Ay$NuQ9#=m!d&WZ^M;c1!`@gfi7&A%0{kil=L-$VQ=z}r$H!&;6_I%6~ zz}A>?D`=$o^qU`S>V|;F?na0Fu2z7V_>xks*DpOS-$h%Q{s3MgYUlRDcsuq<)A#`@ zcma)}`|Y??Ok2_HGjhP(?RGOr*38>JUa|ep4%;*BbI@03x3-k(cF>>KIl%BhmjbM9 z>pv;gkpl`H^x^&irF|?8W>btA$rXF~bznB_c&vnG1WfU^{7U;Q4*wXsU%wq_7I_uS zA{T{kpG#2!<%aI%oBhkV_EMc9pIrrJZybH>!liuV1DZMN;Nj|bJ@RtYN1K^yD))U$ zMSUNkLw`=GZb&B%W;F;io55^@OONe=?!xOAwg>cyr#;06;Sb5p?m1z$!heeuD+YCpCI^_NTE z*U4-Kj{%T7+)`a0v|RIAD3SK#dkR;UzsqZ9Q7k~iFO% z<3Y(siNmo5%Fhl{PYG|+0m|d`*||N=v@Lxx$6pR+X3L{tKJOhA;YxJ!FAVi=KHZr1 zsv)d`z-Nv-2KwXb3(aI675sla?PXIp&kru%DVJXL!6Tqe*PoSCf^w)As??T8J$d7(? z87X7(gD^j(WJNW?qf za=fO7drzs3i5%s}UHitphisWg1^?d;d8$woL`;_W9}w5f*6#{#b0xpww4l|B2~`i* zxPWLGS`NXm>rLG$!xfg+k#HvcT&t2z&#$_h%^%CgM+N_|S#bu_Q>XUk(5aQU&75&j2@#c4dty*(7RhZDoI1v@Y}=z5T#igXWV2hGgt!rA-@Doj4P8F z{HKC{Se{pnY3x$i_TaJ~W(_fYhAq!h0UH|!@4uO_>^GjaF9ZC*8%i8uua944y8#;L zmz>(-Hsxbn2AyH+^VPxnK43hh^{Uwb*D%1g1o#QFs>b8c3mGSNW>~O(;+J23nfrbc zZWA25eK0>*6{K?S(Hg&0;L2~K&>AxiZgb||<1z%iclcok=@qby@;J2KYL2#iT?A^X ziHnOefk$MQT{Y=M!z<=Zq4S&aJ=KX`4!{KuACixkw?9)70 z_k=r^Kk(GlCgo3sX_MhUlOIt%0n38YB@tq;Bl-SipShP~|3vx1Ho3{PH|YGX467-v zBMv*;F~09EwmzeGqV-C$nQLDPOk)DtF7K36Fs&iYq$jHWJ8_zd5Duy~)a+US(=gOy zE`&pAX&K^NAK%8LbUYow({wrXXW!rGl1>m-`VtI-M$ky0^B0rn7+QdI;~D1k0n_V1 zUs@{97XNkHOen*YejL#&SWLX^v)c551=J(T1Y#i{hx@GFVEqr!d2k4mM0!}5^c%Cv z212)mBbc}@5XQH0Z#5n8Eg{>EUErhTTPp5{AV`G~9NT^YHAsN%c$cFP1KD7yd~hov zLmnA9GU#w46NWe+%DZsk*lsTUS9>=%adJX2qZ3-tVcPmFMDjgUNXW>Mj|>rvdjYx; zgz*I$jShk?z-~sDUVa5=#U%mKbaa=o3|-UHs1=OM0gw4f<)6cQJao6keuu%{@{x!GOK-!6nyKFp_-cEJ)*k3a2cZm2V=2O4}2i*_5wtlH~5t?bhqIeTl`o5 z0yh5ZlRG1)MUB$Jm+@&D|Mkq7GynNla^>KD6pXt3KE{(5eru`e5%3t@A^xKD6pXt3KE{ z(5eru`e5%3t@FdbuMa2@oNAFD3_nrcz)!fs*(cj@QRb;4$ZvFv@Dr@~Y*5x8 zynMjIBl}wZh*-|e=s(uc@d3lo1*;wU0~OFg_@?n`HRcc1N${EL)E~0(+kAgmV{h*R zU{yhQ3n`kuQQFt(`*#|BqwTS!XZXd-d$iBort+o&j_r_psmwNh`v@T($hG9{C^P*1 zcFEs4U#>r3{$K}8?jyfv&iLOluohzb!+z!ZTu1-e174)&FX{X6y*-{x>d&#+G=v~! z@>>J(d&^=4Tzj+y(5^d-hWh>yfFU@s{i8E84`6#7{QX;M|9+*0cJwd4k0fomQePWp z<0mg~q`}Vlx*tq`JM_P~0=f01fb3>0=&(Gr_mq(%j6XJ8f1DCV2x4K0$kA}crw;wK zIa)>io;m8pB@n5BeKMX08>>q>jQkzr_i^Rn_wcz>=#1yV28_NCfc46RM@1#AyHd4k z5L-*I+H-2JKpq<|ci@MNlubbW;P@dRN$7aV&|)qVhxR)B=`Vl9{Qe2~bCuxaaig@P z!_KsB@WX#EgHpmRc+B{9H^`sPAOaQqaPpUQXrH$Yez^86-g&9sgU$|JyPCv*$qz`ECa11F%2s!|c!CkAOcT%?I?jVVdfo6!wN6 zt^oQj-~Uk^K2W;A57(Ys<&W+AI@@TA9*f9t9{=UaasIqn{m1*o;XY7rE4r6Ijpe>+Fpk`cu`xj`YKCv}S{jff|y>R(b>{W)&d`Vm2{SoPQEBtWgr~7K+ z=E!duy}{iq%%yDdNC0`^eV?5;d2ydND}Nc;{mx8>`yf5nt36J@kM|ll?{TF&@`uYH9qxnl+`!7e7WBPU{{O&!qJ{qI zxq+2G%7c|ZT=sa4`yOva{z4sQCfUvf5vurQu8l?Lk^; zkEZycjsZ`fwiuD=hb8S_}JnaSChJd$-a| zdq!q6W;6^=VH?nB`sXcZ7hxm${w;@KutOqs9bW+;$_Lut_9#RU0?W4L4UiH7EOWhp zroTMc)XeqHprO8WG+2%?^@RY{@>O%Xml@s5u{~%uXm9V&TdoBQqS+^!ov0uo>U`Uy zuQ1p6V7p7T2^zXRQIU+LAuK<%+79y|QLI4C@&(L5G0IV8Tlj7^EH11<`W(;kCoY0R(OL&fH2Ftg=Bj4ft+1m(4dxSo^p+4`7KUY^~`Hn3(!qqG!~SwIi-v#53aSA5aYX?nGn{8YcIa%J2(7Y1^;fQ{qQyB zar`d+fv3HVg3j=R@?Z2nwFL@E>yGUJd=NJ~|cKfNx{71Vx(aN7pV>{Yl4-E`Q zpPvGo#Y-gsgUCStKcH!dq{qS{Z%t)jfg7YhKZQ1h3t*I$f&LGtl|O9&w+|L(5kq;- z^>MB*(;lOLnXNtieHzX6|F&fq4?Hcnde*%G^R>lb=kSB=L6{7sflqVo_c;;?@t?<* zKMwbmz%7>A&{7)q+&ac=6$3kVy2EMb`uZH1GXm#BY!BQb`KS3`g)@VQVF}9?99ZoS zKg`+w)Jp$7{E-g;?>bX@N6dW%%%i;<;56;>dd8Z*Kr0ZE-i*!z`*9EfVca0i`wf?(G2Cemv3}0-wMlGmnPFFJB`azc4cg^Stq+|6A0}_bgr-E%9z%#2@Rp^p*~Oz z^xnYw{E2oWi)ffWxq<5Ps1*)6;9$TMw^a#)NnG^-a3soF7}Bf0?a(smn}L`T)~JM*jQu z?bCFCK>4t&2L56>1=`z9yUg6^UtZ{5j^#@vQn4-mD;9 z2_gckb3C+Un*sgAiDuFpt!C_oFy1QtmPe*x^lMDN`5}?$`c`B9iY}2IYDl(wko$4>T==R@%XZPk<=;BG3ALU94 z2A(xoq&8Z8loUYvE!*h4U0WMY^;ZV;de9dCb|7x@M;HL%`00u0dpYdQDL5L^Hb-W42%5n^u~g4B7v$habo_qs}KAmTx&M@B#OHXoG|+ z)(^UPJPhCB1ODHeLLRyP^FQ`m_VSyfxxY)D?sxAB{(3Y1x76Mr<~G+KRFFk$f4F{m zBfmi2bDPS$D+T_bb#{46uk(I*EcdT~PEH@8Q08%_xxYJqa{U4G$BTf%g-n02aOr4& zv2r8;$>`k-K!sLy05{Tvu-?vprh7WQPyHFvUn+*`;QDtB`2TV{4y57!?mLWT>Wg>H zG4&mt>D-={+E4qFg8nvs0g$8(7oxmtdHv?(jrk+2eZ3E+|2yQ*mCyATyr20Cs6Up6 z*DMN@>B8|g-~^gOgkJ3Z%lQ6UbSKft%=j1I!K>VvCu92M;=9WKcRF2baPa@_B=YTg zwA;`hTz-yHWme zd~WWuRsP5U)EkyV9Di>+-Rl3#Fqq>n%k4jpSIxa|)&Hjb^LqKmrEBi9RsUP{|DRa@ zas973{ch=ftNybbx>5ddd~NQtRsUP{zg7QR*MHpjaQnv>R=;jGf37~Q<3Gzmjvv>{ zPcB_^pEo=Hv;M|!^XGrk2^jwutwq?!eYI2kU!a@B|GhzajVyM#<+6gyo`C=Fdiqjj zC#=6aH~=&Lwsa1IhadvT`2R8|@c5N~o@VQlFJgOtffoILQ|SepkL)7rz z=MB&X=DFGNUrb(G@NVq;JGgw(#s6DSx!dl4y1;|flwY>f3l(^H@z2q17RCm}a+QNm z)!VT_=Zzkx(d|ULWXY1ss$sRbmO|4oW_~*3V4ni%Pgixc+fx7?Q66|%7+oVwJ_YGv zJYD41G+yyP-9G2?fZsZrUc}Gu>EfE>(FXf@znEmkgpK%>f6uYzX64U)pZgS%4|B`l zJc^^GWDyh38S_W8VyRPn+rOI@xP%CGrl+1{%U7#iyN`bBWYSwFQT`zQCHQxIXgaGJ z_rG?U{mq$f+s$xMYPir2<&TEqN|H2yp4!J2e_1U4yW7)p{<-yz@qtA|ISJ1P*;Y3H zKeqF3*#C1axZeGb$aX&kwhtYnT)TttlRTP}ztCCU&UD)@h8ijSaPk+rF7Q9Jz@Krn zYHFd(eUq*6_15=B+jqU`xpd8aVr}n5`9pjPyq{zowh!em|J3LKj%XhT%Ft2K(H`y7 zsRDtpMg6~TM|2J8nJECbP|*LxM1dUSKZkX+Yn6XGQ)jF-PW=M2hd^E>L?mit%Z4VP*?>}6++bz!< z&5x@`bDwPe?JcV4Z&!Lj8@xYa!pB$}T)ziw-j&mMG{=f`XhcK=S4*xu z?OM7vpKb`izw6+>j{5{FgbyCI-`DYPx957x=h8LziS4_U@vFIfxxaJ#{I_Y!4dic{ zFdy5Skf71DtJ(*6wc;YuK0c27LHrBoaS-w7Y!>uF*E5YKDXA@4Aslpi)gXMU1$_J8 zZqN0W&!ubb6WjCugZyQHS0(L!N005rKop9%H6C?DaZWi8rhUAzf<%d@ydr{-(AhfANGT^eD{Ln-S6c6c|WL} zhx@_%PAX~yu;05{!S46m$g@FVQ#LVpj}I*Pxn|xe?Q5<++~1q~M1K7Lp#RSMK|Qk{ zwEL?eAMnBZ6mdW3@j_0GOF$;|9mKPC*zYm&zmxa-&i#>XRrCM<{qkqZMu?qxY<&LL zY1|Kvdhwm5T)pnwe>oragVV8ouf29&TP&NI9j5<-$4}Y)-cQ_q?_aM!SMQei$)#)V z^Y4~_bLIZqfA;`?q<0+ds}*(_(P!a85nnBV_c61)4KZ_n-~wlH^u6-gocz^9eXaPf zl9#~DCvrkC#*5Q}pSSw~HmpBpqt!MFn$k46v*}_Zw8y>tW&bj^Jqd}NSeuLgBWiC- zONaPBDoBV!t>_KATdN%WoNej|?;xfF%&c~r{q5hQnfjNb>Jr~YQJD0#{c2k z19fJe=GxD_SHUmX{s5cXFSZN9|B*8S5p(Rf39fmd0B5O!V_>|t6=}p>=>L_sWv^}Q z97BHsu)xBd3?_V41~_`F)~P8oZtABvw{?iXhHmRONN+er zFA>@DQyZZCWC2E70&*!X`iy%6yY(rw=f5vqWtxb1}RC(wVeHqJEN zZw>A-f{qyKxoe|e(&=<;{)CBu1?j09Ezh~W!tQK5T&_J(B=g+1`H#=<+Vi90ZR}4I z=Hgp~<+)Te{o-B-5eVyhf{sNkRD-~Org ztI6&KdApYuvF+DrwqK_6X$u}p7Q`V8rC86vkP3XC2{^Qf3|krU=&zvSw+7odwiUVX zZ?)eW+MgWz_B?D4!m>j?v>(e-lw96^Z?WZTg=IUwPfAKo=C)x>`?2D-$GJT>N~<6r z$M5`8@|Q#V$Hl(8gK0m)k{u}})n3U2283g2v0Dx_K1{!@oPi-7$7lS8{c)^2{`E#_ zmD6|rsrI9p&g$6rS7U3S`D%|>;aILrVZ~z?IF$|cIR`d2FOOi%tP^bEEBR zDZR=m&l_()WKe*Hj_kuo=O$>cZ+2$%iqw_+oq}V@I<3}Y>KtZ&hWSBMwOh`=x%#Q# zg(Hu+_S@pWQiDumgH2C$#A=|LN~>VmVo@|Q*0TbEoT2gi@E*5uH%DLgV)8Q@b=05@ z{$()CM*$neQb)9%EnoK9&~za<%wTziuxN4nWt;~W|Fa+z;(yk2+e%X*^30ib`$ch? z*y4W{B>DQvUhCpkX3K93-^mDJ%5Q@9v*p{_h&6!n|K|9kuFpf|Ok)Sw_`k1bFQB>G z4#9qzDL<}}P62CXktmcf@kW6KH2oe-qi`D{#v^s0nfRwU7n$@*WfEcX<8CX2{Fw4K z__O?nDDqxR{L!%tzajjnMhG>*_@h`J6Vf;~Bn11OsE&4W zNrr53wZ_o&46}zd(O>%x$j%8N~6TcN!b3_91 zTfxZoRjf8l282z&%)A_C1Eo^g>%OSH8Jya?B|rv)>Ee_1laFt0P{Hu1R0eDZKx$)3 zIi`p3vZDK<42)XiY|;zfV=eKqmB0GIBc}APOyfHu4fz)sF-YEsKbZQ#>gy9WHJcvZ zcd*5OeY9wDT5bL0i&@nnfs}_p_-IjV*5Q2XcBIuCjOK`vPU%Zc&veYHo-~mX2nsyE z9N!xkttr*#($vQ6Ikxz(-?Wk5r+OwoETwwMy6o)i_u10KG!yUjKZ%18jIOS(-h89+ zUuQya!M`-JjWNa>13fA=?N&n2;{8HVlh`%wlRmc9F73+^GR-FGm@41LQojUq1U10iz%KYpM;>RGz2qG7O1XijQJ z9T-_Ihd!+DD4hw{+loGn6_lIw)Dr=e3ly3f3Mk()ido1)*`Gt%%8z5yI_4d536yCy zL>vCcB#(`zr5LNP9z7-hT9@Rl)osM#xMLPYNn~oG4k9A;bKAie6}$`7TJ3*! z04P49+=bUk*wMW2t=GkZ;Jd zD?=U&DGHWL#T1pe$@J9Hof9JT9p!3u!h!kUmpu?^$)^oe=@y|!#BQq6_4zlbJkqU* z!ukoLiJ1tBsp?tkWFnsQ{k#!}LjCsWC(6Xqc5O#5k4*1sdd97i_^niGG-`GJkC%(- zs+^NFJys?V%DXS2W8Z#gx3>#Tf9-2lXUpN68p3p zbS^QYZ{&of)1*Yu&wHPyZ`}vhJ&I-RW;X=NynQv9s*#oe@t|F%XTFL|>lsoME!~$p z^yG^d_UBl(>)XkuXng$=r(u-#r`)A!f%<4EEat~N-_YiFjX?h&_iX7qyI78=oSaq5pfmw0@T zyd7GWJf>~C#AiFr?m0*HkY1urH0xIVcCON55Ee!-*$=UJi0LtFh4o498}uh-W0GfP zx=u4a(Xr6qRt8}1l6Ft59-7`W^4X4A^A7~7 z)#B8Z@A;R_b1&DwmMoM|T2tiHYa=K2%bKBqY2rY^kGqO#t6|2e{!9}eZuD5Q!@W8+ zc#wLP@9Y_YYvSpR{$;bDhw0086-9;fG2goBU!!olwf$C6FsYDgs z7%-_yLn{)0w^qQE5CWR9lVoOxy|gl3UD9c*X47J( z7Zqt#_krM&b{?~|QPj=Qzb0s#oSZo}sP~lEpsl^ql%s`I%5rLR6il{o>WDo z)S(5|Ls=Ij$rn&0q7@(R#6ai4`r;?uMdA=D&l^kejeQFOz9g7h0@nMch>r@yyhMES;)G1HIxCQX-68Sj|JE`@mVLDp!PV?`f+ zcQnUxwKzdaJrwB9u=t^(=t0qB*p4}2)&NNi5r6nN{lZq-8>f^HK77?$mSZimTu=?R z1jNyMGrCvM) z*_1xZG@ReaR1!2>L;=t^fhqf)FSLM-x0v%m4U7`$*8ZsC< zG~^evRk^L?X{t8BgY2Cu5=zbLl#&lL+w(>onoTFR3$$jw88rLTXM#g4=f!G`HWy}s z&w`?U478*MT6&1JJH}*0NG7fiD$+^44;;{ZgQrQugSP4xypc2mb05;^LI3a`r4kDl z8cwPQZ_T1pI?<_8-y#hiYF*|XDAY}=$`5Qz^)LJ7f=bvsQds&A=^g&XQU*N})X`owQg;;W7;9b1~u#hV`!Iu2MOU#@)#G({u{b;x}Bf7y& zKS^>lGc#%I!Z`!Wy|#BxQwHiM3(15ZBcII)9$1+c6jdqNoVwdPdHV;Jz53~LpLT8i zwC|YGmck}3Z$^-1ugECY33@2Kf}+%v(A_cEeKva(W& zW~gU^Y7Nb(8#8%OUbQSl(Gk z<<#CaziiXLDoAeIuHDmNv-4Lf^+M6p-|M1(dv0%VRHZy3w7Y!5cZv&{BQL)iq*n`* zlV<8tX0@T>{DbwnprUATYKgA8ciZ&;>R+THHZMMaB|K!Q6q5O+y5a}*Cj*Nni^mL| z2J7L^CgGqcIxZcoreoTV8!LKXmwvkR&E133CzD~@Lq>X={kvSMR6Z_L^)sb=lOdYd z0*x!hkDblhRdhQ2w>Cs29kNX>{)WW<8ZtaIYP+W~NSwGSG5x=$@lVcv^FV^cZT=5| z(dzWMZ^FPW5N;`@znku&^nzs_R>?=N6Mygnebr#7@zP(Fna#S)LnWcP2|&acTVso0V2(T0|oT3mEP(&*|+^Eh#9eQCw(D0Q|?B;9;Y@FlC}@#QGdTZ zMN(0_wkfOY(^e@3BvAa}57uIOSB}+(1meoK+hDS*)0Q5O&px7l%dJ{ao8RSIcl~9V z(L8%p;%A@yvTa^>FF_ALSZV|V&zi=s^2tuo>hoQYxrpDJ>65+F5;DkyeYBpO79e(l+yF-|IP6Z3dYjk_>Wd?35+w&y8N z_2Ys;Up<{3865Q(r6LCosHiAP5L4V`*-ybmI@wrRyLJGDqrX=LtU*%5Uyqp)sax)@ zP^h5QK3hC?c-Ezot*SJO1Hsi8CCwv{BEM zw@We$DKLa6Uskhuu~`GOzNPJCD+S7`!!3K(_D;Q_~=#{AkP((}Lt9o`Mxb z;|X@frb$mK%YVx|CexI>Mu__bz4y)RSYIW&z zeYUTPNC-6RglFl>6CLEs1Bt6dz2?Iq;$dm!o5c@>=&4^AjRpq%ZyL}_` zOD}rc>$xq|Ojv(Dw5y9-dBw?gV%1>%eV&kTj*1vWj_ZC4B^EM^{-=AwO3-&-uk&R0 zdCD9fhTE$I`O&uVS~%RN@bCkc*ogbY!*&o*0X;JlL=GbHPo_>HY2}cSXKA+8?fZ!} zu%r>soZqh)uaSgn7q?EQB!l#d9s`MoK^nVIbU-LkhyQ%=tmtZ9nVurjdE@(b=zY{Q z=?#hNZ@B6koNypCWCvhRk4k6H(XMqP7HXMSfr_NT4n^j-*|=<eh1R~BpWw>B~b&>vlxz21PzY_Ve zr0+lf7RcNMkN?N##}87T*xY}W-XN3wXYh~NznzAaPky3wtSoteiaZ}Bg?*A}9ue*$ z5}m$(@&F<+dRM8#`~ESg>(+*q$~A$Wo?TzZ`O9D7Dhh-Zk#G>ybwGUNsT-9xlz*w_n@GP2M z8i$bt`h0R%v@5Q#`)M@3|+l zo==j^kZkiQuXt5tv1|{rjHJFF-^Ukv{K#IG45}VXpY*S~0+zCmkn?1U;J^3f{-RgN z+8&iB#3z{i39U#Gs}j5dW7Fb;vf}ddUR4o7BB9%l9Btatoi28_P$JJ#Nl8(ODp)^R z+;9F&v6;;Lqp?8(;?gT%6f)wS<1zx?+juRf2!R=R)T$EGX>GVS+$QmGmkp;!za5UZ zhlE_F5uYO3wS=Sn7`ou@q(zsGb*uygLHmy1kxp<`&WP82qfVs({d2#2qJ1E*N<>Js zG$|qaxCaJ#fH$7>K}q;iA2L#g|7dvd_Xj?~Ey_d~qduLgHX4oLMbiga_9?(yD_hw~ zqWBAMP4@e?e#7T?r_;eT>n{(Bwn}l1dsm}V2cMg!IQbiTCm#0=6U*-)Gs4@$U*B^* zuNaH#C*qA+@8)jUFrJLu9x^?UMhfjq|uy5nT>9ZQv07O9irbMQF)HdUH?EWiOckVUeOW+Bnp`X|bvk1A}H2oMo z@`_P#l%`8&6;!E>|DhL#EC95drq7NpD4+zlyFBOo6jSCLDN|VX()8NV9urq=tPUhUx1%=yV;h zX9D)=d@%RijULRUL8tx(me1dN5whQh&GiQU&sLLispAIy&OVrXG5{O^WREx=%q@%} zGnc8L=Q^Cu4aU zB)L`!c258e4#}jGiPYC1;W0w8^-?S8CsE*IYRR&VSH-(=2<0bP44`Lok5M4r^%@_ zWrSSs(oIicMIrFSMFIzB$)|9~ozpNkYmeb#zJ9uJRFc~0_C|7+0IW4msG_1&m^z$+ zti=3@7S+s&mL^IdvL9$E><3!7&cYL|9!11`%oR!X$)m-v7R^@n6T4GbKzdOC9%H$W zy*h8%p)kw$c)&g?AxVSp;w%A_>rhjAr$KOppDcirWA?xa*D{U=PD?Oojw(7z;Beq1 zcQ|kY07!-hPSVu~wWJ4UrK$m5(5$0}!5KZk)&j7g77DP$xkZT3dGz?vaN!yHaxoqk zX6hj1SEycxuZOeT;LnDrX3mDF=Ff&?a5faYJ95HWQ(9L*LEvbJ0pu4l1ry0yIPF4I zhq;9vPP@Y5Hw-K<^e@NKN5g>#cfK>7>Id)&9PrG6*kShb9m@H9M-foI5#a2Yz%L9! zD*h)p>K#UAQ*4>5Edc`hCvbTgM&S5%e;)KiVLS$-8HS}LH%7O7T%)J+6i?8AqOi{} z_N-;vb)U5ebp5{ztWAwfTXlrqhq2zo7|IsyG+g+(#Bw-@uFTXV;UD9z^w8j~KP(ruHT#RXBZVMKrNfy* z(Rt=bfl~GB7WM02o+XGuOdi^t0PZCDW%^BDxd-9}-P)oea9aDiawgBg+&K5L>DcY2+;Qc3Lg{*~HvT6J?WxN+H0uc+o zcLccgI>C2u^%PI>3P9ggJo=s!Mbrcf7a|6qb#+0?k-$L9lTr=XhS(r@;a@}WxlzF^ z{vNy~I?%nZ0|LJ_&{gY6j@khDz%RfIA*@J*g~9Xr4M6b8LdO}tDFiQT9)iyjYDGk% zuX!}|xojAT+wC;{u+4B0#zUChN9l~6@}jBikmJ6okARB z-8>LJgayJ?#B5cBtH=iyMVtZVIBO5%U%}V}actL1n@1%rSa1mEXuz@ErdHGWv^6JD z{M~4YOh7>m8x`({h4kTk|KOtkP+&Ems3Hq3J;jk}XCu=;s%X$RNK~t@i9}mRhD@i_ z`fVZ}h?aE#Ali4wu8fnBF3ECnno=H;OLaLDBaIbQ4ijj@yE5Hu4jfAeYw6loaV zh!KvL+{SNo$D7y34~L^7IGqCtY*h%y#z%k=>t;%-Hvb7@R>8bl3kY-Q?8kfUgHsp| zUkD^>j z+yniWPorUgk_;HP0R~~_q2a+_obl!RJ_mgHCl+58+=KWs+iKW&+1l@Ok+%E{wzl|p zSShO+=D>g4`@5ZzxK$=E&^{24?IIeGWfyGiUj$6x*o@a5OzHjEq4EWSK5GVPgzlkNEO8V7tC z+?Xc(&2+pzqDv!35^mAKjJ^-zM7IO)I8UoZJ2u;>+IwzAWeP zW!3UA^DVooLs1(j`1!wg!LA85v^3qZ67l7h=r2g&n<2wuVDfG(Xmy-Zr-VFHiSAZ{X_hECrf&a7BB0#w=UvPUzn83qPc-s%akvQJB}GKHQQ$cYDw0wNm&+~#kcdO}rX6~EaK`SgW7 zCA5CNs5F!k&=;vnxX=LIGoqN}aj=h@-_YI?PuC_;u-Qx25#mvjdi7=h!}{sTS0xf2 zQ5H9YD32`ibo7z92BeJD8V=R61h|jA68UUT0GAOxF7*jzfVDJzfJy;IXoA!$fGbA> zpbN0GpC(gnhm=LlL&{Q0HMnSC^MEpifHKw~&Kdyla4H~6J$^i0Y_U`(2!&&1?sArG z3&G@m9UYrHF82N8%ko(8U@#Kt>P=wQ7NXZBU6nNFXJ9}#12FRTZw^T=P6Z&DDIZFR zC$aC3i(MQBzpnl95?cB}C1f$29|cqbfCh2MZm4THGnn8oeV>wgPw{oGjLmwzoR3)z{&<-gqJ%}&!j}Ul#-r#hc@fag2A<)L`?m)k$7sO=U=1B!L$F! z4mlvjf(Gc#kudAJe>pV0(?C^(=R;~hk1vljy)q8aT+=OBqzFfWpjUK_Ce;^4C z9Mt3Og-56>V9GrDk7H3~!O;V=mC1qiMSv?)BZKpVGB`5$OI$fKs*TuY)qMlNa;QOt zR^3}vf=+pWKoO$grk!~_tgK3*91Xi)Yynl)_pzbMS-}jd{KgQQUH6uETm=vDX5F5{ zJ_A%)?}dfJb0es-_NGzghltn?D$f`QuEk`91E{RMDNtF2cHO>YSe7sZTqsonoPBfy zNvDeb$9nAq= ze7wXbBJ`rjA_R;UW+m^zMuCxt7`$0+gb)o?Lnrjz&?9(jL$-3YinqQ_ongb1p~NQE z*W&mW(E!-JJnI{w8c=XRjR8p>I{5@5$$|RLh$L^cD7wQy*#76fj8*kCO1fy#!t7?i zWUFFB#jAs5DxpOQ2Id0^V96zbMDHh$Y!E$S_M1itvllK}^y&V`4Vz~-B&OdH2a+ybK?E|Rw$lznjrrwCv+$r- z=R5QoSh7VXKrH#s*2+$3a*=1yw(;>nTjLN+p2qa_%G>*aPqwcuZGh@)6;G6v3tZl2#%YGnu6E8J;N&05dfLpD zU3@$HzS!xxA6|IQX0AML#qEY~o%0)$2abiNU=}`BDGUB?xY{{?#k6Y6cE(&8;ba#M zPHr3XSl6=b^P907eB$Eri8K7`On*U4OGUA|r3fFF8cAtOaI^D!&vkZl|1lCHoGtR{xup{KhgO=KBw3EM@}rd> zoNnOfz1JTYO9QoI8}EhRMH^vh2TlfV>99}$;Hu;QOp}D)(RAWEq}LKJ+T`AGP2RW{ z7<$Z6KL{5RcD8Q~*LI3I^2`q5=zHZ8wYlj%Y4@i5qv^=>kjX1U64wA4=q?v>qnPzz zMqb1GDakxt@!8_(zf2uZyEU$gKB~BMF%SAjVscUd8To67K6}u;B6qGG_p1EecbLY0 zWtw~{0_3eNjR>VLvFJ|T-pAkQ-{Y;XIeCA3(R&$m2N=g$j{M(&BRk77b;dqFVE~X? z+P_jIduhVyk6)F{P7A9OUR~+Sj2{V1`9N~ z7-TBGrhA$p2Cw*VvCS+gswUli*yy&ABNX`a$tCPxC=)gsTi^P*zQ*&dzAF7Q5b6S z6W6H-3!IZjHB<=&%0Lsvxvg7YdyX6;9wc3I}dIDa`4m5 z<}}SOoV>c!b%MBVI*4=5O5n_i)4f6awHz%!xw{G7<$O~*_WUk*Z{XAKsrz_zuN8AC zxB!SbF7U5(OMmX;O{-kYUK)A+#bIw3LVp~UnB10GFW&jp8#5b7_>oXy)X3=3LSeg~NQ`<$QQdCfrEFy?>=kwsKUXg*g(#9&y5VtPHyb z_uiR4(>q(~6A%!$(<;lMajm=zO! zLU@Jkbr>WA#)C)hyzv0rbyv*)zpFhOuT(NOAvo^e##FB>nv(R(K~6ry&sUw>(!+%x z?Ilycss&yJP!{7!746g6I7z<2<|frbjp9$4lLRxo$ibEnGRn>Ic5Rec(Bv;*oM z%JF}8_5Q^I2*S$IvFA6gc83KWN56i4`1!hZuDtyBSYL~Cl>fJ&&mjKmmVXtPIu#a1 z@bWKc{0QVP^0e!_We;kvFIeWvd9^L5tZ^&GvYZg(1ZPN_M1*A2@5k(j3PuWEetzmED})%Z!H zwr)MYUpUivcC#9EoGUN6y89cSo%uGT`@w)3S@ea}vcfN{~*5b9i{<+i_oL|4z zKK_T-$Ifz;|86Jwf2|U=2Q@9`@)rlLg!!N>s@mpMw3P0>e{3 z`p>Tyv7Y~i{1pv|$3GLyw!hS8Ncp9FkON)Z0Fm^B#K`e)PhH{Seo{MLi}K#G&Pm?k zc6kr4cd0Ke?9TK5^~PQE9p(Q?@3BgY#lqvgCwvFXR$MWR;>v@#mxNT=*ZZ%>1(FDO zxc9^9T}M7xwQ3bdGxBz^>$?kG)d>61E!_Lpfvy9)ZI1qu{$bYcSNi$(IF?i6Mb{OV z0X~(a(V2S^{mMb_3NLcQ!9TTs#CrW3@+Ujh3hS<77~fYaLEZWNTS|3qp01{hIh03U z?5T@A87PzS^SMj?p7UF}y7KZxc^9tf!qcxe4zDk*+tQQc_XK*_>f!Kk^e4Sl#4;wC zmp>RrlB7{fx^wR#jw{hx*Yf#=PaG_Blz&(HwR%VSyMla6>Ggd2t|)JZ^*~qJ6}-p7 z`S*{|Ia6x@VC2f1UEO!ybDK8qrai29-f;N^z!P9NND}&Q=w3F@e;d~y{;p4~$3G!| z|4pVzOTh+aAeicCOJVgcOks~zTQY03Hg}Uw`b^i|8uX<-|NUHfZuE*qvKB5#x6KFLoanA_p$!55GVcAO^iimf9dDRK6FM9+;NGvL zH%)ydDmSwiL@C1ah9`D{r!RyYpG9TGMW3I0h3Su4Z6bT#aQpXw7>7Pwf1?crzZsPp8swv?k!*9|_uLR(tL(c9|A z)@@zamG2LMjVtQvitX}KgZv}9*w_EYM%`vL#JS?WKYVzgEEyh-4gq-=7Ix?L|5Sfb zVBNZ&uH5?_^H28&{`hnB3Xt!pQHcp0O@J=7t}ozd704ULpS6y3@md$YKdV9hFh218 zOGm@{)M%eSDjIsHul(T6S9(@@W(taH+WA6%fZ-rh*n`-l%cpX?wmr`2y+ zaef1zL4G|q=#w?bL6+#elTYo@#*KM({?@8mfy3#`X z_^xg|W?knnALts@jh__Q_haTpF!$3E`{8GlRCm-&zQrR6I?tSd=S9%Y0 zpg(}oW62U9AMX7Mkgwwf$SChEYwhDZE8lPj`Kn-+FW~#Dkyg{C*0teWen=M=g!An; z(_ZN?9H^iBiCr&#br2$dn2mxn?uI|YEJB*ayR``}xPQ#L_4Ojw<95h@9i#8dMVx(w z;VQd-d&vop_dg}rQFfr7*XNk?g7c30HwWb3(?Ooc>OQE0_q;xWyz90&jMutGRU-@s zJbzLCupH$1xuWstc@RJUes>z+^~slH9RCaARx0bX#eDjLxS?IP)UD-db;Sgb{}NvQ zX3*b+gaiC|rK44JX<;$1?I9xzCORwuf^r+)JFOUd)|OP zUC(~J>XSB`+Q4~3&9MG3Kfv-JneyJyz5FKDi`b5v(*I%tR-=M*T4w(W>$yejdhW=< z@x!}>yS&cvM^LADBLo(7934}K`o4}IZ|Bs-obTS#mDg|7_ch(S@HFcCIv5bR@1wjw zSzBP|Kgd`6|Jr*S_&BTUPFThvVMLUsZ$eAkWczp$$2Q28M&CC0Q<6U@{-`9|BtjLV z(MTFB%_uV?e^l|-A-mhA=`Tt5g>AP#nzC*4Heo~Qn+DQ%^J9Tz``xtZ78BaEgiV0} z0ZiH&lJ_;9_y0fl^Lgf((a1J5?Z#kP&-2`S?z!ijd+xdCo_p?TXCILN58ivP9go{8 zr?4J7Xvgoi$`w1Bp18^G|37qkYTc&}A3kW{Z>#)ls_nG1-%eG2KGk$ti(UUi9zy)( zcs~6}$Ipkr-#a}2Bl&yZIye85zrKC>_m%$zd%%5vs`3rU$A7i*^K|9!VLUqde7W+T z8$R~#tG`ldLoh;9^R_Qw{|oBip_bhr+WYW3-hq{<`qSus1N(g;{6GHPqlI&S{$S-8 z)+_%0>iI|i@HaBW#~v~CyzGTj&qE$;f70MT_<61Q&iVbG_3k-tynphZb+$bD4{#P9 z`F-})2Oc!=?!xn{4?6$f6X%n6;t1q6^SveWrK^ws&ExPiC^}uSV{qMRZ+`jH_x<5U z=x+CCM|SDik6+LV6+{66%^x!-lq7|-5(M1HTo(v4^G_w;>j7M|j-lb5F}Pln{- zo0X?R^6+fs>B{MflZR(2f40%zZ>UrXH+`4b#46yxMB)KdxyY zUXA@|g#W!Ss(7j%jCU;GtUrFsH~-JuH~-e&oT0}TpMUWqKY+W>%yaUEZ#=(x{d&8; z=lp)J$A6jMQNWa!`F(v`h~F6Rcbo6zcXYhp>y7uj&YwEpy}IQ}Q@*LP1F3gUS$y7{ zdGhM7KmIr0G2ibV`ooPd|8098E!{nI76zsH{?OwsnS-bQ?#InD_4i-?-e*4Jp2Pfp zlH=Kv2aey<-ZS~@kAL#_)qCA~^SR11`0nh-Z&jYHoPN;hhvzHL!JfF=_UFaQpKgRY zxTUi7)MaNwp*pE2=@6zkHcWZxqrD@fC z6YTVNV*P&4r?0)n^#9!BzyG^Kk3I5=dH%-pzw!K<_3K;AGsipZdFv1RFJ~vtg5H+j zwCC@;Z?k>gc7DbA^$9m0$aweSFJ!z&=J!`0aO3?U@c-Uxoj#$xeibGFgU_kTA8kBz z(=C>M+wQyd27I>iuQJ^sp@ zcC7mFf9R^LpTBMOww2GEgFaxqT51L2)ryyGQCiRaWW6~4FMQ|zBY%JN#aGYXx#|iG z_YWKR|K{s&{dd2$H$7~gZ+reTAMx$E%U<~6^W7eQMc;elS?s${uD1LZeSc5bzPo2# zSl>4{UuNy0Q?&Q+$Fxs*ZBt?xaVH;414c9>7OTHuibK= z^EXhxU-s3rXH9*McYl83{0;Ne>Idp`3~&3)@r~)kK9k?rp0dy6H_A5~_%DLr{_{)V zuP-0puAHeH^!!o(Pr$6)s40lVPhyUqAPo6#d zs%?MUtKWDY=Ge8Se|No_eBspx9d5NX!;gOX zBmVQT$KUb`{_`(AzVCMb`SXw8d*|tjtN+;3e{ttQ@A*5C=W~z0{gV&}+ul3B-hGe% z{N6M7-Y(=ozxe0GD`$RF#795>=g9M~yz&=!;-Z@eP5=JeE5Cg^p6_9MMqYCUafqlg!1nYfoey7i<6pC% zar%GdiKA~>eB&)Ee;e_wt1$qtMrO@-zwwr)+iwR^F`|OsW+r*$vD42#uAd*lc?o_u z&u1ggv>*NNJdfc&^Zbqf{7ZI00QrWJ|zWxj+hTgnTc zvCw>pS8RX(`FoZg|FqTP&*e=Yf7=@G*~oz!|KukDq&pWO+TISjneSPhRbBJOBLo-CxdKyK?2~&;HD} z$FaoU_y^l@ciyR{H~tj1{XX>0hmD)JN&orh>i-Y_!^`<6pT4)kWe2u}KIHoQcYp4? z37z{Z=JpDsVgsg=B#4$FpnV&J=e=D{9ibIb)@;UR| zeB?_wcC*>K;hPy&hd62T{aSdqnoc`?F;MxTPyP-R=DUBp?c9|=^U}|3{Da^MMA`3H z$&{rH%%6?+|EiY|v)og7^?exMewg|n-Zr^R#=75{f@*iOg zPd{|Z@pJbLx4rezM<22L{gaRUU#SN+cW*WQy#@U}^vLJzw$mxPF+I2NT?{kf^Is@^ z`B3Hmx#wv4D=)q2&fCTw{_%5HNLmxbk=2riTK#YSkkV(Vf5-Xv^i?-Ksls|b5B#>+Ozk%ZL@Dwe(`pQ122EYHu;;keGP7$1Gjwf=eoEJhA?|0 zzlI*Q`u}hKN`#}o0!`Wr|;ij<>x60BXI3KBil}H+vr=^ zRzw)HmB;5RL%;Buk3X^P^1H7(_wdJF+P@L<%Zp$oOaRA}P5=LoJ9x}8^DXw{rkj5G z_hw&I^Vhon@uT-&z2%K|{@#IY9_-p${?e`QZ|e!a6Ia@>4{pz31PF{_qh7E zR6a6v=(rmXcUAI7uApSVM7dG-N-0uFi+6&k=g;(9u=Ot{bob|RW3<@q_fzM8j~0r3e&~D$6AQuQmf{#V9V~C3PgPR<{-F8(P$dQU z2k$n|PgmMQ&(BxRz_EJp8uR^Z<Ghq;J#ftW&mRpvf9;iDD82QrUu$~LKmFjj zhkyL$hrjS>&@^)M$e}k(t1Qoi`xur#@A~SVi6*E3KEpiY^JV54QP831yZ>c8Hyiwk z?@u;8@mJO@cE=rxIrs_2XilkD|GPW~Tv@%rBLjaOv1WuK3h1W)nCH^3%QS%um;7+w zC*L%U=YRj|L+bg^Peseue|CKMv9Ggr*M5MCWW`$|%c_mfC^O{!rzfsRzyfRj#>dX_ zbWQ2Y+oAR!I-qDU)6m1<(IGgs}H>s_iz6xm%WFec9+}!C#1ihcmsDQaQgkK zg>S2A_}Z7V>u7MA_MgMD=>Yzi=RbM*$*a-)mR z{H@jhmZ$E|zw-FU&V3I3z5MbOR;_P4KmEcz_pP_n__miXUxnuF>D(qn(_P-u(qizr zrBZ(M)>Cjaef@(czxd#}AO0BngW&dC3_Wc7|96u_7c#Ny$nCfP=FfgdO+(2S{?h}P zh3&L<3(So5SGr}vUFVT-?)j#s-~804KW*x#&mIH^-R|Qp=kJG_ch5oP%29O2 zs_myLe_l#>&(BqkqXk#~CH?&N@2)xbM_a%BHuCqE=eOOm^5mh3m0IndgVDC~q*J>O zV)XgX+zq_w=i(nXJ*L}x-yL)W!WF1iGC)^}7nY|x{wG&EOk|6fcYN}m%YX0wy-8`_h`9};`0a0d0Wx&1Qu(3BzjXD(*km4hY3sSKR?cqy zofn@9j-)@hVnv{aX=_G?;oC=aQlC41A6Giy-ZjI9;QUky#?vmEC zxp)3`+qu8E1FMloAA9VUcNQTwk56It`e^9^(hW6uZ`#?)wYT3*y6NXvDjPm|+1;m` z-u@Jp4*&6%ubo4Go;Y=D(-rt{8wl~_{n_8Zy7sF;qv<{W;kHWC{?ER9{<78O`|$k8 zSDtA4FVEat`EJ{u8(#j)#XtVYm8XMmSI)hul4$z)D|>F3xb4()Z-7PxJvaTy8=wCl z|6h0UFP~n2U(AS^{bXAl&>+`?Q0>hSLE1N#rBK&hGZWZ@V{xh7D*_FLM-Agrp9 zz`B}G;sE^Fvv24AAbEXmZaT=#rKiE8<2R=#Cky$~&BeLn`DdeYe(^I+GY_MfZketjO-MNs@ zlym5OQr@ul$#tlin+n!S?NytDWO7|lp2_Be#g^s-Ka@|*XZNM&vcY(HCRYk_rNQ?v zq-RG8f&CDwl2FBD^koWj^K5>;n4K>cGTBmz*vw*x<`?EBvc*!sR)Ij`WRRUj=h$Xq zxm8)eTwKVuG<#4cbLr{v*}`;?+=E^!ss;H%IhZOeMMdNB64*0e7Mg4hNTOURpPLPY6W&Kl$mBrwXkcg` z+?bmvB@L$RzgI=I+;+|D@&_Fr7~HvM-(awNaQndE&~Quh>(cHuZ6vNIz?7?GYjRu> zd2hCy9>9=vZ+0w9O=XMjc_2HnFui|j%DvfF$YTO_GRk_&~at z&6h{AbMyEP*;%E9XHBHs8Z!zb?~UNBS)E!#X-QZ*Mj@z{)=)FVBLM^=z#VcmD{0Ij z?=nbgHy_(Dnk3?ct_D$F6iavz;44R?C8%P*A*Y$p@w`YCel%U=INw{E4(1n1Gdt24 z)}!sMk)E}RRvHtEiA|vA{JKz5OF}VLL0vE%b-+ZrY9u?Zv$43lmp&?ds~~HcyerIhFLsHV@^;4``lLS+G#(iB? zD`npxfKlQr2~l&0(xOaJin>L5LNl`m)Z0lhBa% z74#4Z*20vV#5yIIEgV}v%Q?!5N~txN&B5eYGnFf5C)Wh{n8(mc=O<@rF-;YUd{sOV z9LuKX3;A`#O=Gt{WiYe2$;hu7462SO4^y|gs+oubTU`yeaAh<0K{DcDXrf1UsH|>J z-pP0eyM(i5oU77$;#E9fi~i1~%fYCowdhia*%+{@Z&p$!XxsuPqaZ@?gG&QiT42uz zTw9F8d-{Up)ykQWz+(rEEuMtcy#R?89Pq-!mkW{zs#xC`^N{NTr)sp-tdWjUIkJq1C?gs1 zHF`6;x?^lp(2qvE{`gZjn^OG~&}-*%r4p>aeRy4(PiHW^$W)gV>supHOyGM zkPD%D)S#N2$d!amX0no5Vcj~TMZ1Y%V*Gf2VUhrAfk9u;;gUuaOrFm{#TB5cf=Oty zOnLSM;mE)bV;LI$wjCjm9xy?vT!hZ7(E&|s*EGPReOY^!w6fGZ0HAcSOgx0{7_il1 ztp$N}r=Q4xH6k7_5>-4dWy_YrqvOXhHb_5_pOaML*)*pd%C_eB>u8+p-+N%sjf25{ zEd6#K+}A&{Xa7FYUx&Hw&*kSA%2?);=He%VpC^rx2~rpV2{;s5gF=4x1bhY1&NMIW zM^v@yV{(H49+}Ao%HRjo!h8wSU=aX7gh|Y3+D2Ma3g&1d&>s_Ex^qzIkg&zTya`Oj z5G~+}0Rdk}HqU`5b(Ed5Awa1e=@OlIz;Qha24$?{{T8N*g}IP0vq?t1ld5nzLL-ey5!%7iv4o1gB zvvIW3Peg&yb|HLB_RZ*6RXqWqD!X|D#3Lkc;t2fZfsn}9d}gw5=LlDr+V*^i9vXCD zWsm2|qOGY%%|xlaYsxzyY7xIG5gS3TXbxkLYpeL+9;;uqM?l*HP957Nkr67iMb+z7 zMOW#}qR!=)dJ5Od77LR;h9jtFolhD_RBAa{S^eb5a-CSgVRXbRrsgR$VjLFA?`YTu z1O#2u2q-&%$`Gijx@*im?2xe}N$6Pqr%dCa$v+k1KcJwOs6OgYYW067d5CnY$JSQq z@tF4hqktX+qP*1vhL;|Z3?lvn8Rso+;%OF5#aN=ab3Yq+kxGFef}c|FznFD21I~C}YDzwudmYOlHem z?ItZT|+@KmRdsSVFW;#fLYKA11VDqmccEA8XIaUyr9YV}M|$&)fw z3ci+FYeV))`#Ozk_;pITs#Nu=27MzTD&wK`LXx(la*~|94vQc)t42rw?!!E9Y4(+U zxP|J0Nk3F*q!K{nl@s1&gSWC94>GPXC(6rj&GIJNoc<8go|Ebepq{N>HWc3wf-k z=iv|%dqf!{8-g8r^;?)yYh9Q+Sko8N0WEhuQ~RO{!$GMCZP1pmJ)AqP>{?9QBQsen zrInQn2;z?8s#+O!^V})G>YjlJnDlAPa9c{O3{-|$q+zjdtWhro4bE>1o)NV!`Y}_{2=HurNIn zqB5+I47#6z$8Wlz_RL@!O=dH*Y>{p)I|v2L&H~+iv>07aSrSeb>>a>5yuO^C-Xc@l z^`<5lsaxO@NdqT_IMJ&oq<8jI?Rtu=s607|5UBzTR?lZ+7^ob?P`;zrlUiF^ueUxL z{H~VI_+?&cbpED?9eynulLWtOGMv~l23Xg?Ob6@MtAD^jjX#+ppKTi`Bb>4?T7xW% zBZ!^ay`eRp+(5Uy)RP@e2@^m?g`7AjRGSJ%g482{b}K#f3owR*@M2&A+cC!WRrWFj zEK6TsP?)$C>jbq0%87!8KFx4;%P6u7ZX-Q~O}MHia$Xyjs*#S^_wamGAure&9(Wb$ zqf!ETBCwt~J!-71bCvTt8ql86OEK9Ap`hvNYcQD=$IVyh)W!p)C{B8_I|LFy>PA^{ zP6zuD8I(z4eF%SJJ2iyyWBJ&DzVK(Ltw-O4&ny%rU?e@Qw?5npv>wJrd%(sSQ3d8H z2i~4iFp{3eBTeXB37VvYuqy|}_%2YwZx?!l1jIko7yLC>&dwbGZ2?W8f=I9QG>}lN z7bWSz1r9LsbbX)NUKxo(LlL2^-Wsqq{7^IxPJC-8RdXJW^_ukfnMf!G<>DCRs1#yP zh)}vrza9~qGzrs7^PbG|z!_HM6sye6A(&+Y&Q20NhV6^iGf zX-6mvRvOykeH?8~ap7r*z=p*6IwZEW{b2wC_#&yvw+C`)`(f$Kw;qixJVWTbA+$$o z))6wt6PlmHL=K^ooiAi0VgfqPjE^YE1y?lO+|}hE7KDJkuz;VR8=-pswnx|wGG|X+RJa-*xi^TYF9UGid46ZSOR%F z`FiM6Nef?uWFZwu!BK=%W{gsK4ry9PI*y7(DKx^AXiP6_M071&cB9<(PulGm?BveT zZh)^)M1X@PTkg z_<=orHNoRH`ZZy|yu0SRdE@!ecfDoOiT{x~S+&A4bkv|(pv zk)go@`}=o;dD}Y&J&u`5ZEf=uQk2Z-*~fgbVoyQ@n|--AMPx2i%|?~7ClSCX1Pk*( z5E=ls>-=(Uki1z?9#1mJiR2S~sDH<3t0GFmQN^cdbvfJ6@=g5CPeb%H2x!q+N~8?tA-}T1)xrlk+)BkVuBxG0 z>~u}o3A_f|U{0_tsCgs!WQI2uEC9hxZ|{y;L|f%I3>5W?;;s7K%-~Q^`h}U5?HfB& z${Qfj8nR1OH6k_^MnhXZMrbJi7L*?tVCkR`MrRdBwbRLJ8sQonzP42(h7ALx8`g74 zYlIy<{AOUOW!g}78vAybz|5p+K0|(2sY!yog6@pCEX`ms<+XjgJ{YDyDhe%;@I7fE zr>}65BvOh{qwFYe4CfGB=lyZ*FWCZBkvNi)t!nDb?&Q`d9c8L*^2ck~f{t_@0cr>g z)j=VqrzP3GQhY{l9GH`q`ikP)CnvcW=cYPs7F*wWcd&zM{W+9E73Jr-AJ7)++Qt&)ti4FyTy6Wb6o2(Fs%CS97-qQDrim^QLmF=;TRxSP_epK) zwler>mcHQ0;AnOxmw}U2{Hxkw3#VmND|mr0Ys+JV7C5~{FnL(Hyzm2B0Y6P6M#TYE{W*^+g{%a&=7Ze|?nf7L(o zlRx;E2XA;jQS>o)8>q=j%iYzhQouOEVD@}Oldc;>TQya>1dE3&*q+8{_b6~%cG<0H zW!69&Mu9H3A4VZG(uC1N_1p0G&mvIWzAf1*QRqD0AR`UK!BUuPUxc7rCcy?8H51_)_+x z+#%Yr>)NgXdOOVq3zgy~OcUnxK)O6vDDBLqar`#1eW8p1bAC-EhSIsYLLLFchjPVo z0bcD71ViZ)bGhRvhtrvINEcgFEWDi{=0)?ue_SpyUJCmo1^UJD|Bbl}LWrf&1cnrL zE^tKkUAcT_b^)7X*WY~nW*7_MGvktIptJ#HwuH{IPUcDo8$Lk?21&wyIWBh;;9LQr z@R{zC;Vkwgu>~Z@M}>ao01-QV6h|6ur}c3-yEh=GO2l5>#31KI{7pzxkOVc$4oJ^% z;QQbn2S#}@P*BiAS$am`ydkndU#eY>X-Qy4*dN}PO39uD{@rM{ClqT0%c%p!!ZZTk z5Fh4jG1~|GwbeGP5$G=$k(?n%l9+WSe~Y%=soU=Aifen1M5@O&ET1m4)o$HtPb#j} z;aNDba1blDUH!3VgWA{9zgRqEh8qWUGMS%!6-go6Sm z@cAU6iJj{!Djk5m z9S#6~890$o&*8)>6DY9R?H!0qgo;TdP$GpFeA35Rpj!C0gY}TzK#hWlbdf=siP_xr zOqsEbQZ)tO37&+>l*-UX7)yjz1PT*{W9kLKB&HWIfvd+({arnE;b{uF3?_Ndp?pFh zblZ2Cw0hH{-=t^DxiSFLZa@pBQ!Je2&%bi3V zE#m>uIt>NX6H&&1&1BVMCmfwb+d=On-sPe9ORXZM=(`;r8A7%h z8{BWIi))01sL9&eW^(!RFoF^gMlD}>07g`tF(ag2*k({_ocvkDU-bj0`ht?oXT#a@ z5aXGcJ0Ud&SUfe0(LKmxYF6=1=`kVSS!Qk3C(Mg-?z$yHJ{W|C z0yWWYbpe4q^#QdDAnL`sa5|QP(|U3 zx4T_&85drG2s~ea8-S-{f@{MAr}mWQu}uL&Cg9zr~BFx5o7JB&D#TLg53&fUwy+k#Jd?bL6f=VDt}QuciP z-heDu_d!czq#q$B#A%|MOz8251L-+TGYC340zbluzU9%$w$XqD#c98q$oIw|FSd1k z^f3i3XTaK48bBXot7iGE)MeJ(KSW6o)BIjGwf8bBSxt8vsfhEX4oR0XgKmq34+ zs@%5H0QwlajiV3mjJ7t^>`v!bO^XF%_Cg>7XAG#Q6(e2?+jfwdfFUGn2+Z5wbP&<; z4qtEl&rbB?gd@x+CtyBwO|wOI&F@>dOfWmaEj{MDuvp3b6lcfYh*bz3=g|qV3M4zV zP#i{n9)}yA5X_yOWM$gpI@8NSUK}OX!X8c1h-t`iVqw?wY}i89twyJjven%;r9fjo z7|j>+$vBFlu!I_>yw_9dm+j}JvBF#rjKpjvzek1XN>jv5Gp1LT<*m!BkXpCQ3LVR> z(5Wk^oV*w%5_e4K51-7r#)e{ZVplh9wU`%!F!kSIlW_A6>o9{LVH(sS@ z`Bi#VClg}9CoZb59k#Cxleq5^khpXC&2GE|&2}xnSDhdA!t+=m3t<9i4BN*YL@124;Vz`rHTFq3Y#E_Yy#0 z<*C;xweQ9D2wcBZ-4ePBK`a@sM-TYNl59&-v}_gQtO-)hQ}ZcRzh+16nw|A)cGa%g zUB6~e?V7#yYxdQyxv_rD6x?@^j2c3o5+UDC7cvShQiPlzkN$e)$K(5PK0<^#x~}PI z$N$1`y7fo+etn0MHdPAj_5`_MwGR{9wFDSe=o^NhO<9YD86XV<&{nerpaxUJ)jgMu z1wkBCnodnaHTdXSL+ECp_#@-MQd1KXDKi#k4EU}E%yp_G?gUH#a2;1^R)!Hn} zt7a{hOk)O%5;NczuYCKIg<%2<7TFOu(V0asG;U~bOXkjafEznRo9~gWLqHRVMx7(o zS}rf=e)5NqTv*|TSAbt-NFlf>){ru*`ef_qm;%6EHUe?C7BJ=H?Josf= z!hsp4x&8&64X+I7l7sOrAWIYe>_M2M7_W$@oni5}TM!=Z|OtIy?To@LbAwN@t>h?ua$w$+2b_t1FSIk~WOyC8VtyF$Ic18}n_kqzs4G!oTHIHf5=8og%>Fj^_7-fb_}@C`P;0<RiaIuSK9NO0j z{N{{;!66$WX4DNBq;I1U1@+G_g*6mYmxu|v7SMb*f?`;gL>xm=lO4aI+oK#Q%QTG; zIG`O&%bQPOKwMD0jTcreWgSt=L=)B+siNctq#WSto|Gf&YtX%0(cLVMt~HdmCca9y zro+SCL{ZbahK;7oEu!N1_x)H4(xWET;&wPgF(j{9tVIpE=n2aOVxg7lwsNul`+`xA zp>c5oA%=d>2jNgK_}9eCHW-tqB77k(7Z{SK>LVGeA4&^w`2P|{=1ms%!dt;*27)w9 zh@N_h$z@UXTcr@Sw+lr>@lTql@P*v)Y&JU|v~LjW9@fn&H_#(HdCp`(BMffIzJCE* z&2j`WeYAkov+(2w*n0EQ8VOVTj%OSdbwU!H>28(d$aBn2<^Ut`8f_ zx;WU!l!KkUR-rTXp&>ojt4-I00Uvi z%ngXc#06x>S2Vg<7qVP6UnK}}|&X%cas&l5IEhjyfZ|uCdsT{B^n=J_}oMDhJbP~0yCCDKc+cu1Q+%&2P%-%Z( zo`q{@ZV~dSWJMy5K>7lNxssf61I5LAH)o!>@5wi1mG?@{_8PkJLI!{gIS$o^4LKM6 zqI_rLXejzc?KHAqHt?OGZQwgLMfKHmZEeU;s=R!>X|y#M**~y&EiB2J%4fu zFNjQN+7~0D!hWD#WHT*gMG?8})iPG$t25$GDNk;f4iSmB57!rjuAP;czSMF!H2qu`@nqOZo;D+vh$t+On z0+TvaF!YG%8OCQ}!NcVwPIhRei!e<+IWtqQKKY|pT|A`86&A`bl7XHbBQ_Ox^Cbmh zDW9IlwPc%WA zx7B7^bCyTcUXe!B)lbs6o7BCKUbFZHa%N&ug$=ICnli0LJI@)+m{DG+Fjo}}%oL)A zOkS5lPtS(B*%aen`9~27zmVv)n$^=n>5??vv8<+zHoVxTjU~0XJhEx3oz#M3h0cnB zlA;*mH6%kaI8__!C%MwrW^J^7S%*OtTVZS#c-WW= zB9*3sNFUszyh%ocLcmER_K$!4W9+rFW-zb&Ad<8fcmn1E7r7=sL{~f7)$4{lO-=C2tEdtE~6LzmO$qj zP;X>~Vi*?!1D$Dd6OeZ;&9zFAt5U#ksjJ84^iT~+QV-Ptx5aE)2(%JG(Eq9_f#VT_ zyi9mEPEq16VdQ*0l07j{IEJtbBxK_mVx{q;Jbpu?P-?BfcDy$svpI$pPc ziB|CJXL^s`j`muaD|$P54mcL%9%SWXbg0a^CVjfe&P|XMpx%yDx0whGK|Qn-3~nmw z>~OWp)XUSM*kuMASy%7B`d)H37%%$hx&{D;igqAF)dhoQpw}8f-mp-I-eqN;p3tlv zS1&Bhw$`Ec``+m{EHcc+$+n#o;0OZDV! z8v>bh8Ujf1)SB&%xu&!uPZ)~9KC}kXcv~US5}?Eom%<2znx^hgH}DsG7G_VL^uT4q`U-r4AjOmT|aK7VdUY6ekWL@fpvB zlmuln6Ae-yL?Y^GBE|H$QGB6#NT}iV?LE4MA)>z*tad1JOX3{a36CpZJ@t|eBGT-}$t5yx zX4IB3u({L@1lfvaFXd0jOR!U>l5C!{y)A(VeYz2_hQPX&mubLvAeRd=>|C1$yiN`O zzXl!zIF@r*mU7L+8)%>%$ZC0Xo9g-t-{R_Ll&SA{FzY8XS~RV#(@S3kCOX-r`_xK| zCeL_jCO1_!UOh!A-w6=!JJ8K2^Bq=;S-6KC2ph5Zlfmkh&?PU*i2!bgQ|Ysz0C(vP zAp<5ZHbur#jUcWkPae2&`<{J5MM{Z>s-MZ$4^Mf7}yLY4>ybDS#C{V{J+Rc|^RkxU^3de$P4?zHUrbX?o>HlWJ(qtX5uU&XRJ2ia?y8BTTSJl4 z{JWGNSq!J0cGLU>0qD>%Q{htRm~xjGojy6);?R)^bSYd^ zti+{d(?&r=ry#ZmY`h&B&QCHL+)N^mN`kyE{MB1)sO&9urfg*hREK0}1rRa@K$)fH zXjv42OIE!tHAS1bgeEBJ)taFd+~~w$=O(Fb#=4t({MQ&i>*1Y`pLgTmn%USj9+_`s zO}Ud3*^7e^?I| z)Yexim0v&)1bYJU^%w}oc5PrNi2eF6eK1`6{lQQU#3+SC{xb~*;X$3zpi&*_(IELS zA$5y2B+qv>L`J1LZ&Bjj>v*npZJC#VAaR50wNhfHhK<3(5Y}Fh`o^+Uw}D{rgQz@X zhl_}9g4Kg`V)_bP+G8#t>g09Mo2<*+^j9_qrwVQxUNvVw8hff{0b}9REFfkFQkXQf8c+vZ zASf5O7&we@X&z4E5s0u~wqITROqo!jUB&DaBDrSTRD`5gK6Wio({`tc5)Dtaj!&nP z#rS1dhgo-QLKq%w47mc1Hw_*ssnb;Y9v9S<8_@I>SyD89iZ<)i&{i(Trh>0c52Tt~ z$dngwN>k2Aj7z|)D`6%_)Qj03Qlyl@D1y(;S(1G_2>#^X`YV(?dj+ErhTe)B$*7`Ulo zG~xW((9R`cOLOudLZgT2Scd~c?L_c=o{{tb*9)gjkeiBq^iL4YBCaWzP#2*jZ8#|5 znuZaxl{vB#o6Q(!yq-*njAcyMs7x~ghdTc7KTR-?%av^JE}11PVHY{ zJUa-2AuDl|qO8C@;kUY3Bv;z!hePOrt;d)Nhj2b*C9KYQqWlun*c_@6V5SeXphdoe z_I1HUk5^Y=7cH<9!1?(@xh(F2uZ3Ua`%>W4mSewK?pGlf`nnXTV+>2n7Hh!@e{K-i zfm}Y1OZAMyzzCX#rM`whQI4i1WgkT*y)bJo+c0x7Z_tLeP%;7k3bTn!6%qeyJV9>j zb}hOimj-EtioEIS>P}OchZddmYnX1GSv4*DyE!gJYPen!7kzkxTz}MaHoCezpl+_G zhHiB~L}+E?8Je1wbf3itKzq^8%6KqSjIWQP0F0rqBoHd6Xfp;2V@xawgiEnnK#ZRw z`aRqi=5Q79$>y^~iUpi+dWOU;zeOBt_az5mhqDswuJRjzE!feW!_*d|Q#55{y0o&4 zIV6IQvTem!jgnn`(#MRuWcQNDxCkZLV({$dSkUoiGZi8Ka{dl*L1fjR;J|_4(4N7= z2yd_Yh8F?vlQiwk&-bUxCUDvpWckqF4?c=59xC78e<=R__Sn}ucg4OQ+7bKu@IdVA zf%ww>d#X#1n4H4EeKeV26j#66N#gxl$<|bNJLWfhnSmbJK7lkBa`R=f6vDC3_873uye|T$Gvb9saom6-BsghmlonWvhkDSCM zDcZsI!?Yfj1OzZ)F#CH0V}3pt`4Zw>20KCQeoE$SbN7(?m$SJ17jCFOb5vIf6^|53 zdu5d72_dy}+WW2=iYYZT;gv#b;WiFWhQAtg!~cfs3|NTa_x(8^7QeMLAIp_zs+F&f zWAMF_^YbR(StzYrbPDr|Z4MCKc@nMguNxQ^Ov6gw!9Ly2B$0}&O&~J)XdKhPEBEVwIAWFP@bdSL8|t3aAew3Zpg2PekN2s zQ%jjMF6_>c!C)cED;!-gKd(Qw3a~M*rfjHNX<-t%O`xMO#}{#*MKGN^3hQ5Gp^016 z%+H&F4)g%1u^@Jz=3t}XppO1YwjXXT?Hfiy6dY8ltzcdL@+B2)+NI2isM7RQ=ynW4 z!L+&7E~?nlQ~nJYuDC1*t6*2@jfMwA+NKz+J0QGbu>(RnE_-zij|W=?qHoj_f05hM z)SCuxQlrE=3N3$Ry3TQAR*g%HJho6Be6M4y9MdJg6SUms!WSEoB9vcF-n#n+D* zre3Tf2Y+<1#GATaCCqz1QN1?3u)c-?$5scalRW%Y_wN#fw+@HHYIRea`Z0E&UZ#u} z7xKI<*P4Dtk|N(h$GU4tU3^z@o@~W6-=$g*y&^K|PkQ284TTxp(v35*1^`f7)6yK` ztnc50m&P8}y9kfa4qU80gA}|FLeFmgdmG5in~NR{prD99EQ>no$>5$>z!j z^JTaf76U&6njFH|C&x?t$cZk52;r%K)Xp-E=@P=o7<7f}3yxem0k7?C08Ovo#|Yf5IGltaIv7 z#T_zru6MAKov8=);5@fvV^31z6Gt=q=yQKBL)p`1qaHX7;#~4VzL=iJk&f7&+&5A7gHM75a#^a6D`d=iHmgmI3tid3V$RQCZnKT zUG0?gVZa<;R(YfYT2}dqWtLATTbjq}k0X7K6=>l93v{b0CnzuboCM7?xWEKZvHUF@ zfs3_>wFCszxkKqCG#*p5$v^s^1O^|HL|`;B-2h=o#E}%4DVOIrPF|qsmpyrHH{lSE5$BTe4E}m zfG;UuI6;#%GdHP@i{sSY@Btd1YBH%(PkbE?_2HR+ig==<6<7M=a^IfT-d04bVpZ9S zFjXj+)Oy}io#@`!+SA_JlWOhhXzl52?dfXmLE)a(p5E4;K9<{=TEA0Drn>kzfdfBs zc$1a8Qg{QUILVlGBwuzpG(uW6q&~@Kum=6x%aicD{u!yO<<@{iX{K=@F{MIr1b2F4r*;m5d3L05xKNy()K?mhwFZ%PT5-NE)E3lo=Rkj< zFguAe{DNKtE^ENLJAO0HMZ*tsbGmapD_HVe-_1x9oxb_to}2ZC#mzj;lP$ulS(=A} z+c2L7Q-kD4wp7OUp!~(NSre!}D`>=Haxc38r+~pjL96OnM{CCzN8TkwO4G!{Md;|^ z;?o+MEQ0&~iCcFc5VSpQL_e@$ASX%1!c-UYOYPX+{}aOpw)YR>^&+K0lnxc3KkgH2 zXvFehVF{yXqHugo_-v)!MY|6EKApHRQbUlEK_Ne65O?$u1xck*zxl{czR3nstE0;B za_#h@t9FB^bFv@38=lYQ#}7d^pc$OoyZReLj#4Ubj-cENlrInzgC=}XJ(7lQXNT!} zq?59JU8{$#Z#|N#ZD(gJ6tjKR02s+OwzDf1j9vpY0Hu=*-Ps)r#qNDI07qnVXHP5~ zv**kICb|JS{K?wPhZl=HOp4`62|tEE6tV5@5HFt7{uCTohD& zxLzeow%XYho#(Gu0A3%;l$FV7lCq5fPHVv2XgtYfghmI%k%EbYDx#*kXbBXGbv-OA zB7~DIGYm2$Uq|)Ba<*@Hzmqb)l~BM0R?Wm2`r=lrhYA$s^+Dxn9;sq*ZSgB<=Uzi{~I4WT)fQA2K$BDP5*IprIrn~NYv`6JPj!kPj;7v|bRg!Wbn%d^cg#u}xnK@&5j0pv}{=Y!RM1qT2y<@q;di z4mcq?I^c%r=zt@lqXVu8>|(Pp@-yqw>_$f?OLww#Crfv-bSF!9!gbNn3Fk#eXCHsS zz0uLd8eOc>#Ts3#(Iwstm4AXBCF0Rdcg6&kmVB;FghO?xaA-MXfaAp{LodEZxV_eLaBe^{!@bw%6{=_GR>?GtAOXvb2*d z?F37G_H~kdonW8CPx*d&I=kBOE(3RMZQ>)uqm~5j+_emJyTa&p5#27L+eHcNq6BtP z0=poAKK5P2zKg=wMd9nB@O44>TxXOhbv4iz#HG~g%g~Nx^rbu8mu~i@n|J;WBHoj*WO3{L(CQ@)3I z_YiN06o0TFhkXx+eGi9y4~KmZhkXx+eGi9y4~IS2$RDiH)zw&c5e8JNy93K%4zgzY z-9;+L5I2w#vN3!Re^d*f{yobee_t4%K9awW~I>kM!>A?5M_(VxEMfbUK?1 zJ9x}2yDM8B&X&281-#AuwRElGvJh5|zZBHecGp)Vl1nzgZMBjO>xBPQB~X)?OyzoI zJQf=bIZjMlDm+EG@M_o!umpV9m@;1Z#+sixF{%V8OBkLF;o%cKs@?9mFcv{x zr9>lPev^L(VH2Q2PpU(F`s$@RepA|%FqJyhM^qZdkzj)9v|#8M!GRaNqCZOh;PMSP z%;g=uOY&zxuH}$-bQP&`2S(%ty*}y%VFlZ7yis1miGvkekLsy=s}Y|rgtgZ2)$yFPp%<4sv;k4V;if# z*#^5Tg-nATrok@DC-=!V*ku{!KAHx*EIHga*PtbdV6_8go{}wKZ&(-5_!ItF6r`~E z4hGtMcP!T931UJdF-Yv@#tc99+8!RVuPoTDQo{CSH?)?#u{}6s-dMDUM~0+`Wufg_ zuVtPhxDvNb4wb%YRQkfG^i`qKSA|Mn6qUYeRQl8)X2dI2Vi{aDW5Qk))gAc~n9M!$ z>2Z7$x(MS@^&^pZuRK~*x63AtytDX9Q9Hn-z8hCkUk@lLXpXCGO7!m_94Ce?%{vi~ z8%#4Gw;ER%jPg=`Xig`FXVS%at#e>P$~Q>U9%jzPBy<7|z^F8@CDb?IksWz&J79|+ zhnpW2EZyA)Dj?XS2GZU_9=mQJaV{etEE}YNr9}umM-vN{b)B*aqvsTkEw0dWD#v{g z^qk5OEF7U_q@gK8>XzmqiE<7YyewtCL6zu%IV&&ahn9+=>@1`S$tlQQ7`XBcl(z55 zXV|>veLq}7*b7yqEur;WRn}5j>R6gth*H-P&Ayk~j%t2Oj%I#KLa>(R!WM`q%bcpZKwHiM}adPW+hYdFjIP9 z)X02+c_H*3=dPr*6|4g@2854W6dae%-xq^a{xqt z;aWvE8iJq$=xYOzWsBPV({6XW2RP^-hnI48&%kvy?0&62J!4l^4)=a@4n_GW!UvuD zxJB9FMe9WC*#iJIv!k1%NSZXr((DK5a1$jnA=4Umg>ACDNTm*3OYVh1d8Jhe_?qX9Rys24&E`f z7(&tS+V(_TX4tFNB>PUgk#E4OOqf zZirX4(QXK2)eTxsvTv324+6&Y!X9O-JATC5DQI*^cm_7W)btY?_5v$H#thvx?#y8f z2KLZg938tT4LxzvpsF=UM)8g|N=AWfy1~K2aCZ~Gf_t*IY{8{ixX;whRjryD*kspv zSk07a{B-)5nsyRKziyYQJkU_kVzdDKc)US_ld&HrU;CabV+<)TD}>=9Y#|*5kI4Y> zJ@7i%>n8yAV(pxoo3n0vR>A_TH4q9P2v4&91q6sUn3YVl3&r8=tY`V)34u{rxl7yS z-}N_MMNAMV9ADp_gQb8-h-0IZK974iEnx8Qj9IJ96znN{vwuR(tI=C*J?-B3Bs`+9QiP-;K)xg44oYQj;ojE2*#;1Dg z`F+^Ck;89BOgUXUl#fQ6Tr|dc<)TkhA%Q`Cv=8U2$5iP?+Y~G6LK?LO69$rpAL!4O#Z5`i7ds~-BS~Ybqzn5+nAMI}KT2?RBG`svJ-HeM~E>nWk zWZFoZqrR-C%hmI1gCZ*j&Kqek+@6~cAw8W!SBy>38_H@>J9l=rUScT~0nR88GugUf zj!mFx9Ph^drX1ij>j&zD81Vi|Ckoz)^Z8JLapJ+9a8jC>z!eBNw&D!?-!M5{FxO z@HJ^vTepCrd|0+j#c@`uv1>JTat#PgQTx@R<9vZQ&NUBjF=)(2Do zBv%@I|3Vrkjd0||zu;8DP3@U`EJPScfU{^Mi^2r$6AP{GoOKtr5{W!Y`pAff1RZi! z`e_J+-pD*1dLz?l=#9*Bp*J!Ih2F?|#ye%EQP)VfE7M^vS7K5ao6#G6@~&QF50HvO zsBd~}R)Vez!`il1Q~{$*Q5Ep;dIoBEqLn=!7A^79;oJ_r*%9l}UqRqzG$$9x6dJe; zj7lz)Pc~rMFGRTDNM<>h$ih3H&L7b-;wZzo2}Vj>oV>=sv+Lhc3Z>`dF}&b0W5l&I z(qC0{?Wk);q|~P4OG5ude0)C-m^%j_bjsMJ&R=8W2Q93|&%Wc0zK=*5SXtQI&<2Ef!XFzNpAz5jOxKEZs|1BW<0u>lD{JgCPr0 zPWg9vtNM%0ZF&GZ94c99v3iGN4*S~>Xcb4KVx(lHcBz;Co{GnDPpZCgrII8!l|Fq< zj@9%LjI$nfHY_Zl=vStUGl#N$LFeKbq`=WcXgWk!$!asZfg^wG-9_)VTZs1oGc*M0k!{Z z?g(ZATy&0$IkcCDZ&ZFhR2C& z#D`+yNv*37cP?QTHzt)g8=3jUd~)ovW~lk3Qwn&!)fs_;cQH6ruHaDmUmq3`yuLRn z;ARVD!Mbi6^8ws-g{}jGYxG;?n5PbuEbQi>jC9*Ub;N88Y-fj%lc#>E5Coc;^VE%r zdRL#AscX8lN$Ky@H?q$jt{vHOu){dM^PQavONr1mXqxSK*Lg!yJ8v*n8p(&`;CUv) z9%wVkvq9~CJiJLvn2~DzXZ>YN2(6ZVwe~#a1e5r#q8s%g{bZ9@UR;L^MpZOJPzi#K zeM>=F)Ey8`8vmK%0|KUSG$!ry!O0qfR_)c6e89kG)od$wq>^R|@etAkt3@W3B;EV}f=O>j^=XBphxDYJW);6UMfh|hcygZVZyi>|8 z?mC5&54L-TRPY5|8!N_jy6s$l*hX)t--ri8c7O4}R1YfUN_S{h4=V7|U@o2}p`1@w zgqF3n9b@@FlxKAj}zgYtw`^FjIgJwC($kW>wsTs)!G z2DS&lFwJq)14$SPx24=DEVs2R(tRsc z>ebH_T~(`Q67Z0@MK00YU@l&5`fZ z=9Nt%1Cl-{ zsUuZ5h^>h|o|_ah8#>NT#BUjZDXs`mQcg$QS~qz-cIu227dlmyHk)-(;3HVAm2>mF z6fX?kR)`LB+iAJ0Nl{U{X|%B^;5>=WmBr$s)%c43W-b3!1dlhl3}{F2<%pMNdG$$b zyZkor9qQJ5BI=BqtNtMro!<^UyFg_H_cQemt|h~j9&-pMT|X@wjL0Kt^0-R^{c?H& zQF_=?oMeRT?tuZ}0i?}jsA5XvQqVs#bR&db5+kx;Rt}k?EdIaP*v%NNNfKj&#ps;P zW{fidwtV7(LJ~On+Mu_)9YfsPZ8b!A7r)ru51^dX?(1+$0ZsJnqU9NqPd>FYN1F&V z=iN=^1P@A=he{c!uz{Fs$_Yp9&e)szbZdIuWF}BWQoqTr9-AFVwJ7O zaW4irIdT7&y;O<$*9|%SwWuXgwGWhxAqzs*%Mb$3bUkz%{trsBP5}NUCs~D!-=8 zFa~7WPUlY?V>)2hF->06efFzLEBhRCEB|QCWUJg~Vu|lxxmQ)z6DUKSXc=Ilu3=q- zG(^S0;cG)7){=7OJ@;rRMb#VeRrIxFWIL#5EFBBVx-+XV)C>6PU|Ivl3*c`IlX#_5 zH3%(ARlPAT2KpR5+s0)WCb@ISr+)J!GaeVSxb0>#JBbz!&P$eKk|W5@!pTp1ycP{n zJK3htTubxPtsvGycgLMmRTk3PkkbpIDzAre7vEf#A`nket9k4aCY0Oq=%e*^KEKG}`vV-w`{4fgh05!*g zXhd4%vp17OzC_g)uR;+1FRPPq_1EsC+>6t`S~V;WsnAnL=&3XG)D?Q_4n6gRo_a%1 zeW9m~cryK3nq%mU9yJjQ;>I1=*+ZgAgl02A{hF!tWHyqKTPr(bUCEr@P>Zt@nAQ5# z0h~s?$i&i2uN<1l(?Ig_4k3==rP~$R9JcM!kXpJD?m*Y%apN{}@e53tG|qrWvq*}i z6rQ&=y}YY*)IB-aWb>3sV!Vt51a7CdMlGO^JX(!ey;XB#6$)k|)vK;$6UKAS>ad*# z=7k7HJQzCoB{519lzE`N=((|Y6Mu4YC_7g;DoN-Q33DNizNi>GB(TBcR1m2vv?KkN z?q>u?F~1wA7AH4$p~x9$`Tvm=4K6bEh(r(nx!0Qe_U{{nTRMyNGcTKFBds0{3I*=?(C70@GZ2zPB|i>4pe`q@kTq2g0}Rj^gnJ7=L*1=>YyBu~RgRf4Qt#2WI|7b{_=h}lz&lG(-d zM!#@^_Zi1|%<+7jk7ymyh7O zE>B+JJ*Sw8XB4-ppfcGVKI7mEKuFj-ov^Dbq%0WEDHl2dkz}4o>^@|1Gf(93!>Xj& z#FlQG*`51O4NU5+!@p*OXc;+kYM5w{-Bo%&!Sn`s@|B}LP^JfrOYeAxbqeXb0I(~B z#SXVM;3F3XwY81xAK1Ss*uU?_{o4nq-`@?v9>V+&Cf~xR?TL)VRDL4NHz-Z#~6Z1g$o%_RN_v z7WG*wwvFdX%1ePpYr(AY9l>L$eT4KBkAeRY)E!jA!-DTy_6+MNRv|Bj1!IJ4e7Z<0 z+_t8%=*QTh=dPESa6wyViwwoMMMg-N#Pz^4(|N$xBF@4v$dQMtsRDH!j3Nv3TK7Ui z5Mf@*O+W28nu)>9uV$SRf{%yLcQbj&ONkyJR-yUd^Np|+{>M>9bpi8ac47gy9ph4Z zEWRMe2u(#QIiE<>Bf2o|!6{{^W#EGjw*U*HReG;*&p@DdFs9p*`a+=qhS_Z80Iy}K^WaY-f#N*xmW(tc`)CM5L*iYOj+i&Q+-13ewa5h(lCgGS zwbr*aMk(bo3mY}kN}<(fwI{R3iI=ts0JlL)u6mM?W~xoulpb;W{Hl$27^&*9fxix;a8P;uQrhe0;DT)Sf z0;XUM4i8n=6I^Rm+>bzqXiYXyzk}7{U|;}g!=6QUAa4I5%nZF!32izUufJY#I3Q8a zvN}y-8CwsQcGEam%BpM}8J$HY3_xZeOnIb8LuhCtRYURTIB&g5UBLkwn)PFBA8%xM z8_(h6-`3XR^ysGMnsc>W@OLqDHJY)k56#wQwN6@v*6Ob3(dC)nLBm|mmLyJX?d5`F zsio?dRhrI5(@F(+K&G>BqreiLgd(SYn?f4mK;0b!HY=YMVgRx@DxIAz99su`UI(qm z3AC*(ze}qG3MP7CZuF7i$j@#PJ)EN^>c=fK5Ac_3% zhH34g2QpJ^aO*oZ>D8zTPGrlt^_*8|!z4PIDWvK7Wlp6kw3zi0It24vPYD^;md{gCJ@I! ztc6^)Sou7!ma%F$b@0GlAcbNSlNwagQ;R2hp6pf8qYB6}v8bxQr2L2FUe2<@(3NPH z?=jgA#U&{IhXg;keshot5FzD;&X&#LXa+4cib|%Nu=kz$V3cOORHG=BoF!^RbH(T` zBj9n3=}AN()iCE8lH;YCYrHipAJt=~HW|I1HQbVI$o?XlSWX%1AS)w~MrX@>t^7cn zs{*k?+XJJL8Z3!ygSUR+>*|u%hucoc`5I zl$I>@kNj+8eJCqdDo+>mL}kGGRYBa|;z(B7D5K(v+6Q)ztY~U#x&nXsFaLb|Oku0} z`!|n0w&l#3GqV-^;Wz%fVnx%6%kg_N{;pUd!NSIvVUZ?&Yr1S3el)KjLVCx4@HEq4^gDbZF?q@sj`&T|2K`}}?bFcSnPQI`G^?SE|>EZ2LAOG9G z-SW48^EX@a5C8RC1h**p^kwC*Icm>6GqctF{k2bgV#_nnJhOiZ)I82E%)jOcnxV;m z@B3WWRt(S2MG%xB=naWuf#oti>9AQzvGo%$3FPgFD?A?>R;;m!mqsJ4G)g~ E|IcSyvj6}9 literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/@EpochDevTools/Addons/rmx_sandbox.pbo b/Tools/DevFrameWork/@EpochDevTools/Addons/rmx_sandbox.pbo new file mode 100644 index 0000000000000000000000000000000000000000..78c56ad91238bbcdc396a719780a2350237939c7 GIT binary patch literal 114062 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

k9AaO9SfD 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 TXa4#hUReL;fBoyt|MUL`K8*kz literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/@EpochDevTools/mod.cpp b/Tools/DevFrameWork/@EpochDevTools/mod.cpp new file mode 100644 index 0000000000000000000000000000000000000000..342e092b0a5bc2958fe73c154533767a2c02a6f6 GIT binary patch literal 824 zcmZ9KOH0E*6ov0v@IM6C5{u$S5!|>D)Q#YJnzT(J$&@6v_Rp)|xzi*fLmqP<=bm$B ze!ffFT4$L(@LbrVJ=xBp6;`pkw{ttQ)`B&*nrh~X%wDK1$t*0lTONHEQ)d8Y06&89 z`VZv;#HICQ2mZ!cJND}Ngws5+@hLgX0&A@Oi$3zN=pCrLvn$rYR}RvsX+$bOY$l{= zdulq~TfT=$=^K43xM##7`P#Mi&Q7&^*wkbbYKEE>(=#&a8SqdVj=Y0=e2q6Z_;gA1 z8I<0u2S=alda}XRO_}}8V7Ml?Bwn+U>#9z1DT(N*`Q}95VHcfo znh>0eT-ThWK&+)eJ>nxDbY2yIsZw{NB{I(mS)+ej4_1iC%`E+A`0a)RUs{jB1 literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/@EpochDevTools/mod.paa b/Tools/DevFrameWork/@EpochDevTools/mod.paa new file mode 100644 index 0000000000000000000000000000000000000000..2c4442fd0fe4f9d300f640a2e96775d06bc60e5c GIT binary patch literal 56272 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 E0lOvg^Z)<= literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/README.md b/Tools/DevFrameWork/README.md new file mode 100644 index 00000000..bcc0b90d --- /dev/null +++ b/Tools/DevFrameWork/README.md @@ -0,0 +1,99 @@ +Epoch Developer Libraries (Framework) +===== +http://epochmod.com + +## This guide is WIP + +These tools are for developers only, please do not use on public servers, local development servers only! + +Technically you can simply copy/paste existing files into your Arma root and forget about it, unless you intend to use these tools for its intended purpose - as a development framework + +Don't forget to load the @mod on client + +Server config: + +Make sure -filepatching is enabled + +##### .bat file example +``` +@echo off +start "arma3" arma3server.exe autoInit -filepatching -mod=@EpochExperimental; -serverMod=@EpochHive; -port=2302 -config=c:\a3server\sc\server.cfg -cfg=C:\A3Server\sc\basic.cfg -profiles=sc -name=sc +``` + +* server.cfg +* verifySignatures = 0; +* BattlEye = 0; +* allowedFilePatching = 2; +* // WHITELIST FILE TYPES +* allowedLoadFileExtensions[] = {:}; +* allowedPreprocessFileExtensions[] = {"sqf"}; +* allowedHTMLLoadExtensions[] = {"html"}; + + +# Advanced: + + +Create your own sandbox using mine as a template, this will save you headache on future tool updates. +I will provide a clean template later. + +To create your own sandbox: +* Copy rmx_sanbox folder and rename it +* update .bat file to support your new folder +* update $PBOPREFIX$ +* delete "epoch" folder +* clean up config.cpp (see class A3E) +* cleanup sandbox.sqf +* you can either clean up variables.sqf, rename or delete it. It is used for F3 menu - to save permament code snippets :) + +Config.cpp +``` +preInit = 1; //function run as soon as missionNamespace is created +postInit = 1; //function is run after everything else is loaded +recompile = 1; //function is not finalized and can be recompiled live using rmx_fnc_recompile or F3 menu (auto populated) +``` + +### Tools: + +##### F2 - Debug console +you need an include in each of your scritps for it to work +``` +#include <\x\Addons\rmx_init\defines.inc> +``` + +to call debug console events you need to call infos, warnings or critical from your scripts. Examples: +``` +"this is info" info; +(2+2) warning; +(call _myfnc) critical; +``` + +#### F3 - Quick launch + +Edit variables.sqf + +Quick launch depends on rmx_var_quickFnc_items array, that's all there is to it. + +You can save code snippets here that you use the most. +``` +Syntax: [[RGBA],name,function] +``` + +#### F4 - variable watcher, see my youtube video + +#### F5, F6 etc tools are mostly used for Single player to change weather or post processing effects. + + +edit .bat file + +make sure you also point to includes.txt correctly without spaces + +Shit, this documentation will take me a week to compile all the features properly... + +License: +===== +Arma Public License Share Alike (APL-SA). +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Credits: +===== +https://github.com/EpochModTeam/Epoch/blob/release/CREDITS.md diff --git a/Tools/DevFrameWork/x/addons/include.txt b/Tools/DevFrameWork/x/addons/include.txt new file mode 100644 index 00000000..ff480c36 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/include.txt @@ -0,0 +1 @@ +*.xml;*.pac;*.paa;*.sqf;*.sqs;*.bikb;*.fsm;*.wss;*.ogg;*.wav;*.fxy;*.csv;*.html;*.lip;*.txt;*.wrp;*.bisurf;*.rvmat;*.sqm;*.ext;*.rtm;*.p3d;*.cfg; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/pack.bat b/Tools/DevFrameWork/x/addons/pack.bat new file mode 100644 index 00000000..56de4ab3 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/pack.bat @@ -0,0 +1,42 @@ +@echo on +setlocal + +rd P:\temp /s /q + +SET bin=D:\SteamLibrary\SteamApps\common\Arma 3 Tools\AddonBuilder +SET arma=E:\Steam\SteamApps\common\Arma 3 +SET patch=E:\Steam\SteamApps\common\Arma 3\x\addons +SET modPath=%arma%\@EpochDev\Addons +SET devPath=%arma%\@EpochDevTools\Addons + +:: Array +SET list=epoch_code epoch_config a3_epoch_language +SET devlist=rmx_init rmx_sandbox +:: Loops trough array and makes PBO if folder exists +for %%i in (%list%) do ( + IF EXIST %patch%\%%i ( + "%bin%\AddonBuilder.exe" "%patch%\%%i" "%patch%" -prefix="x\addons\a3_%%i" -include=F:\includes.txt -temp=P:\temp -packonly + ) +) +for %%i in (%devlist%) do ( + IF EXIST %patch%\%%i ( + "%bin%\AddonBuilder.exe" "%patch%\%%i" "%patch%" -prefix="x\addons\%%i" -include=F:\includes.txt -temp=P:\temp -packonly + ) +) + +for %%i in (%devlist%) do ( + move /Y "%patch%\%%i.pbo" "%devPath%" +) + +::for %%i in (%list%) do ( +:: rename "%patch%\%%i.pbo" "a3_%%i.pbo" +::) + +move /Y "%patch%\*.pbo" "%modPath%" + +set IP=192.168.1.100 +set PORT=2302 + +rem timeout 3 +rem start "MP" "%arma%\arma3.exe" -connect=%IP% -port=%PORT% -filePatching -window -mod=@EpochExperimental;@EpochDevLibs; -malloc=system -skipintro -noSplash -noPause -world=empty -showScriptErrors -password=test123 +@exit \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/$PBOPREFIX$ b/Tools/DevFrameWork/x/addons/rmx_init/$PBOPREFIX$ new file mode 100644 index 00000000..0a5a5ec5 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/$PBOPREFIX$ @@ -0,0 +1 @@ +x\addons\rmx_init \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/BIS_AddonInfo.hpp b/Tools/DevFrameWork/x/addons/rmx_init/BIS_AddonInfo.hpp new file mode 100644 index 00000000..bddf91d4 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1468263040"; +}; diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/atmosFEAR.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/atmosFEAR.hpp new file mode 100644 index 00000000..5978f990 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/atmosFEAR.hpp @@ -0,0 +1,680 @@ +class dUI_atmosFear { + idd = 8100; + enableSimulation = 1; + movingEnable = 1; + onKeyDown = "_this call rmx_fnc_keyDown;"; + onUnload = "['unload'] call rmx_fnc_atmosFearActions;"; + + class controls { + + //Background + class dUI_af_background: IGUIBack + { + idc = -1; + x = 0.304062 * safezoneW + safezoneX; + y = 0.1898 * safezoneH + safezoneY; + w = 0.39184 * safezoneW; + h = 0.671 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //Frames + class dUI_af_f_generics: RscFrame + { + idc = -1; + x = 0.31336 * safezoneW + safezoneX; + y = 0.225 * safezoneH + safezoneY; + w = 0.370186 * safezoneW; + h = 0.1694 * safezoneH; + colorText[] = {1,1,1,1}; + }; + class dUI_af_f_fog: RscFrame + { + idc = -1; + text = "Fog"; //--- ToDo: Localize; + x = 0.313344 * safezoneW + safezoneX; + y = 0.4032 * safezoneH + safezoneY; + w = 0.37125 * safezoneW; + h = 0.1188 * safezoneH; + }; + class dUI_af_f_wind: RscFrame + { + idc = -1; + text = "Wind"; //--- ToDo: Localize; + x = 0.313344 * safezoneW + safezoneX; + y = 0.5308 * safezoneH + safezoneY; + w = 0.37125 * safezoneW; + h = 0.242 * safezoneH; + }; + + //Text + class dUI_af_txt_winda2_array: RscText + { + idc = 8101; + text = "[100, 100, true]"; //--- ToDo: Localize; + x = 0.315406 * safezoneW + safezoneX; + y = 0.7112 * safezoneH + safezoneY; + w = 0.133031 * safezoneW; + h = 0.0198 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_txt_wind_dir_val: RscText + { + idc = 8102; + text = "360"; //--- ToDo: Localize; + x = 0.380375 * safezoneW + safezoneX; + y = 0.6452 * safezoneH + safezoneY; + w = 0.0505318 * safezoneW; + h = 0.0198 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_title: RscText + { + idc = -1; + text = "AtmosFEAR"; //--- ToDo: Localize; + x = 0.298925 * safezoneW + safezoneX; + y = 0.1986 * safezoneH + safezoneY; + w = 0.0721875 * safezoneW; + h = 0.022 * safezoneH; + colorText[] = {0.75,0.34,0,1}; + colorBackground[] = {0,0,0,0.8}; + }; + class dUI_af_txt_gusts: RscText + { + idc = -1; + text = "Gusts"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.3306 * safezoneH + safezoneY; + w = 0.0360937 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_Lightnings: RscText + { + idc = -1; + text = "Lightnings"; //--- ToDo: Localize; + x = 0.315413 * safezoneW + safezoneX; + y = 0.2382 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_Overcast: RscText + { + idc = -1; + text = "Overcast"; //--- ToDo: Localize; + x = 0.315406 * safezoneW + safezoneX; + y = 0.269 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_rain: RscText + { + idc = -1; + text = "Rain"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.3636 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_rainbow: RscText + { + idc = -1; + text = "Rainbow"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.2998 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_fog_density: RscText + { + idc = -1; + text = "Density"; //--- ToDo: Localize; + x = 0.315408 * safezoneW + safezoneX; + y = 0.4208 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_fog_decay: RscText + { + idc = -1; + text = "Decay"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.4538 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_fog_altitude: RscText + { + idc = -1; + text = "Altitude"; //--- ToDo: Localize; + x = 0.315408 * safezoneW + safezoneX; + y = 0.4868 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_wind_str: RscText + { + idc = -1; + text = "Strength"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.5462 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_wind_dir: RscText + { + idc = -1; + text = "Direction"; //--- ToDo: Localize; + x = 0.31519 * safezoneW + safezoneX; + y = 0.644667 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_wind_frc: RscText + { + idc = -1; + text = "Force"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.5792 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_waves: RscText + { + idc = -1; + text = "Waves"; //--- ToDo: Localize; + x = 0.315407 * safezoneW + safezoneX; + y = 0.6122 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_winda2: RscText + { + idc = -1; + text = "Wind (A2)"; //--- ToDo: Localize; + x = 0.315732 * safezoneW + safezoneX; + y = 0.686667 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_help1: RscText + { + idc = -1; + text = "m/s Positive: EAST | Negative: WEST"; //--- ToDo: Localize; + x = 0.483501 * safezoneW + safezoneX; + y = 0.6826 * safezoneH + safezoneY; + w = 0.197976 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_help2: RscText + { + idc = -1; + text = "m/s Positive: NORTH | Negative: SOUTH"; //--- ToDo: Localize; + x = 0.482876 * safezoneW + safezoneX; + y = 0.713519 * safezoneH + safezoneY; + w = 0.197976 * safezoneW; + h = 0.0198 * safezoneH; + }; + class dUI_af_txt_help3: RscText + { + idc = -1; + text = "Force?"; //--- ToDo: Localize; + x = 0.483501 * safezoneW + safezoneX; + y = 0.7442 * safezoneH + safezoneY; + w = 0.0453749 * safezoneW; + h = 0.0198 * safezoneH; + }; + + //Progress Bar + class dUI_af_p_lightning: RscProgress + { + idc = 8110; + texture = ""; + textureExt = ""; + colorBar[] = {0.9, 0.9, 0.9, 0.9}; + colorExtBar[] = {1, 1, 1, 1}; + colorFrame[] = {1, 1, 1, 1}; + x = 0.362842 * safezoneW + safezoneX; + y = 0.236 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_p_overcast: dUI_af_p_lightning + { + idc = 8111; + x = 0.362844 * safezoneW + safezoneX; + y = 0.2668 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_p_rainbow: dUI_af_p_lightning + { + idc = 8112; + x = 0.362844 * safezoneW + safezoneX; + y = 0.2976 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_p_gusts: dUI_af_p_lightning + { + idc = 8113; + x = 0.362844 * safezoneW + safezoneX; + y = 0.3284 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_p_rain: dUI_af_p_lightning + { + idc = 8114; + x = 0.362844 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + + class dUI_af_p_fog_density: dUI_af_p_lightning + { + idc = 8115; + x = 0.362843 * safezoneW + safezoneX; + y = 0.4186 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + + class dUI_af_p_fog_decay: dUI_af_p_lightning + { + idc = 8116; + x = 0.362844 * safezoneW + safezoneX; + y = 0.4538 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_p_fog_altitude: dUI_af_p_lightning + { + idc = 8117; + x = 0.362844 * safezoneW + safezoneX; + y = 0.4868 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + + class dUI_af_p_wind_str: dUI_af_p_lightning + { + idc = 8118; + x = 0.362842 * safezoneW + safezoneX; + y = 0.5462 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; + + class dUI_af_p_waves: dUI_af_p_lightning + { + idc = 8119; + x = 0.362844 * safezoneW + safezoneX; + y = 0.61 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; +/* + class dUI_af_p_wind_frc: dUI_af_p_lightning //not implemented yet + { + idc = 8120; + x = 0.363234 * safezoneW + safezoneX; + y = 0.577985 * safezoneH + safezoneY; + w = 0.0876563 * safezoneW; + h = 0.022 * safezoneH; + }; +*/ + //Input fields + + class dUI_af_t_rain: RscEdit + { + idc = 8130; + text = "0"; //--- ToDo: Localize; + x = 0.453595 * safezoneW + safezoneX; + y = 0.3592 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_fog: RscEdit + { + idc = 8131; + text = "0"; //--- ToDo: Localize; + x = 0.454626 * safezoneW + safezoneX; + y = 0.4538 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_wind: RscEdit + { + idc = 8132; + text = "0"; //--- ToDo: Localize; + x = 0.453594 * safezoneW + safezoneX; + y = 0.5462 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_force: RscEdit + { + idc = 8133; + text = "0"; //--- ToDo: Localize; + x = 0.45422 * safezoneW + safezoneX; + y = 0.577748 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_waves: RscEdit + { + idc = 8134; + text = "0"; //--- ToDo: Localize; + x = 0.454625 * safezoneW + safezoneX; + y = 0.61 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + + class dUI_af_t_dir: RscEdit + { + idc = 8135; + text = "0"; //--- ToDo: Localize; + x = 0.454625 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_winda2_x: RscEdit + { + idc = 8136; + text = "x"; //--- ToDo: Localize; + x = 0.454625 * safezoneW + safezoneX; + y = 0.6804 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + }; + + class dUI_af_t_winda2_y: RscEdit + { + idc = 8137; + text = "y"; //--- ToDo: Localize; + x = 0.454626 * safezoneW + safezoneX; + y = 0.7112 * safezoneH + safezoneY; + w = 0.0268126 * safezoneW; + h = 0.0242 * safezoneH; + }; + class dUI_af_t_export: RscEdit + { + idc = 8138; + x = 0.312343 * safezoneW + safezoneX; + y = 0.8234 * safezoneH + safezoneY; + w = 0.0948749 * safezoneW; + h = 0.0264 * safezoneH; + }; + class dUI_af_t_day: RscEdit + { + idc = 8139; + text = "26"; //--- ToDo: Localize; + x = 0.48762 * safezoneW + safezoneX; + y = 0.7882 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_month: RscEdit + { + idc = 8140; + text = "1"; //--- ToDo: Localize; + x = 0.516495 * safezoneW + safezoneX; + y = 0.7882 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_year: RscEdit + { + idc = 8141; + text = "1985"; //--- ToDo: Localize; + x = 0.54537 * safezoneW + safezoneX; + y = 0.7882 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_hours: RscEdit + { + idc = 8142; + text = "24"; //--- ToDo: Localize; + x = 0.48731 * safezoneW + safezoneX; + y = 0.8245 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_minutes: RscEdit + { + idc = 8143; + text = "00"; //--- ToDo: Localize; + x = 0.516082 * safezoneW + safezoneX; + y = 0.8245 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0242 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + class dUI_af_t_skipTime: RscEdit + { + idc = 8144; + text = "0.5"; //--- ToDo: Localize; + x = 0.637155 * safezoneW + safezoneX; + y = 0.7794 * safezoneH + safezoneY; + w = 0.0278435 * safezoneW; + h = 0.0286 * safezoneH; + colorText[] = {0.79,0.46,0,1}; + }; + //Sliders + class dUI_af_s_lightnings: RscSlider + { + idc = 8150; + x = 0.483519 * safezoneW + safezoneX; + y = 0.2382 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_overcast: RscSlider + { + idc = 8151; + x = 0.4835 * safezoneW + safezoneX; + y = 0.269 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_rainbow: RscSlider + { + idc = 8152; + x = 0.483501 * safezoneW + safezoneX; + y = 0.2976 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_gusts: RscSlider + { + idc = 8153; + x = 0.4835 * safezoneW + safezoneX; + y = 0.3284 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_rain: RscSlider + { + idc = 8154; + x = 0.483501 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_fog_Decay: RscSlider + { + idc = 8155; + x = 0.484532 * safezoneW + safezoneX; + y = 0.4538 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_fog_density: RscSlider + { + idc = 8156; + x = 0.484531 * safezoneW + safezoneX; + y = 0.4208 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_fog_altitude: RscSlider + { + idc = 8157; + x = 0.484046 * safezoneW + safezoneX; + y = 0.48817 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_wind_str: RscSlider + { + idc = 8158; + x = 0.483501 * safezoneW + safezoneX; + y = 0.5462 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_wind_frc: RscSlider + { + idc = 8159; + x = 0.483499 * safezoneW + safezoneX; + y = 0.5792 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_waves: RscSlider + { + idc = 8160; + x = 0.483501 * safezoneW + safezoneX; + y = 0.6122 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + class dUI_af_s_dir: RscSlider + { + idc = 8161; + x = 0.4835 * safezoneW + safezoneX; + y = 0.6452 * safezoneH + safezoneY; + w = 0.195919 * safezoneW; + h = 0.022 * safezoneH; + }; + + //Checkboxes + class dUI_af_b_winda2: RscCheckbox + { + idc = 8170; + x = 0.452564 * safezoneW + safezoneX; + y = 0.742 * safezoneH + safezoneY; + w = 0.0144373 * safezoneW; + h = 0.0264 * safezoneH; + }; + + //Combo + class dUI_af_c_import: RscCombo + { + idc = 8180; + x = 0.312318 * safezoneW + safezoneX; + y = 0.786 * safezoneH + safezoneY; + w = 0.0948858 * safezoneW; + h = 0.0264 * safezoneH; + onLBSelChanged = "_this call rmx_fnc_atmosFearActions;"; + }; + + //Buttons + class dUI_af_btn_rpt: RscShortcutButton + { + idc = 8190; + text = "RPT"; //--- ToDo: Localize; + x = 0.647438 * safezoneW + safezoneX; + y = 0.8168 * safezoneH + safezoneY; + w = 0.0422814 * safezoneW; + h = 0.033 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + tooltip = "Apply changes before exporting to RPT"; + }; + class dUI_af_btn_apply: RscShortcutButton + { + idc = 8191; + text = "Apply"; //--- ToDo: Localize; + x = 0.59175 * safezoneW + safezoneX; + y = 0.8168 * safezoneH + safezoneY; + w = 0.0515625 * safezoneW; + h = 0.033 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + }; + class dUI_af_btn_import: RscButton + { + idc = 8192; + text = "Load"; //--- ToDo: Localize; + x = 0.410281 * safezoneW + safezoneX; + y = 0.786 * safezoneH + safezoneY; + w = 0.0257811 * safezoneW; + h = 0.0264 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + }; + class dUI_af_btn_export: RscButton + { + idc = 8193; + text = "Save"; //--- ToDo: Localize; + x = 0.410281 * safezoneW + safezoneX; + y = 0.8234 * safezoneH + safezoneY; + w = 0.0567187 * safezoneW; + h = 0.0264 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + tooltip = "Apply changes before saving"; + }; + class dUI_af_btn_set: RscButton + { + idc = 8194; + text = "set"; //--- ToDo: Localize; + x = 0.544957 * safezoneW + safezoneX; + y = 0.8245 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0242 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + }; + class dUI_af_btn_plus: RscButton + { + idc = 8195; + text = "+"; //--- ToDo: Localize; + x = 0.666031 * safezoneW + safezoneX; + y = 0.7816 * safezoneH + safezoneY; + w = 0.0185621 * safezoneW; + h = 0.0242 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + }; + class dUI_af_btn_minus: RscButton + { + idc = 8196; + text = "-"; //--- ToDo: Localize; + x = 0.615499 * safezoneW + safezoneX; + y = 0.7816 * safezoneH + safezoneY; + w = 0.0185621 * safezoneW; + h = 0.0242 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + }; + class dUI_af_btn_del: RscButton + { + idc = 8197; + text = "Delete"; //--- ToDo: Localize; + x = 0.437093 * safezoneW + safezoneX; + y = 0.786 * safezoneH + safezoneY; + w = 0.0309372 * safezoneW; + h = 0.0264 * safezoneH; + onButtonClick = "_this call rmx_fnc_atmosFearActions;"; + }; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console.hpp new file mode 100644 index 00000000..c85e2689 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console.hpp @@ -0,0 +1,399 @@ +class dUI_console { + idd = 9100; + enableSimulation = 1; + movingEnable = 1; + class controls { + + class dUI_consoleFrame: RscFrame + { + idc = 9200; + x = 0.00211241 * safezoneW + safezoneX; + y = 0 * safezoneH + safezoneY; + w = 0.244332 * safezoneW; + h = 0.03 * safezoneH; + }; + class dUI_console_text_plain_0: RscText + { + idc = 9201; + text = "Info"; + x = 0.0699683 * safezoneW + safezoneX; + y = 0 * safezoneH + safezoneY; + w = 0.0216566 * safezoneW; + h = 0.0286 * safezoneH; + }; + class dUI_console_text_plain_1: RscText + { + idc = 9202; + text = "Critical"; + x = 0.155556 * safezoneW + safezoneX; + y = 0 * safezoneH + safezoneY; + w = 0.0340316 * safezoneW; + h = 0.0286 * safezoneH; + }; + class dUI_console_text_plain_2: RscText + { + idc = 9203; + text = "Warnings"; + x = 0.101936 * safezoneW + safezoneX; + y = 0 * safezoneH + safezoneY; + w = 0.0433128 * safezoneW; + h = 0.0286 * safezoneH; + }; + class dUI_console_text_plain_3: RscText + { + idc = 9204; + text = "Pause"; + x = 0.200936 * safezoneW + safezoneX; + y = 0 * safezoneH + safezoneY; + w = 0.0340316 * safezoneW; + h = 0.0286 * safezoneH; + }; + class dUI_console_checkbox_0: RscCheckbox + { + idc = 9205; + x = 0.0905927 * safezoneW + safezoneX; + y = 0.0022 * safezoneH + safezoneY; + w = 0.0123751 * safezoneW; + h = 0.022 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_consoleFilters;"; + }; + class dUI_console_checkbox_1: RscCheckbox + { + idc = 9206; + x = 0.144212 * safezoneW + safezoneX; + y = 0.0022 * safezoneH + safezoneY; + w = 0.0123751 * safezoneW; + h = 0.022 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_consoleFilters;"; + }; + class dUI_console_checkbox_2: RscCheckbox + { + idc = 9207; + x = 0.189587 * safezoneW + safezoneX; + y = 0.0022 * safezoneH + safezoneY; + w = 0.0123751 * safezoneW; + h = 0.022 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_consoleFilters;"; + }; + class dUI_console_checkbox_3: RscCheckbox + { + idc = 9208; + x = 0.229813 * safezoneW + safezoneX; + y = 0.0021 * safezoneH + safezoneY; + w = 0.0123751 * safezoneW; + h = 0.022 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_consoleFilters;"; + }; + class dUI_console_button_0: RscButton + { + idc = 9209; + text = "-"; + x = 0.0320173 * safezoneW + safezoneX; + y = 0.0022 * safezoneH + safezoneY; + w = 0.0175308 * safezoneW; + h = 0.0264 * safezoneH; + onButtonClick = "_this call rmx_fnc_consoleFilters;"; + }; + class dUI_console_button_1: RscButton + { + idc = 9210; + text = "+"; + x = 0.0503738 * safezoneW + safezoneX; + y = 0.0022 * safezoneH + safezoneY; + w = 0.0175308 * safezoneW; + h = 0.0264 * safezoneH; + onButtonClick = "_this call rmx_fnc_consoleFilters;"; + }; + class dUI_console_button_3: RscButton + { + idc = 9211; + text = "Clear"; + x = 0.00396872 * safezoneW + safezoneX; + y = 0.0021 * safezoneH + safezoneY; + w = 0.0268124 * safezoneW; + h = 0.0264 * safezoneH; + onButtonClick = "_this call rmx_fnc_consoleFilters;"; + }; + + class dUI_consoleGroup: RscControlsGroup + { + idc = 9050; + x = 0 * safezoneW + safezoneX; + y = 0 * safezoneH + safezoneY; + w = 1 * safezoneW; + h = 0 * safezoneH; + colorBackground[] = {0,0,0,0}; + shadow=0; + + class VScrollbar + { + width = 0.02; + autoScrollSpeed = 1; + autoScrollDelay = 2; + autoScrollRewind = 0; + shadow=0; + }; + + class HScrollbar + { + height = 0; + shadow=0; + }; + + class ScrollBar + { + color[] = {1,1,1,0.6}; + colorActive[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.3}; + thumb = "#(argb,8,8,3)color(1,1,1,1)"; + arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; + arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; + border = "#(argb,8,8,3)color(1,1,1,1)"; + }; + + class controls + { + class dUI_console_text_0: dUI_ConsoleText + { + idc = 9000; + y = 0 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_1: dUI_ConsoleText + { + idc = 9001; + y = 0.025 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_2: dUI_ConsoleText + { + idc = 9002; + y = 0.05 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_3: dUI_ConsoleText + { + idc = 9003; + y = 0.075 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_4: dUI_ConsoleText + { + idc = 9004; + y = 0.1 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_5: dUI_ConsoleText + { + idc = 9005; + y = 0.125 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_6: dUI_ConsoleText + { + idc = 9006; + y = 0.15 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_7: dUI_ConsoleText + { + idc = 9007; + y = 0.175 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_8: dUI_ConsoleText + { + idc = 9008; + y = 0.2 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_9: dUI_ConsoleText + { + idc = 9009; + y = 0.225 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_10: dUI_ConsoleText + { + idc = 9010; + y = 0.25 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_11: dUI_ConsoleText + { + idc = 9011; + y = 0.275 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_12: dUI_ConsoleText + { + idc = 9012; + y = 0.3 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_13: dUI_ConsoleText + { + idc = 9013; + y = 0.325 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_14: dUI_ConsoleText + { + idc = 9014; + y = 0.35 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_15: dUI_ConsoleText + { + idc = 9015; + y = 0.375 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_16: dUI_ConsoleText + { + idc = 9016; + y = 0.4 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_17: dUI_ConsoleText + { + idc = 9017; + y = 0.425 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_18: dUI_ConsoleText + { + idc = 9018; + y = 0.45 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_19: dUI_ConsoleText + { + idc = 9019; + y = 0.475 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_20: dUI_ConsoleText + { + idc = 9020; + y = 0.5 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_21: dUI_ConsoleText + { + idc = 9021; + y = 0.525 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_22: dUI_ConsoleText + { + idc = 9022; + y = 0.55 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_23: dUI_ConsoleText + { + idc = 9023; + y = 0.575 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_24: dUI_ConsoleText + { + idc = 9024; + y = 0.6 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_25: dUI_ConsoleText + { + idc = 9025; + y = 0.625 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_26: dUI_ConsoleText + { + idc = 9026; + y = 0.65 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_27: dUI_ConsoleText + { + idc = 9027; + y = 0.675 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_28: dUI_ConsoleText + { + idc = 9028; + y = 0.7 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_29: dUI_ConsoleText + { + idc = 9029; + y = 0.725 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_30: dUI_ConsoleText + { + idc = 9030; + y = 0.75 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_31: dUI_ConsoleText + { + idc = 9031; + y = 0.775 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_32: dUI_ConsoleText + { + idc = 9032; + y = 0.8 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_33: dUI_ConsoleText + { + idc = 9033; + y = 0.825 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_34: dUI_ConsoleText + { + idc = 9034; + y = 0.85 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_35: dUI_ConsoleText + { + idc = 9035; + y = 0.875 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_36: dUI_ConsoleText + { + idc = 9036; + y = 0.9 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_37: dUI_ConsoleText + { + idc = 9037; + y = 0.925 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + class dUI_console_text_38: dUI_ConsoleText + { + idc = 9038; + y = 0.95 * safeZoneH; + colorBackground[] = {0.2,0.2,0.2,0.31}; + }; + class dUI_console_text_39: dUI_ConsoleText + { + idc = 9039; + y = 0.975 * safeZoneH; + colorBackground[] = {0.3,0.3,0.3,0.31}; + }; + }; + }; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console2.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console2.hpp new file mode 100644 index 00000000..097ccf73 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/console2.hpp @@ -0,0 +1,7 @@ +class dUI_console2: dUI_console +{ + duration = 1e+1000; + fadein = 0.5; + fadeout = 0.5; + onLoad = "uiNamespace setVariable ['rmx_var_console2',_this select 0]"; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/editor.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/editor.hpp new file mode 100644 index 00000000..53130e34 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/editor.hpp @@ -0,0 +1,218 @@ +/* #Wekeqo +$[ + 1.063, + ["console",[[0,0,1,1],0.025,0.04,"GUI_GRID"],0,0,0], + [-2200,"bgrnd",[0,"",[0,-3.72529e-009,0.95,1],[-1,-1,-1,-1],[0.2,0.2,0.2,0.2],[-1,-1,-1,-1],"","-1"],[]], + [-1000,"title",[0,"Code Editor",[0,0,0.95,0.04],[-1,-1,-1,-1],[1,0.5,0,1],[-1,-1,-1,-1],"","-1"],[]], + [1400,"",[0,"",[0.025,0.12,0.9025,0.8],[-1,-1,-1,-1],[0.5,0.5,0.5,1],[-1,-1,-1,-1],"","-1"],[]], + [1600,"tab1",[0,"Tab1",[0.025,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1601,"tab2",[0,"Tab2",[0.125,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1602,"tab3",[0,"Tab3",[0.225,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1603,"",[0,"Tab4",[0.325,0.08,0.0985,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1604,"",[0,"Tab5",[0.425,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1605,"",[0,"Tab6",[0.525,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1606,"",[0,"Tab7",[0.625,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1607,"",[0,"Tab8",[0.725,0.08,0.0975,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1608,"",[0,"Tab9",[0.825,0.08,0.1025,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1001,"txt",[0,"Transparency",[0.005,0.94,0.14,0.036],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1900,"",[0,"",[0.155,0.928,0.39,0.068],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1609,"hide",[0,"_",[0.875,0,0.075,0.04],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1610,"Execute",[0,"Execute",[0.825,0.92,0.1025,0.08],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1611,"save",[0,"Save Tabs",[0.7,0.92,0.1025,0.08],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1612,"clear",[0,"Clear Tab",[0.575,0.92,0.1025,0.08],[1,0.5,0,1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]] +] +*/ + +class dUI_editor { + idd = 7100; + enableSimulation = 1; + movingEnable = 1; + onLoad = "'load' call rmx_fnc_codeEditorActions"; + onUnload = "'unload' call rmx_fnc_codeEditorActions"; + class controls { + class ce_bgrnd: IGUIBack + { + idc = 7200; + x = 0; + y = -3.72529e-009; + w = 0.95; + h = 1; + colorBackground[] = {0.2,0.2,0.2,1}; + moving = 1; + }; + class ce_title: RscText + { + idc = 7300; + text = "Code Editor"; //--- ToDo: Localize; + x = 0; + y = 0; + w = 0.95; + h = 0.04; + colorBackground[] = {1,0.5,0,1}; + moving = 1; + }; + class ce_editBox: RscEdit + { + idc = 7201; + x = 0.025; + y = 0.125; + w = 0.9025; + h = 0.7925; + colorBackground[] = {0.3,0.3,0.3,0.1}; + style = 16; + lineSpacing = 1; + colorText[] = {1,1,1,1}; + sizeEx = 0.05; + }; + class ce_tab0: RscButton + { + idc = 7202; + text = "Alfa"; //--- ToDo: Localize; + x = 0.025; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 0] call rmx_fnc_codeEditorActions"; + }; + class ce_tab1: RscButton + { + idc = 7203; + text = "Bravo"; //--- ToDo: Localize; + x = 0.125; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 1] call rmx_fnc_codeEditorActions"; + }; + class ce_tab2: RscButton + { + idc = 7204; + text = "Charlie"; //--- ToDo: Localize; + x = 0.225; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 2] call rmx_fnc_codeEditorActions"; + }; + class ce_tab3: RscButton + { + idc = 7205; + text = "Delta"; //--- ToDo: Localize; + x = 0.325; + y = 0.08; + w = 0.0985; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 3] call rmx_fnc_codeEditorActions"; + }; + class ce_tab4: RscButton + { + idc = 7206; + text = "Echo"; //--- ToDo: Localize; + x = 0.425; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 4] call rmx_fnc_codeEditorActions"; + }; + class ce_tab5: RscButton + { + idc = 7207; + text = "Foxtrot"; //--- ToDo: Localize; + x = 0.525; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 5] call rmx_fnc_codeEditorActions"; + }; + class ce_tab6: RscButton + { + idc = 7208; + text = "Golf"; //--- ToDo: Localize; + x = 0.625; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 6] call rmx_fnc_codeEditorActions"; + }; + class ce_tab7: RscButton + { + idc = 7209; + text = "Hotel"; //--- ToDo: Localize; + x = 0.725; + y = 0.08; + w = 0.0975; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 7] call rmx_fnc_codeEditorActions"; + }; + class ce_tab8: RscButton + { + idc = 7210; + text = "India"; //--- ToDo: Localize; + x = 0.825; + y = 0.08; + w = 0.1025; + h = 0.04; + colorText[] = {0.2,0.2,0.2,0.4}; + action = "['tabs', 8] call rmx_fnc_codeEditorActions"; + }; + class ce_txt: RscText + { + idc = 7211; + text = "Transparency"; //--- ToDo: Localize; + x = 0.005; + y = 0.94; + w = 0.14; + h = 0.036; + }; + class ce_slidhur: RscSlider + { + idc = 7212; + x = 0.155; + y = 0.928; + w = 0.39; + h = 0.068; + onMouseButtonUp = "'slider' call rmx_fnc_codeEditorActions"; + }; + class ce_btn_Execute: RscButton + { + idc = 7213; + text = "Execute"; //--- ToDo: Localize; + x = 0.825; + y = 0.92; + w = 0.1025; + h = 0.08; + colorText[] = {1,0.5,0,1}; + action = "'execute' call rmx_fnc_codeEditorActions"; + }; + class ce_btn_save: RscButton + { + idc = 7214; + text = "Save Tab"; //--- ToDo: Localize; + x = 0.7; + y = 0.92; + w = 0.1025; + h = 0.08; + colorText[] = {1,0.5,0,1}; + action = "'save' call rmx_fnc_codeEditorActions"; + }; + class ce_btn_clear: RscButton + { + idc = 7215; + text = "Clear Tab"; //--- ToDo: Localize; + x = 0.575; + y = 0.92; + w = 0.1025; + h = 0.08; + colorText[] = {1,0.5,0,1}; + action = "'clear' call rmx_fnc_codeEditorActions"; + }; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/gui_dependencies.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/gui_dependencies.hpp new file mode 100644 index 00000000..0af285f0 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/gui_dependencies.hpp @@ -0,0 +1,103 @@ +class RscPicture; +class RscButton; +class RscProgress; +class RscCombo; +class RscListBox; +class ScrollBar; +class HScrollbar; +class VScrollbar; +class RscText; +class RscStructuredText; +class RscShortcutButton; +class RscIGUIShortcutButton; +class RscGearShortcutButton; +class IGUIBack; +class CA_Title; +class RscControlsGroup; +class RscActiveText; +class RscLineBreak; +class RscIGUIListNBox; +class Attributes; +class RscFrame; +class RscCheckbox; +class RscEdit; +class RscSlider; + +//Fucking ninja cancer new to A3? +class RscActivePicture; +class RscActivePictureKeepAspect; + +class dUI_ConsoleText { //structured text for console + idc = -1; + type = 13; // defined constant + style = 0x00; + colorBackground[] = {0.2,0.2,0.2,0.7}; + x = 0 * safezoneW; + y = 0 * safezoneH; + w = 1 * safezoneW; + h = 0.025 * safezoneH; + size = 0.02; + text = ""; + + class Attributes { + font = "LucidaConsoleB"; //https://community.bistudio.com/wiki/File:Arma3Fonts.png + color = "#000000"; + align = "left"; //align of text. Values can be "left", "center" or "right" + valign = "middle"; //vertical align of text. Values can be "top", "middle", "bottom". + shadow = false; + shadowColor = "#ff0000"; + size = "1.25"; + }; +}; + +class dUI_rscText: RscText { + style = 0x02; + shadow = 2; +}; + +class dUI_sandbox { + idd = 666666; + enableSimulation = 1; + //movingEnable = 1; + class controls {}; +}; + +class rmx_ST3 +{ + x=0; + y=0; + h=0.035; + w=0.1; + text=""; + //size="(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + size = 0.04; + colorText[]={1,1,1,1}; + colorBackground[] = {0.2,0.2,0.2,0.7}; + shadow=2; + type = 13; + style = 0x02; + class Attributes + { + font="PuristaMedium"; // "RobotoCondensed"; + color="#ffffff"; + colorLink="#D09B43"; + align="center"; + valign = "top" + shadow=2; + }; +}; + +class rmx_watcherProgress: RscProgress +{ + idc = -1; + texture = "#(argb,8,8,3)color(1,1,1,1)"; + textureExt = ""; + colorBar[] = {1, 1, 1, 0.1}; + colorExtBar[] = {1, 1, 1, 1}; + colorFrame[] = {1, 1, 1, 1}; + x = 0.6; + y = 0.92; + w = 0.3; + h = 0.08; + +}; diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/ppEffects.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/ppEffects.hpp new file mode 100644 index 00000000..4db8d1c5 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/ppEffects.hpp @@ -0,0 +1,1213 @@ +class dUI_ppEffects { + idd = 6100; + enableSimulation = 1; + movingEnable = 1; + onKeyDown = "_this call rmx_fnc_keyDown;"; + onUnload = "['unload'] call rmx_fnc_ppViewerUpdate;"; + + class controls { + //category background + class cat_bckgrnd: IGUIBack + { + idc = -1; + x = 0.33499 * safezoneW + safezoneX; + y = 0.247 * safezoneH + safezoneY; + w = 0.331031 * safezoneW; + h = 0.0704 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //category text + class cat_logo: RscText + { + idc = -1; + text = "ppEffects Viewer"; //--- ToDo: Localize; + x = 0.33499 * safezoneW + safezoneX; + y = 0.225 * safezoneH + safezoneY; + w = 0.331051 * safezoneW; + h = 0.022 * safezoneH; + colorText[] = {0.76,0.98,0.27,1}; + colorBackground[] = {0,0,0,1}; + }; + class cat_txt: RscText + { + idc = -1; + text = "Category:"; //--- ToDo: Localize; + x = 0.337052 * safezoneW + safezoneX; + y = 0.2602 * safezoneH + safezoneY; + w = 0.0422813 * safezoneW; + h = 0.0198 * safezoneH; + }; + + + //category combo + class cat_combo: RscCombo + { + idc = 6110; + x = 0.385523 * safezoneW + safezoneX; + y = 0.258 * safezoneH + safezoneY; + w = 0.0938438 * safezoneW; + h = 0.022 * safezoneH; + onLBSelChanged = "_this call rmx_fnc_ppViewerUpdate;"; + }; + class cat_load_combo: RscCombo + { + idc = 6111; + x = 0.484529 * safezoneW + safezoneX; + y = 0.258 * safezoneH + safezoneY; + w = 0.0938436 * safezoneW; + h = 0.022 * safezoneH; + onLBSelChanged = "_this call rmx_fnc_ppViewerUpdate;"; + }; + + //category edit + class cat_edit: RscEdit + { + idc = 6120; + x = 0.484544 * safezoneW + safezoneX; + y = 0.291 * safezoneH + safezoneY; + w = 0.0938436 * safezoneW; + h = 0.0242 * safezoneH; + }; + + //category buttons + class cat_btn_Load: RscShortcutButton + { + idc = 6130; + text = "Load"; //--- ToDo: Localize; + x = 0.581386 * safezoneW + safezoneX; + y = 0.2558 * safezoneH + safezoneY; + w = 0.0433128 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "'import' call rmx_fnc_ppViewerGetSet;"; + }; + class cat_btn_save: RscShortcutButton + { + idc = 6131; + text = "Save"; //--- ToDo: Localize; + x = 0.581481 * safezoneW + safezoneX; + y = 0.2888 * safezoneH + safezoneY; + w = 0.0433128 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "'export' call rmx_fnc_ppViewerGetSet;"; + }; + class cat_btn_disable: RscShortcutButton + { + idc = 6132; + text = "Disable"; //--- ToDo: Localize; + x = 0.335057 * safezoneW + safezoneX; + y = 0.2888 * safezoneH + safezoneY; + w = 0.048469 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "_this call rmx_fnc_ppViewerUpdate;"; + }; + class cat_btn_random: RscShortcutButton + { + idc = 6133; + text = "RND"; //--- ToDo: Localize; + x = 0.444295 * safezoneW + safezoneX; + y = 0.2888 * safezoneH + safezoneY; + w = 0.0350628 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "_this call rmx_fnc_ppViewerUpdate;"; + }; + class cat_btn_del: RscShortcutButton + { + idc = 6134; + text = "DEL"; //--- ToDo: Localize; + x = 0.626845 * safezoneW + safezoneX; + y = 0.2558 * safezoneH + safezoneY; + w = 0.0391878 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "_this call rmx_fnc_ppViewerUpdate;"; + }; + class cat_btn_rpt: RscShortcutButton + { + idc = 6135; + text = "RPT"; //--- ToDo: Localize; + x = 0.626847 * safezoneW + safezoneX; + y = 0.2888 * safezoneH + safezoneY; + w = 0.0391878 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "_this call rmx_fnc_ppViewerUpdate;"; + }; + class cat_btn_resetALL: RscShortcutButton + { + idc = 6136; + text = "Reset ALL"; //--- ToDo: Localize; + x = 0.383726 * safezoneW + safezoneX; + y = 0.288652 * safezoneH + safezoneY; + w = 0.0598124 * safezoneW; + h = 0.0286 * safezoneH; + onButtonClick = "_this call rmx_fnc_ppViewerUpdate;"; + }; + + //color correction + //background + class cc_bckgrnd: IGUIBack + { + idc = 6210; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.33 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class cc_txt_brightness: RscText + { + idc = 6220; + + text = "Brightness"; //--- ToDo: Localize; + x = 0.362838 * safezoneW + safezoneX; + y = 0.357 * safezoneH + safezoneY; + w = 0.048469 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_contrast: RscText + { + idc = 6221; + + text = "Contrast"; //--- ToDo: Localize; + x = 0.480516 * safezoneW + safezoneX; + y = 0.356711 * safezoneH + safezoneY; + w = 0.0391878 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_offset: RscText + { + idc = 6222; + + text = "Offset"; //--- ToDo: Localize; + x = 0.597874 * safezoneW + safezoneX; + y = 0.358333 * safezoneH + safezoneY; + w = 0.0360941 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_blend: RscText + { + idc = 6223; + + text = "Blend (RGBA)"; //--- ToDo: Localize; + x = 0.353565 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.0690937 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_colorize1: RscText + { + idc = 6224; + + text = "Colorize (RGBA)"; //--- ToDo: Localize; + x = 0.463909 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.0690937 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_colorize2: RscText + { + idc = 6225; + + text = "Colorize (RGBA)"; //--- ToDo: Localize; + x = 0.577344 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.0690937 * safezoneW; + h = 0.0176 * safezoneH; + }; + + //Sliders + class cc_slider_brightness: RscSlider + { + idc = 6230; + + x = 0.337062 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class cc_slider_contrast: RscSlider + { + idc = 6231; + + x = 0.450501 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_offset: RscSlider + { + idc = 6232; + + x = 0.563939 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_bR: RscSlider + { + idc = 6233; + + x = 0.337063 * safezoneW + safezoneX; + y = 0.4714 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_bG: RscSlider + { + idc = 6234; + + x = 0.337062 * safezoneW + safezoneX; + y = 0.5154 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_bB: RscSlider + { + idc = 6235; + + x = 0.337062 * safezoneW + safezoneX; + y = 0.5594 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_bA: RscSlider + { + idc = 6236; + + x = 0.337062 * safezoneW + safezoneX; + y = 0.6034 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c1R: RscSlider + { + idc = 6237; + + x = 0.4505 * safezoneW + safezoneX; + y = 0.4714 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c1G: RscSlider + { + idc = 6238; + + x = 0.450501 * safezoneW + safezoneX; + y = 0.5154 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c1B: RscSlider + { + idc = 6239; + + x = 0.4505 * safezoneW + safezoneX; + y = 0.5594 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c1A: RscSlider + { + idc = 6240; + + x = 0.450501 * safezoneW + safezoneX; + y = 0.6034 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c2R: RscSlider + { + idc = 6241; + + x = 0.563938 * safezoneW + safezoneX; + y = 0.4714 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c2G: RscSlider + { + idc = 6242; + + x = 0.564551 * safezoneW + safezoneX; + y = 0.516089 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c2B: RscSlider + { + idc = 6243; + + x = 0.56403 * safezoneW + safezoneX; + y = 0.559607 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_c2A: RscSlider + { + idc = 6244; + + x = 0.564562 * safezoneW + safezoneX; + y = 0.602896 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //vignette pre + //text + class cc_txt_vignette: RscText + { + idc = 6250; + + text = "Vignette effect"; //--- ToDo: Localize; + x = 0.358722 * safezoneW + safezoneX; + y = 0.6452 * safezoneH + safezoneY; + w = 0.0690937 * safezoneW; + h = 0.0176 * safezoneH; + }; + + //checkbox + class cc_bool_vignette: RscCheckbox + { + idc = 6251; + x = 0.342218 * safezoneW + safezoneX; + y = 0.6386 * safezoneH + safezoneY; + w = 0.0175312 * safezoneW; + h = 0.0308 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_ppViewerUpdate;"; + }; + + //CC vignette + //background + class cc_v_bckgrnd: IGUIBack + { + idc = 6260; + + x = 0.335 * safezoneW + safezoneX; + y = 0.687 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.187 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class cc_txt_vHS: RscText + { + idc = 6270; + + text = "H Size:"; //--- ToDo: Localize; + x = 0.337062 * safezoneW + safezoneX; + y = 0.6914 * safezoneH + safezoneY; + w = 0.0474377 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_vVS: RscText + { + idc = 6271; + + text = "V Size:"; //--- ToDo: Localize; + x = 0.337062 * safezoneW + safezoneX; + y = 0.7354 * safezoneH + safezoneY; + w = 0.048469 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_vUnknown: RscText + { + idc = 6272; + + text = "?"; //--- ToDo: Localize; + x = 0.337062 * safezoneW + safezoneX; + y = 0.7794 * safezoneH + safezoneY; + w = 0.0680624 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_vhP: RscText + { + idc = 6273; + + text = "H Pos:"; //--- ToDo: Localize; + x = 0.512372 * safezoneW + safezoneX; + y = 0.6914 * safezoneH + safezoneY; + w = 0.0474377 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_vVP: RscText + { + idc = 6274; + + text = "V Pos:"; //--- ToDo: Localize; + x = 0.512372 * safezoneW + safezoneX; + y = 0.734607 * safezoneH + safezoneY; + w = 0.048469 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_vSTR: RscText + { + idc = 6275; + + text = "Strength:"; //--- ToDo: Localize; + x = 0.512374 * safezoneW + safezoneX; + y = 0.7794 * safezoneH + safezoneY; + w = 0.048469 * safezoneW; + h = 0.0176 * safezoneH; + }; + class cc_txt_vA: RscText + { + idc = 6276; + + text = "Alpha:"; //--- ToDo: Localize; + x = 0.441215 * safezoneW + safezoneX; + y = 0.8256 * safezoneH + safezoneY; + w = 0.0319691 * safezoneW; + h = 0.0176 * safezoneH; + }; + + //sliders + class cc_slider_vHS: RscSlider + { + idc = 6280; + + x = 0.388629 * safezoneW + safezoneX; + y = 0.6914 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class cc_slider_vVS: RscSlider + { + idc = 6281; + + x = 0.388631 * safezoneW + safezoneX; + y = 0.7354 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class cc_slider_vUnknown: RscSlider + { + idc = 6282; + + x = 0.388629 * safezoneW + safezoneX; + y = 0.7794 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_vHP: RscSlider + { + idc = 6283; + + x = 0.564969 * safezoneW + safezoneX; + y = 0.6914 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class cc_slider_vVP: RscSlider + { + idc = 6284; + + x = 0.563937 * safezoneW + safezoneX; + y = 0.7354 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class cc_slider_vSTR: RscSlider + { + idc = 6285; + + x = 0.564052 * safezoneW + safezoneX; + y = 0.7794 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class cc_slider_vA: RscSlider + { + idc = 6286; + + x = 0.476281 * safezoneW + safezoneX; + y = 0.8256 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //Chromatic aberation + //background + + class ca_bckgrnd: IGUIBack + { + idc = 6310; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.066 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class ca_txt_X: RscText + { + idc = 6320; + + text = "X:"; //--- ToDo: Localize; + x = 0.337064 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0134063 * safezoneW; + h = 0.0176 * safezoneH; + }; + class ca_txt_Y: RscText + { + idc = 6321; + + text = "Y:"; //--- ToDo: Localize; + x = 0.461012 * safezoneW + safezoneX; + y = 0.362037 * safezoneH + safezoneY; + w = 0.0134063 * safezoneW; + h = 0.0176 * safezoneH; + }; + class ca_txt_AR: RscText + { + idc = 6322; + + text = "Aspect Ratio:"; //--- ToDo: Localize; + x = 0.584562 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0587812 * safezoneW; + h = 0.0176 * safezoneH; + }; + //sliders + class ca_slider_x: RscSlider + { + idc = 6330; + + x = 0.357687 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class ca_slider_y: RscSlider + { + idc = 6331; + + x = 0.481439 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + //checkbox + class ca_cb: RscCheckbox + { + idc = 6340; + x = 0.645406 * safezoneW + safezoneX; + y = 0.3548 * safezoneH + safezoneY; + w = 0.0175312 * safezoneW; + h = 0.0308 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + + //Film grain + //background + class fg_bckgrnd: IGUIBack + { + idc = 6410; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.154 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class fg_txt_sharpness: RscText + { + idc = 6420; + + text = "Sharpness"; //--- ToDo: Localize; + x = 0.476279 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0464065 * safezoneW; + h = 0.0176 * safezoneH; + }; + class fg_txt_intensity: RscText + { + idc = 6421; + + text = "Intensity"; //--- ToDo: Localize; + x = 0.368002 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0464065 * safezoneW; + h = 0.0176 * safezoneH; + }; + class fg_txt_GS: RscText + { + idc = 6422; + + text = "Grain Size"; //--- ToDo: Localize; + x = 0.588687 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0464065 * safezoneW; + h = 0.0176 * safezoneH; + }; + class fg_txt_intensityx0: RscText + { + idc = 6423; + + text = "Intensity X0"; //--- ToDo: Localize; + x = 0.357688 * safezoneW + safezoneX; + y = 0.4274 * safezoneH + safezoneY; + w = 0.0546564 * safezoneW; + h = 0.0176 * safezoneH; + }; + class fg_txt_intensityx1: RscText + { + idc = 6424; + + text = "Intensity X1"; //--- ToDo: Localize; + x = 0.471122 * safezoneW + safezoneX; + y = 0.4274 * safezoneH + safezoneY; + w = 0.0546564 * safezoneW; + h = 0.0176 * safezoneH; + }; + class fg_txt_mono: RscText + { + idc = 6425; + + text = "Monochromic:"; //--- ToDo: Localize; + x = 0.572185 * safezoneW + safezoneX; + y = 0.4494 * safezoneH + safezoneY; + w = 0.0587812 * safezoneW; + h = 0.0176 * safezoneH; + }; + //sliders + class fg_slider_sharpness: RscSlider + { + idc = 6430; + + x = 0.450501 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class fg_slider_intensity: RscSlider + { + idc = 6431; + + x = 0.337062 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class fg_slider_gs: RscSlider + { + idc = 6432; + + x = 0.563937 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class fg_slider_intensityx0: RscSlider + { + idc = 6433; + + x = 0.337064 * safezoneW + safezoneX; + y = 0.4494 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class fg_slider_intensityx1: RscSlider + { + idc = 6434; + + x = 0.450489 * safezoneW + safezoneX; + y = 0.44977 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //checkbox + class fg_bool: RscCheckbox + { + idc = 6440; + x = 0.630971 * safezoneW + safezoneX; + y = 0.4428 * safezoneH + safezoneY; + w = 0.0175312 * safezoneW; + h = 0.0308 * safezoneH; + onCheckedChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //Radial blur + //background + class rb_bckgrnd: IGUIBack + { + idc = 6510; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.11 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class rb_txt_rX: RscText + { + idc = 6520; + + text = "Relative X:"; //--- ToDo: Localize; + x = 0.337064 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0505312 * safezoneW; + h = 0.0176 * safezoneH; + }; + class rb_txt_rY: RscText + { + idc = 6521; + + text = "Relative Y:"; //--- ToDo: Localize; + x = 0.502066 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0505312 * safezoneW; + h = 0.0176 * safezoneH; + }; + class rb_txt_cX: RscText + { + idc = 6522; + + text = "Centre X:"; //--- ToDo: Localize; + x = 0.337064 * safezoneW + safezoneX; + y = 0.4054 * safezoneH + safezoneY; + w = 0.0505312 * safezoneW; + h = 0.0176 * safezoneH; + }; + class rb_txt_cY: RscText + { + idc = 6523; + + text = "Centre Y:"; //--- ToDo: Localize; + x = 0.502063 * safezoneW + safezoneX; + y = 0.4054 * safezoneH + safezoneY; + w = 0.0505312 * safezoneW; + h = 0.0176 * safezoneH; + }; + + //sliders + class rb_slider_rX: RscSlider + { + idc = 6530; + + x = 0.398937 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class rb_slider_rY: RscSlider + { + idc = 6531; + + x = 0.563938 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class rb_slider_cX: RscSlider + { + idc = 6532; + + x = 0.398937 * safezoneW + safezoneX; + y = 0.4054 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class rb_slider_cY: RscSlider + { + idc = 6533; + + x = 0.563937 * safezoneW + safezoneX; + y = 0.4054 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //Water distrortion + //background + class wd_bckgrnd: IGUIBack + { + idc = 6610; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.308 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class wd_txt_blur: RscText + { + idc = 6620; + + text = "Blurriness"; //--- ToDo: Localize; + x = 0.365935 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0505312 * safezoneW; + h = 0.0176 * safezoneH; + }; + class wd_txt_sT: RscText + { + idc = 6621; + + text = "Strength Top"; //--- ToDo: Localize; + x = 0.469066 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0598124 * safezoneW; + h = 0.0176 * safezoneH; + }; + class wd_txt_sB: RscText + { + idc = 6622; + + text = "Strength Bottom"; //--- ToDo: Localize; + x = 0.575282 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0732187 * safezoneW; + h = 0.0176 * safezoneH; + }; + class wd_txt_wS: RscText + { + idc = 6623; + + text = "Wave speed"; //--- ToDo: Localize; + x = 0.357687 * safezoneW + safezoneX; + y = 0.4494 * safezoneH + safezoneY; + w = 0.0567186 * safezoneW; + h = 0.0176 * safezoneH; + }; + class wd_txt_wA: RscText + { + idc = 6624; + + text = "Wave amplitudes"; //--- ToDo: Localize; + x = 0.461842 * safezoneW + safezoneX; + y = 0.4494 * safezoneH + safezoneY; + w = 0.0763125 * safezoneW; + h = 0.0176 * safezoneH; + }; + class wd_txt_PC: RscText + { + idc = 6625; + + text = "Phase Coefficients"; //--- ToDo: Localize; + x = 0.572189 * safezoneW + safezoneX; + y = 0.4494 * safezoneH + safezoneY; + w = 0.0835313 * safezoneW; + h = 0.0176 * safezoneH; + }; + + //sliders + class wd_slider_blur: RscSlider + { + idc = 6630; + + x = 0.337064 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class wd_slider_sT: RscSlider + { + idc = 6631; + + x = 0.4505 * safezoneW + safezoneX; + y = 0.383333 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_sB: RscSlider + { + idc = 6632; + + x = 0.564041 * safezoneW + safezoneX; + y = 0.382756 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + class wd_slider_wS1: RscSlider + { + idc = 6633; + + x = 0.337063 * safezoneW + safezoneX; + y = 0.4714 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wS2: RscSlider + { + idc = 6634; + + x = 0.337468 * safezoneW + safezoneX; + y = 0.515511 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wS3: RscSlider + { + idc = 6635; + + x = 0.336958 * safezoneW + safezoneX; + y = 0.55903 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wS4: RscSlider + { + idc = 6636; + + x = 0.336958 * safezoneW + safezoneX; + y = 0.602896 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wA1: RscSlider + { + idc = 6637; + + x = 0.45051 * safezoneW + safezoneX; + y = 0.470719 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wA2: RscSlider + { + idc = 6638; + + x = 0.4505 * safezoneW + safezoneX; + y = 0.5154 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wA3: RscSlider + { + idc = 6639; + + x = 0.45102 * safezoneW + safezoneX; + y = 0.55903 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_wA4: RscSlider + { + idc = 6640; + + x = 0.4505 * safezoneW + safezoneX; + y = 0.603704 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_pC1: RscSlider + { + idc = 6641; + + x = 0.563938 * safezoneW + safezoneX; + y = 0.4714 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_pC2: RscSlider + { + idc = 6642; + + x = 0.563937 * safezoneW + safezoneX; + y = 0.5154 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_pC3: RscSlider + { + idc = 6643; + + x = 0.563937 * safezoneW + safezoneX; + y = 0.5594 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class wd_slider_pC4: RscSlider + { + idc = 6644; + + x = 0.563938 * safezoneW + safezoneX; + y = 0.6034 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //Dynamic blur + //background + class db_bckgrnd: IGUIBack + { + idc = 6710; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.088 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + + //text + class db_txt_blur: RscText + { + idc = 6720; + + text = "Bluriness"; //--- ToDo: Localize; + x = 0.478344 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0598124 * safezoneW; + h = 0.0176 * safezoneH; + }; + //slider + class db_slider_blur: RscSlider + { + idc = 6730; + + x = 0.4505 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + + //Color Inversion + //background + class ci_bckgrnd: IGUIBack + { + idc = 6810; + + x = 0.335 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.33 * safezoneW; + h = 0.088 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + //text + class ci_txt_red: RscText + { + idc = 6820; + + text = "Red"; //--- ToDo: Localize; + x = 0.378309 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.022688 * safezoneW; + h = 0.0176 * safezoneH; + }; + class ci_txt_green: RscText + { + idc = 6821; + + text = "Green"; //--- ToDo: Localize; + x = 0.485561 * safezoneW + safezoneX; + y = 0.3614 * safezoneH + safezoneY; + w = 0.0288754 * safezoneW; + h = 0.0176 * safezoneH; + }; + class ci_txt_blue: RscText + { + idc = 6822; + + text = "Blue"; //--- ToDo: Localize; + x = 0.601987 * safezoneW + safezoneX; + y = 0.361807 * safezoneH + safezoneY; + w = 0.0247506 * safezoneW; + h = 0.0176 * safezoneH; + }; + //sliders + class ci_slider_red: RscSlider + { + idc = 6830; + + x = 0.337064 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class ci_slider_green: RscSlider + { + idc = 6831; + + x = 0.450501 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + class ci_slider_blue: RscSlider + { + idc = 6832; + + x = 0.563938 * safezoneW + safezoneX; + y = 0.3834 * safezoneH + safezoneY; + w = 0.0989998 * safezoneW; + h = 0.0308 * safezoneH; + onSliderPosChanged = "_this call rmx_fnc_ppViewerEffects;"; + }; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/quickFunction.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/quickFunction.hpp new file mode 100644 index 00000000..eaf60f9d --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/quickFunction.hpp @@ -0,0 +1,56 @@ +class dUI_quickFunction { + idd = 9400; + enableSimulation = 1; + movingEnable = 1; + onKeyDown = "_this call rmx_fnc_keyDown;"; + class controls { + class dUI_qf_back: IGUIBack + { + idc = 9401; + x = 0.386562 * safezoneW + safezoneX; + y = 0.269 * safezoneH + safezoneY; + w = 0.226875 * safezoneW; + h = 0.462 * safezoneH; + colorBackground[] = {0,0,0,0.5}; + }; + class dUI_qf_title: RscText + { + idc = 9402; + text = "Quick function"; //--- ToDo: Localize; + x = 0.386562 * safezoneW + safezoneX; + y = 0.269 * safezoneH + safezoneY; + w = 0.226875 * safezoneW; + h = 0.022 * safezoneH; + colorBackground[] = {1,0,0,1}; + }; + class dUI_qf_lb: RscListbox + { + idc = 9403; + x = 0.396875 * safezoneW + safezoneX; + y = 0.357 * safezoneH + safezoneY; + w = 0.207282 * safezoneW; + h = 0.33 * safezoneH; + colorBackground[] = {0,0,0,0.8}; + }; + class dUI_qf_params: RscEdit + { + idc = 9404; + text = "'Params are saved into profileNamespace'"; //--- ToDo: Localize; + x = 0.396875 * safezoneW + safezoneX; + y = 0.313 * safezoneH + safezoneY; + w = 0.207281 * safezoneW; + h = 0.0242 * safezoneH; + colorBackground[] = {0,0,0,0.8}; + }; + class dUI_qf_hint: RscText + { + idc = 9405; + text = "Double click listbox item to Execute"; //--- ToDo: Localize; + x = 0.422656 * safezoneW + safezoneX; + y = 0.698 * safezoneH + safezoneY; + w = 0.155731 * safezoneW; + h = 0.022 * safezoneH; + colorBackground[] = {0,0,0,0}; + }; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher.hpp new file mode 100644 index 00000000..1eb7be0f --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher.hpp @@ -0,0 +1,111 @@ +/* #Rubowe +$[ + 1.063, + ["dsa",[[0,0,1,1],0.025,0.04,"GUI_GRID"],0,0,0], + [2200,"vw_bckgrnd",[0,"",[0,0.04,0.465,0.08],[-1,-1,-1,-1],[0.2,0.2,0.2,0.4],[-1,-1,-1,-1],"","-1"],["idc = 7501;"]], + [1000,"vw_title",[0,"Drag to move",[0,0,0.465,0.04],[-1,-1,-1,-1],[0.2,0.2,0.2,1],[-1,-1,-1,-1],"","-1"],["idc = 7502;","style = 2;","moving = 1;","onMouseButtonUp = |^savePos^ call rmx_fnc_watcherActions;|;"]], + [1001,"vw_pin: RscActivePictureKeepAspect",[0,"x\addons\rmx_init\data\retardedPinUp.paa",[0.429999,0,0.03,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[1,1,1,1],"","-1"],["idc = 7503;","onMouseButtonUp = |^pin^ call rmx_fnc_watcherActions;|;"]], + [1400,"vw_code",[0,"",[0,0.04,0.465,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],["idc = 7504;"]], + [2100,"vw_combo",[0,"",[0.115,0.08,0.275,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],["idc = 7505;"]], + [1600,"vw_btnAdd",[0,"Add",[0.390001,0.08,0.075,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],["idc = 7506;","action = |^execute^ call rmx_fnc_watcherActions;|;"]], + [2300,"vw_grp",[0,"",[0,0.12,0.465,0.044],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],["idc = 7507;"]], + [2101,"vw_combo_transparency",[0,"",[0,0.08,0.115,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],["idc = 7505;"]] +] +*/ + + + +class dUI_watcher { + idd = 7500; + enableSimulation = 1; + movingEnable = 1; + onUnload = "'unload' call rmx_fnc_watcherActions;"; + onLoad = "'load' call rmx_fnc_watcherActions;"; + class controls { + class vw_bckgrnd: IGUIBack + { + idc = 7501; + x = 0; + y = 0.04; + w = 0.465; + h = 0.08; + colorBackground[] = {0.2,0.2,0.2,0.4}; + }; + class vw_title: RscText + { + idc = 7502; + text = "Drag to move"; //--- ToDo: Localize; + x = 0; + y = 0; + w = 0.465; + h = 0.04; + colorBackground[] = {0.2,0.2,0.2,1}; + style = 0x02; //center + moving = 1; + }; + class vw_pin: RscActivePictureKeepAspect + { + idc = 7503; + text = "x\addons\rmx_init\data\retardedPinUp.paa"; + x = 0.43; + y = 0; + w = 0.03; + h = 0.04; + onMouseButtonUp = "'pin' call rmx_fnc_watcherActions;"; + }; + class vw_code: RscEdit + { + idc = 7504; + text = ""; + x = 0; + y = 0.04; + w = 0.465; + h = 0.04; + }; + class vw_combo: RscCombo + { + idc = 7505; + x = 0.115; + y = 0.08; + w = 0.275; + h = 0.04; + }; + class vw_btnAdd: RscButton + { + idc = 7506; + text = "Add"; //--- ToDo: Localize; + x = 0.390001; + y = 0.08; + w = 0.075; + h = 0.04; + colorText[] = {1,1,1,1}; + action = "'execute' call rmx_fnc_watcherActions;"; + }; + class vw_grp: RscControlsGroup + { + idc = 7507; + x = 0; + y = 0.12; + w = 0.465; + h = 0; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: VScrollbar + { + height = 0; + }; + class controls{}; + }; + class vw_comboTransparency: RscCombo + { + idc = 7508; + x = 0; + y = 0.08; + w = 0.115; + h = 0.04; + }; + onLBSelChanged = "'fade' call rmx_fnc_watcherActions;"; + }; +}; diff --git a/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher2.hpp b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher2.hpp new file mode 100644 index 00000000..b702b47e --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/CfgGUI/watcher2.hpp @@ -0,0 +1,7 @@ +class dUI_watcher2: dUI_watcher +{ + duration = 1e+1000; + fadein = 0.5; + fadeout = 0.5; + onLoad = "uiNamespace setVariable ['rmx_var_watcher2',_this select 0]"; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/config.cpp b/Tools/DevFrameWork/x/addons/rmx_init/config.cpp new file mode 100644 index 00000000..a33b8b3e --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/config.cpp @@ -0,0 +1,127 @@ +#include "BIS_AddonInfo.hpp" +//Author: Raimonds Virtoss / Raymix +class CfgPatches { + class rmx_init { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + //requiredAddons[] = {""}; + }; +}; +class CfgMods +{ + class rmx_devLibs + { + dir = "@EpochDEV"; + name = "RMX Dev library"; + picture = ""; + hidePicture = 0; + hideName = 0; + action = "http://raimonds.me"; + version = "0.1"; + }; +}; + +class CfgAddons +{ + access = 1; + class PreloadBanks + { + }; + class PreloadAddons + { + class rmx_devLibs + { + list[] = {}; + }; + }; +}; + +// deps needs cleanup +#include "CfgGUI\gui_dependencies.hpp" + +// dominion custom console, use Shift + F2 to activate +#include "CfgGUI\console.hpp" + +// quick function launcher, developers only, use dev_variables.sqf ... F2 to activate +#include "CfgGUI\quickFunction.hpp" + +// Code Editor ... ENTER to activate +#include "CfgGUI\editor.hpp" + +// Variable Watcher ... CTRL + ENTER to activate +#include "CfgGUI\watcher.hpp" + +// AtmosFEAR ... F5 to activate +#include "CfgGUI\atmosFEAR.hpp" + +// ppEffects viewer ... F6 to activate +#include "CfgGUI\ppEffects.hpp" + +class RscTitles { + class Default //use to delete title resources + { + idd = -1; + fadein = 0; + fadeout = 0; + duration = 0; + }; + //default console, F2 to activate (Shift + F2 to make buttons active) + #include "CfgGUI\console2.hpp" + #include "CfgGUI\watcher2.hpp" +}; + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++ +// Dev functions init - do not edit, important! +//+++++++++++++++++++++++++++++++++++++++++++++++++++++ +class devFunctions { //don't add fnc here, use appropriate pbo + init = "x\Addons\rmx_init\functions.sqf"; + + class rmx { + class raymix_dialogs { + file = "x\Addons\rmx_init\functions"; + class dialogVars {preInit = 1;recompile = 1;}; // vars + class buffer {preInit = 1;}; + class eventHandlers {preInit = 1;}; + + class getColorScheme{}; + class atmosFear {}; //Press F5 to toggle + class atmosFearActions {}; + class atmosFearUpdate {}; + class ppViewer {}; //Press F6 to toggle + class ppViewerUpdate {}; + class ppViewerEffects {}; + class ppViewerGetSet {}; + class console {}; //press F2 or shift + F2 to toggle + class consoleFilters {}; + class consoleUpdate {}; + class quickFnc {}; //press F3 to toggle dialog + class keyDown {recompile = 1;}; + class keyUp {}; + class output {}; + class codeEditor {recompile = 1;}; //press ENTER to toggle + class codeEditorActions {recompile = 1;}; + class watcher {recompile = 1;}; //press CTRL + ENTER to toggle + class watcherActions {recompile = 1;}; + class watcherAddRemove {recompile = 1;}; + class watcherRunner {recompile = 1;}; + }; + }; +}; +class cfgFunctions { //DO NOT EDIT BELOW + class rmx { + class rec { + file = "x\Addons\rmx_init"; + class recompile { + preInit = 1; + postInit = 1; + }; + }; + }; +}; +class RscStandardDisplay; +class RscDisplayStart: RscStandardDisplay +{ + onLoad = "[2] call compile preprocessfilelinenumbers gettext (configfile >> 'CfgFunctions' >> 'init'); call compile preprocessfilelinenumbers gettext (configfile >> 'devFunctions' >> 'init'); ['onLoad',_this,'RscDisplayLoading','Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"; +}; + diff --git a/Tools/DevFrameWork/x/addons/rmx_init/data/critical.paa b/Tools/DevFrameWork/x/addons/rmx_init/data/critical.paa new file mode 100644 index 0000000000000000000000000000000000000000..27fdb258f9e92861b3843175485ee8ef84ca5cce GIT binary patch literal 22016 zcmdsf3wV^(x$gQW_X#1{3PKf+2@;ji6g}He&Qsfj_^6-<4c$yK){u;$r75j2(CRa= zOEM;{1U$-=(`ag|j7DXgluo2gOsOG*Acmq4t3w8%$$&wIV95lCbI&^O`X_7s|BP3T zy*zvWR^jcsec$(f>s$9pp?BP|VCk)QlrKmoggk8S+bLuHg2fC|d<@^Q;D6uFu!MgZ z{*T*lzo!I$H{;)p_{-yEgfuTD{Ikz!u9Qj?-9s^_rJ>eUjXM11tZD@~P~Zm~KhX?^1D7LitO_Q>RW<$!7umf`5&L zG}-a-^h?E(MQSR*rz&rWtFJ|}MDdCAmRNh4F+Q`U77fe)wY06B4_uW>ZX)eci%#b% zPCYn}lziv^(zOxE3Y?ktF1Z=x($1*V4oFJbVg^k>m2Av&YMzL8y6zCc8%dr z8ev_DkR#C_{zXUZc1mR^@DX~(G7A(Ve|t5Oez^CHkJWb}LToxOA(sza7Wt)&^V)Sf z4@q;8TcmsZ)OUf&Q{hQH)|uthSnig(n7r$IWPjZGR*qzonoukdYmE@igub7OEhNrf z%$`HO))^X^{|(Euf9`xBDK+`4`<%>Px~XYz zlH{A-q~MoWb*@59?XF&Ce!BKzX?u}|1;&`h4@TEsY>XCWa(rxDH#Sz7=}_a zisOf(J0rG0oxoF~TO-6?ujA=cqG-`hRhXs6V=qzg#mJhA)n*o_WAZGG-gNQN!H}K4 zP9P;ATQAnMSD7Ji<_66eNhYYxs;e-WQ;)T0Ij8u_hGhR(_O5J?pZ?GJ#HL~XF&?W8 z{_)?0|7^zhfhQ+RR>=Z>JG8^|h`FpM(jI1fH)oZc^K66OtpC{ZlN5e;Mh>5??8rFD z?fd(PFPv!}7yMj|iu1XXQq%xijmS`DzLA0`^+Emixnh zmHw{--$MtsT|=zQpL^!g^aH=jz9N^bVthAeC2>A;E_#nXY%9=mye6_LoYiQmP~$+g zPVnUjFOK6Y5$B-1hAR0Pw$crv{NeE33FTJ-_ltB#m|=yl&%+!GBhGGs7Z1E0!+sM1B=+i_2da{-=V*DTtc76!ylgPbl0?{Jyh>2Mtq!fRx`=PRZc?J7W42!hb{S*Bd!Li1zH`)zuuYOlXhE zqfz<$V%TeLkKzx7;gu&N?wY?%y0``LAxsy&N8k@-2JJKOhlZ=2Y<{V$D8DbBFItg+ z1)rbGf0JZJS$nb^Z+??3#qj3zgQ+WSDA^L-cmm^-Yid3ni_NFohKHOl*}o>{V;h5$ zEy8q;?OC25 z?J@rn{Ck6s{9WX?YDzLkLhBxgwT=xW^k4P*@Dunqv++Mg)!*$swEnX9J8OL9lgIb?D>OEer%)e4jwDuC)xQKTtNB8!r#Zwap^-G|FHU+{YARn^slSrk^Osp0G}kl!!{d=iOk27C zn-kXmG5&Asy#LmDE3RevG5u~XI@}A>Q`+E^EE&?ZqQ863NZ!|K%Eb7)+*|6jdP8+w zp4Q${r&``b9Qf-@8(Z)5{II7<-M>GN??n41V)(3t>Hr`*}&1nbTG{1;B~_J=&VmaMESv3{HBmaJaY zewx%SS-MpFD{TJ)^I5?+a0}5o6#3gFtGS>@V8lb46z305{Zst`dLo`@iun8w=bI+K ztR7GD4@m7x5umuev43nue5w{0_EPUx%J#I?sq?pJRs18qwb$Hr@U834){ovn{o4rm zfBp}@{H2t&^PBGGtB*3iS^Q5<@BH3E-jQnPy-+({f9|ru-_%XhS`X;bw|57pQj{(*G(WRD8%pdFDt|G4g0Da#U$M+v4 zYaHJ;(juFW+Yk1!4v)j26ZQlSRjcAH&S%WERaHEl&G$0re!YWZ!~^SNS%vw3@YB(H z8ZOSW62p-r$B(Do*YHjE&#!hfz8U}Nv;N?#grZ!pmgq&yuJ7Q`4~NEiex}cGsJ>2M=x+tV z0>eILv(=-*X84PeAM?3TNQnR8EF+X7Z3;X9ea~c0t$zA_8V-Nnv`M-i} z`h|YeuQ1P*j4b|Jeh2cSTNwX0y4`v`uW!gJHLb9vnbNGLgMpMus(qXT*o*fEqmrUB>^;J9_^Io%h ze*Vlzcp##R2QyBG2e7&m@_czrOvVz`dTt;uZayjVZMU7}@-e=xZ~%@mnp=iJAjeE! zyDA;_Fk8LDaeP~CA>q&HPX@a^R4vMzC4GUt$HlQ^Bc{wuRsV0vogZ)?Kc4(bJpUQw zz_xt{o}9t?U;0RJkcPp(k=&>^8pZx)eo$)p@sHQ65%o6_J@{Arvy3d%xjJv)>F|fL zj*ddH|A*PNzOXPuE7Fa`;BYvUcyA)c3{|{>f0*WsjR}8X^ASy3{V`sC@N`}r-*n`? zBkJ)qJh1DCdVlF3frp0`e+m!0-=tn|K6Qkx=PD|>yaeMNQSFBjjE8X;`jU`xK8e&? zYp7n~7xwbhRV&y)$~<*->qY&wq^ubWG>#GPO)zJcz?R&Ss^G`2NGfH2{(SZN?Mx(*N%kTA&g^dqCEav}+|FxiB;UDey9~tlB`O&-e zt|-p``1}R(ySg271U8Y{vF}q+sN*72n_qIU%!4>;953**Mg^s z`5^jJMb&!6{${zq343Gx-Gt@Zqko`_wm!e;iDb!`TXOTw^R7#~_u<9v#zHseALogd z@8XDF@Si+8C+UxtNyxv@P~sHrr36XIV~^#F`HkcxO;vR!wfu(is!9ce@2F#r!Y}mM z(N>_u1L)i1&=R2!#$j_+EEt`hN9(-KF9Ie}6X}{JQ8Ll+NF; z!}%I-f88N}H|iJT=cU%q@|#uriR%vSjq`{3`xC|sD>3ORLc-qg4`VeQSL_MN^7n;K!f#kERFGheM(kFD!ET{{X%*DAM5`U z?gaj8+4!H{ox0kaT7%h}RJ*F@nr2>q{wP^k#P*ja{14+ndqsJrh;L}$Sfw5hATQ`w z_=dla?NIz-rj3}#qV-}uv8Ow01fpz^~7kr~Xn#a1k1;+m6!Wtv?XSF10eqYjcQf+RD zl%&z5kcB7N{Wiw89RCyePy5!qnp->Xze=hlwPv%K%yLsUABX^#U_(jBGvp%+t)YSm*+DdRG5*UK3;wwD z&%nF=H@{G?>fgH)_)h*KiQ8`>PRz$u=L?XpOTGVq8-;QH(BG}wf%81!51%LB{QaFB z#l^*<{|wS~hsMTmo;J~+2Iz_d24{&l41@0h4|&WSOIBibbrg#6w8ke{ zaX#}HJuefQi_?uV?9aN=`>&a?C;6*x)}NP^SE$c_Kaqdjr?m{hKcrg8V1+%>&Ums< zk<~X~K2Ww22IB4CK1#~6@{0t2w*{pxoIfk^pdI7G`hb<^XY<<~g>!8JWBz;PUD^VU z@u#%`23PQdJ1~6`{_sS{gRr;a4-;7U!+`(64t4(q-(BkdoxF#1spARyOFLEZ4cw)p zROknPu&q?3f7~B*J0RX`T;3--ro5o`heY`XDfH1P`$2>Lp>{0<n1Ut z=D9IGRM#o}zn!#HRH@+5zY>nYq9#q?Q>r;R?+UR1c{F6xmP%iR|s`bwO?X0&Jf_N1V{ zgRf_?yp&V%ADPcKEWENftAI1uzVj{n!wsX*<@ep$`aJ4A7=JC$8zP6 z72v<9S@GW$L8-UAa_t%3qSQy)tH-@oft|#rs~GokOu8h*28Tn9ullnxUxd6}nv8sO zQPv(IgA|OE=mkzbK;rlYe@<8Tu+m@ph?CMDEiW&*NiU=o{y^MP9EQBeZ-<>??J->TZ#zQ_S*rOI{K2g&*Ngd{^-kl>&BOGTa6%=KmM*VB-PV-|0s!%BQ%@{b2p<2T~Tcxaa*ANt2w zk0M`#5B}&X%I5X8dP!}A0rySP;8o_y-(-BB`_t|b?I!7~?)I!>tbbQy{80Fc_1{m! zUxa_Pzc9W(38#K7wI-?a{$ng%iwvm)K}V!~@*L(5hrbnG&E?-7B()huF3}%kf2cHy z{d>tP^;XkiVPEu5_(!~bU1LiBWA?}VCzIC?KKr67zVm#6*4|Hf=p81E)HCORJ z_6YGKytfO{kN3y+u;!QZ4E5&VZTZAujF7&zy*Wz z`tpOV0Ua$6eBLHwg?~A{df3eK4+Uxhx_Tu(F@LG9Q*d5D@>Gv2Cupdc<+Yz{we)2k&jQq z|0w>I_9Q*q&(f0FmKpMRA?XLJtE)3y2eZe>iX^7rv}I$uufE58B73~XO7z8aOvDHH zhp8b;i5Hk(HrWU%k$6& z#;9c0b|ZaaewH4>37BSwz$-(IHapRb@pNx+)dg#)+Qadp(5ee$PKTIpE(#sQ{c@ea zxIg|Lf@eL?e`n~nJ$7QQ<~aR)O$#Ajfgw*5pw51ZvM+7LQORh+1-h#aB7Psf(arSn zRAGL;?{J9}i{E9A;c*P-uf3zThuU5)d>sFG;h*axP4LgL#z3$Zrr54pC;JD{Ys%Po zlKzvJe@J?%tf64op57JQaubo)qh&?aW4iRybQ`@glihFCYsTOYH=#z23cI~ z!vBaB=QA0o?#eK`PpLQ8p}iFHysHlJ82y)BFwEWcEIEcJ!%SYS+0lmVBaC0Jk2Dd# zxxP#~_9fbbjqm>g{$s-6zifPfI)6{BPpI!waalrn8K;t$<@G7#oxly2|BUT#$~dK< zCdmmtczWhNKf-)f!MGrQ5l19!KQxwq{_M1?ROwly_P%0uI69siZ!A56#i2Q`{(OP7jg1O0E|;8kV!k6~9VJ$7w;>-2sX4g!#WvKuz+ly2(( zD>f?e>@#f~&wQ`^HGLw=a0j`3s55IJrnW_6#G0ckAXm=sd^!gmampC65goEnls{#e zh4R2v*8Dxd?a@i7pVe0td-kunjf4TA*; zo{lge3&6gNcy&;@Sp#Hl)@+5pPaNmvMnZ)Q3lgMnbF)@%mBz4E$#q z#~+5aj~3t>W7Q}fEoSnDo@+508a7Wm(ph-y;SKM756=SNufo4M|FLJKTa)4cX2yS- zKXvsfk0X+PUTW%iLAge<^87x}`G|5&Va1t!anBN-@h2a}GFEI;4frQLx(Al$@=<@v z3H7%AicxHAsQe)jQ@XE@`I{(@YYUrH{zm;nPS9)M=_}5(#yy*u9opxa+oRKIdwS$& z5!+8lO_h3+F`4~LNc+{txc*n!;oqI#{|49p>C=I2FdyAMDs?^f*5B6g`j@*Uo7Fbn z&vBiq{cp}OMW&Gj>V6CfjsNln!84>IKFc+{NX6{m#+a|F)**@>_@9EaQ(S{`*4l) z#G3o=<5!-)BxMx|EMJQyHbire+mCP}%I{9F#~_|* zsP#?EKY^Q-`W9H#*J`0{i+Q+O^fxA-Rdp@B6xSm0Y^o^z#P;ZG*^z_LU%m$0eq`RN zk%v~FhW4P}dQQKp~ zNcaOnY!`X@)3}zX_Wwk@+dtzpHW7us8%E;w#j-i>S}AKkRHr<{VDfoQ%FkZR>?7u) zqK*#D>f-3MdS6j!_HOLLjPK|{(C*R zhV$dm6QX_-t~L30|5ji#F^oBsZKYj@*fS#~Ufm05SXg~+EHVGOLy!Nu1m$>s)Mk#e2lTJ5uJ`bCj28MT)wX0_7bz<&%ziZaL{G#y z_ouJ*zfR<1py{^G<^PFgIM@GIY)-tmVHUO_^=BUYxro2$U#5!kD&Y_FKVa9~rV9C| z@0ZMKeW%OUHk4)hh7ms&?TWs;&MjzH_upr5EY_%sAG;~buUw-`tS@}T*LJ5?Tfp_j zqktA&m2zzr{%EWi?D-mvJ$%b8b(6A#ch!9RvVkYBcK@O9SpVy>YY^-j)Wo!2=Ksdu z21X+LSNrqN;FzpgkstQ3R#cisd3!jfvqZapcLT?}M~LmYP0BI$(>Fcu0$D z?3;77f0B=d4>o!w!*`aJ>(a@>*OdR9OT|dL!z>Z0Bv88I;9JtQf_% zudY%#=JG*5SC7!ICO|x{?zvi?KP8A`h^V4}N^pTsS3e9MV)eBK2#y_;Yd;d|tFBYF zDfa~k=11LI?igZH(lo{|J2ucpsAW%M)-iSr!=9xk>cjCD)t~1lhMDp)ke4j_#Sr`l zxU2vJdd3^LCZu1r9Qw=KcCW$%D22b^Sej_&j&TVd36{1L#BJjiUcmfS%%>g+Vur1n zKkp6Pc@jVC(@o!(CCE(9z>@ zE}MTE$8@@q%Wi_XUXs(4q zS%qQAqBp!|&#|ICECZIHee42EyY)op@{xyDMc6jOyYId$rh!Y2FYl%7*AFJzr~clT z)vuLXy|r}$L|5U5nr7K@r`r5{*yEyXBl2>b5rcIlw z(|AAFGTyr-Qsb0NS+Bo-8!sBhODvm^O4M zVf)w-EF)F=%{blJA=&LcJpT;b)^*ycu%CWE`?V6~b}gojdh7Z+Z}!`0oQ}Q$dGz7n z+wYWm_OCwu(W-CszrMi4!Z5FI&6^n3rz)>`{IBEprBttlryt7eQcojr``)Rx&-DH2 zJ7Jj;Uf-|J;WpCJ3SF_YIJ$Ss2KSQZ^Guka0fc!~7)RLd)2U7me|1jkTdULQu6`?anp=wcHrMFOCqMOa z7W&t*CBKOuhFG_R`Zno1^J~f(uGhNpTR3|BeunO9c)%S$L;2@(&Goqam-&AlX8l>z7xNZE);uq_kBvZV1xn*>ZCuu;421poFy#=xY_Ir*nRp%)Vbu< z=UNJ$d}iC_fe*GsLOt{m_A?~^Ynj-cz$LeqlV;^dP@Wzc@;;ViHb~BTUo{Q(JpK+Y zJ^e(dyUZVU(B9SKjW$yD_UN^bax+gqM4Gaa6dLb6L@Wl>C-uaNtrNMsuge>CKDM1P*I-J6F^gkbSi{?@Kg{aSrWSMV^zys`831ugkm w4<6C(r5Co<=e)M-NM4J6?Xv!4L{!-G-``wlDGoL!uRAx?9$xT+iNWOm0hDuZP5=M^ literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_init/data/info.paa b/Tools/DevFrameWork/x/addons/rmx_init/data/info.paa new file mode 100644 index 0000000000000000000000000000000000000000..b2f51027eace01c7997bb63c07eb8ca545577159 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_init/data/retardedPinDown.paa b/Tools/DevFrameWork/x/addons/rmx_init/data/retardedPinDown.paa new file mode 100644 index 0000000000000000000000000000000000000000..2e7e7a5154de617012e0b82e6f6a5c92b8cc12c1 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_init/data/w_error.paa b/Tools/DevFrameWork/x/addons/rmx_init/data/w_error.paa new file mode 100644 index 0000000000000000000000000000000000000000..3c96187f0829974741617fbce033f21385b4e8af GIT binary patch literal 7065 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 h>9Uk0er1GjhG)qn1~ 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 literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_init/data/warning.paa b/Tools/DevFrameWork/x/addons/rmx_init/data/warning.paa new file mode 100644 index 0000000000000000000000000000000000000000..a9cbe25dfb2d33408ebd5e33fb54fd8b47102495 GIT binary patch literal 22016 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 K4AiIxj{gQR#}TFg literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_init/defines.inc b/Tools/DevFrameWork/x/addons/rmx_init/defines.inc new file mode 100644 index 00000000..0ee537ae --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/defines.inc @@ -0,0 +1,18 @@ +#define info call _sendInfo +#define warning call _sendWarning +#define critical call _sendCritical + +#define ST_SIZE18 "size='1.8'" +#define ST_SIZE2 "size='2'" +#define ST_SKYBLUE "color='#00D0DF'" +#define ST_GREEN "color='#A5FD6B'" +#define ST_ORANGE "color='#FEA834'" +#define ST_RED "color='#ff0000'" +#define ST_WHITE "color='#FFFFFF'" +#define ST_TAHOMAB "font='TahomaB'" +#define ST_PURISTAMEDIUM "font='PuristaMedium'" +#define ST_SHADOW1 "shadow='1' shadowColor='#000000'" +#define ST_SHADOW2 "shadow='2'" +#define ST_INFO "" +#define ST_WARNING "" +#define ST_CRITICAL "" \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/fn_recompile.sqf b/Tools/DevFrameWork/x/addons/rmx_init/fn_recompile.sqf new file mode 100644 index 00000000..5cce2e59 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/fn_recompile.sqf @@ -0,0 +1,16 @@ +//todo use param +private ["_fnc"]; +_fnc = gettext (configfile >> "devFunctions" >> "init"); +if (_fnc != "") then { + if (typeName _this isEqualTo typeName "") then { + _this call compile preprocessfilelinenumbers _fnc; + } else { + call compile preprocessfilelinenumbers _fnc; + }; + true +} else { + diag_log "Init param not found, check config pbo"; + false +}; + + diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions.sqf new file mode 100644 index 00000000..e42f63f8 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions.sqf @@ -0,0 +1,374 @@ +//--- Fake header +_fnc_scriptName = if (isnil "_fnc_scriptName") then {"Dev Function Libs"} else {_fnc_scriptName}; + +/****************************************************************************************************** + DEFINE HEADERS +******************************************************************************************************/ + +private ["_this","_headerMetaData","_headerBuffer","_headerDebugOff","_headerNone","_headerSQF","_debugLevel","_debugEnabled","_headerDefault","_fncCompile","_recompile","_debugHeader","_debugDestination"]; + +_headerMetaData = " + _fnc_scriptNameParentTemp = if !(isnil '_fnc_scriptName') then {_fnc_scriptName} else {'%1'}; + private ['_fnc_scriptNameParent']; + _fnc_scriptNameParent = _fnc_scriptNameParentTemp; + _fnc_scriptNameParentTemp = nil; + + private ['_fnc_scriptName']; + _fnc_scriptName = '%1'; + scriptname _fnc_scriptName; +"; + +_headerBuffer = " + _sendInfo = {rmx_var_logMsg pushBack [0,_fnc_scriptName,_this]}; + _sendWarning = {rmx_var_logMsg pushBack [1,_fnc_scriptName,_this]}; + _sendCritical = {rmx_var_logMsg pushBack [2,_fnc_scriptName,_this]}; + +"; + +_headerDebugOff = " + _sendInfo = {}; + _sendWarning = {}; + _sendCritical = {}; + +"; +_headerNone = ""; + +_debugEnabled = getNumber (configfile >> "devFunctions" >> "debugEnabled"); + +//default headers if no specific entries are given +_headerDefault = if (_debugEnabled > 0) then {_headerMetaData + _headerBuffer} else {_headerNone + _headerDebugOff}; +/****************************************************************************************************** + Compile function +******************************************************************************************************/ + +_fncCompile = { + private ["_fncVar","_fncMeta","_fncPath","_fncHeader","_fncExt","_header","_fncFinal","_footer"]; + _fncVar = _this select 0; + _fncMeta = _this select 1; + _fncHeader = _this select 2; + _fncFinal = _this select 3; + + _fncPath = _fncMeta select 0; + _fncExt = _fncMeta select 1; + + switch _fncExt do { + + //--- SQF + case ".sqf": { + _header = switch (_fncHeader) do { + + //--- No header (used in low-level functions, like 'fired' event handlers for every weapon) + case -1: { + _headerNone + _headerDebugOff + }; + case 1: { + _headerMetaData + _headerBuffer + }; + default { + _headerDefault + }; + }; + + if (_fncFinal) then { + compileFinal (format [_header,_fncVar] + preprocessfilelinenumbers _fncPath); + } else { + compile (format [_header,_fncVar] + preprocessfilelinenumbers _fncPath); + }; + }; + + //--- FSM + case ".fsm": { + compileFinal format ["%1_fsm = _this execfsm '%2';",_fncVar,_fncPath]; + }; + + default {0} + }; +}; + +_fnc_recompile = { + private "_this"; + _fnc_scriptname = "rmx_recompile"; + { + diag_log format ["Recompiling: %1",_x]; + _x call rmx_fnc_recompile; + } count _this; +}; + +_fnc_init = { + private ["_this","_call"]; + _fnc_scriptname = _this select 0; + _call = _this select 1; + { + diag_log format ["[%2]: Calling: %1",_x,_fnc_scriptname]; + call (missionNamespace getVariable _x); //with missionNamespace do {call _x;}; + } count _call; +}; + +_fnc_createShortcuts = { + private "_this"; + { + _allowRecompile = (_x call (uiNamespace getvariable "bis_fnc_functionMeta")) select 5; + _xCode = uiNamespace getvariable _x; //shortcut copied over directly + if (_allowRecompile) then { + _xCode = call compile str (uiNamespace getvariable _x); //shortcut call compiles every mission start + }; + //diag_log format ["[%2]: Creating shortcut: %1",_x,_fnc_scriptname]; + missionNamespace setvariable [_x,_xCode]; + } foreach _this; +}; +/****************************************************************************************************** + COMPILE ONE FUNCTION + + When input is string containing function name, only that one function is recompiled. + + The script stops here, reads function's meta data and recompile the function + based on its extension and header. + Basically - it takes meta data from uiNamespace and uses it to replace function inside missionNamespace. + + This will work even if recompile = 0; is set, but will fail because it's compileFinal in this case + +******************************************************************************************************/ + +//--- Compile only selected +if (isnil "_this") then {_this = [];}; +if (typename _this != typename []) then {_this = [_this];}; +_recompile = if (count _this > 0) then {_this select 0} else {0}; + +if (typename _recompile == typename "") exitwith { + private ["_fnc","_fncMeta","_headerType","_var","_fncUINamespace"]; + + //--- Recompile specific function + _fncUINamespace = true; + _fnc = uiNamespace getvariable _recompile; + if (isnil "_fnc") then {_fnc = missionNamespace getvariable _recompile; _fncUINamespace = false;}; + if !(isnil "_fnc") then { + _fncMeta = _recompile call (uiNamespace getvariable "bis_fnc_functionMeta"); + _headerType = if (count _this > 1) then {_this select 1} else {0}; + _var = [_recompile,[_recompile,_fncMeta,_headerType,false] call _fncCompile]; + if (_fncUINamespace) then {uiNamespace setvariable _var;}; + missionNamespace setvariable _var; + if (isnil "_functions_listRecompile") then { + diag_log format ["[%3]: %1 recompiled with _meta %2",_recompile,_fncMeta,_fnc_scriptname]; + }; + } else { + diag_log format ["[%2]: %1 is not a function.",_recompile,_fnc_scriptname]; + }; +}; + + +/****************************************************************************************************** +If params passed did not contain string, function will automatically detect if: fresh compiles, new mission or recompile + +Detection is done by finalizing devlibs_init boolean inside 2 namespaces: +If bool doesn't exist anywhere, then game is launched +If bool exists only in uiNamespace then game was started, but not mission +If bool exists in missionNamespace, then server/client is running and will only recompile non-final functions. + +To make functions non-final while developing, use recompile = 1; inside pbo configs, simple as that. +******************************************************************************************************/ + + +if (call (uiNamespace getvariable ["devlibs_init",{false}])) exitWith { + private ["_functions_list","_functions_listRecompile","_functions_listPreInit","_functions_listPostInit"]; + + _functions_listRecompile = call (uiNamespace getvariable ["rmx_functions_listRecompile",{[]}]); + + if (call (missionNamespace getvariable ["devlibs_init",{false}])) then { + _functions_listRecompile call _fnc_recompile; + } else { + _functions_list = call (uiNamespace getvariable ["rmx_functions_list",{[]}]); + _functions_listPreInit = call (uiNamespace getvariable ["rmx_functions_listPreInit",{[]}]); + _functions_listPostInit = call (uiNamespace getvariable ["rmx_functions_listPostInit",{[]}]); + + _functions_listRecompile call _fnc_recompile; + + _functions_list call _fnc_createShortcuts; + ["preInit",_functions_listPreInit] call _fnc_init; + + [_functions_listPostInit,_fnc_init] spawn { + waitUntil {!isNil {missionNamespace getVariable "bis_fnc_init"}}; + ["postInit",(_this select 0)] call (_this select 1); + }; + missionNamespace setvariable ["devlibs_init",compileFinal "true"]; + }; +}; + +_functions_list = []; +uiNamespace setvariable ["rmx_functions_list",_functions_list]; +_functions_listPreInit = []; +uiNamespace setvariable ["rmx_functions_listPreInit",_functions_listPreInit]; +_functions_listPostInit = []; +uiNamespace setvariable ["rmx_functions_listPostInit",_functions_listPostInit]; +_functions_listRecompile = []; +uiNamespace setvariable ["rmx_functions_listRecompile",_functions_listRecompile]; +_functions_listPreStart = []; + +/****************************************************************************************************** +SCAN devFunctions if devlibs_init was not detected anywhere. +This part is done only once per game launch. Because of this an extra var inside uiNamespace is created with suffix _meta. +These _meta variables contain path to files, but are final. +If config file, file name or file path are changed, you'll have to re-PBO the whole structure again. + +Go through devFunctions, scan categories and declare all functions. + +Following variables are stored: +_fnc_ - actual code of the function +_fnc__meta - additional meta data of this format + [,,

,,,,] + * path - path to actual file + * extension - file extension, either ".sqf" or ".fsm" + * debugLevel - header type + * preInit - function is executed automatically upon mission start, before objects are initalized + * postInit - function is executed automatically upon mission start, after objects are initialized + * recompile - function is recompiled upon mission start + * category - function's category based on config structure + +******************************************************************************************************/ + +private ["_pathFile","_devFunctions"]; +_pathFile = gettext (configfile >> "devFunctions" >> "file"); + +_devFunctions = (configfile >> "devFunctions"); +for "_c" from 0 to (count _devFunctions - 1) do { + private ["_currentTag"]; + _currentTag = _devFunctions select _c; + + //--- Is Tag + if (isclass _currentTag) then { + private ["_tag","_tagName","_itemPathTag"]; + _tag = configname _currentTag; + _tagName = gettext (_currentTag >> "tag"); + if (_tagName == "") then {_tagName = configname _currentTag}; + _itemPathTag = gettext (_currentTag >> "file"); + + for "_i" from 0 to (count _currentTag - 1) do { + private ["_currentCategory"]; + _currentCategory = _currentTag select _i; + + //--- Is Category + if (isclass _currentCategory) then { + private ["_categoryName","_itemPathCat"]; + _categoryName = configname _currentCategory; + _itemPathCat = gettext (_currentCategory >> "file"); + + for "_n" from 0 to (count _currentCategory - 1) do { + private ["_currentItem"]; + _currentItem = _currentCategory select _n; + + //--- Is Item + if (isclass _currentItem) then { + private ["_epoch","_str","_itemName","_itemPathItem","_itemExt","_itemPreInit","_itemPostInit","_itemPreStart","_itemPath","_itemVar","_itemCompile","_itemRecompile"]; + + //--- Read function + _itemName = configname _currentItem; + _itemPathItem = gettext (_currentItem >> "file"); + _itemExt = gettext (_currentItem >> "ext"); + _itemPreInit = getnumber (_currentItem >> "preInit"); + _itemPostInit = getnumber (_currentItem >> "postInit"); + _itemPreStart = getnumber (_currentItem >> "preStart"); + _itemRecompile = getnumber (_currentItem >> "recompile"); + if (_itemExt == "") then {_itemExt = ".sqf"}; + _itemPath = if (_itemPathItem != "") then { + if (_tagName in ["rmx"]) then { //more tags can be added + //--- Disable rewriting of global functions from outside + private ["_itemPathItemRMX","_itemPathSlash"]; + _itemPathItemRMX = (tolower _itemPathItem) find "x"; + _itemPathSlash = (tolower _itemPathItem) find "\"; + diag_log format ["Not compiling: %1",_itemPathItem]; //remove later? + if ((_itemPathItemRMX < 0 || _itemPathItemRMX > 1) && _itemPathSlash > 0) then {_itemPathItem = "";}; + }; + _itemPathItem + } else { + "" + }; + + _epoch = _tagName in ["EPOCH","A3E"]; + + //path in category + if (_itemPath == "") then { + if (_epoch) then { + _itemPath = if (_itemPathCat != "") then {_itemPathCat + "\EPOCH_" + _itemName + _itemExt} else { + "" + }; + } else { + _itemPath = if (_itemPathCat != "") then {_itemPathCat + "\" + _itemName + _itemExt} else { + if (_itemPathTag != "") then {_itemPathTag + "\" + _itemName + _itemExt} else {""}; + }; + }; + }; + + _itemHeader = getnumber (_currentItem >> "debugHeader"); + _str = if (_epoch) then {"_"} else {"_fnc_"}; + + //category name as folder + if (_itemPath == "") then { + if (_epoch) then { + _itemPath = _itemPathTag + "\" + _categoryName + "\EPOCH_" + _itemName + _itemExt + } else { + _itemPath = _pathFile + "\" + _categoryName + "\" + _itemName + _itemExt + }; + }; + + _itemVar = _tagName + _str + _itemName; + _itemMeta = [_itemPath,_itemExt,_itemHeader,_itemPreInit > 0,_itemPostInit > 0,_itemRecompile> 0,_tag,_categoryName,_itemName]; + _itemCompile = if (_itemRecompile > 0) then { + [_itemVar,_itemMeta,_itemHeader,false] call _fncCompile; + } else { + [_itemVar,_itemMeta,_itemHeader,true] call _fncCompile; + }; + + //--- Register function + if !(_itemVar in _functions_list) then { + //---- Save function + uiNamespace setvariable [_itemVar, _itemCompile]; + //--- Save function meta data + uiNamespace setvariable [_itemVar + "_meta",compileFinal str _itemMeta]; + + _functions_list set [count _functions_list,_itemVar]; + }; + //--- Add to list of functions executed when missionNamespace is created (during loading screen) + if (_itemPreInit > 0) then { + if !(_itemVar in _functions_listPreInit) then { + _functions_listPreInit set [count _functions_listPreInit,_itemVar]; + }; + }; + //--- Add to list of functions executed after client, world and vehicles are created. + if (_itemPostInit > 0) then { + if !(_itemVar in _functions_listPostInit) then { + _functions_listPostInit set [count _functions_listPostInit,_itemVar]; + }; + }; + //--- Add to list of functions executed upon game start where missionNamespace does not exist. + if (_itemPreStart > 0) then { + if !(_itemVar in _functions_listPreStart) then { + _functions_listPreStart set [count _functions_listPreStart,_itemVar]; + }; + }; + //--- Add to list of functions that are not finalized and can be recompiled (DEV only). use recompile = 1; + if (_itemRecompile > 0) then { + if !(_itemVar in _functions_listRecompile) then { + _functions_listRecompile set [count _functions_listRecompile,_itemVar]; + }; + }; + }; + }; + }; + }; + }; +}; + +//--- Save the lists +uiNamespace setvariable ["rmx_functions_list",compileFinal str (_functions_list)]; +uiNamespace setvariable ["rmx_functions_listRecompile",compileFinal str (_functions_listRecompile)]; +uiNamespace setvariable ["rmx_functions_listPreInit",compileFinal str (_functions_listPreInit)]; +uiNamespace setvariable ["rmx_functions_listPostInit",compileFinal str (_functions_listPostInit)]; +uiNamespace setvariable ["devlibs_init",compileFinal "true"]; + +// Call preStarted functions + +{ + _function = [] call (uiNamespace getvariable _x); + uiNamespace setvariable [_x + "_preStart",_function]; +} foreach _functions_listPreStart; + +diag_log format ["[%1]: functions compiled",_fnc_scriptName]; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFear.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFear.sqf new file mode 100644 index 00000000..18854259 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFear.sqf @@ -0,0 +1,106 @@ +/* + Function Name: rmx_fnc_atmosFear + Author: Raimonds Virtoss | Raymix + Description: Atmosphere control dialog + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_display","_diag","_listBox"]; +disableSerialization; + +switch (rmx_var_atmosFearEnabled) do { + case false: + { + _diag = createDialog "dUI_atmosFear"; + _display = findDisplay 8100; + + for "_i" from 8110 to 8119 do { + rmx_var_afProgress set [count rmx_var_afProgress,_display displayCtrl _i]; + }; + + for "_i" from 8130 to 8144 do { + rmx_var_afInput set [count rmx_var_afInput,_display displayCtrl _i]; + }; + + for "_i" from 8150 to 8161 do { + rmx_var_afSliders set [count rmx_var_afSliders,_display displayCtrl _i]; + }; + rmx_var_afMisc = [_display displayCtrl 8170, _display displayCtrl 8180]; //cb, combo + rmx_var_afText = [_display displayCtrl 8101, _display displayCtrl 8102]; + + ["load"] call rmx_fnc_atmosFearActions; + [] spawn rmx_fnc_atmosFearUpdate; + rmx_var_atmosFearEnabled = true; + }; + case true: + { + rmx_var_atmosFearEnabled = false; + closeDialog 0; + }; +}; + +true + +/* +main dialog - 8100 + +Dynamic text: + A2 winds 8101 + wind direction 8102 + +progress bars: + lightnings 8110 + overcst 8111 + rainbow 8112 + gusts 8113 + rain 8114 + fog density 8115 + fog decay 8116 + fog altitude 8117 + wind str 8118 + waves 8119 + +Input fields: + rain 8130 + fog 8131 + wind 8132 + force 8133 //3 + waves 8134 + direction 8135 //select 5 + wind a2 x 8136 + wind a2 y 8137 + export 8138 + day 8139 //select 9 + month 8140 + year 8141 + hours 8142 + minutes 8143 + skiptime 8144 + +Sliders: + lightnings 8150 + overcast 8151 + rainbow 8152 + gusts 8153 + rain 8154 + fog decay 8155 //5 + fog density 8156 + fog altitude 8157 //select 7 + wind str 8158 + wind frc 8159 //9 + waves 8160 + direction 8161 + +Checkboxes: + wind a2 8170 + +combo box: + import 8180 + +buttons: + rpt 8190 + apply 8191 + load 8192 + save 8193 +*/ \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearActions.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearActions.sqf new file mode 100644 index 00000000..8a75aa2f --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearActions.sqf @@ -0,0 +1,272 @@ +/* + Function Name: rmx_fnc_atmosFearActions + Author: Raimonds Virtoss | Raymix + Description: Button actions + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_args"]; + +_args = _this select 0; +if (typeName _args != "STRING") then {_args = str _args}; +//hintSilent str _this; + +switch (_args) do { + case "load": + { + { + _x sliderSetRange [0,1]; + } forEach rmx_var_afSliders; + + (rmx_var_afSliders select 7) sliderSetRange [0,1000]; //fog altitude in meters + (rmx_var_afSliders select 11) sliderSetRange [0,360]; //wind direction in degrees + + private "_date"; + _date = date; //[2035,5,28,13,41] + (rmx_var_afInput select 9) ctrlSetText str (_date select 2); //day + (rmx_var_afInput select 10) ctrlSetText str (_date select 1); //month + (rmx_var_afInput select 11) ctrlSetText str (_date select 0); //year + (rmx_var_afInput select 12) ctrlSetText str (_date select 3); //hours + (rmx_var_afInput select 13) ctrlSetText str (_date select 4); //minutes + + //set saved slider positions and inputs + // [0,0,0,0,[0,0],[0,[0,0,0]],[0,0],[0,0],[0,0],[0,0],[0,0,false]] + (rmx_var_afSliders select 0) sliderSetPosition (rmx_var_afProfile select 0); + (rmx_var_afSliders select 1) sliderSetPosition (rmx_var_afProfile select 1); + (rmx_var_afSliders select 2) sliderSetPosition (rmx_var_afProfile select 2); + (rmx_var_afSliders select 3) sliderSetPosition (rmx_var_afProfile select 3); + + (rmx_var_afInput select 0) ctrlSetText str (rmx_var_afProfile select 4 select 0); //rain + (rmx_var_afSliders select 4) sliderSetPosition (rmx_var_afProfile select 4 select 1); + + (rmx_var_afInput select 1) ctrlSetText str (rmx_var_afProfile select 5 select 0); //fog + (rmx_var_afSliders select 5) sliderSetPosition (rmx_var_afProfile select 5 select 1 select 0); + (rmx_var_afSliders select 6) sliderSetPosition (rmx_var_afProfile select 5 select 1 select 1); + (rmx_var_afSliders select 7) sliderSetPosition (rmx_var_afProfile select 5 select 1 select 2); + + (rmx_var_afInput select 2) ctrlSetText str (rmx_var_afProfile select 6 select 0); //Wind str + (rmx_var_afSliders select 8) sliderSetPosition (rmx_var_afProfile select 6 select 1); + + (rmx_var_afInput select 3) ctrlSetText str (rmx_var_afProfile select 7 select 0); //Wind force + (rmx_var_afSliders select 9) sliderSetPosition (rmx_var_afProfile select 7 select 1); + + (rmx_var_afInput select 4) ctrlSetText str (rmx_var_afProfile select 8 select 0); //Waves + (rmx_var_afSliders select 10) sliderSetPosition (rmx_var_afProfile select 8 select 1); + + (rmx_var_afInput select 5) ctrlSetText str (rmx_var_afProfile select 9 select 0); //Direction + (rmx_var_afSliders select 11) sliderSetPosition (rmx_var_afProfile select 9 select 1); + + (rmx_var_afInput select 6) ctrlSetText str (rmx_var_afProfile select 10 select 0); //x + (rmx_var_afInput select 7) ctrlSetText str (rmx_var_afProfile select 10 select 1); //y + (rmx_var_afMisc select 0) cbSetChecked (rmx_var_afProfile select 10 select 2); + + lbClear (rmx_var_afMisc select 1); + { + (rmx_var_afMisc select 1) lbAdd (_x select 0); + } forEach rmx_var_afLoadSave; + (rmx_var_afMisc select 1) lbSetCurSel rmx_var_afSelected; + }; + case "unload": + { + ["save"] call rmx_fnc_atmosFearActions; + rmx_var_atmosFearEnabled = false; + rmx_var_afProgress = []; + rmx_var_afInput = []; + rmx_var_afSliders = []; + rmx_var_afText = []; + rmx_var_afMisc = []; + }; + case "save": + { + // [0,0,0,0,[0,0],[0,[0,0,0]],[0,0],[0,0],[0,0],[0,0],[0,0,false]] + rmx_var_afProfile = + [ + sliderPosition (rmx_var_afSliders select 0), + sliderPosition (rmx_var_afSliders select 1), + sliderPosition (rmx_var_afSliders select 2), + sliderPosition (rmx_var_afSliders select 3), + [ + call compile (ctrlText (rmx_var_afInput select 0)), + sliderPosition (rmx_var_afSliders select 4) + ], + [ + call compile (ctrlText (rmx_var_afInput select 1)), + [ + sliderPosition (rmx_var_afSliders select 5), + sliderPosition (rmx_var_afSliders select 6), + sliderPosition (rmx_var_afSliders select 7) + ] + ], + [ + call compile (ctrlText (rmx_var_afInput select 2)), + sliderPosition (rmx_var_afSliders select 8) + ], + [ + call compile (ctrlText (rmx_var_afInput select 3)), + sliderPosition (rmx_var_afSliders select 9) + ], + [ + call compile (ctrlText (rmx_var_afInput select 4)), + sliderPosition (rmx_var_afSliders select 10) + ], + [ + call compile (ctrlText (rmx_var_afInput select 5)), + sliderPosition (rmx_var_afSliders select 11) + ], + [ + call compile (ctrlText (rmx_var_afInput select 6)), + call compile (ctrlText (rmx_var_afInput select 7)), + cbChecked (rmx_var_afMisc select 0) + ] + ]; + + profileNamespace setVariable ["rmx_var_afProfile",rmx_var_afProfile]; + }; + case "Control #8190": //RPT + { + diag_log format ["<<<<<<<<<< AtmosFEAR Template output >>>>>>>>>> + + class RENAME_ME + { + setLightnings = %1; + setOvercast = %2; + setRainbow = %3; + setGusts = %4; + setRain[] = %5; + setFog[] = %6; + setWindStr[] = %7; + setWindForce[] = %8; + setWaves[] = %9; + setWindDir[] = %10; + setWind[] = %11; + }; + + <<<<<<<<<< >>>>>>>>>>", + rmx_var_afProfile select 0,rmx_var_afProfile select 1, + rmx_var_afProfile select 2,rmx_var_afProfile select 3, + rmx_var_afProfile select 4,rmx_var_afProfile select 5, + rmx_var_afProfile select 6,rmx_var_afProfile select 7, + rmx_var_afProfile select 8,rmx_var_afProfile select 9, + rmx_var_afProfile select 10]; + }; + case "Control #8191": //Apply + { + private "_time"; + + _time = 24*60*60; + skipTime -24; + _time setLightnings sliderPosition (rmx_var_afSliders select 0); + _time setOvercast sliderPosition (rmx_var_afSliders select 1); + _time setRainbow sliderPosition (rmx_var_afSliders select 2); + _time setGusts sliderPosition (rmx_var_afSliders select 3); + + _time setRain 0; + _time setFog [0, 0, 0]; + + skipTime 24; + simulWeatherSync; + call compile (ctrlText(rmx_var_afInput select 0)) setRain sliderPosition (rmx_var_afSliders select 4); + call compile (ctrlText(rmx_var_afInput select 1)) setFog + [ + sliderPosition (rmx_var_afSliders select 5), + sliderPosition (rmx_var_afSliders select 6), + sliderPosition (rmx_var_afSliders select 7) + ]; + call compile (ctrlText(rmx_var_afInput select 2)) setWindStr sliderPosition (rmx_var_afSliders select 8); + call compile (ctrlText(rmx_var_afInput select 3)) setWindForce sliderPosition (rmx_var_afSliders select 9); + call compile (ctrlText(rmx_var_afInput select 4)) setWaves sliderPosition (rmx_var_afSliders select 10); + call compile (ctrlText(rmx_var_afInput select 5)) setWindDir sliderPosition (rmx_var_afSliders select 11); + + setWind + [ + call compile (ctrlText(rmx_var_afInput select 6)), + call compile (ctrlText(rmx_var_afInput select 7)), + cbChecked (rmx_var_afMisc select 0) + ]; + + }; + case "Control #8180": //combo + { + rmx_var_afSelected = _this select 1; + }; + case "Control #8192": //Import + { + private ["_in","_inVal"]; + _in = profileNamespace getVariable ["rmx_var_afLoadSave",[]]; + if (_in isEqualTo []) exitWith {hint "Nothing to load"}; + _inVal = _in select rmx_var_afSelected; + rmx_var_afProfile = _inVal select 1; + ["load"] call rmx_fnc_atmosFearActions; + //(format ["Importing: %1",rmx_var_afProfile]) info; + }; + case "Control #8193": //Export + { + if (ctrlText (rmx_var_afInput select 8) isEqualTo "") exitWith {hint "Name cannot be blank"}; + rmx_var_afLoadSave = profileNamespace getVariable ["rmx_var_afLoadSave",[]]; + rmx_var_afLoadSave pushBack [ + ctrlText (rmx_var_afInput select 8), + rmx_var_afProfile + ]; + profileNamespace setVariable ["rmx_var_afLoadSave",rmx_var_afLoadSave]; + + lbClear (rmx_var_afMisc select 1); + + { + (rmx_var_afMisc select 1) lbAdd (_x select 0); + } forEach rmx_var_afLoadSave; + //(format ["Exporting: %1",rmx_var_afLoadSave select ((count rmx_var_afLoadSave)-1)]) info; + }; + case "Control #8197": //delete + { + if (profileNamespace getVariable ["rmx_var_afLoadSave",[]] isEqualTo [] ) exitWith {hint "Nothing saved"}; + private ["_in","_rem"]; + _in = profileNamespace getVariable "rmx_var_afLoadSave"; + _rem = _in deleteAt rmx_var_afSelected; + profileNamespace setVariable ["rmx_var_afLoadSave",_in]; + (format ["Deleted setting: %1 = %2",_rem select 0,_rem select 1]) warning; + lbClear (rmx_var_afMisc select 1); + + { + (rmx_var_afMisc select 1) lbAdd (_x select 0); + } forEach rmx_var_afLoadSave; + }; + case "Control #8194": //set time + { + private "_arr"; + _arr = [ + call compile (ctrlText(rmx_var_afInput select 11)), + call compile (ctrlText(rmx_var_afInput select 10)), + call compile (ctrlText(rmx_var_afInput select 9)), + call compile (ctrlText(rmx_var_afInput select 12)), + call compile (ctrlText(rmx_var_afInput select 13)) + ]; + setDate _arr; + }; + case "Control #8195": //skipTime + + { + skipTime (call compile (ctrlText(rmx_var_afInput select 14))); + + private "_date"; + _date = date; //[2035,5,28,13,41] + (rmx_var_afInput select 9) ctrlSetText str (_date select 2); //day + (rmx_var_afInput select 10) ctrlSetText str (_date select 1); //month + (rmx_var_afInput select 11) ctrlSetText str (_date select 0); //year + (rmx_var_afInput select 12) ctrlSetText str (_date select 3); //hours + (rmx_var_afInput select 13) ctrlSetText str (_date select 4); //minutes + }; + case "Control #8196": //skipTime - + { + skipTime -(call compile (ctrlText(rmx_var_afInput select 14))); + + private "_date"; + _date = date; //[2035,5,28,13,41] + (rmx_var_afInput select 9) ctrlSetText str (_date select 2); //day + (rmx_var_afInput select 10) ctrlSetText str (_date select 1); //month + (rmx_var_afInput select 11) ctrlSetText str (_date select 0); //year + (rmx_var_afInput select 12) ctrlSetText str (_date select 3); //hours + (rmx_var_afInput select 13) ctrlSetText str (_date select 4); //minutes + }; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearUpdate.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearUpdate.sqf new file mode 100644 index 00000000..db617f87 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/atmosFearUpdate.sqf @@ -0,0 +1,35 @@ +/* + Function Name: rmx_fnc_atmosFearUpdate + Author: Raimonds Virtoss | Raymix + Description: Updates progress bars + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_doMath","_fog"]; + +_doMath = {}; + +while {rmx_var_atmosFearEnabled} do { + uiSleep 0.1; + if !(rmx_var_atmosFearEnabled) exitWith{}; //required to avoid RPT error. + (rmx_var_afProgress select 0) progressSetPosition lightnings; + (rmx_var_afProgress select 1) progressSetPosition overcast; + (rmx_var_afProgress select 2) progressSetPosition rainbow; + (rmx_var_afProgress select 3) progressSetPosition gusts; + (rmx_var_afProgress select 4) progressSetPosition rain; + + _fog = fogParams; + (rmx_var_afProgress select 5) progressSetPosition (_fog select 0); //density + (rmx_var_afProgress select 6) progressSetPosition (_fog select 1); //decay value + (rmx_var_afProgress select 7) progressSetPosition ((_fog select 2) / 1000); //altitude + + (rmx_var_afProgress select 8) progressSetPosition windStr; //str + + (rmx_var_afProgress select 9) progressSetPosition waves; //waves + + (rmx_var_afText select 0) ctrlSetText str wind; + (rmx_var_afText select 1) ctrlSetText str windDir; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/buffer.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/buffer.sqf new file mode 100644 index 00000000..4ade5ae6 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/buffer.sqf @@ -0,0 +1,114 @@ +/* + Function Name: rmx_fnc_buffer + Author: Raimonds Virtoss | Raymix + Description: Buffers the debug messages each cycle then processes them when console is open + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +[] spawn { + private ["_updateConsole","_appendToBuffer","_fnc_composeST"]; + + _fnc_updateConsole = { + private ["_this","_tmp"]; + rmx_var_console_list resize 39; + _tmp = [_this]; + _tmp append rmx_var_console_list; + rmx_var_console_list = _tmp; + call rmx_fnc_consoleUpdate; + }; + + _fnc_appendToBuffer = { + private ["_this","_cntBuffer","_cntInput"]; + _cntBuffer = count rmx_var_logBuffer; + _cntInput = count _this; + + if (_cntBuffer >= rmx_var_logBufferSize) then { + rmx_var_logBuffer deleteRange [0,_cntInput]; + }; + rmx_var_logBuffer append _this; + }; + + _fnc_composeST = { + private ["_type","_msg","_fnc","_img","_fncName","_txt","_final"]; + _type = _this select 0; + _fnc = _this select 1; + _msg = _this select 2; + + switch (_type) do { + default //anything else, TODO: ability to colorize + { + _fncName = parseText format [" [%1] ",_fnc,ST_SIZE18,ST_GREEN,ST_TAHOMAB,ST_SHADOW1]; + _txt = parseText format ["%1",_msg,ST_SIZE18,ST_WHITE,ST_PURISTAMEDIUM,ST_SHADOW2]; + _final = composeText [_fncName, _txt]; + }; + case 0: //info + { + _fncName = parseText format [" [%1] ",_fnc,ST_SIZE18,ST_SKYBLUE,ST_TAHOMAB,ST_SHADOW1]; + _txt = parseText format ["%1",_msg,ST_SIZE18,ST_WHITE,ST_PURISTAMEDIUM,ST_SHADOW2]; + _final = composeText [_fncName, _txt]; + }; + case 1: //warning + { + _img = parseText format ["%1",ST_WARNING,ST_SIZE18,ST_WHITE,ST_SHADOW1]; + _fncName = parseText format [" [%1] ",_fnc,ST_SIZE18,ST_ORANGE,ST_TAHOMAB,ST_SHADOW1]; + _txt = parseText format ["%1",_msg,ST_SIZE18,ST_WHITE,ST_PURISTAMEDIUM,ST_SHADOW2]; + _final = composeText [_img,_fncName,_txt]; + }; + case 2: //critical + { + _img = parseText format ["%1",ST_CRITICAL,ST_SIZE18,ST_WHITE,ST_SHADOW1]; + _fncName = parseText format [" [%1] ",_fnc,ST_SIZE18,ST_RED,ST_TAHOMAB,ST_SHADOW1]; + _txt = parseText format ["%1",_msg,ST_SIZE18,ST_WHITE,ST_PURISTAMEDIUM,ST_SHADOW2]; + _final = composeText [_img,_fncName,_txt]; + }; + }; + [_type, _final] + }; + + //TODO: add console filters + while {true} do + { + private ["_cycleTimer","_snapShot","_queue","_st"]; + _cycleTimer = diag_tickTime; + _snapShot = rmx_var_logMsg; + _snapShotST = []; + rmx_var_logMsg = []; + + { + _st = _x call _fnc_composeST; + _snapShotST pushBack _st; + } forEach _snapShot; + + _snapShotST call _fnc_appendToBuffer; + + if (!rmx_var_consoleCheckbox_pause && rmx_var_consoleEnabled) then { + { + _queue = _forEachIndex; + if !(rmx_var_consoleEnabled) exitWith {rmx_var_logBuffer deleteRange [0,_queue];}; + + switch (_x select 0) do { + case 0: + { + if (rmx_var_consoleCheckbox_info) then {(_x select 1) call _fnc_updateConsole;}; + }; + case 1: + { + if (rmx_var_consoleCheckbox_warnings) then {(_x select 1) call _fnc_updateConsole;}; + }; + case 2: + { + if (rmx_var_consoleCheckbox_critical) then {(_x select 1) call _fnc_updateConsole;}; + }; + default {(_x select 1) call _fnc_updateConsole;}; + }; + }forEach rmx_var_logBuffer; + if (rmx_var_consoleEnabled) exitWith {rmx_var_logBuffer = [];}; + }; + + //format ["Cycle finished in %1 seconds, new cycle in %2 seconds",(diag_tickTime - _cycleTimer),rmx_var_logSweepCycle] warning; //If cycle takes too long, try to optimize script + UISleep rmx_var_logSweepCycle; + }; +}; +true + diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditor.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditor.sqf new file mode 100644 index 00000000..ad918c3b --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditor.sqf @@ -0,0 +1,48 @@ +/* + Function Name: rmx_fnc_codeEditor + Author: Raimonds Virtoss | Raymix + Description: Display custom in-game code Editor with tabs saved to HDD + Usage: Press ENTER to toggle menu on or off + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_display"]; +disableSerialization; + +if (rmx_var_editorControl) exitWith { + findDisplay 7100 closeDisplay 1; + rmx_var_editorControl = false; +}; + +rmx_var_editorControl = true; + +findDisplay 46 createDisplay "dUI_editor"; +_display = findDisplay 7100; +_display displayAddEventHandler ["keyDown", "_this call rmx_fnc_keyDown;"]; + +rmx_var_ctrl_editorMain = [_display displayCtrl 7200, _display displayCtrl 7300]; +rmx_var_ctrl_editorItems = []; + +for "_i" from 7200 to 7215 do { + rmx_var_ctrl_editorItems set [count rmx_var_ctrl_editorItems,_display displayCtrl _i]; +}; + +true + + + + + + + + + + + + + + + + + diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditorActions.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditorActions.sqf new file mode 100644 index 00000000..5f52be0b --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/codeEditorActions.sqf @@ -0,0 +1,102 @@ +/* + Function Name: rmx_fnc_codeEditorActions + Author: Raimonds Virtoss | Raymix + Description: Actions required for Editor + + License: --- +*/ +private ["_action","_tab"]; + +_action = param [0, 100]; +_tab = param [1, 0]; + +switch (_action) do +{ + case "execute": + { + playSound "click"; + _code = ctrlText (rmx_var_ctrl_editorItems select 1); + call compile _code; //add try catch + }; + case "save": + { + playSound "click"; + rmx_var_ctrl_editorTabContent set [rmx_var_editorIndex, ctrlText (rmx_var_ctrl_editorItems select 1)]; + profileNamespace setVariable ["rmx_var_ctrl_editorTabContent",rmx_var_ctrl_editorTabContent]; + }; + case "clear": + { + playSound "click"; + (rmx_var_ctrl_editorItems select 1) ctrlSetText ""; + rmx_var_ctrl_editorTabContent set [rmx_var_editorIndex, ctrlText (rmx_var_ctrl_editorItems select 1)]; + }; + case "slider": + { + playSound "click"; + _pos = (sliderPosition (rmx_var_ctrl_editorItems select 12)) / 10; + { + _x ctrlSetFade (_pos min 0.7); + _x ctrlCommit 1; + } forEach rmx_var_ctrl_editorItems + rmx_var_ctrl_editorMain; + }; + case "load": + { + setMousePosition [0.5,0.5]; + [] spawn { + waitUntil {!isNull (rmx_var_ctrl_editorItems select 1)}; + (rmx_var_ctrl_editorItems select 1) ctrlSetText (rmx_var_ctrl_editorTabContent select rmx_var_editorIndex); + + //read positions + disableSerialization; + if (!isnil "rmx_var_editorPosition") then + { + { + _x ctrlSetPosition (rmx_var_editorPosition select _forEachIndex); + _x ctrlCommit 0; + } forEach rmx_var_ctrl_editorItems + rmx_var_ctrl_editorMain; + }; + + (rmx_var_ctrl_editorItems select 12) sliderSetPosition rmx_var_ctrl_editorContentFade; + "slider" call rmx_fnc_codeEditorActions; + + for "_i" from 2 to 10 do + { + (rmx_var_ctrl_editorItems select _i) ctrlSetTextColor [0.2,0.2,0.2,0.4]; + }; + (rmx_var_ctrl_editorItems select rmx_var_editorIndex + 2) ctrlSetTextColor (call rmx_fnc_getColorScheme); + (rmx_var_ctrl_editorMain select 1) ctrlSetBackgroundColor (call rmx_fnc_getColorScheme); + + for "_c" from 13 to 15 do { + (rmx_var_ctrl_editorItems select _c) ctrlSetTextColor (call rmx_fnc_getColorScheme); + }; + }; + }; + case "unload": + { + rmx_var_editorControl = false; + rmx_var_ctrl_editorTabContent set [rmx_var_editorIndex, ctrlText (rmx_var_ctrl_editorItems select 1)]; + + //store positions + rmx_var_editorPosition = []; + + { + rmx_var_editorPosition pushBack (ctrlPosition _x); + } forEach rmx_var_ctrl_editorItems + rmx_var_ctrl_editorMain; + rmx_var_ctrl_editorContentFade = sliderPosition (rmx_var_ctrl_editorItems select 12); + profileNamespace setVariable ["rmx_var_ctrl_editorContentFade", rmx_var_ctrl_editorContentFade]; + }; + case "tabs": + { + playSound "click"; + rmx_var_editorIndex = _tab; + profilenamespace setVariable ["rmx_var_editorIndex", rmx_var_editorIndex]; + + for "_i" from 2 to 10 do + { + (rmx_var_ctrl_editorItems select _i) ctrlSetTextColor [0.2,0.2,0.2,0.4]; + }; + (rmx_var_ctrl_editorItems select _tab + 2) ctrlSetTextColor (call rmx_fnc_getColorScheme); + + (rmx_var_ctrl_editorItems select 1) ctrlSetText (rmx_var_ctrl_editorTabContent select _tab); + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/console.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/console.sqf new file mode 100644 index 00000000..2367cf8c --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/console.sqf @@ -0,0 +1,64 @@ +/* + Function Name: rmx_fnc_console + Author: Raimonds Virtoss | Raymix + Description: Display custom in-game console + Usage: Press F2 to enable + Note: Player movement is not disabled + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_display","_item","_currPosItem","_console","_currPos","_newPos"]; +disableSerialization; + +switch (rmx_var_consoleEnabled) do { + case false: + { + if (_shift) then { + findDisplay 46 createDisplay "dUI_console"; + _display = findDisplay 9100; + _display displayAddEventHandler ["keyDown", "_this call rmx_fnc_keyDown;"]; + } else { + 9100 cutRsc ["dUI_console2","PLAIN"]; + _display = uiNamespace getVariable "rmx_var_console2"; + }; + rmx_var_ctrl_console = []; + rmx_var_ctrl_consoleItems = []; + + for "_i" from 9000 to 9039 do { + rmx_var_ctrl_console set [count rmx_var_ctrl_console,_display displayCtrl _i]; + }; + + {rmx_var_ctrl_consoleItems set [count rmx_var_ctrl_consoleItems,_display displayCtrl _x]; + }count [9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9050]; + + (rmx_var_ctrl_consoleItems select 5) cbSetChecked rmx_var_consoleCheckbox_info; + (rmx_var_ctrl_consoleItems select 6) cbSetChecked rmx_var_consoleCheckbox_warnings; + (rmx_var_ctrl_consoleItems select 7) cbSetChecked rmx_var_consoleCheckbox_critical; + (rmx_var_ctrl_consoleItems select 8) cbSetChecked rmx_var_consoleCheckbox_pause; + + if (rmx_var_consoleSetting <= 0) then {rmx_var_consoleSetting = 0}; //correct min + if (rmx_var_consoleSetting >= 1.6) then {rmx_var_consoleSetting = 1.6}; //correct max + for "_i" from 0 to 11 do { + _item = rmx_var_ctrl_consoleItems select _i; + _currPosItem = ctrlPosition _item; + _item ctrlSetPosition [_currPosItem select 0,(_currPosItem select 1) + rmx_var_consoleSetting,_currPosItem select 2,_currPosItem select 3]; + _item ctrlCommit 0.2; + }; + + _console = rmx_var_ctrl_consoleItems select 12; + _currPos = ctrlPosition _console; + _newPos = [_currPos select 0,_currPos select 1,_currPos select 2,(_currPos select 3) + rmx_var_consoleSetting]; + _console ctrlSetPosition _newPos; + _console ctrlCommit 0.2; + + rmx_var_consoleEnabled = true; + call rmx_fnc_consoleUpdate; + }; + case true: + { + findDisplay 9100 closeDisplay 1; + 9100 cutRsc ["Default","PLAIN"]; + rmx_var_consoleEnabled = false; + }; +}; diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/consoleFilters.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/consoleFilters.sqf new file mode 100644 index 00000000..c15619e9 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/consoleFilters.sqf @@ -0,0 +1,82 @@ +/* + Function Name: rmx_fnc_consoleFilters + Author: Raimonds Virtoss | Raymix + Description: Manages debug console and saves settings to profile if required + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_case","_checkBoxState"]; +disableSerialization; + +_case = str (_this select 0); +_checkBoxState = _this select 1; +switch (_case) do { //TODO - save to profile Namespace + case "Control #9205": //Checkbox: info + { + rmx_var_consoleCheckbox_info = if (_checkBoxState == 1) then {true} else {false}; + }; + case "Control #9206": //Checkbox: warnings + { + rmx_var_consoleCheckbox_warnings = if (_checkBoxState == 1) then {true} else {false}; + }; + case "Control #9207": //Checkbox: critical + { + rmx_var_consoleCheckbox_critical = if (_checkBoxState == 1) then {true} else {false}; + }; + case "Control #9208": //Checkbox: pause + { + rmx_var_consoleCheckbox_pause = if (_checkBoxState == 1) then {true} else {false}; + }; + case "Control #9209": //Button - + { + private ["_item","_currPosItem","_console","_currPos","_newPos"]; + + if (rmx_var_consoleSetting <= 0) exitWith {rmx_var_consoleSetting = 0}; + for "_i" from 0 to 11 do { + _item = rmx_var_ctrl_consoleItems select _i; + _currPosItem = ctrlPosition _item; + _item ctrlSetPosition [_currPosItem select 0,(_currPosItem select 1) - 0.2,_currPosItem select 2,_currPosItem select 3]; + _item ctrlCommit 0.2; + }; + + _console = rmx_var_ctrl_consoleItems select 12; + _currPos = ctrlPosition _console; + _newPos = [_currPos select 0,_currPos select 1,_currPos select 2,(_currPos select 3) - 0.2]; + _console ctrlSetPosition _newPos; + _console ctrlCommit 0.2; + rmx_var_consoleSetting = rmx_var_consoleSetting -0.2; + }; + case "Control #9210": //Button + + { + private ["_item","_currPosItem","_console","_currPos","_newPos"]; + + if (rmx_var_consoleSetting >= 1.6) exitWith {rmx_var_consoleSetting = 1.6}; + for "_i" from 0 to 11 do { + _item = rmx_var_ctrl_consoleItems select _i; + _currPosItem = ctrlPosition _item; + _item ctrlSetPosition [_currPosItem select 0,(_currPosItem select 1) + 0.2,_currPosItem select 2,_currPosItem select 3]; + _item ctrlCommit 0.2; + }; + + _console = rmx_var_ctrl_consoleItems select 12; + _currPos = ctrlPosition _console; + _newPos = [_currPos select 0,_currPos select 1,_currPos select 2,(_currPos select 3) + 0.2]; + _console ctrlSetPosition _newPos; + _console ctrlCommit 0.2; + rmx_var_consoleSetting = rmx_var_consoleSetting + 0.2; + }; + case "Control #9211": //Button Clear + { + for "_i" from 0 to 39 do { + rmx_var_console_list set [_i,(text "")]; + }; + rmx_var_logBuffer = []; + call rmx_fnc_consoleUpdate; + }; + default {format ["Wrong input: %1",_this] warning;}; +}; + +//save variable settings permanently +profileNamespace setVariable ["rmx_var_consoleSetting",rmx_var_consoleSetting]; +profileNamespace setVariable ["rmx_var_consoleCBstate",[rmx_var_consoleCheckbox_info,rmx_var_consoleCheckbox_warnings,rmx_var_consoleCheckbox_critical,rmx_var_consoleCheckbox_pause]]; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/consoleUpdate.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/consoleUpdate.sqf new file mode 100644 index 00000000..51be3201 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/consoleUpdate.sqf @@ -0,0 +1,18 @@ +/* + Function Name: rmx_fnc_consoleUpdate + Author: Raimonds Virtoss | Raymix + Description: Writes to console + Can be called to refresh/update console + License: --- +*/ +disableSerialization; + +if (!rmx_var_consoleEnabled) exitWith {true}; //required: _ctrl only works when dialog exists + +{ + _ctrl = rmx_var_ctrl_console select _forEachIndex; + _ctrl ctrlSetStructuredText _x; + _ctrl ctrlCommit 0; +} forEach rmx_var_console_list; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/dialogVars.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/dialogVars.sqf new file mode 100644 index 00000000..7c935f72 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/dialogVars.sqf @@ -0,0 +1,107 @@ +/* + Function Name: rmx_fnc_dialogVars + Author: Raimonds Virtoss | Raymix + Description: Variable defines used for currently developed functions or debugging. + + This function is recompiled and called during preInit + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> + +rmx_var_logMsg = []; +rmx_var_logBufferSize = 200; +rmx_var_logBuffer = []; +rmx_var_logsweepcycle = 0.01; + +"Use Shift + F2 to open console as a display with ability to click buttons" warning; + +rmx_var_quickFnc_items = [[[0,1,0,1],"Example","call doSTUFF;"]]; + +//Default dialog toggle state defines +if (isNil "rmx_var_consoleEnabled") then {rmx_var_consoleEnabled = false;}; +if (isNil "rmx_var_quickFncEnabled") then {rmx_var_quickFncEnabled = false;}; +if (isNil "rmx_var_atmosFearEnabled") then {rmx_var_atmosFearEnabled = false;}; +if (isNil "rmx_var_ppViewerEnabled") then {rmx_var_ppViewerEnabled = false;}; +if (isNil "rmx_var_editorControl") then {rmx_var_editorControl = false;}; +if (isNil "rmx_var_watcherControl") then {rmx_var_watcherControl = false;}; +if (isNil "rmx_var_watcherPinned") then {rmx_var_watcherPinned = false;}; + +//gather default saved variables for console state from profile namespace (checkbox selection and console size) +rmx_var_consoleSetting = profileNamespace getVariable ["rmx_var_consoleSetting",0]; +rmx_var_consoleCBstate = profileNamespace getVariable ["rmx_var_consoleCBstate",[true,true,true,false]]; +rmx_var_consoleCheckbox_info = rmx_var_consoleCBstate select 0; +rmx_var_consoleCheckbox_warnings = rmx_var_consoleCBstate select 1; +rmx_var_consoleCheckbox_critical = rmx_var_consoleCBstate select 2; +rmx_var_consoleCheckbox_pause = rmx_var_consoleCBstate select 3; + +//generate structured array for console early to avoid problems +if (isNil "rmx_var_console_list") then { + rmx_var_console_list = []; rmx_var_console_list resize 40; + for "_i" from 0 to 39 do { + rmx_var_console_list set [_i,(text "")]; + }; +}; + +/* -------------------- PP VIEWER -------------------- */ +rmx_var_ppCatMain = []; +rmx_var_ppCatCC = []; +rmx_var_ppCatCCV = []; +rmx_var_ppCatCA = []; +rmx_var_ppCatFG = []; +rmx_var_ppCatRB = []; +rmx_var_ppCatWD = []; +rmx_var_ppCatDB = []; +rmx_var_ppCatCI = []; +rmx_var_ppTemplate = [["colorCorrections",1501],["chromAberration",201],["filmGrain",2001],["radialBlur",101],["wetdistortion",301],["dynamicBlur",401],["colorInversion",2501]]; +rmx_var_ppSelected = 0; +rmx_var_ppiSelected = 0; + +rmx_var_ppCcPos = [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]; +rmx_var_ppCcvPos = [0,0,0,0,0,0,0]; +rmx_var_ppCaPos = [0,0,false]; +rmx_var_ppFgPos = [0,0,1,0,0,false]; +rmx_var_ppRbPos = [0,0,0,0]; +rmx_var_ppWdPos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +rmx_var_ppDbPos = [0]; +rmx_var_ppCiPos = [0,0,0]; + +with profileNamespace do { + if (rmx_var_ppLoadSave isEqualTo []) then {rmx_var_ppLoadSave = nil}; +}; +rmx_var_ppLoadSave = profileNamespace getVariable ["rmx_var_ppLoadSave",[[0,"Nothing saved",[1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]]]]; +rmx_var_ppHandles = []; +{ + private "_hndl"; + _hndl = ppEffectCreate [(_x select 0),(_x select 1)]; + _hndl ppEffectEnable false; + rmx_var_ppHandles set [count rmx_var_ppHandles,_hndl]; //pushBack suddenly started giving error +} forEach rmx_var_ppTemplate; +//profileNamespace setVariable ["rmx_var_ppLoadSave",nil]; //deletes profileNS var + +/* -------------------- AtmosFEAR -------------------- */ +rmx_var_afProgress = []; +rmx_var_afInput = []; +rmx_var_afSliders = []; +rmx_var_afMisc = []; +rmx_var_afText = []; +rmx_var_afSelected = 0; + +with profileNamespace do { + if (rmx_var_afLoadSave isEqualTo []) then {rmx_var_afLoadSave = nil}; +}; +rmx_var_afProfile = profileNamespace getVariable ["rmx_var_afProfile",[0,0,0,0,[0,0],[0,[0,0,0]],[0,0],[0,0],[0,0],[0,0],[0,0,false]]]; +rmx_var_afLoadSave = profileNamespace getVariable ["rmx_var_afLoadSave",[["Nothing saved",[]]]]; + +/* -------------------- Code Editor -------------------- */ +rmx_var_ctrl_editorContentFade = profileNamespace getVariable ["rmx_var_ctrl_editorContentFade",0]; +rmx_var_editorIndex = profileNamespace getVariable ["rmx_var_editorIndex",1]; +rmx_var_ctrl_editorTabContent = profileNamespace getVariable ["rmx_var_ctrl_editorTabContent",["", "", "", "", "", "", "", "", ""]]; + +/* -------------------- Variable Watcher -------------------- */ +if (isNil "rmx_var_watcher_running") then {rmx_var_watcher_running = false;}; +if (isNil "rmx_var_watcherGrpControls") then {rmx_var_watcherGrpControls = []}; +rmx_var_watcherGrpControls_data = profileNamespace getVariable ["rmx_var_watcherGrpControls_data",[]]; + + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/epoch.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/epoch.sqf new file mode 100644 index 00000000..e69de29b diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/eventHandlers.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/eventHandlers.sqf new file mode 100644 index 00000000..240ba240 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/eventHandlers.sqf @@ -0,0 +1,18 @@ +/* + Function Name: rmx_fnc_eventHandlers + Author: Raimonds Virtoss | Raymix + Description: Bunch of EHs + + License: --- +*/ + +[] spawn { + if !(isServer) then { + waitUntil { uiSleep 0.1; (!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")) }; + }; + uiSleep 2; //increase if EH is not getting applied + (findDisplay 46) displayAddEventHandler ["KeyDown","_this call rmx_fnc_keyDown"]; + //(findDisplay 46) displayAddEventHandler ["KeyUp","_this call rmx_fnc_keyUp"]; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/getColorScheme.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/getColorScheme.sqf new file mode 100644 index 00000000..5105a408 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/getColorScheme.sqf @@ -0,0 +1,14 @@ +/* +More at profile vars, unrap first +gui_bcg_rgb_preset +gui_titletext_rgb_preset +gui_bcg_rgb_g +igui_bcg_rgb_b +PresetRColive +*/ +[ + profileNamespace getVariable "gui_bcg_rgb_r", + profileNamespace getVariable "gui_bcg_rgb_g", + profileNamespace getVariable "gui_bcg_rgb_b", + profileNamespace getVariable "gui_bcg_rgb_a" +] \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/keyDown.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/keyDown.sqf new file mode 100644 index 00000000..fc8c2cc3 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/keyDown.sqf @@ -0,0 +1,113 @@ +/* + Function Name: rmx_fnc_keyDown + + Author: Raimonds Virtoss | Raymix + Description: This file detects keystrokes released and calls a function + + List of all keys: + https://community.bistudio.com/wiki/ListOfKeyCodes + + License: --- +*/ +private ["_handled","_key","_dev","_shift","_ctrl","_alt"]; + +_key = param [1,0]; +_shift = param [2,false]; +_ctrl = param [3,false]; +//_alt = param [4,false]; + +_handled = false; + +//disable annoying cmd menu in SP +//if (isServer) then { + if (_this select 1 in [ + 2,3,4,5,6,7,8,9,10,11, //1-0 + 59,60,61,62,63,64,65,66,67,68, //F1-F0 + 14, //backspace + 41 //tilde + ]) then { + [] spawn { + waitUntil {commandingMenu != ""}; + showCommandingMenu ""; + }; + }; +//}; + +switch (_this select 1) do +{ +/* + case 5: + { + _rnd = ""; + for "_i" from 0 to (floor random 50) + 2 do { + _rnd = _rnd + (["a","b","c","d","1","2","3","4"," ","!"] select (floor random 10)); + }; + _st = composeText [parseText "red text here ", linebreak, parseText "green text here "]; + [_st,floor random 10] call Epoch_dynamicText; + }; + + case 57: + { + //[cursorTarget modelToWorld [0,0,0], floor random 10, 10] call Epoch_gui3DCooldown; + //[cursorTarget, 10, "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa", "Testtesttest", [0,0,0]] call epoch_gui3dModelPos; + //[player modelToWorld [0,2,2],10,"x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa", "Testtesttest"] call epoch_gui3dWorldPos; + //[cursorTarget,0] call epoch_guiObjHP; + _handled = true; + }; +*/ + case 14: //BACKSPACE + { + if (_ctrl) then { + 'rmx_fnc_sandbox' call rmx_fnc_recompile; [] spawn rmx_fnc_sandbox; + }; + }; + case 28: //ENTER + { + if (_ctrl) then { + call rmx_fnc_codeEditor; + _handled = true; + }; + }; + case 74: {rmx_var_3dCtrlSpin_Vector = rmx_var_3dCtrlSpin_Vector - 0.1;}; + case 78: {rmx_var_3dCtrlSpin_Vector = rmx_var_3dCtrlSpin_Vector + 0.1;}; + case 60: //F2 + { + call rmx_fnc_console; + _handled = true; + }; + case 61: //F3 + { + call rmx_fnc_quickFnc; + _handled = true; + }; + case 62: //F4 + { + call rmx_fnc_watcher; + _handled = true; + }; + case 63: //F5 + { + call rmx_fnc_atmosFear; + _handled = true; + }; + case 64: //F6 + { + call rmx_fnc_ppViewer; + _handled = true; + }; + case 65: //F7 + { + ["Reserved for particle effects GUI editor","Hotkey reserved!"] spawn bis_fnc_guiMessage; + _handled = true; + }; + case 66: //F8 + { + ["Reserved for camera director GUI editor","Hotkey reserved!"] spawn bis_fnc_guiMessage; + _handled = true; + }; + +}; + +//uncomment to find keys on the go +//hint format ["Key [%1] pressed", (_this select 1)]; +_handled; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/keyUp.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/keyUp.sqf new file mode 100644 index 00000000..722f4ac7 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/keyUp.sqf @@ -0,0 +1,23 @@ +/* + Function Name: rmx_fnc_keyUp + Author: Raimonds Virtoss | Raymix + Description: This file detects keystrokes released and calls a function + + List of all keys: + https://community.bistudio.com/wiki/ListOfKeyCodes + + License: --- +*/ +private ["_handled","_key","_dev"]; + +_key = _this select 1; +_handled = false; + +switch (_this select 1) do +{ + default {_handled = true;}; +}; + +//uncomment to find keys on the go +//hint format ["Key [%1] released", (_this select 1)]; +_handled; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/output.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/output.sqf new file mode 100644 index 00000000..caf7c1d1 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/output.sqf @@ -0,0 +1,48 @@ +/* + Function Name: rmx_dev_output + Author: Raimonds Virtoss | Raymix + Description: outputs params from quick function + + Usage: ["hint","Test"] call d_dev_output; + "Test" call d_dev_output; + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> + +if (typeName _this != typeName []) then {_this = [_this];}; +if (typeName (_this select 0) == "CONTROL") then {_this = ["No params"]}; + +switch (_this select 0) do { + default { + diag_log str _this; + }; + case "hint": + { + hint str (_this select 1); + }; + case "hintSilent": + { + hintSilent str (_this select 1); + }; + case "diag_log": + { + diag_log str (_this select 1); + }; + case "systemChat": + { + systemChat str (_this select 1); + }; + case "info": + { + (_this select 1) info; + }; + case "warning": + { + (_this select 1) warning; + }; + case "critical": + { + (_this select 1) critical; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewer.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewer.sqf new file mode 100644 index 00000000..dc16eee7 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewer.sqf @@ -0,0 +1,250 @@ +/* + Function Name: rmx_fnc_ppViewer + Author: Raimonds Virtoss | Raymix + Description: Postprocess viewer + + License: --- +*/ +private ["_display","_diag"]; +disableSerialization; + +switch (rmx_var_ppViewerEnabled) do { + case false: + { + _diag = createDialog "dUI_ppEffects"; + _display = findDisplay 6100; + + {rmx_var_ppCatMain set [count rmx_var_ppCatMain,_display displayCtrl _x];}count + [ + 6110,6111, //combo + 6120, //edit + 6130,6130,6130,6130,6130,6130,6130 //buttons + ]; + + {rmx_var_ppCatCC set [count rmx_var_ppCatCC,_display displayCtrl _x];}count + [ + 6210, //bg + 6220,6221,6222,6223,6224,6225,6250, //txt + 6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244, //sliders + 6251 //bool + ]; + + {rmx_var_ppCatCCV set [count rmx_var_ppCatCCV,_display displayCtrl _x];}count + [ + 6260, //bg + 6270,6271,6272,6273,6274,6275,6276, //txt + 6280,6281,6282,6283,6284,6285,6286 //sliders + ]; + + {rmx_var_ppCatCA set [count rmx_var_ppCatCA,_display displayCtrl _x];}count + [ + 6310, //bg + 6320,6321,6322, //txt + 6330,6331, //sliders + 6340 //cb + ]; + + {rmx_var_ppCatFG set [count rmx_var_ppCatFG,_display displayCtrl _x];}count + [ + 6410, //bg + 6420,6421,6422,6423,6424,6425, //txt + 6430,6431,6432,6433,6434, //sliders + 6440 //cb + ]; + + {rmx_var_ppCatRB set [count rmx_var_ppCatRB,_display displayCtrl _x];}count + [ + 6510, //bg + 6520,6521,6522,6523, //txt + 6530,6531,6532,6533 //sliders + ]; + + {rmx_var_ppCatWD set [count rmx_var_ppCatWD,_display displayCtrl _x];}count + [ + 6610, //bg + 6620,6621,6622,6623,6624,6625, //txt + 6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644 //sliders + ]; + + {rmx_var_ppCatDB set [count rmx_var_ppCatDB,_display displayCtrl _x];}count + [ + 6710, //bg + 6720, //txt + 6730 //sliders + ]; + + {rmx_var_ppCatCI set [count rmx_var_ppCatCI,_display displayCtrl _x];}count + [ + 6810, //bg + 6820,6821,6822, //txt + 6830,6831,6832 //sliders + ]; + + "range" call rmx_fnc_ppViewerGetSet; //sets slider ranges + ["load"] call rmx_fnc_ppViewerUpdate; + "" call rmx_fnc_ppViewerGetSet; //loads default positions and selections + call rmx_fnc_ppViewerEffects; + rmx_var_ppViewerEnabled = true; + }; + case true: + { + closeDialog 0; + rmx_var_ppViewerEnabled = false; + }; +}; + +true +/* + +dUI_ppEffects - IDD 6100 + +Category: + Combo: Main: 6110 + Load: 6111 + + Edit: 6120 + + Buttons: Load: 6130 + Save: 6131 + Reset: 6132 + Random: 6133 + Delete: 6134 + RPT: 6135 + Reset ALL: 6136 + +Color Correction: + Background: 6210 + + Text: Brightness: 6220 + Contrast: 6221 + Offset: 6222 + Blend: 6223 + Colorize1: 6224 + Colorize2: 6225 + Vignette: 6250 + + Sliders: Brightness: 6230 + Contrast: 6231 + Offset: 6232 + Blend Red: 6233 + Blend Green: 6234 + Blend Blue: 6235 + Blend Alpha: 6236 + Colorize1 Red: 6237 + Colorize1 Green: 6238 + Colorize1 Blue: 6239 + Colorize1 Alpha: 6240 + Colorize2 Red: 6241 + Colorize2 Green: 6242 + Colorize2 Blue: 6243 + Colorize2 Alpha: 6244 + + Bool: + Vignette bool: 6251 + + Vignette: Background: 6260 + + Text: Hsize: 6270 + Vsize: 6271 + ?: 6272 + Hpos: 6273 + Vpos: 6274 + STR: 6275 + Alpha: 6276 + + Slider: Hsize: 6280 + Vsize: 6281 + ?: 6282 + Hpos: 6283 + Vpos: 6284 + STR: 6285 + Alpha: 6286 + +Chromatic aberration + Background: 6310 + + Text: X: 6320 + Y: 6321 + Aspect: 6322 + + Sliders: X: 6330 + Y: 6331 + + Checkbox: CB: 6340 + +Film grain + Background: 6410 + + Text: Sharpness: 6420 + Intensity: 6421 + Grain Size: 6422 + Intensityx0: 6423 + Intensityx1: 6424 + Monochromic: 6425 + + Sliders: Sharpness: 6430 + Intensity: 6431 + Grain Size: 6432 + Intensityx0: 6433 + Intensityx1: 6434 + + Checkbox: Bool: 6440 + +Radial Blur + Background: 6510 + + Text: Relative X: 6520 + Relative Y: 6521 + Centre X: 6522 + Centre Y: 6523 + + Sliders: Relative X: 6530 + Relative Y: 6531 + Centre X: 6532 + Centre Y: 6533 + +Water Distortion + BackGround: 6610 + + Text: Bluriness: 6620 + STR Top: 6621 + STR Bot: 6622 + Wave speed: 6623 + Wave amp: 6624 + Phase: 6625 + + Sliders: Blur: 6630 + STR Top: 6631 + STR Bot: 6632 + Wave speed 1: 6633 + Wave speed 2: 6634 + Wave speed 3: 6635 + Wave speed 4: 6636 + Wave amp 1: 6637 + Wave amp 2: 6638 + Wave amp 3: 6639 + Wave amp 4: 6640 + Phase 1: 6641 + Phase 2: 6642 + Phase 3: 6643 + Phase 4: 6644 + +Dynamic blur + Background: 6710 + + Text: 6720 + + Slider: 6730 + +Color inversion + Background: 6810 + + Text: Red: 6820 + Green: 6821 + Blue: 6822 + + Sliders: Red: 6830 + Green: 6831 + Blue: 6832 + +*/ \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerEffects.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerEffects.sqf new file mode 100644 index 00000000..4e082785 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerEffects.sqf @@ -0,0 +1,86 @@ +/* + Function Name: rmx_fnc_ppViewerEffects + Author: Raimonds Virtoss | Raymix + Description: PPV Effects, responsible for all the math and applying effects + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_currEffect","_handle","_adjust"]; +disableSerialization; + +_currEffect = rmx_var_ppTemplate select rmx_var_ppSelected select 0; +_handle = rmx_var_ppHandles select rmx_var_ppSelected; + +//hintSilent format ["E: %1",_this]; + +switch (_currEffect) do { + case "colorCorrections": + { + rmx_var_ppCcPos = []; + for "_i" from 8 to 22 do { + rmx_var_ppCcPos pushBack (sliderPosition (rmx_var_ppCatCC select _i)); + }; + if (cbChecked (rmx_var_ppCatCC select 23)) then { + rmx_var_ppCcvPos = []; + for "_i" from 8 to 14 do { + rmx_var_ppCcvPos pushBack (sliderPosition (rmx_var_ppCatCCV select _i)); + }; + rmx_var_ppCcPos append rmx_var_ppCcvPos; + }; + _adjust = rmx_var_ppCcPos; + }; + case "chromAberration": + { + rmx_var_ppCaPos = [ + sliderPosition (rmx_var_ppCatCA select 4), + sliderPosition (rmx_var_ppCatCA select 5), + cbChecked (rmx_var_ppCatCA select 6) + ]; + _adjust = rmx_var_ppCaPos; + }; + case "filmGrain": + { + rmx_var_ppFgPos = []; + for "_i" from 7 to 11 do { + rmx_var_ppFgPos pushBack (sliderPosition (rmx_var_ppCatFG select _i)); + }; + rmx_var_ppFgPos pushBack (cbChecked (rmx_var_ppCatFG select 12)); + _adjust = rmx_var_ppFgPos; + }; + case "radialBlur": + { + rmx_var_ppRbPos = []; + for "_i" from 5 to 8 do { + rmx_var_ppRbPos pushBack (sliderPosition (rmx_var_ppCatRB select _i)); + }; + _adjust = rmx_var_ppRbPos; + }; + case "wetdistortion": + { + rmx_var_ppWdPos = []; + for "_i" from 7 to 21 do { + rmx_var_ppWdPos pushBack (sliderPosition (rmx_var_ppCatWD select _i)); + }; + _adjust = rmx_var_ppWdPos; + }; + case "dynamicBlur": + { + rmx_var_ppDbPos = [sliderPosition (rmx_var_ppCatDB select 2)]; + _adjust = rmx_var_ppDbPos; + }; + case "colorInversion": + { + rmx_var_ppCiPos = []; + for "_i" from 4 to 6 do { + rmx_var_ppCiPos pushBack (sliderPosition (rmx_var_ppCatCI select _i)); + }; + _adjust = rmx_var_ppCiPos; + }; +}; +//(format ["%1 >> %2",_currEffect,_adjust]) info; +_handle ppEffectEnable true; +_handle ppEffectAdjust _adjust; +_handle ppEffectCommit 0; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerGetSet.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerGetSet.sqf new file mode 100644 index 00000000..26d28c37 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerGetSet.sqf @@ -0,0 +1,117 @@ +/* + Function Name: rmx_fnc_ppViewerGetSet + Author: Raimonds Virtoss | Raymix + Description: PPV profiles and positions + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +disableSerialization; + + +switch (_this) do { + default { + (rmx_var_ppCatMain select 0) lbSetCurSel rmx_var_ppSelected; + (rmx_var_ppCatMain select 1) lbSetCurSel rmx_var_ppiSelected; + if ((cbChecked (rmx_var_ppCatCC select 23)) && (rmx_var_ppSelected isEqualTo 0)) then { + { + _x ctrlShow true; + } count rmx_var_ppCatCCV; + }; + + (rmx_var_ppCatCA select 6) cbSetChecked (rmx_var_ppCaPos select 2); + (rmx_var_ppCatFG select 12) cbSetChecked (rmx_var_ppFgPos select 5); + + { + _x sliderSetPosition (rmx_var_ppCcPos select _forEachIndex); + } forEach (rmx_var_ppCatCC select [8,15]); + { + _x sliderSetPosition (rmx_var_ppCcvPos select _forEachIndex); + } forEach (rmx_var_ppCatCCV select [8,7]); + { + _x sliderSetPosition (rmx_var_ppCaPos select _forEachIndex); + } forEach (rmx_var_ppCatCA select [4,2]); + { + _x sliderSetPosition (rmx_var_ppFgPos select _forEachIndex); + } forEach (rmx_var_ppCatFG select [7,5]); + { + _x sliderSetPosition (rmx_var_ppRbPos select _forEachIndex); + } forEach (rmx_var_ppCatRB select [5,4]); + { + _x sliderSetPosition (rmx_var_ppWdPos select _forEachIndex); + } forEach (rmx_var_ppCatWD select [7,15]); + { + _x sliderSetPosition (rmx_var_ppDbPos select _forEachIndex); + } forEach [(rmx_var_ppCatDB select 2)]; + { + _x sliderSetPosition (rmx_var_ppCiPos select _forEachIndex); + } forEach (rmx_var_ppCatCI select [4,3]); + + }; + case "range": + { + for "_i" from 8 to 22 do { + (rmx_var_ppCatCC select _i) sliderSetRange [0, 1]; + }; + + for "_i" from 8 to 14 do { + (rmx_var_ppCatCCV select _i) sliderSetRange [0, 1]; + }; + + (rmx_var_ppCatCA select 4) sliderSetRange [0, 1]; //x + (rmx_var_ppCatCA select 5) sliderSetRange [0, 1]; //y + + (rmx_var_ppCatFG select 7) sliderSetRange [0, 20]; //sharpness + (rmx_var_ppCatFG select 8) sliderSetRange [0, 1]; //intensity + (rmx_var_ppCatFG select 9) sliderSetRange [1, 8]; //grain size + (rmx_var_ppCatFG select 10) sliderSetRange [0, 1]; //x0 + (rmx_var_ppCatFG select 11) sliderSetRange [0, 1]; //x1 + + (rmx_var_ppCatRB select 5) sliderSetRange [0, 1]; //Rx + (rmx_var_ppCatRB select 6) sliderSetRange [0, 1]; //Ry + (rmx_var_ppCatRB select 7) sliderSetRange [0, 0.5]; //Cx + (rmx_var_ppCatRB select 8) sliderSetRange [0, 0.5]; //Cy + + for "_i" from 7 to 21 do { + (rmx_var_ppCatWD select _i) sliderSetRange [-1, 1]; + }; + + (rmx_var_ppCatDB select 2) sliderSetRange [0, 1]; //db + + for "_i" from 4 to 6 do { + (rmx_var_ppCatCI select _i) sliderSetRange [0, 1]; + }; + + }; + case "import": + { + private ["_in","_var","_inVal"]; + _in = profileNamespace getVariable ["rmx_var_ppLoadSave",[]]; + if (_in isEqualTo []) exitWith {hint "Nothing to load"}; + _inVal = _in select rmx_var_ppiSelected; + _var = ["rmx_var_ppCcPos","rmx_var_ppCaPos","rmx_var_ppFgPos","rmx_var_ppRbPos","rmx_var_ppWdPos","rmx_var_ppDbPos","rmx_var_ppCiPos"] select (_inVal select 0); + missionNamespace setVariable [_var,(_inVal select 2)]; + rmx_var_ppSelected = _inVal select 0; + "" call rmx_fnc_ppViewerGetSet; //loads default positions and selections + call rmx_fnc_ppViewerEffects; + }; + case "export": + { + if (ctrlText (rmx_var_ppCatMain select 2) isEqualTo "") exitWith {hint "Effect name cannot be blank"}; + rmx_var_ppLoadSave = profileNamespace getVariable ["rmx_var_ppLoadSave",[]]; + rmx_var_ppLoadSave pushBack [ + rmx_var_ppSelected, + ctrlText (rmx_var_ppCatMain select 2), + ([rmx_var_ppCcPos,rmx_var_ppCaPos,rmx_var_ppFgPos,rmx_var_ppRbPos,rmx_var_ppWdPos,rmx_var_ppDbPos,rmx_var_ppCiPos] select rmx_var_ppSelected) + ]; + profileNamespace setVariable ["rmx_var_ppLoadSave",rmx_var_ppLoadSave]; + + lbClear (rmx_var_ppCatMain select 1); + + { + (rmx_var_ppCatMain select 1) lbAdd (_x select 1); + } forEach rmx_var_ppLoadSave; + }; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerUpdate.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerUpdate.sqf new file mode 100644 index 00000000..a5d25a01 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/ppViewerUpdate.sqf @@ -0,0 +1,196 @@ +/* + Function Name: rmx_fnc_ppViewerUpdate + Author: Raimonds Virtoss | Raymix + Description: PPV updater, responsible for main category and slider positions + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_args","_selection","_ctrl"]; +disableSerialization; + +_args = _this select 0; +_selection = _this select 1; +_ctrl = [rmx_var_ppCatCC, rmx_var_ppCatCA, rmx_var_ppCatFG, rmx_var_ppCatRB, rmx_var_ppCatWD, rmx_var_ppCatDB, rmx_var_ppCatCI, rmx_var_ppCatCCV]; +if (typeName _args != "STRING") then {_args = str _args}; +//hintSilent format ["U: %1",_this]; + +switch (_args) do { + case "load": + { + { + { + _x ctrlShow false; + } count _x; + } forEach _ctrl; + + lbClear (rmx_var_ppCatMain select 0); + + { + (rmx_var_ppCatMain select 0) lbAdd _x; + } forEach ["Color Correction","Chromatic Aberration","Film Grain","Radial Blur","Wet Distortion","Dynamic Blur","Color inversion"]; //does not like count + + lbClear (rmx_var_ppCatMain select 1); + + { + (rmx_var_ppCatMain select 1) lbAdd (_x select 1); + } forEach rmx_var_ppLoadSave; + }; + case "unload": + { + rmx_var_ppViewerEnabled = false; + rmx_var_ppCatMain = []; + rmx_var_ppCatCC = []; + rmx_var_ppCatCCV = []; + rmx_var_ppCatCA = []; + rmx_var_ppCatFG = []; + rmx_var_ppCatRB = []; + rmx_var_ppCatWD = []; + rmx_var_ppCatDB = []; + rmx_var_ppCatCI = []; + }; + case "import": + { + { + { + if (ctrlShown _x) then {_x ctrlShow false;}; + } count _x; + } forEach _ctrl; + + { + _x ctrlShow true; + } count (_ctrl select (rmx_var_ppLoadSave select rmx_var_ppiSelected select 0)); + }; + case "Control #6110": //main combo + { + { + { + if (ctrlShown _x) then {_x ctrlShow false;}; + } count _x; + } forEach _ctrl; + + { + _x ctrlShow true; + } count (_ctrl select _selection); + rmx_var_ppSelected = _selection; + }; + case "Control #6111": //loadsave combo + { + rmx_var_ppiSelected = _selection; + }; + case "Control #6132": //reset + { + private "_currEffect"; + _currEffect = rmx_var_ppHandles select rmx_var_ppSelected; + _currEffect ppEffectEnable false; + }; + case "Control #6133": //random + { + switch (rmx_var_ppSelected) do { + case 0: //cc + { + rmx_var_ppCcPos = [random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1,random 1]; + if (cbChecked (rmx_var_ppCatCC select 23)) then { + rmx_var_ppCcvPos = [random 1,random 1,random 1,random 1,random 1,random 1,random 1]; + rmx_var_ppCcPos append rmx_var_ppCcvPos; + }; + }; + case 1: //ca + { + private "_bool"; + _bool = if (random 1 > 0.5) then {true} else {false}; + rmx_var_ppCaPos = [random 1,random 1,_bool]; + (rmx_var_ppCatCA select 6) cbSetChecked _bool; + }; + case 2: //fg + { + private "_bool"; + _bool = if (random 1 > 0.5) then {true} else {false}; + rmx_var_ppFgPos = [random 20,random 1,(random 7) + 1,random 1,random 1,_bool]; + (rmx_var_ppCatFG select 12) cbSetChecked _bool; + }; + case 3: //rb + { + rmx_var_ppRbPos = [random 1,random 1,random 0.5,random 0.5]; + }; + case 4: //wd + { + rmx_var_ppWdPos = [(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1,(random 2 ) - 1]; + }; + case 5: //db + { + rmx_var_ppDbPos = [random 1]; + }; + case 6: //ci + { + rmx_var_ppCiPos = [random 1,random 1,random 1]; + }; + + }; + "" call rmx_fnc_ppViewerGetSet; + call rmx_fnc_ppViewerEffects; + }; + case "Control #6134": //del + { + if (profileNamespace getVariable ["rmx_var_ppLoadSave",[]] isEqualTo [] ) exitWith {hint "Nothing saved"}; + + private ["_in","_rem"]; + _in = profileNamespace getVariable "rmx_var_ppLoadSave"; + _rem = _in deleteAt rmx_var_ppiSelected; + profileNamespace setVariable ["rmx_var_ppLoadSave",_in]; + (format ["Deleted effect: %1 = %2",_rem select 1,_rem select 2]) warning; + lbClear (rmx_var_ppCatMain select 1); + + { + (rmx_var_ppCatMain select 1) lbAdd (_x select 1); + } forEach rmx_var_ppLoadSave; + + }; + case "Control #6135": // RPT + { + { + diag_log format ["<< %1 >>",(_x select 0)]; + diag_log (_x select 1); + } forEach + [ + ["colorCorrections", rmx_var_ppCcPos], + ["chromAberration", rmx_var_ppCaPos], + ["filmGrain", rmx_var_ppFgPos], + ["radialBlur", rmx_var_ppRbPos], + ["wetdistortion", rmx_var_ppWdPos], + ["dynamicBlur", rmx_var_ppDbPos], + ["colorInversion", rmx_var_ppCiPos] + ]; + }; + case "Control #6136": //reset all + { + { + _x ppEffectEnable false; + } forEach rmx_var_ppHandles; + rmx_var_ppCcPos = [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]; + rmx_var_ppCcvPos = [0,0,0,0,0,0,0]; + rmx_var_ppCaPos = [0,0,false]; + rmx_var_ppFgPos = [0,0,1,0,0,false]; + rmx_var_ppRbPos = [0,0,0,0]; + rmx_var_ppWdPos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + rmx_var_ppDbPos = [0]; + rmx_var_ppCiPos = [0,0,0]; + "" call rmx_fnc_ppViewerGetSet; + }; + + case "Control #6251": //vignette bool + { + private "_bool"; + _bool = if (_selection isEqualTo 0) then {false} else {true}; + { + _x ctrlShow _bool; + } count rmx_var_ppCatCCV; + + }; + default + { + + }; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/quickFnc.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/quickFnc.sqf new file mode 100644 index 00000000..f061531b --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/quickFnc.sqf @@ -0,0 +1,34 @@ +/* + Function Name: rmx_fnc_dev_quickFnc + Author: Raimonds Virtoss | Raymix + Description: Function quick-launch dialog +*/ +private ["_display","_diag","_listBox"]; +disableSerialization; + +switch (rmx_var_quickFncEnabled) do { + case false: + { + _diag = createDialog "dUI_quickFunction"; + _display = findDisplay 9400; + _listBox = _display displayCtrl 9403; + _editBox = _display displayCtrl 9404; + _listBox ctrlSetEventHandler ["LBDblClick","_editBox = ctrlText (findDisplay 9400 displayCtrl 9404); _fnc = ((_this select 0) lbData (_this select 1)); systemChat _fnc; call compile (_editBox + ' ' + _fnc);"]; + _editBox ctrlSetText (profileNamespace getVariable ["rmx_var_quickFnc_editBox","Params"]); + + { + _idx = _listBox lbAdd (_x select 1); + _listBox lbSetColor [_idx,(_x select 0)]; + _listBox lbSetData [_idx,(_x select 2)]; + _listBox lbSetTooltip [_idx,(_x select 2)]; + } count rmx_var_quickFnc_items; + + rmx_var_quickFncEnabled = true; + }; + case true: + { + profileNamespace setVariable ["rmx_var_quickFnc_editBox",ctrlText (findDisplay 9400 displayCtrl 9404)]; + closeDialog 0; + rmx_var_quickFncEnabled = false; + }; +}; diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/watcher.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcher.sqf new file mode 100644 index 00000000..e1fa036b --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcher.sqf @@ -0,0 +1,156 @@ +/* + Function Name: rmx_fnc_watcher + Author: Raimonds Virtoss | Raymix + Description: Display custom in-game code Editor with tabs saved to HDD + Usage: Press CTRL + ENTER to enable + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> +private ["_display"]; + +_display = displayNull; + +if (str (findDisplay 7500) isEqualTo "Display #7500") then { + "unload" call rmx_fnc_watcherActions; +}; + +findDisplay 7500 closeDisplay 1; +7500 cutRsc ["Default","PLAIN"]; + + + +if (!rmx_var_watcherControl) then { + + findDisplay 46 createDisplay "dUI_watcher"; + _display = findDisplay 7500; + _display displayAddEventHandler ["keyDown", "_this call rmx_fnc_keyDown;"]; + rmx_var_watcherControl = true; +} else { + + if (rmx_var_watcherPinned) then { + 7500 cutRsc ["dUI_watcher2","PLAIN"]; + _display = uiNamespace getVariable "rmx_var_watcher2"; + }; + rmx_var_watcherControl = false; +}; + +//Exit if not pinned +if (isNull _display) exitWith {false}; + +setMousePosition [0.5,0.5]; + +rmx_var_ctrl_watcherItems = []; + +for "_i" from 7501 to 7508 do { + rmx_var_ctrl_watcherItems set [count rmx_var_ctrl_watcherItems,_display displayCtrl _i]; +}; + +//Load positions, create if doesn't exist anywhere +rmx_var_watcherPositions = profileNamespace getVariable ["rmx_var_watcherPositions",nil]; +if (isNil "rmx_var_watcherPositions") then { + rmx_var_watcherPositions = []; + { + rmx_var_watcherPositions pushBack (ctrlPosition _x); + } forEach rmx_var_ctrl_watcherItems; +}; + +{ + _x ctrlSetPosition (rmx_var_watcherPositions select _forEachIndex); + _x ctrlCommit 0; +} forEach rmx_var_ctrl_watcherItems; + +if (!rmx_var_watcherPinned) then { + (rmx_var_ctrl_watcherItems select 2) ctrlSetText "x\addons\rmx_init\data\retardedPinUp.paa"; +} else { + (rmx_var_ctrl_watcherItems select 2) ctrlSetText "x\addons\rmx_init\data\retardedPinDown.paa"; +}; + +(rmx_var_ctrl_watcherItems select 1) ctrlSetBackgroundColor (call rmx_fnc_getColorScheme); + +if (!rmx_var_watcherControl && rmx_var_watcherPinned) then { + (rmx_var_ctrl_watcherItems select 1) ctrlSetText ""; + (rmx_var_ctrl_watcherItems select 1) ctrlSetBackgroundColor [0,0,0,0]; + { + (rmx_var_ctrl_watcherItems select _x) ctrlShow false; + }count [0,1,2,3,4,5,7]; +}; + +{ + _idx = (rmx_var_ctrl_watcherItems select 4) lbadd _x; +} count +[ + "{code} String", + "{code} Boolean", + "{code} Progress Bar", + "[string] missionNamespace", + "[string] uiNamespace", + "[string] profileNamespace" +]; + +{ + _idx = (rmx_var_ctrl_watcherItems select 7) lbadd _x; +} count +[ + "Fade 0%", + "Fade 10%", + "Fade 20%", + "Fade 30%", + "Fade 40%", + "Fade 50%", + "Fade 60%", + "Fade 70%", + "Fade 80%", + "Fade 90%" +]; + +(rmx_var_ctrl_watcherItems select 7) ctrlSetEventHandler ["LBSelChanged","'fade' call rmx_fnc_watcherActions;"]; +(rmx_var_ctrl_watcherItems select 7) lbsetCurSel (profileNamespace getVariable ["rmx_var_ctrl_watcherContentFade",0]); +(rmx_var_ctrl_watcherItems select 4) lbSetCurSel 0; +(rmx_var_ctrl_watcherItems select 3) ctrlSetText ""; + +[] spawn { + disableSerialization; + if (count rmx_var_watcherGrpControls_data > 0) then { + _tmp = rmx_var_watcherGrpControls_data; + "unload" call rmx_fnc_watcherActions; + rmx_var_watcherGrpControls_data = []; + { + (rmx_var_ctrl_watcherItems select 3) ctrlSetText (_x select 0); + (rmx_var_ctrl_watcherItems select 4) lbSetCurSel (_x select 1); + [true, (_x select 1)] call rmx_fnc_watcherAddRemove; + uiSleep 0.01; + }forEach _tmp; + + (rmx_var_ctrl_watcherItems select 4) lbSetCurSel 0; + (rmx_var_ctrl_watcherItems select 3) ctrlSetText ""; + }; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherActions.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherActions.sqf new file mode 100644 index 00000000..252e7ea9 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherActions.sqf @@ -0,0 +1,66 @@ +/* + Function Name: rmx_fnc_watcherActions + Author: Raimonds Virtoss | Raymix + Description: Display custom in-game code Editor with tabs saved to HDD + Usage: NONE, required for main FNC + + License: --- +*/ +#include <\x\Addons\rmx_init\defines.inc> + +_switch = param [0, 100]; + +switch (_switch) do { + case "load": + { + [] spawn rmx_fnc_watcherRunner; + }; + case "unload": + { + rmx_var_watcherPositions = []; //reset positions to save new ones + { + rmx_var_watcherPositions pushBack (ctrlPosition _x); + } forEach rmx_var_ctrl_watcherItems; + { + { + _x call Epoch_getIDC; + ctrlDelete _x; + } forEach _x; + } forEach rmx_var_watcherGrpControls; + + rmx_var_watcherGrpControls = []; + profileNamespace setVariable ["rmx_var_watcherPositions",rmx_var_watcherPositions]; + }; + case "fade": + { + _fade = lbCurSel (rmx_var_ctrl_watcherItems select 7); + + { + (rmx_var_ctrl_watcherItems select _x) ctrlSetFade (_fade / 10); + (rmx_var_ctrl_watcherItems select _x) ctrlCommit 0.5; + } count [0,1,4,5,6,7]; + + profileNamespace setVariable ["rmx_var_ctrl_watcherContentFade",_fade]; + }; + case "pin": + { + if (rmx_var_watcherPinned) then { + (rmx_var_ctrl_watcherItems select 2) ctrlSetText "x\addons\rmx_init\data\retardedPinUp.paa"; + rmx_var_watcherPinned = false; + } else { + (rmx_var_ctrl_watcherItems select 2) ctrlSetText "x\addons\rmx_init\data\retardedPinDown.paa"; + rmx_var_watcherPinned = true; + }; + }; + case "execute": + { + private ["_sel"]; + _sel = lbCurSel (rmx_var_ctrl_watcherItems select 4); + _editbox = ctrlText (rmx_var_ctrl_watcherItems select 3); + + //if (_editbox isEqualTo "") exitWith {"Edit field cannot be blank!" warning}; + [true, _sel] call rmx_fnc_watcherAddRemove; + }; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherAddRemove.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherAddRemove.sqf new file mode 100644 index 00000000..35d828ae --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherAddRemove.sqf @@ -0,0 +1,114 @@ +#include <\x\Addons\rmx_init\defines.inc> +disableSerialization; +if !(_this isEqualTypeParams [true,0]) exitWith {false}; +params ["_add","_idx"]; +//TODO: ONLOAD to populate controls +//TODO: + +//if ((_idx < 0) || (_idx > count rmx_var_watcherGrpControls)) exitWith {false}; +if (_idx < 0) exitWith {false}; + +//_display = if (rmx_var_watcherPinned) then {uiNamespace getVariable "rmx_var_watcher2"} else {findDisplay 7500}; + +_isPinned = uiNamespace getVariable ["rmx_var_watcher2",displayNull]; +_display = if (_isPinned isEqualTo displayNull) then { + findDisplay 7500 +} else { + _isPinned +}; + +_grp = _display displayCtrl 7507; +_codeBox = _display displayCtrl 7504; +_grpPos = ctrlPosition _grp; + +if (_add) then { + _grpPos set [3, (_grpPos select 3) + 0.108]; + _grp ctrlSetPosition _grpPos; + _grp ctrlCommit 0; + _color = call Epoch_getColorScheme; + + //Create debug elements + _cTop = _display ctrlCreate ["RscText", call Epoch_getIDC, _grp]; + _cVarBG = _display ctrlCreate ["RscText", call Epoch_getIDC, _grp]; + _cVar = switch (_idx) do { + case 1: {_display ctrlCreate ["RscPicture", call Epoch_getIDC, _grp]}; + case 2: {_display ctrlCreate ["RscProgress", call Epoch_getIDC, _grp]}; + default {_display ctrlCreate ["RscEdit", call Epoch_getIDC, _grp]}; + }; + _cX = _display ctrlCreate ["RscButton", call Epoch_getIDC, _grp]; + _cOk = _display ctrlCreate ["RscButton", call Epoch_getIDC, _grp]; + _cEdit = _display ctrlCreate ["RscEdit", call Epoch_getIDC, _grp]; + + //store debug elements into an array + _cArr = [_cTop, _cVarBG, _cVar, _cX, _cOk, _cEdit]; + + //store group of debug elements with others + rmx_var_watcherGrpControls pushBack _cArr; + rmx_var_watcherGrpControls_data pushBack [ctrlText _codeBox,_idx]; //index of execute + profileNamespace setVariable ["rmx_var_watcherGrpControls_data",rmx_var_watcherGrpControls_data]; + + //Give position and parent variable data + _ctrlSettings = + [ + [[0,0,0.465,0.012],[0,0,0,0], "", [0,0,0,0]], + [[0,0.012,0.4225,0.048],[0,0,0,0.6], "", [0,0,0,0]], + [[0,0.06,0.4225,0.048],[1,1,1,0.1], "", [1,1,1,1]], + [[0.4225,0.06,0.0425,0.048],[1,1,1,1], "X", _color], + [[0.4225,0.012,0.0425,0.048],[1,1,1,1], "Ok", _color], + [[0,0.012,0.4225,0.048],[0,0,0,0.6], ctrlText _codeBox, _color] + ]; + + { + _x ctrlSetPosition (_ctrlSettings select _forEachIndex select 0); + _x ctrlSetBackgroundColor (_ctrlSettings select _forEachIndex select 1); + _x ctrlSetText (_ctrlSettings select _forEachIndex select 2); + _x ctrlSetTextColor (_ctrlSettings select _forEachIndex select 3); + _x ctrlCommit 0; + } forEach _cArr; + +} else { + if (rmx_var_watcherGrpControls isEqualTo []) exitWith {false}; + + _grpPos set [3, (_grpPos select 3) - 0.108]; + _grp ctrlSetPosition _grpPos; + _grp ctrlCommit 0; + + { + _x call Epoch_getIDC; + ctrlDelete _x; + } forEach (rmx_var_watcherGrpControls select _idx); + rmx_var_watcherGrpControls deleteAt _idx; + rmx_var_watcherGrpControls_data deleteAt _idx; //generated index from buttonSetAction (see below) + profileNamespace setVariable ["rmx_var_watcherGrpControls_data",rmx_var_watcherGrpControls_data]; +}; +// y +// 0.012 + 0.108 * rmx_var_watcherGrpIndex +_ctrlSettingsY = [0, 0.012, 0.06, 0.06, 0.012, 0.012]; + +//Refresh/Update positions after changes +{ + _count = _forEachIndex; + { + _yPos = ctrlPosition _x; + _yPos set [1, (_ctrlSettingsY select _forEachIndex) + 0.108 * _count]; + _x ctrlSetPosition _yPos; + _x ctrlCommit 0; + } forEach _x; + + (_x select 3) buttonSetAction (format ["[false, %1] call rmx_fnc_watcherAddRemove;",_forEachIndex]); + (_x select 4) buttonSetAction (format ["(rmx_var_watcherGrpControls_data select %1) set [0, ctrlText(rmx_var_watcherGrpControls select %1 select 5)]",_forEachIndex]); + + + +} forEach rmx_var_watcherGrpControls; + +//Don't delete yet, used to visualize group size +/* +_c = _display ctrlCreate ["RscText", 909090]; +_c = _display displayCtrl 909090; +_c ctrlSetPosition _grpPos; +_c ctrlCommit 0; +_c ctrlSetBackgroundColor [1,0,0,0.1]; +*/ + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherRunner.sqf b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherRunner.sqf new file mode 100644 index 00000000..7de9ec87 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_init/functions/watcherRunner.sqf @@ -0,0 +1,122 @@ +if (rmx_var_watcher_running) exitWith {false}; +rmx_var_watcher_running = true; + +disableSerialization; +_fnc_findDisplay = { + _isPinned = uiNamespace getVariable ["rmx_var_watcher2",displayNull]; + _display = if (_isPinned isEqualTo displayNull) then { + findDisplay 7500 + } else { + _isPinned + }; + _display +}; + +_scheme = call Epoch_getColorScheme; + +while {str(call _fnc_findDisplay) isEqualTo "Display #7500"} do +{ + { + if !(rmx_var_watcherGrpControls isEqualTo []) then { + _var = _x select 0; + _idx = _x select 1; + _ctrl = rmx_var_watcherGrpControls select _forEachIndex select 2; + if !(isNil "_ctrl") then { + switch _idx do { + case 0: //code + { + _compiled = nil; + _compiled = call compile _var; + if !(isNil "_compiled") then { + _ctrl ctrlSetText (str _compiled); + _ctrl ctrlSetTextColor [1,1,1,1]; + } else { + _ctrl ctrlSetText "Syntax Error!"; + _ctrl ctrlSetTextColor [1,0,0,1]; + }; + + }; + case 1: //bool + { + _compiled = nil; + _compiled = call compile _var; + if !(isNil "_compiled") then { + if (_compiled isEqualType true) then { + if (_compiled) then { + _ctrl ctrlSetText "x\addons\rmx_init\data\w_on.paa"; + _ctrl ctrlSetTextColor _scheme; + _ctrl ctrlEnable true; + } else { + _ctrl ctrlSetText "x\addons\rmx_init\data\w_off.paa"; + _ctrl ctrlSetTextColor [1,1,1,1]; + }; + } else { + _ctrl ctrlSetText "x\addons\rmx_init\data\w_error.paa"; + _ctrl ctrlSetTextColor [1,0,0,1]; + }; + } else { + _ctrl ctrlSetText "x\addons\rmx_init\data\w_error.paa"; + _ctrl ctrlSetTextColor [1,0,0,1]; + }; + }; + case 2: //progress + { + _compiled = nil; + _compiled = call compile _var; + if !(isNil "_compiled") then { + if (_compiled isEqualType 0) then { + if (_compiled <= 1 && _compiled >= 0) then { + _ctrl progressSetPosition _compiled; + _ctrl ctrlSetTextColor [1,1,1,1]; + } else { + _ctrl progressSetPosition 1; + _ctrl ctrlSetTextColor [1,0,0,1]; + }; + } else { + _ctrl progressSetPosition 1; + _ctrl ctrlSetTextColor [1,0,0,1]; + }; + } else { + _ctrl progressSetPosition 1; + _ctrl ctrlSetTextColor [1,0,0,1]; + }; + }; + case 3: //mission + { + _variable = missionNamespace getVariable [_var,"nil"]; + _ctrl ctrlSetText (str _variable); + if (_variable isEqualTo "nil") then { + _ctrl ctrlSetTextColor [1,0,0,1]; + } else { + _ctrl ctrlSetTextColor [1,1,1,1]; + }; + }; + case 4: //ui + { + _variable = uiNamespace getVariable [_var,"nil"]; + _ctrl ctrlSetText (str _variable); + if (_variable isEqualTo "nil") then { + _ctrl ctrlSetTextColor [1,0,0,1]; + } else { + _ctrl ctrlSetTextColor [1,1,1,1]; + }; + }; + case 5: //profileName + { + _variable = profileNamespace getVariable [_var,"nil"]; + _ctrl ctrlSetText (str _variable); + if (_variable isEqualTo "nil") then { + _ctrl ctrlSetTextColor [1,0,0,1]; + } else { + _ctrl ctrlSetTextColor [1,1,1,1]; + }; + }; + }; + }; + }; + } forEach rmx_var_watcherGrpControls_data; + uiSleep 0.1; +}; + +rmx_var_watcher_running = false; +true diff --git a/Tools/DevFrameWork/x/addons/rmx_init/texHeaders.bin b/Tools/DevFrameWork/x/addons/rmx_init/texHeaders.bin new file mode 100644 index 0000000000000000000000000000000000000000..c178195ceb6d441d5bfd456008b39bc88fd8d29c GIT binary patch literal 799 zcmXqT@d#mLU|?VcVh{}i%}q@96DJ7RAJ}hiKX;Cd{r(9}bN&MXNDf3Z0u{0W*<3)( z$e5B?k{FYjmzJ+rkeCQk0+wrFXaKUfm_eii5Q5n4KuQ4!LF~Q&1_l8j1hJ=vFfecc zA&5OEl!1W-2tn+}KsG}d!dcV3b}wGM@F(Cjq?j!&pqT>!(dMiM literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/$PBOPREFIX$ b/Tools/DevFrameWork/x/addons/rmx_sandbox/$PBOPREFIX$ new file mode 100644 index 00000000..96f84e67 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/$PBOPREFIX$ @@ -0,0 +1 @@ +x\addons\rmx_sandbox \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/config.cpp b/Tools/DevFrameWork/x/addons/rmx_sandbox/config.cpp new file mode 100644 index 00000000..f61513df --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/config.cpp @@ -0,0 +1,45 @@ +//Author: Raimonds Virtoss / Raymix +class CfgPatches { + class rmx_sandbox { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + requiredAddons[] = {"rmx_init"}; + }; +}; + + +class devFunctions { + debugEnabled = 1; //enables console debug + class rmx { + class sandbox { + file = "x\Addons\rmx_sandbox"; + class variables {recompile = 1; preInit = 1;}; + class sandbox {recompile = 1;}; + }; + }; + + class A3E { + tag = "EPOCH"; + file = "x\Addons\rmx_sandbox\epoch"; + class generic { + file = "x\Addons\rmx_sandbox\epoch"; + //class dragControl {}; + //class dynamicHUD_start {postInit = 1; recompile = 1;}; + //class dynamicHUD_loadSave {recompile = 1;}; + //class dynamicHUD_adjust {recompile = 1;}; + //class getHUDCtrl {}; + class tradeMouseEvents {recompile = 1;}; + class tradeLoad {recompile = 1;}; + class tradeUnLoad {recompile = 1;}; + class tradePopulateLB {recompile = 1;}; + class tradeRefresh {recompile = 1;}; + class tradeMainLoop {recompile = 1;}; + }; + }; + +}; + +#include "epoch\epoch_configs.hpp" +#include "epoch\Epoch_GUI_rmx.hpp" +#include "epoch\CfgPricing.hpp" \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/CfgPricing.hpp b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/CfgPricing.hpp new file mode 100644 index 00000000..4915a44c --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/CfgPricing.hpp @@ -0,0 +1,1494 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss - epochmod.com + + Description: + Prices for Trading system. DLC items could have their own categories (safe to add) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgPricing.hpp +*/ + +class CfgPricing2 +{ + class All { //Don't edit these! + class All + { + displayName = "All"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; //icon + }; + }; + class Items { //major class, hardcoded, don't change + class Consumables //minor class, unlimited, name used in Trader config server side + { + displayName = "Consumables"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; //icon + class WhiskeyNoodle {price = 80;}; + class honey_epoch {price = 5;}; + class FoodBioMeat {price = 4;}; + class FoodMeeps {price = 50;}; + class FoodSnooter {price = 5;}; + class sardines_epoch {price = 2;}; + class meatballs_epoch {price = 2;}; + class scam_epoch {price = 4;}; + class TacticalBacon {price = 5;}; + class sweetcorn_epoch {price = 2;}; + class CookedSheep_EPOCH {price = 5;}; + class CookedGoat_EPOCH {price = 5;}; + class SnakeMeat_EPOCH {price = 3;}; + class CookedRabbit_EPOCH {price = 5;}; + class CookedChicken_EPOCH {price = 3;}; + class ItemTrout {price = 2;}; + class ItemTroutCooked {price = 20;}; + class ItemSeaBass {price = 5;}; + class ItemSeaBassCooked {price = 50;}; + class ItemTuna {price = 10;}; + class ItemTunaCooked {price = 100;}; + class FoodWalkNSons {price = 5;}; + class ItemSodaOrangeSherbet {price = 4;}; + class ItemSodaPurple {price = 5;}; + class ItemSodaMocha {price = 8;}; + class ItemSodaBurst {price = 4;}; + class ItemSodaRbull {price = 5;}; + class water_epoch {price = 5;}; + class clean_water_epoch {price = 10;}; + class EnergyPack {price = 3; tax = 0.9;}; + class EnergyPackLg {price = 30; tax = 0.9;}; + class ItemSodaAlpineDude { + price = 5; + }; + class ItemHotwire { + price = 15; + }; + class ItemKeyKit { + price = 15; + }; + }; + class Tools + { + displayName = "Items"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class JackKit {price = 25;}; + class ItemLockbox {price = 250; tax = 0.5;}; + class ItemSafe { price = 1250; tax = 0.5; }; + class ItemCompass {price = 3;}; + class ItemGPS {price = 20;}; + class EpochRadio0 {price = 2;}; + class EpochRadio1 {price = 4;}; + class EpochRadio2 {price = 6;}; + class EpochRadio3 {price = 8;}; + class EpochRadio4 {price = 10;}; + class EpochRadio5 {price = 12;}; + class EpochRadio6 {price = 14;}; + class EpochRadio7 {price = 16;}; + class EpochRadio8 {price = 18;}; + class EpochRadio9 {price = 20;}; + class VehicleRepair {price = 35;}; + class VehicleRepairLg {price = 50;}; + class ItemWatch {price = 2;}; + class Binocular {price = 4;}; + class NVG_EPOCH {price = 35;}; + class Rangefinder {price = 4;}; + class Laserdesignator {price = 4;}; + class ItemComboLock { + price = 45; + }; + }; + class Craft + { + displayName = "Crafting"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CircuitParts {price = 50;}; + class ItemCoolerE {price = 50;}; + class PaintCanClear {price = 1;}; + class PaintCanBlk {price = 1;}; + class PaintCanBlu {price = 1;}; + class PaintCanBrn {price = 1;}; + class PaintCanGrn {price = 1;}; + class PaintCanOra {price = 1;}; + class PaintCanPur {price = 1;}; + class PaintCanRed {price = 1;}; + class PaintCanTeal {price = 1;}; + class PaintCanYel {price = 1;}; + class ItemMixOil {price = 5;}; + class emptyjar_epoch {price = 5;}; + class lighter_epoch { price = 50; }; + class WoodLog_EPOCH { price = 1; }; + class ItemRope { price = 5; }; + class ItemStick { price = 1; }; + class ItemRock { price = 1; }; + class PartOreGold {price = 70;}; + class PartOreSilver {price = 7;}; + class PartOre {price = 1;}; + class ItemGoldBar {price = 100;}; + class ItemSilverBar {price = 10;}; + class ItemGoldBar10oz {price = 1000;}; + class ItemTopaz {price = 25;}; + class ItemOnyx {price = 30;}; + class ItemSapphire {price = 50;}; + class ItemAmethyst {price = 25;}; + class ItemEmerald {price = 25;}; + class ItemCitrine {price = 25;}; + class ItemRuby {price = 75;}; + class ItemQuartz {price = 5;}; + class ItemJade {price = 100;}; + class ItemGarnet {price = 25;}; + class ItemKiloHemp {price = 100;}; + // Building resources + class PartPlankPack {price = 2;}; + class CinderBlocks {price = 20;}; + class MortarBucket {price = 20;}; + class ItemScraps {price = 2;}; + class ItemCorrugated {price = 8;}; + class ItemCorrugatedLg {price = 25;}; + + // Building parts + class KitStudWall {price = 10;}; + class KitWoodFloor {price = 10;}; + class KitWoodStairs {price = 10;}; + class KitWoodTower {price = 10;}; + class KitWoodRamp {price = 14;}; + class KitSpikeTrap {price = 25;}; + class KitMetalTrap {price = 25;}; + class KitTankTrap {price = 25;}; + class KitHesco3 { price = 25; }; + class KitWoodLadder { price = 10; }; + class KitFirePlace {price = 4;}; + class KitTiPi {price = 10;}; + class KitShelf {price = 90;}; + class KitWorkbench { price = 10; }; + + class KitWoodFoundation { price = 20; }; + class KitFoundation {price = 90;}; + class KitPlotPole {price = 300;}; + class KitSolarGen { price = 200; }; + class KitCinderWall {price = 140;}; + + class ItemSolar { price = 75; }; + class ItemCables { price = 50; }; + class ItemBattery { price = 50; }; + class Pelt_EPOCH {price = 1;}; + class Venom_EPOCH {price = 10;}; + + //autogen stuff + class ItemPipe { + price = 10; + }; + class ItemBulb { + price = 10; + }; + class ItemBurlap { + price = 10; + }; + class ItemBriefcaseE { + price = 10; + }; + class ItemBriefcaseGold100oz { + price = 10000; + }; + class ItemAluminumBar { + price = 10; + }; + class ItemCopperBar { + price = 100; + }; + class ItemTinBar { + price = 1; + }; + class ItemPlywoodPack { + price = 100; + }; + }; + class Junk + { + displayName = "Junk"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_item_Money { price = 1000; }; + class CUP_item_Kostey_photos { price = 100; }; + class CUP_item_Kostey_map_case { price = 100; }; + class CUP_item_Kostey_notebook { price = 100; }; + class CUP_item_CDF_dogtags { price = 100; }; + class CUP_item_Moscow_Bombing_File { price = 100; }; + class CUP_item_Cobalt_File { price = 100; }; + class ItemDocument {price = 5;}; + class ItemDocumentMission {price = 5;}; + class ItemEmptyTin { + price = 1; + }; + class ItemSodaEmpty { + price = 1; + }; + class ItemKey { + price = 10; + }; + class ItemKeyBlue { + price = 10; + }; + class ItemKeyGreen { + price = 10; + }; + class ItemKeyRed { + price = 10; + }; + class ItemKeyYellow { + price = 10; + }; + class ItemDoc1 { + price = 10; + }; + class ItemDoc2 { + price = 10; + }; + class ItemDoc3 { + price = 10; + }; + class ItemDoc4 { + price = 10; + }; + class ItemDoc5 { + price = 10; + }; + class ItemDoc6 { + price = 10; + }; + class ItemDoc7 { + price = 10; + }; + class ItemDoc8 { + price = 10; + }; + class ItemVehDoc1 { + price = 10; + }; + class ItemVehDoc2 { + price = 10; + }; + class ItemVehDoc3 { + price = 10; + }; + class ItemVehDoc4 { + price = 10; + }; + }; + class Meds + { + displayName = "Medical"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class FAK {price = 3;}; + class Towelette {price = 1;}; + class HeatPack {price = 2;}; + class ColdPack {price = 2;}; + }; + class Fuel + { + displayName = "Fuel"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class jerrycan_epoch { price = 10; }; + class jerrycanE_epoch { price = 5; }; + class ItemBarrelF { + price = 200; + }; + class ItemBarrelE { + price = 50; + }; + }; + }; + + class Weapons { + class Melee + { + displayName = "Melee"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class ChainSaw {price = 125;}; + class CrudeHatchet { price = 5; }; + class MeleeMaul { price = 10; }; + class WoodClub { price = 5; }; + class Plunger { price = 15; }; + class MeleeSledge {price = 50;}; + class MeleeSword { price = 1111; }; + class MeleeRod { price = 100; }; + class Hatchet {price = 25;}; + }; + class Pistol + { + displayName = "Handguns"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class hgun_ACPC2_F {price = 20;}; + class hgun_Rook40_F {price = 20;}; + class hgun_P07_F {price = 20;}; + class hgun_Pistol_heavy_01_F {price = 25;}; + class hgun_Pistol_heavy_02_F {price = 25;}; + class ruger_pistol_epoch {price = 40;}; + class 1911_pistol_epoch {price = 6;}; + class hgun_Pistol_Signal_F {price = 20;}; + class MultiGun {price = 100;}; + class hgun_PDW2000_F {price = 35;}; + class CUP_hgun_Compact { price = 20; }; + class CUP_hgun_Duty { price = 20; }; + class CUP_hgun_Phantom { price = 25; }; + class CUP_hgun_Glock17 { price = 25; }; + class CUP_hgun_Makarov { price = 20; }; + class CUP_hgun_MicroUzi { price = 45; }; + class CUP_hgun_TaurusTracker455 { price = 35; }; + class CUP_hgun_PB6P9 { price = 30; }; + class CUP_hgun_SA61 { price = 30; }; + class CUP_hgun_M9 { price = 30; }; + class CUP_hgun_TaurusTracker455_gold { price = 300; }; + class CUP_hgun_Colt1911 { price = 30; }; + }; + class shotgun + { + displayName = "Shotguns"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + // Shotguns + class CUP_sgun_AA12 { price = 75; }; + class CUP_sgun_M1014 { price = 50; }; + class CUP_sgun_Saiga12K { price = 45; }; + class speargun_epoch { price = 75; }; + }; + class LMG + { + displayName = "LMG"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class LMG_Mk200_F {price = 150;}; + class LMG_Zafir_F {price = 150;}; + class CUP_lmg_L110A1 { price = 150; }; + class CUP_lmg_M240 { price = 150; }; + class CUP_lmg_minimipara { price = 150; }; + class CUP_lmg_minimi { price = 150; }; + class CUP_lmg_m249_para { price = 150; }; + class CUP_lmg_M249_E2 { price = 150; }; + class CUP_lmg_minimi_railed { price = 150; }; + class CUP_lmg_m249_pip1 { price = 150; }; + class CUP_lmg_m249_pip4 { price = 150; }; + class CUP_lmg_L7A2 { price = 150; }; + class CUP_lmg_PKM { price = 150; }; + class CUP_lmg_Pecheneg { price = 150; }; + class CUP_lmg_UK59 { price = 150; }; + class CUP_lmg_m249_pip2 { price = 150; }; + class CUP_lmg_m249_pip3 { price = 150; }; + class CUP_lmg_m249_SQuantoon { price = 150; }; + class CUP_lmg_M60E4 { price = 150; }; + class CUP_lmg_Mk48_des { price = 150; }; + class CUP_lmg_Mk48_wdl { price = 150; }; + }; + class SMG + { + displayName = "SMG"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class SMG_01_F {price = 35;}; + class SMG_02_F {price = 35;}; + class CUP_smg_bizon { price = 75; }; + class CUP_smg_EVO { price = 100; }; + class CUP_smg_MP5SD6 { price = 125; }; + class CUP_smg_MP5A5 { price = 100; }; + }; + class Rifles + { + displayName = "Rifle"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class Rollins_F {price = 50;}; + class arifle_MX_SW_F {price = 150;}; + class arifle_MX_SW_Black_F {price = 150;}; + class arifle_MXM_Black_F {price = 50;}; + class arifle_MX_GL_Black_F {price = 75;}; + class arifle_MX_Black_F {price = 50;}; + class arifle_MXC_Black_F {price = 50;}; + class sr25_epoch { price = 50; }; + class l85a2_epoch { price = 50; }; + class l85a2_pink_epoch { price = 50; }; + class l85a2_ugl_epoch { price = 50; }; + class arifle_Katiba_F {price = 50;}; + class arifle_Katiba_C_F {price = 50;}; + class arifle_Katiba_GL_F {price = 75;}; + class arifle_MXC_F {price = 50;}; + class arifle_MX_F {price = 50;}; + class arifle_MX_GL_F {price = 75;}; + class arifle_MXM_F {price = 50;}; + class arifle_SDAR_F {price = 50;}; + class arifle_TRG21_F {price = 50;}; + class arifle_TRG20_F {price = 50;}; + class arifle_TRG21_GL_F {price = 75;}; + class arifle_Mk20_F {price = 50;}; + class arifle_Mk20C_F {price = 50;}; + class arifle_Mk20_GL_F {price = 75;}; + class arifle_Mk20_plain_F {price = 50;}; + class arifle_Mk20C_plain_F {price = 50;}; + class arifle_Mk20_GL_plain_F {price = 75;}; + class CUP_arifle_AK107_GL { price = 75; }; + class CUP_arifle_AK47 { price = 75; }; + class CUP_arifle_AK74 { price = 75; }; + class CUP_arifle_AK74_GL { price = 75; }; + class CUP_arifle_AK74M { price = 75; }; + class CUP_arifle_AK74M_GL { price = 75; }; + class CUP_arifle_AKM { price = 75; }; + class CUP_arifle_AKS { price = 75; }; + class CUP_arifle_AKS_Gold { price = 75; }; + class CUP_arifle_AKS74 { price = 75; }; + class CUP_arifle_RPK74 { price = 75; }; + class CUP_arifle_L85A2_GL { price = 75; }; + class CUP_arifle_M16A4_Base { price = 75; }; + class CUP_arifle_M4A1_black { price = 75; }; + class CUP_arifle_M4A1_BUIS_GL { price = 75; }; + class CUP_arifle_M4A1_BUIS_camo_GL { price = 75; }; + class CUP_arifle_M4A1_BUIS_desert_GL { price = 75; }; + class CUP_arifle_M16A2 { price = 75; }; + class CUP_arifle_M16A2_GL { price = 75; }; + class CUP_arifle_M16A4_GL { price = 75; }; + class CUP_arifle_M4A3_desert { price = 75; }; + class CUP_arifle_M4A1 { price = 75; }; + class CUP_arifle_CZ805_A1 { price = 75; }; + class CUP_arifle_CZ805_GL { price = 75; }; + class CUP_arifle_CZ805_B_GL { price = 75; }; + class CUP_arifle_FNFAL { price = 100; }; + class CUP_arifle_FNFAL_railed { price = 100; }; + class CUP_arifle_FNFAL5061 { price = 100; }; + class CUP_arifle_G36A { price = 75; }; + class CUP_arifle_G36K { price = 75; }; + class CUP_arifle_G36C { price = 75; }; + class CUP_arifle_MG36 { price = 75; }; + class CUP_arifle_Mk16_CQC { price = 75; }; + class CUP_arifle_Mk16_CQC_FG { price = 75; }; + class CUP_arifle_Mk16_CQC_SFG { price = 75; }; + class CUP_arifle_Mk16_CQC_EGLM { price = 75; }; + class CUP_arifle_Mk16_STD { price = 75; }; + class CUP_arifle_Mk16_STD_FG { price = 75; }; + class CUP_arifle_Mk16_STD_SFG { price = 75; }; + class CUP_arifle_Mk16_STD_EGLM { price = 75; }; + class CUP_arifle_Mk16_SV { price = 75; }; + class CUP_arifle_Mk17_CQC { price = 75; }; + class CUP_arifle_Mk17_CQC_FG { price = 75; }; + class CUP_arifle_Mk17_CQC_SFG { price = 75; }; + class CUP_arifle_Mk17_CQC_EGLM { price = 75; }; + class CUP_arifle_Mk17_STD { price = 75; }; + class CUP_arifle_Mk17_STD_FG { price = 75; }; + class CUP_arifle_Mk17_STD_SFG { price = 75; }; + class CUP_arifle_Mk17_STD_EGLM { price = 75; }; + class CUP_arifle_Mk20 { price = 100; }; + class CUP_arifle_Sa58RIS1 { price = 75; }; + class CUP_arifle_Sa58RIS2_gl { price = 75; }; + class CUP_arifle_XM8_Carbine_FG { price = 75; }; + class CUP_arifle_XM8_Carbine { price = 75; }; + class CUP_arifle_XM8_Carbine_GL { price = 75; }; + class CUP_arifle_xm8_sharpshooter { price = 75; }; + class CUP_arifle_xm8_SAW { price = 75; }; + class CUP_arifle_XM8_Compact { price = 75; }; + class CUP_arifle_XM8_Compact_Rail { price = 75; }; + class CUP_arifle_CZ805_A2 { price = 75; }; + class CUP_arifle_CZ805_B { price = 75; }; + class CUP_arifle_Sa58P { price = 75; }; + class CUP_arifle_Sa58P_des { price = 75; }; + class CUP_arifle_Sa58V { price = 75; }; + class CUP_arifle_Sa58V_camo { price = 75; }; + class CUP_arifle_Sa58RIS1_des { price = 75; }; + class CUP_arifle_Sa58RIS2 { price = 75; }; + class CUP_arifle_Sa58RIS2_camo { price = 75; }; + class CUP_arifle_AK107 { price = 75; }; + class CUP_arifle_AKS74U { price = 75; }; + class CUP_arifle_RPK74_45 { price = 75; }; + class CUP_arifle_RPK74M { price = 75; }; + class CUP_arifle_FNFAL5062 { price = 75; }; + class CUP_arifle_FNFAL_OSW { price = 75; }; + class CUP_arifle_G36A_camo { price = 75; }; + class CUP_arifle_G36K_camo { price = 75; }; + class CUP_arifle_G36C_camo { price = 75; }; + class CUP_arifle_MG36_camo { price = 75; }; + class CUP_arifle_L85A2 { price = 75; }; + class CUP_arifle_L86A2 { price = 75; }; + class CUP_arifle_M4A1_camo { price = 75; }; + class CUP_arifle_M4A1_desert { price = 75; }; + class CUP_arifle_XM8_Railed { price = 75; }; + // DLC machine guns + class MMG_01_hex_F { price = 150; }; + class MMG_01_tan_F { price = 150; }; + class MMG_02_camo_F { price = 150; }; + class MMG_02_black_F { price = 150; }; + class MMG_02_sand_F { price = 150; }; + // new weapons + class m249_EPOCH {price = 150;}; + class m249Tan_EPOCH {price = 150;}; + class m107Tan_EPOCH {price = 200;}; + class m107_EPOCH {price = 200;}; + class m16_EPOCH {price = 100;}; + class m16Red_EPOCH {price = 125;}; + class M14_EPOCH {price = 125;}; + class M14Grn_EPOCH {price = 150;}; + class m4a3_EPOCH {price = 100;}; + class AKM_EPOCH {price = 100;}; + }; + class Scoped + { + displayName = "Sniper"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class srifle_EBR_F {price = 150;}; + class srifle_GM6_F {price = 150;}; + class srifle_LRR_F {price = 200;}; + class srifle_DMR_01_F {price = 200;}; + class CUP_srifle_AS50 { price = 200; }; + class CUP_srifle_LeeEnfield { price = 100; }; + class CUP_srifle_LeeEnfield_rail { price = 150; }; + class CUP_srifle_M107_Base { price = 200; }; + class CUP_srifle_M110 { price = 200; }; + class CUP_srifle_M14 { price = 150; }; + class CUP_srifle_M14_DMR { price = 150; }; + class CUP_srifle_Mk12SPR { price = 200; }; + class CUP_srifle_M24_des { price = 200; }; + class CUP_srifle_M40A3 { price = 200; }; + class CUP_srifle_ksvk { price = 150; }; + class CUP_srifle_SVD { price = 200; }; + class CUP_srifle_VSSVintorez { price = 200; }; + class CUP_srifle_CZ750 { price = 200; }; + class CUP_srifle_CZ550 { price = 200; }; + class CUP_srifle_CZ550_rail { price = 200; }; + class CUP_srifle_M24_wdl { price = 200; }; + class CUP_srifle_SVD_des { price = 200; }; + class CUP_srifle_AWM_des { price = 200; }; + class CUP_srifle_AWM_wdl { price = 200; }; + class CUP_srifle_G22_des { price = 200; }; + // DLC sniper rifles + class srifle_DMR_02_F { price = 150; }; + class srifle_DMR_02_camo_F { price = 150; }; + class srifle_DMR_02_sniper_F { price = 150; }; + class srifle_DMR_03_F { price = 150; }; + class srifle_DMR_03_khaki_F { price = 150; }; + class srifle_DMR_03_tan_F { price = 150; }; + class srifle_DMR_03_multicam_F { price = 150; }; + class srifle_DMR_03_woodland_F { price = 150; }; + class srifle_DMR_03_spotter_F { price = 150; }; + class srifle_DMR_04_Tan_F { price = 150; }; + class srifle_DMR_05_blk_F { price = 150; }; + class srifle_DMR_05_hex_F { price = 150; }; + class srifle_DMR_05_tan_f { price = 150; }; + class srifle_DMR_06_camo_F { price = 150; }; + class srifle_DMR_06_olive_F { price = 150; }; + }; + }; + + class Attachments { + class Muzzles + { + displayName = "Muzzle"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + //Epoch + class muzzle_snds_H {price = 5;}; + class muzzle_snds_L {price = 5;}; + class muzzle_snds_M {price = 5;}; + class muzzle_snds_B {price = 5;}; + class muzzle_snds_H_MG {price = 5;}; + class muzzle_snds_acp {price = 5;}; + + //CUP + class CUP_muzzle_snds_M110 { price = 5; }; + class CUP_muzzle_snds_M14 { price = 5; }; + class CUP_muzzle_PBS4 { price = 5; }; + class CUP_muzzle_PB6P9 { price = 5; }; + class CUP_muzzle_Bizon { price = 5; }; + class CUP_muzzle_snds_M9 { price = 5; }; + class CUP_muzzle_snds_MicroUzi { price = 5; }; + class CUP_muzzle_snds_AWM { price = 5; }; + class CUP_muzzle_snds_G36_black { price = 5; }; + class CUP_muzzle_snds_G36_desert { price = 5; }; + class CUP_muzzle_snds_L85 { price = 5; }; + class CUP_muzzle_snds_M16_camo { price = 5; }; + class CUP_muzzle_snds_M16 { price = 5; }; + class CUP_muzzle_snds_SCAR_L { price = 5; }; + class CUP_muzzle_mfsup_SCAR_L { price = 5; }; + class CUP_muzzle_snds_SCAR_H { price = 5; }; + class CUP_muzzle_mfsup_SCAR_H { price = 5; }; + class CUP_muzzle_snds_XM8 { price = 5; }; + + // DLC muzzles + class muzzle_snds_338_black { price = 5; }; + class muzzle_snds_338_green { price = 5; }; + class muzzle_snds_338_sand { price = 5; }; + class muzzle_snds_93mmg { price = 5; }; + class muzzle_snds_93mmg_tan { price = 5; }; + class muzzle_sr25S_epoch { price = 5; }; + }; + class mgun + { + displayName = "Multigun"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class Heal_EPOCH {price = 3;}; + class Defib_EPOCH {price = 5;}; + class Repair_EPOCH {price = 2;}; + }; + class Optics + { + displayName = "Optics"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + // Epoch + class Elcan_epoch { price = 5; }; + class Elcan_reflex_epoch { price = 10; }; + + class CUP_optic_PSO_1 { price = 10; }; + class CUP_optic_PSO_3 { price = 10; }; + class CUP_optic_Kobra { price = 10; }; + class CUP_optic_GOSHAWK { price = 10; }; + class CUP_optic_NSPU { price = 10; }; + class CUP_optic_PechenegScope { price = 10; }; + class CUP_optic_SB_3_12x50_PMII { price = 10; }; + class CUP_optic_AN_PAS_13c2 { price = 10; }; + class CUP_optic_LeupoldMk4 { price = 10; }; + class CUP_optic_HoloBlack { price = 10; }; + class CUP_optic_HoloWdl { price = 10; }; + class CUP_optic_HoloDesert { price = 10; }; + class CUP_optic_Eotech533 { price = 10; }; + class CUP_optic_Eotech533Grey { price = 10; }; + class CUP_optic_CompM4 { price = 10; }; + class CUP_optic_SUSAT { price = 10; }; + class CUP_optic_ACOG { price = 10; }; + class CUP_optic_CWS { price = 10; }; + class CUP_optic_Leupold_VX3 { price = 10; }; + class CUP_optic_AN_PVS_10 { price = 10; }; + class CUP_optic_CompM2_Black { price = 10; }; + class CUP_optic_CompM2_Woodland { price = 10; }; + class CUP_optic_CompM2_Woodland2 { price = 10; }; + class CUP_optic_CompM2_Desert { price = 10; }; + class CUP_optic_RCO { price = 10; }; + class CUP_optic_RCO_desert { price = 10; }; + class CUP_optic_LeupoldM3LR { price = 15; }; + class CUP_optic_LeupoldMk4_10x40_LRT_Desert { price = 15; }; + class CUP_optic_LeupoldMk4_10x40_LRT_Woodland { price = 15; }; + class CUP_optic_ElcanM145 { price = 10; }; + class CUP_optic_AN_PAS_13c1 { price = 10; }; + class CUP_optic_LeupoldMk4_CQ_T { price = 10; }; + class CUP_optic_ELCAN_SpecterDR { price = 10; }; + class CUP_optic_LeupoldMk4_MRT_tan { price = 10; }; + class CUP_optic_SB_11_4x20_PM { price = 10; }; + class CUP_optic_ZDDot { price = 10; }; + class CUP_optic_MRad { price = 10; }; + class CUP_optic_TrijiconRx01_desert { price = 10; }; + class CUP_optic_TrijiconRx01_black { price = 10; }; + class CUP_optic_AN_PVS_4 { price = 10; }; + + class optic_Arco {price = 10;}; + class optic_Hamr {price = 10;}; + class optic_Aco {price = 10;}; + class optic_ACO_grn {price = 10;}; + class optic_Aco_smg {price = 10;}; + class optic_ACO_grn_smg {price = 10;}; + class optic_Holosight {price = 10;}; + class optic_Holosight_smg {price = 10;}; + class optic_SOS {price = 10;}; + class optic_MRCO {price = 10;}; + class optic_DMS {price = 10;}; + class optic_Yorris {price = 10;}; + class optic_MRD {price = 10;}; + class optic_LRPS {price = 20;}; + class optic_NVS {price = 30;}; + class optic_Nightstalker {price = 50;}; + class optic_tws {price = 20;}; + class optic_tws_mg {price = 20;}; + // DLC optics + class optic_AMS { price = 10; }; + class optic_AMS_khk { price = 10; }; + class optic_AMS_snd { price = 10; }; + class optic_KHS_blk { price = 10; }; + class optic_KHS_hex { price = 10; }; + class optic_KHS_old { price = 10; }; + class optic_KHS_tan { price = 10; }; + }; + class ACC + { + displayName = "Accessories"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class acc_flashlight {price = 5;}; + class acc_pointer_IR {price = 5;}; + class CUP_acc_Glock17_Flashlight { price = 5; }; + class CUP_acc_ANPEQ_15 { price = 5; }; + class CUP_acc_ANPEQ_2 { price = 5; }; + class CUP_acc_Flashlight { price = 5; }; + class CUP_acc_Flashlight_wdl { price = 5; }; + class CUP_acc_Flashlight_desert { price = 5; }; + class CUP_acc_XM8_light_module { price = 5; }; + class CUP_acc_ANPEQ_2_camo { price = 5; }; + class CUP_acc_ANPEQ_2_desert { price = 5; }; + class CUP_acc_ANPEQ_2_grey { price = 5; }; + class CUP_acc_CZ_M3X { price = 5; }; + }; + class Bipods + { + displayName = "Bipods"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_bipod_Harris_1A2_L { price = 15; }; + class CUP_bipod_VLTOR_Modpod { price = 15; }; + // DLC bipods + class bipod_01_F_snd { price = 15; }; + class bipod_01_F_blk { price = 15; }; + class bipod_01_F_mtp { price = 15; }; + class bipod_02_F_blk { price = 15; }; + class bipod_02_F_tan { price = 15; }; + class bipod_02_F_hex { price = 15; }; + class bipod_03_F_blk { price = 15; }; + class bipod_03_F_oli { price = 15; }; + }; + class Camo + { + displayName = "Camo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_Mxx_camo { price = 10; }; + class CUP_Mxx_camo_half { price = 10; }; + class CUP_SVD_camo_g { price = 10; }; + class CUP_SVD_camo_g_half { price = 10; }; + class CUP_SVD_camo_d { price = 10; }; + class CUP_SVD_camo_d_half { price = 10; }; + }; + }; + + class Magazines { + class RifleAmmo + { + displayName = "Rifle Ammo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class 5Rnd_rollins_mag {price = 2; tax = 0.9;}; + class 30Rnd_65x39_caseless_green {price = 3; tax = 0.9;}; + class 30Rnd_65x39_caseless_green_mag_Tracer {price = 4; tax = 0.9;}; + class 30Rnd_65x39_caseless_mag {price = 3; tax = 0.9;}; + class 30Rnd_65x39_caseless_mag_Tracer {price = 4; tax = 0.9;}; + class 20Rnd_556x45_UW_mag {price = 3; tax = 0.9;}; + class 30Rnd_556x45_Stanag {price = 3; tax = 0.9;}; + class 30Rnd_556x45_Stanag_Tracer_Red {price = 4; tax = 0.9;}; + class 30Rnd_556x45_Stanag_Tracer_Green {price = 4; tax = 0.9;}; + class 30Rnd_556x45_Stanag_Tracer_Yellow {price = 4; tax = 0.9;}; + class 20Rnd_762x51_Mag {price = 4; tax = 0.9;}; + class 5Rnd_127x108_Mag {price = 3; tax = 0.9;}; + class 5Rnd_127x108_APDS_Mag {price = 6; tax = 0.9;}; + class 7Rnd_408_Mag {price = 4; tax = 0.9;}; + class 10Rnd_762x54_Mag {price = 2; tax = 0.9;}; + class 10Rnd_338_Mag { price = 2; tax = 0.9; }; + class 130Rnd_338_Mag{ price = 2; tax = 0.9; }; + class 10Rnd_93x64_DMR_05_Mag { price = 2; tax = 0.9; }; + class 10Rnd_127x54_Mag { price = 2; tax = 0.9; }; + class CUP_30Rnd_545x39_AK_M { price = 5; tax = 0.9; }; + class CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M { price = 5; tax = 0.9; }; + class CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M { price = 5; tax = 0.9; }; + class CUP_30Rnd_TE1_White_Tracer_545x39_AK_M { price = 5; tax = 0.9; }; + class CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M { price = 5; tax = 0.9; }; + class CUP_45Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M { price = 5; tax = 0.9; }; + class CUP_30Rnd_762x39_AK47_M { price = 5; tax = 0.9; }; + class CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M { price = 5; tax = 0.9; }; + class CUP_20Rnd_762x51_CZ805B { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_CZ805B { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_CZ805B { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_CZ805B { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_White_Tracer_762x51_CZ805B { price = 5; tax = 0.9; }; + class CUP_20Rnd_762x51_FNFAL_M { price = 5; tax = 0.9; }; + class CUP_20Rnd_762x51_B_SCAR { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_White_Tracer_762x51_SCAR { price = 5; tax = 0.9; }; + class CUP_30Rnd_Sa58_M_TracerG { price = 5; tax = 0.9; }; + class CUP_30Rnd_Sa58_M_TracerR { price = 5; tax = 0.9; }; + class CUP_30Rnd_Sa58_M_TracerY { price = 5; tax = 0.9; }; + class CUP_30Rnd_Sa58_M { price = 5; tax = 0.9; }; + // new magazines kiory + class 30rnd_556_magazine{ price = 5; tax = 0.9; }; + class 20rnd_762_magazine{ price = 5; tax = 0.9; }; + // new magazines seq + class 30Rnd_762x39_Mag {price = 5; tax = 0.9;}; + class 200Rnd_556x45_M249 {price = 5; tax = 0.9;}; + + class 200Rnd_65x39_cased_Box {price = 5; tax = 0.9;}; + class 100Rnd_65x39_caseless_mag {price = 3; tax = 0.9;}; + class 200Rnd_65x39_cased_Box_Tracer {price = 5; tax = 0.9;}; + class 100Rnd_65x39_caseless_mag_Tracer {price = 4; tax = 0.9;}; + class 150Rnd_762x51_Box {price = 4; tax = 0.9;}; + class 150Rnd_762x51_Box_Tracer {price = 5; tax = 0.9;}; + class 150Rnd_762x54_Box{ price = 4; tax = 0.9; }; + class 150Rnd_762x54_Box_Tracer{ price = 5; tax = 0.9; }; + class 150Rnd_93x64_Mag{ price = 6; tax = 0.9; }; + + //needs proper categories + class 16Rnd_9x21_Mag {price = 2; tax = 0.9;}; + class 30Rnd_9x21_Mag {price = 3; tax = 0.9;}; + class 9Rnd_45ACP_Mag {price = 2; tax = 0.9;}; + class 11Rnd_45ACP_Mag {price = 2; tax = 0.9;}; + class 6Rnd_45ACP_Cylinder {price = 2; tax = 0.9;}; + class 10rnd_22X44_magazine {price = 2; tax = 0.9;}; + class 9rnd_45X88_magazine {price = 2; tax = 0.9;}; + class 6Rnd_GreenSignal_F {price = 2;}; + class 6Rnd_RedSignal_F {price = 2;}; + }; + class HandgunAmmo + { + displayName = "Handgun Ammo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_10Rnd_9x19_Compact { price = 3; tax = 0.9; }; + class CUP_18Rnd_9x19_Phantom { price = 3; tax = 0.9; }; + class CUP_17Rnd_9x19_glock17 { price = 3; tax = 0.9; }; + class CUP_8Rnd_9x18_Makarov_M { price = 3; tax = 0.9; }; + class CUP_8Rnd_9x18_MakarovSD_M { price = 3; tax = 0.9; }; + class CUP_30Rnd_9x19_UZI { price = 3; tax = 0.9; }; + class CUP_6Rnd_45ACP_M { price = 3; tax = 0.9; }; + class CUP_20Rnd_B_765x17_Ball_M { price = 3; tax = 0.9; }; + class CUP_15Rnd_9x19_M9 { price = 3; tax = 0.9; }; + class CUP_7Rnd_45ACP_1911 { price = 3; tax = 0.9; }; + }; + class ShotgunAmmo + { + displayName = "Shotgun Ammo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_20Rnd_B_AA12_Pellets { price = 5; tax = 0.9; }; + class CUP_20Rnd_B_AA12_74Slug { price = 5; tax = 0.9; }; + class CUP_20Rnd_B_AA12_HE { price = 15; tax = 0.9; }; + class CUP_8Rnd_B_Beneli_74Slug { price = 5; tax = 0.9; }; + class CUP_8Rnd_B_Beneli_74Pellets { price = 5; tax = 0.9; }; + class CUP_8Rnd_B_Saiga12_74Slug_M { price = 5; tax = 0.9; }; + class CUP_8Rnd_B_Saiga12_74Pellets_M { price = 5; tax = 0.9; }; + class spear_magazine { price = 5; tax = 0.9; }; + }; + class SniperAmmo + { + displayName = "Sniper Ammo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_5Rnd_127x99_as50_M { price = 5; tax = 0.9; }; + class CUP_10x_303_M { price = 5; tax = 0.9; }; + class CUP_10Rnd_127x99_m107 { price = 5; tax = 0.9; }; + class CUP_20Rnd_762x51_B_M110 { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110 { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_M110 { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_M110 { price = 5; tax = 0.9; }; + class CUP_20Rnd_TE1_White_Tracer_762x51_M110 { price = 5; tax = 0.9; }; + class CUP_5Rnd_762x51_M24 { price = 5; tax = 0.9; }; + class CUP_5Rnd_127x108_KSVK_M { price = 5; tax = 0.9; }; + class CUP_10Rnd_762x54_SVD_M { price = 5; tax = 0.9; }; + class CUP_10Rnd_9x39_SP5_VSS_M { price = 5; tax = 0.9; }; + class CUP_20Rnd_9x39_SP5_VSS_M { price = 5; tax = 0.9; }; + class CUP_10Rnd_762x51_CZ750_Tracer { price = 5; tax = 0.9; }; + class CUP_10Rnd_762x51_CZ750 { price = 5; tax = 0.9; }; + class CUP_5x_22_LR_17_HMR_M { price = 5; tax = 0.9; }; + class CUP_5Rnd_86x70_L115A1 { price = 5; tax = 0.9; }; + class CUP_5Rnd_762x67_G22 { price = 5; tax = 0.9; }; + }; + class LMGAmmo + { + displayName = "LMG Ammo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M { price = 7; tax = 0.9; }; + class CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M { price = 7; tax = 0.9; }; + class CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M { price = 7; tax = 0.9; }; + class CUP_50Rnd_UK59_762x54R_Tracer { price = 5; tax = 0.9; }; + }; + class SMGAmmo + { + displayName = "SMG Ammo"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class 30Rnd_45ACP_Mag_SMG_01 {price = 2; tax = 0.9;}; + class 30Rnd_45ACP_Mag_SMG_01_Tracer_Green {price = 3; tax = 0.9;}; + class CUP_64Rnd_9x19_Bizon_M { price = 5; tax = 0.9; }; + class CUP_64Rnd_Green_Tracer_9x19_Bizon_M { price = 4; tax = 0.9; }; + class CUP_64Rnd_Red_Tracer_9x19_Bizon_M { price = 4; tax = 0.9; }; + class CUP_64Rnd_White_Tracer_9x19_Bizon_M { price = 4; tax = 0.9; }; + class CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M { price = 4; tax = 0.9; }; + class CUP_30Rnd_9x19_MP5 { price = 4; tax = 0.9; }; + }; + class Thrown + { + displayName = "Thrown"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class UGL_FlareWhite_F {price = 2;}; + class UGL_FlareGreen_F {price = 2;}; + class UGL_FlareRed_F {price = 2;}; + class UGL_FlareYellow_F {price = 2;}; + class UGL_FlareCIR_F {price = 2;}; + class 1Rnd_Smoke_Grenade_shell {price = 4;}; + class 1Rnd_SmokeRed_Grenade_shell {price = 4;}; + class 1Rnd_SmokeGreen_Grenade_shell {price = 4;}; + class 1Rnd_SmokeYellow_Grenade_shell {price = 4;}; + class 1Rnd_SmokePurple_Grenade_shell {price = 4;}; + class 1Rnd_SmokeBlue_Grenade_shell {price = 4;}; + class 1Rnd_SmokeOrange_Grenade_shell {price = 4;}; + class 3Rnd_HE_Grenade_shell {price = 10;}; + class 3Rnd_UGL_FlareWhite_F {price = 4;}; + class 3Rnd_UGL_FlareGreen_F {price = 4;}; + class 3Rnd_UGL_FlareRed_F {price = 4;}; + class 3Rnd_UGL_FlareYellow_F {price = 4;}; + class 3Rnd_UGL_FlareCIR_F {price = 4;}; + class 3Rnd_Smoke_Grenade_shell {price = 3;}; + class 3Rnd_SmokeRed_Grenade_shell {price = 3;}; + class 3Rnd_SmokeGreen_Grenade_shell {price = 3;}; + class 3Rnd_SmokeYellow_Grenade_shell {price = 3;}; + class 3Rnd_SmokePurple_Grenade_shell {price = 3;}; + class 3Rnd_SmokeBlue_Grenade_shell {price = 3;}; + class 3Rnd_SmokeOrange_Grenade_shell {price = 3;}; + class HandGrenade_Stone {price = 1;}; + class SmokeShell {price = 2;}; + class SmokeShellYellow {price = 2;}; + class SmokeShellGreen {price = 2;}; + class SmokeShellRed {price = 2;}; + class SmokeShellPurple {price = 2;}; + class SmokeShellOrange {price = 2;}; + class SmokeShellBlue {price = 2;}; + class Chemlight_green {price = 1;}; + class Chemlight_red {price = 1;}; + class Chemlight_yellow {price = 1;}; + class Chemlight_blue {price = 1;}; + }; + class Explosives + { + displayName = "Explosives"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class HandGrenade {price = 15;}; + class MiniGrenade {price = 10;}; + class DemoCharge_Remote_Mag {price = 40;}; + class SatchelCharge_Remote_Mag {price = 75;}; + class ATMine_Range_Mag {price = 50;}; + class ClaymoreDirectionalMine_Remote_Mag {price = 50;}; + class APERSMine_Range_Mag {price = 30;}; + class APERSBoundingMine_Range_Mag {price = 50;}; + class SLAMDirectionalMine_Wire_Mag {price = 40;}; + class APERSTripMine_Wire_Mag {price = 30;}; + }; + }; + + class Gear { + class Uniform + { + displayName = "Outfits"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + // Marksman DLC + class U_O_FullGhillie_lsh { price = 7; }; + class U_O_FullGhillie_sard { price = 7; }; + class U_O_FullGhillie_ard { price = 7; }; + + class U_O_CombatUniform_ocamo {price = 5;}; + class U_O_GhillieSuit {price = 5;}; + class U_O_PilotCoveralls {price = 5;}; + class U_O_Wetsuit {price = 5;}; + class U_OG_Guerilla1_1 {price = 5;}; + class U_OG_Guerilla2_1 {price = 5;}; + class U_OG_Guerilla2_2 {price = 5;}; + class U_OG_Guerilla2_3 {price = 5;}; + class U_OG_Guerilla3_1 {price = 5;}; + class U_OG_Guerilla3_2 {price = 5;}; + class U_OG_leader {price = 5;}; + + class U_C_Poloshirt_stripped {price = 4;}; + class U_C_Poloshirt_blue {price = 4;}; + class U_C_Poloshirt_burgundy {price = 4;}; + class U_C_Poloshirt_tricolour {price = 4;}; + class U_C_Poloshirt_salmon {price = 4;}; + class U_C_Poloshirt_redwhite {price = 4;}; + class U_C_Poor_1 {price = 5;}; + class U_C_WorkerCoveralls {price = 5;}; + class U_C_Journalist {price = 5;}; + class U_C_Scientist {price = 5;}; + class U_OrestesBody {price = 5;}; + class U_Wetsuit_uniform {price = 5;}; + class U_Wetsuit_White {price = 5;}; + class U_Wetsuit_Blue {price = 5;}; + class U_Wetsuit_Purp {price = 5;}; + class U_Wetsuit_Camo {price = 5;}; + class U_Camo_uniform {price = 5;}; + class U_ghillie1_uniform {price = 5;}; + class U_ghillie2_uniform {price = 5;}; + class U_ghillie3_uniform {price = 5;}; + class U_CamoBlue_uniform {price = 5;}; + class U_CamoBrn_uniform {price = 5;}; + class U_CamoRed_uniform {price = 5;}; + + class U_C_Driver_1 {price = 5;}; + class U_C_Driver_2 {price = 5;}; + class U_C_Driver_3 {price = 5;}; + class U_C_Driver_4 {price = 5;}; + class U_C_Driver_1_black {price = 5;}; + class U_C_Driver_1_blue {price = 5;}; + class U_C_Driver_1_green {price = 5;}; + class U_C_Driver_1_red {price = 5;}; + class U_C_Driver_1_white {price = 5;}; + class U_C_Driver_1_yellow {price = 5;}; + class U_C_Driver_1_orange {price = 5;}; + }; + class Headgear + { + displayName = "Headgear"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class wolf_mask_epoch {price = 30;}; + class pkin_mask_epoch {price = 30;}; + class clown_mask_epoch {price = 30;}; + class H_1_EPOCH {price = 3;}; + class H_2_EPOCH {price = 3;}; + class H_3_EPOCH {price = 3;}; + class H_4_EPOCH {price = 3;}; + class H_5_EPOCH {price = 3;}; + class H_6_EPOCH {price = 3;}; + class H_7_EPOCH {price = 3;}; + class H_8_EPOCH {price = 3;}; + class H_9_EPOCH {price = 3;}; + class H_10_EPOCH {price = 3;}; + class H_11_EPOCH {price = 3;}; + class H_12_EPOCH {price = 3;}; + class H_13_EPOCH {price = 3;}; + class H_14_EPOCH {price = 3;}; + class H_15_EPOCH {price = 3;}; + class H_16_EPOCH {price = 3;}; + class H_17_EPOCH {price = 3;}; + class H_18_EPOCH {price = 3;}; + class H_19_EPOCH {price = 3;}; + class H_20_EPOCH {price = 3;}; + class H_21_EPOCH {price = 3;}; + class H_22_EPOCH {price = 3;}; + class H_23_EPOCH {price = 3;}; + class H_24_EPOCH {price = 3;}; + class H_25_EPOCH {price = 3;}; + class H_26_EPOCH {price = 3;}; + class H_27_EPOCH {price = 3;}; + class H_28_EPOCH {price = 3;}; + class H_29_EPOCH {price = 3;}; + class H_30_EPOCH {price = 3;}; + class H_31_EPOCH {price = 3;}; + class H_32_EPOCH {price = 3;}; + class H_33_EPOCH {price = 3;}; + class H_34_EPOCH {price = 3;}; + class H_35_EPOCH {price = 3;}; + class H_36_EPOCH {price = 3;}; + class H_37_EPOCH {price = 3;}; + class H_38_EPOCH {price = 3;}; + class H_39_EPOCH {price = 3;}; + class H_40_EPOCH {price = 3;}; + class H_41_EPOCH {price = 3;}; + class H_42_EPOCH {price = 3;}; + class H_43_EPOCH {price = 3;}; + class H_44_EPOCH {price = 3;}; + class H_45_EPOCH {price = 3;}; + class H_46_EPOCH {price = 3;}; + class H_47_EPOCH {price = 3;}; + class H_48_EPOCH {price = 3;}; + class H_49_EPOCH {price = 3;}; + class H_50_EPOCH {price = 3;}; + class H_51_EPOCH {price = 3;}; + class H_52_EPOCH {price = 3;}; + class H_53_EPOCH {price = 3;}; + class H_54_EPOCH {price = 3;}; + class H_55_EPOCH {price = 3;}; + class H_56_EPOCH {price = 3;}; + class H_57_EPOCH {price = 3;}; + class H_58_EPOCH {price = 3;}; + class H_59_EPOCH {price = 3;}; + class H_60_EPOCH {price = 3;}; + class H_61_EPOCH {price = 3;}; + class H_62_EPOCH {price = 3;}; + class H_63_EPOCH {price = 3;}; + class H_64_EPOCH {price = 3;}; + class H_65_EPOCH {price = 3;}; + class H_66_EPOCH {price = 3;}; + class H_67_EPOCH {price = 3;}; + class H_68_EPOCH {price = 3;}; + class H_69_EPOCH {price = 3;}; + class H_70_EPOCH {price = 3;}; + class H_71_EPOCH {price = 3;}; + class H_72_EPOCH {price = 3;}; + class H_73_EPOCH {price = 3;}; + class H_74_EPOCH {price = 3;}; + class H_75_EPOCH {price = 3;}; + class H_76_EPOCH {price = 3;}; + class H_77_EPOCH {price = 3;}; + class H_78_EPOCH {price = 3;}; + class H_79_EPOCH {price = 3;}; + class H_80_EPOCH {price = 3;}; + class H_81_EPOCH {price = 3;}; + class H_82_EPOCH {price = 3;}; + class H_83_EPOCH {price = 3;}; + class H_84_EPOCH {price = 3;}; + class H_85_EPOCH {price = 3;}; + class H_86_EPOCH {price = 3;}; + class H_87_EPOCH {price = 3;}; + class H_88_EPOCH {price = 3;}; + class H_89_EPOCH {price = 3;}; + class H_90_EPOCH {price = 3;}; + class H_91_EPOCH {price = 3;}; + class H_92_EPOCH {price = 3;}; + class H_93_EPOCH {price = 3;}; + class H_94_EPOCH {price = 5;}; + class H_95_EPOCH {price = 5;}; + class H_96_EPOCH {price = 5;}; + class H_97_EPOCH {price = 5;}; + class H_98_EPOCH {price = 5;}; + class H_99_EPOCH {price = 5;}; + class H_100_EPOCH {price = 5;}; + class H_101_EPOCH {price = 5;}; + class H_102_EPOCH {price = 5;}; + class H_103_EPOCH {price = 5;}; + class H_104_EPOCH {price = 3;}; + }; + class Vests + { + displayName = "Vests"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class V_F0_EPOCH { price = 5; }; + class V_F1_EPOCH { price = 5; }; + class V_F2_EPOCH { price = 5; }; + class V_F3_EPOCH { price = 5; }; + class V_F4_EPOCH { price = 5; }; + class V_F5_EPOCH { price = 5; }; + + class V_1_EPOCH {price = 5;}; + class V_2_EPOCH {price = 5;}; + class V_3_EPOCH {price = 5;}; + class V_4_EPOCH {price = 5;}; + class V_5_EPOCH {price = 5;}; + class V_6_EPOCH {price = 5;}; + class V_7_EPOCH {price = 5;}; + class V_8_EPOCH {price = 5;}; + class V_9_EPOCH {price = 5;}; + class V_10_EPOCH {price = 5;}; + class V_11_EPOCH {price = 5;}; + class V_12_EPOCH {price = 5;}; + class V_13_EPOCH {price = 5;}; + class V_14_EPOCH {price = 5;}; + class V_15_EPOCH {price = 5;}; + class V_16_EPOCH {price = 5;}; + class V_17_EPOCH {price = 5;}; + class V_18_EPOCH {price = 5;}; + class V_19_EPOCH {price = 5;}; + class V_20_EPOCH {price = 5;}; + class V_21_EPOCH {price = 5;}; + class V_22_EPOCH {price = 5;}; + class V_23_EPOCH {price = 5;}; + class V_24_EPOCH {price = 5;}; + class V_25_EPOCH {price = 5;}; + class V_26_EPOCH {price = 5;}; + class V_27_EPOCH {price = 5;}; + class V_28_EPOCH {price = 5;}; + class V_29_EPOCH {price = 5;}; + class V_30_EPOCH {price = 5;}; + class V_31_EPOCH {price = 5;}; + class V_32_EPOCH {price = 5;}; + class V_33_EPOCH {price = 5;}; + class V_34_EPOCH {price = 5;}; + class V_35_EPOCH {price = 5;}; + class V_36_EPOCH {price = 5;}; + class V_37_EPOCH {price = 5;}; + class V_38_EPOCH {price = 5;}; + class V_39_EPOCH {price = 5;}; + class V_40_EPOCH {price = 5;}; + }; + }; + + class Backpacks { + class BSmall + { + displayName = "Small Backpacks"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class B_AssaultPack_cbr {price = 10;}; + class B_AssaultPack_dgtl {price = 10;}; + class B_AssaultPack_khk {price = 10;}; + class B_AssaultPack_mcamo {price = 10;}; + class B_AssaultPack_ocamo {price = 10;}; + class B_AssaultPack_rgr {price = 10;}; + class B_AssaultPack_sgg {price = 10;}; + class B_AssaultPack_blk { price = 10; }; + class smallbackpack_red_epoch {price = 22;}; + class smallbackpack_green_epoch {price = 22;}; + class smallbackpack_teal_epoch {price = 22;}; + class smallbackpack_pink_epoch {price = 22;}; + class I_UAV_01_backpack_F {price = 22;}; + class B_FieldPack_blk {price = 15;}; + class B_FieldPack_cbr {price = 15;}; + class B_FieldPack_khk {price = 15;}; + class B_FieldPack_ocamo {price = 15;}; + class B_FieldPack_oli {price = 15;}; + class B_FieldPack_oucamo {price = 15;}; + }; + class BMedium + { + displayName = "Medium Backpacks"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class B_TacticalPack_blk {price = 20;}; + class B_TacticalPack_mcamo {price = 20;}; + class B_TacticalPack_ocamo {price = 20;}; + class B_TacticalPack_oli {price = 20;}; + class B_TacticalPack_rgr {price = 20;}; + class B_Kitbag_cbr {price = 25;}; + class B_Kitbag_mcamo {price = 25;}; + class B_Kitbag_rgr {price = 25;}; + class B_Kitbag_sgg {price = 25;}; + }; + class BLarge + { + displayName = "Large Backpacks"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class B_Carryall_cbr {price = 40;}; + class B_Carryall_khk {price = 40;}; + class B_Carryall_mcamo {price = 40;}; + class B_Carryall_ocamo {price = 40;}; + class B_Carryall_oli {price = 40;}; + class B_Carryall_oucamo {price = 40;}; + }; + class para + { + displayName = "Parachute"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class B_Parachute {price = 25;}; // no packed option + }; + class packed + { + displayName = "Packed backpacks"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class Item_AssaultPack_cbr { + price = 10; + }; + class Item_AssaultPack_dgtl { + price = 10; + }; + class Item_AssaultPack_khk { + price = 10; + }; + class Item_AssaultPack_mcamo { + price = 10; + }; + class Item_AssaultPack_ocamo { + price = 10; + }; + class Item_AssaultPack_rgr { + price = 10; + }; + class Item_AssaultPack_sgg { + price = 10; + }; + class Item_AssaultPack_blk { + price = 10; + }; + class Item_Carryall_cbr { + price = 40; + }; + class Item_Carryall_khk { + price = 40; + }; + class Item_Carryall_mcamo { + price = 40; + }; + class Item_Carryall_ocamo { + price = 40; + }; + class Item_Carryall_oli { + price = 40; + }; + class Item_Carryall_oucamo { + price = 40; + }; + class Item_FieldPack_blk { + price = 15; + }; + class Item_FieldPack_cbr { + price = 15; + }; + class Item_FieldPack_khk { + price = 15; + }; + class Item_FieldPack_ocamo { + price = 15; + }; + class Item_FieldPack_oli { + price = 15; + }; + class Item_FieldPack_oucamo { + price = 15; + }; + class Item_Kitbag_cbr { + price = 25; + }; + class Item_Kitbag_mcamo { + price = 25; + }; + class Item_Kitbag_rgr { + price = 25; + }; + class Item_Kitbag_sgg { + price = 25; + }; + class Item_TacticalPack_blk { + price = 20; + }; + class Item_TacticalPack_mcamo { + price = 20; + }; + class Item_TacticalPack_ocamo { + price = 20; + }; + class Item_TacticalPack_oli { + price = 20; + }; + class Item_TacticalPack_rgr { + price = 20; + }; + class Item_smallbackpack_red { + price = 22; + }; + class Item_smallbackpack_green { + price = 22; + }; + class Item_smallbackpack_teal { + price = 22; + }; + class Item_smallbackpack_pink { + price = 22; + }; + }; + }; + + class Vehicles { + class Air1 + { + displayName = "Airplanes"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class C_Plane_Civil_01_F {price = 5000;}; + class C_Plane_Civil_01_racing_F {price = 5000;}; + class B_T_VTOL_01_infantry_F {price = 10000;}; + class B_T_VTOL_01_vehicle_F {price = 10000;}; + + //CUP + class CUP_C_C47_CIV {price = 1600;}; + class CUP_C_DC3_CIV {price = 2400;}; + }; + class Air2 + { + displayName = "Helicopters"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class mosquito_epoch { price = 1500; }; + class B_Heli_Light_01_EPOCH {price = 2500;}; + class O_Heli_Light_02_unarmed_EPOCH {price = 2500;}; + class I_Heli_Transport_02_EPOCH {price = 2500;}; + class I_Heli_light_03_unarmed_EPOCH {price = 2500;}; + class C_Heli_Light_01_civil_EPOCH {price = 2500;}; + class O_Heli_Transport_04_EPOCH {price = 2500;}; + class O_Heli_Transport_04_bench_EPOCH {price = 2500;}; + class O_Heli_Transport_04_box_EPOCH {price = 2500;}; + class O_Heli_Transport_04_covered_EPOCH {price = 2500;}; + class B_Heli_Transport_03_unarmed_EPOCH {price = 2500;}; + }; + class Land1 + { + displayName = "Light Vehicles"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class K01 {price = 300;}; + class K02 {price = 300;}; + class K03 {price = 300;}; + class K04 {price = 300;}; + class ebike_epoch {price = 1500;}; + class C_Quadbike_01_EPOCH {price = 500;}; + + //CUP + class CUP_B_M1030 {price = 500;}; + }; + class Land2 + { + displayName = "Medium Vehicles"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class C_Offroad_01_EPOCH {price = 750;}; + class C_Hatchback_01_EPOCH {price = 750;}; + class C_Hatchback_02_EPOCH {price = 1000;}; + class C_SUV_01_EPOCH {price = 750;}; + class C_Van_01_box_EPOCH {price = 1000;}; + class C_Van_01_transport_EPOCH {price = 1000;}; + class B_MRAP_01_EPOCH {price = 2500;}; + class I_MRAP_03_EPOCH { price = 2500; }; + class B_G_Offroad_01_armed_EPOCH {price = 2500;}; + + //APEX + class C_Offroad_02_unarmed_F {price = 3500;}; + class I_C_Offroad_02_unarmed_F {price = 3500;}; + class B_T_LSV_01_unarmed_F {price = 4400;}; + class O_LSV_02_unarmed_F {price = 4300;}; + class O_T_LSV_02_unarmed_F {price = 4600;}; + class B_CTRG_LSV_01_light_F {price = 4400;}; + class B_LSV_01_unarmed_F {price = 4400;}; + + //CUP + class CUP_B_LR_Transport_CZ_W {price = 800;}; + class CUP_C_LR_Transport_CTK {price = 800;}; + class CUP_B_Zodiac_USMC {price = 800;}; + class CUP_C_Skoda_Red_CIV {price = 800;}; + class CUP_C_Skoda_White_CIV {price = 800;}; + class CUP_C_Skoda_Blue_CIV {price = 800;}; + class CUP_C_Skoda_Green_CIV {price = 800;}; + class CUP_C_SUV_CIV {price = 1500;}; + class CUP_B_HMMWV_Transport_USA {price = 2500;}; + class CUP_B_HMMWV_Unarmed_USA {price = 2500;}; + class CUP_C_SUV_TK {price = 2000;}; + class CUP_B_LR_Transport_CZ_D {price = 1100;}; + class CUP_C_Datsun_Covered {price = 800;}; + class CUP_C_Datsun_Plain {price = 800;}; + class CUP_C_Datsun_Tubeframe {price = 800;}; + class CUP_C_Datsun_4seat {price = 800;}; + class CUP_C_Datsun {price = 800;}; + class CUP_C_Golf4_green_Civ {price = 800;}; + class CUP_C_Golf4_red_Civ {price = 800;}; + class CUP_C_Golf4_blue_Civ {price = 800;}; + class CUP_C_Golf4_black_Civ {price = 800;}; + class CUP_C_Golf4_kitty_Civ {price = 800;}; + class CUP_C_Golf4_reptile_Civ {price = 800;}; + class CUP_C_Golf4_camodigital_Civ {price = 800;}; + class CUP_C_Golf4_camodark_Civ {price = 800;}; + class CUP_C_Golf4_camo_Civ {price = 800;}; + class CUP_C_Golf4_white_Civ {price = 800;}; + class CUP_C_Golf4_whiteblood_Civ {price = 800;}; + class CUP_C_Golf4_yellow_Civ {price = 800;}; + class CUP_C_Octavia_CIV {price = 1600;}; + class CUP_B_HMMWV_Ambulance_USA {price = 1500;}; + class CUP_C_UAZ_Unarmed_TK_CIV {price = 1000;}; + class CUP_C_UAZ_Open_TK_CIV {price = 1000;}; + class CUP_B_UAZ_Unarmed_CDF {price = 1000;}; + }; + class Land3 + { + displayName = "Heavy Vehicles"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class B_Truck_01_transport_EPOCH {price = 1000;}; + class B_Truck_01_covered_EPOCH {price = 1000;}; + class B_Truck_01_mover_EPOCH {price = 1000;}; + class B_Truck_01_box_EPOCH {price = 1000;}; + class O_Truck_02_covered_EPOCH {price = 1000;}; + class O_Truck_02_transport_EPOCH {price = 1000;}; + class O_Truck_03_covered_EPOCH {price = 1000;}; + class O_Truck_02_box_EPOCH {price = 1000;}; + + //CUP + class CUP_C_Ural_Civ_03 {price = 1200;}; + class CUP_C_Ural_Open_Civ_03 {price = 1200;}; + class CUP_C_Ural_Civ_02 {price = 1200;}; + class CUP_B_TowingTractor_USMC {price = 800;}; + class CUP_C_Ural_Civ_01 {price = 1000;}; + class CUP_C_Ural_Open_Civ_01 {price = 1000;}; + class CUP_B_Ural_CDF {price = 1000;}; + class CUP_B_Ural_Open_CDF {price = 1000;}; + class CUP_C_Ural_Open_Civ_02 {price = 1000;}; + class CUP_B_Ural_Empty_CDF {price = 1000;}; + }; + class Ship + { + displayName = "Boats"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + class C_Rubberboat_EPOCH {price = 500;}; + class C_Rubberboat_02_EPOCH {price = 500;}; + class C_Rubberboat_03_EPOCH {price = 500;}; + class C_Rubberboat_04_EPOCH {price = 500;}; + class jetski_epoch {price = 500;}; + class C_Boat_Civil_01_EPOCH {price = 750;}; + class C_Boat_Civil_01_police_EPOCH {price = 750;}; + class C_Boat_Civil_01_rescue_EPOCH {price = 750;}; + class B_SDV_01_EPOCH {price = 1000;}; + + //APEX + class CUP_C_Fishing_Boat_Chernarus {price = 800;}; + class C_Scooter_Transport_01_F {price = 1200;}; + class C_Boat_Transport_02_F {price = 1200;}; + }; + class Terminal + { + displayName = "UAV"; //localize these + picture = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + //Mission Items + class B_UavTerminal {price = 10;}; + class O_UavTerminal {price = 10;}; + class I_UAV_01_F {price = 50;}; + }; + }; + +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_GUI_rmx.hpp b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_GUI_rmx.hpp new file mode 100644 index 00000000..ebca1678 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_GUI_rmx.hpp @@ -0,0 +1,550 @@ +/* #Ziboja +$[ + 1.063, + ["trader_menu",[[0,0,1,1],0.025,0.04,"GUI_GRID"],0,0,0], + [-2202,"main_menu_mainBG",[0,"",[0,0,1,1],[-1,-1,-1,-1],[0.21,0.22,0.25,1],[-1,-1,-1,-1],"","-1"],[]], + [-1201,"main_menu_top_BG",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa",[0,0,1,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1802,"main_menu_top_frame",[0,"",[0,0,1,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-2200,"dyn_menu_left_bg",[0,"",[-0.2,0,0.2,1.06],[-1,-1,-1,-1],[0.21,0.22,0.25,1],[-1,-1,-1,-1],"","-1"],[]], + [-1800,"dyn_menu_left_frame",[0,"",[-0.2,0,0.2,1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1200,"dyn_menu_left_buttonBG",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa",[-0.2,0,0.2,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1205,"dyn_menu_left_indicator",[0,"#(argb,8,8,3)color(1,1,1,1)",[-0.2,0,0.0075,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1202,"placeholder_left",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa",[-0.05,0.012,0.0375,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-2201,"dyn_menu_right_bg",[0,"",[1,0,0.2,1.06],[-1,-1,-1,-1],[0.21,0.22,0.25,1],[-1,-1,-1,-1],"","-1"],[]], + [-1801,"dyn_menu_right_frame",[0,"",[1,0,0.2,1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1203,"dyn_menu_right_buttonBG",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa",[1,0,0.2,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1206,"dyn_menu_right_indicator",[0,"#(argb,8,8,3)color(1,1,1,1)",[1.1925,0,0.0075,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1204,"placeholder_right",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa",[1.01,0.012,0.0375,0.04],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1500,"main_menu_left_LB",[0,"",[0,0.06,0.5,0.62],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1803,"main_menu_left_frame",[0,"",[0,0.06,0.5,0.62],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-2100,"main_menu_left_CB",[0,"",[0.28,0.008,0.2125,0.044],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1400,"main_menu_left_search",[0,"Type here to Search ...",[0.0075,0.008,0.265,0.044],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1501,"main_menu_right_LB",[0,"",[0.5,0.06,0.5,0.62],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1804,"main_menu_right_frame",[0,"",[0.5,0.06,0.5,0.62],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-2101,"main_menu_right_CB",[0,"",[0.78,0.008,0.2125,0.044],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1401,"main_menu_right_search",[0,"Type here to Search ...",[0.51,0.008,0.265,0.044],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1207,"main_menu_activeButton_TRADE",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa",[0,1,0.5,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1208,"main_menu_activeButton_CANCEL",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa",[0.5,1,0.5,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1000,"main_menu_activeButtonText_TRADE",[0,"Trade",[0.25,1.004,0.105,0.056],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1001,"main_menu_activeButtonText_CANCEL",[0,"Close",[0.7225,1.004,0.105,0.056],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1805,"desc_frame",[0,"",[0,0.68,1,0.32],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1209,"desc_icon",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa",[0.5,0.82,0.1375,0.18],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1002,"desc_item_descriptionShort",[0,"Short description",[0.5,0.741158,0.5,0.036],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1211,"desc_title_bg",[0,"x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa",[0,0.68,1,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1502,"desc_transaction_log_LB",[0,"",[0,0.74,0.5,0.26],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1100,"desc_rsctext_left",[0,"",[0,0.68,0.5,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1101,"desc_rsctext_right",[0,"",[0.5,0.68,0.5,0.06],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-1102,"desc_rscText_itemPropertiesFromCfgPricing",[0,"",[0.6375,0.776,0.3625,0.224],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [-2203,"hide_background",[0,"",[0.25,0.58,0.5,0.1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1003,"hide_main_menu_rscProgress",[0,"Slider",[0.2625,0.6,0.25,0.062],[-1,-1,-1,-1],[0,0,0,1],[-1,-1,-1,-1],"","-1"],[]], + [1402,"hide_valuebox",[0,"",[0.5225,0.6,0.09,0.064],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1600,"hide_btn_ok",[0,"OK",[0.6225,0.6,0.0525,0.064],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1601,"hide_btn_X",[0,"X",[0.685,0.6,0.0525,0.064],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]] +] +*/ + + + +//delete on release +class IGUIBack; +class rmx_rscPicture; +class RscFrame; +class RscStructuredText; +class RscText; +class RscActivePicture; +class RscEdit; +class RscCombo; +class RscListbox; +class RscButton; +class RscProgress; +class rmx_rscControlsGroup; + +class rmx_CT_TREE +{ + access = 0; // Control access (0 - ReadAndWrite, 1 - ReadAndCreate, 2 - ReadOnly, 3 - ReadOnlyVerified) + idc = -1; // Control identification (without it, the control won't be displayed) + type = 12; // Type CT_TREE + style = ST_LEFT; // Style + default = 0; // Control selected by default (only one within a display can be used) + blinkingPeriod = 0; // Time in which control will fade out and back in. Use 0 to disable the effect. + + x = 0; // Horizontal coordinates + y = 0; // Vertical coordinates + w = 1; // Width + h = 1; // Height + + colorBorder[] = {0,0,0,0}; // Frame color + + colorBackground[] = {0,0,0,0}; // Fill color + colorSelectBackground[]={0,0,0,0.5}; + colorSelect[] = {0.3,0.3,0.3,1}; // Selected item fill color (when multiselectEnabled is 0) + colorMarked[] = {0.3,0.3,0.3,0.5}; // Marked item fill color (when multiselectEnabled is 1) + colorMarkedSelected[] = {1,0.5,0,1}; // Selected item fill color (when multiselectEnabled is 1) + colorSearch[]= + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])", + "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])" + }; + colorDisabled[]={1,1,1,0.25}; + colorArrow[] = {0,0,0,0}; + colorLines[]={0,0,0,0}; + + borderSize=0; + rowHeight=0.043909099; + sizeEx = 0.03; // Text size + font = "TahomaB"; // Font from CfgFontFamilies + shadow = 1; // Shadow (0 - none, 1 - N/A, 2 - black outline) + colorText[] = {1,1,1,1}; // Text color + colorSelectText[] = {1,1,1,1}; // Selected text color (when multiselectEnabled is 0) + colorMarkedText[] = {1,1,1,1}; // Selected text color (when multiselectEnabled is 1) + + colorPicture[]={1,1,1,1}; + colorPictureSelected[]={0,0,0,1}; + colorPictureDisabled[]={1,1,1,0.25}; + colorPictureRight[]={1,1,1,1}; + colorPictureRightSelected[]={0,0,0,1}; + colorPictureRightDisabled[]={1,1,1,0.25}; + + tooltip = ""; // Tooltip text + tooltipColorShade[] = {0,0,0,1}; // Tooltip background color + tooltipColorText[] = {1,1,1,1}; // Tooltip text color + tooltipColorBox[] = {1,1,1,1}; // Tooltip frame color + + multiselectEnabled = 1; // Allow selecting multiple items while holding Ctrl or Shift + expandOnDoubleclick = 1; // Expand/collapse item upon double-click + + hiddenTexture = "A3\ui_f\data\gui\rsccommon\rsctree\hiddenTexture_ca.paa"; // Expand icon + expandedTexture = "A3\ui_f\data\gui\rsccommon\rsctree\expandedTexture_ca.paa"; // Collapse icon + + maxHistoryDelay = 1; // Time since last keyboard type search to reset it + + // Scrollbar configuration + class ScrollBar + { + width = 0; // Unknown? + height = 0; // Unknown? + scrollSpeed = 0.01; // Unknown? + + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; // Arrow + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; // Arrow when clicked on + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; // Slider background (stretched vertically) + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; // Dragging element (stretched vertically) + + color[] = {1,1,1,1}; // Scrollbar color + }; + + /* + onTreeSelChanged = "systemChat str ['onTreeSelChanged',_this]; false"; + onTreeLButtonDown = "systemChat str ['onTreeLButtonDown',_this]; false"; + onTreeDblClick = "systemChat str ['onTreeDblClick',_this]; false"; + onTreeExpanded = "systemChat str ['onTreeExpanded',_this]; false"; + onTreeCollapsed = "systemChat str ['onTreeCollapsed',_this]; false"; + onTreeMouseExit = "systemChat str ['onTreeMouseExit',_this]; false"; + */ +}; + +class rmx_traderUI { + idd = 55500; + enableSimulation = 1; + movingEnable = 0; + onUnload = "call epoch_tradeUnload;"; + onLoad = "setMousePosition [0.5, 0.5];"; + + class controls + { + class main_menu_mainBG: IGUIBack + { + idc = 55501; + x = 0; + y = 0; + w = 1; + h = 1; + colorBackground[] = {0.21,0.22,0.25,1}; + }; + class main_menu_top_BG: rmx_rscPicture + { + idc = 55502; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + x = 0; + y = 0; + w = 1; + h = 0.06; + }; + class dyn_menu_left_bg_trigger: IGUIBack + { + idc = 55600; + x = SafezoneX; //-0.5; + y = SafeZoneY; //0; + w = "(abs SafezoneX)" //0.5; + h = safeZoneW; //1.06; + colorBackground[] = {0,0,0,0}; + //onLoad = "(_this select 0) ctrlEnable true"; + //onMouseEnter = "['left','enter'] call Epoch_tradeMouseEvents"; + //onMouseExit = "['left','exit'] call Epoch_tradeMouseEvents"; + }; + class dyn_menu_right_bg_trigger: IGUIBack + { + idc = 55601; + x = 1; + y = SafeZoneY; //0; + w = abs SafezoneX; // 0.5; + h = safeZoneW; //1.06; + colorBackground[] = {0,0,0,0}; + //onLoad = "(_this select 0) ctrlEnable true"; + //onMouseEnter = "['right','enter'] call Epoch_tradeMouseEvents"; + //onMouseExit = "['right','exit'] call Epoch_tradeMouseEvents"; + }; + class dyn_menu_left_bg: IGUIBack + { + idc = 55602; + x = -0.06; + y = 0; + w = 0.06; + h = 1.06; + colorBackground[] = {0.21,0.22,0.25,1}; + }; + class dyn_menu_right_bg: IGUIBack + { + idc = 55603; + x = 1; + y = 0; + w = 0.06; + h = 1.06; + colorBackground[] = {0.21,0.22,0.25,1}; + }; + class main_menu_left_LB: RscListbox + { + idc = 55604; + x = 0; + y = 0.06; + w = 0.5; + h = 0.62; + }; + class main_menu_left_CB: RscCombo + { + idc = 55605; + x = 0.28; + y = 0.008; + w = 0.2125; + h = 0.044; + }; + class main_menu_left_search: RscEdit + { + idc = 55606; + text = "Type here to Search ..."; //--- ToDo: Localize; + x = 0.0075; + y = 0.008; + w = 0.265; + h = 0.044; + }; + class main_menu_right_LB: RscListbox + { + idc = 55607; + x = 0.5; + y = 0.06; + w = 0.5; + h = 0.62; + }; + class main_menu_right_CB: RscCombo + { + idc = 55608; + x = 0.78; + y = 0.008; + w = 0.2125; + h = 0.044; + }; + class main_menu_right_search: RscEdit + { + idc = 55609; + text = "Type here to Search ..."; //--- ToDo: Localize; + x = 0.51; + y = 0.008; + w = 0.265; + h = 0.044; + }; + class main_menu_activeButton_TRADE: rmx_rscPicture + { + idc = 55503; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + x = 0; + y = 1; + w = 0.5; + h = 0.06; + }; + class main_menu_activeButton_CANCEL: rmx_rscPicture + { + idc = 55504; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + x = 0.5; + y = 1; + w = 0.5; + h = 0.06; + }; + class main_menu_activeButtonText_TRADE: RscText + { + idc = 55506; + style = 0x02; + font = "PolenticalNeon"; + sizeEx = 0.05; + text = "Trade"; //--- ToDo: Localize; + x = 0; + y = 1; + w = 0.5; + h = 0.06; + onLoad = "(_this select 0) ctrlEnable true"; + onMouseEnter = "(_this select 0) ctrlSetTextColor (call Epoch_getColorScheme);"; + onMouseExit = "(_this select 0) ctrlSetTextColor [1,1,1,1];" + onMouseButtonUp = "['btn','trade'] call Epoch_tradeMouseEvents"; + }; + class main_menu_activeButtonText_CANCEL: RscText + { + idc = 55507; + style = 0x02; + font = "PolenticalNeon"; + sizeEx = 0.05; + text = "Close"; //--- ToDo: Localize; + x = 0.5; + y = 1; + w = 0.5; + h = 0.06; + onLoad = "(_this select 0) ctrlEnable true"; + onMouseEnter = "(_this select 0) ctrlSetTextColor (call Epoch_getColorScheme);"; + onMouseExit = "(_this select 0) ctrlSetTextColor [1,1,1,1];" + onMouseButtonUp = "['btn','close'] call Epoch_tradeMouseEvents"; + }; + class desc_icon: rmx_rscPicture + { + idc = 55610; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + x = 0.5; + y = 0.82; + w = 0.1375; + h = 0.18; + }; + class desc_item_descriptionShort: RscText + { + idc = 55611; + text = "Short description"; //--- ToDo: Localize; + x = 0.5; + y = 0.741158; + w = 0.5; + h = 0.036; + }; + class desc_title_bg: rmx_rscPicture + { + idc = 55508; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + x = 0; + y = 0.68; + w = 1; + h = 0.06; + }; + class desc_transaction_log_LB: RscListbox + { + idc = 55612; + x = 0; + y = 0.74; + w = 0.5; + h = 0.26; + }; + class desc_rsctext_left: RscStructuredText + { + idc = 55613; + x = 0; + y = 0.68; + w = 0.5; + h = 0.06; + }; + class desc_rsctext_right: RscStructuredText + { + idc = 55614; + x = 0.5; + y = 0.68; + w = 0.5; + h = 0.06; + }; + class desc_rscText_itemPropertiesFromCfgPricing: RscStructuredText + { + idc = 55615; + style = ST_MULTI; + + x = 0.6375; + y = 0.776; + w = 0.3625; + h = 0.224; + }; + class hide_background: IGUIBack + { + idc = 55616; + x = 0.25; + y = 0.58; + w = 0.5; + h = 0.1; + colorBackground[] = {0.21,0.22,0.25,1}; + onLoad = "(_this select 0) ctrlShow false"; + }; + class hide_main_menu_rscProgress: RscProgress + { + idc = 55617; + x = 0.2625; + y = 0.6; + w = 0.25; + h = 0.062; + onLoad = "(_this select 0) ctrlShow false"; + }; + class hide_valuebox: RscEdit + { + idc = 55618; + + SizeEx = 0.03; + x = 0.5225; + y = 0.6; + w = 0.09; + h = 0.064; + onLoad = "(_this select 0)ctrlShow false"; + }; + class hide_btn_ok: RscButton + { + idc = 55619; + text = "OK"; //--- ToDo: Localize; + x = 0.6225; + y = 0.6; + w = 0.0525; + h = 0.064; + onLoad = "(_this select 0) ctrlShow false"; + }; + class hide_btn_X: RscButton + { + idc = 55620; + text = "X"; //--- ToDo: Localize; + x = 0.685; + y = 0.6; + w = 0.0525; + h = 0.064; + onLoad = "(_this select 0) ctrlShow false"; + }; + class trade_frame: RscFrame + { + idc = 55509; + x = 0; + y = 0; + w = 1; + h = 1; + }; + }; +}; +/* + class dyn_menu_left_buttonBG: rmx_rscPicture + { + idc = 1200; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + x = -0.2; + y = 0; + w = 0.2; + h = 0.06; + }; + class dyn_menu_left_indicator: rmx_rscPicture + { + idc = 1205; + text = "#(argb,8,8,3)color(1,1,1,1)"; + x = -0.2; + y = 0; + w = 0.0075; + h = 0.06; + }; + class placeholder_left: rmx_rscPicture + { + idc = 1202; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + x = -0.05; + y = 0.012; + w = 0.0375; + h = 0.04; + }; + + class dyn_menu_right_buttonBG: rmx_rscPicture + { + idc = 1203; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + x = 1; + y = 0; + w = 0.2; + h = 0.06; + }; + class dyn_menu_right_indicator: rmx_rscPicture + { + idc = 1206; + text = "#(argb,8,8,3)color(1,1,1,1)"; + x = 1.1925; + y = 0; + w = 0.0075; + h = 0.06; + }; + class placeholder_right: rmx_rscPicture + { + idc = 1204; + text = "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + x = 1.01; + y = 0.012; + w = 0.0375; + h = 0.04; + }; +*/ + +/* + class desc_frame: RscFrame + { + idc = 1805; + x = 0; + y = 0.68; + w = 1; + h = 0.32; + }; + + class main_menu_right_frame: RscFrame + { + idc = 1804; + x = 0.5; + y = 0.06; + w = 0.5; + h = 0.62; + }; + + class main_menu_left_frame: RscFrame + { + idc = 1803; + x = 0; + y = 0.06; + w = 0.5; + h = 0.62; + }; + + class dyn_menu_right_frame: RscFrame + { + idc = 1801; + x = 1; + y = 0; + w = 0.2; + h = 1.06; + }; + + class main_menu_top_frame: RscFrame + { + idc = 1802; + x = 0; + y = 0; + w = 1; + h = 0.06; + }; + + class dyn_menu_left_frame: RscFrame + { + idc = 1800; + x = -0.2; + y = 0; + w = 0.2; + h = 1.06; + }; +*/ \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeLoad.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeLoad.sqf new file mode 100644 index 00000000..ea3c043e --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeLoad.sqf @@ -0,0 +1,132 @@ +createDialog "rmx_traderUI"; +_dsp = findDisplay 55500; + +//_slider progressSetPosition 1; +rmx_var_traderCategories= ["All","Air1","Air2","Land1","Land2","Land3","Ship","Terminal"]; +_clrScheme = call Epoch_getColorScheme; + +rmx_var_tradeCtrls = []; + +for "_i" from 55600 to 55620 do { + rmx_var_tradeCtrls pushBack (_dsp displayCtrl _i); +}; + +{ + _idxL = (rmx_var_tradeCtrls select 5) lbAdd _x; + _idxR = (rmx_var_tradeCtrls select 8) lbAdd _x; + (rmx_var_tradeCtrls select 5) lbSetCurSel 0; + (rmx_var_tradeCtrls select 8) lbSetCurSel 0; +} count ["No Sorting", "Alphabet", "Price: Low", "Price: High"]; + + +_leftCategories = ["Gear", "Nearby", "Vehicle Gear", "Owned Vehicles"]; //make multidimensional with pics + +rmx_var_traderLeftMenuCTRLs = []; +_leftCtrlGroup = _dsp ctrlCreate ["rmx_rscControlsGroup", call epoch_getIDC]; +_leftCtrlGroup ctrlSetPosition [-0.2,0,0.2,1]; +_leftCtrlGroup ctrlCommit 0; + +for "_i" from 0 to (count _leftCategories)-1 do { + _LBG = _dsp ctrlCreate ["RscPicture", call epoch_getIDC,_leftCtrlGroup]; + _LIcon = _dsp ctrlCreate ["RscPicture", call epoch_getIDC,_leftCtrlGroup]; + _LText = _dsp ctrlCreate ["RscText", call epoch_getIDC,_leftCtrlGroup]; + rmx_var_traderLeftMenuCTRLs pushBack [_LBG, _LIcon, _LText]; + + _displayName = (_leftCategories select _i); + _LText ctrlEnable true; //create rsctext with EH in configs + _LText ctrlSetEventHandler ["mouseEnter", format ["(_this select 0) ctrlSetTextColor %1",_clrScheme]]; + _LText ctrlSetEventHandler ["mouseExit", format ["(_this select 0) ctrlSetTextColor %1",[1,1,1,1]]]; + _LText ctrlSetEventHandler ["MouseButtonUp", format ["['left', 'click', '%1'] call Epoch_tradeMouseEvents;",_displayName]]; + + _LBG ctrlSetText "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + _LIcon ctrlSetText "x\addons\rmx_sandbox\epoch\trader_menu_v2\trade_placeholder.paa"; + _LText ctrlSetText _displayName; + + _LBG ctrlSetPosition [0.14,_i * 0.06,0.06,0.06]; + _LBG ctrlCommit 0; + + _LText ctrlSetPosition [0.05,_i * 0.06,0.15,0.06]; + _LText ctrlSetFade 1; + _LText ctrlCommit 0; + + _LIcon ctrlSetPosition [0.15,_i * 0.06 + 0.012,0.0375,0.04]; + _LIcon ctrlCommit 0; +}; + + + +_mainCategories = "true" configClasses ("CfgPricing2" call EPOCH_returnConfig); + +rmx_var_RCatConfigs = []; +{ + rmx_var_RCatConfigs append ("true" configClasses _x); +} count _mainCategories; + +rmx_var_traderRightMenuCTRLs = []; +_rightCtrlGroup = _dsp ctrlCreate ["rmx_rscControlsGroup", call epoch_getIDC]; +_rightCtrlGroup ctrlSetPosition [1,0,0.2,1]; +_rightCtrlGroup ctrlCommit 0; + +_cnt = 0; +{ + if (configName _x in rmx_var_traderCategories) then { + _RBG = _dsp ctrlCreate ["RscPicture", call epoch_getIDC,_rightCtrlGroup]; + _RIcon = _dsp ctrlCreate ["RscPicture", call epoch_getIDC,_rightCtrlGroup]; + _RText = _dsp ctrlCreate ["RscText", call epoch_getIDC,_rightCtrlGroup]; + rmx_var_traderRightMenuCTRLs pushBack [_RBG, _RIcon, _RText]; + + _displayName = (getText (_x >> "displayName")); + _RText ctrlEnable true; + _RText ctrlSetEventHandler ["mouseEnter", format ["(_this select 0) ctrlSetTextColor %1",_clrScheme]]; + _RText ctrlSetEventHandler ["mouseExit", format ["(_this select 0) ctrlSetTextColor %1",[1,1,1,1]]]; + _RText ctrlSetEventHandler ["MouseButtonUp", format ["['right', 'click', '%1'] call Epoch_tradeMouseEvents;",_displayName]]; + + _RBG ctrlSetText "x\addons\rmx_sandbox\epoch\trader_menu_v2\tradebg.paa"; + _RIcon ctrlSetText (getText (_x >> "picture")); + _RText ctrlSetText _displayName; + + _RBG ctrlSetPosition [0,_cnt * 0.06,0.06,0.06]; + _RBG ctrlCommit 0; + + _RText ctrlSetPosition [0,_cnt * 0.06,0.15,0.06]; + _RText ctrlSetFade 1; + _RText ctrlCommit 0; + + _RIcon ctrlSetPosition [0.01,_cnt * 0.06 + 0.012,0.0375,0.04]; + _RIcon ctrlCommit 0; + + _cnt = _cnt + 1; + }; +} forEach rmx_var_RCatConfigs; + +rmx_var_traderGroupCTRLs = [_leftCtrlGroup, _rightCtrlGroup]; + +rmx_var_traderMenuActive = true; + +[] spawn epoch_tradeMainLoop; + +["right","All"] call epoch_tradePopulateLB; + +/* + 0 left trigger + 1 right trigger + 2 left BG + 3 right BG + 4 left LB + 5 left CB + 6 left search + 7 right LB + 8 right CB + 9 right search + 10 desc pic + 11 desc descShort + 12 transaction LB + 13 desc left ST + 14 desc right ST + 15 desc multiline ST + 16 hide BG + 17 hide progress + 18 hide edit + 19 hide btn ok + 20 hide btn X +*/ \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMainLoop.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMainLoop.sqf new file mode 100644 index 00000000..fcae17b4 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMainLoop.sqf @@ -0,0 +1,19 @@ +_tempPos = true; + +while {rmx_var_traderMenuActive} do { + + _mpos = getMousePosition; + _onLeft = if ((_mpos select 0) < 0.5) then {true} else {false}; + + if !(_tempPos isEqualTo _onLeft) then { + _tempPos = _onLeft; + + if _onLeft then { + ['left','enter'] call Epoch_tradeMouseEvents; + ['right','exit'] call Epoch_tradeMouseEvents; + } else { + ['left','exit'] call Epoch_tradeMouseEvents; + ['right','enter'] call Epoch_tradeMouseEvents; + }; + }; +}; diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMouseEvents.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMouseEvents.sqf new file mode 100644 index 00000000..1c48e657 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeMouseEvents.sqf @@ -0,0 +1,119 @@ +params ["_trigger", "_event",["_category", "All"]]; +disableSerialization; + +switch _trigger do { + case "left": + { + _leftBG = rmx_var_tradeCtrls select 2; + switch _event do { + case "enter": + { + _leftBG ctrlSetPosition [-0.2,0,0.2,1.06]; + _leftBG ctrlCommit 0.1; + + { + _temp = ctrlPosition (_x select 0); + _temp set [0, 0]; + _temp set [2, 0.2]; + (_x select 0) ctrlSetPosition _temp; + (_x select 0) ctrlCommit 0.1; + + _temp = ctrlPosition (_x select 1); + _temp set [0, 0.01]; + (_x select 1) ctrlSetPosition _temp; + (_x select 1) ctrlCommit 0.1; + + (_x select 2) ctrlSetFade 0; + (_x select 2) ctrlCommit 0.3; + } forEach rmx_var_traderLeftMenuCTRLs; + + }; + case "exit": + { + _leftBG ctrlSetPosition [-0.06,0,0.06,1.06]; + _leftBG ctrlCommit 0.1; + + { + _temp = ctrlPosition (_x select 0); + _temp set [0, 0.14]; + _temp set [2, 0.06]; + (_x select 0) ctrlSetPosition _temp; + (_x select 0) ctrlCommit 0.1; + + _temp = ctrlPosition (_x select 1); + _temp set [0, 0.15]; + (_x select 1) ctrlSetPosition _temp; + (_x select 1) ctrlCommit 0.1; + + (_x select 2) ctrlSetFade 1; + (_x select 2) ctrlCommit 0; + } forEach rmx_var_traderLeftMenuCTRLs; + }; + case "click": + { + [_trigger,_category] call Epoch_tradePopulateLB; + }; + }; + }; + case "right": + { + _rightBG = rmx_var_tradeCtrls select 3; + switch _event do { + case "enter": + { + _rightBG ctrlSetPosition [1,0,0.2,1.06]; + _rightBG ctrlCommit 0.1; + + { + _temp = ctrlPosition (_x select 0); + _temp set [2, 0.2]; + (_x select 0) ctrlSetPosition _temp; + (_x select 0) ctrlCommit 0.1; + + _temp = ctrlPosition (_x select 1); + _temp set [0, 0.15]; + (_x select 1) ctrlSetPosition _temp; + (_x select 1) ctrlCommit 0.1; + + (_x select 2) ctrlSetFade 0; + (_x select 2) ctrlCommit 0.3; + } forEach rmx_var_traderRightMenuCTRLs; + + ctrlSetFocus (rmx_var_traderGroupCTRLs select 1); + }; + case "exit": + { + _rightBG ctrlSetPosition [1,0,0.06,1.06]; + _rightBG ctrlCommit 0.1; + + { + _temp = ctrlPosition (_x select 0); + _temp set [2, 0.06]; + (_x select 0) ctrlSetPosition _temp; + (_x select 0) ctrlCommit 0.1; + + _temp = ctrlPosition (_x select 1); + _temp set [0, 0.01]; + (_x select 1) ctrlSetPosition _temp; + (_x select 1) ctrlCommit 0.1; + + (_x select 2) ctrlSetFade 1; + (_x select 2) ctrlCommit 0; + } forEach rmx_var_traderRightMenuCTRLs; + }; + case "click": + { + [_trigger,_category] call Epoch_tradePopulateLB; + }; + }; + }; + case "btn": + { + switch _event do { + case "close": {systemChat "Close";}; + case "trade": {systemChat "Trade";}; + }; + }; +}; + +true diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradePopulateLB.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradePopulateLB.sqf new file mode 100644 index 00000000..3a1f99a7 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradePopulateLB.sqf @@ -0,0 +1,45 @@ +params ["_trigger", ["_category", "All"]]; + +switch _trigger do { + case "left": + { + + }; + case "right": + { + _cfg = []; + + if (_category isEqualTo "All") then { + { + if (configName _x in rmx_var_traderCategories) then { + _cfg pushBack _x; + }; + } forEach rmx_var_RCatConfigs; + + } else { + { + if (getText (_x >> "displayName") isEqualTo _category) exitWith {_cfg = [_x]}; + } forEach rmx_var_RCatConfigs; + }; + + _rLB = rmx_var_tradeCtrls select 7; + lbClear _rLB; + { + _items = "true" configClasses _x; + { + _itemData = [(configName _x),["displayName", "picture"]] call epoch_itemData; + if !(_itemData isEqualTo [""]) then { + _idx = _rLB lbAdd (_itemData select 0); + _rLB lbSetPicture [_idx,(_itemData select 1)]; + }; + } forEach _items; + + } forEach _cfg; + _rLB lbSetCurSel 0; + //call LB sorting from here (plus make EH and fnc itself) + }; + case "log": + { + + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeRefresh.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeRefresh.sqf new file mode 100644 index 00000000..e69de29b diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeUnLoad.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeUnLoad.sqf new file mode 100644 index 00000000..4be9532c --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/Epoch_tradeUnLoad.sqf @@ -0,0 +1,19 @@ +//unregister dynamic IDCs + +rmx_var_traderMenuActive = false; + +(rmx_var_traderGroupCTRLs select 0) call epoch_getIDC; +(rmx_var_traderGroupCTRLs select 1) call epoch_getIDC; + +{ + { + _x call epoch_getIDC; + } forEach _x; +}forEach rmx_var_traderLeftMenuCTRLs; + +{ + { + _x call epoch_getIDC; + } forEach _x; +}forEach rmx_var_traderRightMenuCTRLs; + diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/epoch_configs.hpp b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/epoch_configs.hpp new file mode 100644 index 00000000..8d8a8cdd --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/epoch_configs.hpp @@ -0,0 +1,559 @@ +class RscMapControl; +class Bush +{ + icon="\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; + color[]={0.44999999,0.63999999,0.33000001,0.40000001}; + size="14/2"; + importance="0.2 * 14 * 0.05 * 0.05"; + coefMin=0.25; + coefMax=4; +}; +class Rock +{ + icon="\A3\ui_f\data\map\mapcontrol\rock_ca.paa"; + color[]={0.1,0.1,0.1,0.80000001}; + size=12; + importance="0.5 * 12 * 0.05"; + coefMin=0.25; + coefMax=4; +}; +class SmallTree +{ + icon="\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; + color[]={0.44999999,0.63999999,0.33000001,0.40000001}; + size=12; + importance="0.6 * 12 * 0.05"; + coefMin=0.25; + coefMax=4; +}; +class Tree +{ + icon="\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; + color[]={0.44999999,0.63999999,0.33000001,0.40000001}; + size=12; + importance="0.9 * 16 * 0.05"; + coefMin=0.25; + coefMax=4; +}; +class busstop +{ + icon="\A3\ui_f\data\map\mapcontrol\busstop_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class fuelstation +{ + icon="\A3\ui_f\data\map\mapcontrol\fuelstation_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class hospital +{ + icon="\A3\ui_f\data\map\mapcontrol\hospital_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class church +{ + icon="\A3\ui_f\data\map\mapcontrol\church_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class lighthouse +{ + icon="\A3\ui_f\data\map\mapcontrol\lighthouse_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class power +{ + icon="\A3\ui_f\data\map\mapcontrol\power_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class powersolar +{ + icon="\A3\ui_f\data\map\mapcontrol\powersolar_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class powerwave +{ + icon="\A3\ui_f\data\map\mapcontrol\powerwave_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class powerwind +{ + icon="\A3\ui_f\data\map\mapcontrol\powerwind_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class quay +{ + icon="\A3\ui_f\data\map\mapcontrol\quay_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class transmitter +{ + icon="\A3\ui_f\data\map\mapcontrol\transmitter_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class watertower +{ + icon="\A3\ui_f\data\map\mapcontrol\watertower_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={1,1,1,1}; +}; +class Cross +{ + icon="\A3\ui_f\data\map\mapcontrol\Cross_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={0,0,0,1}; +}; +class Chapel +{ + icon="\A3\ui_f\data\map\mapcontrol\Chapel_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={0,0,0,1}; +}; +class Shipwreck +{ + icon="\A3\ui_f\data\map\mapcontrol\Shipwreck_CA.paa"; + size=24; + importance=1; + coefMin=0.85000002; + coefMax=1; + color[]={0,0,0,1}; +}; +class Bunker +{ + icon="\A3\ui_f\data\map\mapcontrol\bunker_ca.paa"; + size=14; + importance="1.5 * 14 * 0.05"; + coefMin=0.25; + coefMax=4; + color[]={0,0,0,1}; +}; +class Fortress +{ + icon="\A3\ui_f\data\map\mapcontrol\bunker_ca.paa"; + size=16; + importance="2 * 16 * 0.05"; + coefMin=0.25; + coefMax=4; + color[]={0,0,0,1}; +}; +class Fountain +{ + icon="\A3\ui_f\data\map\mapcontrol\fountain_ca.paa"; + size=11; + importance="1 * 12 * 0.05"; + coefMin=0.25; + coefMax=4; + color[]={0,0,0,1}; +}; +class Ruin +{ + icon="\A3\ui_f\data\map\mapcontrol\ruin_ca.paa"; + size=16; + importance="1.2 * 16 * 0.05"; + coefMin=1; + coefMax=4; + color[]={0,0,0,1}; +}; +class Stack +{ + icon="\A3\ui_f\data\map\mapcontrol\stack_ca.paa"; + size=20; + importance="2 * 16 * 0.05"; + coefMin=0.89999998; + coefMax=4; + color[]={0,0,0,1}; +}; +class Tourism +{ + icon="\A3\ui_f\data\map\mapcontrol\tourism_ca.paa"; + size=16; + importance="1 * 16 * 0.05"; + coefMin=0.69999999; + coefMax=4; + color[]={0,0,0,1}; +}; +class ViewTower +{ + icon="\A3\ui_f\data\map\mapcontrol\viewtower_ca.paa"; + size=16; + importance="2.5 * 16 * 0.05"; + coefMin=0.5; + coefMax=4; + color[]={0,0,0,1}; +}; +class rmx_emailMap: RscMapControl +{ + IDC=6969691; + ShowCountourInterval=0; + //important for center + x = 0; + y = 0; + w = 1; + h = 1; + moveOnEdges=1; + maxSatelliteAlpha=0; + alphaFadeStartScale=10; + alphaFadeEndScale=10; + ptsPerSquareTxt=500; + ptsPerSquareFor=15; + ptsPerSquareForEdge=15; + ptsPerSquareRoad=6; + ptsPerSquareObj=15; + colorBackground[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.5 + }; + colorSea[]={0,0,0,0.40000001}; + colorForest[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.69999999 + }; + colorForestBorder[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.5 + }; + colorRocks[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.1 + }; + colorRocksBorder[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.5 + }; + colorLevels[]={0,0,0,0}; + colorMainCountlines[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.60000002 + }; + colorCountlines[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.2 + }; + colorMainCountlinesWater[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.69999999 + }; + colorCountlinesWater[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.40000001 + }; + colorPowerLines[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.5 + }; + colorRailWay[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + colorTracks[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.15000001 + }; + colorTracksFill[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.30000001 + }; + colorRoads[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + colorRoadsFill[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.5 + }; + colorMainRoads[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + colorMainRoadsFill[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.69999999 + }; + colorGrid[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.30000001 + }; + colorGridMap[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 0.2 + }; + class bush: Bush + { + color[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.40000001 + }; + }; + class rock: Rock + { + color[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.80000001 + }; + }; + class smalltree: SmallTree + { + color[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.40000001 + }; + }; + class tree: Tree + { + color[]= + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + 0.40000001 + }; + }; + class busstop: busstop + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class fuelstation: fuelstation + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class hospital: hospital + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class church: church + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class lighthouse: lighthouse + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class power: power + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class powersolar: powersolar + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class powerwave: powerwave + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class powerwind: powerwind + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class quay: quay + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class shipwreck: Shipwreck + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class transmitter: transmitter + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; + class watertower: watertower + { + color[]= + { + "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", + 1 + }; + }; +}; \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/trader_menu_v2/trade_placeholder.paa b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/trader_menu_v2/trade_placeholder.paa new file mode 100644 index 0000000000000000000000000000000000000000..688dc71bf2891be724cd032dc2a1b8bec83f1341 GIT binary patch literal 5625 zcmeHLO>7%Q6rMN%5?Zn;O2wf>c8E*4xg?TNRjPGFmBc8;2T+B?!EMR`R8mI-ai9vj zQB@)&g2V5DR5C(H9M=eG%cX2oDkb74i>Oee8fhbFW1u3NHnfc!Z-@8BnOS=y>Nqh) z2u5prKF`d1?|U=z=Iz`;ySqD|daQeYXB{ELahwwjKi#gimE9LL!8Kgq4B{c^!ZM$7}P4lGOV%`oXO5mkrL#Au5cg zB>Hx+$e)#Bg7WC1kS7_S@3=F=F&-HV!{cV^;d_j1){EhOL6`a3A zKXZAqrjIf*@CV9<`SP*fzr+p91U~+D@V~V^rS<|J=Poo33XY56di``rtRIbr`yP3@ zZwGI$w*4s!B~xYsb5snW--q9b{W8`PZTO8?F|n3h_j>ZDaJb8lD1dWG_*!A6Nei{| zLM_LXG>qXRFtfsqf0gGmPln5jS;sLxT;Mo~`*#XaK{CV2g1{jw{9GpOupa1- zkO|HRC!XQ`%h?k$N1S>ltLf*1c~vU{j*X2vPG9C<@|XrUo!QBZC&#>Ii?yO zT^0CKBPIJyGSe+HQvMv57uRms`D+QWU(5MpReQDhn@_i-i-db z*OzS2%QBNzkQcJ_L*wa(#rmRnKEOG?W_?xW59ia}0n#|TX8jx7Uk0p)%*i3aUomnP zU2^yLs`>Wnt1^F!M920%@wwRFW%YaQsSul_=c8cnl{3QMMh#2i1TH79%KT*u4inA! zn(LQMCrRfLA|KkQKSBmw^viC(eAE6caGxaXamfb)=CLHdkO+}8V#eZwHbF?;2(TxnmWkM*kHeDUxn#)NcXqVYqn zf5Y-CwdXeXkJHy%&JVl!39cb5oPW%mN@QS4I0o~^O7n+*7ml0Cfnq)dwl3fQIu4Kk zA$Y@3D16$z_}DV63B6y0A@&*zZyLP67mu_4&IE7w%Jbq!RgfS4Nu-VJf+OmN1$BAa zrb{TTutCdhQ=-z#{-UtsmB;iAJ0h(l*{S5M(ug_=Idt@cCa!<4Md?8L_lq1ipQW)m z{iL8+mKdtSpwGCt6>3kTh6DWTIfDGel literal 0 HcmV?d00001 diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/trader_menu_v2/tradebg.paa b/Tools/DevFrameWork/x/addons/rmx_sandbox/epoch/trader_menu_v2/tradebg.paa new file mode 100644 index 0000000000000000000000000000000000000000..f522121bc79a27b07531c23e77dd01afc0985796 GIT binary patch literal 2881 zcmeH}u?oU45QcxHLeZs<(6!)_MYv9>Vhe&eXvD{Ga}zhg7b)~f@+f(W`bX&`4vNsh z{185lWVl@JE;neas@N^6eGviB`Rr*QinX^}%I|N>a-(S zC*Ltaf(wx4wKP5r-tb4yOgA6ldST3ol=*1Isg~F2=oH +disableSerialization; + +call rmx_fnc_recompile; + +//New trader menu +/* +"Epoch_tradeMainLoop" call rmx_fnc_recompile; +"Epoch_tradeLoad" call rmx_fnc_recompile; +"Epoch_tradeUnLoad" call rmx_fnc_recompile; +"Epoch_tradeMouseEvents" call rmx_fnc_recompile; +"Epoch_tradeMouseEvents" call rmx_fnc_recompile; +"Epoch_tradePopulateLB" call rmx_fnc_recompile; +call Epoch_tradeLoad; +*/ + +// dunno what's this for +/* +for "_i" from 1 to 7 do { + _c = ["botcenter",_i] call epoch_getHUDCtrl; + _c ctrlSetText "\x\addons\a3_epoch_code\Data\owner.paa"; +}; + +_c1 = ["botcenter",1] call epoch_getHUDCtrl; +*/ + + +/* +//"epoch_dynamicHUD_adjust" call rmx_fnc_recompile; +findDisplay 46 createDisplay "dUI_sandbox"; + +_dsp = findDisplay 666666; + +_c = _dsp ctrlCreate ["rmx_emailMap", call epoch_getIDC]; + +_c ctrlSetPosition [0,0,1,1]; +_c ctrlSetFade 0.1; +_c ctrlCommit 0; + +_c ctrlMapAnimAdd [0, 1, getArray(configFile >> "CfgWorlds" >> worldName >> "centerPosition")]; +ctrlMapAnimCommit _c; +_c ctrlMapAnimAdd [2, 0.1, getPosATL player]; +ctrlMapAnimCommit _c; +*/ +/* +disableSerialization; +findDisplay 46 createDisplay "dUI_sandbox"; +_dsp = findDisplay 666666; + +_c = _dsp ctrlCreate ["rmx_drag_RscActivePicture", 909090]; +_c1 = _dsp ctrlCreate ["rmx_drag_RscActivePicture", 909091]; + +_c ctrlSetPosition [0,0,0.25,0.25]; +_c1 ctrlSetPosition [1,0,0.25,0.25]; +_c ctrlCommit 0; +_c1 ctrlCommit 0; + +_c ctrlSetText "x\addons\rmx_init\data\retardedPinUp.paa"; +_c ctrlSetTextColor [1,0.5,0,0.2]; + +_c1 ctrlSetText "x\addons\rmx_init\data\retardedPinUp.paa"; +_c1 ctrlSetTextColor [1,1,0,1]; +*/ +/* +for "_i" from 0 to 360 step 2 do { + _c ctrlSetAngle [_i,0.5,0.5]; + hint str (ctrlAngle _c); + uiSleep 0.01; +}; +*/ + +/* +rmx_fnc_moveShit = { + _ctrl = param [0]; + _curr = ctrlPosition _Ctrl; + _mpos = getmousePosition; + + if (rmx_var_drag_MouseDown) then { + _ctrl ctrlSetPosition [(_mpos select 0) - (_curr select 2) / 2, (_mpos select 1) - (_curr select 3) / 2 ]; + _ctrl ctrlCommit 0; + }; +}; + +_c ctrlSetEventHandler ["mousemoving", "_this call rmx_fnc_moveShit;"]; +_c ctrlSetEventHandler ["MouseButtonDown", "rmx_var_MouseDown = true;"]; +_c ctrlSetEventHandler ["MouseButtonUp", "rmx_var_MouseDown = false;"]; +_c1 ctrlSetEventHandler ["mousemoving", "_this call rmx_fnc_moveShit;"]; +_c1 ctrlSetEventHandler ["MouseButtonDown", "rmx_var_MouseDown = true;"]; +_c1 ctrlSetEventHandler ["MouseButtonUp", "rmx_var_MouseDown = false;"]; +*/ + +//'rmx_fnc_epoch' call rmx_fnc_recompile; +/* +_a = "H"; +_b = "Hi"; +_c = "Hello World"; +_d = "Lorem ipsum dolor sit amet, diceret imperdiet consectetuer"; +_e = "Lorem ipsum dolor sit amet, diceret imperdiet consectetuer te sed, et qui civibus incorrupte, vis ei eirmod cetero. Vim sint evertitur ea, eum ea euismod commune singulis. Eos essent torquatos elaboraret ea, at per simul adversarium. Vis te homero intellegam. Usu ne tantas quaeque, wisi consectetuer has eu."; +_f = "xiiiiiiIiiiiiiiiiiiiiiiiiiiiiiiiix"; +_g = "xWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWx"; +_h = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +_i = "abcdefghijklmnopqrstuvwxyz"; +*/ + +/* +sleep 1; +disableSerialization; +createDialog "rmx_rscContainer"; +_dsp = findDisplay 99440; +_c = _dsp displayCtrl 99441; + +_c ctrlSetModelScale 0.2; +_c ctrlSetModelDirAndUp [[0,1,0],[0,0,1]]; +*/ +//launch again to refresh memory +/* +rmx_test = false; +uiSleep 1; +rmx_test = true; +_IDC = 28901; +_getIDC = {_IDC = _IDC + 1; _IDC}; + +rmx_var_testControls = []; + +_stuff = nearestOBjects [player, ["K03"],100]; + +{ + _ctrl = (findDisplay 46) ctrlCreate ["RscPicture",call _getIDC]; + _ctrl ctrlSetText "\x\addons\a3_epoch_code\Data\owner.paa"; + _ctrl ctrlSetPosition [0,0,0.1,0.1]; + _ctrl ctrlCommit 0; + rmx_var_testControls set [_forEachIndex, [_x, _ctrl]]; +}forEach _stuff; + +while {rmx_test} do { + { + (_x select 1) ctrlSetPosition (worldToScreen getPos(_x select 0)); + (_x select 1) ctrlCommit 0; + }forEach rmx_var_testControls; + //uiSleep 0.5; +}; + +{ + ctrlDelete (_x select 1); +}forEach rmx_var_testControls; + +rmx_var_testControls = []; + +*/ +//for "_i" from 0 to 200 do {_veh = "K03" createVehicle position player}; + +/* +{ + if ((str _x find "barrelwater_f.p3d") != -1) exitWith {player setPosATL(getPosATL _x)}; +} forEach nearestObjects [position player,[],3000]; + +*/ + +/******** POST PROCESSING +[] spawn { + _priority = 10; + _fullBlur = [1]; + _noBlur = [0]; + _animSpeed = 2; + + _handle = ["dynamicBlur",_priority] call epoch_postProcessCreate; //create effect + [_handle, _animSpeed, _fullBlur] call epoch_postprocessAdjust; //adds blur for 2 sec till max + uiSleep _animSpeed; + [_handle, _animSpeed, _noBlur] call epoch_postprocessAdjust; //removes blurr for 2 sec till min + uiSleep _animSpeed; + _handle call epoch_postprocessDestroy; //remove effect +}; +**************************/ + +//("") critical; + +/******** 3D ctrl +disableSerialization; +_display = (findDisplay 46) createDisplay "rmx_rscObject"; +_display displaySetEventHandler ["unload","rmx_var_3dCtrlSpin = false;"]; +_ctrl = _display displayCtrl 77771; +_ctrl2 = _display ctrlCreate ["rmx_rscPicture",77772]; +_ctrl2 ctrlSetText "#(rgb,8,8,3)color(1,1,1,0.1)"; +_ctrl2 ctrlSetPosition [0,0,1,1]; +_ctrl2 ctrlCommit 0; +_ctrl2 ctrlEnable true; +_ctrl2 ctrlSetEventHandler ["MouseMoving", "[_this,(findDisplay 77770) displayCtrl 77771] call Epoch_3DctrlYaw;"]; +_ctrl2 ctrlSetEventHandler ["MouseEnter", "rmx_var_3dCtrlSpin = false;"]; +_ctrl2 ctrlSetEventHandler ["MouseExit", "[(findDisplay 77770) displayCtrl 77771] call Epoch_3DctrlSpin;"]; + +_model1 = "\x\addons\a3_epoch_assets_1\models\chainsaw.p3d"; +_model2 = "\x\addons\a3_epoch_vehicles\jetski.p3d"; +_model3 = "\x\addons\a3_epoch_assets_3\cfgVehicles\Characters\female_ghillie.p3d"; + +_ctrl ctrlSetModel _model3; +_ctrl ctrlSetPosition [0.5, 1, 0.5]; +_ctrl ctrlSetModelScale 0.5; +**************************/ \ No newline at end of file diff --git a/Tools/DevFrameWork/x/addons/rmx_sandbox/variables.sqf b/Tools/DevFrameWork/x/addons/rmx_sandbox/variables.sqf new file mode 100644 index 00000000..6111ec76 --- /dev/null +++ b/Tools/DevFrameWork/x/addons/rmx_sandbox/variables.sqf @@ -0,0 +1,41 @@ +/* + Function Name: rmx_fnc_variables + Author: Raimonds Virtoss | Raymix + +*/ + +#include <\x\Addons\rmx_init\defines.inc> + +/*********************************** QUICK FUNCTION ***********************************/ +if (isNil "rmx_var_godMode") then {rmx_var_godMode = true;}; +/* + Add function or FSM to quicklaunch menu. If exists, params from dialog are attached in front + Careful with params if not function, will break ofc... + Usage: + [color, name, function] + + Server compile example (removed) ::> + //fnc grabs code block from specified function and sends it trough PV + //requires EH on server to combine and call compile elements ie - call compile (format ["%1 = %2",_this select 0, _this select 1]); + [[1,1,1,1],"Server recompile example","['rmx_fnc_remoteRecompile','rmx_fnc_remoteRecompileLocal'] call rmx_fnc_recompileOnServer;"], +*/ +rmx_var_quickFnc_items = +[ + [[0.76,0.99,0.4,1],"exec sandbox.sqf ( CTRL + Backspace)","'rmx_fnc_sandbox' call rmx_fnc_recompile; [] spawn rmx_fnc_sandbox;"], + [[0,1,0,1],"Output params","call rmx_fnc_output;"], + [[1,0,0,1],format ["allowDamage: [%1]",rmx_var_godMode],"rmx_var_godMode = if (rmx_var_godMode) then {false} else {true}; player allowDamage rmx_var_godMode; call rmx_fnc_variables"], + + [[0,0,0,0],"-----------","Separator"], + [[1,0.5,0,1],"Recompile dev variables","'rmx_fnc_variables' call rmx_fnc_recompile; call rmx_fnc_variables"], + [[1,0.5,0,1],"Recompile ALL functions","call rmx_fnc_recompile;"], //can be used with params, but use generated list + [[0,1,1,1],"*** Generated recompile list ***","don't run this line"] //leave this one, easier on github merge because no comma +]; + +// generates list of functions with recompile tag +{ + rmx_var_quickFnc_items pushBack [[1,1,1,0.4],format ["%1",_x],format ["'%1' call rmx_fnc_recompile;",_x]]; +} forEach (call (uiNamespace getvariable ["rmx_functions_listRecompile",{[]}])); + +/***************************************************************************************/ + +true