From 431da429dba23e40f1100333ba8f95520ea44a68 Mon Sep 17 00:00:00 2001 From: iTracerFacer <134304944+iTracerFacer@users.noreply.github.com> Date: Fri, 12 Dec 2025 13:20:15 -0600 Subject: [PATCH] Completed multi language support and menu rebuild for per player settings. --- ...zip => Moose_DynamicGroundBattle-1.0.1.zip | Bin 2475831 -> 2493414 bytes Moose_MenuManager.lua | 29 - Moose_WWII_PilotIntuition.lua | 3750 ----------------- 3 files changed, 3779 deletions(-) rename Moose_DualCoalitionZoneCapture.zip => Moose_DynamicGroundBattle-1.0.1.zip (90%) delete mode 100644 Moose_WWII_PilotIntuition.lua diff --git a/Moose_DualCoalitionZoneCapture.zip b/Moose_DynamicGroundBattle-1.0.1.zip similarity index 90% rename from Moose_DualCoalitionZoneCapture.zip rename to Moose_DynamicGroundBattle-1.0.1.zip index 6b9b102a0f6b2d218b71c6b0ac5deae63bb487ff..223f74c9067c8bf472dd1f51a925253d3f652a04 100644 GIT binary patch delta 150926 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

%0P|w@5>a4_7wl39xlOLcbMow~jN-!`rKv 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 delta 133190 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�S2~?&Py=(z1 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%0AS z!%E46L-5{PYs?AS55`LAl&s6J)Mbm(OwQxUtdUObYDs}lOSyi3iI8)2|JD2V!f$U; z_ZAm|io6@`%ex*X5>oOR`Eg@Jq+EOfkufhlkqWyeA2xtlTPd|k0^pz=+OH@!lkRyC z%iPe1Jau3xt@*Ex(t)uiStuLu>cf&*P$>eg+pv)gb9 zM30cM0c8qvDqEccPQ#B8ddT}P<*cgc6ZYhIF5W;6L7N^-WNkxs| zuSiYIcfGR7Wc{yEv0C| z@YOQk6JfVnxw$2;lLE7+x#JvOvhLyU9uRcr;?>za=fIH*YynqM#&9MSd#J7npBplN zEd;0)a6&7*a9v>P_EX|-uQ8tlHQHq6;*E@!a?>_3LE@oC9|z@6%;g^wJ}<1RY##Zs{WUaqj$(m~i)7dTE*q=TCibZ($$=;`;WFbs^Teh*?VM&Y_fPmJu-k^0roHb-a*(cwh`%vx<1QoWC(0-j+rJ z(!5QbVLyN}OP8X3;=4BkddNk-v4t8uMI}*pSXno0inKo)h~Kh`T%m9fa|S}l*(A?- zViI!l5O>O;*=jU`i-%1*UHA;cZOZa0#cy1bm0j|e8$YkkV$&Zi#7*B(iGOS>`V8FH z-rSAV%HR}!yF`%)Ya%xAly+Hm1yQtB;9}4_6LBXTZHv0j!)|^B@?sydz94H@XLE}r zO{mW;9da{ClfXSKBzZYW4|RiUO`9a?b~y<-FUf;@I98$~&`~Vpu^mSTGF_S{%-H>u zU*%JFqSM|Eh}Q}hZ4iL-@mkvp-GRD{kGhTKF-QOFUi-}H75L1m33L#hIL>b38b{MNnoQJ@wQfF zI=+7Ix;iGsbk1rr&4jdW3NDxBczJg0A{?A{C;7x5RHxY7%rbUfFfcBqCb_6oX`+Ow zw14Nglilqid>Ay#3Ys_mI_K&pFK8>|g-GbDZQ8<$;F4ikPNqf9(LKqn1F zXobruwIs{;-h6k7$2N_4g(V{q1$z3~f7r=`9S!YMC3Is#hLeyQ?1yrC5>k;tH4_PG zV1!m`s~_s#N{B!P^_?N4hLQgnS7+Z6{vn0tU=z{9$p74$zwi=0l0u;$h{$2&f6mp5 zo34j@x1>;3 zHDX2>`JaEYninxFX5}Q}|MEj1b>0tkX#0=Y%o6_>^Z&wx-4XvLg@)mf{70mu`um|p zd?biu&`LEDaTxiZvG=|g2`U-%GKqu%MrfqA`>P1rNywm}IgKX6I8VZ>f4s~?IkKuSOcrPUzSg%M?`_I~ImA5si5XjBTR6pXM)ed~vgc96nK zH8fB94n}08ditTa52SC%pcwdM|B?U2EGkI$N(vR%Boly0so4rLguT zhox?jM$QW(3R0c@(2P!UJThp_BDo-p{BLp1&eMNkHr`NxVB~)-dM88yBUf4!|5e!k zY}qmVC}35Ho=!mvBXm-m{ZO_p3Rr&lmni;goB#D5&1VW&>Z$~ktT6IcYN;RUEldfk zu^{mO$p6;*RQgd~l0x&+DgWDxNb0N~+R;S`OY8FzB^8YP&qaLxnG%f*x=BDq2_sZe zyD;;1VJcYfxdBuC*B1ZlyOjP^&!kZD3@R2F`Cr*(x~X6}lwPL#FCICm?tZBG3l*$Z zEeWYRD6?zw2>1Z;3lDMykAEhIpFq2D)>0_%wK|L?mKVHf(6q$Tk+4I2-WrX)4Q1@C zLM9$W$Y4>>^NaqYsKX|y<<}OFb~iRXI~HsXuPpLBt2WCNl3N6O{eo>p7tRZ}u06YS zdB5r1kLUJj^5XOc_jIu!rysaYXM2Cnlem`EaFywS0XsMHX^B^>fPml0kO6Xah%Y|Y z2un$RxnRBw~Rbkhrrn3l0w&F@UaL#^iSiUYp6?W`_ZBk%Etr zNHjf>Ib2oo=6mr!1Khv=il;8~6Ds?gObyM7U$^`F## zH2l>LkZ_O)e(ORKZ?LiPgY;T2@!Iz|@b1q7JXV@R?yOe3lA!Pv7~_zIHTj<+MjJ?@hPoFrJ`wwL3MHK?fGFT{P<~9#Z_YMnz?nPH%DHILQ=lE0e=2@ zou{q2#2>TdN+p(kNZ92b$G5+*$Y+f;>ebB0# zM7{fn3@gJ%d?Q@qfHuikXNI>s9_K4mtKenpN_WHWDiO`HW&Jx*yy7{(PbNslstN5! zAIw?`Pa19wzE)ObS-A}jwJLia$a_A(TSxpl`0uip|2auSPct@A1F|z_xS0Ec_O$2N z$7MSJT;*BVR%nU7h`3BxdA`Sj^cSVmK=BuT+80+2s?ja~0;&eIPyCw0jfqt@wkK z6~3LWt3bX&tDn?j(gDi_od8SY;9Jn3Df8*xCFlW}cW}mIGT`95SxG0eM4ja~0auqY zY-oimLG2|bM2Dc8SyCrag3n2Q{V)(mv@E$_mw$ru=sh29h+)8o1v(G9o05Q|L9{HP z!J^~X!Z33F;lAo>PNH&50A0XgXQ#Ibc8d*h1I43iK_;dP*H>)@d$Cz4XZ_jYJUb+* zpcA2U!vD>KR|GH*7_W)hV_4P{vhwQ3Vcpd!g(uL)VtPhDm9ci`wwb19_(fr^7ZEmNQ%E&joMm1g@qSt>tbCAA4Y7q#PpVP`{iqwx-F>Tz;?A%t z?+gh6`&09qupbCGZ!K7Q4(Sjo!dKOOxdsBIvSh@Tl~5!iOVhlCm~-M|t^-g}LlD+r zLW3QIQe{hc1p<~qfB-y4vLv%6nh*^qvV84loMM!ewE7E`hgS)1`Mx8pK%YK<%qrX;^2Q#yI9h6&n)4-{{h zvzNa)JO0)z@ZBBV#F8Jr3_r)gfo?vaubO;^$@~kps}eTj5I{*=!a)GZUE0}Ct2mem zSC$?c;Yg6V;#UDV5UqN>OP2m|cyL~}PTn?)`oW#_*2Cv7^0b|&rt8rHgCkMxpcjZ! zLFik=4bku;lW(F{Kch|Bdg|e zH!efA%w_orMFJo>4h*+E6Y~8Bsz*~!^~E;8D-mFlkhF|irkwSJW9K8!m_eMhwjY5X zx@05g=yeQ#nLsEwR@R-6-8Q4JaL0>;BN>L4R*zao0dY2WGwA094d9EuV>;CyIIaq6 z^OAii#UQ4d&62wN=)|>>^9j+c_7*0R9KCgiWEA$^5ujK&FklWl0uSTlFL+cwW_YWn zr~H-~hMVnqL377P2A`bvB3PM^zT||neAaBgzAixwj`_8K$dBwTG!TwKfx$$O(dS%7 zi*8vVi|6`zbltGz*3jfDbgnO4iTbfSn`8!JE+W#YfUn;`(=YM65rHu51M9kdA?Dbc z5BW>`7r@qbN7Me(ENY?Y?FOK8Sm~|Vbq+;BOrazc`Mq~uz8!t46%d9rGtpo2)N{L* zKP@#g!AbN)d5$kMy}e(2)sF?1!7bPQy#4DT1l>Nz@`<03gfH(y3LY9-R(Gwr4gb%5 zpSsnI8lP`ym4f&wb7h|v&gO$hW;!T_421g(h5!kfhNEDVkBNNrfq5U(nJ`l7|8rySc;~#H z2f#i&{P*ps&H2mYd2qiVUbn3!xQx4PE=UdFEhT;kZ^aZvdLxwOpE!qmP)sCO@JbN&6b zl&Vdth8DU@S025tZ3Kr&j+m_9S+J-vNG?z6yjrORRe6V7;EU$o2|&9zY*+l(HWcZk zi!OJFn-r(FdXRrQh%zx8&uU`Y)LsaMt z`JS*-k6Rg`{iYi=0?@+x;p00c>OPN4TJ^S;)4%1Nato@zA_|^7wmQ$RpyytNayxq?fOv5DT{W$_kH7n~bWA!HK$Kf?4-#^}l*CV#GhXN~!O=R0GQ3 zXq*0&>m&4<1kqm_eDLAqx;47 zLB(x3hoEVnsZjA(rp899n0DGIDuC=V1WqdQZ{v`-(C_$?{O`TccFPof*Sj8S-9y4p zcxyNV)R(fE(mc|pUqlaH}29#oCS5qup&W8&QTlLj9lO53K z-i@w60#!Ex7y-1F8wIGv)aft<`cwiFrCJ*BPELPLI6RbRGse0Pn|Ugm7O7nF&F)kp zKJGs%FcrT!!nvPuagM$ZuNwyOTOCberVl6Zr8$YElnE|ZF-!D;bZ|e2;Fj}s@1X~& zA!R#MlV{gnQn7yTFD(v(-><-VREw$wc1-EG*_&JBUIDoZw@#mI!oU6qi~0Oc>B+qZ zEvQag(TRmls6eBfjPlXKIH@~ZgpgE>CrCX$#a&1QJaKIH@*X=pP9 z8*Wux;TWLx$3I4s|80_nk!#kzMnDX$^p068=IiBJQnkjn!aS4ZgGuZoDfv-*!V_#| zO0w3dhwjkj$1aY<5%{j*(R#gQR8F)KAAZ&N^Wn#M5G#Mv7z587x!`*&A#EAo&bn_q zI=KN$K@PS&5pV8jzmHjog}khuCxk|_two!AzuW=+WyO=Lm;U5+A9@UeRSNg}c?W(N z(CE%90N*()5JNRchq}(4gjBE>S~RfmPuUxE`M57AL@?}Xo^1`A3;87)S@hJTH`lmc zzcOSAw(E&PHEdFm1PETNKAZ~$c@O7UeP~8Q=I-5$>htMa3*IKO`JE=q(9k*7p_(!Z z=e`VNpT*3f&=u~w?@Jzpg*|-G^QU8I9tTID5CnNu@DTZUES+iz74Xjk$rExjvFf6E*c}WF-VASmojmO>&ZT7;HEl}MWpOk{(OJMQ zREh$WHaJ;pc@j9{Z%!E@UQ?l0=v$sdwAN0KD;|usdGuHkReBT+eL5rC!m>M9wN)HK_tVO)wrYe3tk8(A= zYElLqr(5arTh~uqj(;UN-%WEroh#f-&^JMKc~9=7@My%1k%qg)}bz z!4L{igOC=9y7gQ0X?oZAh|yX(Cd(=7U*g;iV*J6%=u^_Z?2J@84h48C!w&d`y~0)l z8sh_~`#1va<8@8SsnWd1Il$Nznxc^UJ#C^rUo^v!%Epcn`6UzASkK#{!6u(ZJ|o6(IJrT5bh%2vT&;@67Ot%)pI$TFI6j=dxn^*Q z*`)V4ynEzgZnZ=o{YPbG;o%nGk1lLG+~uva7^R+6hPZP(S)BNij}*BWem9)d{;|~m zwLSz>E4!a5fAn&#)UD&lwf%d$X4u*i0`0($D!ks`JD0A|Q4r>FOJWVw-+#lOx78BM zNo!S`^oXI^f#ZAF1(=eI!)Xwx<{b&4UfdUo3ZFm1ur_lMmMtmGm1gvJodWcjZI9z( zwxYT=?yI6R+@Uy3->pw~4!tz^hwDQsn5L-rh+p7sg~PCDh*yx>R*zPCTAZqCJIBx3 zH8I#;Vs>0iT)we6om178e}4w($ry`Xct?&pxOgNe+vZp?Hoof)5-5=hk2Fm$;9$q@ zZiW4q(B%%>f(~n#=JqDE6L}v(ZOxs&K=Bj`B57OA&h+`un+|34Ru{F56QDr8AU2kZ z5`0ukf2qd6=$i#lG5&PKqGUHY1Z_S?w<{CEoEB5+vzc^g=cqOtEPw7446))}OU84 z+9$KKjSh^6AdPDHuVWfKQvCUfV$Bo)^6it*NcZ$D{ zHrop62*OyIYm>h`I8%Vg3KQk1^@`yeOfilKq2U&l4(Q=n zB}!o6AAf55RoVJjgYOAZ{*8|n8|x}%cxeQ=WZ>8C#@BQtM%|`%WMDi@F65|KRu5Pv z8%-;tG)XCh!@V|twIc9Om}DRO3AoAD4TLoyGy)A?P?!5KMrr8<2Q+|hvVk*Xoy@`O zjP_>9-3qm8m6n{vEw8NF=c`&h2nUYR|?jq-jDkpj$ zqXk+*L`lbIyAaK{RynYQJwnWPt!x?HV8S1$qc+Bx12FuhJ6M7@sT(QocnLh_`@p3~ zL+hM;=nyRB{ZDT~&qYDX9_o6N6pm|QSZG4GlqH#ix5}>qw2d1+!i^{2Vcr!EUf zNPlH|pU>j@pRvBxR5f<8914V^hQHd$e>b5cYWw6s8#!DCQ1&$@=Xlqs+dwVu6-K4; zeZmZY@h)P;S*Js-952B*M!!%(+qr07%$bqU%oY`IcblAFQYST|X5m>_CuF?w9D$kZ z(AOqGd2fl+;EqRd$C?O{z%7kT_)ve<3V-;o0+E8n$$n~U!p-Kr9RNvy&e^s^KM>#sE!XBq{YsXpY^tPBWO}AXciNI_e)3TZ!JvA~+%B=g zec0^wZ_S(W9i(Zadken+(?R5eJb%IiZ(~LoxJ(`oZL;W()5=yyKf8^6sXJ2Kyo51Q`>^3QRVbmaFAYDHp{ZDNE51~Iz8yMeQ z4hHE{vJW1_&Q;nm)(@|UZ3BahL;s|&SvzZKD)VSCrNN73SiC(+C)V+3_yFRrZyV@ypKowl#msVt>6sxBL{@_V2GG=CeGD{=<-gMkxK zwWFK?9{1kg+Q`w#)X347**A=hN+R?V4+RdMM5=g@^)|XCRIn;}XvCiA4dfRC8u`s5 z2?N$c7dPne7yw8#5YP4vG6+%jzK4xnx`sVqGVcB9tOVRlv(qeA0tPbQe>KK0l44E4 z#XS=1bq>>Xg#F+VUo!Y{*j2eMu4%))wW;%n!~qcsG#r5?fNDiI6*{?Gq)=B2bzDwH#rY=agr}D^x{-EvUy@w+xtWTFYk%nK%@NT1n$zs6yH!9? zv$;%0qGp2ov#5S#4GoX#raZ|YfZ{c$yU?5l&$GH0Hyf|CirpipSz&?p(TT>tMpTkg zVZ(p{s}6>+UoMH_%WdlDkhU3TCP~46#<}hEljVOBXG*az)xt1E?`BO|T7*ug_ZB75 z?Z<1+rG2-id4DIILGE2j|0FF=C4Fff$V&UB)|XG6l!OYPJ11jTXkX2IXA&k&e~g3s zNt;>0eDUd3i1kzwzGWBq69(-%$@aN(D-^cGt52)&SYT7fhu@J98^}9+p+b8$y#zDG zRcBa7)&TQSPR<$T_8mZfn zPk%aIY49)?l%KXn+-pS^E_uIa4x5ryc51S=jW*&QHLNj;udl|C&#fF&Lc)w4T`Bt& z{c=AXVW*Y8lTgT_T5S`zG$nb^KY&J?C9cGE5~mL}3XMt{q3 zF$T4pwV_pZOLi!fTDb&KZEbjAO}0WyPMyIcr52;zkKG^rlJ8PvLEP)^KzQV9Ch1Ny z+;ALmWU_NwdS_3pfs;5j znrAAUE`nnsMaDbh2A#C>5^WF!Wgtx|fpBydZKP*P*pbm=vRXS-U5fV7tbZrX28fK0 zjoJzYHDhIZ%GvO@b?O(%+=xSC%gE#(gkS=z7D~w@ej6VT#^L_`f57y3JvPZC?CkUj zIgGngXlgrC?o2bywkowYZp!pABR#9irFrdnlDn2?Bg(SlJ&?cxvHv>(xPzJ73mq%=qt;I2JFuT(~t`n z^{ke;IWO4{9SmytnRO4&c@7UZQ4>|#BOM9XbLSTb{-5!`L!H2?Ab;aDctS-h${ohj z?uE=jGtf*y?8Ot>(CKAb+WZBvh>Db{2`TA_2-7C*XauLG$b)=#xTv?TE7}~`K}!=+ zm?)E>f@4V#m4|Xrn7@^3Dz8@=$jtXxgL+*E)uhoN6#R>5qkC*Uv`ZpBQu^b4td;WGXZM&L8BW(#PsWMk8>L+@_ggS(f@v z+ZxobSlA+IHHUHNh<|mJpQViHssSg%0up1kvm(3I9L@%RJYdSY&z%BI8KtgALb(rn zeXISu#9k--B8fVS#GF!Nj|(Bu> z4m$R=omGqoOC;AKCbB7FF_F=@Lu8yBWG9pt@ z_kVwkL_dINLBCj=H4D=cr0obWostw4@XA1T9`FI80b|Wr0#{or!sWS8TDFCFKhWdz z0XM|HJ<1R|92uH@23s_nT1Dq%u4vZWhHYyIT*1HFm%>@xB7?}{bej~Debvo}b~)lC zka`eQJXeE|N8Y$1ipuPz=%lXXos+vCQGbbrN`xNeJM%XsfX+`mJhJab_6X;~<$w+F z*kEUdcHf#s-BxE;5$%w1pkZtd8TnD zWIe&s^YKn1YMWj)6)ien9r`e6n~i~C?g123quH|NflDxwg`JZOVT++h;tRBU$^-ypZ93Ugspiy8&TK&3wzh3Hm<1fdxf)rgxE1^Q@hpeO1oyS@{ zO9LL5WiD7+ubKQ@F<*C8zZA~pRVN@{KSXAqz6kM~m;i3vV2Vxo8{kAlz9M{8_OP}& zBQ7r#adR!x<|RhciDK()mVf7%;jHbeXtjn0Kp@i*NV6HgpWEVX5hi~7)j>1s86U}W z58!pJ(fRVJdW$e(ph-TSxAyE+^@aDw4H5ODj7Poq+J#{l83zj~)zh>XDYe^9hXpCO zH!0imTvtZ^(a?y1rjm#;EujdaE=0`qF9U#TThnX2C?sJJN|LG7aeuXfj8?2o=BJ4H zAj)4EaI5t7%J47tt*mi9?#VykZVsp|@XCU!1CW3EV<#?%m`VG-l0evX#5ft^>A@Xf zP_s8DTcv|+{v&twJ2@B}fBf5L#Q7BBwDHz*K z<2Kxtr~rz47rex?|9>40r8-3BG1Rb4+)GDL=K-8cjFIPgMSLA%c%e(Op2vSLX6n3v z8)mP#M&*%`eU|DWbbrtmSvIYC(zR|tcI=X)IHgjBx|qz%w{m?Sk`dbD>MM18TC9#x zdSm1l?TH*+3uESq<>4;83iPTJ6i?U>;$jzcpCtRJx-Ap>i+}jPm>m-$#SaW65D<0~ z(EkUsWBz|&cAj=dwpJ#RPWG;LrXofzE;eQciZ-qmR(Agf+WG3a*oTEm7Syf8~zy>JW)TO(F!AVyG!MU3gMfTqFe`fHRJtm~{9a|i|Zhr&6 z!&b!q+~f@eq<{FXor;a61q`^j{;$+rT~}sj;|2XbCgh)v(|24Qlg$nMItcN9_Yp^C zX33(c%82A3+sZkJoe@ce>i7DIo zYF&??U1U>Wh`&+4cM{;ASbYBbLc$Ow?&R64X)vdeJHm5{5bY)90a%bQodnR#vDulvZ?%K`u=WqnC z@He40Y3Qw0(;|`p<(I!B^Ax!Vd1tt4gJk0M9rLTnq~MuiHd!l${BcDsOD@^0kp_(C z{Hz|%|iR@Z|0#dvne zI)7(jFe9eO$Q}zCeZF%7l@s))n)!3p!GM%~aV187nh+%NUIx<& zLgmFH^T^XDHrbsq;p^23XAWQlp@PW{JlEtIH${5^+-ij(*ZBU-KHp)MaB2m4h7pS> z`TZ#EvMqQW$-usLn7@-3ASx7Lm)UFq8q1o?+Fle5n+`MHu7P%)Mt3rbeM(t1sUr5*%U8sI2l#!(9EuJwFWc zSl}gy^P-T1%rJ9h@6&(O4zTZM4N&fknfz~Y#rt6)c%_FA4LJS|hlGpufeS-DD1T3+ z=P1btOz+zp=9d`ehisH(QbO-_N&TaBI)COfU$`d(Fh@3+kdNwD}r|Zl8)o92>(b9KF8Z*Tn_ta4%=gtN`cDb^9H$$+F&qZxGV8} zQeqj`hSJVo=@}Cl7D&5zeH=}Y-hVFw`x|k?J12Ev! z-4sJngt-AkKNj5-yL+zU_jL0SzCb45AHUso?JA{EQhhpc|JEP>F`SC*?0=_Pqt#{q z1g1E2oO6^vsjs60`9!)06$mv7=nnsNOxB;(cs%y1;H2tdZSj!A)RF51DHxGsnS+Xe z_DraCGo@Wb0wP|hlnVUQ)Q@3h)GAflyght^wWJuSG(v#=h(O2n#}OmeJe7>qxM~NF{@p;$YvU>O>9jX_^mg7F$RY{{hW8Z=1mfBnxum!z!P{Ztt&Y= zENypp@Xb=vU7CXPO{_6>4|m=eA&{e9_p7HGn!ZTIaIxH*>%1=r@qeV2Bj`TvQ<6U# z_fuIglWb}WJYeQEFo^a2&1&nb)!NtF+}GRAcdMz_*Y@0e1Eo!`iq~t@cVSHL`#$sM zP1k>WiI9Ge?j%F?bAd=7XAw1xD`Brukn0A4qUe@!>~v=>cq)0}?jT1K&i^WIHjMN# z-QAIc(oyD;PM;AbT7PIcRU)jnHE0tb2#fUdPtkt1f6y@~4kU+4pWu!WNI7KJO|Zoq z5p^j(yn(-$qt`+eXAh%c8`H_!SEseVuerako&Qc#pSl7|FSUi1?=HK5Agh2Nr@*Z( zbB|Q;!+VLrrCdEX1M?6}A${3fXb0yKo{oZB59KJ`rMyt^Er0f?UNfNZkP<0~F0EAQ z5G0nbSY~KVb(82Hj91ryz3xo%$Q5fFY-#;Eis70rqj`DUv2(_R7(ZkMq|p!As5&7k?z&J(H6h8Ttj2t{hHOJgDpC#S~NtXat7d9`HnjE7byR8bj@=pqd3; z8>CGVvk0Av8eU$(?-2jnud)rkUj4vi5KW*j{PC&J`9Muf-nHl_xo*qg*++qi(t6}* z%JtQyy?4sp&Z9w)SQ4GO`RBkxJ{~;Dx+NRtq4Ujm{D1Gldx&-WZQfyjfBWFV{RCha z0Ge=xWJ`adT7f%kGo7j{=7Q2~J15sg>}dLF&jR@a^4Vfne^Nh)NWN~(L>*WhL&M|- zFB@d4NJSR(-{Q1E9ClX4!Zg_{_g2E|R@3;MrKSB#*^S#{OD-cPLNSegLul8XK9C)Y z+~x)Caew<^fDm#LdAhRlwl9==<7i6NDB6pEgO zsvByTpQ}qsh4S0mej=&5dF(PHM&U8BSO)b;ri**ILb4#$8(nuSkPLogsIh8t3X$uk z)9v|^-;Fype+R%Tg@lcblF77kDq%llLs|>0Rexl!;PT&WBAc5K@IaDl3UF%Q?2|<( zl9VTNM+u39a25M`U&qZZpB??)O*>HYoQYfv=Y?pRfdfYwNQwy!__|>_N!O-;uVveuk&Ksn2|RJ z)qkJ)u}1oEAIVcoKORn=VE(R<;ruM(;08G(gb5Gg-C2utM}|~zOW0ChueGmC`ZfKo!+B~eDq5K7 zV@13F44xpu|B=f6*0ga10HNglOV-DdaepL1;&L3tLz2@)glfD#_mReUMZmG$^O2kj zmjwvOr&Y9)=6NTc6ZEe@<{&a!BZu8BXPJ7MvjoE?y#E0Oqi`@a1{YGNh_vAE?+OAi z&Ql)nG$lIIwI>ybu~~c-x3gFkX%AVT^YOVs+uTMX((}C_vAOS|T-1hiTJ6Ct65Ljmuq3UG3mR}0lTYn}LM2d%? zJ4LhMPk!u@8WrzI=FFW9K!{>ka!Cr$~hLjCh9dM)K1ad<+H+&FZK+UnB z=;aa3KMF^c4OwQA({fSCti#P2&sR(Y*x|)_75E~`lg#t>1&jZpxI|AlVC5n}Qo^gQ zgz&?#&TyQ=e??bP4f$u1wSOVcf#NmSZoJIwSL4MzxkEFyZg^!W$}-_tL=flgA=wY# zE^>1@yj$kh%Xlmi<|%wwd=ri{5E)t) zR5E19(`tj^b1e(G{675qp|zpS?bD-g2^`jp^=ftsA6hEfzYJU)TqiP&j~z41^AKM#-Ql=#s$8Iw)ttDLALKlr+8Win1k%FD6@Ey+<|t zq(p`ZT;19KVV)j}=6}^~p9wqf*ajZcC|ap~y}7}-71%o1Io0XzY8&Y?h<5j1$WHYo z(vYT@dToo8f0^pq>i)9HPS3Z0eAwk+)EQp1k=&;ab-|P^WIXaY2By1f_B}9is7&dc zM69tGMEh32wf)^^5NM`gM+NkO;dr;nDPA4E>~%B01S8Q+34hk@Y1w@cO)DQY-|hsR z6ux#noe5)shP6G#eV|5Q0OhN&z1IrH$$tj#-p-YzSMRzqF;#B7-JczayZCuIE)sqf z0}8pQ$PUUAB8o%|r4w2Of3aTz&pEQ;`u>zlj@}-;gY;10 zLvzU%jKG`=I#*cOM34m?MRkGXL*XlpbGCHbUvTWX#S`<0xsYlfkP!?TfLAY2o-mSa zs;|x3e{tT7K611RDnZQJn?%$we^?3oqzhOEM25UR;eSmCs?Uw4*8$32qW_Bv$YDLt zJa^6?UR8h7;c~I~{&!f!tfBOpFf5ns`yD}Pm`!MH`om>9V9K(cGFFdEYb4<_JoN7m zuF-b?=_JGex`~*>{gJ)#f64-^5Qc>@(?-7Yx*g~ZduJ$2L?3PU$yk*)>I!mO0MRL9 z4QGfxaes4Yhq|UZb?5p`-mJ}l&hkkg$-pk07USX`Jd4=-A3Wh z@ZHb~7#rYKZ(C(Z+?sk%Mc@&?h8Zv1A{vfMAb)|EUAoNSQm{8;h&{vrEEp?FfZ!_2 zPe6VCg39q3@h2+BU(an(F;q0nvk(b4L7#ElGg7g5Yonvt662nLz&-iEv=Cz2pfZ&X zD_r_Dk#aDLs&fzw{$^}bRy$!)5hiIMUNcfv(Wkp5Kdtmf8?@Uw_sRVlcbeee<+_(< zgMUC2%snA*gqwI&UO+I^y+TX>&%RbkGbm$?>ZZ>B=HbYHA8o?;s0)iKjcHh?_k z2VcSJ(4ja z94w{p$qet`Ao1n(;7}Duf#3dnh09zSS~pSg?}Z&s9hntbY@Z zgjt5ES=5niF?!m7-_Q7-6G^f#ll4`Yxz4Z~zdk}j4%^TVmYE%OxUby-gYEMQzj1MQWhF85vsZ$SI2$g>qNC~}{qqboDOzqg#*%95|alR#%2!c`? zu6pgu&YoE@{)}|Cyp$TOrUXkpnpwg{%mY;v&qzXp-TtW~Pg5RA3pN{JCq4p5J~1S6 zll&|kq&@bA=3UVR)5BOW+kcSF8dc$sV^9-<*!O;s`BZ5+{0!a-m6kKnYC9+LSgVIq zRs#*teKhpWe=V*Ck3G(JTJ*fa&Za^GwEJ@R1R?~9WTq_>*h+d+05!D+vp9S?Y1VZ9 zro=RPCuA}+cIuU{4rVQx-j02zZzy-8&VU2Xc$6<}7Ajnu9 z4(|JNAa8Xy1CrV(;(y!LY;+@KJrEY|_)=&~0D|=qV=wCQQM#c>fIHp=K?%Xaw9pTM z5Ej_6whm)u2Q&oS)fpvJ7!plalP%RRYHQ1$uk&`f4&u$0Y>qL%rmAmv`m0;8FQ0Z@ zjEafNe&~}kMzRU4A1wSQ$eU7Y^ZB@yF}lYiSX zt-CK@j-+ePpFf}eupz_1^WvSF50(kECn`pYuzx^n5ZkHy%f4SjcM^G(PwA1v#GrN7 z2yBVnGr3J>W^ekaFht~DpN3|ghfCDsBE2S*SsxK{cYhlyOS>qdw|T$|6}TXGK{a617K#+}+LEukqNyMT!GoAeLo!=l!B_;% z9C9UN@U@ipY>c5c&RTzPGcT138+uzkNDlGfo|HfcG=kf&&T2i83$`0$$|T zP$lvm6n~w_Zgn^@OPN~sOu7eu9y^Hcgac6QK!1XeY1He>BRdz$jf)hycwQROxfdsr zwYyW^#f0#`FW=LX^WXez$k|v7`G#lh*35|N<2@^4Yvrx7+YU%{TrPN9TyoyFDC~%>9?&U z^!CqQ;ikOh3)9uXo`f0RHgWSZ0X+@znbrj_&FIutkA~BEt&@h}$W1}E5!3S3@Yh2t zDu3r}Y<+>phK&~Rs7mJJ_bX8p>#@ZH1@T*F#cGv#ci+5<3Ct)LuE_ z^K&(q=xN?kR1|2CC9WuLTm39$Qhs+I;JVuDrcUlt1nZz5QS?VerPuQ;|8^zY%$f=n z_DCH)mpzT(Xr1#+OZxK1wElD$o#FfYqkqT{c^h$hIh^S`+HM|(6+YbVoe0N4pSvUc z3GDW^Q!?PHc4bQojgk1zH5jKVY!)lq4**B|*bg0;LPwj-`+4HTdu#YOIogZ-1VZ*A zy?uPc)!jf|YZNJrw_VL+l)>g~?QxzW7J|+938Rq!m2hDSs}xJUg)pgj?G;grWq)Ea zud11=6E%go&f>2jYAE~`J(gPp!Y*mFe&CYDjBXef624muoOWN0{T5Ej{m8>U*v=N! z!UlQx=hw&Ty;x?iNVEV1`QPDZPd^uN>ge{jCFy{E^*Ih(alSL((vf1;=x9*LU>Zo8 zd>sg$0f&F|KKJVJB|mR9^6}3VRev(GFH$*L32(kBoOs%8E5t@;+i&nW0zEz9?(0vG zD1vFw;b4#b75qh`0>Y7pS2aQ5^QE7illg|Wc%#?Bm2#$4HDX;SBRX#jzS4ETE&L2j zZS%Q~U{!a|t^M_!QZ_@tmG-n4=x$g;LD^Xz@%cI^M8j9LSnD@`w3`zhs(;+cLeHrR z*{0rFWg3Dg8)y#1?|t(QYPoep4jO zm)l6;rIkrT&SDBA*-z4mS`t;|pARIkPD7>a& zRhwqKBZ;ZAPABl`Rll=5^Gw|-ZmXVkNZMF}duawnU8F0b1v5n*AAf!yvJJ77*|b*# z^jJ$48QV_I7r%Agj;b{7`rKH9LZKGmFSPEmxk;LsP)h^MARRz%@ig;#NZ*1roOly6ytMOon|WX7wyzI|elWg>9~bj)Wor z@YWbhE7fE(oIvLn-PAn&R2U32EMR+_NmBeT#dV^|ztjKqhLh0BVRiA&tulGvAx2%F zv~yKc;)1G%G&_x}%&HUM%RODNB_1}yxDWufp1holAxl#QF{Z68}*0(qA?M7?NN$$$LHl1K9_ z({(w?we6*jHbIz?#QxUr*-t4J=fY;JT;NOKcWy^+Ge!#9CGswDd0T+~vSTv##P zEzL#v!xEZ+qkoOHbfhmZ45I)jBDjY$$;#425T-&IErIiu87P4>HF<-JlqJ&PP&Fmm zN$!cyuno0VH8lR>lx|!+Z(ybsfbuEYlJ+7=QclGS=Cvwx5wlq_BwIG0TG+Lv;9EaX zD8fM#BQymMrxwAGA+30SLhundm^JpDkrfl(*X&$ux_{(e9R7PFA1wri?yRI`Lb30e zCQrO&v@v(s<}BlB7h+V%GYLI&2zBu%;2roL&VIq*&q5~EyXAf9!2u!|dhIep(aMpE z-H~4GyJx33TmgPPC;Z5H>e!hTonLdRYn%}0AkbFj1I!Bvev8?H7H+B;B@V|CFSIAg zv6Gv;-G8^IOTOmpMAi?+sTw{z_UeXQ)H2dH2&XO`-_^W0?2t&Sqh-tVJ*c1vecWwl zFll)dz(p~-J6o4O4b-59{B=Tur+E786TMVtsM)E$sMamQDugwdF}3^~L1--Op z&|$K%x(&Y$5v9|fxB`>>K@$Z}YX^uWYIjc`_>4c_d39 zdUAK>u?#8f_Q8*y)F6k0sxuk5Z-U{c>jtHAtDjSk09S9e0mDan;o*kqubrm0(LD`QjxxbNbg5^<1ZN9D(#PWp?|+{Fai zS-t%)j=1n8`B%7?=YOCsekk$Ai>rc^v^w{so5pk@&n|)@Xe$8D_Ov>7E(Ku zRdDHb;uG`kncw23=|x5sXMsbs*FS_)orEZ^5D#>$e8dC7_$q0=oZ>$TF!;Giwc&H& zV)8jT)}!hg34e*6&a00j)3JxlU&F1i-}dXFy{BFCTb6}p;_K-IOe7#^jBR9pHIYfO zX)~d9w2^>S=~#^!&$xfHI+z>VPSlI?whCE80)T3X->pKBuH zf`wcxRF@!zT&Z2YHW7$vBX2;MymQa64x9`EsMwSmpp;p!6kALTIF+e; znR2PsCQ3y3I-C>qGozr{(&`3X14KyVrDN@b2Xk@|XS4sE<^KE+05(9$zaerFh-B11 zvgspP9@Sk#OyZr-5BgaP6x(&dWr~O*xu;t_n&mY`t0O+!L2}67g5<4E#J&w(IEqMB zl!%%un}1e(&{B8w##lGwZO7woai?J7#uEv*W+zfH9+;lJEj`Qp1zYiFy4!0+B4GY@ zTEzC==!A{5ZH>2W3yQXDe6=0H(E7M>SK-jGWxC>`LRhw}tnR57C3eQGjJ)ku$d!HP zyUR(ItcMekH_FdF<0RiT!CKeS1yu7{IZ!)6uz#JD27W6`s)H9cHYVP2VcTSQ5NMAU zDsFsZ9bH@YiD0amNPqH;!jGz2v%_XZ%-29GA@+W@0i$3$+QWbUR|Plm<~8T&lTp-$wV zdwpMj_A~PZ<0%w{#fR#IekFJY?S&FAw|{09^|2}N|hVi>YZ~ozzTDc=+&Gl)P<~ez0MY2mjhlGq(ZK+^!il%#0cMp?3daP=e;qU6SF~8H z!B8$HQiI%qa9!mCU)6Ek_fVbN!+*DKTdcVq!pceq>l;NO9U@=PrD=6uBNI*5AT~QySI&6@)fKSlipdxo`{mRf2DCKY>a#mMm0pNJFl-!+Zg}bzx?araB$o|xfoF* zi+}r<|4}lw$cV|t+evg9!he2;fKtP$N;d$CWL$`V(=5xbfi_`-okB+qJRNC(TbRGK zs=HD()XqeZwCt)ZGW-5rkr#H9Xg@3jI=#coU({iDJno+iE+^gb%Q3GjYL=IR(|#0@ z>rrCvImbAKYAw`#P9ZrEoz9oI+g39Q$pk3Geb%3htN6sM@h6b(4}ba-OMKI-kLfpb z_Ip270w%jJZtA_6(twm`FvWd1oYe)rciB(S<5CPKk zc2E18*7s|po^h26^s)CNYmWq_>G?xZ;UMQ@tF&hko<;hd?wh`LiU4f>ML7@XNBGuu znzH|Zex;AC&7#fiU4Oe8=*9m6as*up?rXy1P{{>{x{eANBN~QOAUlRxR0#@rAkwBy z0FYrdZ3J{dfsU2nTS->>~8AdybA*Jhz|9P zH1-;pZMX86Y!#|{KwKWPd^8p;HI$lzv4EG2q--oQU21OZ~ft0zH%M$^MYNC@O_ zEJJ)d>;Xc=1NK`>5q5MTRnjs&ku4?AjfPcngV(;v%VlMOH?4k^{aC8VC0pTFWjww~ zvnNagqNeF+DSuzN!lxBtbWHZk@pY)NgUf}^Q86+>*2DB1|6`{ZV>ml}MOD8bl)yvf z^$n&kT&!cp{N)P_(?e-AEr5(~&|%ad7of~x3+6RsB2lC4N-Uh%WeG@Dj0TUt58y7HxTnaIPzy-giWu}kGLRBq; zhXvaGx)%dW%`tmqG3pd~>lh5{f)Vre+lJZdkKaK1rk{z9&t?IDX*q|bL>VKBI^Nhq=- zCx0Jc*+=4vDc5wClVK#prtdm0GUM{66$ceq$4`7*LKpL~-uRmY&srL$BUDT!L2JnR zA0{k5R4E5!=={?x;C@iQ&#hH-9uz>&eQvOmACR*kO`oV4zhde;9Zf_*ggJShHA0A2|dNYr|w*PTY;-q6eWHv8b`>lVI8{HHO6KAtr z9za&Uhs%q%4fPk88nm_pwIw0D1TQ!(q67OoDt||jbTghA`VnPY_N?(Gb#Kq+w+2W4 zB!do$GR$TzF8scQO>I5M69Orsu?6^VSI?Db)v{EJ2IelLy1dNtSn51+W&Zl&*Nnit z7~(B512~~tIzwbpe4xTga*VoIyGrNAAAm;AzDcaA9YlL;Ml`vj+Ehjn(T*yATj^Pl zewqpBc&pi!T(pKCeFTS>q|`ZoK+7NK;+nGE6rN&jd6fpzj+krG57lmq%5N!1Nm~=` zwhu5jYliBqi>ve9G?YtZ`mKGLJk*-~-iRRslBcE6&_MU^Wo|3)8}0j&p?|SUego1d zbXIMlP3xljJInoSGfQ9*@w6SBO5R6chvwc+3cKIeeCx}*jDug8&oXE?p5rq zhRNa^(x#!#IctG38Cjgirl(VbsXQ(f?=4gzg3e+sm2)Yw&Q>j#(iqG+HgGros_a|U zzAm%hAn80QOeef_#a;$gU^L6lj{wM3*#jlyJ3HV|`SgT!Tt%=mq{?Ln=q<_P}^L7*(pa?Ea3lud)o;6Sm4 z`0ro`4IjW>qa%>;K!|fT#1c@zBBMlVeNu&Iu`1mFYbBp=tIYsGHPP~;VTL0XAK!?6 z+<_};(-#Hl9Ej^r-np=hKcAoBKfkN?hS^b+1*L)KWQs7HN^Hw)l|m%HjrQ38jEYkW zv47(YlU^+D;{(k6xg8LEoR4`x1Lv;g z%Mt(8qv5Hq)`wB?k%M>q#gGITYJVf@h=Kjb=QS2MUBxVjVx@o+c|X>6@%tM5l`isZ9MmNJS?b-tr^9eR zbRnH*r5g5R#5kXpoV7mF7A`klu5S|xxqN3F)8g;%IZ%Ne=GX(^t(FH=s|(AhRkB~h zziOpLV?;j4Qe{7b3G?pLh0Qd^!Z{DX$w)nVv zIb~v^y1Zt1%#SF5QgO|gB6rd5K?<%lEM6<2FZbVsRH`*h;YInO+eDD4VL-c{3e68Q=mP|SnH(A%@#=caNTae5AKiG%Li z9}ZF5pj&{BiCQSkE82nVa3)UNd&;{Px^#w}=b4eX=wfL={8~hi@4#zXF2O{O`g4Zi zfKnbRgf^^`|LO~~%Uyf7=0VJ2t&O>#OGeaiBG_2GvJEd6Ea)N39)j^^Bwf#eNaad7 z{f~fOT6`|!zSY64mt58RglMLd9Vlq5ci_74ySvjeCW||E2}W-iMpzd%$fr%AcEhm8 zS4~@?J*;BXmthLd@v`vf^1}d0~zmfkW%6a%3 z80mz*!3w>h$IUg5K8#=fW>pE(-;i_fnW5*@um?Ek+!Y;s@eHtv|7d<>A81BSwZaBA9Dupm>)%yn#`V1JPU;>6R{& zFW=2A3apJAE&Ax`u!n&~n%>|&t?uXYDr-_owks99<1?aPSZUk{|VrbD3oVCtBb4Be*j!Uw?h@A?~M z%+851l4u{0#*;o)ayB=ssE=*UF5_Y}e^Uy{uifn(zg#q@eFNiPe|-q%)-}!pPMjFt z1Bz}kaXlTFFl9W%P&l1ZA~xEI8@Gq{xBE;n`|r3+vd=ux?b2AsmB#n9OHuKC>vK`d`1cuxPpP+*sD1IrW#k8jqK*nr+gvP`|Xv zzeN4@>2Q@Jb(%hGN7HZMf8YBARgi{;@p%*<5oG}Zaohs|QIH0QzyN`RfdK&l0apJ- z_D2S?jUcBILxMmHK6L^|kC7cofI@I6$zKFk@Szj9_#Neo$Vs96)BH#FEl})9fLakK z>HiybTlP<5Ir3lBf2FQJkN*)@IMmrM4U^zxCs2|GHIoE*EQR{d`M*-`zLuzNB*2#l z)XXpPUup8>a#U9mAj&9e-52?Akjs7nRPjJ5z zsAu($%txZnApvn%i04rLXT4`a#1*K(EEQrshX09u2_UXQ1y&~gN00=sJArV$#FePP z);VIsFAbvLO(&2Loa9S0i9urUML-2VI)RMBBxR_;brlkgF9I(3)(K<}{6}_^NVLAl zf2-r`CHWfbe2zr-i~P6SQsCddoL@1%{UeZqFP%UQ;cs6W7}an8qW&X>f#1G-P?Ept z{4cTY{ih+A|4;MZH|q*c`lTVqB>lIF|3(iG{zsTpN&or$S1>&ykhBdID4k4d^hN&L zrRrYNFCV>m(toS?&!+>N>?_I|lkA_*f1{5G|0C|IWdBD0&v`EJ9|=e%`{#@xc-skF z>m~d0iJB+-^+o<$*Eu-(7s|BK=b`lmTeructz7VY~Y0E#;zC8{gk zVb0831!L|rf#RWaG)TCClP+_~CPQ4eWj_6uxIkwy6ps;g$=o^l!5(jB+yh4_kxaqL z3t#&^No~PPl+(MmTBoS@3IkB%JHRz&f*v|?ko(IC?4oN<)^k_q$KH$M=SM^Cv}FsV z;Ls@f8>j5$veM3{f+TGs0R5<>tR4vonK-`Z;xBX}w-o#7;99nX3zOT7q&_EW5YJ^; z650k#?n`Cm4J<3-G1uFh|4%<|;#B}aDA53D49%aYoFM%@_&k#-Yj%Gsvk$o{tGY)E zO=PHGsI~0rV&g{!Ug{1E)KO2RVF;{Q_xDIOYQ57l*69c-*Q$j~K$w8-F>$nLJm}Ic zj>BLs?fckunSl<|bYms@uKt#YaiSoYr2!bvS6_#M0WeWNyLJgEJvX=mmWlCgbsnv{9aEK>hV2C-lKn@i;xILo6!K%autr z#%1>RPR{R8xUJjMNh%vZIGd3%sJo|6u(TWq8^Yqd6CF&UMp#Z)Pk#Itoz)ItmKvmi z7uQW=tD-({A}X4^I132MV#Zu*7;!M^pLoq(WQNqyfZ?qjz;?Ib+RLJLM4xva%TWyu zc~s_@sH&}Bgv@31z-+RCJT0NGCpB0#nEB06MkYDJ7;2T(AICtUAKA(+T{AmMXLH~F z{z91M)oLLs#fHT3dRlqucXRVEm3w%i$o|{h3X$9rOiDW;U`z=2!M%W)Rt;4VhPK0Q z+vUMf<(DfYHk(Dgu_FC266Q#GdqR$-kpiGr zeRkMpUZhF?^(8mPc@s`f3F z_SurB0DHOyO(9S}^7b#G;?S51OD#%ZC+0&=J5Pp3PRfeIiJ4SBo1B1ZR0OYJD8-46 zkqt?L=;#V&aDw7*o!9WC{ji_C^m$&yt>Pz;1bZsD6R+Rg6ep-CnF^2(yq1*PAQQpb z-W1944NVYdhjfP~hcCSH%vfdDE5d!rE?0P_0W5u>nW@Tv=L8fN39#(?kL5Az1#y4k znIGDGQJuEH66_Qa!;`$r^_1P!Udmh$e3MO6%jFJviGH7 z02$ca7x?(3!fwaTsK_Zm@)m+d&(`Wi6Y*GJw!TkBqN&Q2XR8>i?kKg$jjFsJ%~^-a z3NF&j)BKo_VXfQxl{#y5Hx*;q_Tly)OF>jaT}GECSN44BAu|1q&$!CZJ1E^N6Tj}f z0Vn75Ge1fGeKyMth`*d2hn)tjHm*a)fUXu8d)Jz~RJ(^9g+FLTAz$N*Gu>oO_XEjWL?j&@kWse!l7@(0GO*> zY~No7Wvj8JWSb5M6_zb6^z!P z3Iecu3q%6-K@o4Wl#72@&_TpgkjrlE)*vtkY)wWKqis!m%CLK*0&( zJh&=3flYYh%zMYYYg^7x)2brTR+Gc1uzAyC0!c#oor(5$WQ#A3Jd}W(6=3%(GTj*p zJUVz9742ArCN)Rw#0;#Y1r0VmxJ(fU4V0A>;}=>(=2c-}*x>Q&fxzpi&eMSiD)9ls zvJ2?R>7adRHk{2b)G$0_l%iE8)?1^~uyeyCQ5!~|Z;dNAjv3a|)(0H;V z=LTP6C;pL%F=y6kNOI7$S=s8o=>E|6<5CqZdR1gFPK{} z^5?h^-ag;Ng@isY8IU@xc#j8y#j{&S5O+%7<^1)d!qX%x?1Bs_@S11$UM*?A=CBIJ zv@s)wk=_W!GNVI_yy$D6X(4OVsx^}R1B2m;By$f|JY3*!0rn@vhgUR$R(g913sGl6W~D>@%2Q=_8L-Zio;LJ z82OB#BPWuqM&PzT&UT6)wDgpj#=Pjyz{xre{v<+YM7Z6XGlQJa zXbulL934U&I(K25WZODBQsz&*G$kD-ayC?>6lJ9o>CluizypakvrkT#d8UPO=aw1N z;dXP29O?H5SO82Ulr$~&&GKJqjZarOtN;w8wp{RVhc5f&W!%at9VRp_FlUl&4bhm& zhUeUd5z4+eXu}ky@D@rlXk0b3HDhqe(9F=e-+#A?y9^DaklS}NHrWfenHk+@;{goW zlRF*IFN0OR=_qn0wA}%5t&vyy&wB-dw_ZI~Y$G(Xul@YwPr`82X34figKn6b7y6*#{( z2E4=pFFv;RKqxQdeJ9iLE=2Hz!I>o1vvBcJpZ`TNL9*@t{7nk`|(5xXCV{!h_K1i;p!z#j~%uD+d9&Qq1eCa z1cpA#C*F8e0rDd?&bDx zzpm(T_|c`t5x|=WN{6kQQ32cTT}&XqW?kSr^DQ55oxlf`=2t7TIQ4;V^l_o4BaS^4 zrg9%aw^dPftHsyVn`t1=a_F&gdbcX)6{E%-H=&OH`H02a z5$+2(-BS)@!FiNMxTJ>dex1v;MdUru+2ej*;KTShQCJihbB!dMbhZl{NP72k)6YlK ziU5K4DI$<6ueu$W<>OsJN;_vR^>!Cdo>5Fb2LZm97P-hsns@ULl`~Z`UTjEDq`!n&4@Bjv)5afdeJ|p)axooUq6Q-+Vsd zPk()vz4?LCIB z%a)*1X)qfxNC?o|OR&|G0zg@NqQ)%pnQ0u&J5P!{ZU+x+KCAyLFT|fbR2Tn>6g3qTD6La+>jONg(B-E7i9bHFWdj2k7^XT%tb%55_ zG|1GTzxjKiC={_;Uk3o2ty_%betJ>#tbyy5?518n31AiL8hw|9fHXL8Z(ldMY$@id zEGz>w{lQ`z_l!NeHRf0U6Tm*8rgEw}49Lt%LOF%;MW~hiE-pzokx=zy!Lt355;}X| zaHOL>u9ww)SLfu!=cjt{VE;F{<$2@dgCAo>dN$E{t}wG^v>$+DsA~0UR)aCK1M7A5 z2r$i|tfI-L*ZStQY&yIKFP>cK`inEE#{^nt;{E*{6bul(g!Mtw(cQWI@o;0_ROe-$ zb_P_IW59Dc1=Np_kI{Gx@cGm;@~0K>cc;} zP^T}=`lm9cr7DM?NMl-|+$Uc$rnmH2T41QYE}5*U5pqow_lDvqtKg#%1jF{#oGfS4 z=CRW&$vax_7q%eSwwsCarW9py;?>oZud1D);~g6)TgNohyj0HUr7YEC^?Gy=6wj8k z6eSrl1uvjRTN>0#0Lg>co;%*c&dxRpHvu_JO%Q?_^1#QUV?;+shqBjVyeZSCE1e-F z+OTcO7*OoJj_%ru;5nIEC@tQ%?z;U@opS4nnB-{fQ1_!mN$a979G}b#G$T9ZoQ>Fa zv6vK18>*3??iRS(R>b#$^vLLG_?N7KwHp*L`~sK;*MS+U*_)OD+oc!0)jw1IMkhvM zm;ZEI3)k4mET-nVlGm$4vUBKtX?G7id8Px#i*S6eDwdi(HIUrB>ZhJb z*9Al_ijcV&X;qz)^*Bk51q%C>1#j5g0 zNYemWFsQhooVLN%Bhh3~7}ZO`ciD6y2jg%!FvOi}euJ)8N~RVn>GRC4O(4=ACJw;V z+@-ZBky+z5pZL_r2ZUr2Ip&gncIpdt%C>TSI0BRsX%oEr8H9wz$w!)vX)1(!&&qd%7RAnPS3upP}OpS=B)-9A2( zVX7_ZVU>ilqpWP#npK`(Hmml)6$mIGRssJ_PZ*45DR2vR+AlH0`C4PNeb@afND#{T z$8Ye{*2GSoTKtsBsfeV`6D&Vb8*fksE5Au{igd$NM=L!z<8KV46QCmoUC-JE&SMS@ zBu{kFt2rV5{{Ep<&vN-19-fv`A{uFFuU=d0%|3FEDZyf3X_@yi0X>ZLuaAIBK?aAf z%pqn(<18pVpMs;IhOJP~Oqb6Yg_*NO^=!^*CQ^MkXWSpgGQLl1Q#Sxgk{>CGistHdcKsFSaoU1Rs1tUzf9}ftLbd*GkqxcV zgAi|jcfy9xBg`iM5dM?4!joicnq?Idmh-9#w02m>nxQrd7gv^Ft1kM}i?K?~ zD^bUxl%Vl18{;z~F8-rA=v1j-u;R}u`+KE`=j>K6inP|l3Asx|C>zeNo=LX&kb3El z`-qfvI9hY`wc%oZJq~{>MsrUs4N~^6`q4DIhY(PG?Ls=Te`(8!iEXd)yj%6=ls<+1 zpee~~r_0T?2Q^eN;AXVWhlcJC4&JM6ZA2O9`0!m;v85m+)C52P3RP@hxB9TGb=F2B zBhl_pwi?dPto0eLFC97n5z_nqG{3)6)w%E3#EYey^u~ouPLcV6?U!Jr5(Hh|k=I%n zIs@_ZEo*_~ru@5^I$jVrgC6(;HJF6zw8RT3;iwDxAjl$aWB_yslp9pR@mou%cS!Cm zVSilz1=(srY*w7+BJM8Q-IiX4%bqoEJTI+{3_KhUzJb??kP0P$mDiC{^lX;TOvu5Q zNV-ci_bHd~l3Z2boyfga3hyN+=#;r@-P~)3o*L1hK^1dGfUZ?HHXC@V4op}tNH&2) zL$$u(Xrf6{L7P+awB!+pxzj=7Gw$!cI24Rl&g*yYO*gUf@e=k+?CdLI2DRSJWv5ns zl@?DPEn)x6=~h_4isaxkMPwl%-Z`geO}ySKtyZZKI(zN{GNp@@L5kjbHllp$$q>Iz zpaaoRy6@JTy#Lfx;P#nMDxBvxA~*HW@oK(!`MZrY@jzPi8#k$fkG~sN9=?gl7Z0Dv z;sXp!jX_CQ*M`xqrJoy>HQ6&g%yPC*ze;kWv9ZY|jQdFddWq+eq^|Dk0NEAAbK7~$ zTV8BQ6yF}y;J*s9KS|WfY6bif!nn}CIt6fOXI8uNIGIFAsOQgrpFXf}-tzV+E!r+; zc9B7a1oAb4Y#UFB-WI0AlvS-k3-gY?5fT#M1?hS$6OK~f%ttnsF=so*_WSZG!^cV=b#Y7= zZA29IjkV-h{H;@Y_H6G5Urg>-+$JQE;kfp?VF%!^1Wh#N|8?&EQG6@BSYVcm+K{Q6 z)D`=Ytpb{VAN&N*Gftl~xpv1m$50$sx%Sfz&}ncn=l%EYa;JLFuVJ*QYr3FQe|yrC zCiN+N$^4C9+xp72ykQ7VNRC1+LYSG5U|iRHgO!Cv>s^k^Afl589DLH8ReAT_%n`w< zV0db33WXC@F~godWdvPup2;n9BgUaUAHI#p>QVU5apUnL|BzB169OGKbg+?JrDAp| z03DoxvxLzS@v@uW`FxuB+2IAIb?d+u)DZ6#zA+Ebzk%&&PBJtzHaK~Qleh7O4YYQ~53<;3lI0Q+X$4c&!Q zl72s*qe`uvVlo zCz_ur{jwPIe8=D{X*?MgEhpz2{S#1yDYbrckUFJw)ekrCo*d{zyfQiL&DN za1s!E6H~OL2;;YVDE#3p?bJS3O{N36a)+vr>xUucD%`yngO=e3jwbjP{1VHE06Nst z1i_A~=$4GCgMNlLP3pOIH$EVjWL!4W&SXNmc;{umm?wv6e#ry2@blu6T|r>i8HDT^ z8zM9<+_!N$y&w%Ap`qMpXPRYam*2&(Vlu~*Gd=K05XDy(PfY1ezpUHNFkhZyXakyVG`5+HqlSHNbA01=ukcetd)`s^opslN?|9GA`J;j?A;S!oy#(ruw}%Mb!AFzbbkCY087U2{Q4z3(yE#f)jE> zVt$)rxxnyub?EMinRk!S80;I@WD-Ay($V1Li0L~jOBIBRTb&3Livp=9}6#20_td= z#IrI9T|X)*sSwXlUb-om2$;}iqXnhR58ltepp@OupL2h4Y^3!|<|`Xr}x_6%tQ zCT+-Tx{xfEB<}q*CS)gB#DFVhdvE@zn{u`+$D}yg|ly~DPNJZk_V)zaQj?`r%C=CRb~J| z`wM=E*g=06$dMH1XW97*`3A_DWthf-<5vMEFxzLOIf)~i)hE``r6d!Y20FzH3RPat z$EJzY&pf~%W%Ni`=q%cV!zsByw~^k8*MFLGfG(gxvHH*5bXBY(_^7ViE+-+}su#Em z{Z2To$z+ZW*9P=9%W8^^WQBk5jSw&&&r8iQ3SE^t|Ej_BQ`l=M-QsRz_Rfq;bdI6| zQ<6k&a6oDmAX0VbVolWu;n63fH)-|I8FCv5INDR;r%>8WmvuoshOx(zFH4q(WHb7u zwp9h=xlhW~z6vS^b{ecjMYemyTzoYtkt>~=#y5mVzz?XFgtO1m$oM(v^t}D?l$|aR zh33l=kH;nMWe|hrLHGcg!~KoM`gf%ORmZ!4G~w$ddk!#gk(woX))g}M8^4^4S$>a~ z_r4PWH3Gl+qO_m0tCw>$$;Dr$RCJvtzvlqZh(i)2=z z-x{F5r=>?@IDed@wcTfukNZqtIr7IUB>nKA`O4tA?4IDuh$H3JoG7c?3*V@T&rh#Sp)Ut8hNFb7^^%s{`M43gVxK3*%nDj(3N zHc5981j-S75rZV~AlO)P5W2Lvr&jm(h35|dwNNlV;Cp58&s`prC#-vo{C= z3~K%2uD?0Ox~ejOR6fj4*gQv4iC@he8JKR~_R`lSQ(p`sn|4DC3W?xL4T0x`faMHq zoDc|xPQHpj6amte8WaT{qmJe$)l~YTsIk|-5x1Gz*Sqa}A}Y7OhyC8#GdC<7y#$x# zxaqj>+Bz>3nxmT(ADvenJY*t7ww(|Lyn_k_zDt#&AdPJMa6c9A+pMkZ_$};-=Gyo6f>vTCfYUc}hB}&gVVDx8y z)1sIx39h8hcQfHF%o6hH!fe6Inbz(a-CP*s*V@TJu>#w!VM!7k@Z22WS3NBfv!LEpxyDo_Q!|p)}<3(kZF< zsSuJ9>j0A>06+BSLh&u1$y%aw0PtuuYgug*pZR(1&~vtf0sYlt3as1QvA`q?-X?uV z&N;7%qKoeU_*A@F;s%4IbK*WQG+5XDI3BHdahq z&wdsH^sjd@n5)oxX0*v!^uaLMwDgjbrmB7v`Gk?LMGu6_cY~i*VuvcB9{^`A)H5Pu zwr%x&M%S^nC6g`@EF&vA_B}tcA#vLpsXLL7zn{vpjf1T1oet6IEtOMyby|+_y-SAT zLPL^t(EBNlk_;|L!i35R9I3(*Y8hOG8sEPUOBPuRWm++aI@Y=9D9HsGGu(R}wE2Eq z-P{Zw-g@&--nMm4-g@VZCIC8Qe1$;=emoD)MccKRkh>hh=pGT*lU+7^U>DS%60|Yh zU$oa*XfURYl@!-nOvFpWJ?b?z3{?_y`K3n74pxb0em(YJ>^ak5M~ zcb{?#is>%8^Nx(|bqjnjcWb8+1i2LFth1RMp4jAc7)tKdYH#m#%mNs%!wh+_eoM7e zS#RAk5)PEq++q|ob;b1(Iis=)1-F9DN~iD`>p+Q5xMk7wKtO4-!h$Eii8~Ek2F(ka zihw*O?GKQc-I{K>H`cDo4IE_gL->q(=SeTMZ{=sItN=uQ&`~ZrH`Y^eWUX)D;E^+6 z2*!U5-Z|lkmL)_*&jKQ^6+B_(Arh?HEq=@`LG%wN{%Hf&Hr;FHu{q1lUUxpw(u5$42zo#d@hAiGHmlo9)Fh#ge zZy@${1=vb(KbTEFPGX1TtH^1zMe5_e)uf2-v6w`5UlkYJ*6xeu}#Lx;Z`lyl>o>%8CQKJY?#dHXv$mJ{&Yqf z4B&4=jVwt>@`^Ss!NAssR2woy6*%8x8pg|F?Qv637v?8dq2U)XUdj!+Y!Kx7#b9(R z1`zIY5|){3WaI@t_TUqkXAK-A{~h{EoUrO;9C?*ODKlvaNfrfxz943#SQ&j*R1q*u zwc3JMhzu~(-^vW>nw(y&ygXNx(8k|x_58{*r;624;Qv#FK%c~|j_O1+mNT!nj42`h zICNQ52$pR)KB9eTAzAM;-Cg(nCDT&UMbvY}MxllW@GaC;9Sq8J_IVn^Fu(^7L2+z% zJY-~g6Px5DqJ04o)wN)$%^+^$^!xiF1Biu#05Ko|aZvs$l#?#i#p8KI8&`<{dihU+ zoab-D(0OG6!eYp13ff|Mj1%Tw%m(YivT{%dxH`n9jI=kga|HszD%dJ-%R<4e{QS>3 z%4?(qHev1M-*D_5GwTKf)7BUrVbR6+ftbb5w+#;taMzq(ghwC=BW=@v(yJXITWTZy z^n3wW`S|4id?;oE=FYxS-SuhTr*~Hpcii_z3Pd{Em4VGGi1sT(M!_}p-L535vh#%rrN#jL=exCV0D0i|9tE4;AR>}W3*7m; zgBNgL-ve^O2etF$N!oxClOJUiqef8Ylt+M20ZBGERl{6{cVwjm-5v4#QE^ABzf>)z z;#@++;${%xLK5@{Bc1kkPU%9vfw{68OFFBQW@4f2V&xvCSU>@-5FxOriXPTU;dNEb zQ0((_tggB7S#z$In)hGLgN};Nt~2H-T2W0}LK4jAKAuA9ijfdBzq#>W zO4M%P6rO3FBRv-7-hxceJUZnb@kE?*IhK-K%0mV+5A1jOPwFxT5lXh@ud?jKmt!cPo@00 zBRcvj+>MiqsW~;Zuy63(nZDi36uD7#_U>zeH$YLK4A+nEmPPga@#GO~)dOK3yf>@6YQzB|k)`jn6K7lgigvuv3G`q_iK$99M=&LCCSoY^K+@6f2gf%jPqb-y?u zGq;DXnHbU@`Z4J%375iuz;jkF?=a1#cdE119A*$gZIhVa5AY$iR-0POk zYUyqEnKbfBv06u#tv>RbBPEcouRx7IYBiYJM|upGc!O&Y&v!9cI$*do@|yaH_XOJm z5^aj)N<-{??u;P1ePa_aRsksp^G?nC6pV!tS6KsweqHx4X zr9G9vg?~BRFt@IDyTLm1IjmrHs>nY+M?<~}y8`9B>Sj$h6Oe3ba$SEsBLktSB(n3u z+o|XA_r`u$nESk>Lam+$yp>o)h*9l(=Y+~%`$&Jsu3ZVXG-CTi0k9X%M|=%6#m3Wd#;T(y0j#f?AGrq z7KOFI8*eEB*y3~yYCbm~DslCeP0XyD8%lLT;c{VCZ;5=?1hI)NRW9jW0bdgps?Vgy zR1jCVPPz&X4qAak5;1=1rTcfqTSrB`8)IbPO-HQ{rJEeUx8#$;u$wZf;rL*Vy`B=E}U1SlEp1KGetQn#YSf-;Vkq=5RY7Wr`Ny%MPcE1BRgg>+?@wa9yY>BK)ytCQn&0<*&X;+piJ}-7C$a|7RywGB z14BdVMVLSUK40t)Sj)}Sb~F=jRWVwR<}8%%OI)PZ>V-to>cCQI{fEH#vpxIlA_X&U zM7FdT7B}SE^#DJhW6}H-B{3TbCVO7i>EKZY_b{2$dWKadm(TYCOX*z=hZZ-_3MW0e z`edj2GDouGruE}iQ zt*S;%kYC0wIO?<}i7|8yKGhKn0BtFSmWL~Kv3hVXhA|kkw%~P4hd(sziJs%ebvnk&KQZ=uYulQTTZ#U%Nr8WdlejD-~`DAvHf_Rrw`MCbki{M1EfahncE2~!HXG#YDM%#Nqh-*loiF_mF5$s=^Br4BlI_}C@JeuS1cz)j>+KLx&-H+;8{;l)t( z8Cbo&T#iCc&pD@#sugCk^$z&9nPXJi#($_IytH^wqn!Nc0eK}}OLqc-Ac zW2{VsSiqjhk(A>+L^iCQ6E2m6J`)2tKU+4v={y8na6jg39)5H@0zMDd=z!~cXDRii z*9nMDHzTz{)1uk}3(8tVrZGHfNQ9MjD}R-2NItQ*wR>s@sPzG#wWlRNv7LLLtizgJ z+TXyu?spdps?b|S$LX7J1B7rG=%>V(EB=TrmY`yqn3`eD%axnTcp=DWtW*J7R-Ui? z7kp2yv0){jL^=~=Me*7oL$e?5`c$hzD^AQ8kGG*OyYx5l363WjPWOC<0K8Sf?yOE9 zhD83dS`~AVZ;A!|R|CIILV$zM5z{tz0T4VcKQH9)5f$UT7U=uem{pZ~EPp+`=Ds%g z2$keI$Ff@j_BI%+D1Ln1^p6KHGpp^C6UKWNmxa|ZDpO5~s|sdQXd^!8D8z9#`}o+s zY!@${`h3=Wsx+jcrY)VjvjIU3`Q8KPFalz%yhVPGrFcBxO=Ca%R`NPc zFpE|nol~vdoUh=-7wGH1OQq5NNLh2~^A}E@>Z@=fihc|U=fh4+`=^U?acQ|D2l8i9 zQYOD+N}LB9G!ec+?W*x#8qz!4>BFox*bNKHi?z$71ca4fU2e;!^kJBaXrXVz&L=Uu z>;X4_wI)haOmym{Yf7yExoda;HA&0VaXcNnI8F}IC!;6}-qeSzTD6K=r;RqG9pvE% zTY?k8%2EsrJ2ZwTQ-Rf5_wq_mr!h@-L$OO;=+EneA)-w167bxzzApNa!CPKsw-O|k z43C?4MqrxYcKdnp-SK|j%SP^Hyo%W*pXLfc-m}b*PsI!){3_}0 zi5En)aZ3PE@{x+mz~~2fr0!$wEs@k}M$KE2jzw`{*}0%0Y~^F6)x7G7ETGrfeMk5) zjdr0rR=WWW5r%30-OTwlzzcJ;+w%5T;zX3#g)2{|Y&^WRo!fTD!8o^r&5@dZ&2OWy zhV%+#Dh}VYYj0}+n}tgY=y!c%t#XSyiz2z^S$Cx+{N3X*xSB;z%kZ@47Vh!gSD?tk zQ6z7)i!G&druG?^TcW{rN47pdg_1&&j1>wu)Z%5;Dr68_+%L<|*BC~$Cso|PzH*HFP@{?yjM z@oL-5Y112nGTsgIC6I3&Eh<8NqhAMTKEVg*nG2N5LGrXa!4d-HOzO*ILY$}DGAiN8 z`D4RMLPY$xEkVpRoS+7Vam_A8ulgXA1Gx-$2;3EEMzGx)>s`2BEcd1r|AsTm9|7| zlL}Q@sDb#!3z|4+jZ!%8Bv{1Autfj8>+w!Uh}d0BNtK?+bSZOd0s+AT1EKW~olPAq zz%l;8KD58-N;pJ-6pbcW=pbAgwg2=(&n5^UPfV~zgwC9q??E-P8;9vG%|9F%Li6#X|=GXiGX8*x}z<{LG2W!V8NdVq! zSuNTdSuOs3p8M!Jk%=cPwUXWuODRM_N|1!?A-Dh=N|{0+xVhp%kU`8U=Z~BD1X0iM zLB`K*5k#vR9bz96Cy{-x69FNB$qnQyeS6adHy4+JpA#o?sA3WXd95_G|6Z)Lv{q(^ zp~U>}#-TpXCT`iAl*g(1M1Z>4&3A^*_4LB&q>_>+aSX2TuN>qFq|Ud5^@C?!*Qd8< z8Qznz!> zHH*49vDg-?>|@`dZ2^LMVz{nnB@FL@1$ue)aNC-OjWx^}`NHghU~tYKf;UHey-t9~ z=P%z8Hj$9C&RAvttV*_SHkkwD*~RP|qjR-vQK0Y@)1B96)VbUApIvgpD}`TP9n6P` zM+jp_d>}==%DJUewpcWPQ}8LMb$f8aXi&Q8D)pALIgE>LS-WA$p>uPg*x5G|7rNX* zeZZD_=joPItkQj0p<8H@mNtli(~yP=`<`2FJVlq(A z?`*RVB#fP44lHU*tb*T9QBENV^8>#a5o~$|cX8}r5JS;}K%;pYe{Oaj zb6M`DQid0v5#1Aa=Md^tRUbF*)37abcCD7P=1I{7hz^BIzMBfdCPHh&@Co0RU-aS+ zbvD{`0mz@dbXpVu4Z_;}x0!m&xZuCk3H#SxXj7}qp#>&#z4v6(j^1@dhFQh7KZoym zX4}jXEo#7BO%4u}KArpJUylXWiub(VF4B_M`7Lhl3oG4!;TTf7j12TyeNKjj zi}ipD!`vxPq{-$F0#SQRwKK}~$k-PPlibk0*kfIkX&Eynq`V*C_(?c?OU4(NJ+Xp= zQfGI%Oqtt2J$c$AQzQt)swc zT+e-2Tp%M@rCG#J)W>X0!rzhb?Bm0#&hS~lJ;67FuMAuE12CvgK*wZy>(>377D=TsKsf+k)+=QBj^MGA*YjJmzn8l&w(Onl6j%dk zTXRE>hn@dWez8QVWLnI5C-OlQmLRY`EU3lC;5fu3`jyx|U*#FT1Pli*J-l`i3WK~G z?f^Gn#5ca{EH_gv8pj%4-UF|2>hLyz?`7WW)eQF4Oxo29_+N`h5)&zo@t4=`$M?|3 z_g|0ihS7WCc**fhT~%DY?mdSvHX+Rf`x;N{vL+Y&YfSug5^L;Wc)l~NSF2I&aXUgV zaCPivv2^Tr3AC|=CG$}KQdLgFsGZR7hc4K9V1K<7_}RPkK2w< zF|dsPL7Zc;d)`XZ>scEIN+ecmoV@h<=Mu!PZBXb z!WFX6MpgAzjgIw-+h&-pS6tGoP1?3{aGb}Ftzq&hvN{2^c%WsaeCvG9k!;j&&_1A#n`5g7 zbjxCD!;-yhd(Xr-aFZwi3?&(IF=!z4I-D zH3;TggQji*s%r0Vu9I%wYrUS!IPaQpW|q-wq{y9vbHweU?(E@fiYkYs+bd>vn3r(p)tEU?ZE6TZx)97u{*2B*zQH}h zwXSij}N@W%x36*eHZTor@xgN9B77cLt_XOA6?f1G3phjU1+&#TgqDK zE2Tx-I|h$XBRk|WpLRy}AfOnX#xmx{mP3(3yS-W_LhQE!B%{s8w?FBx2-(-oZDVqg z^ThlJ=ymKQ`H|Bf3)Y~skwar)L_NLb;k?Y*f{_((GC*Mf+1;^0xB!t1id+Ve?KBL( zP(jq4jM(ghUNwksglvfvz+LB4hoKYeN>PqNcORpZMUvs`Y80e=fG}N%6B$#>}{;<^M=Hcf*_FmhM2n zi*t588Ev{g@GhvLh*P2VOE=oXWQ;bz_*CSQ7EMnVplI!kgj^o|@X_=sY{C<{po_Xo zzLs_P_aG1*@b>#=C5cXh<2#P_#AX@vfyW!6W%#jP+YR>wM8@iTr=%XVwrDVf96ebj zf#`no0BDaxbGm*MrnXVkM%X8+&2wC~MB>X3-Z1uU%P7h+zuF5v%Yra)F5- zu1�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 APyhe` diff --git a/Moose_MenuManager.lua b/Moose_MenuManager.lua index b040568..c911502 100644 --- a/Moose_MenuManager.lua +++ b/Moose_MenuManager.lua @@ -113,35 +113,6 @@ function MenuManager.CreateMissionMenu(menuName, parentMenu) return menu end --- Create a group menu under "Mission Options" for the player's coalition --- @param group: GROUP object --- @param menuName: Name of the menu --- @param parentMenu: (Optional) If provided, creates as submenu of this parent instead of Mission Options --- @return: MENU_GROUP object -function MenuManager.CreateGroupMenu(group, menuName, parentMenu) - if MenuManager.Config.EnableMissionOptionsMenu and not parentMenu then - -- Get group's coalition and create under appropriate Mission Options - local groupCoalition = group:getCoalition() - local parent = (groupCoalition == coalition.side.BLUE) - and MenuManager.ParentMenus.BlueCoalition - or MenuManager.ParentMenus.RedCoalition - - local menu = MENU_GROUP:New(group, menuName, parent) - - if MenuManager.Config.Debug then - local coalitionName = (groupCoalition == coalition.side.BLUE) and "BLUE" or "RED" - env.info(string.format("MenuManager: Created group menu '%s' for %s (coalition %s)", - menuName, group:getName(), coalitionName)) - end - - return menu - else - -- Create as root menu or under provided parent - local menu = MENU_GROUP:New(group, menuName, parentMenu) - return menu - end -end - -- Helper to disable the parent menu system at runtime function MenuManager.DisableParentMenus() MenuManager.Config.EnableMissionOptionsMenu = false diff --git a/Moose_WWII_PilotIntuition.lua b/Moose_WWII_PilotIntuition.lua deleted file mode 100644 index 07f3775..0000000 --- a/Moose_WWII_PilotIntuition.lua +++ /dev/null @@ -1,3750 +0,0 @@ ----@diagnostic disable: undefined-field, undefined-global ----@diagnostic disable: undefined-global, lowercase-global --- WWII Pilot Intuition System using Moose Framework --- --- Description: --- This script simulates a WWII-era pilot intuition system for DCS World missions. It enhances immersion by providing realistic reconnaissance capabilities, --- alerting pilots to nearby air and ground threats through voice-like messages and optional markers, mimicking how pilots spotted targets in WWII without modern aids. --- --- Purpose: --- To bridge the gap between modern DCS gameplay and historical WWII aviation, where situational awareness relied on visual scanning, formation flying, and intuition. --- It helps players maintain awareness of their surroundings in dense or chaotic environments, promoting better tactics and immersion. --- --- Use Case: --- Ideal for WWII-themed missions, dogfights, or ground attack scenarios. Players can fly without relying on radar or labels, using the system to spot bandits, --- ground units, and receive formation feedback. It's particularly useful in multiplayer servers for coordinated flights or solo play for enhanced challenge. - --- Features: --- - **Dynamic Detection Ranges**: Detection ranges automatically adjust based on formation flying and environmental conditions. Flying in tight formations with wingmen significantly boosts spotting distances for both air and ground targets. For example, a solo pilot might detect air targets at 5km, but in a 2-ship formation, this increases to 10km, and in a 4-ship formation to 15km. Environmental factors like night reduce ranges (e.g., 50% at night), while bad weather can further decrease visibility. This simulates historical WWII reconnaissance where formation integrity was crucial for situational awareness. --- - Line of Sight checks to ensure targets are only reported when visible. --- - Realistic messaging simulating pilot radio calls for spotting bandits and ground threats. --- - Formation integrity monitoring with alerts for wingmen presence. --- - Dogfight assistance with alerts for merging bandits, tail warnings, head-on threats, and more. --- - Optional visual markers (smoke, flares) for spotted targets, with selectable colors. --- - Independent toggles for air target scanning, both globally (mission-wide) and per-player. --- - On-demand ground target scanning with selective marking: scan nearby targets, review list, and choose which one to mark. --- - Configurable settings via F10 menu for players to customize their experience. --- - Scheduled summaries for players preferring less frequent updates. --- - Per Player customization of dogfight assistance, marker types, and scanning preferences and message frequency. --- - Per Player Multi Language Support: English, German, French, Spanish, Russian. - --- --- Setup Instructions: --- 1. Ensure the Moose framework is installed and loaded in your DCS mission (download from https://flightcontrol-master.github.io/MOOSE_DOCS/). --- 2. Add this script to your mission via the DCS Mission Editor: Go to Triggers > Mission Start > Do Script File, and select this Lua file. --- 3. Optionally, customize the PILOT_INTUITION_CONFIG table below to adjust ranges, multipliers, and behaviors to fit your mission. --- 4. The system initializes automatically on mission start. Players will see a welcome message and can access settings via the F10 menu. --- 5. For best results, test in a mission with active AI units or other players to verify detection ranges and messaging. - --- Logging system (0=NONE, 1=ERROR, 2=INFO, 3=DEBUG, 4=TRACE) -PILOT_INTUITION_LOG_LEVEL = 1 -- Default to INFO level - -local function PILog(level, message) - if level <= PILOT_INTUITION_LOG_LEVEL then - env.info(message) - end -end - --- Log level constants -local LOG_NONE = 0 -local LOG_ERROR = 1 -local LOG_INFO = 2 -local LOG_DEBUG = 3 -local LOG_TRACE = 4 - --- Global configuration table for settings -PILOT_INTUITION_CONFIG = { - airDetectionRange = 8000, -- Meters (base range for air targets) (can be modified by formation and environment) - groundDetectionRange = 5000, -- Meters (base range for ground targets) (can be modified by formation and environment) - messageCooldown = 10, -- Seconds between messages - markerType = "smoke_red", -- Options: "smoke_red", "smoke_green", "smoke_blue", "smoke_white", "flare_red", "flare_green", "flare_white", "none" - markerDuration = 300, -- Seconds for marker visibility (dcs default can't be changed, so this is just for reference) - threatHotRange = 1000, -- Meters for "hot" threat - threatColdRange = 5000, -- Meters for "cold" threat - scanInterval = 5, -- Seconds between scans - mergeRange = 500, -- Meters for merge detection - highMergeAltitude = 500, -- Meters altitude difference for "high merge" - lowMergeAltitude = 500, -- Meters altitude difference for "low merge" - tailWarningRange = 1000, -- Meters for tail warnings - headOnRange = 1000, -- Meters for head-on detection - beamRange = 1500, -- Meters for beam aspect detection - separatingRange = 2000, -- Meters - if opening past this after merge, call "separating" - multipleBanditsRange = 2000, -- Meters for multiple bandits detection - multipleBanditsWarningCooldown = 300, -- Seconds between "Multiple bandits in vicinity!" warnings (5 minutes) - maxThreatDisplay = 3, -- Maximum number of threats to display in multi-bandit tactical picture (most threatening first) - combatIntensityThreshold = 3, -- Number of bandits to trigger "high intensity" mode (increases cooldowns) - combatIntensityCooldownMultiplier = 1.5, -- Multiply dogfight assist cooldown by this during high intensity combat - suppressFormationInCombat = true, -- Suppress formation join/leave messages when engaged with bandits - formationRange = 1000, -- Meters for considering players in formation - minFormationWingmen = 1, -- Minimum wingmen for formation integrity warnings - formationMessageCooldown = 60, -- Seconds cooldown for formation join/leave messages (prevents spam) - nightDetectionMultiplier = 0.5, -- Detection range multiplier at night - badWeatherMultiplier = 0.7, -- Detection range multiplier in bad weather - dogfightAssistEnabled = true, -- Enable dogfight assistance by default - dogfightMessageCooldown = 3, -- Seconds between dogfight assist messages - criticalSpeedThreshold = 150, -- Knots - warn if speed drops below this in dogfight - altitudeDeltaThreshold = 300, -- Meters - significant altitude difference for callouts - highClosureRate = 100, -- M/s - warn if closure rate exceeds this - positionChangeThreshold = 45, -- Degrees - trigger update if bandit moves this much - maxMultiplier = 8, -- Max detection multiplier to prevent excessive ranges - summaryInterval = 120, -- Seconds between scheduled summaries (0 to disable) - summaryCooldown = 2, -- Minimum seconds between on-demand summaries - activeMessaging = true, -- Enable live alerts; false for on-demand only - showGlobalMenu = true, -- Enable global settings menu for players - showWelcomeMessage = true, -- Show welcome message to new players - enableCloseFlyingCompliments = true, -- Enable compliments for close flying - complimentRange = 75, -- Meters for close flying compliment - headOnWarningRange = 150, -- Meters for head-on warning - closeFlyingMessageCooldown = 26, -- Seconds between close flying messages - enableAirScanning = true, -- Enable scanning for air targets - enableGroundScanning = false, -- Enable scanning for ground targets - illuminationCooldown = 30, -- Seconds between illumination flare drops (simulates reload time) - illuminationAltitude = 500, -- Meters - altitude offset above target for illumination flares - illuminationFlaresDefault = 3, -- Number of illumination flares per sortie - countAIWingmen = true, -- Count AI units in same group as wingmen for formation bonus (false = players only count as wingmen) - aiWingmenMultiplier = 1.0, -- Multiplier for AI wingmen (0.5 = half credit, 1.0 = full credit) - distanceUnit = "mi", -- Default distance unit: "km" for kilometers, "mi" for miles (nautical miles) - defaultLanguage = "EN", -- Default language: "EN", "DE", "FR", "ES", "RU" -} - --- Multilingual message and menu tables --- Each language contains all messages and menu text -PILOT_INTUITION_LANGUAGES = { - EN = { - -- Messages - welcome = { - "Welcome to WWII Pilot Intuition! This system simulates pilot reconnaissance for spotting air and ground targets. Use F10 menu for settings.", - "Greetings, pilot! WWII Pilot Intuition is active. It helps you spot bandits and ground threats. Check F10 for options.", - "Pilot Intuition engaged! Simulate WWII-era reconnaissance. F10 menu for controls.", - }, - formationJoin = { - "You've joined flight with %s - air detection increased to %.0f%s, ground to %.0f%s.", - "%s is now flying off your wing - detection ranges boosted to %.0f%s air, %.0f%s ground.", - "Welcome aboard, %s! Formation tightens detection to %.0f%s for air, %.0f%s for ground.", - "%s joins the formation - eyes sharper now, %.0f%s air, %.0f%s ground range.", - }, - formationLeave = { - "%s left formation - air detection reduced to %.0f%s, ground to %.0f%s.", - "%s is outa here - detection drops to %.0f%s air, %.0f%s ground.", - "Formation broken by %s - ranges now %.0f%s air, %.0f%s ground.", - "%s has peeled off - back to solo detection: %.0f%s air, %.0f%s ground.", - }, - formationIntegrityLow = { - "Formation integrity low! Tighten up.", - "Form up, pilots! We're spread too thin.", - "Close ranks! Formation integrity compromised.", - "Get back in formation, lads! We're vulnerable.", - }, - airTargetDetected = { - "Bandit %s at %.0f degrees, %.1f %s, angels %.0f (%s)!", - "Enemy aircraft %s: %.0f degrees, %.1f %s, altitude %.0f (%s).", - "Bogey %s at %.0f o'clock, %.1f %s out, angels %.0f (%s).", - "Hostile contact %s: %.0f degrees, %.1f %s, %.0f angels (%s).", - "Bandit inbound %s: %.0f degrees, %.1f %s, angels %.0f (%s).", - }, - groundTargetDetected = { - "%s contact: %s %s at %.0f degrees, %.1f %s.", - "Ground threat: %s %s %s spotted at %.0f degrees, %.1f %s.", - "%s units detected: %s %s, %.0f degrees, %.1f %s.", - "Enemy ground: %s %s %s at bearing %.0f, %.1f %s away.", - }, - dogfightEngaged = { - "Engaged!", - "Tally ho! Dogfight started.", - "Bandit engaged! Fight's on.", - "Dogfight! Guns hot.", - }, - dogfightConcluded = { - "Dogfight concluded.", - "Fight's over. Clear.", - "Dogfight ended. Stand down.", - "Engagement terminated.", - }, - underFire = { - "Under fire! Break %s!%s", - "Taking hits! Evade %s!%s", - "Shots fired! Turn %s now!%s", - "Incoming! Break %s!%s", - }, - closeFlyingCompliment = { - "Nice flying! Tip-to-tip formation.", - "Hey, nice! That's some close flying.", - "Great job! That's close!", - "Easy does it there tiger, I don't know you that well!", - "Impressive! Wingtip to wingtip.", - "Smooth moves! Close quarters flying.", - "Damn, that's tight! Good flying.", - "Holy shit, that's close! Nice one.", - "Whew, that was close! Good stick work.", - "You're glued to my wing! Excellent flying.", - "Tight as a drum! Keep it up.", - "Helluva formation! Tip to tip.", - "Smooth as silk! Close flying there.", - "Damn, pilot! That's some precision.", - "Whoa, easy on the throttle! Nice and close.", - "Impressive control! Wingtip distance.", - "You're right on my six... wait, formation! Good job.", - "Tight formation! That's how it's done.", - "Holy cow, that's close! Well done.", - "Nice touch! Close quarters.", - "You're flying like a pro! Tight formation.", - "Smooth operator! Tip-to-tip.", - "Damn fine flying! Close as can be.", - "Whoa there! That's some tight flying.", - "Impressive! You're practically in my cockpit.", - "Smooth sailing! Close formation.", - "Hell yeah, that's tight! Good work.", - "Easy tiger, but damn good flying.", - "You're a formation expert! Tip-to-tip.", - "Smooth moves, pilot! Close quarters.", - }, - headOnWarning = { - "Whew! That was close!", - "Whoa! Nearly a head-on!", - "Close call! Watch that pass.", - "Damn, that was tight! Be careful.", - "Holy crap, almost collided!", - }, - markerSet = { - "Marker set to %s.", - "Markers now %s.", - "Marker type changed to %s.", - }, - dogfightAssistToggle = { - "Dogfight assist %s.", - "Dogfight assistance %s.", - }, - activeMessagingToggle = { - "Active messaging %s.", - "Live alerts %s.", - }, - airScanningToggle = { - "Air scanning %s.", - "Air detection %s.", - }, - groundScanningToggle = { - "Ground scanning %s.", - "Ground detection %s.", - }, - alertFrequencyToggle = { - "Alert frequency set to %s.", - "Alerts now %s.", - }, - summaryCooldown = { - "Summary on cooldown.", - "Wait a bit for another summary.", - }, - noThreats = { - "No active threats.", - "All clear.", - "Situation normal.", - }, - -- Additional hardcoded messages that need translation - systemActive = "WWII Pilot Intuition active! Use F10 menu for settings.", - logLevelSet = "Log level set to: %s", - distanceUnitsSet = "Distance units set to %s.", - targetNotAvailable = "Target %d not available.", - markedTarget = "Marked Target %d.", - noIlluminationFlares = "No illumination flares remaining. Land at a friendly airbase to rearm.", - illuminationNotReady = "Illumination not ready. Wait %d seconds.", - cannotDeterminePosition = "Cannot determine position for illumination drop.", - cannotDetermineAltitude = "Cannot determine altitude for illumination drop.", - illuminationDropped = "Illumination flare dropped at your position. (%d remaining)", - cannotDetermineTargetPosition = "Cannot determine target position for illumination drop.", - errorCouldNotDeterminePosition = "Error: Could not determine your position.", - illuminationDroppedOnTarget = "Illumination flare dropped on Target %d (%.0f°, %.1f%s). (%d remaining)", - illuminationRearmed = "Illumination flares rearmed: %d available.", - noGroundTargets = "No enemy ground targets detected in range.", - selectTargetFromMenu = "Select a target from the menu to mark it.", - targetInfo = "Target %d: %s %s %s, Bearing %.0f, Range %.1f %s", - -- State words - enabled = "enabled", - disabled = "disabled", - hot = "hot", - cold = "cold", - closing = "closing", - opening = "opening", - left = "left", - right = "right", - above = "above", - below = "below", - high = "high", - low = "low", - normal = "normal", - quiet = "quiet", - verbose = "verbose", - -- Menu text - menu = { - mainTitle = "WWII Pilot Intuition", - dogfightAssist = "Dogfight Assist", - enable = "Enable", - disable = "Disable", - markerType = "Marker Type", - smoke = "Smoke", - flare = "Flare", - red = "Red", - green = "Green", - blue = "Blue", - white = "White", - none = "None", - airScanning = "Air Scanning", - groundScanning = "Ground Scanning", - groundTargeting = "Ground Targeting", - scanForTargets = "Scan for Targets", - markTarget = "Mark Target", - target = "Target %d", - illumination = "Illumination (%d left)", - dropAtMyPosition = "Drop at My Position", - dropOnTarget = "Drop on Target", - alertFrequency = "Alert Frequency", - normalFreq = "Normal", - quietFreq = "Quiet", - verboseFreq = "Verbose", - summary = "Summary", - brief = "Brief", - detailed = "Detailed", - settingsAndGuides = "Settings & Player Guides", - distanceUnits = "Distance Units", - milesNautical = "Miles (Nautical)", - kilometers = "Kilometers", - playerGuide = "Player Guide", - systemOverview = "System Overview", - detectionRanges = "Detection Ranges", - dogfightAssistHelp = "Dogfight Assist Help", - groundTargetingHelp = "Ground Targeting Help", - formationTips = "Formation Tips", - illuminationHelp = "Illumination Help", - logLevel = "Log Level", - language = "Language / Sprache / Langue", - english = "English", - german = "Deutsch (German)", - french = "Français (French)", - spanish = "Español (Spanish)", - russian = "Русский (Russian)", - } - }, - -- German language - DE = { - welcome = { - "Willkommen bei WWII Piloten-Intuition! Dieses System simuliert Piloten-Aufklärung zum Erkennen von Luft- und Bodenzielen. Verwenden Sie das F10-Menü für Einstellungen.", - "Grüße, Pilot! WWII Piloten-Intuition ist aktiv. Es hilft Ihnen, Banditen und Bodenbedrohungen zu erkennen. Prüfen Sie F10 für Optionen.", - "Piloten-Intuition aktiviert! Simulieren Sie Aufklärung aus der WWII-Ära. F10-Menü für Steuerung.", - }, - formationJoin = { - "Sie haben sich dem Flug mit %s angeschlossen - Lufterkennung erhöht auf %.0f%s, Boden auf %.0f%s.", - "%s fliegt jetzt an Ihrem Flügel - Erkennungsreichweiten erhöht auf %.0f%s Luft, %.0f%s Boden.", - "Willkommen an Bord, %s! Formation verbessert Erkennung auf %.0f%s für Luft, %.0f%s für Boden.", - "%s schließt sich der Formation an - Augen sind schärfer jetzt, %.0f%s Luft, %.0f%s Boden Reichweite.", - }, - formationLeave = { - "%s hat Formation verlassen - Lufterkennung reduziert auf %.0f%s, Boden auf %.0f%s.", - "%s ist weg - Erkennung fällt auf %.0f%s Luft, %.0f%s Boden.", - "Formation durch %s aufgelöst - Reichweiten jetzt %.0f%s Luft, %.0f%s Boden.", - "%s hat sich abgesetzt - zurück zur Solo-Erkennung: %.0f%s Luft, %.0f%s Boden.", - }, - formationIntegrityLow = { - "Formationsintegrität niedrig! Zusammenrücken.", - "Formiert euch, Piloten! Wir sind zu weit auseinander.", - "Reihen schließen! Formationsintegrität gefährdet.", - "Zurück in Formation, Leute! Wir sind verwundbar.", - }, - airTargetDetected = { - "Bandit %s bei %.0f Grad, %.1f %s, Engel %.0f (%s)!", - "Feindflugzeug %s: %.0f Grad, %.1f %s, Höhe %.0f (%s).", - "Bogey %s bei %.0f Uhr, %.1f %s entfernt, Engel %.0f (%s).", - "Feindkontakt %s: %.0f Grad, %.1f %s, %.0f Engel (%s).", - "Bandit im Anflug %s: %.0f Grad, %.1f %s, Engel %.0f (%s).", - }, - groundTargetDetected = { - "%s Kontakt: %s %s bei %.0f Grad, %.1f %s.", - "Bodenbedrohung: %s %s %s gesichtet bei %.0f Grad, %.1f %s.", - "%s Einheiten entdeckt: %s %s, %.0f Grad, %.1f %s.", - "Feindlicher Boden: %s %s %s bei Peilung %.0f, %.1f %s entfernt.", - }, - dogfightEngaged = { - "Im Gefecht!", - "Tally ho! Luftkampf begonnen.", - "Bandit im Gefecht! Kampf läuft.", - "Luftkampf! Waffen scharf.", - }, - dogfightConcluded = { - "Luftkampf beendet.", - "Kampf vorbei. Klar.", - "Luftkampf beendet. Entspannen.", - "Gefecht beendet.", - }, - underFire = { - "Unter Beschuss! Ausweichen %s!%s", - "Treffer einsteckend! Ausweichen %s!%s", - "Schüsse abgefeuert! Wende %s jetzt!%s", - "Eingehend! Ausweichen %s!%s", - }, - closeFlyingCompliment = { - "Schönes Fliegen! Spitze-zu-Spitze-Formation.", - "Hey, schön! Das ist enges Fliegen.", - "Großartige Arbeit! Das ist nah!", - "Ruhig, Tiger, ich kenne dich nicht so gut!", - "Beeindruckend! Flügelspitze zu Flügelspitze.", - "Geschmeidige Bewegungen! Nahkampffliegen.", - "Verdammt, das ist eng! Gutes Fliegen.", - "Heilige Scheiße, das ist nah! Gut gemacht.", - "Puh, das war knapp! Gute Steuerung.", - "Du klebst an meinem Flügel! Exzellentes Fliegen.", - }, - headOnWarning = { - "Puh! Das war knapp!", - "Whoa! Fast frontal!", - "Knapper Anruf! Pass auf beim Überholen.", - "Verdammt, das war eng! Sei vorsichtig.", - "Heiliger Mist, fast kollidiert!", - }, - markerSet = { - "Markierung auf %s gesetzt.", - "Markierungen jetzt %s.", - "Markierungstyp geändert auf %s.", - }, - dogfightAssistToggle = { - "Luftkampf-Hilfe %s.", - "Luftkampf-Unterstützung %s.", - }, - activeMessagingToggle = { - "Aktive Benachrichtigungen %s.", - "Live-Warnungen %s.", - }, - airScanningToggle = { - "Luftscan %s.", - "Lufterkennung %s.", - }, - groundScanningToggle = { - "Bodenscan %s.", - "Bodenerkennung %s.", - }, - alertFrequencyToggle = { - "Warnfrequenz auf %s eingestellt.", - "Warnungen jetzt %s.", - }, - summaryCooldown = { - "Zusammenfassung in Abklingzeit.", - "Warten Sie etwas für eine weitere Zusammenfassung.", - }, - noThreats = { - "Keine aktiven Bedrohungen.", - "Alles klar.", - "Situation normal.", - }, - systemActive = "WWII Piloten-Intuition aktiv! Verwenden Sie das F10-Menü für Einstellungen.", - logLevelSet = "Log-Level auf %s gesetzt", - distanceUnitsSet = "Entfernungseinheiten auf %s eingestellt.", - targetNotAvailable = "Ziel %d nicht verfügbar.", - markedTarget = "Ziel %d markiert.", - noIlluminationFlares = "Keine Leuchtraketen mehr. Landen Sie auf einem befreundeten Flugplatz zum Auftanken.", - illuminationNotReady = "Beleuchtung nicht bereit. Warten Sie %d Sekunden.", - cannotDeterminePosition = "Kann Position für Leuchtraketen-Abwurf nicht bestimmen.", - cannotDetermineAltitude = "Kann Höhe für Leuchtraketen-Abwurf nicht bestimmen.", - illuminationDropped = "Leuchtrakete an Ihrer Position abgeworfen. (%d verbleibend)", - cannotDetermineTargetPosition = "Kann Zielposition für Leuchtraketen-Abwurf nicht bestimmen.", - errorCouldNotDeterminePosition = "Fehler: Konnte Ihre Position nicht bestimmen.", - illuminationDroppedOnTarget = "Leuchtrakete auf Ziel %d abgeworfen (%.0f°, %.1f%s). (%d verbleibend)", - illuminationRearmed = "Leuchtraketen aufgefüllt: %d verfügbar.", - noGroundTargets = "Keine feindlichen Bodenziele in Reichweite erkannt.", - selectTargetFromMenu = "Wählen Sie ein Ziel aus dem Menü zum Markieren.", - targetInfo = "Ziel %d: %s %s %s, Peilung %.0f, Reichweite %.1f %s", - enabled = "aktiviert", - disabled = "deaktiviert", - hot = "heiß", - cold = "kalt", - closing = "schließend", - opening = "öffnend", - left = "links", - right = "rechts", - above = "oben", - below = "unten", - high = "hoch", - low = "niedrig", - normal = "normal", - quiet = "ruhig", - verbose = "ausführlich", - menu = { - mainTitle = "WWII Piloten-Intuition", - dogfightAssist = "Luftkampf-Hilfe", - enable = "Aktivieren", - disable = "Deaktivieren", - markerType = "Markierungstyp", - smoke = "Rauch", - flare = "Leuchtrakete", - red = "Rot", - green = "Grün", - blue = "Blau", - white = "Weiß", - none = "Keine", - airScanning = "Luftscan", - groundScanning = "Bodenscan", - groundTargeting = "Bodenziel-Erfassung", - scanForTargets = "Nach Zielen scannen", - markTarget = "Ziel markieren", - target = "Ziel %d", - illumination = "Beleuchtung (%d übrig)", - dropAtMyPosition = "An meiner Position abwerfen", - dropOnTarget = "Auf Ziel abwerfen", - alertFrequency = "Warnfrequenz", - normalFreq = "Normal", - quietFreq = "Ruhig", - verboseFreq = "Ausführlich", - summary = "Zusammenfassung", - brief = "Kurz", - detailed = "Detailliert", - settingsAndGuides = "Einstellungen & Spielerführer", - distanceUnits = "Entfernungseinheiten", - milesNautical = "Meilen (Nautisch)", - kilometers = "Kilometer", - playerGuide = "Spielerführer", - systemOverview = "Systemübersicht", - detectionRanges = "Erkennungsreichweiten", - dogfightAssistHelp = "Luftkampf-Hilfe Anleitung", - groundTargetingHelp = "Bodenziel-Erfassung Anleitung", - formationTips = "Formationstipps", - illuminationHelp = "Beleuchtungs-Hilfe", - logLevel = "Log-Level", - language = "Language / Sprache / Langue", - english = "English (Englisch)", - german = "Deutsch (German)", - french = "Français (Französisch)", - spanish = "Español (Spanisch)", - russian = "Русский (Russisch)", - } - }, - -- French language - FR = { - welcome = { - "Bienvenue dans WWII Intuition du Pilote! Ce système simule la reconnaissance du pilote pour repérer les cibles aériennes et terrestres. Utilisez le menu F10 pour les paramètres.", - "Salutations, pilote! WWII Intuition du Pilote est actif. Il vous aide à repérer les bandits et les menaces au sol. Consultez F10 pour les options.", - "Intuition du pilote engagée! Simulez la reconnaissance de l'ère WWII. Menu F10 pour les commandes.", - }, - formationJoin = { - "Vous avez rejoint le vol avec %s - détection aérienne augmentée à %.0f%s, sol à %.0f%s.", - "%s vole maintenant sur votre aile - portées de détection augmentées à %.0f%s air, %.0f%s sol.", - "Bienvenue à bord, %s! La formation améliore la détection à %.0f%s pour l'air, %.0f%s pour le sol.", - "%s rejoint la formation - les yeux sont plus aiguisés maintenant, %.0f%s air, %.0f%s sol portée.", - }, - formationLeave = { - "%s a quitté la formation - détection aérienne réduite à %.0f%s, sol à %.0f%s.", - "%s est parti - détection chute à %.0f%s air, %.0f%s sol.", - "Formation rompue par %s - portées maintenant %.0f%s air, %.0f%s sol.", - "%s s'est détaché - retour à la détection solo: %.0f%s air, %.0f%s sol.", - }, - formationIntegrityLow = { - "Intégrité de formation faible! Resserrez-vous.", - "Formez-vous, pilotes! Nous sommes trop dispersés.", - "Serrez les rangs! Intégrité de formation compromise.", - "Revenez en formation, les gars! Nous sommes vulnérables.", - }, - airTargetDetected = { - "Bandit %s à %.0f degrés, %.1f %s, anges %.0f (%s)!", - "Avion ennemi %s: %.0f degrés, %.1f %s, altitude %.0f (%s).", - "Bogey %s à %.0f heures, %.1f %s, anges %.0f (%s).", - "Contact hostile %s: %.0f degrés, %.1f %s, %.0f anges (%s).", - "Bandit entrant %s: %.0f degrés, %.1f %s, anges %.0f (%s).", - }, - groundTargetDetected = { - "%s contact: %s %s à %.0f degrés, %.1f %s.", - "Menace au sol: %s %s %s repéré à %.0f degrés, %.1f %s.", - "%s unités détectées: %s %s, %.0f degrés, %.1f %s.", - "Sol ennemi: %s %s %s au relèvement %.0f, %.1f %s de distance.", - }, - dogfightEngaged = { - "Engagé!", - "Tally ho! Combat aérien commencé.", - "Bandit engagé! Le combat est lancé.", - "Combat aérien! Armes chaudes.", - }, - dogfightConcluded = { - "Combat aérien terminé.", - "Combat terminé. Dégagé.", - "Combat aérien terminé. Repos.", - "Engagement terminé.", - }, - underFire = { - "Sous le feu! Rompez %s!%s", - "Prend des coups! Évitez %s!%s", - "Coups tirés! Tournez %s maintenant!%s", - "Entrant! Rompez %s!%s", - }, - closeFlyingCompliment = { - "Beau vol! Formation bout à bout.", - "Hey, sympa! C'est du vol serré.", - "Excellent travail! C'est proche!", - "Doucement, tigre, je ne te connais pas si bien!", - "Impressionnant! Bout d'aile à bout d'aile.", - "Mouvements fluides! Vol en quartiers serrés.", - "Merde, c'est serré! Bon vol.", - "Putain, c'est proche! Bien joué.", - "Ouf, c'était proche! Bon maniement du manche.", - "Tu es collé à mon aile! Excellent vol.", - }, - headOnWarning = { - "Ouf! C'était proche!", - "Whoa! Presque en face!", - "Appel serré! Attention à ce passage.", - "Merde, c'était serré! Soyez prudent.", - "Sainte merde, presque entré en collision!", - }, - markerSet = { - "Marqueur défini sur %s.", - "Marqueurs maintenant %s.", - "Type de marqueur changé en %s.", - }, - dogfightAssistToggle = { - "Assistance combat aérien %s.", - "Assistance combat aérien %s.", - }, - activeMessagingToggle = { - "Messagerie active %s.", - "Alertes en direct %s.", - }, - airScanningToggle = { - "Scan aérien %s.", - "Détection aérienne %s.", - }, - groundScanningToggle = { - "Scan au sol %s.", - "Détection au sol %s.", - }, - alertFrequencyToggle = { - "Fréquence d'alerte définie sur %s.", - "Alertes maintenant %s.", - }, - summaryCooldown = { - "Résumé en temps de recharge.", - "Attendez un peu pour un autre résumé.", - }, - noThreats = { - "Aucune menace active.", - "Tout est clair.", - "Situation normale.", - }, - systemActive = "WWII Intuition du Pilote actif! Utilisez le menu F10 pour les paramètres.", - logLevelSet = "Niveau de log défini sur: %s", - distanceUnitsSet = "Unités de distance définies sur %s.", - targetNotAvailable = "Cible %d non disponible.", - markedTarget = "Cible %d marquée.", - noIlluminationFlares = "Plus de fusées éclairantes. Atterrissez sur une base aérienne amie pour vous réarmer.", - illuminationNotReady = "Illumination pas prête. Attendez %d secondes.", - cannotDeterminePosition = "Impossible de déterminer la position pour le largage de fusée éclairante.", - cannotDetermineAltitude = "Impossible de déterminer l'altitude pour le largage de fusée éclairante.", - illuminationDropped = "Fusée éclairante larguée à votre position. (%d restantes)", - cannotDetermineTargetPosition = "Impossible de déterminer la position de la cible pour le largage de fusée éclairante.", - errorCouldNotDeterminePosition = "Erreur: Impossible de déterminer votre position.", - illuminationDroppedOnTarget = "Fusée éclairante larguée sur cible %d (%.0f°, %.1f%s). (%d restantes)", - illuminationRearmed = "Fusées éclairantes réarmées: %d disponibles.", - noGroundTargets = "Aucune cible terrestre ennemie détectée à portée.", - selectTargetFromMenu = "Sélectionnez une cible dans le menu pour la marquer.", - targetInfo = "Cible %d: %s %s %s, Relèvement %.0f, Portée %.1f %s", - enabled = "activé", - disabled = "désactivé", - hot = "chaud", - cold = "froid", - closing = "rapprochement", - opening = "éloignement", - left = "gauche", - right = "droite", - above = "au-dessus", - below = "en-dessous", - high = "haut", - low = "bas", - normal = "normal", - quiet = "calme", - verbose = "verbeux", - menu = { - mainTitle = "Intuition du Pilote WWII", - dogfightAssist = "Assistance Combat Aérien", - enable = "Activer", - disable = "Désactiver", - markerType = "Type de Marqueur", - smoke = "Fumée", - flare = "Fusée", - red = "Rouge", - green = "Vert", - blue = "Bleu", - white = "Blanc", - none = "Aucun", - airScanning = "Scan Aérien", - groundScanning = "Scan au Sol", - groundTargeting = "Ciblage au Sol", - scanForTargets = "Scanner les Cibles", - markTarget = "Marquer Cible", - target = "Cible %d", - illumination = "Illumination (%d restantes)", - dropAtMyPosition = "Larguer à ma Position", - dropOnTarget = "Larguer sur Cible", - alertFrequency = "Fréquence d'Alerte", - normalFreq = "Normal", - quietFreq = "Calme", - verboseFreq = "Verbeux", - summary = "Résumé", - brief = "Bref", - detailed = "Détaillé", - settingsAndGuides = "Paramètres & Guides Joueurs", - distanceUnits = "Unités de Distance", - milesNautical = "Miles (Nautiques)", - kilometers = "Kilomètres", - playerGuide = "Guide du Joueur", - systemOverview = "Aperçu du Système", - detectionRanges = "Portées de Détection", - dogfightAssistHelp = "Aide Combat Aérien", - groundTargetingHelp = "Aide Ciblage au Sol", - formationTips = "Conseils Formation", - illuminationHelp = "Aide Illumination", - logLevel = "Niveau de Log", - language = "Language / Sprache / Langue", - english = "English (Anglais)", - german = "Deutsch (Allemand)", - french = "Français (French)", - spanish = "Español (Espagnol)", - russian = "Русский (Russe)", - } - }, - -- Spanish language - ES = { - welcome = { - "¡Bienvenido a WWII Intuición del Piloto! Este sistema simula el reconocimiento del piloto para detectar objetivos aéreos y terrestres. Use el menú F10 para configuración.", - "¡Saludos, piloto! WWII Intuición del Piloto está activo. Te ayuda a detectar bandidos y amenazas terrestres. Revisa F10 para opciones.", - "¡Intuición del piloto activada! Simula reconocimiento de la era WWII. Menú F10 para controles.", - }, - formationJoin = { - "Te has unido al vuelo con %s - detección aérea aumentada a %.0f%s, terrestre a %.0f%s.", - "%s ahora vuela en tu ala - rangos de detección aumentados a %.0f%s aéreo, %.0f%s terrestre.", - "¡Bienvenido a bordo, %s! La formación mejora detección a %.0f%s para aéreo, %.0f%s para terrestre.", - "%s se une a la formación - ojos más agudos ahora, %.0f%s aéreo, %.0f%s terrestre rango.", - }, - formationLeave = { - "%s dejó la formación - detección aérea reducida a %.0f%s, terrestre a %.0f%s.", - "%s se fue - detección cae a %.0f%s aéreo, %.0f%s terrestre.", - "Formación rota por %s - rangos ahora %.0f%s aéreo, %.0f%s terrestre.", - "%s se ha separado - vuelta a detección solitaria: %.0f%s aéreo, %.0f%s terrestre.", - }, - formationIntegrityLow = { - "¡Integridad de formación baja! Aprieten.", - "¡Formen, pilotos! Estamos demasiado dispersos.", - "¡Cierren filas! Integridad de formación comprometida.", - "¡Vuelvan a la formación, muchachos! Somos vulnerables.", - }, - airTargetDetected = { - "Bandido %s a %.0f grados, %.1f %s, ángeles %.0f (%s)!", - "Aeronave enemiga %s: %.0f grados, %.1f %s, altitud %.0f (%s).", - "Bogey %s a las %.0f en punto, %.1f %s fuera, ángeles %.0f (%s).", - "Contacto hostil %s: %.0f grados, %.1f %s, %.0f ángeles (%s).", - "Bandido entrante %s: %.0f grados, %.1f %s, ángeles %.0f (%s).", - }, - groundTargetDetected = { - "%s contacto: %s %s a %.0f grados, %.1f %s.", - "Amenaza terrestre: %s %s %s avistado a %.0f grados, %.1f %s.", - "%s unidades detectadas: %s %s, %.0f grados, %.1f %s.", - "Terreno enemigo: %s %s %s en rumbo %.0f, %.1f %s de distancia.", - }, - dogfightEngaged = { - "¡Enganchado!", - "¡Tally ho! Combate aéreo iniciado.", - "¡Bandido enganchado! La pelea está en marcha.", - "¡Combate aéreo! Armas calientes.", - }, - dogfightConcluded = { - "Combate aéreo concluido.", - "Pelea terminada. Despejado.", - "Combate aéreo terminado. Descanso.", - "Enganche terminado.", - }, - underFire = { - "¡Bajo fuego! ¡Rompe %s!%s", - "¡Recibiendo impactos! ¡Evade %s!%s", - "¡Disparos! ¡Gira %s ahora!%s", - "¡Entrante! ¡Rompe %s!%s", - }, - closeFlyingCompliment = { - "¡Buen vuelo! Formación punta con punta.", - "¡Hey, bien! Eso es vuelo cerrado.", - "¡Excelente trabajo! ¡Qué cerca!", - "¡Despacio ahí tigre, no te conozco tan bien!", - "¡Impresionante! Punta de ala con punta de ala.", - "¡Movimientos suaves! Vuelo en cuartos cerrados.", - "¡Diablos, qué ajustado! Buen vuelo.", - "¡Mierda, qué cerca! Bien hecho.", - "¡Uf, eso estuvo cerca! Buen control del stick.", - "¡Estás pegado a mi ala! Excelente vuelo.", - }, - headOnWarning = { - "¡Uf! ¡Eso estuvo cerca!", - "¡Whoa! ¡Casi de frente!", - "¡Llamada cerrada! Cuidado con ese pase.", - "¡Diablos, eso estuvo ajustado! Ten cuidado.", - "¡Santo cielo, casi colisionamos!", - }, - markerSet = { - "Marcador establecido en %s.", - "Marcadores ahora %s.", - "Tipo de marcador cambiado a %s.", - }, - dogfightAssistToggle = { - "Asistencia de combate aéreo %s.", - "Asistencia de combate aéreo %s.", - }, - activeMessagingToggle = { - "Mensajería activa %s.", - "Alertas en vivo %s.", - }, - airScanningToggle = { - "Escaneo aéreo %s.", - "Detección aérea %s.", - }, - groundScanningToggle = { - "Escaneo terrestre %s.", - "Detección terrestre %s.", - }, - alertFrequencyToggle = { - "Frecuencia de alerta establecida en %s.", - "Alertas ahora %s.", - }, - summaryCooldown = { - "Resumen en tiempo de reutilización.", - "Espera un poco para otro resumen.", - }, - noThreats = { - "Sin amenazas activas.", - "Todo despejado.", - "Situación normal.", - }, - systemActive = "¡WWII Intuición del Piloto activo! Use el menú F10 para configuración.", - logLevelSet = "Nivel de registro establecido en: %s", - distanceUnitsSet = "Unidades de distancia establecidas en %s.", - targetNotAvailable = "Objetivo %d no disponible.", - markedTarget = "Objetivo %d marcado.", - noIlluminationFlares = "No quedan bengalas de iluminación. Aterriza en una base aérea amiga para rearmarte.", - illuminationNotReady = "Iluminación no lista. Espera %d segundos.", - cannotDeterminePosition = "No se puede determinar la posición para lanzar bengala de iluminación.", - cannotDetermineAltitude = "No se puede determinar la altitud para lanzar bengala de iluminación.", - illuminationDropped = "Bengala de iluminación lanzada en tu posición. (%d restantes)", - cannotDetermineTargetPosition = "No se puede determinar la posición del objetivo para lanzar bengala de iluminación.", - errorCouldNotDeterminePosition = "Error: No se pudo determinar tu posición.", - illuminationDroppedOnTarget = "Bengala de iluminación lanzada en Objetivo %d (%.0f°, %.1f%s). (%d restantes)", - illuminationRearmed = "Bengalas de iluminación rearmadas: %d disponibles.", - noGroundTargets = "No se detectaron objetivos terrestres enemigos en rango.", - selectTargetFromMenu = "Selecciona un objetivo del menú para marcarlo.", - targetInfo = "Objetivo %d: %s %s %s, Rumbo %.0f, Rango %.1f %s", - enabled = "activado", - disabled = "desactivado", - hot = "caliente", - cold = "frío", - closing = "acercándose", - opening = "alejándose", - left = "izquierda", - right = "derecha", - above = "arriba", - below = "abajo", - high = "alto", - low = "bajo", - normal = "normal", - quiet = "silencioso", - verbose = "detallado", - menu = { - mainTitle = "Intuición del Piloto WWII", - dogfightAssist = "Asistencia Combate Aéreo", - enable = "Activar", - disable = "Desactivar", - markerType = "Tipo de Marcador", - smoke = "Humo", - flare = "Bengala", - red = "Rojo", - green = "Verde", - blue = "Azul", - white = "Blanco", - none = "Ninguno", - airScanning = "Escaneo Aéreo", - groundScanning = "Escaneo Terrestre", - groundTargeting = "Objetivo Terrestre", - scanForTargets = "Escanear Objetivos", - markTarget = "Marcar Objetivo", - target = "Objetivo %d", - illumination = "Iluminación (%d restantes)", - dropAtMyPosition = "Lanzar en Mi Posición", - dropOnTarget = "Lanzar en Objetivo", - alertFrequency = "Frecuencia de Alerta", - normalFreq = "Normal", - quietFreq = "Silencioso", - verboseFreq = "Detallado", - summary = "Resumen", - brief = "Breve", - detailed = "Detallado", - settingsAndGuides = "Configuración y Guías", - distanceUnits = "Unidades de Distancia", - milesNautical = "Millas (Náuticas)", - kilometers = "Kilómetros", - playerGuide = "Guía del Jugador", - systemOverview = "Resumen del Sistema", - detectionRanges = "Rangos de Detección", - dogfightAssistHelp = "Ayuda Combate Aéreo", - groundTargetingHelp = "Ayuda Objetivo Terrestre", - formationTips = "Consejos de Formación", - illuminationHelp = "Ayuda de Iluminación", - logLevel = "Nivel de Registro", - language = "Language / Sprache / Langue", - english = "English (Inglés)", - german = "Deutsch (Alemán)", - french = "Français (Francés)", - spanish = "Español (Spanish)", - russian = "Русский (Ruso)", - } - }, - -- Russian language - RU = { - welcome = { - "Добро пожаловать в WWII Интуиция Пилота! Эта система имитирует разведку пилота для обнаружения воздушных и наземных целей. Используйте меню F10 для настроек.", - "Приветствую, пилот! WWII Интуиция Пилота активна. Она поможет вам обнаружить бандитов и наземные угрозы. Проверьте F10 для опций.", - "Интуиция пилота активирована! Имитируйте разведку эпохи WWII. Меню F10 для управления.", - }, - formationJoin = { - "Вы присоединились к полету с %s - обнаружение воздушных целей увеличено до %.0f%s, наземных до %.0f%s.", - "%s теперь летит на вашем крыле - дальности обнаружения увеличены до %.0f%s воздух, %.0f%s земля.", - "Добро пожаловать на борт, %s! Формация улучшает обнаружение до %.0f%s для воздуха, %.0f%s для земли.", - "%s присоединяется к формации - глаза острее теперь, %.0f%s воздух, %.0f%s земля дальность.", - }, - formationLeave = { - "%s покинул формацию - обнаружение воздушных целей снижено до %.0f%s, наземных до %.0f%s.", - "%s ушел - обнаружение падает до %.0f%s воздух, %.0f%s земля.", - "Формация разорвана %s - дальности теперь %.0f%s воздух, %.0f%s земля.", - "%s отделился - обратно к одиночному обнаружению: %.0f%s воздух, %.0f%s земля.", - }, - formationIntegrityLow = { - "Целостность формации низкая! Сжаться.", - "Стройтесь, пилоты! Мы слишком разбросаны.", - "Сомкните ряды! Целостность формации под угрозой.", - "Вернитесь в формацию, ребята! Мы уязвимы.", - }, - airTargetDetected = { - "Бандит %s на %.0f градусов, %.1f %s, ангелы %.0f (%s)!", - "Вражеский самолет %s: %.0f градусов, %.1f %s, высота %.0f (%s).", - "Боги %s на %.0f часов, %.1f %s, ангелы %.0f (%s).", - "Враждебный контакт %s: %.0f градусов, %.1f %s, %.0f ангелов (%s).", - "Бандит входящий %s: %.0f градусов, %.1f %s, ангелы %.0f (%s).", - }, - groundTargetDetected = { - "%s контакт: %s %s на %.0f градусов, %.1f %s.", - "Наземная угроза: %s %s %s замечен на %.0f градусов, %.1f %s.", - "%s единицы обнаружены: %s %s, %.0f градусов, %.1f %s.", - "Вражеская земля: %s %s %s на пеленге %.0f, %.1f %s расстояние.", - }, - dogfightEngaged = { - "Вступил!", - "Талли хо! Воздушный бой начат.", - "Бандит вступил! Бой идет.", - "Воздушный бой! Оружие горячо.", - }, - dogfightConcluded = { - "Воздушный бой завершен.", - "Бой окончен. Чисто.", - "Воздушный бой закончен. Отбой.", - "Вступление завершено.", - }, - underFire = { - "Под огнем! Разрывай %s!%s", - "Получаем попадания! Уклоняйся %s!%s", - "Выстрелы! Поверни %s сейчас!%s", - "Входящий! Разрывай %s!%s", - }, - closeFlyingCompliment = { - "Отличный полет! Формация концом к концу.", - "Эй, хорошо! Это тесный полет.", - "Отличная работа! Как близко!", - "Полегче там, тигр, я тебя так хорошо не знаю!", - "Впечатляюще! Законцовка к законцовке.", - "Плавные движения! Полет в тесных четвертях.", - "Черт, как тесно! Хороший полет.", - "Святые небеса, как близко! Отлично.", - "Уф, это было близко! Хорошая работа ручкой.", - "Ты приклеен к моему крылу! Отличный полет.", - }, - headOnWarning = { - "Уф! Это было близко!", - "Воу! Почти лобовое!", - "Близкий вызов! Осторожнее с этим проходом.", - "Черт, это было тесно! Будь осторожен.", - "Святые небеса, почти столкнулись!", - }, - markerSet = { - "Маркер установлен на %s.", - "Маркеры теперь %s.", - "Тип маркера изменен на %s.", - }, - dogfightAssistToggle = { - "Помощь в воздушном бою %s.", - "Ассистенс воздушного боя %s.", - }, - activeMessagingToggle = { - "Активные сообщения %s.", - "Живые оповещения %s.", - }, - airScanningToggle = { - "Воздушное сканирование %s.", - "Воздушное обнаружение %s.", - }, - groundScanningToggle = { - "Наземное сканирование %s.", - "Наземное обнаружение %s.", - }, - alertFrequencyToggle = { - "Частота оповещений установлена на %s.", - "Оповещения теперь %s.", - }, - summaryCooldown = { - "Резюме на перезарядке.", - "Подожди немного для другого резюме.", - }, - noThreats = { - "Нет активных угроз.", - "Все чисто.", - "Ситуация нормальная.", - }, - systemActive = "WWII Интуиция Пилота активна! Используйте меню F10 для настроек.", - logLevelSet = "Уровень логирования установлен на: %s", - distanceUnitsSet = "Единицы расстояния установлены на %s.", - targetNotAvailable = "Цель %d недоступна.", - markedTarget = "Цель %d отмечена.", - noIlluminationFlares = "Осветительные ракеты закончились. Приземлитесь на дружественную авиабазу для перевооружения.", - illuminationNotReady = "Освещение не готово. Подождите %d секунд.", - cannotDeterminePosition = "Невозможно определить позицию для сброса осветительной ракеты.", - cannotDetermineAltitude = "Невозможно определить высоту для сброса осветительной ракеты.", - illuminationDropped = "Осветительная ракета сброшена на вашей позиции. (%d осталось)", - cannotDetermineTargetPosition = "Невозможно определить позицию цели для сброса осветительной ракеты.", - errorCouldNotDeterminePosition = "Ошибка: Не удалось определить вашу позицию.", - illuminationDroppedOnTarget = "Осветительная ракета сброшена на Цель %d (%.0f°, %.1f%s). (%d осталось)", - illuminationRearmed = "Осветительные ракеты перезаряжены: %d доступно.", - noGroundTargets = "Вражеские наземные цели в радиусе не обнаружены.", - selectTargetFromMenu = "Выберите цель из меню, чтобы отметить её.", - targetInfo = "Цель %d: %s %s %s, Пеленг %.0f, Дальность %.1f %s", - enabled = "включено", - disabled = "отключено", - hot = "горячий", - cold = "холодный", - closing = "сближение", - opening = "расхождение", - left = "слева", - right = "справа", - above = "сверху", - below = "снизу", - high = "высокий", - low = "низкий", - normal = "нормальный", - quiet = "тихий", - verbose = "подробный", - menu = { - mainTitle = "Интуиция Пилота WWII", - dogfightAssist = "Помощь Воздушный Бой", - enable = "Включить", - disable = "Отключить", - markerType = "Тип Маркера", - smoke = "Дым", - flare = "Ракета", - red = "Красный", - green = "Зеленый", - blue = "Синий", - white = "Белый", - none = "Нет", - airScanning = "Воздушное Сканирование", - groundScanning = "Наземное Сканирование", - groundTargeting = "Наземное Наведение", - scanForTargets = "Сканировать Цели", - markTarget = "Отметить Цель", - target = "Цель %d", - illumination = "Освещение (%d осталось)", - dropAtMyPosition = "Сбросить на Моей Позиции", - dropOnTarget = "Сбросить на Цель", - alertFrequency = "Частота Оповещений", - normalFreq = "Нормальная", - quietFreq = "Тихая", - verboseFreq = "Подробная", - summary = "Резюме", - brief = "Краткое", - detailed = "Подробное", - settingsAndGuides = "Настройки и Руководства", - distanceUnits = "Единицы Расстояния", - milesNautical = "Мили (Морские)", - kilometers = "Километры", - playerGuide = "Руководство Игрока", - systemOverview = "Обзор Системы", - detectionRanges = "Дальности Обнаружения", - dogfightAssistHelp = "Помощь Воздушный Бой", - groundTargetingHelp = "Помощь Наземное Наведение", - formationTips = "Советы по Формации", - illuminationHelp = "Помощь Освещение", - logLevel = "Уровень Логирования", - language = "Language / Sprache / Langue", - english = "English (Английский)", - german = "Deutsch (Немецкий)", - french = "Français (Французский)", - spanish = "Español (Испанский)", - russian = "Русский (Russian)", - } - } -} - --- Backward compatibility: keep old reference for any direct usage -PILOT_INTUITION_MESSAGES = PILOT_INTUITION_LANGUAGES.EN - --- Pilot Intuition Class -PilotIntuition = { - ClassName = "PilotIntuition", - players = {}, -- Table to track per-player data - trackedGroundTargets = {}, -- Global table to track ground targets - lastMessageTime = 0, - menu = nil, - enabled = true, - summaryScheduler = nil, - lastDeepCleanup = 0, -- For periodic deep cleanup - playerMenus = {}, -- Track created player menus to avoid duplicates -} - --- Helper function to format distance based on player preference -function PilotIntuition:FormatDistance(distanceMeters, playerKey) - local distanceUnit = PILOT_INTUITION_CONFIG.distanceUnit - - -- Check for player-specific preference - if playerKey and self.players[playerKey] and self.players[playerKey].distanceUnit then - distanceUnit = self.players[playerKey].distanceUnit - end - - if distanceUnit == "mi" then - -- Convert to nautical miles (1 nautical mile = 1852 meters) - local distanceNM = distanceMeters / 1852 - return distanceNM, "mi" - else - -- Default to kilometers - local distanceKM = distanceMeters / 1000 - return distanceKM, "km" - end -end - --- Helper function to get player's language -function PilotIntuition:GetPlayerLanguage(playerKey) - if playerKey and self.players[playerKey] and self.players[playerKey].language then - return self.players[playerKey].language - end - return PILOT_INTUITION_CONFIG.defaultLanguage -end - --- Helper function to get translated text (non-array messages) -function PilotIntuition:GetText(textKey, playerKey) - local lang = self:GetPlayerLanguage(playerKey) - local langTable = PILOT_INTUITION_LANGUAGES[lang] or PILOT_INTUITION_LANGUAGES.EN - - -- Check if it's a nested key (e.g., "menu.mainTitle") - if string.find(textKey, "%.") then - local parts = {} - for part in string.gmatch(textKey, "[^%.]+") do - table.insert(parts, part) - end - - local value = langTable - for _, part in ipairs(parts) do - if value and type(value) == "table" then - value = value[part] - else - return textKey -- Fallback to key if not found - end - end - return value or textKey - end - - return langTable[textKey] or textKey -end - --- Get random message with player language support -function PilotIntuition:GetRandomMessage(messageType, params, playerKey) - local lang = self:GetPlayerLanguage(playerKey) - local langTable = PILOT_INTUITION_LANGUAGES[lang] or PILOT_INTUITION_LANGUAGES.EN - local messages = langTable[messageType] - - if not messages then - env.info("PilotIntuition: No messages for type " .. tostring(messageType) .. " in language " .. lang) - return "Message type not found: " .. tostring(messageType) - end - - -- Handle both array messages and single string messages - local msg - if type(messages) == "table" and #messages > 0 then - msg = messages[math.random(#messages)] - elseif type(messages) == "string" then - msg = messages - else - return "Invalid message format for: " .. tostring(messageType) - end - - env.info("PilotIntuition: Selected message: " .. msg) - if params then - msg = string.format(msg, unpack(params)) - env.info("PilotIntuition: Formatted message: " .. msg) - end - return msg -end - -function PilotIntuition:New() - PILog(LOG_INFO, "PilotIntuition: System starting") - local self = BASE:Inherit(self, BASE:New()) - self.players = {} - self.trackedGroundTargets = {} - self.lastMessageTime = timer.getTime() - self.playerMenus = {} -- Clear cached menus on initialization - self:SetupMenu() - self:WireEventHandlers() - self:StartScheduler() - PILog(LOG_INFO, "PilotIntuition: System initialized") - return self -end - --- Helper function to get current unit for a clientName -function PilotIntuition:GetUnitForClient(clientName) - if not clientName then - env.info("PilotIntuition: GetUnitForClient - no clientName provided") - return nil - end - - env.info("PilotIntuition: GetUnitForClient looking for: " .. tostring(clientName)) - - -- Try _DATABASE.CLIENTS first - if _DATABASE and _DATABASE.CLIENTS and _DATABASE.CLIENTS[clientName] then - local unitName = _DATABASE.CLIENTS[clientName].UnitName - env.info("PilotIntuition: Found in _DATABASE.CLIENTS, unitName: " .. tostring(unitName)) - if unitName then - local unit = UNIT:FindByName(unitName) - if unit then - env.info("PilotIntuition: UNIT:FindByName succeeded, IsAlive: " .. tostring(unit:IsAlive())) - if unit:IsAlive() then - return unit - end - else - env.info("PilotIntuition: UNIT:FindByName returned nil") - end - end - else - env.info("PilotIntuition: clientName not found in _DATABASE.CLIENTS") - end - - return nil -end - --- Helper function to get player data key from a unit (handles aliasing) -function PilotIntuition:GetPlayerDataKey(playerUnit) - if not playerUnit then return nil end - - local unitName = playerUnit:GetName() - local playerName = playerUnit:GetPlayerName() - - -- Try unit name first (clientName from _DATABASE.CLIENTS) - if self.players[unitName] then - return unitName - end - - -- Try player name second (may be aliased to unit name) - if playerName and self.players[playerName] then - return playerName - end - - -- Try to find player data by searching _DATABASE.CLIENTS for matching unit - if _DATABASE and _DATABASE.CLIENTS then - for clientName, clientData in pairs(_DATABASE.CLIENTS) do - if clientData and clientData.UnitName == unitName then - if self.players[clientName] then - return clientName - end - end - end - end - - return nil -end - --- Helper function to get all active player units -function PilotIntuition:GetActivePlayers() - local players = {} - local count = 0 - - -- Method 1: Try DCS coalition.getPlayers() - for _, coalitionId in pairs({coalition.side.RED, coalition.side.BLUE, coalition.side.NEUTRAL}) do - local success, coalPlayers = pcall(coalition.getPlayers, coalitionId) - if success and coalPlayers then - for _, playerId in pairs(coalPlayers) do - if playerId and type(playerId) == "string" and playerId ~= "" then - local success2, unit = pcall(Unit.getByName, playerId) - if success2 and unit and unit:isExist() and unit:isActive() then - local unitWrapper = UNIT:Find(unit) - if unitWrapper then - local playerName = unitWrapper:GetPlayerName() or unitWrapper:GetName() - players[playerName] = unitWrapper - count = count + 1 - env.info("PilotIntuition: Found player via coalition.getPlayers: " .. playerName) - end - end - end - end - end - end - - -- Method 2: Try _DATABASE.CLIENTS - if _DATABASE and _DATABASE.CLIENTS then - local clientCount = 0 - for clientName, clientData in pairs(_DATABASE.CLIENTS) do - clientCount = clientCount + 1 - PILog(LOG_TRACE, "PilotIntuition: Checking _DATABASE.CLIENTS entry #" .. clientCount .. ": " .. tostring(clientName)) - if clientData then - PILog(LOG_TRACE, " - UnitName: " .. tostring(clientData.UnitName)) - end - if not players[clientName] and clientData and clientData.UnitName then - local unit = UNIT:FindByName(clientData.UnitName) - PILog(LOG_TRACE, " - UNIT:FindByName result: " .. tostring(unit)) - if unit then - PILog(LOG_TRACE, " - Unit:IsAlive: " .. tostring(unit:IsAlive())) - end - if unit and unit:IsAlive() then - players[clientName] = unit - count = count + 1 - PILog(LOG_DEBUG, "PilotIntuition: Found player via _DATABASE.CLIENTS: " .. clientName) - end - end - end - PILog(LOG_DEBUG, "PilotIntuition: _DATABASE.CLIENTS had " .. clientCount .. " total entries") - else - PILog(LOG_ERROR, "PilotIntuition: _DATABASE.CLIENTS not available!") - end - - PILog(LOG_INFO, "PilotIntuition: GetActivePlayers found " .. count .. " players") - return players -end - -function PilotIntuition:ScanTargets() - PILog(LOG_DEBUG, "PilotIntuition: ScanTargets called") - if not self.enabled then - return - end - local startTime = timer.getTime() -- Profiling start - - local activePlayers = self:GetActivePlayers() - local activeClients = {} - local activePlayerNames = {} - - -- Build active client list from the players we found - for clientName, unit in pairs(activePlayers) do - if unit and unit:IsAlive() then - local client = unit:GetClient() - local pos = unit:GetCoordinate() - local actualPlayerName = unit:GetPlayerName() or unit:GetName() - activeClients[#activeClients + 1] = { client = client, unit = unit, name = clientName, pos = pos, coalition = unit:GetCoalition() } - activePlayerNames[clientName] = true - - -- Create player data if it doesn't exist (using clientName as primary key) - if not self.players[clientName] then - self.players[clientName] = { - trackedAirTargets = {}, - lastMessageTime = timer.getTime(), - lastFormationMessageTime = 3, -- Separate cooldown for formation join/leave messages - lastDogfightTime = 0, -- For multi-bandit tactical picture cooldown - wingmenList = {}, - formationWarned = false, - lastFormationChangeTime = 0, - lastConclusionTime = 0, - trackedGroundTargets = {}, - dogfightAssist = PILOT_INTUITION_CONFIG.dogfightAssistEnabled, - lastDogfightAssistTime = 0, - markerType = PILOT_INTUITION_CONFIG.markerType, - lastSpeed = 0, - primaryTarget = nil, - lastPrimaryTargetBearing = nil, - lastSummaryTime = 0, - hasBeenWelcomed = false, - lastComplimentTime = 0, - lastHeadOnWarningTime = 0, - enableAirScanning = PILOT_INTUITION_CONFIG.enableAirScanning, - enableGroundScanning = PILOT_INTUITION_CONFIG.enableGroundScanning, - scannedGroundTargets = {}, -- List of recently scanned ground targets for selection - cachedWingmen = 0, -- Cached wingmen count - lastIlluminationTime = 0, -- Cooldown tracking for illumination flares - illuminationFlares = PILOT_INTUITION_CONFIG.illuminationFlaresDefault, -- Remaining illumination flares - lastWingmenUpdate = 0, - previousWingmen = 0, -- For formation change detection - frequencyMultiplier = 1.0, -- Per-player alert frequency: 1.0=normal, 2.0=quiet, 0.5=verbose - threateningBandits = {}, -- Reusable table for detected threats - lastMultipleBanditsWarningTime = 0, -- Cooldown for "Multiple bandits in vicinity!" message - distanceUnit = PILOT_INTUITION_CONFIG.distanceUnit, -- Player's distance unit preference - language = PILOT_INTUITION_CONFIG.defaultLanguage, -- Player's language preference - } - end - - -- Menu creation now handled by Birth event only - end - end - - -- If no active players, skip the scan - if #activeClients == 0 then - env.info("PilotIntuition: No active players, skipping scan") - return - end - - -- Cache wingmen for each player (updated every scan for simplicity) - for _, info in ipairs(activeClients) do - local playerName = info.name - local playerData = self.players[playerName] - if playerData then - playerData.cachedWingmen = 0 - - -- Count other players in formation - for _, otherInfo in ipairs(activeClients) do - local u = otherInfo.unit - if u and u:IsAlive() and u:GetCoalition() == info.unit:GetCoalition() and u:GetName() ~= info.unit:GetName() then - local dist = info.pos:Get2DDistance(otherInfo.pos) - if dist <= PILOT_INTUITION_CONFIG.formationRange then - playerData.cachedWingmen = playerData.cachedWingmen + 1 - end - end - end - - -- Count AI wingmen if enabled (aircraft only, same coalition) - if PILOT_INTUITION_CONFIG.countAIWingmen then - PILog(LOG_INFO, "PilotIntuition: Checking AI wingmen for player " .. playerName) - - -- Get all friendly AIR units in formation range - local playerCoalition = info.unit:GetCoalition() - local allFriendlyUnits = coalition.getGroups(playerCoalition, Group.Category.AIRPLANE) - local aiCount = 0 - - for _, dcsGroup in ipairs(allFriendlyUnits) do - local mooseGroup = GROUP:Find(dcsGroup) - if mooseGroup and mooseGroup:IsAlive() then - local groupUnits = mooseGroup:GetUnits() - for _, aiUnit in pairs(groupUnits) do - if aiUnit and aiUnit:IsAlive() and aiUnit:GetName() ~= info.unit:GetName() then - -- Verify it's an aircraft (double-check since we filtered by category) - if aiUnit:IsAir() then - -- Check distance first (cheaper than GetPlayerName) - local aiCoord = aiUnit:GetCoordinate() - if aiCoord then - local dist = info.pos:Get2DDistance(aiCoord) - if dist <= PILOT_INTUITION_CONFIG.formationRange then - -- Now check if it's AI (not a player) - local playerName = aiUnit:GetPlayerName() - local isAI = not playerName or playerName == "" - if isAI then - -- Add AI with multiplier (can be fractional) - playerData.cachedWingmen = playerData.cachedWingmen + PILOT_INTUITION_CONFIG.aiWingmenMultiplier - aiCount = aiCount + 1 - PILog(LOG_INFO, "PilotIntuition: Added AI wingman " .. aiUnit:GetName() .. " at " .. math.floor(dist) .. "m, total: " .. playerData.cachedWingmen) - end - end - end - end - end - end - end - end - - PILog(LOG_INFO, "PilotIntuition: Total AI wingmen in formation: " .. aiCount) - end - - PILog(LOG_INFO, "PilotIntuition: Final wingmen count for " .. playerName .. ": " .. playerData.cachedWingmen) - playerData.lastWingmenUpdate = timer.getTime() - end - end - - -- Send welcome message to new players - for _, info in ipairs(activeClients) do - local playerName = info.name - if self.players[playerName] and not self.players[playerName].hasBeenWelcomed and PILOT_INTUITION_CONFIG.showWelcomeMessage then - MESSAGE:New(self:GetRandomMessage("welcome", nil, playerName), 10):ToClient(info.client) - self.players[playerName].hasBeenWelcomed = true - end - end - - -- Clean up stale player data - for playerName, _ in pairs(self.players) do - if not activePlayerNames[playerName] then - self.players[playerName] = nil - end - end - - -- Build enemy unit lists once per coalition for the scan - local enemyAirByCoalition = {} - enemyAirByCoalition[coalition.side.BLUE] = {} - enemyAirByCoalition[coalition.side.RED] = {} - PILog(LOG_INFO, "PilotIntuition: Building enemy air unit list from _DATABASE.UNITS...") - local enemyCount = 0 - - -- Iterate directly through Moose's already-populated database - for unitName, unitObj in pairs(_DATABASE.UNITS) do - if unitObj and unitObj:IsAlive() and unitObj:IsAir() then - local c = unitObj:GetCoalition() - if c == coalition.side.BLUE or c == coalition.side.RED then - enemyAirByCoalition[c][#enemyAirByCoalition[c] + 1] = unitObj - enemyCount = enemyCount + 1 - PILog(LOG_INFO, "PilotIntuition: Found enemy air unit: " .. unitName .. " (coalition " .. c .. ")") - end - end - end - PILog(LOG_INFO, "PilotIntuition: Total enemy air units found: " .. enemyCount) - - local enemyGroundByCoalition = {} - enemyGroundByCoalition[coalition.side.BLUE] = {} - enemyGroundByCoalition[coalition.side.RED] = {} - - -- Iterate directly through Moose's already-populated database for ground groups - for groupName, groupObj in pairs(_DATABASE.GROUPS) do - if groupObj and groupObj:IsAlive() and groupObj:IsGround() then - local c = groupObj:GetCoalition() - if c == coalition.side.BLUE or c == coalition.side.RED then - enemyGroundByCoalition[c][#enemyGroundByCoalition[c] + 1] = groupObj - end - end - end - - -- Now scan per active client - for _, info in ipairs(activeClients) do - local client = info.client - local unit = info.unit - local playerName = info.name - local playerData = self.players[playerName] - if playerData and unit and unit:IsAlive() then - -- Determine enemy lists for this player - local playerCoal = unit:GetCoalition() - local enemyCoal = (playerCoal == coalition.side.BLUE) and coalition.side.RED or coalition.side.BLUE - PILog(LOG_INFO, "PilotIntuition: Player " .. playerName .. " coalition: " .. playerCoal .. ", enemy coalition: " .. enemyCoal) - PILog(LOG_INFO, "PilotIntuition: Air scanning enabled: " .. tostring(playerData.enableAirScanning)) - PILog(LOG_INFO, "PilotIntuition: Enemy air units for this player: " .. #(enemyAirByCoalition[enemyCoal] or {})) - if playerData.enableAirScanning then - self:ScanAirTargetsForPlayer(unit, playerData, client, activeClients, enemyAirByCoalition[enemyCoal]) - end - if playerData.enableGroundScanning then - self:ScanGroundTargetsForPlayer(unit, client, activeClients, enemyGroundByCoalition[enemyCoal]) - end - self:CheckCloseFlyingForPlayer(unit, playerData, client, activeClients) - end - end - - -- Prune dead ground targets globally - for id, data in pairs(self.trackedGroundTargets) do - if not data.group:IsAlive() then - self.trackedGroundTargets[id] = nil - end - end - - -- Periodic deep cleanup every 60 seconds - local now = timer.getTime() - if not self.lastDeepCleanup or (now - self.lastDeepCleanup) > 60 then - self:DeepCleanup() - self.lastDeepCleanup = now - end - - local endTime = timer.getTime() -- Profiling end - PILog(LOG_DEBUG, string.format("PilotIntuition: ScanTargets completed in %.3f seconds", endTime - startTime)) -end - -function PilotIntuition:DeepCleanup() - env.info("PilotIntuition: Performing deep cleanup") - -- Force remove any stale tracked targets - for playerName, playerData in pairs(self.players) do - for id, data in pairs(playerData.trackedAirTargets) do - if not data.unit or not data.unit:IsAlive() then - playerData.trackedAirTargets[id] = nil - end - end - for id, _ in pairs(playerData.trackedGroundTargets) do - if not self.trackedGroundTargets[id] or not self.trackedGroundTargets[id].group:IsAlive() then - playerData.trackedGroundTargets[id] = nil - end - end - end - -- Clean global ground targets - for id, data in pairs(self.trackedGroundTargets) do - if not data.group:IsAlive() then - self.trackedGroundTargets[id] = nil - end - end - env.info("PilotIntuition: Deep cleanup completed") -end - --- Setup the mission and per-player menus for pilot intuition toggles -function PilotIntuition:SetupMenu() - PILog(LOG_INFO, "PilotIntuition: SetupMenu called - creating menus for existing players") - - -- Create menus for any players already in the mission (e.g., mission editor start) - SCHEDULER:New(nil, function() - local activePlayers = self:GetActivePlayers() - for clientName, unit in pairs(activePlayers) do - if unit and unit:IsAlive() then - local group = unit:GetGroup() - if group then - local groupName = group:GetName() - if not self.playerMenus[groupName] then - PILog(LOG_INFO, "PilotIntuition: Creating menu for existing player group: " .. groupName) - self.playerMenus[groupName] = self:BuildGroupMenus(group) - MESSAGE:New(self:GetText("systemActive", group:GetUnit(1):GetPlayerName()), 10):ToGroup(group) - end - end - end - end - end, {}, 2) -- Wait 2 seconds for mission to fully load -end - --- BuildGroupMenus: Creates full menu tree for a player group (CTLD-style) -function PilotIntuition:BuildGroupMenus(group) - PILog(LOG_INFO, "PilotIntuition: BuildGroupMenus called for group: " .. group:GetName()) - - -- Verify group is valid and has units - if not group or not group:IsAlive() then - PILog(LOG_ERROR, "PilotIntuition: Cannot create menu - group is nil or not alive") - return nil - end - - -- Get first unit in group for callbacks and language - local unit = group:GetUnit(1) - if not unit then - PILog(LOG_ERROR, "PilotIntuition: WARNING - No unit found in group") - return nil - end - - local playerKey = self:GetPlayerDataKey(unit) - - -- Create the main menu for this group with translated text - local playerSubMenu = MENU_GROUP:New(group, self:GetText("menu.mainTitle", playerKey)) - PILog(LOG_INFO, "PilotIntuition: Main menu created for group: " .. group:GetName()) - - -- Dogfight Assist submenu - local dogfightMenu = MENU_GROUP:New(group, self:GetText("menu.dogfightAssist", playerKey), playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.enable", playerKey), dogfightMenu, function() self:MenuSetPlayerDogfightAssist(unit, true) end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.disable", playerKey), dogfightMenu, function() self:MenuSetPlayerDogfightAssist(unit, false) end) - - -- Marker Type submenu - local markerMenu = MENU_GROUP:New(group, self:GetText("menu.markerType", playerKey), playerSubMenu) - local smokeMenu = MENU_GROUP:New(group, self:GetText("menu.smoke", playerKey), markerMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.red", playerKey), smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_red") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.green", playerKey), smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_green") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.blue", playerKey), smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_blue") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.white", playerKey), smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_white") end) - local flareMenu = MENU_GROUP:New(group, self:GetText("menu.flare", playerKey), markerMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.red", playerKey), flareMenu, function() self:MenuSetPlayerMarker(unit, "flare_red") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.green", playerKey), flareMenu, function() self:MenuSetPlayerMarker(unit, "flare_green") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.white", playerKey), flareMenu, function() self:MenuSetPlayerMarker(unit, "flare_white") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.none", playerKey), markerMenu, function() self:MenuSetPlayerMarker(unit, "none") end) - - -- Air scanning submenu - local airScanMenu = MENU_GROUP:New(group, self:GetText("menu.airScanning", playerKey), playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.enable", playerKey), airScanMenu, function() self:MenuSetPlayerAirScanning(unit, true) end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.disable", playerKey), airScanMenu, function() self:MenuSetPlayerAirScanning(unit, false) end) - - -- Ground scanning submenu - local groundScanMenu = MENU_GROUP:New(group, self:GetText("menu.groundScanning", playerKey), playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.enable", playerKey), groundScanMenu, function() self:MenuSetPlayerGroundScanning(unit, true) end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.disable", playerKey), groundScanMenu, function() self:MenuSetPlayerGroundScanning(unit, false) end) - - -- Ground targeting submenu - local groundMenu = MENU_GROUP:New(group, self:GetText("menu.groundTargeting", playerKey), playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.scanForTargets", playerKey), groundMenu, function() self:MenuScanGroundTargets(unit) end) - local markMenu = MENU_GROUP:New(group, self:GetText("menu.markTarget", playerKey), groundMenu) - for i=1,5 do - local captureIndex = i - local targetLabel = string.format(self:GetText("menu.target", playerKey), i) - MENU_GROUP_COMMAND:New(group, targetLabel, markMenu, function() self:MenuMarkGroundTarget(unit, captureIndex) end) - end - - -- Illumination submenu with dynamic count display - local playerName = unit:GetPlayerName() or unit:GetName() - local flareCount = (self.players[playerName] and self.players[playerName].illuminationFlares) or PILOT_INTUITION_CONFIG.illuminationFlaresDefault - local illuLabel = string.format(self:GetText("menu.illumination", playerKey), flareCount) - local illuMenu = MENU_GROUP:New(group, illuLabel, playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.dropAtMyPosition", playerKey), illuMenu, function() self:MenuDropIlluminationAtPlayer(unit) end) - local illuTargetMenu = MENU_GROUP:New(group, self:GetText("menu.dropOnTarget", playerKey), illuMenu) - for i=1,5 do - local captureIndex = i - local targetLabel = string.format(self:GetText("menu.target", playerKey), i) - MENU_GROUP_COMMAND:New(group, targetLabel, illuTargetMenu, function() self:MenuDropIlluminationOnTarget(unit, captureIndex) end) - end - - -- Alert frequency submenu - local freqMenu = MENU_GROUP:New(group, self:GetText("menu.alertFrequency", playerKey), playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.normalFreq", playerKey), freqMenu, function() self:MenuSetPlayerAlertFrequency(unit, "normal") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.quietFreq", playerKey), freqMenu, function() self:MenuSetPlayerAlertFrequency(unit, "quiet") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.verboseFreq", playerKey), freqMenu, function() self:MenuSetPlayerAlertFrequency(unit, "verbose") end) - - -- Summary submenu - local summaryMenu = MENU_GROUP:New(group, self:GetText("menu.summary", playerKey), playerSubMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.brief", playerKey), summaryMenu, function() self:MenuSendPlayerSummary(unit, "brief") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.detailed", playerKey), summaryMenu, function() self:MenuSendPlayerSummary(unit, "detailed") end) - - -- Admin Settings submenu (placed last) - local adminMenu = MENU_GROUP:New(group, self:GetText("menu.settingsAndGuides", playerKey), playerSubMenu) - - -- Language selection submenu (under admin) - Keep multilingual for accessibility - local langMenu = MENU_GROUP:New(group, "Language / Sprache / Langue", adminMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.english", playerKey), langMenu, function() self:MenuSetPlayerLanguage(unit, "EN") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.german", playerKey), langMenu, function() self:MenuSetPlayerLanguage(unit, "DE") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.french", playerKey), langMenu, function() self:MenuSetPlayerLanguage(unit, "FR") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.spanish", playerKey), langMenu, function() self:MenuSetPlayerLanguage(unit, "ES") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.russian", playerKey), langMenu, function() self:MenuSetPlayerLanguage(unit, "RU") end) - - -- Distance units submenu (under admin) - local distMenu = MENU_GROUP:New(group, self:GetText("menu.distanceUnits", playerKey), adminMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.milesNautical", playerKey), distMenu, function() self:MenuSetPlayerDistanceUnit(unit, "mi") end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.kilometers", playerKey), distMenu, function() self:MenuSetPlayerDistanceUnit(unit, "km") end) - - -- Player Guide submenu - local guideMenu = MENU_GROUP:New(group, self:GetText("menu.playerGuide", playerKey), adminMenu) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.systemOverview", playerKey), guideMenu, function() self:ShowGuideOverview(group) end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.detectionRanges", playerKey), guideMenu, function() self:ShowGuideRanges(group) end) - MENU_GROUP_COMMAND:New(group, self:GetText("menu.formationTips", playerKey), guideMenu, function() self:ShowGuideFormation(group) end) - MENU_GROUP_COMMAND:New(group, "Environment Effects", guideMenu, function() self:ShowGuideEnvironment(group) end) - - -- Log level submenu (global setting) - local logMenu = MENU_GROUP:New(group, self:GetText("menu.logLevel", playerKey), adminMenu) - MENU_GROUP_COMMAND:New(group, "Error Only", logMenu, function() self:SetLogLevel(1, group) end) - MENU_GROUP_COMMAND:New(group, "Info (Default)", logMenu, function() self:SetLogLevel(2, group) end) - MENU_GROUP_COMMAND:New(group, "Debug", logMenu, function() self:SetLogLevel(3, group) end) - MENU_GROUP_COMMAND:New(group, "Trace (Verbose)", logMenu, function() self:SetLogLevel(4, group) end) - - PILog(LOG_INFO, "PilotIntuition: Menu created successfully for group " .. group:GetName()) - return playerSubMenu -end - --- Rebuild menu for a player group (used when illumination flare count changes) -function PilotIntuition:RebuildPlayerMenu(unit) - if not unit or not unit:IsAlive() then - PILog(LOG_ERROR, "PilotIntuition: RebuildPlayerMenu - invalid unit") - return - end - - local group = unit:GetGroup() - if not group then - PILog(LOG_ERROR, "PilotIntuition: RebuildPlayerMenu - no group found") - return - end - - local groupName = group:GetName() - PILog(LOG_DEBUG, "PilotIntuition: Rebuilding menu for group: " .. groupName) - - -- Remove old menu if it exists - if self.playerMenus[groupName] then - local oldMenu = self.playerMenus[groupName] - if oldMenu and oldMenu.Remove then - oldMenu:Remove() - PILog(LOG_DEBUG, "PilotIntuition: Removed old menu for group: " .. groupName) - end - self.playerMenus[groupName] = nil - end - - -- Build new menu - self.playerMenus[groupName] = self:BuildGroupMenus(group) - PILog(LOG_INFO, "PilotIntuition: Menu rebuilt successfully for group: " .. groupName) -end - -function PilotIntuition:SetLogLevel(level, group) - PILOT_INTUITION_LOG_LEVEL = level - local labels = {"None", "Error", "Info", "Debug", "Trace"} - MESSAGE:New("Log level set to: " .. (labels[level + 1] or "Unknown"), 5):ToGroup(group) - PILog(LOG_INFO, "PilotIntuition: Log level changed to " .. level) -end - --- Player Guide functions -function PilotIntuition:ShowGuideOverview(group) - local msg = "WWII PILOT INTUITION - SYSTEM OVERVIEW\n\n" - msg = msg .. "This system simulates WWII-era pilot awareness without modern radar or labels.\n\n" - msg = msg .. "KEY FEATURES:\n" - msg = msg .. "• Air & Ground target detection based on visual ranges\n" - msg = msg .. "• Formation flying SIGNIFICANTLY boosts detection ranges\n" - msg = msg .. "• Dogfight assistance (merge warnings, tail alerts, energy state)\n" - msg = msg .. "• Optional smoke/flare markers for spotted targets\n" - msg = msg .. "• Environmental effects (night, weather reduce ranges)\n\n" - msg = msg .. "Use F10 menu to customize settings per pilot.\n" - msg = msg .. "Check other guide sections for detailed mechanics." - MESSAGE:New(msg, 20):ToGroup(group) -end - -function PilotIntuition:ShowGuideRanges(group) - local airRange = PILOT_INTUITION_CONFIG.airDetectionRange - local groundRange = PILOT_INTUITION_CONFIG.groundDetectionRange - local maxMult = PILOT_INTUITION_CONFIG.maxMultiplier - local formRange = PILOT_INTUITION_CONFIG.formationRange - - local msg = "DETECTION RANGES\n\n" - msg = msg .. "BASE RANGES (Solo Flight):\n" - msg = msg .. "• Air Targets: " .. airRange .. "m (~" .. math.floor(airRange / 1852 * 10) / 10 .. "nm)\n" - msg = msg .. "• Ground Targets: " .. groundRange .. "m (~" .. math.floor(groundRange / 1852 * 10) / 10 .. "nm)\n\n" - msg = msg .. "FORMATION MULTIPLIERS:\n" - msg = msg .. "Solo: 1.0x (base range)\n" - msg = msg .. "2-ship: 2.0x (double range)\n" - msg = msg .. "3-ship: 3.0x (triple range)\n" - msg = msg .. "4-ship: 4.0x (quadruple range)\n" - if maxMult >= 5 then - msg = msg .. "5-ship: 5.0x\n" - end - if maxMult >= 6 then - msg = msg .. "6+ ship: " .. maxMult .. ".0x (maximum)\n\n" - else - msg = msg .. maxMult .. "+ ship: " .. maxMult .. ".0x (maximum)\n\n" - end - msg = msg .. "EXAMPLE (Air Detection):\n" - local solo = math.floor(airRange / 1000) - local twoship = math.floor(airRange * 2 / 1000) - local fourship = math.floor(airRange * math.min(4, maxMult) / 1000) - msg = msg .. "Solo: " .. solo .. "km | 2-ship: " .. twoship .. "km | 4-ship: " .. fourship .. "km\n\n" - msg = msg .. "Formation = wingmen within " .. formRange .. "m (~" .. math.floor(formRange / 1852 * 10) / 10 .. "nm)" - MESSAGE:New(msg, 25):ToGroup(group) -end - -function PilotIntuition:ShowGuideFormation(group) - local formRange = PILOT_INTUITION_CONFIG.formationRange - local maxMult = PILOT_INTUITION_CONFIG.maxMultiplier - local minWingmen = PILOT_INTUITION_CONFIG.minFormationWingmen - - local msg = "FORMATION FLYING BENEFITS\n\n" - msg = msg .. "Formation flying is CRITICAL for situational awareness!\n\n" - msg = msg .. "FORMATION REQUIREMENTS:\n" - msg = msg .. "• Wingmen must be within " .. formRange .. "m (~" .. math.floor(formRange / 1852 * 10) / 10 .. "nm)\n" - msg = msg .. "• Same coalition (friendlies only)\n" - msg = msg .. "• Aircraft must be alive and player-controlled\n" - msg = msg .. "• Minimum wingmen for warnings: " .. minWingmen .. "\n\n" - msg = msg .. "DETECTION BOOST:\n" - msg = msg .. "Each additional wingman adds 1.0x to your detection range (up to " .. maxMult .. ".0x max).\n\n" - msg = msg .. "TACTICAL ADVANTAGE:\n" - local fourShipMult = math.min(4, maxMult) - msg = msg .. "• 4-ship formation sees " .. fourShipMult .. "x further than solo\n" - msg = msg .. "• Spot bandits before they spot you\n" - msg = msg .. "• Better ground reconnaissance coverage\n" - MESSAGE:New(msg, 25):ToGroup(group) -end - -function PilotIntuition:ShowGuideEnvironment(group) - local nightMult = PILOT_INTUITION_CONFIG.nightDetectionMultiplier - local weatherMult = PILOT_INTUITION_CONFIG.badWeatherMultiplier - local mergeRange = PILOT_INTUITION_CONFIG.mergeRange - local tailRange = PILOT_INTUITION_CONFIG.tailWarningRange - local headOnRange = PILOT_INTUITION_CONFIG.headOnRange - local beamRange = PILOT_INTUITION_CONFIG.beamRange - local combinedMult = nightMult * weatherMult - - local msg = "ENVIRONMENT EFFECTS\n\n" - msg = msg .. "Detection ranges are affected by conditions:\n\n" - msg = msg .. "NIGHT TIME:\n" - msg = msg .. "• " .. (nightMult * 100) .. "% detection range\n" - msg = msg .. "• Harder to spot targets in darkness\n" - msg = msg .. "• Formation flying still helps!\n\n" - msg = msg .. "BAD WEATHER:\n" - msg = msg .. "• " .. (weatherMult * 100) .. "% detection range\n" - msg = msg .. "• Rain, fog, clouds reduce visibility\n" - msg = msg .. "• Stacks with night penalty\n\n" - msg = msg .. "COMBINED EFFECTS:\n" - msg = msg .. "Night + Bad Weather = ~" .. math.floor(combinedMult * 100) .. "% of normal range.\n\n" - msg = msg .. "DOGFIGHT RANGES:\n" - msg = msg .. "• Merge: " .. mergeRange .. "m\n" - msg = msg .. "• Tail Warning: " .. tailRange .. "m\n" - msg = msg .. "• Head-On: " .. headOnRange .. "m\n" - msg = msg .. "• Beam: " .. beamRange .. "m\n\n" - msg = msg .. "These ranges are NOT affected by environment - they're visual merge distances." - MESSAGE:New(msg, 30):ToGroup(group) -end - --- WireEventHandlers: Set up Birth event handler (CTLD-style) -function PilotIntuition:WireEventHandlers() - PILog(LOG_INFO, "PilotIntuition: Wiring event handlers using EVENTHANDLER") - - local handler = EVENTHANDLER:New() - handler:HandleEvent(EVENTS.Birth) - handler:HandleEvent(EVENTS.PlayerEnterUnit) - handler:HandleEvent(EVENTS.Shot) - handler:HandleEvent(EVENTS.Land) - - local selfref = self - - function handler:OnEventBirth(EventData) - if not EventData or not EventData.IniUnit then return end - local unit = EventData.IniUnit - if not unit or not unit:IsAlive() then return end - - -- Only create menus for player-controlled units - local playerName = unit:GetPlayerName() - if not playerName then - PILog(LOG_TRACE, "PilotIntuition: Birth event for non-player unit, skipping menu creation") - return - end - - local group = unit:GetGroup() - if not group then return end - local groupName = group:GetName() - - -- Simple check: if menu exists for this group, skip - if selfref.playerMenus[groupName] then - PILog(LOG_DEBUG, "PilotIntuition: Menu already exists for group: " .. groupName) - return - end - - PILog(LOG_INFO, "PilotIntuition: Birth event - creating menu for player group: " .. groupName) - selfref.playerMenus[groupName] = selfref:BuildGroupMenus(group) - - -- Send welcome message to group - MESSAGE:New("WWII Pilot Intuition active! Use F10 menu for settings.", 10):ToGroup(group) - end - - function handler:OnEventPlayerEnterUnit(EventData) - if not EventData or not EventData.IniUnit then return end - local unit = EventData.IniUnit - if not unit or not unit:IsAlive() then return end - - local group = unit:GetGroup() - if not group then return end - local groupName = group:GetName() - - PILog(LOG_INFO, "PilotIntuition: PlayerEnterUnit event for group: " .. groupName) - - -- Add a small delay to ensure the unit is fully initialized in multiplayer - SCHEDULER:New(nil, function() - -- Check if menu already exists - if not selfref.playerMenus[groupName] then - PILog(LOG_INFO, "PilotIntuition: Creating menu for player group: " .. groupName) - selfref.playerMenus[groupName] = selfref:BuildGroupMenus(group) - MESSAGE:New("WWII Pilot Intuition active! Use F10 menu for settings.", 10):ToGroup(group) - else - PILog(LOG_DEBUG, "PilotIntuition: Menu already exists for group: " .. groupName) - end - end, {}, 1) - end - - function handler:OnEventShot(EventData) - selfref:OnPlayerShot(EventData) - selfref:OnShotFired(EventData) - end - - function handler:OnEventLand(EventData) - if not EventData or not EventData.IniUnit then return end - local unit = EventData.IniUnit - if not unit or not unit:IsAlive() then return end - - -- Check if it's a player unit - local playerName = unit:GetPlayerName() - if not playerName then return end - - local playerData = selfref.players[playerName] - if not playerData then return end - - -- Check if landed at a friendly airbase - local place = EventData.Place - if place and place:getCoalition() == unit:GetCoalition() then - -- Rearm illumination flares - local prevCount = playerData.illuminationFlares or 0 - playerData.illuminationFlares = PILOT_INTUITION_CONFIG.illuminationFlaresDefault - - local client = unit:GetClient() - if client and prevCount < PILOT_INTUITION_CONFIG.illuminationFlaresDefault then - MESSAGE:New(string.format(self:GetText("illuminationRearmed", clientName), PILOT_INTUITION_CONFIG.illuminationFlaresDefault), 10):ToClient(client) - end - - PILog(LOG_INFO, "PilotIntuition: Player " .. playerName .. " rearmed illumination flares at friendly airbase") - end - end - - self.EventHandler = handler - PILog(LOG_INFO, "PilotIntuition: Event handlers wired successfully") -end - -function PilotIntuition:OnPlayerEnterUnit(EventData) - env.info("PilotIntuition: OnPlayerEnterUnit event triggered") - if EventData and EventData.IniUnit then - local unit = EventData.IniUnit - if unit and unit:IsAlive() then - env.info("PilotIntuition: Player entered unit: " .. tostring(unit:GetName())) - -- Small delay to ensure unit is fully initialized - SCHEDULER:New(nil, function() - self:SetupPlayerMenus() - end, {}, 2) - end - end -end - -function PilotIntuition:SetupPlayerMenus() - env.info("PilotIntuition: SetupPlayerMenus called") - - local activePlayers = self:GetActivePlayers() - local playersFound = 0 - - for clientName, unit in pairs(activePlayers) do - playersFound = playersFound + 1 - env.info("PilotIntuition: Processing player: " .. tostring(clientName)) - - if unit and unit:IsAlive() then - env.info("PilotIntuition: Unit is alive: " .. tostring(unit:GetName())) - - -- Get the actual player name for aliasing - local actualPlayerName = unit:GetPlayerName() or unit:GetName() - - -- Ensure player data exists (may have been created by ScanTargets) - if not self.players[clientName] then - self.players[clientName] = { - trackedAirTargets = {}, - lastMessageTime = timer.getTime(), - lastDogfightTime = 0, -- For multi-bandit tactical picture cooldown - wingmenList = {}, - formationWarned = false, - lastFormationChangeTime = 0, - lastConclusionTime = 0, - trackedGroundTargets = {}, - dogfightAssist = PILOT_INTUITION_CONFIG.dogfightAssistEnabled, - lastDogfightAssistTime = 0, - markerType = PILOT_INTUITION_CONFIG.markerType, - lastSpeed = 0, - primaryTarget = nil, - lastPrimaryTargetBearing = nil, - lastSummaryTime = 0, - hasBeenWelcomed = false, - lastComplimentTime = 0, - lastHeadOnWarningTime = 0, - enableAirScanning = PILOT_INTUITION_CONFIG.enableAirScanning, - enableGroundScanning = PILOT_INTUITION_CONFIG.enableGroundScanning, - scannedGroundTargets = {}, - cachedWingmen = 0, - lastWingmenUpdate = 0, - previousWingmen = 0, - frequencyMultiplier = 1.0, - threateningBandits = {}, -- Reusable table for detected threats - distanceUnit = PILOT_INTUITION_CONFIG.distanceUnit, - language = PILOT_INTUITION_CONFIG.defaultLanguage, - } - end - - -- Create alias for actual player name - if actualPlayerName ~= clientName then - env.info("PilotIntuition: Creating player alias in SetupPlayerMenus: '" .. actualPlayerName .. "' -> '" .. clientName .. "'") - self.players[actualPlayerName] = self.players[clientName] - end - - local playerGroup = unit:GetGroup() - if not playerGroup then - env.info("PilotIntuition: No group found for unit " .. tostring(unit:GetName())) - else - -- Skip if menu already created for this player - if self.playerMenus[clientName] then - env.info("PilotIntuition: Menu already exists for " .. clientName) - else - env.info("PilotIntuition: Creating menu for player " .. clientName) - - -- Create the main menu for this player's group - local playerSubMenu = MENU_GROUP:New(playerGroup, "WWII Pilot Intuition") - local currentGroupName = playerGroup:GetName() - self.playerMenus[clientName] = { - menu = playerSubMenu, - groupName = currentGroupName - } - - -- Dogfight Assist submenu - local dogfightMenu = MENU_GROUP:New(playerGroup, "Dogfight Assist", playerSubMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Enable", dogfightMenu, function() self:MenuSetPlayerDogfightAssist(unit, true) end) - MENU_GROUP_COMMAND:New(playerGroup, "Disable", dogfightMenu, function() self:MenuSetPlayerDogfightAssist(unit, false) end) - - -- Marker Type submenu - local markerMenu = MENU_GROUP:New(playerGroup, "Marker Type", playerSubMenu) - local smokeMenu = MENU_GROUP:New(playerGroup, "Smoke", markerMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Red", smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_red") end) - MENU_GROUP_COMMAND:New(playerGroup, "Green", smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_green") end) - MENU_GROUP_COMMAND:New(playerGroup, "Blue", smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_blue") end) - MENU_GROUP_COMMAND:New(playerGroup, "White", smokeMenu, function() self:MenuSetPlayerMarker(unit, "smoke_white") end) - local flareMenu = MENU_GROUP:New(playerGroup, "Flare", markerMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Red", flareMenu, function() self:MenuSetPlayerMarker(unit, "flare_red") end) - MENU_GROUP_COMMAND:New(playerGroup, "Green", flareMenu, function() self:MenuSetPlayerMarker(unit, "flare_green") end) - MENU_GROUP_COMMAND:New(playerGroup, "White", flareMenu, function() self:MenuSetPlayerMarker(unit, "flare_white") end) - MENU_GROUP_COMMAND:New(playerGroup, "None", markerMenu, function() self:MenuSetPlayerMarker(unit, "none") end) - - -- Air scanning submenu - local airScanMenu = MENU_GROUP:New(playerGroup, "Air Scanning", playerSubMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Enable", airScanMenu, function() self:MenuSetPlayerAirScanning(unit, true) end) - MENU_GROUP_COMMAND:New(playerGroup, "Disable", airScanMenu, function() self:MenuSetPlayerAirScanning(unit, false) end) - - -- Ground scanning submenu - local groundScanMenu = MENU_GROUP:New(playerGroup, "Ground Scanning", playerSubMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Enable", groundScanMenu, function() self:MenuSetPlayerGroundScanning(unit, true) end) - MENU_GROUP_COMMAND:New(playerGroup, "Disable", groundScanMenu, function() self:MenuSetPlayerGroundScanning(unit, false) end) - - -- Ground targeting submenu - local groundMenu = MENU_GROUP:New(playerGroup, "Ground Targeting", playerSubMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Scan for Targets", groundMenu, function() self:MenuScanGroundTargets(unit) end) - local markMenu = MENU_GROUP:New(playerGroup, "Mark Target", groundMenu) - for i=1,5 do - MENU_GROUP_COMMAND:New(playerGroup, "Target " .. i, markMenu, function() self:MenuMarkGroundTarget(unit, i) end) - end - - -- Alert frequency submenu - local freqMenu = MENU_GROUP:New(playerGroup, "Alert Frequency", playerSubMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Normal", freqMenu, function() self:MenuSetPlayerAlertFrequency(unit, "normal") end) - MENU_GROUP_COMMAND:New(playerGroup, "Quiet", freqMenu, function() self:MenuSetPlayerAlertFrequency(unit, "quiet") end) - MENU_GROUP_COMMAND:New(playerGroup, "Verbose", freqMenu, function() self:MenuSetPlayerAlertFrequency(unit, "verbose") end) - - -- Summary submenu - local summaryMenu = MENU_GROUP:New(playerGroup, "Summary", playerSubMenu) - MENU_GROUP_COMMAND:New(playerGroup, "Brief", summaryMenu, function() self:MenuSendPlayerSummary(unit, "brief") end) - MENU_GROUP_COMMAND:New(playerGroup, "Detailed", summaryMenu, function() self:MenuSendPlayerSummary(unit, "detailed") end) - - env.info("PilotIntuition: Menu created successfully for " .. clientName) - end - end - end - end - - env.info("PilotIntuition: SetupPlayerMenus completed, processed " .. playersFound .. " players") -end - -function PilotIntuition:MenuSetPlayerMarker(playerUnit, markerType) - env.info("====== PilotIntuition: MenuSetPlayerMarker CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - env.info("PilotIntuition: playerUnit:GetPlayerName() = " .. tostring(playerUnit:GetPlayerName())) - end - env.info("PilotIntuition: markerType = " .. tostring(markerType)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - -- store as player pref only - not global config - if playerKey and self.players[playerKey] then - self.players[playerKey].markerType = markerType - local client = playerUnit:GetClient() - if client then - local niceType = markerType:gsub("_", " "):gsub("(%w)(%w*)", function(first, rest) return first:upper() .. rest:lower() end) - MESSAGE:New(self:GetRandomMessage("markerSet", {niceType}, playerName), 10):ToClient(client) - end - end -end -function PilotIntuition:MenuSetMarkerType(type) - env.info("PilotIntuition: MenuSetMarkerType called with " .. tostring(type)) - PILOT_INTUITION_CONFIG.markerType = type - local niceType = type:gsub("_", " "):gsub("(%w)(%w*)", function(first, rest) return first:upper() .. rest:lower() end) - local msg = self:GetRandomMessage("markerSet", {niceType}) - env.info("PilotIntuition: Marker message: " .. msg) - self:BroadcastMessageToAll(msg) -end - -function PilotIntuition:MenuSetPlayerDogfightAssist(playerUnit, onoff) - env.info("====== PilotIntuition: MenuSetPlayerDogfightAssist CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: onoff = " .. tostring(onoff)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - env.info("PilotIntuition: Looking for player data with key: " .. tostring(playerKey)) - env.info("PilotIntuition: Available players: " .. table.concat(self:GetPlayerKeys(), ", ")) - - if playerKey and self.players[playerKey] then - env.info("PilotIntuition: Found player data, setting dogfightAssist to " .. tostring(onoff)) - self.players[playerKey].dogfightAssist = onoff - local status = onoff and "enabled" or "disabled" - local client = playerUnit:GetClient() - env.info("PilotIntuition: Getting client: " .. tostring(client)) - if client then - env.info("PilotIntuition: Sending message to client") - MESSAGE:New(self:GetRandomMessage("dogfightAssistToggle", {status}, playerName), 10):ToClient(client) - else - env.info("PilotIntuition: ERROR - Could not get client") - end - else - env.info("PilotIntuition: ERROR - Player data not found for: " .. tostring(playerKey)) - end -end - -function PilotIntuition:MenuSetPlayerAirScanning(playerUnit, onoff) - env.info("====== PilotIntuition: MenuSetPlayerAirScanning CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: onoff = " .. tostring(onoff)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - if playerKey and self.players[playerKey] then - self.players[playerKey].enableAirScanning = onoff - local status = onoff and "enabled" or "disabled" - local client = playerUnit:GetClient() - if client then - MESSAGE:New(self:GetRandomMessage("airScanningToggle", {status}, playerName), 10):ToClient(client) - end - end -end - -function PilotIntuition:MenuSetPlayerGroundScanning(playerUnit, onoff) - env.info("====== PilotIntuition: MenuSetPlayerGroundScanning CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: onoff = " .. tostring(onoff)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - if playerKey and self.players[playerKey] then - self.players[playerKey].enableGroundScanning = onoff - local status = onoff and "enabled" or "disabled" - local client = playerUnit:GetClient() - if client then - MESSAGE:New(self:GetRandomMessage("groundScanningToggle", {status}, playerName), 10):ToClient(client) - end - end -end - -function PilotIntuition:MenuSetPlayerAlertFrequency(playerUnit, mode) - env.info("====== PilotIntuition: MenuSetPlayerAlertFrequency CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: mode = " .. tostring(mode)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - if playerKey and self.players[playerKey] then - local multiplier - if mode == "normal" then - multiplier = 1.0 - elseif mode == "quiet" then - multiplier = 2.0 - elseif mode == "verbose" then - multiplier = 0.5 - else - multiplier = 1.0 -- Default - end - self.players[playerKey].frequencyMultiplier = multiplier - local client = playerUnit:GetClient() - if client then - MESSAGE:New(self:GetRandomMessage("alertFrequencyToggle", {mode}, playerName), 10):ToClient(client) - end - end -end - -function PilotIntuition:MenuSetPlayerDistanceUnit(playerUnit, unit) - env.info("====== PilotIntuition: MenuSetPlayerDistanceUnit CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: unit = " .. tostring(unit)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - if playerKey and self.players[playerKey] then - self.players[playerKey].distanceUnit = unit - local client = playerUnit:GetClient() - if client then - local unitName = unit == "mi" and "Miles (Nautical)" or "Kilometers" - MESSAGE:New(string.format(self:GetText("distanceUnitsSet", playerKey), unitName), 10):ToClient(client) - end - end -end - -function PilotIntuition:MenuSetPlayerLanguage(playerUnit, language) - env.info("====== PilotIntuition: MenuSetPlayerLanguage CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: language = " .. tostring(language)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - if playerKey and self.players[playerKey] then - -- Validate language - if not PILOT_INTUITION_LANGUAGES[language] then - env.info("PilotIntuition: Invalid language: " .. tostring(language)) - return - end - - self.players[playerKey].language = language - - -- Rebuild the menu immediately to apply language change - self:RebuildPlayerMenu(playerUnit) - - local client = playerUnit:GetClient() - if client then - local langNames = { - EN = "English", - DE = "Deutsch", - FR = "Français", - ES = "Español", - RU = "Русский" - } - local msg = string.format("Language set to %s. Menu has been updated.", langNames[language] or language) - MESSAGE:New(msg, 10):ToClient(client) - end - end -end - -function PilotIntuition:MenuScanGroundTargets(playerUnit) - env.info("====== PilotIntuition: MenuScanGroundTargets CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - if not playerUnit or not playerUnit:IsAlive() then - env.info("PilotIntuition: ERROR - No playerUnit provided or unit not alive") - return - end - - local playerPos = playerUnit:GetCoordinate() - if not playerPos then - env.info("PilotIntuition: ERROR - Cannot get player position") - return - end - - local playerKey = self:GetPlayerDataKey(playerUnit) - local playerData = playerKey and self.players[playerKey] - if not playerData then - env.info("PilotIntuition: ERROR - No player data found for " .. tostring(playerKey)) - return - end - - local client = playerUnit:GetClient() - if not client then - env.info("PilotIntuition: ERROR - No client found") - return - end - - -- Collect enemy ground groups within range - local playerCoalition = playerUnit:GetCoalition() - local enemyCoalition = (playerCoalition == coalition.side.BLUE) and coalition.side.RED or coalition.side.BLUE - local allGroups = coalition.getGroups(enemyCoalition) - local enemyGroundGroups = {} - for _, dcsGroup in ipairs(allGroups) do - -- Wrap DCS group object with Moose GROUP - local group = GROUP:Find(dcsGroup) - if group and group:IsAlive() and (dcsGroup:getCategory() == Group.Category.GROUND or dcsGroup:getCategory() == Group.Category.SHIP) then - local groupCoord = group:GetCoordinate() - if groupCoord then - local distance = playerPos:Get2DDistance(groupCoord) - if distance <= PILOT_INTUITION_CONFIG.groundDetectionRange then - table.insert(enemyGroundGroups, {group = group, distance = distance}) - end - end - end - end - - -- Sort by distance - table.sort(enemyGroundGroups, function(a,b) return a.distance < b.distance end) - - -- Take top 5 - local scanned = {} - for i=1, math.min(5, #enemyGroundGroups) do - scanned[i] = enemyGroundGroups[i].group - end - - -- Store in playerData - playerData.scannedGroundTargets = scanned - - -- Send messages listing targets - for i, group in ipairs(scanned) do - local targetPos = group:GetCoordinate() - local bearing = playerPos:HeadingTo(targetPos) -- Returns heading in degrees as number - - -- Ensure bearing is a valid number - if not bearing or type(bearing) ~= "number" then - bearing = 0 -- Fallback to 0 if bearing is invalid - end - - local distanceMeters = playerPos:Get2DDistance(targetPos) - local distance, unit = self:FormatDistance(distanceMeters, playerKey) - local unitType = group:GetUnits()[1]:GetTypeName() - local category = self:ClassifyGroundUnit(unitType) - local groupSize = #group:GetUnits() - local sizeDesc = groupSize == 1 and "single" or (groupSize <= 4 and "group" or "platoon") - MESSAGE:New(string.format("Target %d: %s %s %s, Bearing %.0f, Range %.1f %s", i, category, sizeDesc, unitType, bearing, distance, unit), 30):ToClient(client) - end - - if #scanned == 0 then - MESSAGE:New(self:GetText("noGroundTargets", playerName), 10):ToClient(client) - else - MESSAGE:New(self:GetText("selectTargetFromMenu", playerName), 10):ToClient(client) - end -end - -function PilotIntuition:MenuMarkGroundTarget(playerUnit, index) - env.info("====== PilotIntuition: MenuMarkGroundTarget CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - env.info("PilotIntuition: index = " .. tostring(index)) - if not playerUnit then - env.info("PilotIntuition: ERROR - No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - local playerData = playerKey and self.players[playerKey] - if not playerData then - env.info("PilotIntuition: ERROR - No player data found for " .. tostring(playerKey)) - return - end - local client = playerUnit:GetClient() - if not client then - env.info("PilotIntuition: ERROR - No client found") - return - end - - local scanned = playerData.scannedGroundTargets or {} - local group = scanned[index] - if not group or not group:IsAlive() then - MESSAGE:New("Target " .. index .. " not available.", 10):ToClient(client) - return - end - - -- Mark this target - self:ReportGroundTarget(group, playerUnit, client, true) -- placeMarker = true - MESSAGE:New("Marked Target " .. index .. ".", 10):ToClient(client) -end - -function PilotIntuition:MenuDropIlluminationAtPlayer(playerUnit) - env.info("====== PilotIntuition: MenuDropIlluminationAtPlayer CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - if not playerUnit or not playerUnit:IsAlive() then - env.info("PilotIntuition: ERROR - No playerUnit or unit not alive") - return - end - - local playerKey = self:GetPlayerDataKey(playerUnit) - env.info("PilotIntuition: playerKey = " .. tostring(playerKey)) - - if not playerKey or not self.players[playerKey] then - env.info("PilotIntuition: ERROR - Player data not found for: " .. tostring(playerKey)) - return - end - - local playerData = self.players[playerKey] - local client = playerUnit:GetClient() - if not client then - env.info("PilotIntuition: ERROR - Could not get client") - return - end - - -- Check if player has flares remaining - if (playerData.illuminationFlares or 0) <= 0 then - MESSAGE:New("No illumination flares remaining. Land at a friendly airbase to rearm.", 10):ToClient(client) - return - end - - -- Check cooldown - local now = timer.getTime() - local timeSinceLast = now - (playerData.lastIlluminationTime or 0) - if timeSinceLast < PILOT_INTUITION_CONFIG.illuminationCooldown then - local remaining = math.ceil(PILOT_INTUITION_CONFIG.illuminationCooldown - timeSinceLast) - MESSAGE:New("Illumination not ready. Wait " .. remaining .. " seconds.", 5):ToClient(client) - return - end - - -- Drop illumination flare at player position with altitude offset - local playerPos = playerUnit:GetCoordinate() - if not playerPos then - env.info("PilotIntuition: ERROR - Could not get player coordinate") - MESSAGE:New("Cannot determine position for illumination drop.", 5):ToClient(client) - return - end - PILog(LOG_INFO, "PilotIntuition: Player position: " .. playerPos:ToStringLLDMS()) - - -- Get altitude from unit directly (more reliable than coordinate) - local currentAlt = playerUnit:GetAltitude() - if not currentAlt or type(currentAlt) ~= "number" then - env.info("PilotIntuition: ERROR - Could not get valid altitude from unit") - MESSAGE:New("Cannot determine altitude for illumination drop.", 5):ToClient(client) - return - end - PILog(LOG_INFO, "PilotIntuition: Current altitude: " .. currentAlt .. "m") - - -- Create new coordinate at higher altitude - local illuAlt = currentAlt + PILOT_INTUITION_CONFIG.illuminationAltitude - local illuPos = COORDINATE:NewFromVec3(playerPos:GetVec3()) - illuPos = illuPos:SetAltitude(illuAlt) - PILog(LOG_INFO, "PilotIntuition: Illumination altitude: " .. illuAlt .. "m") - - -- Try to drop illumination bomb - PILog(LOG_INFO, "PilotIntuition: Attempting to drop illumination bomb") - illuPos:IlluminationBomb() - PILog(LOG_INFO, "PilotIntuition: IlluminationBomb() called successfully") - - -- Decrement flare count - playerData.illuminationFlares = playerData.illuminationFlares - 1 - playerData.lastIlluminationTime = now - - MESSAGE:New("Illumination flare dropped at your position. (" .. playerData.illuminationFlares .. " remaining)", 10):ToClient(client) - PILog(LOG_INFO, "PilotIntuition: Player " .. playerKey .. " dropped illumination at own position. " .. playerData.illuminationFlares .. " flares remaining") - - -- Rebuild menu to update flare count display - self:RebuildPlayerMenu(playerUnit) -end - -function PilotIntuition:MenuDropIlluminationOnTarget(playerUnit, index) - env.info("====== PilotIntuition: MenuDropIlluminationOnTarget CALLED ======") - env.info("PilotIntuition: playerUnit = " .. tostring(playerUnit)) - env.info("PilotIntuition: index = " .. tostring(index)) - if playerUnit then - env.info("PilotIntuition: playerUnit:GetName() = " .. tostring(playerUnit:GetName())) - end - if not playerUnit or not playerUnit:IsAlive() then - env.info("PilotIntuition: ERROR - No playerUnit or unit not alive") - return - end - - local playerKey = self:GetPlayerDataKey(playerUnit) - env.info("PilotIntuition: playerKey = " .. tostring(playerKey)) - - if not playerKey or not self.players[playerKey] then - env.info("PilotIntuition: ERROR - Player data not found for: " .. tostring(playerKey)) - return - end - - local playerData = self.players[playerKey] - local client = playerUnit:GetClient() - if not client then - env.info("PilotIntuition: ERROR - Could not get client") - return - end - - -- Check if player has flares remaining - if (playerData.illuminationFlares or 0) <= 0 then - MESSAGE:New("No illumination flares remaining. Land at a friendly airbase to rearm.", 10):ToClient(client) - return - end - - -- Check cooldown - local now = timer.getTime() - local timeSinceLast = now - (playerData.lastIlluminationTime or 0) - if timeSinceLast < PILOT_INTUITION_CONFIG.illuminationCooldown then - local remaining = math.ceil(PILOT_INTUITION_CONFIG.illuminationCooldown - timeSinceLast) - MESSAGE:New("Illumination not ready. Wait " .. remaining .. " seconds.", 5):ToClient(client) - return - end - - -- Get scanned target - local scanned = playerData.scannedGroundTargets or {} - local group = scanned[index] - if not group or not group:IsAlive() then - MESSAGE:New("Target " .. index .. " not available.", 10):ToClient(client) - return - end - - -- Drop illumination flare over target with altitude offset - local targetPos = group:GetCoordinate() - if not targetPos then - env.info("PilotIntuition: ERROR - Could not get target coordinate") - MESSAGE:New("Cannot determine target position for illumination drop.", 5):ToClient(client) - return - end - PILog(LOG_INFO, "PilotIntuition: Target position: " .. targetPos:ToStringLLDMS()) - - -- Get altitude from ground level (ground units are at ground level) - -- Use a safe default altitude for ground targets - local targetAlt = 0 - local firstUnit = group:GetUnit(1) - if firstUnit and firstUnit:IsAlive() then - local unitAlt = firstUnit:GetAltitude() - if unitAlt and type(unitAlt) == "number" then - targetAlt = unitAlt - end - end - PILog(LOG_INFO, "PilotIntuition: Target altitude: " .. targetAlt .. "m") - - -- Create new coordinate at higher altitude - local illuAlt = targetAlt + PILOT_INTUITION_CONFIG.illuminationAltitude - local illuPos = COORDINATE:NewFromVec3(targetPos:GetVec3()) - illuPos = illuPos:SetAltitude(illuAlt) - PILog(LOG_INFO, "PilotIntuition: Illumination altitude: " .. illuAlt .. "m") - - -- Try to drop illumination bomb - PILog(LOG_INFO, "PilotIntuition: Attempting to drop illumination bomb on target") - illuPos:IlluminationBomb() - PILog(LOG_INFO, "PilotIntuition: IlluminationBomb() called successfully") - - -- Decrement flare count - playerData.illuminationFlares = playerData.illuminationFlares - 1 - playerData.lastIlluminationTime = now - - local playerCoord = playerUnit:GetCoordinate() - if not playerCoord then - PILog(LOG_ERROR, "PilotIntuition: Could not get player coordinate for illumination drop") - MESSAGE:New("Error: Could not determine your position.", 10):ToClient(client) - return - end - - local bearing = playerCoord:GetAngleDegrees(playerCoord:GetDirectionVec3(targetPos)) - local rawDistance = playerCoord:Get2DDistance(targetPos) - local distance, unit = self:FormatDistance(rawDistance, playerKey) - MESSAGE:New(string.format("Illumination flare dropped on Target %d (%.0f°, %.1f%s). (%d remaining)", index, bearing, distance, unit, playerData.illuminationFlares), 10):ToClient(client) - PILog(LOG_INFO, "PilotIntuition: Player " .. playerKey .. " dropped illumination on target " .. index .. ". " .. playerData.illuminationFlares .. " flares remaining") - - -- Rebuild menu to update flare count display - self:RebuildPlayerMenu(playerUnit) -end - -function PilotIntuition:MenuSetActiveMessaging(onoff) - env.info("PilotIntuition: MenuSetActiveMessaging called with " .. tostring(onoff)) - PILOT_INTUITION_CONFIG.activeMessaging = onoff - if onoff then - local msg = self:GetRandomMessage("activeMessagingToggle", {"enabled"}) - env.info("PilotIntuition: Active messaging message: " .. msg) - self:BroadcastMessageToAll(msg) - if self.summaryScheduler then - self.summaryScheduler:Stop() - self.summaryScheduler = nil - end - else - local msg = self:GetRandomMessage("activeMessagingToggle", {"disabled. Use summaries for updates."}) - env.info("PilotIntuition: Active messaging message: " .. msg) - self:BroadcastMessageToAll(msg) - if PILOT_INTUITION_CONFIG.summaryInterval > 0 then - self.summaryScheduler = SCHEDULER:New(nil, self.SendScheduledSummaries, {self}, 1, PILOT_INTUITION_CONFIG.summaryInterval) - end - end -end - -function PilotIntuition:MenuSetAirScanning(onoff) - env.info("PilotIntuition: MenuSetAirScanning called with " .. tostring(onoff)) - PILOT_INTUITION_CONFIG.enableAirScanning = onoff - local status = onoff and "enabled" or "disabled" - local msg = self:GetRandomMessage("airScanningToggle", {status}) - env.info("PilotIntuition: Air scanning message: " .. msg) - self:BroadcastMessageToAll(msg) -end - -function PilotIntuition:MenuSetGroundScanning(onoff) - env.info("PilotIntuition: MenuSetGroundScanning called with " .. tostring(onoff)) - PILOT_INTUITION_CONFIG.enableGroundScanning = onoff - local status = onoff and "enabled" or "disabled" - local msg = self:GetRandomMessage("groundScanningToggle", {status}) - env.info("PilotIntuition: Ground scanning message: " .. msg) - self:BroadcastMessageToAll(msg) -end - -function PilotIntuition:MenuSendPlayerSummary(playerUnit, detailLevel) - self:SendPlayerSummary(playerUnit, detailLevel) -end - -function PilotIntuition:BroadcastMessageToAll(text) - env.info("PilotIntuition: Broadcasting message: " .. tostring(text)) - MESSAGE:New(text, 10):ToAll() -- Added duration 10 seconds - env.info("PilotIntuition: Broadcasted to all with duration 10") -end - -function PilotIntuition:GetPlayerSummary(playerName, detailLevel, playerUnit) - local data = self.players[playerName] - if not data then return nil end - - -- Get player position for bearing calculations - local playerPos = nil - local playerHeading = 0 - if playerUnit and playerUnit:IsAlive() then - playerPos = playerUnit:GetCoordinate() - playerHeading = math.deg(playerUnit:GetHeading()) - end - - -- Collect air threats with details - local airThreats = {} - for id, t in pairs(data.trackedAirTargets or {}) do - if t.unit and t.unit:IsAlive() then - local distance = t.lastRange or 0 - local bearing = 0 - local relativeBearing = 0 - local threat = "UNKNOWN" - - if playerPos then - bearing = playerPos:GetAngleDegrees(playerPos:GetDirectionVec3(t.unit:GetCoordinate())) - relativeBearing = (bearing - playerHeading + 360) % 360 - - -- Determine threat level - if distance < PILOT_INTUITION_CONFIG.threatHotRange then - threat = "HOT" - elseif distance < PILOT_INTUITION_CONFIG.threatColdRange then - threat = "COLD" - else - threat = "FAR" - end - end - - table.insert(airThreats, { - name = t.unit:GetTypeName() or "Unknown", - bearing = bearing, - distance = distance, - altitude = t.unit:GetAltitude() or 0, - threat = threat - }) - end - end - - -- Sort air threats by distance (closest first) - table.sort(airThreats, function(a, b) return a.distance < b.distance end) - - -- Collect ground threats with details - local groundThreats = {} - for id, _ in pairs(data.trackedGroundTargets or {}) do - -- Look up actual ground group from global table - local groundData = self.trackedGroundTargets[id] - if groundData and groundData.group and groundData.group:IsAlive() then - local g = groundData.group - local gPos = g:GetCoordinate() - local distance = 0 - local bearing = 0 - local category = "Ground" - - if playerPos and gPos then - distance = playerPos:Get2DDistance(gPos) - bearing = playerPos:GetAngleDegrees(playerPos:GetDirectionVec3(gPos)) - end - - -- Classify ground unit - local firstUnit = g:GetUnit(1) - if firstUnit then - local unitType = firstUnit:GetTypeName() or "" - category = self:ClassifyGroundUnit(unitType) - end - - table.insert(groundThreats, { - name = g:GetName() or "Unknown", - category = category, - bearing = bearing, - distance = distance - }) - end - end - - -- Sort ground threats by distance - table.sort(groundThreats, function(a, b) return a.distance < b.distance end) - - -- Build summary based on detail level - if detailLevel == "brief" then - -- Brief: Quick tactical overview - local parts = {} - - if #airThreats > 0 then - local closest = airThreats[1] - local distance, unit = self:FormatDistance(closest.distance, playerName) - table.insert(parts, string.format("%d bandit%s (closest: %s @ %.1f%s %s)", - #airThreats, - #airThreats > 1 and "s" or "", - closest.name, - distance, - unit, - closest.threat)) - end - - if #groundThreats > 0 then - table.insert(parts, string.format("%d ground group%s", #groundThreats, #groundThreats > 1 and "s" or "")) - end - - -- Formation status - local wingmen = data.cachedWingmen or 0 - if wingmen > 0 then - local mult = (wingmen > 0) and (2 * wingmen) or 1 - if mult > PILOT_INTUITION_CONFIG.maxMultiplier then mult = PILOT_INTUITION_CONFIG.maxMultiplier end - local envMult = self:GetDetectionMultiplier() - local airRange, airUnit = self:FormatDistance(PILOT_INTUITION_CONFIG.airDetectionRange * mult * envMult, playerName) - local groundRange, groundUnit = self:FormatDistance(PILOT_INTUITION_CONFIG.groundDetectionRange * mult * envMult, playerName) - table.insert(parts, string.format("Formation: %d wingmen (detect: %.0f%s air/%.0f%s gnd)", wingmen, airRange, airUnit, groundRange, groundUnit)) - else - table.insert(parts, "Solo (reduced detection)") - end - - if #parts == 0 then - return nil - end - - return table.concat(parts, " | ") - - else - -- Detailed: Full tactical situation report - local lines = {} - table.insert(lines, "=== TACTICAL SITREP ===") - - -- Air threats section - if #airThreats > 0 then - table.insert(lines, "\nAIR THREATS:") - for i, threat in ipairs(airThreats) do - local angels = math.floor(threat.altitude * 3.28084 / 1000) -- Convert to thousands of feet - local distance, unit = self:FormatDistance(threat.distance, playerName) - table.insert(lines, string.format(" %d. %s @ %03d°, %.1f%s, angels %d (%s)", - i, threat.name, math.floor(threat.bearing), distance, unit, angels, threat.threat)) - end - else - table.insert(lines, "\nAIR THREATS: None") - end - - -- Ground threats section - if #groundThreats > 0 then - table.insert(lines, "\nGROUND THREATS:") - for i, threat in ipairs(groundThreats) do - local distance, unit = self:FormatDistance(threat.distance, playerName) - table.insert(lines, string.format(" %d. %s @ %03d°, %.1f%s", - i, threat.category, math.floor(threat.bearing), distance, unit)) - end - else - table.insert(lines, "\nGROUND THREATS: None") - end - - -- Formation and detection status - local wingmen = data.cachedWingmen or 0 - local mult = (wingmen > 0) and (2 * wingmen) or 1 - if mult > PILOT_INTUITION_CONFIG.maxMultiplier then mult = PILOT_INTUITION_CONFIG.maxMultiplier end - local envMult = self:GetDetectionMultiplier() - local airRange, airUnit = self:FormatDistance(PILOT_INTUITION_CONFIG.airDetectionRange * mult * envMult, playerName) - local groundRange, groundUnit = self:FormatDistance(PILOT_INTUITION_CONFIG.groundDetectionRange * mult * envMult, playerName) - - table.insert(lines, "\nFORMATION:") - if wingmen > 0 then - table.insert(lines, string.format(" Wingmen: %d (multiplier: x%d)", wingmen, mult)) - else - table.insert(lines, " Status: Solo flight") - end - table.insert(lines, string.format(" Detection: %.0f%s air, %.0f%s ground", airRange, airUnit, groundRange, groundUnit)) - - return table.concat(lines, "\n") - end -end - -function PilotIntuition:SendPlayerSummary(playerUnit, detailLevel) - env.info("PilotIntuition: SendPlayerSummary called with detailLevel: " .. tostring(detailLevel)) - if not playerUnit then - env.info("PilotIntuition: No playerUnit provided") - return - end - local playerKey = self:GetPlayerDataKey(playerUnit) - env.info("PilotIntuition: Player key from unit: " .. tostring(playerKey)) - local client = playerUnit:GetClient() - if not client then - env.info("PilotIntuition: Could not get client for player") - return - end - if not playerKey or not self.players[playerKey] then - env.info("PilotIntuition: Player data not found for: " .. tostring(playerKey)) - env.info("PilotIntuition: Available players: " .. table.concat(self:GetPlayerKeys(), ", ")) - return - end - local now = timer.getTime() - local data = self.players[playerKey] - if data.lastSummaryTime and (now - data.lastSummaryTime) < (PILOT_INTUITION_CONFIG.summaryCooldown or 2) then - MESSAGE:New(self:GetRandomMessage("summaryCooldown"), 5):ToClient(client) - return - end - local summary = self:GetPlayerSummary(playerKey, detailLevel, playerUnit) - env.info("PilotIntuition: Summary generated: " .. tostring(summary)) - if summary and summary ~= "" then - -- Use longer duration for detailed reports - local duration = (detailLevel == "detailed") and 30 or 15 - MESSAGE:New(summary, duration):ToClient(client) - data.lastSummaryTime = now - else - MESSAGE:New(self:GetRandomMessage("noThreats"), 10):ToClient(client) - end -end - -function PilotIntuition:GetPlayerKeys() - local keys = {} - for k, _ in pairs(self.players) do - table.insert(keys, k) - end - return keys -end - -function PilotIntuition:SendScheduledSummaries() - if not PILOT_INTUITION_CONFIG.activeMessaging then - local clients = SET_CLIENT:New():FilterActive():FilterOnce() - clients:ForEachClient(function(client) - if client and type(client.GetUnit) == "function" then - local unit = client:GetUnit() - if unit and unit:IsAlive() then - self:SendPlayerSummary(unit, "brief") - end - end - end) - end -end - -function PilotIntuition:StartScheduler() - -- Schedule periodic scans - SCHEDULER:New(nil, self.ScanTargets, {self}, 1, PILOT_INTUITION_CONFIG.scanInterval) -end - --- (old ScanTargets removed; using the optimized ScanTargets above) - -function PilotIntuition:ScanAirTargetsForPlayer(playerUnit, playerData, client, activeClients, enemyAirUnits) - local playerKey = self:GetPlayerDataKey(playerUnit) - local playerPos = playerUnit:GetCoordinate() - local playerCoalition = playerUnit:GetCoalition() - local enemyCoalition = (playerCoalition == coalition.side.BLUE) and coalition.side.RED or coalition.side.BLUE - - -- Use cached wingmen count - local wingmen = playerData.cachedWingmen - local multiplier = (wingmen > 0) and (2 * wingmen) or 1 - -- Clamp multiplier to configured maximum - if multiplier > PILOT_INTUITION_CONFIG.maxMultiplier then - multiplier = PILOT_INTUITION_CONFIG.maxMultiplier - end - local envMult = self:GetDetectionMultiplier() - local detectionRange = PILOT_INTUITION_CONFIG.airDetectionRange * multiplier * envMult - - PILog(LOG_DEBUG, string.format("PilotIntuition: Scanning %d enemy air units within %.0fm for player %s", - #enemyAirUnits, detectionRange, playerKey)) - - -- Notify formation changes (suppress during active combat if configured) - local previousWingmen = playerData.previousWingmen or 0 - local now = timer.getTime() - PILog(LOG_DEBUG, "PilotIntuition: Formation check - previous: " .. previousWingmen .. ", current: " .. wingmen .. ", cached: " .. playerData.cachedWingmen) - - -- Check if player is in active combat (has engaged bandits within hot range recently) - local inCombat = false - if PILOT_INTUITION_CONFIG.suppressFormationInCombat then - for _, data in pairs(playerData.trackedAirTargets) do - if data.engaged and (now - (data.lastEngagedTime or 0)) < 30 then - inCombat = true - break - end - end - end - - if not inCombat and (now - playerData.lastFormationMessageTime) >= PILOT_INTUITION_CONFIG.formationMessageCooldown then - local newWingmen = playerData.cachedWingmen - local newMultiplier = (newWingmen > 0) and (2 * newWingmen) or 1 - -- Clamp multiplier to configured maximum - if newMultiplier > PILOT_INTUITION_CONFIG.maxMultiplier then - newMultiplier = PILOT_INTUITION_CONFIG.maxMultiplier - end - local newAirRangeMeters = PILOT_INTUITION_CONFIG.airDetectionRange * newMultiplier * envMult - local newGroundRangeMeters = PILOT_INTUITION_CONFIG.groundDetectionRange * newMultiplier * envMult - - -- Convert to player's preferred units - local newAirRange, airUnit = self:FormatDistance(newAirRangeMeters, playerKey) - local newGroundRange, groundUnit = self:FormatDistance(newGroundRangeMeters, playerKey) - - PILog(LOG_DEBUG, "PilotIntuition: Formation change check - new: " .. newWingmen .. ", prev: " .. previousWingmen .. ", activeMessaging: " .. tostring(PILOT_INTUITION_CONFIG.activeMessaging)) - - if newWingmen > previousWingmen then - PILog(LOG_INFO, "PilotIntuition: Formation joined - sending message") - if PILOT_INTUITION_CONFIG.activeMessaging then - MESSAGE:New(self:GetRandomMessage("formationJoin", {"wingman", newAirRange, airUnit, newGroundRange, groundUnit}), 10):ToClient(client) - end - playerData.lastFormationMessageTime = now - elseif newWingmen < previousWingmen then - PILog(LOG_INFO, "PilotIntuition: Formation left - sending message") - if PILOT_INTUITION_CONFIG.activeMessaging then - MESSAGE:New(self:GetRandomMessage("formationLeave", {"wingman", newAirRange, airUnit, newGroundRange, groundUnit}), 10):ToClient(client) - end - playerData.lastFormationMessageTime = now - end - else - if inCombat then - PILog(LOG_DEBUG, "PilotIntuition: Formation change suppressed - player in combat") - else - PILog(LOG_DEBUG, "PilotIntuition: Formation change message on cooldown") - end - end - playerData.previousWingmen = playerData.cachedWingmen - - -- Formation integrity warning (only if previously had wingmen) - if previousWingmen >= PILOT_INTUITION_CONFIG.minFormationWingmen and wingmen < PILOT_INTUITION_CONFIG.minFormationWingmen then - if not playerData.formationWarned and (now - playerData.lastFormationMessageTime) >= PILOT_INTUITION_CONFIG.formationMessageCooldown then - if PILOT_INTUITION_CONFIG.activeMessaging then - MESSAGE:New(self:GetRandomMessage("formationIntegrityLow"), 10):ToClient(client) - end - playerData.formationWarned = true - playerData.lastFormationMessageTime = now - end - elseif wingmen >= PILOT_INTUITION_CONFIG.minFormationWingmen then - playerData.formationWarned = false - end - - -- Prune dead or out-of-range air targets - for id, data in pairs(playerData.trackedAirTargets) do - if not data.unit:IsAlive() or playerPos:Get2DDistance(data.unit:GetCoordinate()) > detectionRange then - -- Explicitly nil out sub-fields before removing to help GC - data.unit = nil - data.banditName = nil - playerData.trackedAirTargets[id] = nil - end - end - - local banditCount = 0 - local closestUnit = nil - local minDistance = math.huge - -- Reuse existing threateningBandits table to reduce GC pressure - local threateningBandits = playerData.threateningBandits or {} - -- Clear the table (faster than creating new one) - for i = #threateningBandits, 1, -1 do - threateningBandits[i] = nil - end - - for _, unit in ipairs(enemyAirUnits) do - PILog(LOG_DEBUG, string.format("PilotIntuition: Checking enemy unit: %s, IsAlive: %s", - unit and unit:GetName() or "nil", tostring(unit and unit:IsAlive()))) - if unit and unit:IsAlive() then - local unitCoord = unit:GetCoordinate() - if not unitCoord then - PILog(LOG_DEBUG, "PilotIntuition: Could not get coordinate for " .. unit:GetName()) - else - local distance = playerPos:Get2DDistance(unitCoord) - PILog(LOG_DEBUG, string.format("PilotIntuition: Unit %s distance: %.0fm (range: %.0fm)", - unit:GetName(), distance, detectionRange)) - - -- Check if within detection range AND has line of sight - if distance <= detectionRange then - -- Use coordinate-based LOS check from player to enemy - local hasLOS = playerPos:IsLOS(unitCoord) - PILog(LOG_DEBUG, string.format("PilotIntuition: Unit %s in range, LOS check: %s", - unit:GetName(), tostring(hasLOS))) - - if hasLOS then - banditCount = banditCount + 1 - PILog(LOG_DEBUG, string.format("PilotIntuition: Enemy detected with LOS: %s at %.0fm", unit:GetName(), distance)) - if distance < minDistance then - minDistance = distance - closestUnit = unit - end - - local targetID = unit:GetName() - local now = timer.getTime() - - -- Calculate bearing from player to bandit - local bearing = playerPos:HeadingTo(unitCoord) - local playerHeading = playerUnit:GetHeading() -- Already in degrees - - -- Calculate relative bearing (clock position) - local relativeBearing = (bearing - playerHeading + 360) % 360 - - -- Calculate bandit's aspect angle (is he nose-on or tail-on to us?) - local banditHeading = unit:GetHeading() -- Already in degrees - local banditToBearing = (bearing + 180) % 360 -- Reverse bearing (from bandit to player) - local aspectAngle = math.abs(banditToBearing - banditHeading) - if aspectAngle > 180 then aspectAngle = 360 - aspectAngle end -- Normalize to 0-180 - - -- Debug logging for first contact - if distance < 20000 and not playerData.trackedAirTargets[targetID] then - PILog(LOG_DEBUG, string.format("PilotIntuition: Initial contact %s - playerHdg:%.0f° bearing:%.0f° relBrg:%.0f° banditHdg:%.0f° aspect:%.0f°", - targetID, playerHeading, bearing, relativeBearing, banditHeading, aspectAngle)) - end - - if not playerData.trackedAirTargets[targetID] then - local banditName = unit:GetPlayerName() or unit:GetName() - playerData.trackedAirTargets[targetID] = { unit = unit, engaged = false, lastRange = distance, lastTime = now, wasHot = false, lastRelativeBearing = relativeBearing, lastEngagedTime = 0, banditName = banditName } - - -- Safety: Limit tracked targets to prevent memory bloat in long missions (keep 50 most recent) - local trackedCount = 0 - for _ in pairs(playerData.trackedAirTargets) do trackedCount = trackedCount + 1 end - if trackedCount > 50 then - -- Remove oldest non-engaged target - local oldestID, oldestTime = nil, math.huge - for tid, tdata in pairs(playerData.trackedAirTargets) do - if not tdata.engaged and tdata.lastTime < oldestTime then - oldestTime = tdata.lastTime - oldestID = tid - end - end - if oldestID then - playerData.trackedAirTargets[oldestID].unit = nil - playerData.trackedAirTargets[oldestID].banditName = nil - playerData.trackedAirTargets[oldestID] = nil - end - end - else - playerData.trackedAirTargets[targetID].lastRange = playerData.trackedAirTargets[targetID].lastRange or distance - playerData.trackedAirTargets[targetID].lastTime = playerData.trackedAirTargets[targetID].lastTime or now - playerData.trackedAirTargets[targetID].lastRelativeBearing = playerData.trackedAirTargets[targetID].lastRelativeBearing or relativeBearing - end - local data = playerData.trackedAirTargets[targetID] - local closing = distance < data.lastRange - local wasHot = data.wasHot - if distance <= PILOT_INTUITION_CONFIG.threatHotRange then - data.wasHot = true - end - data.lastRange = distance - data.lastTime = now - local lastRelativeBearing = data.lastRelativeBearing - data.lastRelativeBearing = relativeBearing - - -- Reset engaged status after 2 minutes of no engagement or if bandit is out of range - if data.engaged and ((now - data.lastEngagedTime) > 120 or distance > PILOT_INTUITION_CONFIG.airDetectionRange) then - data.engaged = false - -- Only report "dogfight concluded" if the bandit was actually hot at some point (actual engagement) - if data.wasHot and (now - playerData.lastConclusionTime) >= (PILOT_INTUITION_CONFIG.messageCooldown * playerData.frequencyMultiplier) then - if PILOT_INTUITION_CONFIG.activeMessaging then - local banditName = data.banditName or "bandit" - local msg = string.format("%s escaped!", banditName) - MESSAGE:New(msg, 10):ToClient(client) - end - playerData.lastConclusionTime = now - end - end - - if not data.engaged then - -- Calculate altitude information - local playerAlt = playerUnit:GetAltitude() - local banditAlt = unit:GetAltitude() - local altDelta = banditAlt - playerAlt - - -- Check for dogfight situations - local onTail = relativeBearing > 150 and relativeBearing < 210 - local headOn = relativeBearing < 30 or relativeBearing > 330 - local beam = (relativeBearing > 60 and relativeBearing < 120) or (relativeBearing > 240 and relativeBearing < 300) - local overshoot = distance < PILOT_INTUITION_CONFIG.mergeRange and lastRelativeBearing < 90 and relativeBearing > 270 and not closing - - -- High/Low merge detection - local highMerge = distance < PILOT_INTUITION_CONFIG.mergeRange and closing and altDelta > PILOT_INTUITION_CONFIG.highMergeAltitude - local lowMerge = distance < PILOT_INTUITION_CONFIG.mergeRange and closing and altDelta < -PILOT_INTUITION_CONFIG.lowMergeAltitude - local coAltMerge = distance < PILOT_INTUITION_CONFIG.mergeRange and closing and math.abs(altDelta) < 200 - - -- Separation after being hot - local separating = wasHot and distance > PILOT_INTUITION_CONFIG.separatingRange and not closing - - -- Build threat descriptor for ALL detected bandits - local threatType = nil - local threatDetail = nil - - -- Determine threat level based on aspect angle AND distance - -- Hot = nose-on (0-45°), Cold = tail aspect (135-180°), Flanking/Beam = side aspect - local threatLevel = "distant" - if distance <= PILOT_INTUITION_CONFIG.threatHotRange then - threatLevel = "hot" - elseif distance <= PILOT_INTUITION_CONFIG.threatColdRange then - -- Use aspect angle to determine if truly hot or cold - if aspectAngle <= 45 then - threatLevel = "hot" -- Nose-on, coming at us - elseif aspectAngle >= 135 then - threatLevel = "cold" -- Tail aspect, running away - else - threatLevel = "flanking" -- Side aspect - end - else - threatLevel = "distant" - end - - -- Check for specific tactical situations (high priority) - if highMerge then - threatType = "high merge" - threatDetail = string.format("%.0fm above", altDelta) - elseif lowMerge then - threatType = "low merge" - threatDetail = string.format("%.0fm below", math.abs(altDelta)) - elseif coAltMerge then - threatType = "co-alt merge" - elseif onTail and distance < PILOT_INTUITION_CONFIG.tailWarningRange then - if altDelta > 200 then - threatType = "tail high" - elseif altDelta < -200 then - threatType = "tail low" - else - threatType = "tail" - end - elseif headOn and distance < PILOT_INTUITION_CONFIG.headOnRange then - threatType = "head-on" - if math.abs(altDelta) > 200 then - threatDetail = string.format("alt %.0f", altDelta) - end - elseif beam and distance < PILOT_INTUITION_CONFIG.beamRange then - threatType = "beam" - local side = (relativeBearing > 180) and "left" or "right" - threatDetail = side - elseif separating then - threatType = "separating" - elseif overshoot then - threatType = "overshot" - else - -- Generic aspect-based description for distant contacts - local clockPos = math.floor((relativeBearing + 15) / 30) + 1 - if clockPos > 12 then clockPos = clockPos - 12 end - threatType = threatLevel - local distValue, distUnit = self:FormatDistance(distance, playerKey) - threatDetail = string.format("%d o'clock, %.1f%s", clockPos, distValue, distUnit) - if closing then - threatDetail = threatDetail .. ", closing" - end - end - - -- Add ALL detected bandits to the list for multi-bandit reporting - local banditName = unit:GetPlayerName() or unit:GetName() - table.insert(threateningBandits, { - unit = unit, - distance = distance, - threatType = threatType, - threatDetail = threatDetail, - relativeBearing = relativeBearing, - threatLevel = threatLevel, - banditName = banditName - }) - end - - -- Dogfight assist features (if enabled) - if playerData.dogfightAssist and data.engaged then - -- Calculate effective cooldown based on combat intensity - local baseCooldown = PILOT_INTUITION_CONFIG.dogfightMessageCooldown - local effectiveCooldown = baseCooldown - - -- If in high-intensity combat (many bandits), increase cooldown to reduce spam - local engagedBandits = 0 - for _, targetData in pairs(playerData.trackedAirTargets) do - if targetData.engaged then - engagedBandits = engagedBandits + 1 - end - end - - if engagedBandits >= PILOT_INTUITION_CONFIG.combatIntensityThreshold then - effectiveCooldown = baseCooldown * PILOT_INTUITION_CONFIG.combatIntensityCooldownMultiplier - PILog(LOG_DEBUG, string.format("PilotIntuition: High-intensity combat (%d bandits) - dogfight cooldown increased to %.1fs", engagedBandits, effectiveCooldown)) - end - - self:ProvideDogfightAssist(playerUnit, unit, distance, relativeBearing, lastRelativeBearing, playerData, client, closing, effectiveCooldown) - end - end -- End if hasLOS - else - PILog(LOG_TRACE, string.format("PilotIntuition: Unit %s out of range: %.0fm > %.0fm", - unit:GetName(), distance, detectionRange)) - end -- End if distance <= detectionRange - end -- End if unitCoord - end -- End if unit and unit:IsAlive() - end -- End for _, unit in ipairs(enemyAirUnits) - - -- Report multiple bandits situation with tactical picture - PILog(LOG_DEBUG, string.format("PilotIntuition: Threatening bandits count: %d", #threateningBandits)) - - -- COMBAT FOCUS: Filter out distant threats when in close combat - local inCloseCombat = false - local combatFocusRange = PILOT_INTUITION_CONFIG.threatHotRange * 2 -- 2km threshold for "close combat" - for _, threat in ipairs(threateningBandits) do - if threat.distance <= combatFocusRange and threat.threatLevel == "hot" then - inCloseCombat = true - break - end - end - - -- If in close combat, filter to only show immediate threats - local filteredThreats = threateningBandits - if inCloseCombat then - filteredThreats = {} - for _, threat in ipairs(threateningBandits) do - -- Only report threats within combat focus range OR threats that are hot/flanking - if threat.distance <= combatFocusRange or threat.threatLevel == "hot" or threat.threatLevel == "flanking" then - table.insert(filteredThreats, threat) - end - end - PILog(LOG_DEBUG, string.format("PilotIntuition: COMBAT FOCUS - Filtered %d distant threats, showing %d immediate threats", - #threateningBandits - #filteredThreats, #filteredThreats)) - end - - if #filteredThreats > 0 then - for i, threat in ipairs(filteredThreats) do - PILog(LOG_DEBUG, string.format(" Threat %d: %s at %.0fm, type: %s", i, threat.unit:GetName(), threat.distance, threat.threatType)) - end - local now = timer.getTime() - if (now - playerData.lastDogfightTime) >= (PILOT_INTUITION_CONFIG.messageCooldown * playerData.frequencyMultiplier) then - local message = "" - if #filteredThreats == 1 then - -- Single bandit - detailed callout - local threat = filteredThreats[1] - local banditName = threat.banditName or "bandit" - if threat.threatDetail then - message = string.format("%s - %s! %s", banditName, threat.threatType:gsub("^%l", string.upper), threat.threatDetail) - else - message = string.format("%s - %s!", banditName, threat.threatType:gsub("^%l", string.upper)) - end - else - -- Multiple bandits - build tactical picture, showing only most threatening - -- Sort by threat priority: hot > flanking > cold > distant, then by distance - table.sort(filteredThreats, function(a, b) - local priorityOrder = {hot = 1, flanking = 2, cold = 3, distant = 4} - local aPriority = priorityOrder[a.threatLevel] or 5 - local bPriority = priorityOrder[b.threatLevel] or 5 - if aPriority ~= bPriority then - return aPriority < bPriority - else - return a.distance < b.distance - end - end) - - local maxDisplay = PILOT_INTUITION_CONFIG.maxThreatDisplay - local displayCount = math.min(maxDisplay, #filteredThreats) - local totalCount = #filteredThreats - - message = string.format("Multiple bandits - %d contacts", totalCount) - if displayCount < totalCount then - message = message .. string.format(" (showing %d most threatening)", displayCount) - end - message = message .. ": " - - local threats = {} - for i = 1, displayCount do - local threat = filteredThreats[i] - local banditName = threat.banditName or "unknown" - local desc = banditName .. " - " .. threat.threatType - if threat.threatDetail then - desc = desc .. " (" .. threat.threatDetail .. ")" - end - table.insert(threats, desc) - end - message = message .. table.concat(threats, ", ") - end - - if PILOT_INTUITION_CONFIG.activeMessaging then - MESSAGE:New(message, 10):ToClient(client) - end - playerData.lastDogfightTime = now - - -- Mark only HOT bandits as engaged (within hot range or actively threatening) - for _, threat in ipairs(threateningBandits) do - local data = playerData.trackedAirTargets[threat.unit:GetName()] - if data and threat.threatLevel == "hot" then - data.engaged = true - data.lastEngagedTime = now - end - end - end - end - - -- Report the closest unengaged bandit (if no threats) - if #threateningBandits == 0 and closestUnit then - local data = playerData.trackedAirTargets[closestUnit:GetName()] - if data and not data.engaged then - local playerKey = self:GetPlayerDataKey(playerUnit) - self:ReportAirTarget(closestUnit, playerPos, playerData, client, playerKey) - end - end - - -- Check for multiple bandits (with 5-minute cooldown to reduce spam) - if banditCount > 1 then - local now = timer.getTime() - if (now - (playerData.lastMultipleBanditsWarningTime or 0)) >= PILOT_INTUITION_CONFIG.multipleBanditsWarningCooldown then - self:ReportDogfight(nil, playerPos, playerData, client, "Multiple bandits in vicinity!") - playerData.lastMultipleBanditsWarningTime = now - end - end -end - -function PilotIntuition:ReportAirTarget(unit, playerPos, playerData, client, playerKey) - local now = timer.getTime() - if now - playerData.lastMessageTime < (PILOT_INTUITION_CONFIG.messageCooldown * playerData.frequencyMultiplier) then return end - if not PILOT_INTUITION_CONFIG.activeMessaging then return end - - local unitCoord = unit:GetCoordinate() - if not unitCoord then - PILog(LOG_DEBUG, "PilotIntuition: Could not get unit coordinate for air target report") - return - end - - local bearing = playerPos:GetAngleDegrees(playerPos:GetDirectionVec3(unitCoord)) - local rangeMeters = playerPos:Get2DDistance(unitCoord) - local range, distUnit = self:FormatDistance(rangeMeters, playerKey) - -- Convert altitude to angels (thousands of feet) - local altMeters = unit:GetAltitude() - local altFeet = altMeters * 3.28084 - local angels = math.floor(altFeet / 1000) - local threat = "cold" - if rangeMeters <= PILOT_INTUITION_CONFIG.threatHotRange then - threat = "hot" - end - - local group = unit:GetGroup() - if not group then - PILog(LOG_DEBUG, "PilotIntuition: Could not get group for air target") - return - end - local groupSize = #group:GetUnits() - local sizeDesc = groupSize == 1 and "single" or (groupSize == 2 and "pair" or "flight of " .. groupSize) - - MESSAGE:New(self:GetRandomMessage("airTargetDetected", {threat, bearing, range, distUnit, angels, sizeDesc}), 10):ToClient(client) - playerData.lastMessageTime = now -end - -function PilotIntuition:ReportDogfight(unit, playerPos, playerData, client, message) - local now = timer.getTime() - if now - playerData.lastMessageTime < (PILOT_INTUITION_CONFIG.messageCooldown * playerData.frequencyMultiplier) then return end - if not PILOT_INTUITION_CONFIG.activeMessaging then return end - - MESSAGE:New(message, 10):ToClient(client) - playerData.lastMessageTime = now -end - -function PilotIntuition:ScanGroundTargetsForPlayer(playerUnit, client, activeClients, enemyGroundGroups, placeMarker) - if placeMarker == nil then placeMarker = true end - local playerPos = playerUnit:GetCoordinate() - local playerCoalition = playerUnit:GetCoalition() - local enemyCoalition = (playerCoalition == coalition.side.BLUE) and coalition.side.RED or coalition.side.BLUE - local unitName = playerUnit:GetName() - local playerData = self.players[unitName] - if not playerData then return end - - -- Use cached wingmen count - local wingmen = playerData.cachedWingmen - local multiplier = (wingmen > 0) and (2 * wingmen) or 1 - if multiplier > PILOT_INTUITION_CONFIG.maxMultiplier then - multiplier = PILOT_INTUITION_CONFIG.maxMultiplier - end - local envMult = self:GetDetectionMultiplier() - local detectionRange = PILOT_INTUITION_CONFIG.groundDetectionRange * multiplier * envMult - - -- Prune out-of-range ground targets for this player - for id, _ in pairs(playerData.trackedGroundTargets) do - local group = self.trackedGroundTargets[id] - if not group or not group.group:IsAlive() or playerPos:Get2DDistance(group.group:GetCoordinate()) > detectionRange then - playerData.trackedGroundTargets[id] = nil - end - end - - -- Find the closest unmarked target for this player (no sorting needed) - local closestGroup = nil - local minDistance = math.huge - for _, group in ipairs(enemyGroundGroups or {}) do - local distance = playerPos:Get2DDistance(group:GetCoordinate()) - if distance <= detectionRange then - local targetID = group:GetName() - if not self.trackedGroundTargets[targetID] then - self.trackedGroundTargets[targetID] = { group = group, marked = false } - end - if not playerData.trackedGroundTargets[targetID] and distance < minDistance then - closestGroup = group - minDistance = distance - end - end - end - - -- Mark and report the closest unmarked target - if closestGroup then - local targetID = closestGroup:GetName() - self:ReportGroundTarget(closestGroup, playerUnit, client, placeMarker) - self.trackedGroundTargets[targetID].marked = true - playerData.trackedGroundTargets[targetID] = true - end -end - -function PilotIntuition:CheckCloseFlyingForPlayer(playerUnit, playerData, client, activeClients) - if not PILOT_INTUITION_CONFIG.enableCloseFlyingCompliments then return end - local playerPos = playerUnit:GetCoordinate() - local playerCoalition = playerUnit:GetCoalition() - local now = timer.getTime() - local playerHeading = math.deg(playerUnit:GetHeading()) - - for _, info in ipairs(activeClients) do - local otherUnit = info.unit - if otherUnit and otherUnit:IsAlive() and otherUnit:GetCoalition() == playerCoalition and otherUnit:GetName() ~= playerUnit:GetName() then - local otherCoord = otherUnit:GetCoordinate() - if otherCoord then - local distance = playerPos:Get2DDistance(otherCoord) - if distance <= PILOT_INTUITION_CONFIG.complimentRange then - -- Calculate relative bearing - local bearing = playerPos:GetAngleDegrees(playerPos:GetDirectionVec3(otherCoord)) - local relativeBearing = bearing - playerHeading - relativeBearing = (relativeBearing % 360 + 360) % 360 -- Normalize to 0-360 - - -- Check if head-on (within 30 degrees of front or back, but for pass, focus on front) - local isHeadOn = relativeBearing < 30 or relativeBearing > 330 - - if isHeadOn and distance <= PILOT_INTUITION_CONFIG.headOnWarningRange then - if now - playerData.lastHeadOnWarningTime >= (PILOT_INTUITION_CONFIG.closeFlyingMessageCooldown * playerData.frequencyMultiplier) then - MESSAGE:New(self:GetRandomMessage("headOnWarning"), 10):ToClient(client) - playerData.lastHeadOnWarningTime = now - end - elseif not isHeadOn then - if now - playerData.lastComplimentTime >= (PILOT_INTUITION_CONFIG.closeFlyingMessageCooldown * playerData.frequencyMultiplier) then - MESSAGE:New(self:GetRandomMessage("closeFlyingCompliment"), 10):ToClient(client) - playerData.lastComplimentTime = now - end - end - end - end - end - end -end - -function PilotIntuition:ReportGroundTarget(group, playerUnit, client, placeMarker) - if placeMarker == nil then placeMarker = true end - local now = timer.getTime() - if now - self.lastMessageTime < PILOT_INTUITION_CONFIG.messageCooldown then return end - if not PILOT_INTUITION_CONFIG.activeMessaging then return end - local playerPos = playerUnit:GetCoordinate() - local targetPos = group:GetCoordinate() - local bearing = playerPos:HeadingTo(targetPos) -- Returns heading in degrees as number - - -- Ensure bearing is a valid number - if not bearing or type(bearing) ~= "number" then - bearing = 0 -- Fallback to 0 if bearing is invalid - end - - local distanceMeters = playerPos:Get2DDistance(targetPos) - local playerKey = self:GetPlayerDataKey(playerUnit) - local distance, unit = self:FormatDistance(distanceMeters, playerKey) - local unitType = group:GetUnits()[1]:GetTypeName() - local category = self:ClassifyGroundUnit(unitType) - local groupSize = #group:GetUnits() - local sizeDesc = groupSize == 1 and "single" or (groupSize <= 4 and "group" or "platoon") - - MESSAGE:New(self:GetRandomMessage("groundTargetDetected", {category, sizeDesc, unitType, bearing, distance, unit}), 10):ToClient(client) - self.lastMessageTime = now - - -- Place marker if requested - if placeMarker then - -- Determine marker type: prefer player preference if set, otherwise global config - local markerType = PILOT_INTUITION_CONFIG.markerType - local playerName = playerUnit:GetPlayerName() or playerUnit:GetName() - if self.players[playerName] and self.players[playerName].markerType then - markerType = self.players[playerName].markerType - end - if markerType ~= "none" then - local coord = group:GetCoordinate() - local markerTypePart, color = markerType:match("(%w+)_(%w+)") - if markerTypePart == "smoke" then - if color == "red" then coord:SmokeRed() - elseif color == "green" then coord:SmokeGreen() - elseif color == "blue" then coord:SmokeBlue() - elseif color == "white" then coord:SmokeWhite() - end - elseif markerTypePart == "flare" then - if color == "red" then coord:FlareRed() - elseif color == "green" then coord:FlareGreen() - elseif color == "white" then coord:FlareWhite() - end - end - -- Note: Markers are temporary; Moose doesn't have built-in timed markers, so this is basic - end - end -end - -function PilotIntuition:GetDetectionMultiplier() - -- Basic night detection: reduce range at night (22:00 to 06:00) - local time = timer.getAbsTime() % 86400 - local hour = math.floor(time / 3600) - local isNight = hour >= 22 or hour < 6 - local mult = 1 - if isNight then - mult = mult * PILOT_INTUITION_CONFIG.nightDetectionMultiplier - end - -- TODO: Add weather check if available - return mult -end - -function PilotIntuition:ClassifyGroundUnit(unitType) - unitType = string.lower(unitType) - if string.find(unitType, "tank") or string.find(unitType, "armor") or string.find(unitType, "panzer") then - return "Armor" - elseif string.find(unitType, "infantry") or string.find(unitType, "soldier") then - return "Infantry" - elseif string.find(unitType, "aaa") or string.find(unitType, "flak") or string.find(unitType, "aa") then - return "Anti-Air" - elseif string.find(unitType, "truck") or string.find(unitType, "vehicle") or string.find(unitType, "transport") then - return "Logistics" - else - return "Ground" - end -end - -function PilotIntuition:ProvideDogfightAssist(playerUnit, banditUnit, distance, relativeBearing, lastRelativeBearing, playerData, client, closing, effectiveCooldown) - local now = timer.getTime() - -- Use provided effectiveCooldown (for combat intensity adjustment) or fall back to default - local cooldown = effectiveCooldown or PILOT_INTUITION_CONFIG.dogfightMessageCooldown - if (now - playerData.lastDogfightAssistTime) < (cooldown * playerData.frequencyMultiplier) then - return - end - if not PILOT_INTUITION_CONFIG.activeMessaging then return end - - local playerPos = playerUnit:GetCoordinate() - local banditPos = banditUnit:GetCoordinate() - local playerAlt = playerUnit:GetAltitude() - local banditAlt = banditUnit:GetAltitude() - local altDelta = banditAlt - playerAlt - - -- Check for speed warning - local velocity = playerUnit:GetVelocityKMH() - local speedKnots = velocity * 0.539957 - if speedKnots < PILOT_INTUITION_CONFIG.criticalSpeedThreshold then - MESSAGE:New("Speed critical! Extend!", 10):ToClient(client) - playerData.lastDogfightAssistTime = now - return - end - - -- Target loss detection (front to rear hemisphere) - if lastRelativeBearing and lastRelativeBearing < 90 and relativeBearing > 270 then - MESSAGE:New("Lost visual! Bandit reversing on you!", 10):ToClient(client) - playerData.lastDogfightAssistTime = now - return - end - - -- Check for bandit moving behind (now behind, wasn't before) - if relativeBearing > 150 and relativeBearing < 210 and distance < PILOT_INTUITION_CONFIG.tailWarningRange then - local direction = relativeBearing < 180 and "left" or "right" - MESSAGE:New("Bandit at 6 o'clock! Break " .. direction .. "!", 10):ToClient(client) - playerData.lastDogfightAssistTime = now - return - end - - -- Closure rate warning (check this BEFORE altitude to prioritize immediate threats) - if closing and distance < PILOT_INTUITION_CONFIG.threatHotRange then - MESSAGE:New("Bandit closing fast! Prepare to engage!", 10):ToClient(client) - playerData.lastDogfightAssistTime = now - return - end - - -- Significant position change - if playerData.lastPrimaryTargetBearing then - local bearingChange = math.abs(relativeBearing - playerData.lastPrimaryTargetBearing) - if bearingChange > PILOT_INTUITION_CONFIG.positionChangeThreshold and bearingChange < (360 - PILOT_INTUITION_CONFIG.positionChangeThreshold) then - local clockPos = math.floor(relativeBearing / 30) + 1 - if clockPos > 12 then clockPos = clockPos - 12 end - MESSAGE:New("Bandit moving to " .. clockPos .. " o'clock!", 10):ToClient(client) - playerData.lastDogfightAssistTime = now - playerData.lastPrimaryTargetBearing = relativeBearing - return - end - end - - -- Altitude advantage/disadvantage (lower priority - only if no other callouts triggered) - if math.abs(altDelta) > PILOT_INTUITION_CONFIG.altitudeDeltaThreshold then - local clockPos = math.floor(relativeBearing / 30) + 1 - if clockPos > 12 then clockPos = clockPos - 12 end - local distKM = math.floor(distance / 1000 * 10) / 10 - - if altDelta > 0 then - -- Bandit is higher - local altKFeet = math.floor(altDelta * 3.28084 / 1000) - MESSAGE:New(string.format("Bandit %d o'clock, %.1fkm, %dk above!", clockPos, distKM, altKFeet), 10):ToClient(client) - else - -- You have altitude advantage - local altKFeet = math.floor(math.abs(altDelta) * 3.28084 / 1000) - MESSAGE:New(string.format("Bandit %d o'clock, %.1fkm, you're %dk high!", clockPos, distKM, altKFeet), 10):ToClient(client) - end - playerData.lastDogfightAssistTime = now - end - - playerData.lastPrimaryTargetBearing = relativeBearing -end - --- Handle engagement (simplified: if player shoots, assume engagement for nearest target) -function PilotIntuition:OnPlayerShot(EventData) - if not self.enabled then return end - local playerUnit = EventData.IniUnit - if not playerUnit then return end - local client = playerUnit:GetClient() - if client then - local unitName = playerUnit:GetName() - if self.players[unitName] then - local playerData = self.players[unitName] - -- Calculate wingmen for extended range - local clients = SET_CLIENT:New():FilterActive():FilterOnce() - local wingmen = 0 - clients:ForEachClient(function(c) - if c and type(c.GetUnit) == "function" then - local u = c:GetUnit() - -- Validate playerUnit still exists before using it - if u and u:IsAlive() and playerUnit and playerUnit:IsAlive() and u:GetCoalition() == playerUnit:GetCoalition() and u:GetName() ~= playerUnit:GetName() then - local playerCoord = playerUnit:GetCoordinate() - local uCoord = u:GetCoordinate() - if playerCoord and uCoord then - local dist = playerCoord:Get2DDistance(uCoord) - if dist <= PILOT_INTUITION_CONFIG.formationRange then - wingmen = wingmen + 1 - end - end - end - end - end) - local multiplier = (wingmen > 0) and (2 * wingmen) or 1 - if multiplier > PILOT_INTUITION_CONFIG.maxMultiplier then - multiplier = PILOT_INTUITION_CONFIG.maxMultiplier - end - local detectionRange = PILOT_INTUITION_CONFIG.airDetectionRange * multiplier - -- Find nearest air target and mark as engaged - local minDist = math.huge - local nearestID = nil - for id, data in pairs(playerData.trackedAirTargets) do - if not data.engaged and data.unit and data.unit:IsAlive() and playerUnit and playerUnit:IsAlive() then - local playerCoord = playerUnit:GetCoordinate() - local targetCoord = data.unit:GetCoordinate() - if playerCoord and targetCoord then - local distance = playerCoord:Get2DDistance(targetCoord) - if distance < minDist then - minDist = distance - nearestID = id - end - end - end - end - if nearestID and minDist <= detectionRange then - playerData.trackedAirTargets[nearestID].engaged = true - playerData.trackedAirTargets[nearestID].lastEngagedTime = timer.getTime() - if PILOT_INTUITION_CONFIG.activeMessaging then - MESSAGE:New(self:GetRandomMessage("dogfightEngaged"), 10):ToClient(client) - end - end - end - end -end - --- Handle being shot at -function PilotIntuition:OnShotFired(EventData) - if not self.enabled then return end - local shooter = EventData.IniUnit - if not shooter then return end - - -- Check if any player is the target - local clients = SET_CLIENT:New():FilterActive():FilterOnce() - clients:ForEachClient(function(client) - if client and type(client.GetUnit) == "function" then - local playerUnit = client:GetUnit() - if playerUnit and playerUnit:IsAlive() and playerUnit:GetCoalition() ~= shooter:GetCoalition() then - local playerName = playerUnit:GetPlayerName() or playerUnit:GetName() - if self.players[playerName] and self.players[playerName].dogfightAssist then - local playerData = self.players[playerName] - local now = timer.getTime() - if not PILOT_INTUITION_CONFIG.activeMessaging then return end - - -- Check if shot is directed at player (within range and aspect) - local playerCoord = playerUnit:GetCoordinate() - local shooterCoord = shooter:GetCoordinate() - if not playerCoord or not shooterCoord then - return - end - local distance = playerCoord:Get2DDistance(shooterCoord) - if distance < 1500 and (now - playerData.lastDogfightAssistTime) >= (PILOT_INTUITION_CONFIG.dogfightMessageCooldown * playerData.frequencyMultiplier) then - local bearing = playerCoord:GetAngleDegrees(playerCoord:GetDirectionVec3(shooterCoord)) - local playerHeading = math.deg(playerUnit:GetHeading()) - local relativeBearing = (bearing - playerHeading + 360) % 360 - - -- Determine evasion direction - local direction = "left" - if relativeBearing > 180 then - direction = "right" - end - - -- Check if above or below - local altDelta = shooter:GetAltitude() - playerUnit:GetAltitude() - local vertical = "" - if altDelta > 100 then - vertical = " Push!" - elseif altDelta < -100 then - vertical = " Pull!" - end - - MESSAGE:New(self:GetRandomMessage("underFire", {direction, vertical})):ToClient(client) - playerData.lastDogfightAssistTime = now - end - end - end - end - end) -end - --- Initialize the Pilot Intuition system -PILog(LOG_INFO, "====== PILOT INTUITION SYSTEM STARTING ======") -local pilotIntuitionSystem = PilotIntuition:New() -PILog(LOG_INFO, "====== PILOT INTUITION SYSTEM INITIALIZED ======") \ No newline at end of file