From ec4f5e375ac6034b7021ee127cec90460bfdd26f Mon Sep 17 00:00:00 2001 From: iTracerFacer <134304944+iTracerFacer@users.noreply.github.com> Date: Sat, 4 Oct 2025 14:35:21 -0500 Subject: [PATCH] DO it --- .../Battle of Gori/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/Battle of Gori/.location | Bin 0 -> 114 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 73 bytes .../DCS_Afgainistan/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Afgainistan/.location | Bin 0 -> 92 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 74 bytes .../DCS_Caucasus/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Caucasus/.location | Bin 0 -> 106 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 71 bytes .../DCS_Falklands/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Falklands/.location | Bin 0 -> 107 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 72 bytes .../DCS_Marianas/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Marianas/.location | Bin 0 -> 106 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 71 bytes .../DCS_Nevada/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Nevada/.location | Bin 0 -> 104 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 69 bytes .../DCS_Normandy/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Normandy/.location | Bin 0 -> 106 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 71 bytes .../.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Persian_Gulf/.location | Bin 0 -> 93 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 75 bytes .../DCS_Sinai/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Sinai/.location | Bin 0 -> 103 bytes .../DCS_Sinai/org.eclipse.dltk.core/state.dat | Bin 0 -> 68 bytes .../DCS_Syria/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/DCS_Syria/.location | Bin 0 -> 103 bytes .../DCS_Syria/org.eclipse.dltk.core/state.dat | Bin 0 -> 68 bytes .../Moose_Framework/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/Moose_Framework/.location | Bin 0 -> 92 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 238 bytes .../Moose_Missions/.indexes/properties.index | Bin 0 -> 68 bytes .../.projects/Moose_Missions/.location | Bin 0 -> 108 bytes .../org.eclipse.dltk.core/state.dat | Bin 0 -> 73 bytes .../.root/.indexes/properties.index | Bin 0 -> 104 bytes .../org.eclipse.core.resources/.root/1.tree | Bin 82 -> 0 bytes .../org.eclipse.core.resources/.root/3.tree | Bin 0 -> 174888 bytes .../.safetable/org.eclipse.core.resources | Bin 402 -> 520 bytes .../.settings/org.eclipse.ldt.prefs | 2 + .../.settings/org.eclipse.ldt.ui.prefs | 5 + .../.settings/org.eclipse.team.ui.prefs | 2 + .../.settings/org.eclipse.ui.editors.prefs | 2 + .../org.eclipse.dltk.core/1484524933.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/1502499027.index | Bin 0 -> 100 bytes .../org.eclipse.dltk.core/1505386533.index | Bin 0 -> 107 bytes .../org.eclipse.dltk.core/1747788129.index | Bin 0 -> 4439 bytes .../org.eclipse.dltk.core/1939285624.index | Bin 0 -> 100 bytes .../org.eclipse.dltk.core/2538043997.index | Bin 0 -> 231 bytes .../org.eclipse.dltk.core/2768864900.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/329329841.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/3688405372.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/4554018.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/567655800.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/640583989.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/998229636.index | Bin 0 -> 30 bytes .../org.eclipse.dltk.core/Containers.dat | Bin 12 -> 1061 bytes .../cache/2838196607/2210315311/5.idx | Bin 0 -> 8 bytes .../cache/2838196607/2846345860/7.idx | Bin 0 -> 8 bytes .../cache/2838196607/336605292/3.idx | Bin 0 -> 8 bytes .../cache/2838196607/3672975892/1.idx | Bin 0 -> 8 bytes .../org.eclipse.dltk.core/cache/index | 19 + .../org.eclipse.dltk.core/customTimeStamps | Bin 0 -> 4 bytes .../externalLibsTimeStamps | Bin 0 -> 176 bytes .../org.eclipse.dltk.core/savedIndexNames.txt | 2 + .../org.eclipse.dltk.ui/dialog_settings.xml | 2 + .../org.eclipse.e4.workbench/workbench.xmi | 22 +- .../org.eclipse.ui.ide/dialog_settings.xml | 15 + .../dialog_settings.xml | 4 + .metadata/version.ini | 2 +- .../F99th-Operation_Polar_Shield_1.0.0.miz | Bin 0 -> 872135 bytes .../F99th-Operation_Polar_Shield_1.0.0.miz | Bin 0 -> 11505 bytes .../Moose_CaptureZones.lua | 239 + .../Moose_OperationPolarShield.lua | 295 + .../Moose_OperationPolarShield_TADC.lua | 1449 +++ .../Operation_Polar_Shield/OnBirthMessage.lua | 213 + DCS_Kola/Operation_Polar_Shield/test.lua | 69 + Moose_.lua | 8858 +++++++++++++---- 79 files changed, 9042 insertions(+), 2158 deletions(-) create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Afgainistan/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Afgainistan/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Afgainistan/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Caucasus/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Caucasus/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Caucasus/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Falklands/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Falklands/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Falklands/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Marianas/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Marianas/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Marianas/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Nevada/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Nevada/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Nevada/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Sinai/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Sinai/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Sinai/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Syria/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Syria/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Syria/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Framework/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Framework/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Framework/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/.location create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/org.eclipse.dltk.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/1.tree create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/3.tree create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/1484524933.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/1502499027.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/1505386533.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/1747788129.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/1939285624.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/2538043997.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/2768864900.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/329329841.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/3688405372.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/4554018.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/567655800.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/640583989.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/998229636.index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/2210315311/5.idx create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/2846345860/7.idx create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/336605292/3.idx create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/3672975892/1.idx create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/cache/index create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/customTimeStamps create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/externalLibsTimeStamps create mode 100644 .metadata/.plugins/org.eclipse.dltk.core/savedIndexNames.txt create mode 100644 DCS_Kola/F99th-Operation_Polar_Shield_1.0.0.miz create mode 100644 DCS_Kola/Operation_Polar_Shield/F99th-Operation_Polar_Shield_1.0.0.miz create mode 100644 DCS_Kola/Operation_Polar_Shield/Moose_CaptureZones.lua create mode 100644 DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield.lua create mode 100644 DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield_TADC.lua create mode 100644 DCS_Kola/Operation_Polar_Shield/OnBirthMessage.lua create mode 100644 DCS_Kola/Operation_Polar_Shield/test.lua diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvp> ziKWSj#ihmiZkCoM8M;o1B_%njszwI+X+Xj~zbKOd1ssU@{TXaS;OCy|-Q~vsf~X|) literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/org.eclipse.dltk.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/Battle of Gori/org.eclipse.dltk.core/state.dat new file mode 100644 index 0000000000000000000000000000000000000000..d4ec1f2ff71baf3681d57957e0f6e9ee18ddb95b GIT binary patch literal 73 zcmZP&%`ZyVOHIznEGSOZOUWt8)=SPWN@ZXT4si@|Wt3pxb4n~J$w^hnPg8KuFUn*9 P1IC$if|lQeu%RRX5h)Se literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Afgainistan/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Afgainistan/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvpB fY3YfXd6~r}iFpht;6TLh&tS6xKlfDcE)3!Tg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvp> yiKWSj#ihjz3=E76{J#15#i{XbMTxno<@rU~KtU)t5b^sn*yO;^J=MF*j{yK!5Fg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvo$ zi8g%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmO;3Q xMVX0tiNy>I42%r?zWMpZsqt<_iMgre`9;}4K`1y7@%uB_g%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvo` wsbz^Ni3|)3j12s~`T51E@oq(lxvAy(McF_>C^!)D`!m?wz|TF^yUULO00Yb-Pyhe` literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Nevada/org.eclipse.dltk.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Nevada/org.eclipse.dltk.core/state.dat new file mode 100644 index 0000000000000000000000000000000000000000..f9d352e54ae3f5d7dc3957a37e201cbed3ce7f40 GIT binary patch literal 69 zcmZP&%`ZyVOHIznEGSOZOUWt8)=SPWN@ZXT4si@|Wt3pxa&Zoh_e(8HOi5$_1IC$i Lf|j3wu%RRXuu2e7 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvo` y`9-;jc`20)3=E76{J#15#i{XbMTxno<@rU~KtU)t5b^sn*yO;^J=MF*j{yK%uOmwU literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/org.eclipse.dltk.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Normandy/org.eclipse.dltk.core/state.dat new file mode 100644 index 0000000000000000000000000000000000000000..afc328e972677744958e32eb0fd6a49721cc3fd7 GIT binary patch literal 71 zcmZP&%`ZyVOHIznEGSOZOUWt8)=SPWN@ZXT4si@|Wt3pxad8fg_scKJP0UNFWB>!k NnR9}cpN6oZBmm`05la97 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvne gsYS(^iFxtvr8#K~DBwWE@6TYv0zdau?=C+E0Ih=_rT_o{ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/org.eclipse.dltk.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Persian_Gulf/org.eclipse.dltk.core/state.dat new file mode 100644 index 0000000000000000000000000000000000000000..ec92671461759b9e920be8e29a5945bb41d03bfc GIT binary patch literal 75 zcmZP&%`ZyVOHIznEGSOZOUWt8)=SPWN@ZXT4si@|Wt3nLaB&Wf4@fO4&P>dUcQ4IJ RV*mrjnR9}c&w#L@BmhKH5|aP` literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Sinai/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Sinai/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvp! vnR$ts3=9m64E(%wzxq#+h@1 KmY;yIp(FsA%n$JZ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Syria/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/DCS_Syria/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6PjmVvp! vl|`9}3=9m64E(g%Uv=A>HbJ6q|yI0wi3W)>G`=I6Pjmg)QE i=NG5OyA>tork3XyWiz0F0};PJgUt&3+*7@~{1^b9&K|u0 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Framework/org.eclipse.dltk.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Framework/org.eclipse.dltk.core/state.dat new file mode 100644 index 0000000000000000000000000000000000000000..6247530a31a946902410b588eb947a452207914a GIT binary patch literal 238 zcmZvWy$S*`5QKAuwUyvYxa;pBb|PnIqxKSV>k-Ul!(L9sH&Lu?d`(3Q6`bN@7?@#H zi=_ZE&W4I0cX0=Xg;Zm;p02Z`t(ptwiZ*l6B^_9H>ZRm-UEVKGo2c900U*D(!oDOQ z!LiXU`vf?f;CIXA5rS}Do7g#6Kj_1o$8owzhiKSuZBdJkmiR{ny!~64-57QD&q5uE@ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..151a9d47d051e9b81efae7454b3f18ef13663861 GIT binary patch literal 68 zcmZQ%U|?VbVI~IA{GxQd)a0DZg5p%Yl$?@mz2y9&R0h7J(#)Kc)S|G|qTg%Uv=A>HbJ6q|yI0wi3W)>G`=I6Pjmg)QE t=NG5K1d16L7#JD&A!2StiMgre`9;}4K`1y7@%uB_?7+`G)w|1&0RY6iB!d6| literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/org.eclipse.dltk.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/Moose_Missions/org.eclipse.dltk.core/state.dat new file mode 100644 index 0000000000000000000000000000000000000000..b00029ee84a9d46a63d396c32bf53eec70333df6 GIT binary patch literal 73 zcmZP&%`ZyVOHIznEGSOZOUWt8)=SPWN@ZXT4si@|Wt3px^UcpMPL21?EH2K>&nspC P1IC$if|lQfu%RRXCr}cV literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..898f8c471e257867511b6916bc23b956db977341 GIT binary patch literal 104 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

Hy5`se8H|)7g=j6dnD2wn9A}BxYpQFN)VA= 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 VLL}dnAJ=MF*j{yJ&HZOPp delta 139 zcmeBRnZ!InK_)n{M8Pk=Ou^7h!O+mk(8$WjK*2dUM8U|w$YgRFqn4<#p}D!ap^1Tk zxgjr?zFtXDYO1Z_#E(XJbxu4WH93;eoEu3qNN6jggD}vP0};PJEAL?tkqZ3WQ@y+V F7y!l&Cz1dF diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.prefs new file mode 100644 index 0000000..08f2473 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.dltk.core.codeComplete.visibilityCheck=enabled diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.ui.prefs new file mode 100644 index 0000000..238fe2b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ldt.ui.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +sourceHoverBackgroundColor=255,255,225 +sourceHoverBackgroundColor.SystemDefault=true +useAnnotationsPrefPage=true +useQuickDiffPrefPage=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs new file mode 100644 index 0000000..56cd496 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.team.ui.first_time=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs new file mode 100644 index 0000000..61f3bb8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +overviewRuler_migration=migrated_3.1 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/1484524933.index b/.metadata/.plugins/org.eclipse.dltk.core/1484524933.index new file mode 100644 index 0000000000000000000000000000000000000000..c94dbd35e47e6590d821fcce3e0f387bf47b63e6 GIT binary patch literal 30 jcmZROaPbN8R`B$5ag9(2a}5gi^!HOR)H5(N`40pDb|MNk literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/1502499027.index b/.metadata/.plugins/org.eclipse.dltk.core/1502499027.index new file mode 100644 index 0000000000000000000000000000000000000000..569a2215ab9699e4974e5a219a0a01460f2c0f93 GIT binary patch literal 100 zcmZROaPbN8R`B$5ag9(2a}5gi^!HOR)H5(NVPIfzWZ)?-O4iR!%*@lvDNO{5Ffwq1 oc-254aG(Jw00NARjQT)I4v2L@Tn4V()RK(+6qnTG93Wo@0Af89tpET3 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/1505386533.index b/.metadata/.plugins/org.eclipse.dltk.core/1505386533.index new file mode 100644 index 0000000000000000000000000000000000000000..3d91a7cf2d52fb62a14233c0bdad475afb38d109 GIT binary patch literal 107 zcmZROaPbN8R`B$5ag9(2a}5gi^!HOR)H5(NVPIhJWl%0IO4bh!c8U+p%gIm94#-K& xOD%RRamp!8bxJHwE!N8^O#~`r1Y!taWMtF_vgCl+1&A3LSc5|xeFK0@X8?S=7Bv6> literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/1747788129.index b/.metadata/.plugins/org.eclipse.dltk.core/1747788129.index new file mode 100644 index 0000000000000000000000000000000000000000..dc0a8eec1d969bd00962b71f6aef03c1a1b4ebe8 GIT binary patch literal 4439 zcmZ`-+j7%J7~TLOB#_2-?8M<1Fr_mcHIrn3fxFUyVVF|d3AEE*F|xF>MI^0QNw(AF zf_t8%eTqIp-v&Zb(r2k_MZ1Yec%6YNcZvcS3hn(d-3?m@0-6p*?aly=NFqh zTiZK#32B}s+r3_I>-n=E_8#s1u_fCtpFMr?=+&=#Ph@ZB{@r^I9zM8#@4>z8yS?4r zhr9O)Aq|Uhmc(vAw`^v4iAfg7yiNPb0FCnlkM&Itturpe_c`B;hqA{ad@qEiwQmk6 zn&+dKyMf#?ADexT;^4O2b8>R>UpASwZCr=;F*!F(1{AF$GH-=A7|la+CUn)%g2zmo z@<qtOaxu3#GB)1~#1tA-@0Ty_#=x8j8pWgwVDT|Grl)0c!1mMjq(kq zJZ71mh=-h-w&Bqc^$a~ERM=(be<3Rt#`mEri?YGb1ZFjD;V=%{6~*at>a!7@N?hEx z9GWhV1olit?Z8S74MxH-l(f02RR`+U`Dnd=5L39-HQrQhxoNS$f>>Jjh=zKZK0I~* zN3!Y$VG?Wa6zsWi;8M@l_M8TMruhlkfbD!5oBBA`e?zUjHs3*;(@blOOfP}=N(R1- zElH^7oFuS}Bs^thGd>8Zz@0^tw;@chD-H|}@0)>LjIaisgrZ`IM$A(D=Rtc(*>jW=e>HXiYwg=Yz&As{#Y2o1t+ipB z5Jcm^P+*&)09+D9d4NYs5*Li%*`+h=^CnA z$=vGXw7NC`#aP1`fU5-DG;0kg{X6O>j?R)Ykr|QuCqk@{A)BTJUsM3x)@&dXY-z(4 zWL^nP9GD=}inJWc2xvG#)%Z9gzBz^lqtEQc2nC!=@%)>l+?RfGB+w5V6#%qtaC6S^I;1l%yJsJes zK4^g&eG{ZQ%f732;v)vC2dL=j>m!>3V%`ZBj^9f2V;_Q>Q_^xSd-wQ-sOvSg-N zb((-1HXT$&ZH>7LD=Ava`(;fhjoO62Zo7`7iF?zZu3L9+VH13GkO{n^2?pixp5PreOJ-N0cP)vDY&9?IIZlw`W0s;5KF1~s*GgCj9l z;Io032b_`OKo`q7W$#EwdTt+j^(7n(dAr6%g^Mn$x>;E~E1nBRZ+NT*6l)yyIR|cQ zUJhTm)sngkb8tFLeE5Est{3Y zl2uBuTFy#syf^C$?kf=k&uE{cqzfw*;~G+VkQHSm79r#kS(MWD1+j>rkG0ccuc@3Sz?>5JAq1b_~^g6rMY)#UB~BdeCElbBOgwW sspX;j7g+*+hb-;SeIRE!bqHDcKrYCtTQ6%oC-W~~J^JYv{0HRlfA{%agdBe!-B0hO2Dx3PQUz_Sgc^EEI;rapS5P$A5$Psu z1VMlcuI_wRp%aM18XEL@h29yv1YKoFcgUMm_=46&G1J?iW_9H?Ijy!BTUg?wv5Qzp zM-tEE!q_=Op=9Zhslv0HHHzS)kQ=>{*61Z_KQh|K-OzFsfM2jdGauha&3BLd+~q2i zUoc@TGWe~K(v*;ei;vf=-ariq5TVyW=TVyW+E%vur z-)4KO$pFp*B^SFtA`*}QG)-z ow}|1fn+(?;tp=4-Zv)b7A$5^cB_C*(CUW|pQ$TqV$#*6H2Ftf3VE_OC literal 12 NcmZQzU|?i`0ssIN00IC2 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/2210315311/5.idx b/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/2210315311/5.idx new file mode 100644 index 0000000000000000000000000000000000000000..6bccb0b65c8c274d7d35ca0319eb6b52a65927c3 GIT binary patch literal 8 PcmZQzV4OK8Xn6_%2qOZN literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/2846345860/7.idx b/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/2846345860/7.idx new file mode 100644 index 0000000000000000000000000000000000000000..1377e9319110aa85e19721778d3830dfe8129a1e GIT binary patch literal 8 PcmZQzV4OK8XeA#22hjpR literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/336605292/3.idx b/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/336605292/3.idx new file mode 100644 index 0000000000000000000000000000000000000000..9bfe373f1172f889dcb9ea955bb0bffffe7e015e GIT binary patch literal 8 PcmZQzV4OK8Xt@Re2j>D< literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/3672975892/1.idx b/.metadata/.plugins/org.eclipse.dltk.core/cache/2838196607/3672975892/1.idx new file mode 100644 index 0000000000000000000000000000000000000000..9e4db4701dd5f08c1a5b0a246f704e2a1ade6283 GIT binary patch literal 8 PcmZQzV4OK8Xi+Wz2qFTQ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/cache/index b/.metadata/.plugins/org.eclipse.dltk.core/cache/index new file mode 100644 index 0000000..c967b01 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.dltk.core/cache/index @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/.metadata/.plugins/org.eclipse.dltk.core/customTimeStamps b/.metadata/.plugins/org.eclipse.dltk.core/customTimeStamps new file mode 100644 index 0000000000000000000000000000000000000000..593f4708db84ac8fd0f5cc47c634f38c013fe9e4 GIT binary patch literal 4 LcmZQzU|;|M00aO5 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/externalLibsTimeStamps b/.metadata/.plugins/org.eclipse.dltk.core/externalLibsTimeStamps new file mode 100644 index 0000000000000000000000000000000000000000..b77c9f381d91ef58814021d819685115d0917d3b GIT binary patch literal 176 zcmY+8K?=e!5CG$Yx@&E%#jE%QuM)OvS&Z4RO;o)27vJNf6g;SxISdSpb8hAyY9lZO zNfW~m@)1alf#X?B%PG`0wpw_v=}jl;;SXp=##)r(tGp1YM;9oYv(-# literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.dltk.core/savedIndexNames.txt b/.metadata/.plugins/org.eclipse.dltk.core/savedIndexNames.txt new file mode 100644 index 0000000..e328cf6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.dltk.core/savedIndexNames.txt @@ -0,0 +1,2 @@ +C:\DCS_MissionDev\.metadata\.plugins\org.eclipse.dltk.core\2538043997.index +C:\DCS_MissionDev\.metadata\.plugins\org.eclipse.dltk.core\1505386533.index diff --git a/.metadata/.plugins/org.eclipse.dltk.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.dltk.ui/dialog_settings.xml index a7b2b49..a6308c8 100644 --- a/.metadata/.plugins/org.eclipse.dltk.ui/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.dltk.ui/dialog_settings.xml @@ -7,4 +7,6 @@ +

+
diff --git a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index 7e6da53..57db667 100644 --- a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,9 +1,9 @@ - + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration ModelMigrationProcessor.001 - + @@ -39,7 +39,7 @@ persp.perspSC:org.eclipse.debug.ui.DebugPerspective persp.actionSet:org.eclipse.debug.ui.launchActionSet - + active @@ -66,7 +66,7 @@ - + @@ -200,10 +200,16 @@ - - + + org.eclipse.e4.primaryDataStack EditorStack + + + Editor + org.eclipse.ldt.ui.editor + removeOnHide + @@ -353,7 +359,7 @@ Draggable - + toolbarSeparator @@ -381,7 +387,7 @@ Draggable - + toolbarSeparator diff --git a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml index 5ca0b77..e4f5727 100644 --- a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -1,3 +1,18 @@
+ + + + + + + + + + + + + + +
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml index 851c296..2e27e17 100644 --- a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -1,5 +1,9 @@
+
+ + +
diff --git a/.metadata/version.ini b/.metadata/version.ini index 55b108f..a4e9450 100644 --- a/.metadata/version.ini +++ b/.metadata/version.ini @@ -1,3 +1,3 @@ -#Sat Nov 16 11:11:18 CST 2024 +#Tue Sep 30 15:30:00 CDT 2025 org.eclipse.core.runtime=2 org.eclipse.platform=4.8.0.v20180308-0630 diff --git a/DCS_Kola/F99th-Operation_Polar_Shield_1.0.0.miz b/DCS_Kola/F99th-Operation_Polar_Shield_1.0.0.miz new file mode 100644 index 0000000000000000000000000000000000000000..c1bf30eea69bd4bf2ff38a54174b56c7e24ca15b GIT binary patch literal 872135 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�_hNk-cybB4f>40=z8e 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

tx+|P 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 z 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

!fpATwY(vGZsq;4Z&u~ze+1$@8VmJ+ed(yl}c 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 literal 0 HcmV?d00001 diff --git a/DCS_Kola/Operation_Polar_Shield/Moose_CaptureZones.lua b/DCS_Kola/Operation_Polar_Shield/Moose_CaptureZones.lua new file mode 100644 index 0000000..877de92 --- /dev/null +++ b/DCS_Kola/Operation_Polar_Shield/Moose_CaptureZones.lua @@ -0,0 +1,239 @@ +-- Setup Capture Missions & Zones + + +-- Setup BLUE Missions +do -- Missions + + US_Mission_Capture_Airfields = MISSION:New( US_CC, "Capture the Airfields", "Primary", + "Capture the Air Bases marked on your F10 map.\n" .. + "Destroy enemy ground forces in the surrounding area, " .. + "then occupy each capture zone with a platoon.\n " .. + "Your orders are to hold position until all capture zones are taken.\n" .. + "Use the map (F10) for a clear indication of the location of each capture zone.\n" .. + "Note that heavy resistance can be expected at the airbases!\n" + , coalition.side.BLUE) + + US_Score = SCORING:New( "Capture Airfields" ) + + US_Mission_Capture_Airfields:AddScoring( US_Score ) + + US_Mission_Capture_Airfields:Start() + +end + + + +-- Red Airbases (from TADC configuration) +env.info("[DEBUG] Initializing Capture Zone: Kilpyavr") +CaptureZone_Kilpyavr = ZONE:New( "Capture Kilpyavr" ) +ZoneCapture_Kilpyavr = ZONE_CAPTURE_COALITION:New( CaptureZone_Kilpyavr, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Kilpyavr:__Guard( 1 ) +ZoneCapture_Kilpyavr:Start( 30, 30 ) +env.info("[DEBUG] Kilpyavr zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: Severomorsk-1") +CaptureZone_Severomorsk_1 = ZONE:New( "Capture Severomorsk-1" ) +ZoneCapture_Severomorsk_1 = ZONE_CAPTURE_COALITION:New( CaptureZone_Severomorsk_1, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Severomorsk_1:__Guard( 1 ) +ZoneCapture_Severomorsk_1:Start( 30, 30 ) +env.info("[DEBUG] Severomorsk-1 zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: Severomorsk-3") +CaptureZone_Severomorsk_3 = ZONE:New( "Capture Severomorsk-3" ) +ZoneCapture_Severomorsk_3 = ZONE_CAPTURE_COALITION:New( CaptureZone_Severomorsk_3, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Severomorsk_3:__Guard( 1 ) +ZoneCapture_Severomorsk_3:Start( 30, 30 ) +env.info("[DEBUG] Severomorsk-3 zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: Murmansk International") +CaptureZone_Murmansk_International = ZONE:New( "Capture Murmansk International" ) +ZoneCapture_Murmansk_International = ZONE_CAPTURE_COALITION:New( CaptureZone_Murmansk_International, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Murmansk_International:__Guard( 1 ) +ZoneCapture_Murmansk_International:Start( 30, 30 ) +env.info("[DEBUG] Murmansk International zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: Monchegorsk") +CaptureZone_Monchegorsk = ZONE:New( "Capture Monchegorsk" ) +ZoneCapture_Monchegorsk = ZONE_CAPTURE_COALITION:New( CaptureZone_Monchegorsk, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Monchegorsk:__Guard( 1 ) +ZoneCapture_Monchegorsk:Start( 30, 30 ) +env.info("[DEBUG] Monchegorsk zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: Olenya") +CaptureZone_Olenya = ZONE:New( "Capture Olenya" ) +ZoneCapture_Olenya = ZONE_CAPTURE_COALITION:New( CaptureZone_Olenya, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Olenya:__Guard( 1 ) +ZoneCapture_Olenya:Start( 30, 30 ) +env.info("[DEBUG] Olenya zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: Afrikanda") +CaptureZone_Afrikanda = ZONE:New( "Capture Afrikanda" ) +ZoneCapture_Afrikanda = ZONE_CAPTURE_COALITION:New( CaptureZone_Afrikanda, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_Afrikanda:__Guard( 1 ) +ZoneCapture_Afrikanda:Start( 30, 30 ) +env.info("[DEBUG] Afrikanda zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: The Mountain") +CaptureZone_The_Mountain = ZONE:New( "Capture The Mountain" ) +ZoneCapture_The_Mountain = ZONE_CAPTURE_COALITION:New( CaptureZone_The_Mountain, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_The_Mountain:__Guard( 1 ) +ZoneCapture_The_Mountain:Start( 30, 30 ) +env.info("[DEBUG] The Mountain zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: The River") +CaptureZone_The_River = ZONE:New( "Capture The River" ) +ZoneCapture_The_River = ZONE_CAPTURE_COALITION:New( CaptureZone_The_River, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_The_River:__Guard( 1 ) +ZoneCapture_The_River:Start( 30, 30 ) +env.info("[DEBUG] The River zone initialization complete") + +env.info("[DEBUG] Initializing Capture Zone: The Gulf") +CaptureZone_The_Gulf = ZONE:New( "Capture The Gulf" ) +ZoneCapture_The_Gulf = ZONE_CAPTURE_COALITION:New( CaptureZone_The_Gulf, coalition.side.RED ) +-- SetMarkReadOnly method not available in this MOOSE version - feature disabled +ZoneCapture_The_Gulf:__Guard( 1 ) +ZoneCapture_The_Gulf:Start( 30, 30 ) +env.info("[DEBUG] The Gulf zone initialization complete") + + + +-- Event handler functions - define them separately for each zone +local function OnEnterGuarded(ZoneCapture, From, Event, To) + if From ~= To then + local Coalition = ZoneCapture:GetCoalition() + if Coalition == coalition.side.BLUE then + ZoneCapture:Smoke( SMOKECOLOR.Blue ) + US_CC:MessageTypeToCoalition( string.format( "%s is under protection of the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + else + ZoneCapture:Smoke( SMOKECOLOR.Red ) + RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + US_CC:MessageTypeToCoalition( string.format( "%s is under protection of Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + end + end +end + +local function OnEnterEmpty(ZoneCapture) + ZoneCapture:Smoke( SMOKECOLOR.Green ) + US_CC:MessageTypeToCoalition( string.format( "%s is unprotected, and can be captured!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + RU_CC:MessageTypeToCoalition( string.format( "%s is unprotected, and can be captured!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) +end + +local function OnEnterAttacked(ZoneCapture) + ZoneCapture:Smoke( SMOKECOLOR.White ) + local Coalition = ZoneCapture:GetCoalition() + if Coalition == coalition.side.BLUE then + US_CC:MessageTypeToCoalition( string.format( "%s is under attack by Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + RU_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + else + RU_CC:MessageTypeToCoalition( string.format( "%s is under attack by the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + US_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + end +end + +local function OnEnterCaptured(ZoneCapture) + local Coalition = ZoneCapture:GetCoalition() + if Coalition == coalition.side.BLUE then + RU_CC:MessageTypeToCoalition( string.format( "%s is captured by the USA, we lost it!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + US_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + else + US_CC:MessageTypeToCoalition( string.format( "%s is captured by Russia, we lost it!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + RU_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) + end + + ZoneCapture:AddScore( "Captured", "Zone captured: Extra points granted.", 200 ) + ZoneCapture:__Guard( 30 ) +end + +-- Apply event handlers to all zone capture objects +local zoneCaptureObjects = { + ZoneCapture_Kilpyavr, + ZoneCapture_Severomorsk_1, + ZoneCapture_Severomorsk_3, + ZoneCapture_Murmansk_International, + ZoneCapture_Monchegorsk, + ZoneCapture_Olenya, + ZoneCapture_Afrikanda, + ZoneCapture_The_Mountain, + ZoneCapture_The_River, + ZoneCapture_The_Gulf +} + +-- Set up event handlers for each zone with proper MOOSE methods and debugging +local zoneNames = { + "Kilpyavr", "Severomorsk-1", "Severomorsk-3", "Murmansk International", + "Monchegorsk", "Olenya", "Afrikanda", "The Mountain", "The River", "The Gulf" +} + +for i, zoneCapture in ipairs(zoneCaptureObjects) do + if zoneCapture then + local zoneName = zoneNames[i] or ("Zone " .. i) + + -- Proper MOOSE event handlers for ZONE_CAPTURE_COALITION + zoneCapture.OnEnterGuarded = OnEnterGuarded + zoneCapture.OnEnterEmpty = OnEnterEmpty + zoneCapture.OnEnterAttacked = OnEnterAttacked + zoneCapture.OnEnterCaptured = OnEnterCaptured + + -- Debug: Check if the underlying zone exists + local success, zone = pcall(function() return zoneCapture:GetZone() end) + if success and zone then + env.info("✓ Zone 'Capture " .. zoneName .. "' successfully created and linked") + + -- Try to make zone borders visible with different approach + local drawSuccess, drawError = pcall(function() + zone:DrawZone(-1, {1, 0, 0}, 0.5, {1, 0, 0}, 0.2, 2, true) + end) + + if not drawSuccess then + env.info("⚠ Zone 'Capture " .. zoneName .. "' border drawing failed: " .. tostring(drawError)) + -- Alternative: Try simpler zone marking + pcall(function() + zone:SmokeZone(SMOKECOLOR.Red, 30) + end) + else + env.info("✓ Zone 'Capture " .. zoneName .. "' border drawn successfully") + end + else + env.info("✗ ERROR: Zone 'Capture " .. zoneName .. "' not found in mission editor!") + env.info(" Make sure you have a trigger zone named exactly: 'Capture " .. zoneName .. "'") + end + else + env.info("✗ ERROR: Zone capture object " .. i .. " (" .. (zoneNames[i] or "Unknown") .. ") is nil!") + end +end + +-- Additional specific check for Olenya +env.info("=== OLENYA SPECIFIC DEBUG ===") +if ZoneCapture_Olenya then + env.info("✓ ZoneCapture_Olenya object exists") + local success, result = pcall(function() return ZoneCapture_Olenya:GetZoneName() end) + if success then + env.info("✓ Zone name: " .. tostring(result)) + else + env.info("✗ Could not get zone name: " .. tostring(result)) + end + + local success2, zone = pcall(function() return ZoneCapture_Olenya:GetZone() end) + if success2 and zone then + env.info("✓ Underlying zone object exists") + local coord = zone:GetCoordinate() + if coord then + env.info("✓ Zone coordinate: " .. coord:ToStringLLDMS()) + end + else + env.info("✗ Underlying zone object missing: " .. tostring(zone)) + end +else + env.info("✗ ZoneCapture_Olenya object is nil!") +end + diff --git a/DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield.lua b/DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield.lua new file mode 100644 index 0000000..06257d5 --- /dev/null +++ b/DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield.lua @@ -0,0 +1,295 @@ + +-- Operation Polar Shield Mission Script using MOOSE + + +-- Set Spawn Limits - These limits can be adjusted to change the number of ground units that will spawn for each type. +-- These are max units, not groups. For example, the manpad group in the mission editor is 2 units. So if MAX_RU_MANPADS = 10, then 5 groups of manpads will spawn. +-- So you have to knnow how many units are in each group to set these limits effectively. + +MAX_RU_MANPADS = 10 -- Each group has 2 units, so 10 = 5 groups of 2. +MAX_RU_AAA = 25 -- Each group has 1 units, so 25 = 25 groups of 1. +MAX_RU_TANK_T90 = 10 -- The rest of these groups have 1 unit each. +MAX_RU_TANK_T55 = 10 +MAX_RU_IFV = 35 +MAX_RU_IFV_Technicals = 45 +MAX_RU_SA08 = 5 +MAX_RU_SA19 = 5 +MAX_RU_SA15 = 5 +-- MAX_RU_ARTY = 10 -- Disabled lower regardless of this setting. Will fix later. + + +-- Build Command Center and Mission for Blue Coalition +local blueHQ = GROUP:FindByName("BLUEHQ") +if blueHQ then + US_CC = COMMANDCENTER:New(blueHQ, "USA HQ") + US_Mission = MISSION:New(US_CC, "Operation Polar Hammer", "Primary", "", coalition.side.BLUE) + US_Score = SCORING:New("Operation Polar Hammer") + --US_Mission:AddScoring(US_Score) + --US_Mission:Start() + env.info("Blue Coalition Command Center and Mission started successfully") +else + env.info("ERROR: BLUEHQ group not found! Blue mission will not start.") +end + +--Build Command Center and Mission Red +local redHQ = GROUP:FindByName("REDHQ") +if redHQ then + RU_CC = COMMANDCENTER:New(redHQ, "Russia HQ") + RU_Mission = MISSION:New(RU_CC, "Operation Polar Shield", "Primary", "Destroy the City of Ushuaia and its supporting FARPS", coalition.side.RED) + --RU_Score = SCORING:New("Operation Polar Shield") + --RU_Mission:AddScoring(RU_Score) + RU_Mission:Start() + env.info("Red Coalition Command Center and Mission started successfully") +else + env.info("ERROR: REDHQ group not found! Red mission will not start.") +end + +-- Table of Zones to spread red ground forces randomly around. +RandomSpawnZoneTable = { + ZONE:New("sp-1"), ZONE:New("sp-2"), ZONE:New("sp-3"), ZONE:New("sp-4"), ZONE:New("sp-5"), + ZONE:New("sp-6"), ZONE:New("sp-7"), ZONE:New("sp-8"), ZONE:New("sp-9"), ZONE:New("sp-10"), + ZONE:New("sp-11"), ZONE:New("sp-12"), ZONE:New("sp-13"), ZONE:New("sp-14"), ZONE:New("sp-15"), + ZONE:New("sp-16"), ZONE:New("sp-17"), ZONE:New("sp-18"), ZONE:New("sp-19"), ZONE:New("sp-20"), + ZONE:New("sp-21"), ZONE:New("sp-22"), ZONE:New("sp-23"), ZONE:New("sp-24"), ZONE:New("sp-25"), + ZONE:New("sp-26"), ZONE:New("sp-27"), ZONE:New("sp-28"), ZONE:New("sp-29"), ZONE:New("sp-30"), + ZONE:New("sp-31"), ZONE:New("sp-32"), ZONE:New("sp-33"), ZONE:New("sp-34"), ZONE:New("sp-35"), + ZONE:New("sp-36"), ZONE:New("sp-37"), ZONE:New("sp-38"), ZONE:New("sp-39"), ZONE:New("sp-40"), + ZONE:New("sp-41"), ZONE:New("sp-42"), ZONE:New("sp-43"), ZONE:New("sp-44"), ZONE:New("sp-45"), + ZONE:New("sp-46"), ZONE:New("sp-47"), ZONE:New("sp-48"), ZONE:New("sp-49"), ZONE:New("sp-50"), + ZONE:New("sp-51"), ZONE:New("sp-52"), ZONE:New("sp-53"), ZONE:New("sp-54"), ZONE:New("sp-55"), + ZONE:New("sp-56"), ZONE:New("sp-57"), ZONE:New("sp-58"), ZONE:New("sp-59"), ZONE:New("sp-60"), + ZONE:New("sp-61"), ZONE:New("sp-62"), ZONE:New("sp-63"), ZONE:New("sp-64"), ZONE:New("sp-65"), + ZONE:New("sp-66"), ZONE:New("sp-67"), ZONE:New("sp-68"), ZONE:New("sp-69"), ZONE:New("sp-70"), + ZONE:New("sp-71"), ZONE:New("sp-72"), ZONE:New("sp-73"), ZONE:New("sp-74"), ZONE:New("sp-75"), + ZONE:New("sp-76"), ZONE:New("sp-77"), ZONE:New("sp-78"), ZONE:New("sp-79"), ZONE:New("sp-80"), + ZONE:New("sp-81"), ZONE:New("sp-82"), ZONE:New("sp-83"), ZONE:New("sp-84"), ZONE:New("sp-85"), + ZONE:New("sp-86"), ZONE:New("sp-87"), ZONE:New("sp-88"), ZONE:New("sp-89"), ZONE:New("sp-90"), + ZONE:New("sp-91"), ZONE:New("sp-92"), ZONE:New("sp-93"), ZONE:New("sp-94"), ZONE:New("sp-95"), + ZONE:New("sp-96"), ZONE:New("sp-97"), ZONE:New("sp-98"), ZONE:New("sp-99"), ZONE:New("sp-100"), + ZONE:New("sp-101"), ZONE:New("sp-102"), ZONE:New("sp-103"), ZONE:New("sp-104"), ZONE:New("sp-105"), + ZONE:New("sp-106"), ZONE:New("sp-107"), ZONE:New("sp-108"), ZONE:New("sp-109"), ZONE:New("sp-110"), + ZONE:New("sp-111"), ZONE:New("sp-112"), ZONE:New("sp-113"), ZONE:New("sp-114"), ZONE:New("sp-115"), + ZONE:New("sp-116"), ZONE:New("sp-117"), ZONE:New("sp-118"), ZONE:New("sp-119"), ZONE:New("sp-120"), + ZONE:New("sp-121"), ZONE:New("sp-122"), ZONE:New("sp-123"), ZONE:New("sp-124"), ZONE:New("sp-125"), + ZONE:New("sp-126"), ZONE:New("sp-127"), ZONE:New("sp-128"), ZONE:New("sp-129"), ZONE:New("sp-130"), + ZONE:New("sp-131"), ZONE:New("sp-132"), ZONE:New("sp-133"), ZONE:New("sp-134"), ZONE:New("sp-135"), + ZONE:New("sp-136"), ZONE:New("sp-137"), ZONE:New("sp-138"), ZONE:New("sp-139"), ZONE:New("sp-140"), + ZONE:New("sp-141"), ZONE:New("sp-142"), ZONE:New("sp-143"), ZONE:New("sp-144"), ZONE:New("sp-145"), + ZONE:New("sp-146"), ZONE:New("sp-147"), ZONE:New("sp-148"), ZONE:New("sp-149"), ZONE:New("sp-150"), + ZONE:New("sp-151"), ZONE:New("sp-152"), ZONE:New("sp-153"), ZONE:New("sp-154"), ZONE:New("sp-155"), + ZONE:New("sp-156"), ZONE:New("sp-157"), ZONE:New("sp-158"), ZONE:New("sp-159"), ZONE:New("sp-160"), + ZONE:New("sp-161"), ZONE:New("sp-162"), ZONE:New("sp-163"), ZONE:New("sp-164"), ZONE:New("sp-165"), + ZONE:New("sp-166"), ZONE:New("sp-167"), ZONE:New("sp-168"), ZONE:New("sp-169"), ZONE:New("sp-170"), + ZONE:New("sp-171"), ZONE:New("sp-172"), ZONE:New("sp-173"), ZONE:New("sp-174"), ZONE:New("sp-175"), + ZONE:New("sp-176"), ZONE:New("sp-177"), ZONE:New("sp-178"), ZONE:New("sp-179"), ZONE:New("sp-180"), + ZONE:New("sp-181"), ZONE:New("sp-182"), ZONE:New("sp-183"), ZONE:New("sp-184"), ZONE:New("sp-185"), + ZONE:New("sp-186"), ZONE:New("sp-187"), ZONE:New("sp-188"), ZONE:New("sp-189"), ZONE:New("sp-190"), + ZONE:New("sp-191"), ZONE:New("sp-192"), ZONE:New("sp-193"), ZONE:New("sp-194"), ZONE:New("sp-195"), + ZONE:New("sp-196"), ZONE:New("sp-197"), ZONE:New("sp-198"), ZONE:New("sp-199"), ZONE:New("sp-200"), + ZONE:New("sp-201"), ZONE:New("sp-202"), ZONE:New("sp-203"), ZONE:New("sp-204"), ZONE:New("sp-205"), + ZONE:New("sp-206"), ZONE:New("sp-207"), ZONE:New("sp-208"), ZONE:New("sp-209"), ZONE:New("sp-210"), + ZONE:New("sp-211"), ZONE:New("sp-212"), ZONE:New("sp-213"), ZONE:New("sp-214"), ZONE:New("sp-215"), + ZONE:New("sp-216"), ZONE:New("sp-217"), ZONE:New("sp-218"), ZONE:New("sp-219"), ZONE:New("sp-220"), + ZONE:New("sp-221"), ZONE:New("sp-222"), ZONE:New("sp-223"), ZONE:New("sp-224"), ZONE:New("sp-225"), + ZONE:New("sp-226"), ZONE:New("sp-227"), ZONE:New("sp-228"), ZONE:New("sp-229"), ZONE:New("sp-230"), + ZONE:New("sp-231"), ZONE:New("sp-232"), ZONE:New("sp-233"), ZONE:New("sp-234"), ZONE:New("sp-235"), + ZONE:New("sp-236"), ZONE:New("sp-237"), ZONE:New("sp-238"), ZONE:New("sp-239"), ZONE:New("sp-240"), + ZONE:New("sp-241"), ZONE:New("sp-242"), ZONE:New("sp-243"), ZONE:New("sp-244"), ZONE:New("sp-245"), + ZONE:New("sp-246"), ZONE:New("sp-247"), ZONE:New("sp-248"), ZONE:New("sp-249"), ZONE:New("sp-250"), + ZONE:New("sp-251"), ZONE:New("sp-252"), ZONE:New("sp-253"), ZONE:New("sp-254"), ZONE:New("sp-255"), + ZONE:New("sp-256"), ZONE:New("sp-257"), ZONE:New("sp-258"), ZONE:New("sp-259"), ZONE:New("sp-260"), + ZONE:New("sp-261"), ZONE:New("sp-262"), ZONE:New("sp-263"), ZONE:New("sp-264"), ZONE:New("sp-265"), + ZONE:New("sp-266"), ZONE:New("sp-267"), ZONE:New("sp-268"), ZONE:New("sp-269"), ZONE:New("sp-270"), + ZONE:New("sp-271"), ZONE:New("sp-272"), ZONE:New("sp-273"), ZONE:New("sp-274"), ZONE:New("sp-275"), + ZONE:New("sp-276"), ZONE:New("sp-277"), ZONE:New("sp-278"), ZONE:New("sp-279"), ZONE:New("sp-280"), + ZONE:New("sp-281"), ZONE:New("sp-282"), ZONE:New("sp-283"), ZONE:New("sp-284"), ZONE:New("sp-285"), + ZONE:New("sp-286"), ZONE:New("sp-287"), ZONE:New("sp-288"), ZONE:New("sp-289"), ZONE:New("sp-290"), + ZONE:New("sp-291"), ZONE:New("sp-292"), ZONE:New("sp-293"), ZONE:New("sp-294"), ZONE:New("sp-295"), + ZONE:New("sp-296"), ZONE:New("sp-297"), ZONE:New("sp-298"), ZONE:New("sp-299"), ZONE:New("sp-300"), + ZONE:New("sp-301"), ZONE:New("sp-302"), ZONE:New("sp-303"), ZONE:New("sp-304"), ZONE:New("sp-305"), + ZONE:New("sp-306"), ZONE:New("sp-307"), ZONE:New("sp-308"), ZONE:New("sp-309"), ZONE:New("sp-310"), + ZONE:New("sp-311"), ZONE:New("sp-312"), ZONE:New("sp-313"), ZONE:New("sp-314"), ZONE:New("sp-315"), + ZONE:New("sp-316"), ZONE:New("sp-317"), ZONE:New("sp-318"), ZONE:New("sp-319"), ZONE:New("sp-320"), + ZONE:New("sp-321"), ZONE:New("sp-322"), ZONE:New("sp-323"), ZONE:New("sp-324"), ZONE:New("sp-325"), + ZONE:New("sp-326"), ZONE:New("sp-327"), ZONE:New("sp-328"), ZONE:New("sp-329"), ZONE:New("sp-330"), + ZONE:New("sp-331"), ZONE:New("sp-332"), ZONE:New("sp-333"), ZONE:New("sp-334"), ZONE:New("sp-335"), + ZONE:New("sp-336"), ZONE:New("sp-337"), ZONE:New("sp-338"), ZONE:New("sp-339"), ZONE:New("sp-340"), + ZONE:New("sp-341"), ZONE:New("sp-342"), ZONE:New("sp-343"), ZONE:New("sp-344"), ZONE:New("sp-345"), + ZONE:New("sp-346"), ZONE:New("sp-347"), ZONE:New("sp-348"), ZONE:New("sp-349"), ZONE:New("sp-350"), + ZONE:New("sp-351"), ZONE:New("sp-352"), ZONE:New("sp-353"), ZONE:New("sp-354"), ZONE:New("sp-355"), + ZONE:New("sp-356"), ZONE:New("sp-357"), ZONE:New("sp-358"), ZONE:New("sp-359"), ZONE:New("sp-360"), + ZONE:New("sp-361"), ZONE:New("sp-362"), ZONE:New("sp-363"), ZONE:New("sp-364"), ZONE:New("sp-365"), + ZONE:New("sp-366"), ZONE:New("sp-367"), ZONE:New("sp-368"), ZONE:New("sp-369"), ZONE:New("sp-370"), + ZONE:New("sp-371"), ZONE:New("sp-372"), ZONE:New("sp-373"), ZONE:New("sp-374"), ZONE:New("sp-375"), + ZONE:New("sp-376"), ZONE:New("sp-377"), ZONE:New("sp-378"), ZONE:New("sp-379"), ZONE:New("sp-380"), + ZONE:New("sp-381"), ZONE:New("sp-382"), ZONE:New("sp-383"), ZONE:New("sp-384"), ZONE:New("sp-385"), + ZONE:New("sp-386"), ZONE:New("sp-387"), ZONE:New("sp-388"), ZONE:New("sp-389"), ZONE:New("sp-390"), + ZONE:New("sp-391"), ZONE:New("sp-392"), ZONE:New("sp-393"), ZONE:New("sp-394"), ZONE:New("sp-395"), + ZONE:New("sp-396"), ZONE:New("sp-397"), ZONE:New("sp-398"), ZONE:New("sp-399"), ZONE:New("sp-400"), + ZONE:New("sp-401"), ZONE:New("sp-402"), ZONE:New("sp-403"), ZONE:New("sp-404"), ZONE:New("sp-405"), + ZONE:New("sp-406"), ZONE:New("sp-407"), ZONE:New("sp-408"), ZONE:New("sp-409"), ZONE:New("sp-410"), + ZONE:New("sp-411"), ZONE:New("sp-412"), ZONE:New("sp-413"), ZONE:New("sp-414"), ZONE:New("sp-415"), + ZONE:New("sp-416"), ZONE:New("sp-417"), ZONE:New("sp-418"), ZONE:New("sp-419"), ZONE:New("sp-420"), + ZONE:New("sp-421"), ZONE:New("sp-422"), ZONE:New("sp-423"), ZONE:New("sp-424"), ZONE:New("sp-425"), + ZONE:New("sp-426"), ZONE:New("sp-427"), ZONE:New("sp-428"), ZONE:New("sp-429"), ZONE:New("sp-430"), + ZONE:New("sp-431"), ZONE:New("sp-432"), ZONE:New("sp-433"), ZONE:New("sp-434"), ZONE:New("sp-435"), + ZONE:New("sp-436"), ZONE:New("sp-437"), ZONE:New("sp-438"), ZONE:New("sp-439"), ZONE:New("sp-440"), + ZONE:New("sp-441"), ZONE:New("sp-442"), ZONE:New("sp-443"), ZONE:New("sp-444"), ZONE:New("sp-445"), + ZONE:New("sp-446"), ZONE:New("sp-447"), ZONE:New("sp-448"), ZONE:New("sp-449"), ZONE:New("sp-450"), + ZONE:New("sp-451"), ZONE:New("sp-452"), ZONE:New("sp-453"), ZONE:New("sp-454"), ZONE:New("sp-455"), + ZONE:New("sp-456"), ZONE:New("sp-457"), ZONE:New("sp-458"), ZONE:New("sp-459"), ZONE:New("sp-460"), + ZONE:New("sp-461"), ZONE:New("sp-462"), ZONE:New("sp-463"), ZONE:New("sp-464"), ZONE:New("sp-465"), + ZONE:New("sp-466"), ZONE:New("sp-467"), ZONE:New("sp-468"), ZONE:New("sp-469"), ZONE:New("sp-470"), + ZONE:New("sp-471"), ZONE:New("sp-472"), ZONE:New("sp-473"), ZONE:New("sp-474"), ZONE:New("sp-475"), + ZONE:New("sp-476"), ZONE:New("sp-477"), ZONE:New("sp-478"), ZONE:New("sp-479"), ZONE:New("sp-480"), + ZONE:New("sp-481"), ZONE:New("sp-482"), ZONE:New("sp-483"), ZONE:New("sp-484"), ZONE:New("sp-485"), + ZONE:New("sp-486"), ZONE:New("sp-487"), ZONE:New("sp-488"), ZONE:New("sp-489"), ZONE:New("sp-490"), + ZONE:New("sp-491"), ZONE:New("sp-492"), ZONE:New("sp-493"), ZONE:New("sp-494"), ZONE:New("sp-495"), + ZONE:New("sp-496"), ZONE:New("sp-497"), ZONE:New("sp-498"), ZONE:New("sp-499"), ZONE:New("sp-500"), + ZONE:New("sp-501"), ZONE:New("sp-502"), ZONE:New("sp-503"), ZONE:New("sp-504"), ZONE:New("sp-505"), + ZONE:New("sp-506"), ZONE:New("sp-507"), ZONE:New("sp-508"), ZONE:New("sp-509"), ZONE:New("sp-510"), + ZONE:New("sp-511"), ZONE:New("sp-512"), ZONE:New("sp-513"), ZONE:New("sp-514"), ZONE:New("sp-515"), + ZONE:New("sp-516"), ZONE:New("sp-517"), ZONE:New("sp-518"), ZONE:New("sp-519"), ZONE:New("sp-520"), + ZONE:New("sp-521"), ZONE:New("sp-522"), ZONE:New("sp-523"), ZONE:New("sp-524"), ZONE:New("sp-525"), + ZONE:New("sp-526"), ZONE:New("sp-527"), ZONE:New("sp-528"), ZONE:New("sp-529"), ZONE:New("sp-530"), + ZONE:New("sp-531"), ZONE:New("sp-532"), ZONE:New("sp-533"), ZONE:New("sp-534"), ZONE:New("sp-535"), + ZONE:New("sp-536"), ZONE:New("sp-537"), ZONE:New("sp-538"), ZONE:New("sp-539"), ZONE:New("sp-540"), + ZONE:New("sp-541"), ZONE:New("sp-542"), ZONE:New("sp-543"), ZONE:New("sp-544"), ZONE:New("sp-545"), + ZONE:New("sp-546"), ZONE:New("sp-547"), ZONE:New("sp-548"), ZONE:New("sp-549"), ZONE:New("sp-550"), + ZONE:New("sp-551"), ZONE:New("sp-552"), ZONE:New("sp-553"), ZONE:New("sp-554"), ZONE:New("sp-555"), + ZONE:New("sp-556"), ZONE:New("sp-557"), ZONE:New("sp-558"), ZONE:New("sp-559"), ZONE:New("sp-560"), + ZONE:New("sp-561"), ZONE:New("sp-562"), ZONE:New("sp-563"), ZONE:New("sp-564"), ZONE:New("sp-565"), + ZONE:New("sp-566"), ZONE:New("sp-567"), ZONE:New("sp-568"), ZONE:New("sp-569"), ZONE:New("sp-570"), + ZONE:New("sp-571"), ZONE:New("sp-572"), ZONE:New("sp-573"), ZONE:New("sp-574"), ZONE:New("sp-575"), + ZONE:New("sp-576"), ZONE:New("sp-577"), ZONE:New("sp-578"), ZONE:New("sp-579"), ZONE:New("sp-580"), + ZONE:New("sp-581"), ZONE:New("sp-582"), ZONE:New("sp-583"), ZONE:New("sp-584"), ZONE:New("sp-585"), + ZONE:New("sp-586"), ZONE:New("sp-587"), ZONE:New("sp-588"), ZONE:New("sp-589"), ZONE:New("sp-590"), + ZONE:New("sp-591"), ZONE:New("sp-592"), ZONE:New("sp-593"), ZONE:New("sp-594"), ZONE:New("sp-595"), + ZONE:New("sp-596"), ZONE:New("sp-597"), ZONE:New("sp-598"), ZONE:New("sp-599"), ZONE:New("sp-600"), + ZONE:New("sp-601"), ZONE:New("sp-602"), ZONE:New("sp-603"), ZONE:New("sp-604"), ZONE:New("sp-605"), + ZONE:New("sp-606"), ZONE:New("sp-607"), ZONE:New("sp-608"), ZONE:New("sp-609"), ZONE:New("sp-610"), + ZONE:New("sp-611"), ZONE:New("sp-612"), ZONE:New("sp-613"), ZONE:New("sp-614"), ZONE:New("sp-615"), + ZONE:New("sp-616"), ZONE:New("sp-617"), ZONE:New("sp-618"), ZONE:New("sp-619"), ZONE:New("sp-620"), + ZONE:New("sp-621"), ZONE:New("sp-622"), ZONE:New("sp-623"), ZONE:New("sp-624"), ZONE:New("sp-625"), + ZONE:New("sp-626"), ZONE:New("sp-627"), ZONE:New("sp-628"), ZONE:New("sp-629"), ZONE:New("sp-630"), + ZONE:New("sp-631"), ZONE:New("sp-632"), ZONE:New("sp-633"), ZONE:New("sp-634"), ZONE:New("sp-635"), + ZONE:New("sp-636"), ZONE:New("sp-637"), ZONE:New("sp-638"), ZONE:New("sp-639"), ZONE:New("sp-640"), + ZONE:New("sp-641"), ZONE:New("sp-642"), ZONE:New("sp-643"), ZONE:New("sp-644"), ZONE:New("sp-645"), + ZONE:New("sp-646"), ZONE:New("sp-647"), ZONE:New("sp-648"), ZONE:New("sp-649"), ZONE:New("sp-650"), + ZONE:New("sp-651"), ZONE:New("sp-652"), ZONE:New("sp-653"), ZONE:New("sp-654"), ZONE:New("sp-655"), + ZONE:New("sp-656"), ZONE:New("sp-657"), ZONE:New("sp-658"), ZONE:New("sp-659"), ZONE:New("sp-660"), + ZONE:New("sp-661"), ZONE:New("sp-662"), ZONE:New("sp-663"), ZONE:New("sp-664"), ZONE:New("sp-665"), + ZONE:New("sp-666"), ZONE:New("sp-667"), ZONE:New("sp-668"), ZONE:New("sp-669"), ZONE:New("sp-670"), + ZONE:New("sp-671"), ZONE:New("sp-672"), ZONE:New("sp-673"), ZONE:New("sp-674"), ZONE:New("sp-675"), + ZONE:New("sp-676"), ZONE:New("sp-677"), ZONE:New("sp-678"), ZONE:New("sp-679"), ZONE:New("sp-680"), + ZONE:New("sp-681"), ZONE:New("sp-682"), ZONE:New("sp-683"), ZONE:New("sp-684"), ZONE:New("sp-685"), + ZONE:New("sp-686"), ZONE:New("sp-687"), ZONE:New("sp-688"), ZONE:New("sp-689"), ZONE:New("sp-690"), + ZONE:New("sp-691"), ZONE:New("sp-692"), ZONE:New("sp-693"), ZONE:New("sp-694"), ZONE:New("sp-695"), + ZONE:New("sp-696"), ZONE:New("sp-697"), ZONE:New("sp-698"), ZONE:New("sp-699"), ZONE:New("sp-700") +} + + +-- Spawn Ground Units for Red Coalition + +env.info("=== GROUND UNIT SPAWN DEBUG ===") +env.info("MAX_RU_MANPADS: " .. MAX_RU_MANPADS) +env.info("RandomSpawnZoneTable size: " .. #RandomSpawnZoneTable) + +-- Check if template groups exist +local templateGroups = { + "RU_MANPADS-1", "RU_AAA-1", "RU_TANK_T90", "RU_TANK_T55", + "RU_IFV-1", "RU_IFV-Technicals", "RU_SA-08", "RU_SA-19", "RU_SA-15" +} + +for _, templateName in pairs(templateGroups) do + local template = GROUP:FindByName(templateName) + if template then + env.info("✓ Found template: " .. templateName) + else + env.info("✗ Missing template: " .. templateName) + end +end + +-- Check spawn zones +local validZones = 0 +for i, zone in pairs(RandomSpawnZoneTable) do + if zone then + validZones = validZones + 1 + else + env.info("✗ Invalid zone at index " .. i) + end +end +env.info("Valid spawn zones: " .. validZones .. "/" .. #RandomSpawnZoneTable) + +-- MANPADS Systems +env.info("Spawning MANPADS...") +RandomSpawns_RU_MANPADS = SPAWN:New( "RU_MANPADS-1" ) +:InitLimit( MAX_RU_MANPADS, MAX_RU_MANPADS ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +-- Anti-Aircraft Artillery +env.info("Spawning AAA...") +RandomSpawns_RU_AAA = SPAWN:New( "RU_AAA-1" ) +:InitLimit( MAX_RU_AAA, MAX_RU_AAA ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +-- Main Battle Tanks +env.info("Spawning T-90 tanks...") +RandomSpawns_RU_TANK_T90 = SPAWN:New( "RU_TANK_T90" ) +:InitLimit( MAX_RU_TANK_T90, MAX_RU_TANK_T90 ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +env.info("Spawning T-55 tanks...") +RandomSpawns_RU_TANK_T55 = SPAWN:New( "RU_TANK_T55" ) +:InitLimit( MAX_RU_TANK_T55, MAX_RU_TANK_T55 ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +-- Infantry Fighting Vehicles +env.info("Spawning IFVs...") +RandomSpawns_RU_IFV = SPAWN:New( "RU_IFV-1" ) +:InitLimit( MAX_RU_IFV, MAX_RU_IFV ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +env.info("Spawning Technical vehicles...") +RandomSpawns_RU_IFV_Technicals = SPAWN:New( "RU_IFV-Technicals" ) +:InitLimit( MAX_RU_IFV_Technicals, MAX_RU_IFV_Technicals ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +-- Short Range SAM Systems +env.info("Spawning SA-08 SAMs...") +RandomSpawns_RU_SA08 = SPAWN:New( "RU_SA-08" ) +:InitLimit( MAX_RU_SA08, MAX_RU_SA08 ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +-- Medium Range SAM Systems +env.info("Spawning SA-19 SAMs...") +RandomSpawns_RU_SA19 = SPAWN:New( "RU_SA-19" ) +:InitLimit( MAX_RU_SA19, MAX_RU_SA19 ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + +-- Long Range SAM Systems +env.info("Spawning SA-15 SAMs...") +RandomSpawns_RU_SA15 = SPAWN:New( "RU_SA-15" ) +:InitLimit( MAX_RU_SA15, MAX_RU_SA15 ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) + + +-- Artillery Systems +--[[ +RandomSpawns_RU_ARTY = SPAWN:New( "RU_ARTY-1" ) +:InitLimit( MAX_RU_ARTY, MAX_RU_ARTY ) +:InitRandomizeTemplate( RandomSpawnZoneTable ) +:InitRandomizeZones( RandomSpawnZoneTable ) +:SpawnScheduled( .1, .5 ) +--]] + +env.info("Red Ground Forces Spawned") diff --git a/DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield_TADC.lua b/DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield_TADC.lua new file mode 100644 index 0000000..aca812a --- /dev/null +++ b/DCS_Kola/Operation_Polar_Shield/Moose_OperationPolarShield_TADC.lua @@ -0,0 +1,1449 @@ +-- Operation Polar Shield - MOOSE Mission Script +-- +-- KNOWN ISSUES WITH EASYGCICAP v0.1.30: +-- 1. Internal MOOSE errors during intercept assignments (_AssignIntercept) +-- 2. Inconsistent wing size requests (alternates between 1 and 2 aircraft) +-- 3. These errors do NOT prevent CAP operations - system works despite them +-- +-- VERIFICATION: Check F10 map for active CAP flights patrolling border zones +-- The script successfully initializes all squadrons and patrol points. + +-- STATUS: OPERATIONAL ✅ +-- All squadrons added, all patrol points configured, RedCAP started successfully +-- +-- NEW FEATURES: +-- ✅ Randomized AI Patrol System - Aircraft pick random patrol areas within their zones +-- ✅ Anti-Clustering Behavior - Each aircraft patrols different areas to prevent clustering +-- ✅ Dynamic Patrol Rotation - Aircraft change patrol areas every AI_PATROL_TIME seconds +-- ✅ Configurable Patrol Parameters - Adjust patrol timing and area sizes via config + +-- Optional: Reduce MOOSE error message boxes in game +-- env.setErrorMessageBoxEnabled(false) + +--================================================================================================ +-- TACTICAL AIR DEFENSE CONTROLLER (TADC) CONFIGURATION +-- ================================================================================================ + +-- GCI Configuration - Define at top level for global access +local GCI_Config = { + -- Threat Response Parameters + threatRatio = 1, -- Send 1.5x defenders per attacker + maxSimultaneousCAP = 12, -- Maximum total airborne aircraft + reservePercent = 0.25, -- Keep 25% of forces in reserve + responseDelay = 15, -- Seconds to assess threat before scrambling + + -- Supply Management + supplyMode = "INFINITE", -- "FINITE" or "INFINITE" aircraft spawning + defaultSquadronSize = 25, -- Aircraft per squadron if not specified + + -- Detection Parameters + useEWRDetection = true, -- Use realistic EWR-based detection (true) or omniscient detection (false) + ewrDetectionRadius = 30000, -- EWR detection radius in meters (30km) + ewrUpdateInterval = 10, -- EWR detection update interval in seconds + threatTimeout = 300, -- Remove threats not seen for 5 minutes + minThreatDistance = 50000, -- Minimum 50km to consider threat + + -- Force Sizing Rules + fighterVsFighter = 1.0, -- Multiplier for fighter threats (reduced from 1.5) + fighterVsBomber = 1.2, -- Multiplier for bomber threats (reduced from 2.0) + fighterVsHelicopter = 0.8, -- Multiplier for helicopter threats + + -- CAP Behavior Parameters + capOrbitRadius = 30000, -- CAP orbit radius in meters (30km) + capEngagementRange = 35000, -- Maximum engagement range in meters (35km) + capZoneConstraint = true, -- Keep CAP flights within their patrol zones + + -- AI Patrol Parameters + AI_PATROL_TIME = 300, -- Time aircraft patrol one area before moving (5 minutes) + patrolAreaRadius = 15000, -- Radius of individual patrol areas in meters (15km) + minPatrolSeparation = 25000, -- Minimum distance between patrol areas (25km) + + -- Squadron Operational Parameters + squadronCooldown = 1800, -- Seconds between squadron launches (30 minutes - increased from 15) + maxAircraftPerMission = 1, -- Maximum aircraft per squadron per mission (reduced from 2) + + -- Spawn Positioning + spawnDistanceMin = 1000, -- Minimum spawn distance from airbase (meters) + spawnDistanceMax = 3000, -- Maximum spawn distance from airbase (meters) + takeoffDistance = 5000, -- Distance for ground spawn takeoff positioning (meters) + + -- Mission Timing + minPatrolDuration = 7200, -- Minimum patrol duration in seconds (2 hours) + rtbDuration = 600, -- Time allowed for RTB in seconds (10 minutes) + missionCleanupTime = 1800, -- Time before old missions are cleaned up (30 minutes) + statusReportInterval = 300, -- Interval between status reports (5 minutes) + + -- System Timing + capSetupDelay = 5, -- Delay before setting up CAP tasks (seconds) + mainLoopDelay = 5, -- Initial delay before starting main loop (seconds) + mainLoopInterval = 30, -- Main loop execution interval (seconds) + + -- Debug Options + debugLevel = 2, -- 0=Silent, 1=Basic, 2=Verbose + + -- Persistent CAP Configuration + enablePersistentCAP = true, -- Enable continuous standing patrols + persistentCAPCount = 2, -- Number of persistent CAP flights to maintain + persistentCAPInterval = 900, -- Check/maintain persistent CAP every 15 minutes + persistentCAPReserve = 0.3, -- Reserve 30% of maxSimultaneousCAP slots for threat response + persistentCAPPriority = { -- Priority order for persistent CAP squadrons + "FIGHTER_SWEEP_RED_Severomorsk-1", -- Primary intercept base + "FIGHTER_SWEEP_RED_Olenya", -- Northern coverage + "FIGHTER_SWEEP_RED_Murmansk", -- Western coverage + "HELO_SWEEP_RED_Afrikanda" -- Helicopter patrol + }, + + -- Optional Features + initialStandingPatrols = false -- Launch standing patrols on startup (legacy) +} + + +-- Initialize TADC Data Structures - Must be defined before any usage +local TADC = { + -- Squadron Management + squadrons = {}, -- Squadron data and status + activeCAPs = {}, -- Currently airborne CAP flights + launchQueue = {}, -- Pending launch orders + + -- Threat Tracking + threats = {}, -- Detected threat contacts + threatHistory = {}, -- Historical threat data + + -- Mission Control + missions = {}, -- Active intercept missions + reserves = {}, -- Aircraft held in reserve + threatAssignments = {}, -- Maps threat IDs to assigned squadrons + squadronMissions = {}, -- Maps squadrons to their current threats + + -- Persistent CAP Management + persistentCAPs = {}, -- Currently active persistent CAP flights + lastPersistentCheck = 0, -- Last time persistent CAP was checked/maintained + + -- Statistics + stats = { + threatsDetected = 0, + interceptsLaunched = 0, + successfulEngagements = 0, + aircraftLost = 0 + } +} + +-- Setup Distributed Multi-Base CAP System +-- This creates a dynamic response system where each squadron launches from its designated airbase +-- and responds to threats based on proximity and zone coverage. + +-- Create border zones with error checking +local redBorderGroup = GROUP:FindByName("RED BORDER") +local heloBorderGroup = GROUP:FindByName("HELO BORDER") + +if redBorderGroup then + CCCPBorderZone = ZONE_POLYGON:New("RED BORDER", redBorderGroup) + env.info("RED BORDER zone created successfully") +else + env.info("ERROR: RED BORDER group not found!") + return +end + +if heloBorderGroup then + HeloBorderZone = ZONE_POLYGON:New("HELO BORDER", heloBorderGroup) + env.info("HELO BORDER zone created successfully") +else + env.info("ERROR: HELO BORDER group not found!") + return +end + +-- Define squadron configurations with their designated airbases and patrol zones +local squadronConfigs = { + -- Fixed-wing fighters patrol RED BORDER zone + { + templateName = "FIGHTER_SWEEP_RED_Kilpyavr", + displayName = "Kilpyavr CAP", + airbaseName = "Kilpyavr", + patrolZone = CCCPBorderZone, + aircraft = 1, + skill = AI.Skill.GOOD, + altitude = 15000, + speed = 300, + patrolTime = 20, + type = "FIGHTER" + }, + { + templateName = "FIGHTER_SWEEP_RED_Severomorsk-1", + displayName = "Severomorsk-1 CAP", + airbaseName = "Severomorsk-1", + patrolZone = CCCPBorderZone, + aircraft = 1, + skill = AI.Skill.GOOD, + altitude = 20000, + speed = 350, + patrolTime = 25, + type = "FIGHTER" + }, + { + templateName = "FIGHTER_SWEEP_RED_Severomorsk-3", + displayName = "Severomorsk-3 CAP", + airbaseName = "Severomorsk-3", + patrolZone = CCCPBorderZone, + aircraft = 1, + skill = AI.Skill.GOOD, + altitude = 25000, + speed = 400, + patrolTime = 30, + type = "FIGHTER" + }, + { + templateName = "FIGHTER_SWEEP_RED_Murmansk", + displayName = "Murmansk CAP", + airbaseName = "Murmansk International", + patrolZone = CCCPBorderZone, + aircraft = 1, + skill = AI.Skill.GOOD, + altitude = 18000, + speed = 320, + patrolTime = 22, + type = "FIGHTER" + }, + { + templateName = "FIGHTER_SWEEP_RED_Monchegorsk", + displayName = "Monchegorsk CAP", + airbaseName = "Monchegorsk", + patrolZone = CCCPBorderZone, + aircraft = 1, + skill = AI.Skill.GOOD, + altitude = 22000, + speed = 380, + patrolTime = 25, + type = "FIGHTER" + }, + { + templateName = "FIGHTER_SWEEP_RED_Olenya", + displayName = "Olenya CAP", + airbaseName = "Olenya", + patrolZone = CCCPBorderZone, + aircraft = 1, + skill = AI.Skill.GOOD, + altitude = 30000, + speed = 450, + patrolTime = 35, + type = "FIGHTER" + }, + -- Helicopter squadron patrols HELO BORDER zone + { + templateName = "HELO_SWEEP_RED_Afrikanda", + displayName = "Afrikanda Helo CAP", + airbaseName = "Afrikanda", + patrolZone = HeloBorderZone, + aircraft = 4, + skill = AI.Skill.GOOD, + altitude = 1000, + speed = 150, + patrolTime = 30, + type = "HELICOPTER" + } +} + +-- Check which squadron templates exist in the mission +env.info("=== CHECKING SQUADRON TEMPLATES ===") +local availableSquadrons = {} + +-- First, let's verify what airbases are actually available +env.info("=== VERIFYING AIRBASE NAMES ===") +local testAirbaseNames = { + "Kilpyavr", "Severomorsk-1", "Severomorsk-3", + "Murmansk International", "Monchegorsk", "Olenya", "Afrikanda" +} +for _, airbaseName in pairs(testAirbaseNames) do + local airbaseObj = AIRBASE:FindByName(airbaseName) + if airbaseObj then + env.info("✓ Airbase found: " .. airbaseName) + else + env.info("✗ Airbase NOT found: " .. airbaseName) + end +end + +-- ================================================================================================ +-- SQUADRON MANAGEMENT SYSTEM +-- ================================================================================================ + +local function initializeSquadron(config) + return { + -- Basic Info + templateName = config.templateName, + displayName = config.displayName, + airbaseName = config.airbaseName, + type = config.type, + + -- Aircraft Management + totalAircraft = GCI_Config.supplyMode == "INFINITE" and 999 or (config.totalAircraft or GCI_Config.defaultSquadronSize), + availableAircraft = GCI_Config.supplyMode == "INFINITE" and 999 or (config.totalAircraft or GCI_Config.defaultSquadronSize), + airborneAircraft = 0, + reserveAircraft = 0, + + -- Mission Parameters + patrolZone = config.patrolZone, + altitude = config.altitude, + speed = config.speed, + patrolTime = config.patrolTime, + skill = config.skill, + + -- Status + readinessLevel = "READY", -- READY, BUSY, UNAVAILABLE + lastLaunch = -GCI_Config.squadronCooldown, -- Allow immediate launch (set to -cooldown) + launchCooldown = GCI_Config.squadronCooldown, -- Cooldown from config + + -- Statistics + sorties = 0, + kills = 0, + losses = 0 + } +end + +env.info("=== INITIALIZING SQUADRON DATABASE ===") +for _, config in pairs(squadronConfigs) do + local template = GROUP:FindByName(config.templateName) + if template then + env.info("✓ Found squadron template: " .. config.templateName) + + -- Verify airbase exists and is Red coalition + local airbaseObj = AIRBASE:FindByName(config.airbaseName) + if airbaseObj then + local airbaseCoalition = airbaseObj:GetCoalition() + if airbaseCoalition == 1 then -- Red coalition + env.info(" ✓ Airbase verified: " .. config.airbaseName .. " (Red Coalition)") + + -- Initialize squadron in TADC database + local squadron = initializeSquadron(config) + TADC.squadrons[config.templateName] = squadron + availableSquadrons[config.templateName] = config -- Keep for compatibility + + env.info(" ✓ Squadron initialized: " .. squadron.availableAircraft .. " aircraft available") + else + env.info(" ✗ Airbase " .. config.airbaseName .. " not Red coalition - squadron disabled") + end + else + env.info(" ✗ Airbase NOT found: " .. config.airbaseName .. " - squadron disabled") + end + else + env.info("✗ Missing squadron template: " .. config.templateName) + end +end + +local squadronCount = 0 +local totalAircraft = 0 +for _, squadron in pairs(TADC.squadrons) do + squadronCount = squadronCount + 1 + totalAircraft = totalAircraft + squadron.availableAircraft +end + +env.info("✓ TADC Squadron Database: " .. squadronCount .. " squadrons, " .. totalAircraft .. " total aircraft") +if GCI_Config.supplyMode == "INFINITE" then + env.info("✓ Supply Mode: INFINITE - unlimited aircraft spawning") +else + env.info("✓ Supply Mode: FINITE - " .. totalAircraft .. " aircraft available") +end + +-- ================================================================================================ +-- TACTICAL AIR DEFENSE CONTROLLER (TADC) SYSTEM +-- A comprehensive GCI system for intelligent air defense coordination +-- ================================================================================================ + +env.info("=== INITIALIZING TACTICAL AIR DEFENSE CONTROLLER ===") + +-- Create EWR Detection Network with Detection System +local RedEWR = SET_GROUP:New():FilterPrefixes("RED-EWR"):FilterStart() +local RedDetection = nil + +if GCI_Config.useEWRDetection and RedEWR:Count() > 0 then + env.info("✓ Red EWR Network: " .. RedEWR:Count() .. " detection groups") + + -- Create MOOSE Detection system using EWR network (basic version for compatibility) + local success, errorMsg = pcall(function() + RedDetection = DETECTION_AREAS:New(RedEWR, GCI_Config.ewrDetectionRadius) + RedDetection:Start() + end) + + if success then + env.info("✓ EWR-based threat detection system initialized (" .. (GCI_Config.ewrDetectionRadius/1000) .. "km range)") + else + env.info("⚠ EWR detection failed: " .. tostring(errorMsg) .. " - falling back to omniscient detection") + RedDetection = nil + end +else + if GCI_Config.useEWRDetection then + env.info("⚠ Warning: No RED-EWR groups found - falling back to omniscient detection") + else + env.info("✓ Using omniscient detection (EWR detection disabled in config)") + end +end + +-- ================================================================================================ +-- THREAT DETECTION AND ASSESSMENT SYSTEM +-- ================================================================================================ + +local function classifyThreat(group) + local category = group:GetCategory() + local typeName = group:GetTypeName() or "Unknown" + + -- Classify by DCS category and type name + if category == Group.Category.AIRPLANE then + if string.find(typeName:upper(), "B-") or string.find(typeName:upper(), "BOMBER") then + return "BOMBER" + elseif string.find(typeName:upper(), "A-") or string.find(typeName:upper(), "ATTACK") then + return "ATTACK" + else + return "FIGHTER" + end + elseif category == Group.Category.HELICOPTER then + return "HELICOPTER" + else + return "UNKNOWN" + end +end + +local function assessThreatStrength(threats) + local fighters = 0 + local bombers = 0 + local helicopters = 0 + local totalThreat = 0 + + for _, threat in pairs(threats) do + local aircraft = threat.size or 1 + if threat.classification == "FIGHTER" then + fighters = fighters + aircraft + totalThreat = totalThreat + (aircraft * GCI_Config.fighterVsFighter) + elseif threat.classification == "BOMBER" then + bombers = bombers + aircraft + totalThreat = totalThreat + (aircraft * GCI_Config.fighterVsBomber) + elseif threat.classification == "HELICOPTER" then + helicopters = helicopters + aircraft + totalThreat = totalThreat + (aircraft * GCI_Config.fighterVsHelicopter) + end + end + + return { + fighters = fighters, + bombers = bombers, + helicopters = helicopters, + totalAircraft = fighters + bombers + helicopters, + requiredDefenders = math.ceil(totalThreat) + } +end + +local function updateThreatPicture() + local currentTime = timer.getTime() + local newThreats = {} + + -- Use EWR-based detection if enabled and available, otherwise fall back to omniscient detection + if GCI_Config.useEWRDetection and RedDetection then + -- EWR-based realistic detection + local detectedItems = RedDetection:GetDetectedItems() + + if GCI_Config.debugLevel >= 2 then + env.info("EWR DETECTION: Found " .. #detectedItems .. " detected items") + end + + for _, detectedItem in pairs(detectedItems) do + local detectedSet = detectedItem.Set + if detectedSet then + detectedSet:ForEach(function(detectedGroup) + if detectedGroup and detectedGroup:IsAlive() and detectedGroup:GetCoalition() == coalition.side.BLUE then + local blueCoord = detectedGroup:GetCoordinate() + local threatId = detectedGroup:GetName() + + -- DEBUG: Log each EWR-detected aircraft + if GCI_Config.debugLevel >= 2 then + env.info("EWR DETECTED: " .. threatId .. " at " .. blueCoord:ToStringLLDMS()) + end + + -- Check if threat is in any patrol zone + local inRedZone = CCCPBorderZone and CCCPBorderZone:IsCoordinateInZone(blueCoord) + local inHeloZone = HeloBorderZone and HeloBorderZone:IsCoordinateInZone(blueCoord) + + -- DEBUG: Log zone check results + if GCI_Config.debugLevel >= 2 then + env.info(" Zone Check - RED: " .. tostring(inRedZone) .. ", HELO: " .. tostring(inHeloZone)) + end + + if inRedZone or inHeloZone then + local classification = classifyThreat(detectedGroup) + local size = detectedGroup:GetSize() + + newThreats[threatId] = { + id = threatId, + group = detectedGroup, + coordinate = blueCoord, + classification = classification, + size = size, + zone = inRedZone and "RED_BORDER" or "HELO_BORDER", + firstDetected = TADC.threats[threatId] and TADC.threats[threatId].firstDetected or currentTime, + lastSeen = currentTime, + heading = detectedGroup:GetHeading(), + velocity = detectedGroup:GetVelocity(), + priority = classification == "BOMBER" and 3 or (classification == "FIGHTER" and 2 or 1), + detectionMethod = "EWR" + } + + -- Update statistics + if not TADC.threats[threatId] then + TADC.stats.threatsDetected = TADC.stats.threatsDetected + 1 + if GCI_Config.debugLevel >= 1 then + env.info("NEW EWR THREAT: " .. threatId .. " (" .. classification .. ", " .. size .. " aircraft) in " .. newThreats[threatId].zone) + end + end + end + end + end) + end + end + else + -- Fallback: Omniscient detection (original method) + local BlueAircraft = SET_GROUP:New():FilterCoalitions("blue"):FilterCategoryAirplane():FilterStart() + + -- DEBUG: Log how many blue aircraft we found + local blueCount = BlueAircraft:Count() + if blueCount > 0 and GCI_Config.debugLevel >= 2 then + env.info("OMNISCIENT SCAN: Found " .. blueCount .. " blue aircraft on map") + end + + BlueAircraft:ForEach(function(blueGroup) + if blueGroup and blueGroup:IsAlive() then + local blueCoord = blueGroup:GetCoordinate() + local threatId = blueGroup:GetName() + + -- DEBUG: Log each blue aircraft found + if GCI_Config.debugLevel >= 2 then + env.info("CHECKING BLUE AIRCRAFT: " .. threatId .. " at " .. blueCoord:ToStringLLDMS()) + end + + -- Check if threat is in any patrol zone + local inRedZone = CCCPBorderZone and CCCPBorderZone:IsCoordinateInZone(blueCoord) + local inHeloZone = HeloBorderZone and HeloBorderZone:IsCoordinateInZone(blueCoord) + + -- DEBUG: Log zone check results + if GCI_Config.debugLevel >= 2 then + env.info(" Zone Check - RED: " .. tostring(inRedZone) .. ", HELO: " .. tostring(inHeloZone)) + end + + if inRedZone or inHeloZone then + local classification = classifyThreat(blueGroup) + local size = blueGroup:GetSize() + + newThreats[threatId] = { + id = threatId, + group = blueGroup, + coordinate = blueCoord, + classification = classification, + size = size, + zone = inRedZone and "RED_BORDER" or "HELO_BORDER", + firstDetected = TADC.threats[threatId] and TADC.threats[threatId].firstDetected or currentTime, + lastSeen = currentTime, + heading = blueGroup:GetHeading(), + velocity = blueGroup:GetVelocity(), + priority = classification == "BOMBER" and 3 or (classification == "FIGHTER" and 2 or 1), + detectionMethod = "OMNISCIENT" + } + + -- Update statistics + if not TADC.threats[threatId] then + TADC.stats.threatsDetected = TADC.stats.threatsDetected + 1 + if GCI_Config.debugLevel >= 1 then + env.info("NEW THREAT: " .. threatId .. " (" .. classification .. ", " .. size .. " aircraft) in " .. newThreats[threatId].zone) + end + end + end + end + end) + end + + -- Remove old threats (not seen for threatTimeout seconds) + for threatId, threat in pairs(TADC.threats) do + if not newThreats[threatId] and (currentTime - threat.lastSeen) > GCI_Config.threatTimeout then + if GCI_Config.debugLevel >= 1 then + env.info("THREAT TIMEOUT: " .. threatId .. " - removing from threat picture") + end + end + end + + TADC.threats = newThreats + return newThreats +end + +local function findOptimalDefenders(threats, zone) + local assessment = assessThreatStrength(threats) + local availableSquadrons = {} + local totalAvailable = 0 + + -- Find available squadrons for this zone + local currentTime = timer.getTime() + for templateName, squadron in pairs(TADC.squadrons) do + -- Check availability, aircraft count, AND cooldown status + local cooldownRemaining = squadron.launchCooldown - (currentTime - squadron.lastLaunch) + if squadron.readinessLevel == "READY" and + squadron.availableAircraft > 0 and + cooldownRemaining <= 0 then + -- Check if squadron type matches zone + local canRespond = false + if zone == "RED_BORDER" and squadron.type == "FIGHTER" then + canRespond = true + elseif zone == "HELO_BORDER" and squadron.type == "HELICOPTER" then + canRespond = true + end + + if canRespond then + local airbaseObj = AIRBASE:FindByName(squadron.airbaseName) + if airbaseObj then + -- Calculate average distance to threats + local totalDistance = 0 + local threatCount = 0 + for _, threat in pairs(threats) do + if threat.zone == zone then + local distance = threat.coordinate:Get2DDistance(airbaseObj:GetCoordinate()) + totalDistance = totalDistance + distance + threatCount = threatCount + 1 + end + end + + if threatCount > 0 then + availableSquadrons[templateName] = { + squadron = squadron, + averageDistance = totalDistance / threatCount, + priority = squadron.type == "FIGHTER" and 2 or 1 + } + totalAvailable = totalAvailable + squadron.availableAircraft + end + end + end + end + end + + -- Sort by distance and priority + local sortedSquadrons = {} + for templateName, data in pairs(availableSquadrons) do + table.insert(sortedSquadrons, {templateName = templateName, data = data}) + end + + table.sort(sortedSquadrons, function(a, b) + if a.data.priority ~= b.data.priority then + return a.data.priority > b.data.priority + else + return a.data.averageDistance < b.data.averageDistance + end + end) + + return sortedSquadrons, assessment, totalAvailable +end + +-- ================================================================================================ +-- MISSION PLANNING AND LAUNCH COORDINATION +-- ================================================================================================ + +local function calculateRequiredForce(threats, zone) + local zoneThreats = {} + for _, threat in pairs(threats) do + if threat.zone == zone then + table.insert(zoneThreats, threat) + end + end + + if #zoneThreats == 0 then + return 0, {} + end + + local assessment = assessThreatStrength(zoneThreats) + return assessment.requiredDefenders, zoneThreats +end + +local function assignThreatsToSquadrons(threats, zone) + local zoneThreats = {} + for _, threat in pairs(threats) do + if threat.zone == zone then + table.insert(zoneThreats, threat) + end + end + + if #zoneThreats == 0 then + return {} + end + + local availableSquadrons, assessment, totalAvailable = findOptimalDefenders(threats, zone) + + -- Debug: Show squadron selection results + if GCI_Config.debugLevel >= 1 then + env.info("Squadron Selection for " .. zone .. ":") + for i, squadronData in pairs(availableSquadrons) do + local squadron = squadronData.data.squadron + local currentTime = timer.getTime() + local cooldownRemaining = math.max(0, squadron.launchCooldown - (currentTime - squadron.lastLaunch)) + env.info(" " .. i .. ". " .. squadron.displayName .. " - Available: " .. squadron.availableAircraft .. ", Cooldown: " .. math.ceil(cooldownRemaining) .. "s") + end + end + + -- Assign each unassigned threat to the best available squadron + local newAssignments = {} + + for _, threat in pairs(zoneThreats) do + local threatId = threat.id .. "_" .. threat.firstDetected + + -- Skip if threat is already assigned to an active squadron + local skipThreat = false + if TADC.threatAssignments[threatId] then + local assignedSquadron = TADC.threatAssignments[threatId] + local squadron = TADC.squadrons[assignedSquadron] + if squadron and squadron.readinessLevel == "BUSY" then + if GCI_Config.debugLevel >= 2 then + env.info("Threat " .. threat.id .. " already assigned to " .. assignedSquadron) + end + skipThreat = true -- Skip this threat, it's being handled + else + -- Squadron is no longer busy, clear the assignment + TADC.threatAssignments[threatId] = nil + if TADC.squadronMissions[assignedSquadron] then + TADC.squadronMissions[assignedSquadron] = nil + end + end + end + + -- Only process threat if not skipped + if not skipThreat then + -- Find the best available squadron for this specific threat + local bestSquadron = nil + local bestDistance = math.huge + + for _, squadronData in pairs(availableSquadrons) do + local squadron = squadronData.data.squadron + local templateName = squadronData.templateName + + -- Check if squadron is available (not already assigned to another threat) + if not TADC.squadronMissions[templateName] and squadron.availableAircraft > 0 then + if squadronData.data.averageDistance < bestDistance then + bestDistance = squadronData.data.averageDistance + -- Find the original squadron config + local originalConfig = nil + for _, config in pairs(squadronConfigs) do + if config.templateName == templateName then + originalConfig = config + break + end + end + + bestSquadron = { + templateName = templateName, + squadron = squadron, + distance = squadronData.data.averageDistance, + threat = threat, + threatId = threatId, + config = originalConfig -- Include original squadron config + } + end + end + end + + if bestSquadron then + table.insert(newAssignments, bestSquadron) + -- Mark squadron as assigned to prevent double-booking + TADC.squadronMissions[bestSquadron.templateName] = bestSquadron.threatId + TADC.threatAssignments[bestSquadron.threatId] = bestSquadron.templateName + + if GCI_Config.debugLevel >= 1 then + env.info("Assigning threat " .. threat.id .. " to " .. bestSquadron.squadron.displayName .. " (" .. math.floor(bestDistance/1000) .. "km)") + end + else + if GCI_Config.debugLevel >= 1 then + env.info("No available squadron for threat " .. threat.id) + end + end + end + end + + return newAssignments +end + +-- ================================================================================================ +-- CAP LAUNCH FUNCTION (Must be defined before executeInterceptMission) +-- ================================================================================================ + +local function launchCAP(config, aircraftCount, reason) + aircraftCount = aircraftCount or 1 + + env.info("=== LAUNCHING CAP ===") + env.info("Squadron: " .. config.displayName) + env.info("Airbase: " .. config.airbaseName) + env.info("Aircraft: " .. aircraftCount) + env.info("Reason: " .. reason) + + local success, errorMsg = pcall(function() + -- Find the airbase object + local airbaseObj = AIRBASE:FindByName(config.airbaseName) + if not airbaseObj then + env.info("✗ Could not find airbase: " .. config.airbaseName) + return + end + + env.info("✓ Airbase object found, attempting spawn...") + env.info("Template: " .. config.templateName) + env.info("Aircraft count: " .. config.aircraft) + env.info("Skill: " .. tostring(config.skill)) + + -- Check if template exists + local templateGroup = GROUP:FindByName(config.templateName) + if not templateGroup then + env.info("✗ CRITICAL: Template group not found: " .. config.templateName) + env.info("SOLUTION: In Mission Editor, ensure group '" .. config.templateName .. "' exists and is set to 'Late Activation'") + return + end + + -- Check template group properties + local coalition = templateGroup:GetCoalition() + local coalitionName = coalition == 1 and "Red" or (coalition == 2 and "Blue" or "Neutral") + env.info("✓ Template group found - Coalition: " .. coalitionName) + + if coalition ~= 1 then + env.info("✗ CRITICAL: Template group is not Red coalition (coalition=" .. coalition .. ")") + env.info("SOLUTION: In Mission Editor, set group '" .. config.templateName .. "' to Red coalition") + return + end + + -- Template groups should NOT be alive if Late Activation is working correctly + local isAlive = templateGroup:IsAlive() + env.info("Template Status - Alive: " .. tostring(isAlive) .. " (should be false for Late Activation)") + + if isAlive then + env.info("⚠ Warning: Template group is alive - Late Activation may not be set correctly") + env.info("This means the group has already spawned in the mission") + else + env.info("✓ Template group correctly set to Late Activation") + end + + -- Create SPAWN object with proper initialization + env.info("Creating SPAWN object...") + local spawner = SPAWN:New(config.templateName) + + + -- Try different spawn methods that actually work + local spawnedGroup = nil + + -- Method 1: Try spawning in air at proper altitude near airbase + local airbaseCoord = airbaseObj:GetCoordinate() + local spawnCoord = airbaseCoord:Translate(math.random(GCI_Config.spawnDistanceMin, GCI_Config.spawnDistanceMax), math.random(0, 360)) + spawnCoord = spawnCoord:SetAltitude(config.altitude) -- Set proper altitude + + env.info("Attempting air spawn at " .. config.altitude .. "ft near " .. config.airbaseName) + spawnedGroup = spawner:SpawnFromCoordinate(spawnCoord, nil, SPAWN.Takeoff.Air) + + if not spawnedGroup then + -- Method 2: Try airbase spawn + env.info("Air spawn failed, trying airbase spawn") + spawnedGroup = spawner:SpawnAtAirbase(airbaseObj, SPAWN.Takeoff.Hot) + end + + if not spawnedGroup then + -- Method 3: Try ground spawn then immediate takeoff + env.info("Airbase spawn failed, trying ground spawn with takeoff") + spawnedGroup = spawner:SpawnFromCoordinate(airbaseCoord) + if spawnedGroup then + -- Force immediate takeoff to proper altitude + local takeoffCoord = airbaseCoord:Translate(5000, math.random(0, 360)):SetAltitude(config.altitude) + spawnedGroup:RouteAirTo(takeoffCoord, config.speed, "BARO") + end + end + + if spawnedGroup then + env.info("✓ Aircraft spawned successfully: " .. config.displayName) + -- Note: Skip immediate altitude check as coordinates may not be ready yet + -- Altitude will be set properly in the scheduled CAP setup task + + -- Wait a moment then set up proper CAP mission + SCHEDULER:New(nil, function() + if spawnedGroup and spawnedGroup:IsAlive() then + env.info("Setting up CAP mission for " .. config.displayName) + + -- Set proper altitude and speed (with nil checks) + local currentCoord = spawnedGroup:GetCoordinate() + if currentCoord then + local properAltCoord = currentCoord:SetAltitude(config.altitude) + spawnedGroup:RouteAirTo(properAltCoord, config.speed, "BARO") + env.info("✓ Set altitude to " .. config.altitude .. "ft") + else + env.info("⚠ Coordinate not ready yet, CAP task will handle altitude") + end + + -- Set up comprehensive AI options with error handling + local success, errorMsg = pcall(function() + spawnedGroup:OptionROEOpenFire() -- Engage enemies + spawnedGroup:OptionRTBBingoFuel() -- RTB when low fuel + spawnedGroup:OptionRTBAmmo(0.1) -- RTB when 10% ammo left + + -- Helicopter-specific AI options to prevent oscillation + if config.type == "HELICOPTER" then + spawnedGroup:OptionROTNoReaction() -- Less aggressive altitude changes + else + spawnedGroup:OptionROTVertical() -- No altitude restrictions for fighters + end + end) + + if not success then + env.info("⚠ Warning: Could not set all AI options: " .. tostring(errorMsg)) + end + + -- Create randomized patrol system to prevent clustering + local function setupRandomPatrol() + if spawnedGroup and spawnedGroup:IsAlive() and config.patrolZone then + -- Get a random point within the patrol zone + local patrolZoneCoord = config.patrolZone:GetCoordinate() + if patrolZoneCoord then + -- Generate random patrol point within zone boundaries + local maxRadius = math.min(GCI_Config.capOrbitRadius, 25000) -- Max 25km from zone center + local randomRadius = math.random(GCI_Config.minPatrolSeparation, maxRadius) + local randomBearing = math.random(0, 360) + + local patrolPoint = patrolZoneCoord:Translate(randomRadius, randomBearing) + patrolPoint = patrolPoint:SetAltitude(config.altitude * 0.3048) -- Convert to meters + + env.info("Setting new patrol area for " .. config.displayName .. " at " .. randomRadius .. "m/" .. randomBearing .. "°") + + -- Clear old tasks and set new patrol orbit + spawnedGroup:ClearTasks() + + -- Primary orbit task at random location (helicopter-specific parameters) + local orbitTask = {} + if config.type == "HELICOPTER" then + -- Helicopter-specific orbit to prevent oscillation + orbitTask = { + id = 'Orbit', + params = { + pattern = 'Race-Track', -- More stable for helicopters + point = {x = patrolPoint.x, y = patrolPoint.z}, + radius = math.min(GCI_Config.patrolAreaRadius, 8000), -- Smaller radius for helos + altitude = config.altitude * 0.3048, + speed = config.speed * 0.514444, + altitudeEdited = true -- Lock altitude to prevent oscillation + } + } + else + -- Standard fighter orbit + orbitTask = { + id = 'Orbit', + params = { + pattern = 'Circle', + point = {x = patrolPoint.x, y = patrolPoint.z}, + radius = GCI_Config.patrolAreaRadius, + altitude = config.altitude * 0.3048, + speed = config.speed * 0.514444, + } + } + end + spawnedGroup:PushTask(orbitTask, 1) + + -- Secondary engage task (always active) + local engageTask = { + id = 'EngageTargets', + params = { + targetTypes = {'Air'}, + priority = 2, + maxDistEnabled = true, + maxDist = GCI_Config.capEngagementRange, + } + } + spawnedGroup:PushTask(engageTask, 2) + + env.info("✓ " .. config.displayName .. " assigned to patrol area " .. randomRadius .. "m from zone center") + end + end + end + + -- Set up initial patrol area + local capSuccess, capError = pcall(function() + setupRandomPatrol() + + -- Schedule patrol area changes every AI_PATROL_TIME seconds + if TADC.activeCAPs[config.templateName] then + TADC.activeCAPs[config.templateName].patrolScheduler = SCHEDULER:New(nil, setupRandomPatrol, {}, GCI_Config.AI_PATROL_TIME, GCI_Config.AI_PATROL_TIME) + end + end) + + if not capSuccess then + env.info("⚠ Warning: Could not set CAP tasks: " .. tostring(capError)) + -- Fallback: just set basic engage task + spawnedGroup:OptionROEOpenFire() + end + + env.info("✓ CAP mission established at " .. config.altitude .. "ft altitude") + + end + end, {}, 5) -- 5 second delay to let aircraft stabilize + + -- Mark as active + TADC.activeCAPs[config.templateName] = { + group = spawnedGroup, + launchTime = timer.getTime(), + config = config + } + + -- Set up extended patrol timer (much longer than before) + local patrolDuration = math.max(config.patrolTime * 60, GCI_Config.minPatrolDuration) -- Minimum from config + SCHEDULER:New(nil, function() + if TADC.activeCAPs[config.templateName] then + env.info(config.displayName .. " completing patrol mission - RTB") + local group = TADC.activeCAPs[config.templateName].group + if group and group:IsAlive() then + -- Clear current tasks + group:ClearTasks() + + -- Send back to base + local airbaseObj = AIRBASE:FindByName(config.airbaseName) + if airbaseObj then + group:RouteRTB(airbaseObj) + env.info("✓ " .. config.displayName .. " returning to " .. config.airbaseName) + end + + -- Clean up after RTB delay + SCHEDULER:New(nil, function() + if TADC.activeCAPs[config.templateName] then + local capData = TADC.activeCAPs[config.templateName] + local rtbGroup = capData.group + + -- Stop patrol scheduler + if capData.patrolScheduler then + capData.patrolScheduler:Stop() + end + + if rtbGroup and rtbGroup:IsAlive() then + rtbGroup:Destroy() + env.info("✓ " .. config.displayName .. " landed and available for next sortie") + end + TADC.activeCAPs[config.templateName] = nil + end + end, {}, GCI_Config.rtbDuration) -- RTB time from config + else + -- Stop patrol scheduler if CAP is being cleaned up early + if TADC.activeCAPs[config.templateName] and TADC.activeCAPs[config.templateName].patrolScheduler then + TADC.activeCAPs[config.templateName].patrolScheduler:Stop() + end + TADC.activeCAPs[config.templateName] = nil + end + end + end, {}, patrolDuration) + + else + env.info("✗ Failed to spawn " .. config.displayName) + end + end) + + if not success then + env.info("✗ Error launching CAP: " .. tostring(errorMsg)) + return false + else + env.info("✓ CAP launch completed successfully") + return true + end +end + +-- ================================================================================================ +-- MISSION EXECUTION FUNCTION (Now can call launchCAP) +-- ================================================================================================ + +local function executeThreatsAssignments(assignments) + if not assignments or #assignments == 0 then + return false + end + + local currentTime = timer.getTime() + + env.info("=== EXECUTING THREAT ASSIGNMENTS ===") + env.info("Processing " .. #assignments .. " threat assignments") + + local launchedFlights = {} + + for _, assignment in pairs(assignments) do + local squadron = assignment.squadron + local templateName = assignment.templateName + + -- Check squadron availability and cooldown + if squadron.readinessLevel == "READY" and + squadron.availableAircraft >= 1 and + (currentTime - squadron.lastLaunch) >= squadron.launchCooldown then + + local reason = "Intercept: " .. (assignment.threat and assignment.threat.id or "Unknown") .. " (" .. (assignment.threat and assignment.threat.classification or "Unknown") .. ")" + local success = launchCAP(assignment.config, 1, reason) + + if success then + -- Update squadron status - squadron is now BUSY with this threat + squadron.availableAircraft = squadron.availableAircraft - 1 + squadron.airborneAircraft = squadron.airborneAircraft + 1 + squadron.lastLaunch = currentTime + squadron.sorties = squadron.sorties + 1 + squadron.readinessLevel = "BUSY" -- Squadron is now handling this threat + + TADC.stats.interceptsLaunched = TADC.stats.interceptsLaunched + 1 + + -- Store mission details + TADC.missions[assignment.threatId] = { + threatId = assignment.threatId, + squadron = templateName, + threat = assignment.threat, + startTime = currentTime, + status = "ACTIVE" + } + + table.insert(launchedFlights, { + squadron = templateName, + threat = assignment.threat and assignment.threat.id or "Unknown", + launchTime = currentTime + }) + + env.info("✓ Launched: " .. squadron.displayName .. " → " .. (assignment.threat and assignment.threat.id or "Unknown")) + else + env.info("✗ Launch failed: " .. squadron.displayName) + end + else + local reason = "Unknown" + if squadron.readinessLevel ~= "READY" then + reason = "Not ready (" .. squadron.readinessLevel .. ")" + elseif squadron.availableAircraft < 1 then + reason = "Insufficient aircraft (" .. squadron.availableAircraft .. " available)" + elseif (currentTime - squadron.lastLaunch) < squadron.launchCooldown then + reason = "On cooldown (" .. math.ceil(squadron.launchCooldown - (currentTime - squadron.lastLaunch)) .. "s remaining)" + end + env.info("✗ Cannot launch " .. squadron.displayName .. ": " .. reason) + end + end + + -- Store mission for tracking + -- (Removed assignment to TADC.missions[missionId] due to undefined variables) + + return #launchedFlights > 0 +end + +-- ================================================================================================ +-- PERSISTENT CAP HELPER FUNCTIONS +-- ================================================================================================ + +local function getPersistentCAPCount() + local count = 0 + for _, capData in pairs(TADC.persistentCAPs) do + if capData.group and capData.group:IsAlive() then + count = count + 1 + else + -- Clean up dead persistent CAPs + TADC.persistentCAPs[capData.templateName] = nil + end + end + return count +end + +local function launchPersistentCAP(templateName, reason) + -- Find the original squadron config + local config = nil + for _, squadronConfig in pairs(squadronConfigs) do + if squadronConfig.templateName == templateName then + config = squadronConfig + break + end + end + + if not config or not TADC.squadrons[templateName] then + return false + end + + local squadron = TADC.squadrons[templateName] + local currentTime = timer.getTime() + + -- Check if squadron is available (not on cooldown, has aircraft) + if squadron.readinessLevel ~= "READY" or + squadron.availableAircraft < 1 or + (currentTime - squadron.lastLaunch) < squadron.launchCooldown then + return false + end + + -- Launch the CAP + local success = launchCAP(config, 1, reason) + if success then + -- Track as persistent CAP (separate from regular intercept CAPs) + TADC.persistentCAPs[templateName] = { + templateName = templateName, + group = TADC.activeCAPs[templateName] and TADC.activeCAPs[templateName].group, + launchTime = currentTime, + isPersistent = true + } + + if GCI_Config.debugLevel >= 1 then + env.info("✓ Persistent CAP launched: " .. squadron.displayName) + end + + return true + end + + return false +end + +local function maintainPersistentCAP() + if not GCI_Config.enablePersistentCAP then + return + end + + local currentTime = timer.getTime() + + -- Only check every persistentCAPInterval seconds + if (currentTime - TADC.lastPersistentCheck) < GCI_Config.persistentCAPInterval then + return + end + + TADC.lastPersistentCheck = currentTime + + -- Calculate total airborne aircraft to respect maxSimultaneousCAP limit + local totalAirborne = 0 + for _, squadron in pairs(TADC.squadrons) do + totalAirborne = totalAirborne + squadron.airborneAircraft + end + + local currentPersistentCount = getPersistentCAPCount() + local needed = GCI_Config.persistentCAPCount - currentPersistentCount + + -- Respect maxSimultaneousCAP limit with reserve for threat response + local maxPersistentAllowed = math.floor(GCI_Config.maxSimultaneousCAP * (1 - GCI_Config.persistentCAPReserve)) + local effectiveTarget = math.min(GCI_Config.persistentCAPCount, maxPersistentAllowed) + local availableSlots = maxPersistentAllowed - currentPersistentCount + + -- Recalculate needed based on effective limits + needed = math.min(needed, availableSlots) + needed = math.max(0, needed) + + if needed < (GCI_Config.persistentCAPCount - currentPersistentCount) and GCI_Config.debugLevel >= 1 then + env.info("⚠ Persistent CAP limited: Target=" .. GCI_Config.persistentCAPCount .. ", Effective=" .. effectiveTarget .. " (reserving " .. math.ceil(GCI_Config.maxSimultaneousCAP * GCI_Config.persistentCAPReserve) .. " slots for threats)") + end + + if needed > 0 then + if GCI_Config.debugLevel >= 1 then + env.info("=== PERSISTENT CAP MAINTENANCE ===") + env.info("Current: " .. currentPersistentCount .. ", Target: " .. GCI_Config.persistentCAPCount .. ", Need: " .. needed) + env.info("Total airborne: " .. totalAirborne .. "/" .. GCI_Config.maxSimultaneousCAP .. " (available slots: " .. availableSlots .. ")") + end + + -- Launch needed persistent CAPs from priority list + local launched = 0 + for _, templateName in pairs(GCI_Config.persistentCAPPriority) do + if launched >= needed then + break + end + + -- Skip if this squadron already has a persistent CAP + if not TADC.persistentCAPs[templateName] or + not TADC.persistentCAPs[templateName].group or + not TADC.persistentCAPs[templateName].group:IsAlive() then + + if launchPersistentCAP(templateName, "Persistent CAP maintenance") then + launched = launched + 1 + end + end + end + + if GCI_Config.debugLevel >= 1 then + env.info("✓ Persistent CAP maintenance complete: " .. launched .. " new patrols launched") + end + end +end + + + +-- ================================================================================================ +-- MAIN TADC CONTROL LOOP +-- ================================================================================================ + +local function mainTADCLoop() + local currentTime = timer.getTime() + + -- Update threat picture + local threats = updateThreatPicture() + local threatCount = 0 + for _ in pairs(threats) do threatCount = threatCount + 1 end + + if threatCount > 0 then + if GCI_Config.debugLevel >= 2 then + env.info("=== TADC THREAT ASSESSMENT ===") + env.info("Active threats: " .. threatCount) + end + + -- Plan responses for each zone + local zones = {"RED_BORDER", "HELO_BORDER"} + + for _, zone in pairs(zones) do + local assignments = assignThreatsToSquadrons(threats, zone) + + if #assignments > 0 then + -- Wait for response delay before executing (allows threat picture to stabilize) + local readyAssignments = {} + + for _, assignment in pairs(assignments) do + local threatAge = currentTime - assignment.threat.firstDetected + if threatAge >= GCI_Config.responseDelay then + table.insert(readyAssignments, assignment) + elseif GCI_Config.debugLevel >= 2 then + env.info("Delaying assignment: " .. (assignment.threat and assignment.threat.id or "Unknown") .. " (age: " .. math.floor(threatAge) .. "s)") + end + end + + if #readyAssignments > 0 then + executeThreatsAssignments(readyAssignments) + end + end + end + end + + -- Clean up completed missions and free squadrons + for missionId, mission in pairs(TADC.missions) do + local squadron = TADC.squadrons[mission.squadron] + if squadron then + -- Check if mission should be completed (threat destroyed, timed out, or squadron has no airborne aircraft) + local missionAge = currentTime - mission.startTime + local shouldComplete = false + + -- Mission timeout (30 minutes) + if missionAge > 1800 then + shouldComplete = true + end + + -- Squadron has returned (no airborne aircraft) + if squadron.airborneAircraft == 0 and missionAge > 300 then -- Give 5 min minimum mission time + shouldComplete = true + end + + -- Threat no longer exists + local threatExists = false + for _, threat in pairs(threats) do + if (threat.id .. "_" .. threat.firstDetected) == missionId then + threatExists = true + break + end + end + if not threatExists and missionAge > 60 then -- 1 minute grace period + shouldComplete = true + end + + if shouldComplete then + -- Free the squadron for new missions + squadron.readinessLevel = "READY" + TADC.squadronMissions[mission.squadron] = nil + TADC.threatAssignments[missionId] = nil + TADC.missions[missionId] = nil + + if GCI_Config.debugLevel >= 1 then + env.info("Mission completed: " .. mission.squadron .. " freed from " .. (mission.threat and mission.threat.id or "unknown threat")) + end + end + else + -- Squadron doesn't exist anymore, clean up + TADC.missions[missionId] = nil + TADC.threatAssignments[missionId] = nil + end + end + + -- Periodic status report + if GCI_Config.debugLevel >= 1 and (currentTime % GCI_Config.statusReportInterval) < 30 then -- Status reports from config + local totalAirborne = 0 + local totalAvailable = 0 + for _, squadron in pairs(TADC.squadrons) do + totalAirborne = totalAirborne + squadron.airborneAircraft + totalAvailable = totalAvailable + squadron.availableAircraft + end + + env.info("=== TADC STATUS REPORT ===") + env.info("Threats: " .. threatCount .. " active") + env.info("Aircraft: " .. totalAirborne .. " airborne, " .. totalAvailable .. " available") + env.info("Statistics: " .. TADC.stats.threatsDetected .. " threats detected, " .. TADC.stats.interceptsLaunched .. " intercepts launched") + + -- Persistent CAP Status + if GCI_Config.enablePersistentCAP then + local persistentCount = getPersistentCAPCount() + local maxPersistentAllowed = math.floor(GCI_Config.maxSimultaneousCAP * (1 - GCI_Config.persistentCAPReserve)) + local threatReserve = GCI_Config.maxSimultaneousCAP - maxPersistentAllowed + env.info("Persistent CAP: " .. persistentCount .. "/" .. GCI_Config.persistentCAPCount .. " target (" .. maxPersistentAllowed .. " max, " .. threatReserve .. " reserved for threats)") + end + end + + -- Persistent CAP Management + if GCI_Config.enablePersistentCAP then + maintainPersistentCAP() + end +end + +-- ================================================================================================ +-- PERSISTENT CAP MANAGEMENT SYSTEM +-- ================================================================================================ + +local function setupTADC() + env.info("=== INITIALIZING TACTICAL AIR DEFENSE CONTROLLER ===") + env.info("✓ Configuration loaded:") + env.info(" - Threat Ratio: " .. GCI_Config.threatRatio .. ":1") + env.info(" - Max Simultaneous CAP: " .. GCI_Config.maxSimultaneousCAP) + env.info(" - Reserve Percentage: " .. (GCI_Config.reservePercent * 100) .. "%") + env.info(" - Supply Mode: " .. GCI_Config.supplyMode) + env.info(" - Response Delay: " .. GCI_Config.responseDelay .. " seconds") + + -- Persistent CAP Configuration + if GCI_Config.enablePersistentCAP then + local maxPersistentAllowed = math.floor(GCI_Config.maxSimultaneousCAP * (1 - GCI_Config.persistentCAPReserve)) + local threatReserve = math.ceil(GCI_Config.maxSimultaneousCAP * GCI_Config.persistentCAPReserve) + env.info(" - Persistent CAP: ENABLED (" .. GCI_Config.persistentCAPCount .. " target, " .. maxPersistentAllowed .. " max allowed)") + env.info(" - Threat Response Reserve: " .. threatReserve .. " aircraft slots") + env.info(" - Persistent CAP Check Interval: " .. GCI_Config.persistentCAPInterval .. " seconds") + else + env.info(" - Persistent CAP: DISABLED") + end + + -- CAP Behavior Configuration + env.info(" - CAP Orbit Radius: " .. (GCI_Config.capOrbitRadius / 1000) .. "km") + env.info(" - CAP Engagement Range: " .. (GCI_Config.capEngagementRange / 1000) .. "km") + env.info(" - Zone Constraint: " .. (GCI_Config.capZoneConstraint and "ENABLED" or "DISABLED")) + + -- Start main control loop + SCHEDULER:New(nil, mainTADCLoop, {}, GCI_Config.mainLoopDelay, GCI_Config.mainLoopInterval) -- Main loop timing from config + + env.info("✓ TADC main control loop started") + env.info("✓ Tactical Air Defense Controller operational!") +end + +-- Initialize the TADC system +SCHEDULER:New(nil, function() + setupTADC() + + -- Launch initial persistent CAP flights if enabled + if GCI_Config.enablePersistentCAP then + env.info("=== LAUNCHING INITIAL PERSISTENT CAP ===") + TADC.lastPersistentCheck = 0 -- Force immediate check + maintainPersistentCAP() + end + + -- Legacy: Optional initial standing patrols (if configured) + if GCI_Config.initialStandingPatrols then + local initialPatrols = { + "FIGHTER_SWEEP_RED_Severomorsk-1", -- Main base always has standing patrol + "HELO_SWEEP_RED_Afrikanda" -- Helo patrol coverage + } + + for _, templateName in pairs(initialPatrols) do + if TADC.squadrons[templateName] then + -- Find the original squadron config + local config = nil + for _, squadronConfig in pairs(squadronConfigs) do + if squadronConfig.templateName == templateName then + config = squadronConfig + break + end + end + + if config then + launchCAP(config, 1, "Initial standing patrol") + end + end + end + end + + env.info("=== TADC INITIALIZATION COMPLETE ===") + env.info("✓ Intelligent threat assessment and response") + env.info("✓ Multi-squadron coordinated intercepts") + env.info("✓ Dynamic force sizing based on threat strength") + env.info("✓ Resource management with reserve forces") + env.info("✓ EWR network integration with " .. (RedEWR:Count()) .. " detection groups") + env.info("✓ Tactical Air Defense Controller operational!") + +end, {}, 5) \ No newline at end of file diff --git a/DCS_Kola/Operation_Polar_Shield/OnBirthMessage.lua b/DCS_Kola/Operation_Polar_Shield/OnBirthMessage.lua new file mode 100644 index 0000000..b5f0b75 --- /dev/null +++ b/DCS_Kola/Operation_Polar_Shield/OnBirthMessage.lua @@ -0,0 +1,213 @@ +-- Immediate test to confirm script is loading +env.info("=== OnBirthMessage.lua LOADING ===") +trigger.action.outText("OnBirthMessage script is loading...", 10) + +-- Player preferences storage +local playerWelcomeSettings = {} +local processedPlayers = {} -- Track players to prevent double processing + +-- F10 Menu Functions +local function enableWelcomeMessage(playerUnitID, playerName) + env.info("OnBirthMessage: enableWelcomeMessage called for " .. playerName) + playerWelcomeSettings[playerName] = true + trigger.action.outTextForUnit(playerUnitID, "✅ Welcome messages ENABLED", 10) + env.info("OnBirthMessage: Enabled for " .. playerName) +end + +local function disableWelcomeMessage(playerUnitID, playerName) + env.info("OnBirthMessage: disableWelcomeMessage called for " .. playerName) + playerWelcomeSettings[playerName] = false + trigger.action.outTextForUnit(playerUnitID, "❌ Welcome messages DISABLED", 10) + env.info("OnBirthMessage: Disabled for " .. playerName) +end + +local function addWelcomeMenuForPlayer(playerUnit, playerName) + env.info("OnBirthMessage: Adding menu for " .. playerName) + + local success, errorMsg = pcall(function() + local playerGroup = playerUnit:getGroup() + local playerUnitID = playerUnit:getID() + local groupID = playerGroup:getID() + + env.info("OnBirthMessage: Group ID: " .. groupID .. ", Unit ID: " .. playerUnitID) + + -- Remove existing menus to prevent duplicates + env.info("OnBirthMessage: Cleaning up existing menus") + missionCommands.removeItemForGroup(groupID, {"Welcome Messages", "Enable Welcome Message"}) + missionCommands.removeItemForGroup(groupID, {"Welcome Messages", "Disable Welcome Message"}) + missionCommands.removeItemForGroup(groupID, {"Welcome Messages", "Test Menu Works"}) + missionCommands.removeItemForGroup(groupID, {"Welcome Messages"}) + + -- Create main menu + env.info("OnBirthMessage: Creating new menu") + missionCommands.addSubMenuForGroup(groupID, "Welcome Messages") + + -- Add commands with simpler functions to avoid freezing + missionCommands.addCommandForGroup(groupID, "Enable Welcome Message", {"Welcome Messages"}, + function() + playerWelcomeSettings[playerName] = true + trigger.action.outTextForGroup(groupID, "✅ Welcome messages ENABLED for " .. playerName, 10) + end) + + missionCommands.addCommandForGroup(groupID, "Disable Welcome Message", {"Welcome Messages"}, + function() + playerWelcomeSettings[playerName] = false + trigger.action.outTextForGroup(groupID, "❌ Welcome messages DISABLED for " .. playerName, 10) + end) + + -- Add a test command + missionCommands.addCommandForGroup(groupID, "Test Menu Works", {"Welcome Messages"}, + function() + trigger.action.outTextForGroup(groupID, "✅ F10 Menu is working for " .. playerName, 10) + end) + + env.info("OnBirthMessage: Menu added successfully for " .. playerName) + end) + + if not success then + env.info("OnBirthMessage: Menu creation failed: " .. tostring(errorMsg)) + end +end + +onPlayerJoin = {} +function onPlayerJoin:onEvent(event) + env.info("OnBirthMessage: Event triggered - ID: " .. tostring(event.id)) + + -- Trigger on both BIRTH and ENGINE_STARTUP events for better coverage + if (event.id == world.event.S_EVENT_BIRTH or event.id == world.event.S_EVENT_ENGINE_STARTUP) then + env.info("OnBirthMessage: Correct event type detected") + + if event.initiator then + env.info("OnBirthMessage: Initiator exists") + local playerName = event.initiator:getPlayerName() + if playerName then + env.info("OnBirthMessage: Player name found: " .. playerName) + + -- Check if we've already processed this player to prevent doubles + local playerKey = playerName .. "_" .. event.id + if processedPlayers[playerKey] then + env.info("OnBirthMessage: Already processed " .. playerName .. " for event " .. event.id .. " - skipping") + return + end + processedPlayers[playerKey] = true + + -- Add error handling to prevent script crashes + local success, errorMsg = pcall(function() + local playerGroup = event.initiator:getGroup() + local playerUnit = playerGroup:getUnit(1) + local playerSide = playerGroup:getCoalition() + local playerID = playerGroup:getID() + local playerAircraft = playerUnit:getTypeName() + local playerUnitID = playerUnit:getID() + + -- Debug message to confirm script is running + env.info("OnBirthMessage: Player " .. playerName .. " joined in " .. playerAircraft .. " (Coalition: " .. playerSide .. ")") + + -- Send immediate test message + trigger.action.outTextForUnit(playerUnitID, "OnBirthMessage: Script detected you joining as " .. playerName, 15) + + -- Initialize player preference if not set (default to enabled) + if playerWelcomeSettings[playerName] == nil then + playerWelcomeSettings[playerName] = true + end + + -- Add F10 menu for welcome message control (only once per player) + env.info("OnBirthMessage: About to create menu for " .. playerName) + addWelcomeMenuForPlayer(playerUnit, playerName) + + -- Only show welcome message if player has it enabled + if not playerWelcomeSettings[playerName] then + env.info("OnBirthMessage: Skipping welcome message for " .. playerName .. " (disabled by player)") + return + end + + -- Prepare welcome message content + local MissionName = + "=====[ Fighting 99th - Operation Polar Shield / Polar Hammer]====" + + local Discord = + "Please join our Discord Server @ https://discord.gg/WDZqAzAs for improved comms and a better mission experience!\n" .. + "You can turn off this message in the F10 menu under 'Welcome Messages'.\n" + + local ObjectiveRed = + "==============[ OPERATION POLAR SHIELD ]=============\n" .. + "🛡️ DEFENSIVE MISSION - HOLD THE ARCTIC FRONTIER 🛡️\n\n" .. + "SITUATION: Russian forces have secured key strategic positions across the Kola Peninsula. Your mission is to maintain this defensive shield against NATO's 'Polar Hammer' offensive operations.\n\n" .. + "PRIMARY OBJECTIVES:\n" .. + "🎯 CAP - Maintain air superiority over the RED BORDER zone\n" .. + "🎯 INTERCEPT - Eliminate all NATO penetrations of Russian airspace\n" .. + "🎯 DEFEND - Protect airbases: Severomorsk, Murmansk, Olenya, Kilpyavr, Monchegorsk, Afrikanda\n\n" .. + "⚠️ INTELLIGENCE BRIEFING ⚠️\n" .. + "• Advanced TADC system provides automated threat response\n" .. + "• Persistent CAP flights maintain 24/7 border patrol\n" .. + "• AI squadrons will launch coordinated intercepts\n" .. + "• EWR network provides early warning coverage\n\n" .. + "WEATHER: Arctic conditions - limited visibility, icing risk\n" .. + "TERRAIN: Mountainous, frozen terrain - emergency landing sites scarce\n\n" + + local ObjectiveBlue = + "==============[ OPERATION POLAR HAMMER ]=============\n" .. + "⚔️ OFFENSIVE MISSION - BREAK THE RUSSIAN SHIELD ⚔️\n\n" .. + "SITUATION: Russian forces have established a defensive 'Polar Shield' across the Kola Peninsula. NATO forces must execute 'Polar Hammer' - a coordinated offensive to break Russian air superiority and penetrate their defensive perimeter.\n\n" .. + "PRIMARY OBJECTIVES:\n" .. + "🎯 CAP - Establish air superiority within the RED BORDER zone\n" .. + "🎯 SWEEP - Clear Russian interceptors and defensive CAP flights\n" .. + "🎯 SEAD - Suppress Russian EWR network and SAM systems\n" .. + "🎯 STRIKE - Attack Russian airbases and defensive positions\n\n" .. + "⚠️ INTELLIGENCE BRIEFING ⚠️\n" .. + "• Enemy operates advanced Tactical Air Defense Controller (TADC)\n" .. + "• Expect coordinated multi-squadron intercepts\n" .. + "• Russians maintain persistent CAP along border zones\n" .. + "• Enemy response times: ~15 seconds from detection\n" .. + "• Multiple threats will trigger proportional defensive response\n\n" .. + "WEATHER: Arctic conditions - limited visibility, icing risk\n" .. + "TERRAIN: Mountainous, frozen terrain - plan fuel carefully\n\n" .. + "🔥 BREAK THE SHIELD - EXECUTE POLAR HAMMER! 🔥\n\n" + + local TacticalInfo = + "================[ TACTICAL NOTES ]===============\n" .. + "RED SMOKE : Target areas or supply zones\n" .. + "BLUE SMOKE : Friendly pickup/drop zones\n" .. + "GREEN SMOKE: Medical evacuation points\n\n" .. + "COMMS: Use proper brevity codes for air-to-air combat\n" .. + "FUEL: Monitor fuel carefully in Arctic conditions\n\n" + + local EndBrief = "==============[ END MISSION BRIEF ]==============\n\n" + + -- Send appropriate message to each coalition (only to the individual player) + env.info("OnBirthMessage: Sending welcome message to " .. playerName) + + if playerSide == coalition.side.BLUE then --blue team + trigger.action.outTextForUnit(playerUnitID, "" .. MissionName .. "\n\n" .. "Welcome to the Arctic Theater, " .. playerName .. "!" .. "\n\n" .. Discord .. "\n\n" .. ObjectiveBlue .. TacticalInfo .. EndBrief, 45) + env.info("OnBirthMessage: Blue team message sent to " .. playerName) + elseif playerSide == coalition.side.RED then -- red team + trigger.action.outTextForUnit(playerUnitID, "" .. MissionName .. "\n\n" .. "Добро пожаловать, " .. playerName .. "!" .. "\n\n" .. Discord .. "\n\n" .. ObjectiveRed .. TacticalInfo .. EndBrief, 45) + env.info("OnBirthMessage: Red team message sent to " .. playerName) + else + env.info("OnBirthMessage: Unknown coalition for " .. playerName .. " (coalition=" .. playerSide .. ")") + end + + -- trigger.action.outSoundForGroup(playerID, "l10n/DEFAULT/battlemusic.ogg") -- Damn Cry Babbies + end) + + if not success then + env.info("OnBirthMessage Error: " .. tostring(errorMsg)) + end + else + env.info("OnBirthMessage: No player name found") + end + else + env.info("OnBirthMessage: No initiator found") + end + else + -- Uncomment next line if you want to see all events (very spammy) + -- env.info("OnBirthMessage: Ignoring event ID: " .. tostring(event.id)) + end +end + +-- Register event handler +env.info("OnBirthMessage: Registering event handler...") +world.addEventHandler(onPlayerJoin) +env.info("OnBirthMessage: Event handler registered successfully") +env.info("=== OnBirthMessage.lua LOADED SUCCESSFULLY ===") +trigger.action.outText("OnBirthMessage script loaded - check for welcome messages when joining aircraft", 15) \ No newline at end of file diff --git a/DCS_Kola/Operation_Polar_Shield/test.lua b/DCS_Kola/Operation_Polar_Shield/test.lua new file mode 100644 index 0000000..98fb7f3 --- /dev/null +++ b/DCS_Kola/Operation_Polar_Shield/test.lua @@ -0,0 +1,69 @@ +-- Add this at the very beginning after MOOSE loads +env.info("=== MOOSE DEBUG INFO ===") +env.info("MOOSE loaded: " .. tostring(MOOSE ~= nil)) +env.info("OPS available: " .. tostring(OPS ~= nil)) +env.info("_G.OPS available: " .. tostring(_G.OPS ~= nil)) + +-- Check what's in the global namespace +for k,v in pairs(_G) do + if string.find(k, "OPS") then + env.info("Found OPS-related: " .. k .. " = " .. tostring(v)) + end +end + + +-- Debug airbase availability +env.info("=== AIRBASE DEBUG ===") +env.info("AIRBASE table exists: " .. tostring(AIRBASE ~= nil)) + +if AIRBASE then + env.info("AIRBASE.Kola exists: " .. tostring(AIRBASE.Kola ~= nil)) + + -- List all airbases found on the map + env.info("=== ALL AIRBASES ON MAP ===") + + -- Method 1: Try using SET_AIRBASE to get all airbases + if SET_AIRBASE then + env.info("Using SET_AIRBASE method...") + local airbaseSet = SET_AIRBASE:New():FilterOnce() + if airbaseSet then + local count = airbaseSet:Count() + env.info("Total airbases found: " .. count) + airbaseSet:ForEach(function(airbase) + if airbase then + local name = airbase:GetName() + local coalition = airbase:GetCoalition() + local coalitionName = "Unknown" + if coalition == 0 then coalitionName = "Neutral" + elseif coalition == 1 then coalitionName = "Red" + elseif coalition == 2 then coalitionName = "Blue" + end + env.info("Airbase: '" .. name .. "' (" .. coalitionName .. ")") + end + end) + end + end + + -- Method 2: Try specific airbase names we expect + env.info("=== TESTING SPECIFIC AIRBASES ===") + local testNames = { + "Severomorsk-1", "Severomorsk-3", "Kilpyavr", "Murmansk", + "Monchegorsk", "Olenya", "Afrikanda" + } + + for _, name in pairs(testNames) do + local airbase = AIRBASE:FindByName(name) + env.info(name .. ": " .. tostring(airbase ~= nil)) + if airbase then + env.info(" - Coalition: " .. airbase:GetCoalition()) + end + end + + -- Alternative method - check AIRBASE.Kola if it exists + if AIRBASE.Kola then + env.info("=== AIRBASE.Kola CONSTANTS ===") + for k,v in pairs(AIRBASE.Kola) do + env.info("AIRBASE.Kola." .. k .. " = " .. tostring(v)) + end + end +end \ No newline at end of file diff --git a/Moose_.lua b/Moose_.lua index 1859b96..a0357ab 100644 --- a/Moose_.lua +++ b/Moose_.lua @@ -1,4 +1,4 @@ -env.info('*** MOOSE GITHUB Commit Hash ID: 2024-12-03T18:10:06+01:00-86e899f39bc5120901cbbb4e8d4b87bf0ccc44af ***') +env.info('*** MOOSE GITHUB Commit Hash ID: 2025-10-01T15:26:49+02:00-d8281b01032aa44a579c14d690ca79413b671d9d ***') if not MOOSE_DEVELOPMENT_FOLDER then MOOSE_DEVELOPMENT_FOLDER='Scripts' end @@ -1028,6 +1028,125 @@ ENUMS.Storage.weapons.bombs.AGM_62="weapons.bombs.AGM_62" ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_WHITE="weapons.containers.{US_M10_SMOKE_TANK_WHITE}" ENUMS.Storage.weapons.missiles.MICA_T="weapons.missiles.MICA_T" ENUMS.Storage.weapons.containers.HVAR_rocket="weapons.containers.HVAR_rocket" +ENUMS.Storage.weapons.containers.LANTIRN="weapons.containers.LANTIRN" +ENUMS.Storage.weapons.missiles.AGM_78B="weapons.missiles.AGM_78B" +ENUMS.Storage.weapons.containers.uh_60l_pilot="weapons.containers.uh-60l_pilot" +ENUMS.Storage.weapons.missiles.AIM_92E="weapons.missiles.AIM-92E" +ENUMS.Storage.weapons.missiles.KD_63B="weapons.missiles.KD_63B" +ENUMS.Storage.weapons.bombs.Type_200A="weapons.bombs.Type_200A" +ENUMS.Storage.weapons.missiles.HB_AIM_7E_2="weapons.missiles.HB-AIM-7E-2" +ENUMS.Storage.weapons.containers.Spear="weapons.containers.Spear" +ENUMS.Storage.weapons.missiles.LS_6="weapons.missiles.LS_6" +ENUMS.Storage.weapons.containers.HB_ALE_40_0_120="weapons.containers.HB_ALE_40_0_120" +ENUMS.Storage.weapons.containers.Fantasm="weapons.containers.Fantasm" +ENUMS.Storage.weapons.nurs.FFAR_Mk61="weapons.nurs.FFAR_Mk61" +ENUMS.Storage.weapons.bombs.HB_F4E_GBU15V1="weapons.bombs.HB_F4E_GBU15V1" +ENUMS.Storage.weapons.containers.HB_F14_EXT_AN_APQ_167="weapons.containers.HB_F14_EXT_AN_APQ-167" +ENUMS.Storage.weapons.nurs.LWL_RP="weapons.nurs.LWL_RP" +ENUMS.Storage.weapons.bombs.AGM_62_I="weapons.bombs.AGM_62_I" +ENUMS.Storage.weapons.containers.ETHER="weapons.containers.ETHER" +ENUMS.Storage.weapons.containers.TANGAZH="weapons.containers.TANGAZH" +ENUMS.Storage.weapons.bombs.LYSBOMB_11086="weapons.bombs.LYSBOMB 11086" +ENUMS.Storage.weapons.containers.Stub_Wing="weapons.containers.Stub_Wing" +ENUMS.Storage.weapons.missiles.AIM_9E="weapons.missiles.AIM-9E" +ENUMS.Storage.weapons.missiles.C_701T="weapons.missiles.C_701T" +ENUMS.Storage.weapons.bombs.BAP_100="weapons.bombs.BAP_100" +ENUMS.Storage.weapons.missiles.CM_802AKG="weapons.missiles.CM-802AKG" +ENUMS.Storage.weapons.missiles.CM_400AKG="weapons.missiles.CM-400AKG" +ENUMS.Storage.weapons.missiles.C_802AK="weapons.missiles.C_802AK" +ENUMS.Storage.weapons.missiles.KD_63="weapons.missiles.KD_63" +ENUMS.Storage.weapons.containers.HB_ORD_Pave_Spike_Fast="weapons.containers.HB_ORD_Pave_Spike_Fast" +ENUMS.Storage.weapons.missiles.SPIKE_ER2="weapons.missiles.SPIKE_ER2" +ENUMS.Storage.weapons.containers.KINGAL="weapons.containers.KINGAL" +ENUMS.Storage.weapons.containers.LANTIRN_F14_TARGET="weapons.containers.LANTIRN-F14-TARGET" +ENUMS.Storage.weapons.containers.SPS_141="weapons.containers.SPS-141" +ENUMS.Storage.weapons.bombs.BLU_3B_GROUP="weapons.bombs.BLU-3B_GROUP" +ENUMS.Storage.weapons.containers.HB_ALE_40_30_0="weapons.containers.HB_ALE_40_30_0" +ENUMS.Storage.weapons.droptanks.HB_HIGH_PERFORMANCE_CENTERLINE_600_GAL="weapons.droptanks.HB_HIGH_PERFORMANCE_CENTERLINE_600_GAL" +ENUMS.Storage.weapons.containers.ALQ_184="weapons.containers.ALQ-184" +ENUMS.Storage.weapons.missiles.AGM_45B="weapons.missiles.AGM_45B" +ENUMS.Storage.weapons.bombs.BLU_3_GROUP="weapons.bombs.BLU-3_GROUP" +ENUMS.Storage.weapons.missiles.SPIKE_ER="weapons.missiles.SPIKE_ER" +ENUMS.Storage.weapons.nurs.ARAKM70BAPPX="weapons.nurs.ARAKM70BAPPX" +ENUMS.Storage.weapons.bombs.LYSBOMB_11088="weapons.bombs.LYSBOMB 11088" +ENUMS.Storage.weapons.bombs.LYSBOMB_11087="weapons.bombs.LYSBOMB 11087" +ENUMS.Storage.weapons.missiles.KD_20="weapons.missiles.KD_20" +ENUMS.Storage.weapons.droptanks.HB_F_4E_EXT_WingTank="weapons.droptanks.HB_F-4E_EXT_WingTank" +ENUMS.Storage.weapons.missiles.Rb_04="weapons.missiles.Rb_04" +ENUMS.Storage.weapons.containers.AAQ_33="weapons.containers.AAQ-33" +ENUMS.Storage.weapons.droptanks.HB_F_4E_EXT_Center_Fuel_Tank_EMPTY="weapons.droptanks.HB_F-4E_EXT_Center_Fuel_Tank_EMPTY" +ENUMS.Storage.weapons.droptanks.HB_F_4E_EXT_WingTank_R_EMPTY="weapons.droptanks.HB_F-4E_EXT_WingTank_R_EMPTY" +ENUMS.Storage.weapons.droptanks.HB_F_4E_EXT_WingTank_EMPTY="weapons.droptanks.HB_F-4E_EXT_WingTank_EMPTY" +ENUMS.Storage.weapons.containers.uh_60l_copilot="weapons.containers.uh-60l_copilot" +ENUMS.Storage.weapons.droptanks.JAYHAWK_80gal_Fuel_Tankv2="weapons.droptanks.JAYHAWK_80gal_Fuel_Tankv2" +ENUMS.Storage.weapons.containers.supply_m134="weapons.containers.supply_m134" +ENUMS.Storage.weapons.containers.Seahawk_Pylon="weapons.containers.Seahawk_Pylon" +ENUMS.Storage.weapons.nurs.LWL_MPP="weapons.nurs.LWL_MPP" +ENUMS.Storage.weapons.nurs.S_5KP="weapons.nurs.S_5KP" +ENUMS.Storage.weapons.missiles.AIM_92J="weapons.missiles.AIM-92J" +ENUMS.Storage.weapons.missiles.HB_AIM_7E="weapons.missiles.HB-AIM-7E" +ENUMS.Storage.weapons.containers.ALQ_131="weapons.containers.ALQ-131" +ENUMS.Storage.weapons.containers.HB_F14_EXT_TARPS="weapons.containers.HB_F14_EXT_TARPS" +ENUMS.Storage.weapons.containers.MH60_SOAR="weapons.containers.MH60_SOAR" +ENUMS.Storage.weapons.missiles.YJ_83="weapons.missiles.YJ-83" +ENUMS.Storage.weapons.bombs.GBU_8_B="weapons.bombs.GBU_8_B" +ENUMS.Storage.weapons.containers.HB_F14_EXT_ECA="weapons.containers.HB_F14_EXT_ECA" +ENUMS.Storage.weapons.bombs.BAP_100="weapons.bombs.BAP-100" +ENUMS.Storage.weapons.nurs.M261_MPSM_Rocket="weapons.nurs.M261_MPSM_Rocket" +ENUMS.Storage.weapons.droptanks.SEAHAWK_120_Fuel_Tank="weapons.droptanks.SEAHAWK_120_Fuel_Tank" +ENUMS.Storage.weapons.containers.SHPIL="weapons.containers.SHPIL" +ENUMS.Storage.weapons.bombs.GBU_39="weapons.bombs.GBU_39" +ENUMS.Storage.weapons.nurs.S_5M="weapons.nurs.S_5M" +ENUMS.Storage.weapons.containers.HB_ALE_40_15_90="weapons.containers.HB_ALE_40_15_90" +ENUMS.Storage.weapons.missiles.AIM_7E="weapons.missiles.AIM-7E" +ENUMS.Storage.weapons.missiles.AIM_9P3="weapons.missiles.AIM-9P3" +ENUMS.Storage.weapons.missiles.AGM_12B="weapons.missiles.AGM_12B" +ENUMS.Storage.weapons.missiles.CM_802AKG="weapons.missiles.CM_802AKG" +ENUMS.Storage.weapons.droptanks.JAYHAWK_120_Fuel_Dual_Tank="weapons.droptanks.JAYHAWK_120_Fuel_Dual_Tank" +ENUMS.Storage.weapons.droptanks.HB_F_4E_EXT_Center_Fuel_Tank="weapons.droptanks.HB_F-4E_EXT_Center_Fuel_Tank" +ENUMS.Storage.weapons.containers.PAVETACK="weapons.containers.PAVETACK" +ENUMS.Storage.weapons.missiles.LS_6_500="weapons.missiles.LS_6_500" +ENUMS.Storage.weapons.bombs.LYSBOMB_11089="weapons.bombs.LYSBOMB 11089" +ENUMS.Storage.weapons.bombs.BLU_4B_GROUP="weapons.bombs.BLU-4B_GROUP" +ENUMS.Storage.weapons.containers.ah_64d_radar="weapons.containers.ah-64d_radar" +ENUMS.Storage.weapons.containers.F_18_LDT_POD="weapons.containers.F-18-LDT-POD" +ENUMS.Storage.weapons.containers.HB_ALE_40_30_60="weapons.containers.HB_ALE_40_30_60" +ENUMS.Storage.weapons.bombs.LS_6_100="weapons.bombs.LS_6_100" +ENUMS.Storage.weapons.droptanks.HB_F_4E_EXT_WingTank_R="weapons.droptanks.HB_F-4E_EXT_WingTank_R" +ENUMS.Storage.weapons.containers.SORBCIJA_R="weapons.containers.SORBCIJA_R" +ENUMS.Storage.weapons.missiles.CATM_65K="weapons.missiles.CATM_65K" +ENUMS.Storage.weapons.containers.HB_ORD_Pave_Spike="weapons.containers.HB_ORD_Pave_Spike" +ENUMS.Storage.weapons.containers.RobbieTank1="weapons.containers.RobbieTank1" +ENUMS.Storage.weapons.containers.SKY_SHADOW="weapons.containers.SKY_SHADOW" +ENUMS.Storage.weapons.containers.SORBCIJA_L="weapons.containers.SORBCIJA_L" +ENUMS.Storage.weapons.containers.Pavehawk="weapons.containers.Pavehawk" +ENUMS.Storage.weapons.bombs.BLG66_EG="weapons.bombs.BLG66_EG" +ENUMS.Storage.weapons.missiles.AGM_12C_ED="weapons.missiles.AGM_12C_ED" +ENUMS.Storage.weapons.missiles.AIM_92C="weapons.missiles.AIM-92C" +ENUMS.Storage.weapons.containers.MPS_410="weapons.containers.MPS-410" +ENUMS.Storage.weapons.missiles.HJ_12="weapons.missiles.HJ-12" +ENUMS.Storage.weapons.containers.AAQ_28_LITENING="weapons.containers.AAQ-28_LITENING" +ENUMS.Storage.weapons.containers.F_18_FLIR_POD="weapons.containers.F-18-FLIR-POD" +ENUMS.Storage.weapons.bombs.BLU_3B_GROUP="weapons.bombs.BLU_3B_GROUP" +ENUMS.Storage.weapons.containers.UH60L_Jayhawk="weapons.containers.UH60L_Jayhawk" +ENUMS.Storage.weapons.containers.BOZ_100="weapons.containers.BOZ-100" +ENUMS.Storage.weapons.missiles.AGM_78A="weapons.missiles.AGM_78A" +ENUMS.Storage.weapons.missiles.LAU_61_APKWS_M282="weapons.missiles.LAU_61_APKWS_M282" +ENUMS.Storage.weapons.bombs.BAP_100="weapons.bombs.BAP-100" +ENUMS.Storage.weapons.missiles.CM_802AKG="weapons.missiles.CM-802AKG" +ENUMS.Storage.weapons.bombs.BLU_3B_GROUP="weapons.bombs.BLU_3B_GROUP" +ENUMS.Storage.weapons.bombs.BLU_4B_GROUP="weapons.bombs.BLU-4B_GROUP" +ENUMS.Storage.weapons.nurs.S_5M="weapons.nurs.S_5M" +ENUMS.Storage.weapons.missiles.AGM_12A="weapons.missiles.AGM_12A" +ENUMS.Storage.weapons.droptanks.JAYHAWK_120_Fuel_Tank="weapons.droptanks.JAYHAWK_120_Fuel_Tank" +ENUMS.Storage.weapons.bombs.GBU_15_V_1_B="weapons.bombs.GBU_15_V_1_B" +ENUMS.Storage.weapons.missiles.HYDRA_70_M151_APKWS={4,4,8,292} +ENUMS.Storage.weapons.missiles.HYDRA_70_M282_APKWS={4,4,8,293} +ENUMS.Storage.weapons.bombs.BAP100="weapons.bombs.BAP_100" +ENUMS.Storage.weapons.bombs.BLU3B_GROUP="weapons.bombs.BLU-3B_GROUP" +ENUMS.Storage.weapons.missiles.CM_802AKG="weapons.missiles.CM_802AKG" +ENUMS.Storage.weapons.bombs.BLU_4B_GROUP="weapons.bombs.BLU_4B_GROUP" +ENUMS.Storage.weapons.nurs.S5M="weapons.nurs.S-5M" ENUMS.Storage.weapons.Gazelle.HMP400_100RDS={4,15,46,1771} ENUMS.Storage.weapons.Gazelle.HMP400_200RDS={4,15,46,1770} ENUMS.Storage.weapons.Gazelle.HMP400_400RDS={4,15,46,1769} @@ -1038,15 +1157,15 @@ ENUMS.Storage.weapons.Gazelle.GIAT_M261_HEAP={4,15,46,1765} ENUMS.Storage.weapons.Gazelle.GIAT_M261_APHE={4,15,46,1764} ENUMS.Storage.weapons.Gazelle.GAZELLE_IR_DEFLECTOR={4,15,47,680} ENUMS.Storage.weapons.Gazelle.GAZELLE_FAS_SANDFILTER={4,15,47,679} -ENUMS.Storage.weapons.CH47.CH47_PORT_M60D={4,15,46,2476} -ENUMS.Storage.weapons.CH47.CH47_STBD_M60D={4,15,46,2477} -ENUMS.Storage.weapons.CH47.CH47_AFT_M60D={4,15,46,2478} -ENUMS.Storage.weapons.CH47.CH47_PORT_M134D={4,15,46,2482} -ENUMS.Storage.weapons.CH47.CH47_STBD_M134D={4,15,46,2483} -ENUMS.Storage.weapons.CH47.CH47_AFT_M3M={4,15,46,2484} -ENUMS.Storage.weapons.CH47.CH47_PORT_M240H={4,15,46,2479} -ENUMS.Storage.weapons.CH47.CH47_STBD_M240H={4,15,46,2480} -ENUMS.Storage.weapons.CH47.CH47_AFT_M240H={4,15,46,2481} +ENUMS.Storage.weapons.CH47.CH47_PORT_M60D={4,15,46,2489} +ENUMS.Storage.weapons.CH47.CH47_STBD_M60D={4,15,46,2488} +ENUMS.Storage.weapons.CH47.CH47_AFT_M60D={4,15,46,2490} +ENUMS.Storage.weapons.CH47.CH47_PORT_M134D={4,15,46,2494} +ENUMS.Storage.weapons.CH47.CH47_STBD_M134D={4,15,46,2495} +ENUMS.Storage.weapons.CH47.CH47_AFT_M3M={4,15,46,2496} +ENUMS.Storage.weapons.CH47.CH47_PORT_M240H={4,15,46,2492} +ENUMS.Storage.weapons.CH47.CH47_STBD_M240H={4,15,46,2491} +ENUMS.Storage.weapons.CH47.CH47_AFT_M240H={4,15,46,2493} ENUMS.Storage.weapons.UH1H.M134_MiniGun_Right={4,15,46,161} ENUMS.Storage.weapons.UH1H.M134_MiniGun_Left={4,15,46,160} ENUMS.Storage.weapons.UH1H.M134_MiniGun_Right_Door={4,15,46,175} @@ -1054,19 +1173,24 @@ ENUMS.Storage.weapons.UH1H.M60_MG_Right_Door={4,15,46,177} ENUMS.Storage.weapons.UH1H.M134_MiniGun_Left_Door={4,15,46,174} ENUMS.Storage.weapons.UH1H.M60_MG_Left_Door={4,15,46,176} ENUMS.Storage.weapons.OH58.FIM92={4,4,7,449} -ENUMS.Storage.weapons.OH58.MG_M3P100={4,15,46,2608} -ENUMS.Storage.weapons.OH58.MG_M3P200={4,15,46,2607} -ENUMS.Storage.weapons.OH58.MG_M3P300={4,15,46,2606} -ENUMS.Storage.weapons.OH58.MG_M3P400={4,15,46,2605} -ENUMS.Storage.weapons.OH58.MG_M3P500={4,15,46,2604} -ENUMS.Storage.weapons.OH58.Smk_Grenade_Blue={4,5,9,486} -ENUMS.Storage.weapons.OH58.Smk_Grenade_Green={4,5,9,487} -ENUMS.Storage.weapons.OH58.Smk_Grenade_Red={4,5,9,485} -ENUMS.Storage.weapons.OH58.Smk_Grenade_Violet={4,5,9,488} -ENUMS.Storage.weapons.OH58.Smk_Grenade_White={4,5,9,490} -ENUMS.Storage.weapons.OH58.Smk_Grenade_Yellow={4,5,9,489} -ENUMS.Storage.weapons.AH64D.AN_APG78={4,15,44,2138} +ENUMS.Storage.weapons.OH58.MG_M3P100={4,15,46,2611} +ENUMS.Storage.weapons.OH58.MG_M3P200={4,15,46,2610} +ENUMS.Storage.weapons.OH58.MG_M3P300={4,15,46,2609} +ENUMS.Storage.weapons.OH58.MG_M3P400={4,15,46,2608} +ENUMS.Storage.weapons.OH58.MG_M3P500={4,15,46,2607} +ENUMS.Storage.weapons.OH58.Smk_Grenade_Blue={4,5,9,488} +ENUMS.Storage.weapons.OH58.Smk_Grenade_Green={4,5,9,489} +ENUMS.Storage.weapons.OH58.Smk_Grenade_Red={4,5,9,487} +ENUMS.Storage.weapons.OH58.Smk_Grenade_Violet={4,5,9,490} +ENUMS.Storage.weapons.OH58.Smk_Grenade_White={4,5,9,492} +ENUMS.Storage.weapons.OH58.Smk_Grenade_Yellow={4,5,9,491} +ENUMS.Storage.weapons.AH64D.AN_APG78={4,15,44,2114} ENUMS.Storage.weapons.AH64D.Internal_Aux_FuelTank={1,3,43,1700} +ENUMS.Storage.weapons.droptanks.FuelTank_610gal={1,3,43,10} +ENUMS.Storage.weapons.droptanks.FuelTank_370gal={1,3,43,11} +ENUMS.Storage.weapons.containers.AV8BNA_GAU_12_AP_M79={4,15,46,824} +ENUMS.Storage.weapons.containers.AV8BNA_GAU_12_HE_M792={4,15,46,825} +ENUMS.Storage.weapons.containers.AV8BNA_GAU_12_SAPHEI_T={4,15,46,300} ENUMS.FARPType={ FARP="FARP", INVISIBLE="INVISIBLE", @@ -1103,6 +1227,8 @@ Falklands="Falklands", Sinai="SinaiMap", Kola="Kola", Afghanistan="Afghanistan", +Iraq="Iraq", +GermanyCW="GermanyCW", } CALLSIGN={ Aircraft={ @@ -1305,7 +1431,7 @@ local objectreturn=_copy(object) return objectreturn end UTILS.OneLineSerialize=function(tbl) -lookup_table={} +local lookup_table={} local function _Serialize(tbl) if type(tbl)=='table'then if lookup_table[tbl]then @@ -1430,7 +1556,7 @@ if not noprint then env.info(string.rep(" ",indent)..tostring(k).." = {") end text=text..string.rep(" ",indent)..tostring(k).." = {\n" -text=text..tostring(UTILS.PrintTableToLog(v,indent+1)).."\n" +text=text..tostring(UTILS.PrintTableToLog(v,indent+1),noprint).."\n" if not noprint then env.info(string.rep(" ",indent).."},") end @@ -2063,7 +2189,7 @@ local delta=UTILS.VecAngle(v1,v2) return math.abs(delta) end function UTILS.HdgTo(a,b) -local dz=b.z-a.z +local dz=(b.z or b.y)-(a.z or a.y) local dx=b.x-a.x local heading=math.deg(math.atan2(dz,dx)) if heading<0 then @@ -2175,6 +2301,10 @@ elseif map==DCSMAP.Kola then declination=15 elseif map==DCSMAP.Afghanistan then declination=3 +elseif map==DCSMAP.Iraq then +declination=4.4 +elseif map==DCSMAP.GermanyCW then +declination=0.1 else declination=0 end @@ -2248,6 +2378,11 @@ end end function UTILS.GetReportingName(Typename) local typename=string.lower(Typename) +if string.find(typename,"ka-50",1,true)then +return"Shark" +elseif string.find(typename,"a-50",1,true)then +return"Mainstay" +end for name,value in pairs(ENUMS.ReportingName.NATO)do local svalue=string.lower(value) if string.find(typename,svalue,1,true)then @@ -2348,6 +2483,10 @@ elseif theatre==DCSMAP.Kola then return 3 elseif theatre==DCSMAP.Afghanistan then return 4.5 +elseif theatre==DCSMAP.Iraq then +return 3.0 +elseif theatre==DCSMAP.GermanyCW then +return 1.0 else BASE:E(string.format("ERROR: Unknown Map %s in UTILS.GMTToLocal function. Returning 0",tostring(theatre))) return 0 @@ -2408,9 +2547,9 @@ local sinDec=0.39782*sin(L) local cosDec=cos(asin(sinDec)) local cosH=(cos(zenith)-(sinDec*sin(latitude)))/(cosDec*cos(latitude)) if rising and cosH>1 then -return"N/S" -elseif cosH<-1 then return"N/R" +elseif cosH<-1 then +return"N/S" end local H if rising then @@ -2540,7 +2679,9 @@ if type_name=="CH-47Fbl1"and(unit:getDrawArgumentValue(86)>0.5)then BASE:T(unit_name.." rear cargo door is open") return true end -return false +local UnitDescriptor=unit:getDesc() +local IsGroundResult=(UnitDescriptor.category==Unit.Category.GROUND_UNIT) +return IsGroundResult end return nil end @@ -3719,7 +3860,7 @@ end UTILS.lcg.seed=(UTILS.lcg.a*UTILS.lcg.seed+UTILS.lcg.c)%UTILS.lcg.m return UTILS.lcg.seed/UTILS.lcg.m end -function UTILS.SpawnFARPAndFunctionalStatics(Name,Coordinate,FARPType,Coalition,Country,CallSign,Frequency,Modulation,ADF,SpawnRadius,VehicleTemplate,Liquids,Equipment) +function UTILS.SpawnFARPAndFunctionalStatics(Name,Coordinate,FARPType,Coalition,Country,CallSign,Frequency,Modulation,ADF,SpawnRadius,VehicleTemplate,Liquids,Equipment,Airframes,F10Text,DynamicSpawns,HotStart) local farplocation=Coordinate local farptype=FARPType or ENUMS.FARPType.FARP local Coalition=Coalition or coalition.side.BLUE @@ -3731,6 +3872,7 @@ if radius<0 or radius>150 then radius=100 end local liquids=Liquids or 10 liquids=liquids*1000 local equip=Equipment or 10 +local airframes=Airframes or 10 local statictypes=ENUMS.FARPObjectTypeNamesAndShape[farptype]or{TypeName="FARP",ShapeName="FARPS"} local STypeName=statictypes.TypeName local SShapeName=statictypes.ShapeName @@ -3738,7 +3880,7 @@ local Country=Country or(Coalition==coalition.side.BLUE and country.id.USA or co local ReturnObjects={} local newfarp=SPAWNSTATIC:NewFromType(STypeName,"Heliports",Country) newfarp:InitShape(SShapeName) -newfarp:InitFARP(callsign,freq,mod) +newfarp:InitFARP(callsign,freq,mod,DynamicSpawns,HotStart) local spawnedfarp=newfarp:SpawnFromCoordinate(farplocation,0,Name) table.insert(ReturnObjects,spawnedfarp) local FARPStaticObjectsNato={ @@ -3783,6 +3925,11 @@ newWH:SetItem(item,equip) end end end +if airframes and airframes>0 then +for typename in pairs(CSAR.AircraftType)do +newWH:SetItem(typename,airframes) +end +end local ADFName if ADF and type(ADF)=="number"then local ADFFreq=ADF*1000 @@ -3791,7 +3938,484 @@ local vec3=farplocation:GetVec3() ADFName=Name.." ADF "..tostring(ADF).."KHz" trigger.action.radioTransmission(Sound,vec3,0,true,ADFFreq,250,ADFName) end -return ReturnObjects,ADFName +local MarkerID=nil +if F10Text then +local Color={0,0,1} +if Coalition==coalition.side.RED then +Color={1,0,0} +elseif Coalition==coalition.side.NEUTRAL then +Color={0,1,0} +end +local Alpha=0.75 +local coordinate=Coordinate:Translate(600,0) +MarkerID=coordinate:TextToAll(F10Text,Coalition,Color,1,{1,1,1},Alpha,14,true) +end +return ReturnObjects,ADFName,MarkerID +end +function UTILS.SpawnMASHStatics(Name,Coordinate,Country,ADF,Livery,DeployHelo,MASHRadio,MASHRadioModulation,MASHCallsign,Templates) +local MASHTemplates={ +[1]={category='Infantry',type='Soldier M4',shape_name='none',heading=0,x=0.000000,y=0.000000,}, +[2]={category='Infantry',type='Soldier M4',shape_name='none',heading=0,x=0.313533,y=8.778935,}, +[3]={category='Infantry',type='Soldier M4',shape_name='none',heading=0,x=16.303737,y=20.379671,}, +[4]={category='Helicopters',type='CH-47Fbl1',shape_name='none',heading=0,x=-20.047735,y=-63.166179,livery_id="us army dark green",}, +[5]={category='Infantry',type='Soldier M4',shape_name='none',heading=0,x=26.650339,y=20.066138,}, +[6]={category='Heliports',type='FARP_SINGLE_01',shape_name='FARP_SINGLE_01',heading=0,x=-25.432292,y=9.077099,}, +[7]={category='Heliports',type='FARP_SINGLE_01',shape_name='FARP_SINGLE_01',heading=0,x=-12.717421,y=-3.216114,}, +[8]={category='Heliports',type='FARP_SINGLE_01',shape_name='FARP_SINGLE_01',heading=0,x=-25.439281,y=-3.216114,}, +[9]={category='Heliports',type='FARP_SINGLE_01',shape_name='FARP_SINGLE_01',heading=0,x=-12.717421,y=9.155603,}, +[10]={category='Fortifications',type='TACAN_beacon',shape_name='none',heading=0,x=-2.329847,y=-16.579903,}, +[11]={category='Fortifications',type='FARP Fuel Depot',shape_name='GSM Rus',heading=0,x=2.222011,y=4.487030,}, +[12]={category='Fortifications',type='APFC fuel',shape_name='M92_APFCfuel',heading=0,x=3.614927,y=0.367838,}, +[13]={category='Fortifications',type='Camouflage03',shape_name='M92_Camouflage03',heading=0,x=21.544148,y=21.998879,}, +[14]={category='Fortifications',type='Container_generator',shape_name='M92_Container_generator',heading=0,x=20.989192,y=37.314334,}, +[15]={category='Fortifications',type='FireExtinguisher02',shape_name='M92_FireExtinguisher02',heading=0,x=3.988003,y=8.362333,}, +[16]={category='Fortifications',type='FireExtinguisher02',shape_name='M92_FireExtinguisher02',heading=0,x=-3.953195,y=12.945844,}, +[17]={category='Fortifications',type='Windsock',shape_name='H-Windsock_RW',heading=0,x=-18.944173,y=-33.042196,}, +[18]={category='Fortifications',type='Tent04',shape_name='M92_Tent04',heading=0,x=21.220671,y=30.247529,}, +} +if Templates then MASHTemplates=Templates end +local name=Name or"Florence Nightingale" +local positionVec2 +local positionVec3 +local ReturnStatics={} +local CountryID=Country or country.id.USA +local livery="us army dark green" +local MASHRadio=MASHRadio or 127.5 +local MASHRadioModulation=MASHRadioModulation or radio.modulation.AM +local MASHCallsign=MASHCallsign or CALLSIGN.FARP.Berlin +if type(Coordinate)=="table"then +if Coordinate:IsInstanceOf("COORDINATE")or Coordinate:IsInstanceOf("ZONE_BASE")then +positionVec2=Coordinate:GetVec2() +positionVec3=Coordinate:GetVec3() +end +else +BASE:E("Spawn MASH - no ZONE or COORDINATE handed!") +return +end +local BaseX=positionVec2.x +local BaseY=positionVec2.y +for id,object in pairs(MASHTemplates)do +local NewName=string.format("%s#%3d",name,id) +local vec2={x=BaseX+object.x,y=BaseY+object.y} +local Coordinate=COORDINATE:NewFromVec2(vec2) +local static=SPAWNSTATIC:NewFromType(object.type,object.category,CountryID) +if object.shape_name and object.shape_name~="none"then +static:InitShape(object.shape_name) +end +if object.category=="Helicopters"and DeployHelo==true then +if object.livery_id~=nil then +livery=object.livery_id +end +static:InitLivery(livery) +local newstatic=static:SpawnFromCoordinate(Coordinate,object.heading,NewName) +table.insert(ReturnStatics,newstatic) +elseif object.category=="Heliports"then +static:InitFARP(MASHCallsign,MASHRadio,MASHRadioModulation,false,false) +local newstatic=static:SpawnFromCoordinate(Coordinate,object.heading,NewName) +table.insert(ReturnStatics,newstatic) +elseif object.category~="Helicopters"and object.category~="Heliports"then +local newstatic=static:SpawnFromCoordinate(Coordinate,object.heading,NewName) +table.insert(ReturnStatics,newstatic) +end +end +local ADFName +if ADF and type(ADF)=="number"then +local ADFFreq=ADF*1000 +local Sound="l10n/DEFAULT/beacon.ogg" +ADFName=Name.." ADF "..tostring(ADF).."KHz" +trigger.action.radioTransmission(Sound,positionVec3,0,true,ADFFreq,250,ADFName) +end +return ReturnStatics,ADFName +end +function UTILS.Vec2toVec3(vec,y) +if not vec.z then +if vec.alt and not y then +y=vec.alt +elseif not y then +y=0 +end +return{x=vec.x,y=y,z=vec.y} +else +return{x=vec.x,y=vec.y,z=vec.z} +end +end +function UTILS.GetNorthCorrection(gPoint) +local point=UTILS.DeepCopy(gPoint) +if not point.z then +point.z=point.y +point.y=0 +end +local lat,lon=coord.LOtoLL(point) +local north_posit=coord.LLtoLO(lat+1,lon) +return math.atan2(north_posit.z-point.z,north_posit.x-point.x) +end +function UTILS.GetDHMS(timeInSec) +if timeInSec and type(timeInSec)=='number'then +local tbl={d=0,h=0,m=0,s=0} +if timeInSec>86400 then +while timeInSec>86400 do +tbl.d=tbl.d+1 +timeInSec=timeInSec-86400 +end +end +if timeInSec>3600 then +while timeInSec>3600 do +tbl.h=tbl.h+1 +timeInSec=timeInSec-3600 +end +end +if timeInSec>60 then +while timeInSec>60 do +tbl.m=tbl.m+1 +timeInSec=timeInSec-60 +end +end +tbl.s=timeInSec +return tbl +else +BASE:E("No number handed!") +return +end +end +function UTILS.GetDirectionRadians(vec,point) +local dir=math.atan2(vec.z,vec.x) +if point then +dir=dir+UTILS.GetNorthCorrection(point) +end +if dir<0 then +dir=dir+2*math.pi +end +return dir +end +function UTILS.IsPointInPolygon(point,poly,maxalt) +point=UTILS.Vec2toVec3(point) +local px=point.x +local pz=point.z +local cn=0 +local newpoly=UTILS.DeepCopy(poly) +if not maxalt or(point.y<=maxalt)then +local polysize=#newpoly +newpoly[#newpoly+1]=newpoly[1] +newpoly[1]=UTILS.Vec2toVec3(newpoly[1]) +for k=1,polysize do +newpoly[k+1]=UTILS.Vec2toVec3(newpoly[k+1]) +if((newpoly[k].z<=pz)and(newpoly[k+1].z>pz))or((newpoly[k].z>pz)and(newpoly[k+1].z<=pz))then +local vt=(pz-newpoly[k].z)/(newpoly[k+1].z-newpoly[k].z) +if(px5000 then value=5000 end +return world.weather.setFogThickness(value) +end +function UTILS.Weather.RemoveFog() +return world.weather.setFogThickness(0) +end +function UTILS.Weather.GetFogVisibilityDistanceMax() +return world.weather.getFogVisibilityDistance() +end +function UTILS.Weather.SetFogVisibilityDistance(Thickness) +local value=Thickness +if value<100 then value=100 +elseif value>100000 then value=100000 end +return world.weather.setFogVisibilityDistance(value) +end +function UTILS.Weather.SetFogAnimation(AnimationKeys) +return world.weather.setFogAnimation(AnimationKeys) +end +function UTILS.Weather.StopFogAnimation() +return world.weather.setFogAnimation({}) +end +function UTILS.GetEnvZone(name) +for _,v in ipairs(env.mission.triggers.zones)do +if v.name==name then +return v +end +end +end +function UTILS.DoStringIn(State,DoString) +return net.dostring_in(State,DoString) +end +function UTILS.ShowPictureToAll(FilePath,Duration,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits) +ClearView=ClearView or false +StartDelay=StartDelay or 0 +HorizontalAlign=HorizontalAlign or 1 +VerticalAlign=VerticalAlign or 1 +Size=Size or 100 +SizeUnits=SizeUnits or 0 +if ClearView then ClearView="true"else ClearView="false"end +net.dostring_in("mission",string.format("a_out_picture(\"%s\", %d, %s, %d, \"%d\", \"%d\", %d, \"%d\")",FilePath,Duration or 10,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits)) +end +function UTILS.ShowPictureToCoalition(Coalition,FilePath,Duration,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits) +ClearView=ClearView or false +StartDelay=StartDelay or 0 +HorizontalAlign=HorizontalAlign or 1 +VerticalAlign=VerticalAlign or 1 +Size=Size or 100 +SizeUnits=SizeUnits or 0 +if ClearView then ClearView="true"else ClearView="false"end +local coalName=string.lower(UTILS.GetCoalitionName(Coalition)) +net.dostring_in("mission",string.format("a_out_picture_s(\"%s\", \"%s\", %d, %s, %d, \"%d\", \"%d\", %d, \"%d\")",coalName,FilePath,Duration or 10,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits)) +end +function UTILS.ShowPictureToCountry(Country,FilePath,Duration,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits) +ClearView=ClearView or false +StartDelay=StartDelay or 0 +HorizontalAlign=HorizontalAlign or 1 +VerticalAlign=VerticalAlign or 1 +Size=Size or 100 +SizeUnits=SizeUnits or 0 +if ClearView then ClearView="true"else ClearView="false"end +net.dostring_in("mission",string.format("a_out_picture_c(%d, \"%s\", %d, %s, %d, \"%d\", \"%d\", %d, \"%d\")",Country,FilePath,Duration or 10,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits)) +end +function UTILS.ShowPictureToGroup(Group,FilePath,Duration,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits) +ClearView=ClearView or false +StartDelay=StartDelay or 0 +HorizontalAlign=HorizontalAlign or 1 +VerticalAlign=VerticalAlign or 1 +Size=Size or 100 +SizeUnits=SizeUnits or 0 +if ClearView then ClearView="true"else ClearView="false"end +net.dostring_in("mission",string.format("a_out_picture_g(%d, \"%s\", %d, %s, %d, \"%d\", \"%d\", %d, \"%d\")",Group:GetID(),FilePath,Duration or 10,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits)) +end +function UTILS.ShowPictureToUnit(Unit,FilePath,Duration,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits) +ClearView=ClearView or false +StartDelay=StartDelay or 0 +HorizontalAlign=HorizontalAlign or 1 +VerticalAlign=VerticalAlign or 1 +Size=Size or 100 +SizeUnits=SizeUnits or 0 +if ClearView then ClearView="true"else ClearView="false"end +net.dostring_in("mission",string.format("a_out_picture_u(%d, \"%s\", %d, %s, %d, \"%d\", \"%d\", %d, \"%d\")",Unit:GetID(),FilePath,Duration or 10,ClearView,StartDelay,HorizontalAlign,VerticalAlign,Size,SizeUnits)) +end +function UTILS.LoadMission(FileName) +net.dostring_in("mission",string.format("a_load_mission(\"%s\")",FileName)) +end +function UTILS.SetMissionBriefing(Coalition,Text,Picture) +Text=Text or"" +Text=Text:gsub("\n","\\n") +Picture=Picture or"" +local coalName=string.lower(UTILS.GetCoalitionName(Coalition)) +net.dostring_in("mission",string.format("a_set_briefing(\"%s\", \"%s\", \"%s\")",coalName,Picture,Text)) +end +function UTILS.ShowHelperGate(pos,heading) +net.dostring_in("mission",string.format("a_show_helper_gate(%s, %s, %s, %f)",pos.x,pos.y,pos.z,math.rad(heading))) +end +function UTILS.ShowHelperGateForUnit(Unit,Flag) +net.dostring_in("mission",string.format("a_show_route_gates_for_unit(%d, \"%d\")",Unit:GetID(),Flag)) +end +function UTILS.SetCarrierIlluminationMode(UnitID,Mode) +net.dostring_in("mission",string.format("a_set_carrier_illumination_mode(%d, %d)",UnitID,Mode)) +end +function UTILS.ShellZone(name,power,count) +local z=UTILS.GetEnvZone(name) +if z then +net.dostring_in("mission",string.format("a_shelling_zone(%d, %d, %d)",z.zoneId,power,count)) +end +end +function UTILS.RemoveObjects(name,type) +local z=UTILS.GetEnvZone(name) +if z then +net.dostring_in("mission",string.format("a_remove_scene_objects(%d, %d)",z.zoneId,type)) +end +end +function UTILS.DestroyScenery(name,level) +local z=UTILS.GetEnvZone(name) +if z then +net.dostring_in("mission",string.format("a_scenery_destruction_zone(%d, %d)",z.zoneId,level)) +end +end +function UTILS.GetSimpleZones(Vec3,SearchRadius,PosRadius,NumPositions) +return Disposition.getSimpleZones(Vec3,SearchRadius,PosRadius,NumPositions) +end +function UTILS.GetClearZonePositions(Zone,PosRadius,NumPositions) +local radius=PosRadius or math.min(Zone:GetRadius()/10,200) +local clearPositions=UTILS.GetSimpleZones(Zone:GetVec3(),Zone:GetRadius(),radius,NumPositions or 50) +if clearPositions and#clearPositions>0 then +local validZones={} +for _,vec2 in pairs(clearPositions)do +if Zone:IsVec2InZone(vec2)then +table.insert(validZones,vec2) +end +end +if#validZones>0 then +return validZones,radius +end +end +return nil +end +function UTILS.GetRandomClearZoneCoordinate(Zone,PosRadius,NumPositions) +local clearPositions=UTILS.GetClearZonePositions(Zone,PosRadius,NumPositions) +if clearPositions and#clearPositions>0 then +local randomPosition,radius=clearPositions[math.random(1,#clearPositions)] +return COORDINATE:NewFromVec2(randomPosition),radius +end +return nil +end +function UTILS.FindNearestPointOnCircle(Vec1,Radius,Vec2) +local r=Radius +local cx=Vec1.x or 1 +local cy=Vec1.y or 1 +local px=Vec2.x or 1 +local py=Vec2.y or 1 +local dx=px-cx +local dy=py-cy +local dist=math.sqrt(dx*dx+dy*dy) +if dist==0 then +return{x=cx+r,y=cy} +end +local norm_dx=dx/dist +local norm_dy=dy/dist +local qx=cx+r*norm_dx +local qy=cy+r*norm_dy +local shift_factor=1 +qx=qx+shift_factor*norm_dx +qy=qy+shift_factor*norm_dy +return{x=qx,y=qy} +end +function UTILS.ValidateAndRepositionGroundUnits(Positions,Anchor,MaxRadius,Spacing) +local units=Positions +Anchor=Anchor or UTILS.GetCenterPoint(units) +local gPos={x=Anchor.x,y=Anchor.z or Anchor.y} +local maxRadius=0 +local unitCount=0 +for _,unit in pairs(units)do +local pos={x=unit.x,y=unit.z or unit.y} +local dist=UTILS.VecDist2D(pos,gPos) +if dist>maxRadius then +maxRadius=dist +end +unitCount=unitCount+1 +end +maxRadius=MaxRadius or math.max(maxRadius*2,10) +local spacing=Spacing or math.max(maxRadius*0.05,5) +if unitCount>0 and maxRadius>5 then +local spots=UTILS.GetSimpleZones(UTILS.Vec2toVec3(gPos),maxRadius,spacing,1000) +if spots and#spots>0 then +local validSpots={} +for _,spot in pairs(spots)do +if land.getSurfaceType(spot)==land.SurfaceType.LAND then +table.insert(validSpots,spot) +end +end +spots=validSpots +end +local step=spacing +for _,unit in pairs(units)do +local pos={x=unit.x,y=unit.z or unit.y} +local isOnLand=land.getSurfaceType(pos)==land.SurfaceType.LAND +local isValid=false +if spots and#spots>0 then +local si=1 +local sid=0 +local closestDist=100000000 +local closestSpot +for _,spot in pairs(spots)do +local dist=UTILS.VecDist2D(pos,spot) +if dist=spacing then +pos=closestSpot +end +isValid=true +table.remove(spots,sid) +end +end +if not isValid and not isOnLand then +local h=UTILS.HdgTo(pos,gPos) +local retries=0 +while not isValid and retries<500 do +local dist=UTILS.VecDist2D(pos,gPos) +pos=UTILS.Vec2Translate(pos,step,h) +local skip=false +for _,unit2 in pairs(units)do +if unit~=unit2 then +local pos2={x=unit2.x,y=unit2.z or unit2.y} +local dist2=UTILS.VecDist2D(pos,pos2) +if dist2<12 then +isValid=false +skip=true +break +end +end +end +if not skip and dist>step and land.getSurfaceType(pos)==land.SurfaceType.LAND then +isValid=true +break +elseif dist<=step then +break +end +retries=retries+1 +end +end +if isValid then +unit.x=pos.x +if unit.z then +unit.z=pos.y +else +unit.y=pos.y +end +end +end +end +end +function UTILS.ValidateAndRepositionStatic(Country,Category,Type,Position,ShapeName,MaxRadius) +local coord=COORDINATE:NewFromVec2(Position) +local st=SPAWNSTATIC:NewFromType(Type,Category,Country) +if ShapeName then +st:InitShape(ShapeName) +end +local sName="s-"..timer.getTime().."-"..math.random(1,10000) +local tempStatic=st:SpawnFromCoordinate(coord,0,sName) +if tempStatic then +local sRadius=tempStatic:GetBoundingRadius(2)or 3 +tempStatic:Destroy() +sRadius=sRadius*0.5 +MaxRadius=MaxRadius or math.max(sRadius*10,100) +local positions=UTILS.GetSimpleZones(coord:GetVec3(),MaxRadius,sRadius,20) +if positions and#positions>0 then +local closestSpot +local closestDist=math.huge +for _,spot in pairs(positions)do +if land.getSurfaceType(spot)==land.SurfaceType.LAND then +local dist=UTILS.VecDist2D(Position,spot) +if dist=sRadius then +return closestSpot +else +return Position +end +end +end +end +return nil end PROFILER={ ClassName="PROFILER", @@ -4066,500 +4690,6 @@ PROFILER._flog(f,"************************************************************** f:close() PROFILER.printCSV(t,runTimeGame) end -TEMPLATE={ -ClassName="TEMPLATE", -Ground={}, -Naval={}, -Airplane={}, -Helicopter={}, -} -TEMPLATE.TypeGround={ -InfantryAK="Infantry AK", -ParatrooperAKS74="Paratrooper AKS-74", -ParatrooperRPG16="Paratrooper RPG-16", -SoldierWWIIUS="soldier_wwii_us", -InfantryM248="Infantry M249", -SoldierM4="Soldier M4", -} -TEMPLATE.TypeNaval={ -Ticonderoga="TICONDEROG", -} -TEMPLATE.TypeAirplane={ -A10C="A-10C", -} -TEMPLATE.TypeHelicopter={ -AH1W="AH-1W", -} -function TEMPLATE.GetGround(TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -TypeName=TypeName or TEMPLATE.TypeGround.SoldierM4 -GroupName=GroupName or"Ground-1" -CountryID=CountryID or country.id.USA -Vec3=Vec3 or{x=0,y=0,z=0} -Nunits=Nunits or 1 -Radius=Radius or 50 -local template=UTILS.DeepCopy(TEMPLATE.GenericGround) -template.name=GroupName -template.CountryID=CountryID -template.CoalitionID=coalition.getCountryCoalition(template.CountryID) -template.CategoryID=Unit.Category.GROUND_UNIT -template.units[1].type=TypeName -template.units[1].name=GroupName.."-1" -if Vec3 then -TEMPLATE.SetPositionFromVec3(template,Vec3) -end -TEMPLATE.SetUnits(template,Nunits,COORDINATE:NewFromVec3(Vec3),Radius) -return template -end -function TEMPLATE.GetNaval(TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -TypeName=TypeName or TEMPLATE.TypeNaval.Ticonderoga -GroupName=GroupName or"Naval-1" -CountryID=CountryID or country.id.USA -Vec3=Vec3 or{x=0,y=0,z=0} -Nunits=Nunits or 1 -Radius=Radius or 500 -local template=UTILS.DeepCopy(TEMPLATE.GenericNaval) -template.name=GroupName -template.CountryID=CountryID -template.CoalitionID=coalition.getCountryCoalition(template.CountryID) -template.CategoryID=Unit.Category.SHIP -template.units[1].type=TypeName -template.units[1].name=GroupName.."-1" -if Vec3 then -TEMPLATE.SetPositionFromVec3(template,Vec3) -end -TEMPLATE.SetUnits(template,Nunits,COORDINATE:NewFromVec3(Vec3),Radius) -return template -end -function TEMPLATE.GetAirplane(TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -TypeName=TypeName or TEMPLATE.TypeAirplane.A10C -GroupName=GroupName or"Airplane-1" -CountryID=CountryID or country.id.USA -Vec3=Vec3 or{x=0,y=1000,z=0} -Nunits=Nunits or 1 -Radius=Radius or 100 -local template=TEMPLATE._GetAircraft(true,TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -return template -end -function TEMPLATE.GetHelicopter(TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -TypeName=TypeName or TEMPLATE.TypeHelicopter.AH1W -GroupName=GroupName or"Helicopter-1" -CountryID=CountryID or country.id.USA -Vec3=Vec3 or{x=0,y=500,z=0} -Nunits=Nunits or 1 -Radius=Radius or 100 -Nunits=math.min(Nunits,4) -local template=TEMPLATE._GetAircraft(false,TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -return template -end -function TEMPLATE._GetAircraft(Airplane,TypeName,GroupName,CountryID,Vec3,Nunits,Radius) -TypeName=TypeName -GroupName=GroupName or"Aircraft-1" -CountryID=CountryID or country.id.USA -Vec3=Vec3 or{x=0,y=0,z=0} -Nunits=Nunits or 1 -Radius=Radius or 100 -local template=UTILS.DeepCopy(TEMPLATE.GenericAircraft) -template.name=GroupName -template.CountryID=CountryID -template.CoalitionID=coalition.getCountryCoalition(template.CountryID) -if Airplane then -template.CategoryID=Unit.Category.AIRPLANE -else -template.CategoryID=Unit.Category.HELICOPTER -end -template.units[1].type=TypeName -template.units[1].name=GroupName.."-1" -if Vec3 then -TEMPLATE.SetPositionFromVec3(template,Vec3) -end -TEMPLATE.SetUnits(template,Nunits,COORDINATE:NewFromVec3(Vec3),Radius) -return template -end -function TEMPLATE.SetPositionFromVec2(Template,Vec2) -Template.x=Vec2.x -Template.y=Vec2.y -for _,unit in pairs(Template.units)do -unit.x=Vec2.x -unit.y=Vec2.y -end -Template.route.points[1].x=Vec2.x -Template.route.points[1].y=Vec2.y -Template.route.points[1].alt=0 -end -function TEMPLATE.SetPositionFromVec3(Template,Vec3) -local Vec2={x=Vec3.x,y=Vec3.z} -TEMPLATE.SetPositionFromVec2(Template,Vec2) -end -function TEMPLATE.SetUnits(Template,N,Coordinate,Radius) -local units=Template.units -local unit1=units[1] -local Vec3=Coordinate:GetVec3() -unit1.x=Vec3.x -unit1.y=Vec3.z -unit1.alt=Vec3.y -for i=2,N do -units[i]=UTILS.DeepCopy(unit1) -end -for i=1,N do -local unit=units[i] -unit.name=string.format("%s-%d",Template.name,i) -if i>1 then -local vec2=Coordinate:GetRandomCoordinateInRadius(Radius,5):GetVec2() -unit.x=vec2.x -unit.y=vec2.y -unit.alt=unit1.alt -end -end -end -function TEMPLATE.SetAirbase(Template,AirBase,ParkingSpots,EngineOn) -local AirbaseID=AirBase:GetID() -local point=Template.route.points[1] -if AirBase:IsAirdrome()then -point.airdromeId=AirbaseID -else -point.helipadId=AirbaseID -point.linkUnit=AirbaseID -end -if EngineOn then -point.action=COORDINATE.WaypointAction.FromParkingAreaHot -point.type=COORDINATE.WaypointType.TakeOffParkingHot -else -point.action=COORDINATE.WaypointAction.FromParkingArea -point.type=COORDINATE.WaypointType.TakeOffParking -end -for i,unit in ipairs(Template.units)do -unit.parking_id=ParkingSpots[i] -end -end -function TEMPLATE.AddWaypoint(Template,Waypoint) -table.insert(Template.route.points,Waypoint) -end -TEMPLATE.GenericGround= -{ -["visible"]=false, -["tasks"]={}, -["uncontrollable"]=false, -["task"]="Ground Nothing", -["route"]= -{ -["spans"]={}, -["points"]= -{ -[1]= -{ -["alt"]=0, -["type"]="Turning Point", -["ETA"]=0, -["alt_type"]="BARO", -["formation_template"]="", -["y"]=0, -["x"]=0, -["ETA_locked"]=true, -["speed"]=0, -["action"]="Off Road", -["task"]= -{ -["id"]="ComboTask", -["params"]= -{ -["tasks"]= -{ -}, -}, -}, -["speed_locked"]=true, -}, -}, -}, -["groupId"]=nil, -["hidden"]=false, -["units"]= -{ -[1]= -{ -["transportable"]= -{ -["randomTransportable"]=false, -}, -["skill"]="Average", -["type"]="Infantry AK", -["unitId"]=nil, -["y"]=0, -["x"]=0, -["name"]="Infantry AK-47 Rus", -["heading"]=0, -["playerCanDrive"]=false, -}, -}, -["y"]=0, -["x"]=0, -["name"]="Infantry AK-47 Rus", -["start_time"]=0, -} -TEMPLATE.GenericNaval= -{ -["visible"]=false, -["tasks"]={}, -["uncontrollable"]=false, -["route"]= -{ -["points"]= -{ -[1]= -{ -["alt"]=0, -["type"]="Turning Point", -["ETA"]=0, -["alt_type"]="BARO", -["formation_template"]="", -["y"]=0, -["x"]=0, -["ETA_locked"]=true, -["speed"]=0, -["action"]="Turning Point", -["task"]= -{ -["id"]="ComboTask", -["params"]= -{ -["tasks"]= -{ -}, -}, -}, -["speed_locked"]=true, -}, -}, -}, -["groupId"]=nil, -["hidden"]=false, -["units"]= -{ -[1]= -{ -["transportable"]= -{ -["randomTransportable"]=false, -}, -["skill"]="Average", -["type"]="TICONDEROG", -["unitId"]=nil, -["y"]=0, -["x"]=0, -["name"]="Naval-1-1", -["heading"]=0, -["modulation"]=0, -["frequency"]=127500000, -}, -}, -["y"]=0, -["x"]=0, -["name"]="Naval-1", -["start_time"]=0, -} -TEMPLATE.GenericAircraft= -{ -["groupId"]=nil, -["name"]="Rotary-1", -["uncontrolled"]=false, -["hidden"]=false, -["task"]="Nothing", -["y"]=0, -["x"]=0, -["start_time"]=0, -["communication"]=true, -["radioSet"]=false, -["frequency"]=127.5, -["modulation"]=0, -["taskSelected"]=true, -["tasks"]={}, -["route"]= -{ -["points"]= -{ -[1]= -{ -["y"]=0, -["x"]=0, -["alt"]=1000, -["alt_type"]="BARO", -["action"]="Turning Point", -["type"]="Turning Point", -["airdromeId"]=nil, -["task"]= -{ -["id"]="ComboTask", -["params"]= -{ -["tasks"]={}, -}, -}, -["ETA"]=0, -["ETA_locked"]=true, -["speed"]=100, -["speed_locked"]=true, -["formation_template"]="", -}, -}, -}, -["units"]= -{ -[1]= -{ -["name"]="Rotary-1-1", -["unitId"]=nil, -["type"]="AH-1W", -["onboard_num"]="050", -["livery_id"]="USA X Black", -["skill"]="High", -["ropeLength"]=15, -["speed"]=0, -["x"]=0, -["y"]=0, -["alt"]=10, -["alt_type"]="BARO", -["heading"]=0, -["psi"]=0, -["parking"]=nil, -["parking_id"]=nil, -["payload"]= -{ -["pylons"]={}, -["fuel"]="1250.0", -["flare"]=30, -["chaff"]=30, -["gun"]=100, -}, -["callsign"]= -{ -[1]=2, -[2]=1, -[3]=1, -["name"]="Springfield11", -}, -}, -}, -} -STTS={ -ClassName="STTS", -DIRECTORY="", -SRS_PORT=5002, -GOOGLE_CREDENTIALS="C:\\Users\\Ciaran\\Downloads\\googletts.json", -EXECUTABLE="DCS-SR-ExternalAudio.exe" -} -STTS.DIRECTORY="D:/DCS/_SRS" -STTS.SRS_PORT=5002 -STTS.GOOGLE_CREDENTIALS="C:\\Users\\Ciaran\\Downloads\\googletts.json" -STTS.EXECUTABLE="DCS-SR-ExternalAudio.exe" -function STTS.uuid() -local random=math.random -local template='yxxx-xxxxxxxxxxxx' -return string.gsub(template,'[xy]',function(c) -local v=(c=='x')and random(0,0xf)or random(8,0xb) -return string.format('%x',v) -end) -end -function STTS.round(x,n) -n=math.pow(10,n or 0) -x=x*n -if x>=0 then -x=math.floor(x+0.5) -else -x=math.ceil(x-0.5) -end -return x/n -end -function STTS.getSpeechTime(length,speed,isGoogle) -local maxRateRatio=3 -speed=speed or 1.0 -isGoogle=isGoogle or false -local speedFactor=1.0 -if isGoogle then -speedFactor=speed -else -if speed~=0 then -speedFactor=math.abs(speed)*(maxRateRatio-1)/10+1 -end -if speed<0 then -speedFactor=1/speedFactor -end -end -local wpm=math.ceil(100*speedFactor) -local cps=math.floor((wpm*5)/60) -if type(length)=="string"then -length=string.len(length) -end -return length/cps -end -function STTS.TextToSpeech(message,freqs,modulations,volume,name,coalition,point,speed,gender,culture,voice,googleTTS) -if os==nil or io==nil then -env.info("[DCS-STTS] LUA modules os or io are sanitized. skipping. ") -return -end -speed=speed or 1 -gender=gender or"female" -culture=culture or"" -voice=voice or"" -coalition=coalition or"0" -name=name or"ROBOT" -volume=1 -speed=1 -message=message:gsub("\"","\\\"") -local cmd=string.format("start /min \"\" /d \"%s\" /b \"%s\" -f %s -m %s -c %s -p %s -n \"%s\" -h",STTS.DIRECTORY,STTS.EXECUTABLE,freqs or"305",modulations or"AM",coalition,STTS.SRS_PORT,name) -if voice~=""then -cmd=cmd..string.format(" -V \"%s\"",voice) -else -if culture~=""then -cmd=cmd..string.format(" -l %s",culture) -end -if gender~=""then -cmd=cmd..string.format(" -g %s",gender) -end -end -if googleTTS==true then -cmd=cmd..string.format(" -G \"%s\"",STTS.GOOGLE_CREDENTIALS) -end -if speed~=1 then -cmd=cmd..string.format(" -s %s",speed) -end -if volume~=1.0 then -cmd=cmd..string.format(" -v %s",volume) -end -if point and type(point)=="table"and point.x then -local lat,lon,alt=coord.LOtoLL(point) -lat=STTS.round(lat,4) -lon=STTS.round(lon,4) -alt=math.floor(alt) -cmd=cmd..string.format(" -L %s -O %s -A %s",lat,lon,alt) -end -cmd=cmd..string.format(" -t \"%s\"",message) -if string.len(cmd)>255 then -local filename=os.getenv('TMP').."\\DCS_STTS-"..STTS.uuid()..".bat" -local script=io.open(filename,"w+") -script:write(cmd.." && exit") -script:close() -cmd=string.format("\"%s\"",filename) -timer.scheduleFunction(os.remove,filename,timer.getTime()+1) -end -if string.len(cmd)>255 then -env.info("[DCS-STTS] - cmd string too long") -env.info("[DCS-STTS] TextToSpeech Command :\n"..cmd.."\n") -end -os.execute(cmd) -return STTS.getSpeechTime(message,speed,googleTTS) -end -function STTS.PlayMP3(pathToMP3,freqs,modulations,volume,name,coalition,point) -local cmd=string.format("start \"\" /d \"%s\" /b /min \"%s\" -i \"%s\" -f %s -m %s -c %s -p %s -n \"%s\" -v %s -h",STTS.DIRECTORY,STTS.EXECUTABLE,pathToMP3,freqs or"305",modulations or"AM",coalition or"0",STTS.SRS_PORT,name or"ROBOT",volume or"1") -if point and type(point)=="table"and point.x then -local lat,lon,alt=coord.LOtoLL(point) -lat=STTS.round(lat,4) -lon=STTS.round(lon,4) -alt=math.floor(alt) -cmd=cmd..string.format(" -L %s -O %s -A %s",lat,lon,alt) -end -env.info("[DCS-STTS] MP3/OGG Command :\n"..cmd.."\n") -os.execute(cmd) -end do FIFO={ ClassName="FIFO", @@ -5097,15 +5227,12 @@ Events={}, States={}, Debug=debug, Scheduler=nil, +Properties={}, } BASE.__={} BASE._={ Schedules={}, } -FORMATION={ -Cone="Cone", -Vee="Vee", -} function BASE:New() local self=UTILS.DeepCopy(self) _ClassID=_ClassID+1 @@ -5397,6 +5524,17 @@ if self.States[ClassNameAndID]then self.States[ClassNameAndID][StateName]=nil end end +function BASE:SetProperty(Key,Value) +self.Properties=self.Properties or{} +self.Properties[Key]=Value +end +function BASE:GetProperty(Key) +self.Properties=self.Properties or{} +return self.Properties[Key] +end +function BASE:GetProperties() +return self.Properties +end function BASE:TraceOn() self:TraceOnOff(true) end @@ -6558,7 +6696,7 @@ local Source=Info.source or"?" local Line=Info.currentline or"?" local Name=Info.name or"?" local ErrorHandler=function(errmsg) -env.info("Error in timer function: "..errmsg) +env.info("Error in timer function: "..errmsg or"") if BASE.Debug~=nil then env.info(BASE.Debug.traceback()) end @@ -6647,7 +6785,7 @@ function SCHEDULEDISPATCHER:Stop(Scheduler,CallID) self:F2({Stop=CallID,Scheduler=Scheduler}) if CallID then local Schedule=self.Schedule[Scheduler][CallID] -if Schedule.ScheduleID then +if Schedule and Schedule.ScheduleID then self:T(string.format("SCHEDULEDISPATCHER stopping scheduler CallID=%s, ScheduleID=%s",tostring(CallID),tostring(Schedule.ScheduleID))) timer.removeFunction(Schedule.ScheduleID) Schedule.ScheduleID=nil @@ -7490,11 +7628,12 @@ Event.IniCategory=Event.IniDCSUnit:getDesc().category Event.IniTypeName=Event.IniDCSUnit:getTypeName() elseif Event.IniObjectCategory==Object.Category.SCENERY then Event.IniDCSUnit=Event.initiator -Event.IniDCSUnitName=Event.IniDCSUnit.getName and Event.IniDCSUnit:getName()or"Scenery no name "..math.random(1,20000) +Event.IniDCSUnitName=(Event.IniDCSUnit and Event.IniDCSUnit.getName)and Event.IniDCSUnit:getName()or"Scenery no name "..math.random(1,20000) Event.IniUnitName=Event.IniDCSUnitName Event.IniUnit=SCENERY:Register(Event.IniDCSUnitName,Event.initiator) -Event.IniCategory=Event.IniDCSUnit:getDesc().category -Event.IniTypeName=Event.initiator:isExist()and Event.IniDCSUnit:getTypeName()or"SCENERY" +Event.IniCategory=(Event.IniDCSUnit and Event.IniDCSUnit.getDesc)and Event.IniDCSUnit:getDesc().category +Event.IniTypeName=(Event.initiator and Event.initiator.isExist +and Event.initiator:isExist()and Event.IniDCSUnit and Event.IniDCSUnit.getTypeName)and Event.IniDCSUnit:getTypeName()or"SCENERY" elseif Event.IniObjectCategory==Object.Category.BASE then Event.IniDCSUnit=Event.initiator Event.IniDCSUnitName=Event.IniDCSUnit:getName() @@ -7564,14 +7703,15 @@ end end elseif Event.TgtObjectCategory==Object.Category.SCENERY then Event.TgtDCSUnit=Event.target -Event.TgtDCSUnitName=Event.TgtDCSUnit:getName() -if Event.TgtDCSUnitName==nil then return end +Event.TgtDCSUnitName=Event.TgtDCSUnit.getName and Event.TgtDCSUnit.getName()or nil +if Event.TgtDCSUnitName~=nil then Event.TgtUnitName=Event.TgtDCSUnitName Event.TgtUnit=SCENERY:Register(Event.TgtDCSUnitName,Event.target) Event.TgtCategory=Event.TgtDCSUnit:getDesc().category Event.TgtTypeName=Event.TgtDCSUnit:getTypeName() end end +end if Event.weapon and type(Event.weapon)=="table"and Event.weapon.isExist and Event.weapon:isExist()then Event.Weapon=Event.weapon Event.WeaponName=Event.weapon:isExist()and Event.weapon:getTypeName()or"Unknown Weapon" @@ -7586,10 +7726,12 @@ if Event.id==EVENTS.LandingAfterEjection then else if Event.place:isExist()and Object.getCategory(Event.place)~=Object.Category.SCENERY then Event.Place=AIRBASE:Find(Event.place) +if Event.Place then Event.PlaceName=Event.Place:GetName() end end end +end if Event.idx then Event.MarkID=Event.idx Event.MarkVec3=Event.pos @@ -8348,13 +8490,14 @@ end function MENU_INDEX:HasGroupMenu(Group,Path) if Group and Group:IsAlive()then local MenuGroupName=Group:GetName() +if self.Group[MenuGroupName]and self.Group[MenuGroupName].Menus and self.Group[MenuGroupName].Menus[Path]then return self.Group[MenuGroupName].Menus[Path] end +end return nil end function MENU_INDEX:SetGroupMenu(Group,Path,Menu) local MenuGroupName=Group:GetName() -Group:F({MenuGroupName=MenuGroupName,Path=Path}) self.Group[MenuGroupName].Menus[Path]=Menu end function MENU_INDEX:ClearGroupMenu(Group,Path) @@ -8999,7 +9142,7 @@ return nil end function ZONE_BASE:GetPointVec2() local Vec2=self:GetVec2() -local PointVec2=POINT_VEC2:NewFromVec2(Vec2) +local PointVec2=COORDINATE:NewFromVec2(Vec2) return PointVec2 end function ZONE_BASE:GetVec3(Height) @@ -9010,7 +9153,7 @@ return Vec3 end function ZONE_BASE:GetPointVec3(Height) local Vec3=self:GetVec3(Height) -local PointVec3=POINT_VEC3:NewFromVec3(Vec3) +local PointVec3=COORDINATE:NewFromVec3(Vec3) return PointVec3 end function ZONE_BASE:GetCoordinate(Height) @@ -9143,6 +9286,14 @@ end function ZONE_BASE:GetZoneProbability() return self.ZoneProbability end +function ZONE_BASE:FindNearestCoordinateOnRadius(Outsidecoordinate) +local Vec1=self:GetVec2() +local Radius=self:GetRadius() +local Vec2=Outsidecoordinate:GetVec2() +local Point=UTILS.FindNearestPointOnCircle(Vec1,Radius,Vec2) +local rc=COORDINATE:NewFromVec2(Point) +return rc +end function ZONE_BASE:GetZoneMaybe() local Randomization=math.random() if Randomization<=self.ZoneProbability then @@ -9160,10 +9311,13 @@ self:SetStartState("TriggerStopped") self:AddTransition("TriggerStopped","TriggerStart","TriggerRunning") self:AddTransition("*","EnteredZone","*") self:AddTransition("*","LeftZone","*") +self:AddTransition("*","ZoneEmpty","*") +self:AddTransition("*","ObjectDead","*") self:AddTransition("*","TriggerRunCheck","*") self:AddTransition("*","TriggerStop","TriggerStopped") self:TriggerStart() self.checkobjects=Objects +self.ObjectsInZone=false if UTILS.IsInstanceOf(Objects,"SET_BASE")then self.objectset=Objects.Set else @@ -9173,19 +9327,28 @@ self:_TriggerCheck(true) self:__TriggerRunCheck(self.Checktime) return self end +function ZONE_BASE:SetPartlyInside(state) +self.PartlyInside=state or not(state==false) +return self +end function ZONE_BASE:_TriggerCheck(fromstart) local objectset=self.objectset or{} if fromstart then for _,_object in pairs(objectset)do local obj=_object -if not obj.TriggerInZone then obj.TriggerInZone={}end +if not obj.TriggerInZone then +obj.TriggerInZone={} +obj.TriggerZoneDeadNotification=false +end if obj and obj:IsAlive()and self:IsCoordinateInZone(obj:GetCoordinate())then obj.TriggerInZone[self.ZoneName]=true +self.ObjectsInZone=true else obj.TriggerInZone[self.ZoneName]=false end end else +local objcount=0 for _,_object in pairs(objectset)do local obj=_object if obj and obj:IsAlive()then @@ -9195,18 +9358,41 @@ end if not obj.TriggerInZone[self.ZoneName]then obj.TriggerInZone[self.ZoneName]=false end -local inzone=self:IsCoordinateInZone(obj:GetCoordinate()) +local inzone +if self.PartlyInside and obj.ClassName=="GROUP"then +inzone=obj:IsAnyInZone(self) +else +inzone=self:IsCoordinateInZone(obj:GetCoordinate()) +end +if inzone and obj.TriggerInZone[self.ZoneName]then +objcount=objcount+1 +self.ObjectsInZone=true +obj.TriggerZoneDeadNotification=false +end if inzone and not obj.TriggerInZone[self.ZoneName]then self:__EnteredZone(0.5,obj) obj.TriggerInZone[self.ZoneName]=true +objcount=objcount+1 +self.ObjectsInZone=true +obj.TriggerZoneDeadNotification=false elseif(not inzone)and obj.TriggerInZone[self.ZoneName]then self:__LeftZone(0.5,obj) obj.TriggerInZone[self.ZoneName]=false else end +else +if not obj.TriggerZoneDeadNotification==true then +obj.TriggerInZone=nil +self:__ObjectDead(0.5,obj) +obj.TriggerZoneDeadNotification=true end end end +if objcount==0 and self.ObjectsInZone==true then +self.ObjectsInZone=false +self:__ZoneEmpty(0.5) +end +end return self end function ZONE_BASE:onafterTriggerRunCheck(From,Event,To) @@ -9314,7 +9500,7 @@ for Angle=0,360,360/Points do local Radial=(Angle+AngleOffset)*RadialBase/360 Point.x=Vec2.x+math.cos(Radial)*self:GetRadius() Point.y=Vec2.y+math.sin(Radial)*self:GetRadius() -POINT_VEC2:New(Point.x,Point.y,AddHeight):Smoke(SmokeColor) +COORDINATE:New(Point.x,AddHeight,Point.y):Smoke(SmokeColor) end return self end @@ -9329,7 +9515,7 @@ for Angle=0,360,360/Points do local Radial=Angle*RadialBase/360 Point.x=Vec2.x+math.cos(Radial)*self:GetRadius() Point.y=Vec2.y+math.sin(Radial)*self:GetRadius() -POINT_VEC2:New(Point.x,Point.y,AddHeight):Flare(FlareColor,Azimuth) +COORDINATE:New(Point.x,AddHeight,Point.y):Flare(FlareColor,Azimuth) end return self end @@ -9369,10 +9555,9 @@ radius=ZoneRadius, } } local function EvaluateZone(ZoneObject) -if ZoneObject then +if ZoneObject and self:IsVec3InZone(ZoneObject:getPoint())then local ObjectCategory=Object.getCategory(ZoneObject) if(ObjectCategory==Object.Category.UNIT and ZoneObject:isExist()and ZoneObject:isActive())or(ObjectCategory==Object.Category.STATIC and ZoneObject:isExist())then -local CoalitionDCSUnit=ZoneObject:getCoalition() local Include=false if not UnitCategories then Include=true @@ -9522,7 +9707,7 @@ local SphereSearch={ id=world.VolumeType.SPHERE, params={ point=ZoneCoord:GetVec3(), -radius=ZoneRadius/2, +radius=ZoneRadius, } } local function EvaluateZone(ZoneDCSUnit) @@ -9546,10 +9731,19 @@ if not Vec3 then return false end local InZone=self:IsVec2InZone({x=Vec3.x,y=Vec3.z}) return InZone end +function ZONE_RADIUS:GetClearZonePositions(PosRadius,NumPositions) +return UTILS.GetClearZonePositions(self,PosRadius,NumPositions) +end +function ZONE_RADIUS:GetRandomClearZoneCoordinate(PosRadius,NumPositions) +return UTILS.GetRandomClearZoneCoordinate(self,PosRadius,NumPositions) +end function ZONE_RADIUS:GetRandomVec2(inner,outer,surfacetypes) local Vec2=self:GetVec2() local _inner=inner or 0 local _outer=outer or self:GetRadius() +math.random() +math.random() +math.random() if surfacetypes and type(surfacetypes)~="table"then surfacetypes={surfacetypes} end @@ -9584,7 +9778,7 @@ end return point end function ZONE_RADIUS:GetRandomPointVec2(inner,outer) -local PointVec2=POINT_VEC2:NewFromVec2(self:GetRandomVec2(inner,outer)) +local PointVec2=COORDINATE:NewFromVec2(self:GetRandomVec2(inner,outer)) return PointVec2 end function ZONE_RADIUS:GetRandomVec3(inner,outer) @@ -9592,7 +9786,7 @@ local Vec2=self:GetRandomVec2(inner,outer) return{x=Vec2.x,y=self.y,z=Vec2.y} end function ZONE_RADIUS:GetRandomPointVec3(inner,outer) -local PointVec3=POINT_VEC3:NewFromVec2(self:GetRandomVec2(inner,outer)) +local PointVec3=COORDINATE:NewFromVec2(self:GetRandomVec2(inner,outer)) return PointVec3 end function ZONE_RADIUS:GetRandomCoordinate(inner,outer,surfacetypes) @@ -9795,7 +9989,7 @@ Point.y=Vec2.y+math.sin(angle)*math.random()*self:GetRadius(); return Point end function ZONE_GROUP:GetRandomPointVec2(inner,outer) -local PointVec2=POINT_VEC2:NewFromVec2(self:GetRandomVec2()) +local PointVec2=COORDINATE:NewFromVec2(self:GetRandomVec2()) return PointVec2 end _ZONE_TRIANGLE={ @@ -10035,6 +10229,12 @@ end function ZONE_POLYGON_BASE:Flush() return self end +function ZONE_POLYGON_BASE:GetClearZonePositions(PosRadius,NumPositions) +return UTILS.GetClearZonePositions(self,PosRadius,NumPositions) +end +function ZONE_POLYGON_BASE:GetRandomClearZoneCoordinate(PosRadius,NumPositions) +return UTILS.GetRandomClearZoneCoordinate(self,PosRadius,NumPositions) +end function ZONE_POLYGON_BASE:BoundZone(UnBound) local i local j @@ -10193,7 +10393,7 @@ local DeltaY=self._.Polygon[j].y-self._.Polygon[i].y for Segment=0,Segments do local PointX=self._.Polygon[i].x+(Segment*DeltaX/Segments) local PointY=self._.Polygon[i].y+(Segment*DeltaY/Segments) -POINT_VEC2:New(PointX,PointY):Smoke(SmokeColor) +COORDINATE:New(PointX,0,PointY):Smoke(SmokeColor) end j=i i=i+1 @@ -10211,7 +10411,7 @@ local DeltaY=self._.Polygon[j].y-self._.Polygon[i].y for Segment=0,Segments do local PointX=self._.Polygon[i].x+(Segment*DeltaX/Segments) local PointY=self._.Polygon[i].y+(Segment*DeltaY/Segments) -POINT_VEC2:New(PointX,PointY,AddHeight):Flare(FlareColor,Azimuth) +COORDINATE:New(PointX,AddHeight,PointY):Flare(FlareColor,Azimuth) end j=i i=i+1 @@ -10242,6 +10442,9 @@ local InZone=self:IsVec2InZone({x=Vec3.x,y=Vec3.z}) return InZone end function ZONE_POLYGON_BASE:GetRandomVec2() +math.random() +math.random() +math.random() local weights={} for _,triangle in pairs(self._Triangles)do weights[triangle]=triangle.SurfaceArea/self.SurfaceArea @@ -10256,11 +10459,11 @@ end end end function ZONE_POLYGON_BASE:GetRandomPointVec2() -local PointVec2=POINT_VEC2:NewFromVec2(self:GetRandomVec2()) +local PointVec2=COORDINATE:NewFromVec2(self:GetRandomVec2()) return PointVec2 end function ZONE_POLYGON_BASE:GetRandomPointVec3() -local PointVec3=POINT_VEC3:NewFromVec2(self:GetRandomVec2()) +local PointVec3=COORDINATE:NewFromVec2(self:GetRandomVec2()) return PointVec3 end function ZONE_POLYGON_BASE:GetRandomCoordinate() @@ -10395,11 +10598,7 @@ self.ScanData.Scenery={} self.ScanData.SceneryTable={} self.ScanData.Units={} local vectors=self:GetBoundingSquare() -local minVec3={x=vectors.x1,y=0,z=vectors.y1} -local maxVec3={x=vectors.x2,y=0,z=vectors.y2} -local minmarkcoord=COORDINATE:NewFromVec3(minVec3) -local maxmarkcoord=COORDINATE:NewFromVec3(maxVec3) -local ZoneRadius=minmarkcoord:Get2DDistance(maxmarkcoord)/2 +local ZoneRadius=UTILS.VecDist2D({x=vectors.x1,y=vectors.y1},{x=vectors.x2,y=vectors.y2})/2 local CenterVec3=self:GetCoordinate():GetVec3() local SphereSearch={ id=world.VolumeType.SPHERE, @@ -10409,10 +10608,9 @@ radius=ZoneRadius, } } local function EvaluateZone(ZoneObject) -if ZoneObject then +if ZoneObject and self:IsVec3InZone(ZoneObject:getPoint())then local ObjectCategory=Object.getCategory(ZoneObject) if(ObjectCategory==Object.Category.UNIT and ZoneObject:isExist()and ZoneObject:isActive())or(ObjectCategory==Object.Category.STATIC and ZoneObject:isExist())then -local CoalitionDCSUnit=ZoneObject:getCoalition() local Include=false if not UnitCategories then Include=true @@ -10431,7 +10629,7 @@ self.ScanData.Coalitions[CoalitionDCSUnit]=true self.ScanData.Units[ZoneObject]=ZoneObject end end -if ObjectCategory==Object.Category.SCENERY and self:IsVec3InZone(ZoneObject:getPoint())then +if ObjectCategory==Object.Category.SCENERY then local SceneryType=ZoneObject:getTypeName() local SceneryName=ZoneObject:getName() self.ScanData.Scenery[SceneryType]=self.ScanData.Scenery[SceneryType]or{} @@ -10587,6 +10785,24 @@ function ZONE_ELASTIC:AddVertex2D(Vec2) table.insert(self.points,Vec2) return self end +function ZONE_ELASTIC:RemoveVertex2D(Vec2) +local found=false +local findex=0 +for _id,_vec2 in pairs(self.points)do +if _vec2.x==Vec2.x and _vec2.y==Vec2.y then +found=true +findex=_id +break +end +end +if found==true and findex>0 then +table.remove(self.points,findex) +end +return self +end +function ZONE_ELASTIC:RemoveVertex3D(Vec3) +return self:RemoveVertex2D({x=Vec3.x,y=Vec3.z}) +end function ZONE_ELASTIC:AddVertex3D(Vec3) table.insert(self.points,{x=Vec3.x,y=Vec3.z}) return self @@ -10609,6 +10825,8 @@ end end end self._.Polygon=self:_ConvexHull(points) +self._Triangles=self:_Triangulate() +self.SurfaceArea=self:_CalculateSurfaceArea() if Draw~=false then if self.DrawID or Draw==true then self:UndrawZone() @@ -10750,10 +10968,10 @@ local ry=(x_e*math.sin(theta)+y_e*math.cos(theta))+self.CenterVec2.y return{x=rx,y=ry} end function ZONE_OVAL:GetRandomPointVec2() -return POINT_VEC2:NewFromVec2(self:GetRandomVec2()) +return COORDINATE:NewFromVec2(self:GetRandomVec2()) end function ZONE_OVAL:GetRandomPointVec3() -return POINT_VEC3:NewFromVec3(self:GetRandomVec2()) +return COORDINATE:NewFromVec3(self:GetRandomVec2()) end function ZONE_OVAL:DrawZone(Coalition,Color,Alpha,FillColor,FillAlpha,LineType) Coalition=Coalition or self:GetDrawCoalition() @@ -10819,7 +11037,7 @@ end return ZoneVec2 end function ZONE_AIRBASE:GetRandomPointVec2(inner,outer) -local PointVec2=POINT_VEC2:NewFromVec2(self:GetRandomVec2()) +local PointVec2=COORDINATE:NewFromVec2(self:GetRandomVec2()) return PointVec2 end end @@ -10875,7 +11093,7 @@ for Angle=0,360,360/Points do local Radial=(Angle+AngleOffset)*RadialBase/360 Point.x=Vec2.x+math.cos(Radial)*self:GetRadius() Point.y=Vec2.y+math.sin(Radial)*self:GetRadius() -POINT_VEC2:New(Point.x,Point.y,AddHeight):Smoke(SmokeColor) +COORDINATE:New(Point.x,AddHeight,Point.y):Smoke(SmokeColor) end return self end @@ -10891,7 +11109,7 @@ for Angle=0,360,360/Points do local Radial=Angle*RadialBase/360 Point.x=Vec2.x+math.cos(Radial)*self:GetRadius() Point.y=Vec2.y+math.sin(Radial)*self:GetRadius() -POINT_VEC2:New(Point.x,Point.y,AddHeight):Flare(FlareColor,Azimuth) +COORDINATE:New(Point.x,AddHeight,Point.y):Flare(FlareColor,Azimuth) end return self end @@ -11019,9 +11237,8 @@ end function DATABASE:AddStatic(DCSStaticName) if not self.STATICS[DCSStaticName]then self.STATICS[DCSStaticName]=STATIC:Register(DCSStaticName) -return self.STATICS[DCSStaticName] end -return nil +return self.STATICS[DCSStaticName] end function DATABASE:DeleteStatic(DCSStaticName) self.STATICS[DCSStaticName]=nil @@ -11033,9 +11250,8 @@ end function DATABASE:AddDynamicCargo(Name) if not self.DYNAMICCARGO[Name]then self.DYNAMICCARGO[Name]=DYNAMICCARGO:Register(Name) -return self.DYNAMICCARGO[Name] end -return nil +return self.DYNAMICCARGO[Name] end function DATABASE:FindDynamicCargo(DynamicCargoName) local StaticFound=self.DYNAMICCARGO[DynamicCargoName] @@ -11176,11 +11392,17 @@ local ZoneName=objectData.name or"Unknown rect Polygon Drawing" local vec2={x=objectData.mapX,y=objectData.mapY} local w=objectData.width local h=objectData.height -local points={} -points[1]={x=vec2.x-h/2,y=vec2.y+w/2} -points[2]={x=vec2.x+h/2,y=vec2.y+w/2} -points[3]={x=vec2.x+h/2,y=vec2.y-w/2} -points[4]={x=vec2.x-h/2,y=vec2.y-w/2} +local rotation=UTILS.ToRadian(objectData.angle or 0) +local sinRot=math.sin(rotation) +local cosRot=math.cos(rotation) +local dx=h/2 +local dy=w/2 +local points={ +{x=-dx*cosRot-(-dy*sinRot)+vec2.x,y=-dx*sinRot+(-dy*cosRot)+vec2.y}, +{x=dx*cosRot-(-dy*sinRot)+vec2.x,y=dx*sinRot+(-dy*cosRot)+vec2.y}, +{x=dx*cosRot-(dy*sinRot)+vec2.x,y=dx*sinRot+(dy*cosRot)+vec2.y}, +{x=-dx*cosRot-(dy*sinRot)+vec2.x,y=-dx*sinRot+(dy*cosRot)+vec2.y}, +} self:I(string.format("Register ZONE: %s (Polygon (rect) drawing with %d vertices)",ZoneName,#points)) local Zone=ZONE_POLYGON:NewFromPointsArray(ZoneName,points) Zone:SetColor({1,0,0},0.15) @@ -11321,6 +11543,7 @@ end return self.CLIENTS[DCSUnitName] end function DATABASE:FindGroup(GroupName) +if type(GroupName)~="string"or GroupName==""then return end local GroupFound=self.GROUPS[GroupName] if GroupFound==nil and GroupName~=nil and self.Templates.Groups[GroupName]==nil then self:_RegisterDynamicGroup(GroupName) @@ -11449,7 +11672,7 @@ if stn==nil or stn<1 then self:E("WARNING: Invalid STN "..tostring(UnitTemplate.AddPropAircraft.STN_L16).." for "..UnitTemplate.name) else self.STNS[stn]=UnitTemplate.name -self:I("Register STN "..tostring(UnitTemplate.AddPropAircraft.STN_L16).." for "..UnitTemplate.name) +self:T("Register STN "..tostring(UnitTemplate.AddPropAircraft.STN_L16).." for "..UnitTemplate.name) end end if UnitTemplate.AddPropAircraft.SADL_TN then @@ -11458,7 +11681,7 @@ if sadl==nil or sadl<1 then self:E("WARNING: Invalid SADL "..tostring(UnitTemplate.AddPropAircraft.SADL_TN).." for "..UnitTemplate.name) else self.SADL[sadl]=UnitTemplate.name -self:I("Register SADL "..tostring(UnitTemplate.AddPropAircraft.SADL_TN).." for "..UnitTemplate.name) +self:T("Register SADL "..tostring(UnitTemplate.AddPropAircraft.SADL_TN).." for "..UnitTemplate.name) end end end @@ -11638,21 +11861,21 @@ function DATABASE:GetCoalitionFromClientTemplate(ClientName) if self.Templates.ClientsByName[ClientName]then return self.Templates.ClientsByName[ClientName].CoalitionID end -self:E("WARNING: Template does not exist for client "..tostring(ClientName)) +self:T("WARNING: Template does not exist for client "..tostring(ClientName)) return nil end function DATABASE:GetCategoryFromClientTemplate(ClientName) if self.Templates.ClientsByName[ClientName]then return self.Templates.ClientsByName[ClientName].CategoryID end -self:E("WARNING: Template does not exist for client "..tostring(ClientName)) +self:T("WARNING: Template does not exist for client "..tostring(ClientName)) return nil end function DATABASE:GetCountryFromClientTemplate(ClientName) if self.Templates.ClientsByName[ClientName]then return self.Templates.ClientsByName[ClientName].CountryID end -self:E("WARNING: Template does not exist for client "..tostring(ClientName)) +self:T("WARNING: Template does not exist for client "..tostring(ClientName)) return nil end function DATABASE:GetCoalitionFromAirbase(AirbaseName) @@ -11800,7 +12023,7 @@ if client then end local PlayerName=Event.IniUnit:GetPlayerName() if PlayerName then -self:I(string.format("Player '%s' joined unit '%s' of group '%s'",tostring(PlayerName),tostring(Event.IniDCSUnitName),tostring(Event.IniDCSGroupName))) +self:I(string.format("Player '%s' joined unit '%s' (%s) of group '%s'",tostring(PlayerName),tostring(Event.IniDCSUnitName),tostring(Event.IniTypeName),tostring(Event.IniDCSGroupName))) if client==nil or(client and client:CountPlayers()==0)then client=self:AddClient(Event.IniDCSUnitName,true) end @@ -12252,6 +12475,11 @@ end end end function SET_BASE:Add(ObjectName,Object) +if not ObjectName or ObjectName==""then +self:E("SET_BASE:Add - Invalid ObjectName handed") +self:E({ObjectName=ObjectName,Object=Object}) +return self +end if self.Set[ObjectName]then self:Remove(ObjectName,true) end @@ -12361,6 +12589,17 @@ end function SET_BASE:GetSomeIteratorLimit() return self.SomeIteratorLimit or self:Count() end +function SET_BASE:GetThreatLevelMax() +local ThreatMax=0 +for _,_unit in pairs(self.Set or{})do +local unit=_unit +local threat=unit.GetThreatLevel and unit:GetThreatLevel()or 0 +if threat>ThreatMax then +ThreatMax=threat +end +end +return ThreatMax +end function SET_BASE:FilterOnce() for ObjectName,Object in pairs(self.Database)do if self:IsIncludeObject(Object)then @@ -12399,15 +12638,15 @@ self:UnHandleEvent(EVENTS.Dead) self:UnHandleEvent(EVENTS.Crash) return self end -function SET_BASE:FindNearestObjectFromPointVec2(PointVec2) +function SET_BASE:FindNearestObjectFromPointVec2(Coordinate) local NearestObject=nil local ClosestDistance=nil for ObjectID,ObjectData in pairs(self.Set)do if NearestObject==nil then NearestObject=ObjectData -ClosestDistance=PointVec2:DistanceFromPointVec2(ObjectData:GetCoordinate()) +ClosestDistance=Coordinate:DistanceFromPointVec2(ObjectData:GetCoordinate()) else -local Distance=PointVec2:DistanceFromPointVec2(ObjectData:GetCoordinate()) +local Distance=Coordinate:DistanceFromPointVec2(ObjectData:GetCoordinate()) if Distance1 then @@ -16867,6 +17239,17 @@ function COORDINATE:GetLandHeight() local Vec2={x=self.x,y=self.z} return land.getHeight(Vec2) end +function COORDINATE:GetLandProfileVec3(Destination) +return land.profile(self:GetVec3(),Destination) +end +function COORDINATE:GetLandProfileCoordinates(Destination) +local points=self:GetLandProfileVec3(Destination:GetVec3()) +local coords={} +for _,point in ipairs(points)do +table.insert(coords,COORDINATE:NewFromVec3(point)) +end +return coords +end function COORDINATE:SetHeading(Heading) self.Heading=Heading end @@ -16928,8 +17311,12 @@ return coord end function COORDINATE:Get2DDistance(TargetCoordinate) if not TargetCoordinate then return 1000000 end -local a={x=TargetCoordinate.x-self.x,y=0,z=TargetCoordinate.z-self.z} -local norm=UTILS.VecNorm(a) +local a=self:GetVec2() +if not TargetCoordinate.ClassName then +TargetCoordinate=COORDINATE:NewFromVec3(TargetCoordinate) +end +local b=TargetCoordinate:GetVec2() +local norm=UTILS.VecDist2D(a,b) return norm end function COORDINATE:GetTemperature(height) @@ -17011,6 +17398,79 @@ local point={x=self.x,y=math.max(height or self.y,landheight),z=self.z} local vec3=atmosphere.getWindWithTurbulence(point) return vec3 end +function COORDINATE:GetX() +return self.x +end +function COORDINATE:GetY() +if self:IsInstanceOf("POINT_VEC2")then +return self.z +end +return self.y +end +function COORDINATE:GetZ() +return self.z +end +function COORDINATE:SetX(x) +self.x=x +return self +end +function COORDINATE:SetY(y) +if self:IsInstanceOf("POINT_VEC2")then +self.z=y +else +self.y=y +end +return self +end +function COORDINATE:SetZ(z) +self.z=z +return self +end +function COORDINATE:AddX(x) +self.x=self.x+x +return self +end +function COORDINATE:GetLat() +return self.x +end +function COORDINATE:SetLat(x) +self.x=x +return self +end +function COORDINATE:GetLon() +return self.z +end +function COORDINATE:SetLon(z) +self.z=z +return self +end +function COORDINATE:GetAlt() +return self.y~=0 or land.getHeight({x=self.x,y=self.z}) +end +function COORDINATE:SetAlt(Altitude) +self.y=Altitude or land.getHeight({x=self.x,y=self.z}) +return self +end +function COORDINATE:AddAlt(Altitude) +self.y=land.getHeight({x=self.x,y=self.z})+Altitude or 0 +return self +end +function COORDINATE:GetRandomPointVec2InRadius(OuterRadius,InnerRadius) +self:F2({OuterRadius,InnerRadius}) +return COORDINATE:NewFromVec2(self:GetRandomVec2InRadius(OuterRadius,InnerRadius)) +end +function COORDINATE:AddY(y) +if self:IsInstanceOf("POINT_VEC2")then +return self:AddZ(y) +else +self.y=self.y+y +end +return self +end +function COORDINATE:AddZ(z) +self.z=self.z+z +return self +end function COORDINATE:GetWindText(height,Settings) local Direction,Strength=self:GetWind(height) local Settings=Settings or _SETTINGS @@ -17036,7 +17496,7 @@ local Settings=Settings or _SETTINGS local AngleDegrees=UTILS.Round(UTILS.ToDegree(AngleRadians),Precision) local s=string.format('%03d°',AngleDegrees) if MagVar then -local variation=UTILS.GetMagneticDeclination()or 0 +local variation=self:GetMagneticDeclination()or 0 local AngleMagnetic=AngleDegrees-variation if AngleMagnetic<0 then AngleMagnetic=360-AngleMagnetic end s=string.format('%03d°M|%03d°',AngleMagnetic,AngleDegrees) @@ -17108,10 +17568,11 @@ else return" bearing unknown" end end -function COORDINATE:GetBRText(AngleRadians,Distance,Settings,Language,MagVar) +function COORDINATE:GetBRText(AngleRadians,Distance,Settings,Language,MagVar,Precision) local Settings=Settings or _SETTINGS +Precision=Precision or 0 local BearingText=self:GetBearingText(AngleRadians,0,Settings,MagVar) -local DistanceText=self:GetDistanceText(Distance,Settings,Language,0) +local DistanceText=self:GetDistanceText(Distance,Settings,Language,Precision) local BRText=BearingText..DistanceText return BRText end @@ -17412,79 +17873,141 @@ trigger.action.illuminationBomb(self:GetVec3(),Power) end return self end -function COORDINATE:Smoke(SmokeColor) -self:F2({SmokeColor}) -trigger.action.smoke(self:GetVec3(),SmokeColor) +function COORDINATE:Smoke(SmokeColor,Duration,Delay,Name,Offset,Direction,Distance) +self:F2({SmokeColor,Name,Duration,Delay,Offset}) +SmokeColor=SmokeColor or SMOKECOLOR.Green +if Delay and Delay>0 then +self:ScheduleOnce(Delay,COORDINATE.Smoke,self,SmokeColor,Duration,0,Name,Direction,Distance) +else +self.firename=Name or"Smoke-"..math.random(1,100000) +if Offset or self.SmokeOffset then +local Angle=Direction or self:GetSmokeOffsetDirection() +local Distance=Distance or self:GetSmokeOffsetDistance() +local newpos=self:Translate(Distance,Angle,true,false) +local newvec3=newpos:GetVec3() +trigger.action.smoke(newvec3,SmokeColor,self.firename) +else +trigger.action.smoke(self:GetVec3(),SmokeColor,self.firename) end -function COORDINATE:SmokeGreen() -self:F2() -self:Smoke(SMOKECOLOR.Green) +if Duration and Duration>0 then +self:ScheduleOnce(Duration,COORDINATE.StopSmoke,self,self.firename) end -function COORDINATE:SmokeRed() -self:F2() -self:Smoke(SMOKECOLOR.Red) end -function COORDINATE:SmokeWhite() -self:F2() -self:Smoke(SMOKECOLOR.White) +return self end -function COORDINATE:SmokeOrange() -self:F2() -self:Smoke(SMOKECOLOR.Orange) +function COORDINATE:GetSmokeOffsetDirection() +local direction=self.SmokeOffsetDirection or math.random(1,359) +return direction end -function COORDINATE:SmokeBlue() -self:F2() -self:Smoke(SMOKECOLOR.Blue) +function COORDINATE:SetSmokeOffsetDirection(Direction) +if self then +self.SmokeOffsetDirection=Direction or math.random(1,359) +return self +else +COORDINATE.SmokeOffsetDirection=Direction or math.random(1,359) end -function COORDINATE:BigSmokeAndFire(preset,density,name) -self:F2({preset=preset,density=density}) -density=density or 0.5 -self.firename=name or"Fire-"..math.random(1,10000) -trigger.action.effectSmokeBig(self:GetVec3(),preset,density,self.firename) +end +function COORDINATE:GetSmokeOffsetDistance() +local distance=self.SmokeOffsetDistance or math.random(10,20) +return distance +end +function COORDINATE:SetSmokeOffsetDistance(Distance) +if self then +self.SmokeOffsetDistance=Distance or math.random(10,20) +return self +else +COORDINATE.SmokeOffsetDistance=Distance or math.random(10,20) +end +end +function COORDINATE:SwitchSmokeOffsetOn() +if self then +self.SmokeOffset=true +return self +else +COORDINATE.SmokeOffset=true +end +end +function COORDINATE:SwitchSmokeOffsetOff() +if self then +self.SmokeOffset=false +return self +else +COORDINATE.SmokeOffset=false +end +end +function COORDINATE:StopSmoke(name) +self:StopBigSmokeAndFire(name) +end +function COORDINATE:SmokeGreen(Duration,Delay) +self:Smoke(SMOKECOLOR.Green,Duration,Delay) +return self +end +function COORDINATE:SmokeRed(Duration,Delay) +self:Smoke(SMOKECOLOR.Red,Duration,Delay) +return self +end +function COORDINATE:SmokeWhite(Duration,Delay) +self:Smoke(SMOKECOLOR.White,Duration,Delay) +return self +end +function COORDINATE:SmokeOrange(Duration,Delay) +self:Smoke(SMOKECOLOR.Orange,Duration,Delay) +return self +end +function COORDINATE:SmokeBlue(Duration,Delay) +self:Smoke(SMOKECOLOR.Blue,Duration,Delay) +return self +end +function COORDINATE:BigSmokeAndFire(Preset,Density,Duration,Delay,Name) +self:F2({preset=Preset,density=Density}) +Preset=Preset or BIGSMOKEPRESET.SmallSmokeAndFire +Density=Density or 0.5 +if Delay and Delay>0 then +self:ScheduleOnce(Delay,COORDINATE.BigSmokeAndFire,self,Preset,Density,Duration,0,Name) +else +self.firename=Name or"Fire-"..math.random(1,10000) +trigger.action.effectSmokeBig(self:GetVec3(),Preset,Density,self.firename) +if Duration and Duration>0 then +self:ScheduleOnce(Duration,COORDINATE.StopBigSmokeAndFire,self,self.firename) +end +end +return self end function COORDINATE:StopBigSmokeAndFire(name) name=name or self.firename trigger.action.effectSmokeStop(name) end -function COORDINATE:BigSmokeAndFireSmall(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmokeAndFire,density,name) +function COORDINATE:BigSmokeAndFireSmall(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmokeAndFire,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeAndFireMedium(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmokeAndFire,density,name) +function COORDINATE:BigSmokeAndFireMedium(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmokeAndFire,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeAndFireLarge(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmokeAndFire,density,name) +function COORDINATE:BigSmokeAndFireLarge(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmokeAndFire,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeAndFireHuge(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmokeAndFire,density,name) +function COORDINATE:BigSmokeAndFireHuge(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmokeAndFire,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeSmall(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmoke,density,name) +function COORDINATE:BigSmokeSmall(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmoke,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeMedium(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmoke,density,name) +function COORDINATE:BigSmokeMedium(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmoke,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeLarge(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmoke,density,name) +function COORDINATE:BigSmokeLarge(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmoke,Density,Duration,Delay,Name) +return self end -function COORDINATE:BigSmokeHuge(density,name) -self:F2({density=density}) -density=density or 0.5 -self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmoke,density,name) +function COORDINATE:BigSmokeHuge(Density,Duration,Delay,Name) +self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmoke,Density,Duration,Delay,Name) +return self end function COORDINATE:Flare(FlareColor,Azimuth) self:F2({FlareColor}) @@ -17789,8 +18312,10 @@ local Latitude,Longitude=self:GetLLDDM() local Tdiff=UTILS.GMTToLocalTimeDifference() local sunrise=UTILS.GetSunRiseAndSet(DayOfYear,Latitude,Longitude,true,Tdiff) local sunset=UTILS.GetSunRiseAndSet(DayOfYear,Latitude,Longitude,false,Tdiff) +if type(sunrise)=="string"or type(sunset)=="string"then if sunrise=="N/R"then return false end -if sunrise=="N/S"then return true end +if sunset=="N/S"then return true end +end local time=UTILS.ClockToSeconds(clock) if time>sunrise and time<=sunset then return true @@ -17800,6 +18325,10 @@ end else local sunrise=self:GetSunrise(true) local sunset=self:GetSunset(true) +if type(sunrise)=="string"or type(sunset)=="string"then +if sunrise=="N/R"then return false end +if sunset=="N/S"then return true end +end local time=UTILS.SecondsOfToday() if time>sunrise and time<=sunset then return true @@ -17850,11 +18379,11 @@ delta=sunset+UTILS.SecondsToMidnight() end return delta/60 end -function COORDINATE:ToStringBR(FromCoordinate,Settings,MagVar) +function COORDINATE:ToStringBR(FromCoordinate,Settings,MagVar,Precision) local DirectionVec3=FromCoordinate:GetDirectionVec3(self) local AngleRadians=self:GetAngleRadians(DirectionVec3) local Distance=self:Get2DDistance(FromCoordinate) -return"BR, "..self:GetBRText(AngleRadians,Distance,Settings,nil,MagVar) +return"BR, "..self:GetBRText(AngleRadians,Distance,Settings,nil,MagVar,Precision) end function COORDINATE:ToStringBRA(FromCoordinate,Settings,MagVar) local DirectionVec3=FromCoordinate:GetDirectionVec3(self) @@ -17869,6 +18398,8 @@ local currentCoord=FromCoordinate local DirectionVec3=FromCoordinate:GetDirectionVec3(self) local AngleRadians=self:GetAngleRadians(DirectionVec3) local bearing=UTILS.Round(UTILS.ToDegree(AngleRadians),0) +local magnetic=self:GetMagneticDeclination()or 0 +bearing=bearing-magnetic local rangeMetres=self:Get2DDistance(currentCoord) local rangeNM=UTILS.Round(UTILS.MetersToNM(rangeMetres),0) local aspect=self:ToStringAspect(currentCoord) @@ -18100,25 +18631,9 @@ return self:ToStringMGRS(Settings) end return nil end -function COORDINATE:ToString(Controllable,Settings,Task) +function COORDINATE:ToString(Controllable,Settings) local Settings=Settings or(Controllable and _DATABASE:GetPlayerSettings(Controllable:GetPlayerName()))or _SETTINGS local ModeA2A=nil -if Task then -if Task:IsInstanceOf(TASK_A2A)then -ModeA2A=true -else -if Task:IsInstanceOf(TASK_A2G)then -ModeA2A=false -else -if Task:IsInstanceOf(TASK_CARGO)then -ModeA2A=false -end -if Task:IsInstanceOf(TASK_CAPTURE_ZONE)then -ModeA2A=false -end -end -end -end if ModeA2A==nil then local IsAir=Controllable and(Controllable:IsAirPlane()or Controllable:IsHelicopter())or false if IsAir then @@ -18179,6 +18694,21 @@ local steep,elev=self:IsInSteepArea(Radius,Minelevation) local flat=not steep return flat,elev end +function COORDINATE:GetRandomPointVec3InRadius(OuterRadius,InnerRadius) +return COORDINATE:NewFromVec3(self:GetRandomVec3InRadius(OuterRadius,InnerRadius)) +end +function COORDINATE:GetSimpleZones(SearchRadius,PosRadius,NumPositions) +local clearPositions=UTILS.GetSimpleZones(self:GetVec3(),SearchRadius,PosRadius,NumPositions) +if clearPositions and#clearPositions>0 then +local coords={} +for _,pos in pairs(clearPositions)do +local coord=COORDINATE:NewFromVec2(pos) +table.insert(coords,coord) +end +return coords +end +return nil +end end do POINT_VEC3={ @@ -18201,52 +18731,6 @@ local self=BASE:Inherit(self,COORDINATE:New(x,y,z)) self:F2(self) return self end -function POINT_VEC3:NewFromVec2(Vec2,LandHeightAdd) -local self=BASE:Inherit(self,COORDINATE:NewFromVec2(Vec2,LandHeightAdd)) -self:F2(self) -return self -end -function POINT_VEC3:NewFromVec3(Vec3) -local self=BASE:Inherit(self,COORDINATE:NewFromVec3(Vec3)) -self:F2(self) -return self -end -function POINT_VEC3:GetX() -return self.x -end -function POINT_VEC3:GetY() -return self.y -end -function POINT_VEC3:GetZ() -return self.z -end -function POINT_VEC3:SetX(x) -self.x=x -return self -end -function POINT_VEC3:SetY(y) -self.y=y -return self -end -function POINT_VEC3:SetZ(z) -self.z=z -return self -end -function POINT_VEC3:AddX(x) -self.x=self.x+x -return self -end -function POINT_VEC3:AddY(y) -self.y=self.y+y -return self -end -function POINT_VEC3:AddZ(z) -self.z=self.z+z -return self -end -function POINT_VEC3:GetRandomPointVec3InRadius(OuterRadius,InnerRadius) -return POINT_VEC3:NewFromVec3(self:GetRandomVec3InRadius(OuterRadius,InnerRadius)) -end end do POINT_VEC2={ @@ -18260,76 +18744,6 @@ local self=BASE:Inherit(self,COORDINATE:New(x,LandHeight,y)) self:F2(self) return self end -function POINT_VEC2:NewFromVec2(Vec2,LandHeightAdd) -local LandHeight=land.getHeight(Vec2) -LandHeightAdd=LandHeightAdd or 0 -LandHeight=LandHeight+LandHeightAdd -local self=BASE:Inherit(self,COORDINATE:NewFromVec2(Vec2,LandHeightAdd)) -self:F2(self) -return self -end -function POINT_VEC2:NewFromVec3(Vec3) -local self=BASE:Inherit(self,COORDINATE:NewFromVec3(Vec3)) -self:F2(self) -return self -end -function POINT_VEC2:GetX() -return self.x -end -function POINT_VEC2:GetY() -return self.z -end -function POINT_VEC2:SetX(x) -self.x=x -return self -end -function POINT_VEC2:SetY(y) -self.z=y -return self -end -function POINT_VEC2:GetLat() -return self.x -end -function POINT_VEC2:SetLat(x) -self.x=x -return self -end -function POINT_VEC2:GetLon() -return self.z -end -function POINT_VEC2:SetLon(z) -self.z=z -return self -end -function POINT_VEC2:GetAlt() -return self.y~=0 or land.getHeight({x=self.x,y=self.z}) -end -function POINT_VEC2:SetAlt(Altitude) -self.y=Altitude or land.getHeight({x=self.x,y=self.z}) -return self -end -function POINT_VEC2:AddX(x) -self.x=self.x+x -return self -end -function POINT_VEC2:AddY(y) -self.z=self.z+y -return self -end -function POINT_VEC2:AddAlt(Altitude) -self.y=land.getHeight({x=self.x,y=self.z})+Altitude or 0 -return self -end -function POINT_VEC2:GetRandomPointVec2InRadius(OuterRadius,InnerRadius) -self:F2({OuterRadius,InnerRadius}) -return POINT_VEC2:NewFromVec2(self:GetRandomVec2InRadius(OuterRadius,InnerRadius)) -end -function POINT_VEC2:DistanceFromPointVec2(PointVec2Reference) -self:F2(PointVec2Reference) -local Distance=((PointVec2Reference.x-self.x)^2+(PointVec2Reference.z-self.z)^2)^0.5 -self:T2(Distance) -return Distance -end end do VELOCITY={ @@ -18467,7 +18881,7 @@ return self end function MESSAGE:ToGroup(Group,Settings) self:F(Group.GroupName) -if Group then +if Group and Group:IsAlive()then if self.MessageType then local Settings=Settings or(Group and _DATABASE:GetPlayerSettings(Group:GetPlayerName()))or _SETTINGS self.MessageDuration=Settings:GetMessageTime(self.MessageType) @@ -18482,7 +18896,7 @@ return self end function MESSAGE:ToUnit(Unit,Settings) self:F(Unit.IdentifiableName) -if Unit then +if Unit and Unit:IsAlive()then if self.MessageType then local Settings=Settings or(Unit and _DATABASE:GetPlayerSettings(Unit:GetPlayerName()))or _SETTINGS self.MessageDuration=Settings:GetMessageTime(self.MessageType) @@ -18585,8 +18999,8 @@ end return self end _MESSAGESRS={} -function MESSAGE.SetMSRS(PathToSRS,Port,PathToCredentials,Frequency,Modulation,Gender,Culture,Voice,Coalition,Volume,Label,Coordinate) -_MESSAGESRS.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +function MESSAGE.SetMSRS(PathToSRS,Port,PathToCredentials,Frequency,Modulation,Gender,Culture,Voice,Coalition,Volume,Label,Coordinate,Backend) +_MESSAGESRS.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" _MESSAGESRS.frequency=Frequency or MSRS.frequencies or 243 _MESSAGESRS.modulation=Modulation or MSRS.modulations or radio.modulation.AM _MESSAGESRS.MSRS=MSRS:New(_MESSAGESRS.PathToSRS,_MESSAGESRS.frequency,_MESSAGESRS.modulation) @@ -18596,6 +19010,9 @@ _MESSAGESRS.coordinate=Coordinate if Coordinate then _MESSAGESRS.MSRS:SetCoordinate(Coordinate) end +if Backend then +_MESSAGESRS.MSRS:SetBackend(Backend) +end _MESSAGESRS.Culture=Culture or MSRS.culture or"en-GB" _MESSAGESRS.MSRS:SetCulture(Culture) _MESSAGESRS.Gender=Gender or MSRS.gender or"female" @@ -19467,6 +19884,12 @@ self.SpawnUnitsWithAbsolutePositions=true self.UnitsAbsolutePositions=Positions return self end +function SPAWN:InitValidateAndRepositionGroundUnits(OnOff,MaxRadius,Spacing) +self.SpawnValidateAndRepositionGroundUnits=OnOff +self.SpawnValidateAndRepositionGroundUnitsRadius=MaxRadius +self.SpawnValidateAndRepositionGroundUnitsSpacing=Spacing +return self +end function SPAWN:InitRandomizeTemplate(SpawnTemplatePrefixTable) local temptable={} for _,_temp in pairs(SpawnTemplatePrefixTable)do @@ -19475,25 +19898,25 @@ end self.SpawnTemplatePrefixTable=UTILS.ShuffleTable(temptable) self.SpawnRandomizeTemplate=true for SpawnGroupID=1,self.SpawnMaxGroups do -self:_RandomizeTemplate(SpawnGroupID) +self:_RandomizeTemplate(SpawnGroupID,RandomizePositionInZone) end return self end -function SPAWN:InitRandomizeTemplateSet(SpawnTemplateSet) +function SPAWN:InitRandomizeTemplateSet(SpawnTemplateSet,RandomizePositionInZone) local setnames=SpawnTemplateSet:GetSetNames() -self:InitRandomizeTemplate(setnames) +self:InitRandomizeTemplate(setnames,RandomizePositionInZone) return self end -function SPAWN:InitRandomizeTemplatePrefixes(SpawnTemplatePrefixes) +function SPAWN:InitRandomizeTemplatePrefixes(SpawnTemplatePrefixes,RandomizePositionInZone) local SpawnTemplateSet=SET_GROUP:New():FilterPrefixes(SpawnTemplatePrefixes):FilterOnce() -self:InitRandomizeTemplateSet(SpawnTemplateSet) +self:InitRandomizeTemplateSet(SpawnTemplateSet,RandomizePositionInZone) return self end function SPAWN:InitGrouping(Grouping) self.SpawnGrouping=Grouping return self end -function SPAWN:InitRandomizeZones(SpawnZoneTable) +function SPAWN:InitRandomizeZones(SpawnZoneTable,RandomizePositionInZone) local temptable={} for _,_temp in pairs(SpawnZoneTable)do temptable[#temptable+1]=_temp @@ -19501,7 +19924,7 @@ end self.SpawnZoneTable=UTILS.ShuffleTable(temptable) self.SpawnRandomizeZones=true for SpawnGroupID=1,self.SpawnMaxGroups do -self:_RandomizeZones(SpawnGroupID) +self:_RandomizeZones(SpawnGroupID,RandomizePositionInZone) end return self end @@ -19536,10 +19959,11 @@ self.RepeatOnEngineShutDown=false self.RepeatOnLanding=true return self end -function SPAWN:InitRepeatOnLanding() +function SPAWN:InitRepeatOnLanding(WaitingTime) self:InitRepeat() self.RepeatOnEngineShutDown=false self.RepeatOnLanding=true +self.RepeatOnLandingTime=(WaitingTime and WaitingTime>3)and WaitingTime or 3 return self end function SPAWN:InitRepeatOnEngineShutDown() @@ -19688,7 +20112,7 @@ else local SpawnTemplate=self.SpawnGroups[self.SpawnIndex].SpawnTemplate local SpawnZone=self.SpawnGroups[self.SpawnIndex].SpawnZone if SpawnTemplate then -local PointVec3=POINT_VEC3:New(SpawnTemplate.route.points[1].x,SpawnTemplate.route.points[1].alt,SpawnTemplate.route.points[1].y) +local PointVec3=COORDINATE:New(SpawnTemplate.route.points[1].x,SpawnTemplate.route.points[1].alt,SpawnTemplate.route.points[1].y) if self.SpawnRandomizePosition then local RandomVec2=PointVec3:GetRandomVec2InRadius(self.SpawnRandomizePositionOuterRadius,self.SpawnRandomizePositionInnerRadius) local CurrentX=SpawnTemplate.units[1].x @@ -19835,6 +20259,11 @@ end if self.SpawnHiddenOnMap then SpawnTemplate.hidden=self.SpawnHiddenOnMap end +if self.SpawnValidateAndRepositionGroundUnits then +local units=SpawnTemplate.units +local gPos={x=SpawnTemplate.x,y=SpawnTemplate.y} +UTILS.ValidateAndRepositionGroundUnits(units,gPos,self.SpawnValidateAndRepositionGroundUnitsRadius,self.SpawnValidateAndRepositionGroundUnitsSpacing) +end SpawnTemplate.CategoryID=self.SpawnInitCategory or SpawnTemplate.CategoryID SpawnTemplate.CountryID=self.SpawnInitCountry or SpawnTemplate.CountryID SpawnTemplate.CoalitionID=self.SpawnInitCoalition or SpawnTemplate.CoalitionID @@ -19911,16 +20340,14 @@ end if self:_GetSpawnIndex(self.SpawnIndex+1)then local SpawnTemplate=self.SpawnGroups[self.SpawnIndex].SpawnTemplate if SpawnTemplate then -local GroupAlive=self:GetGroupFromIndex(self.SpawnIndex) -local TemplateGroup=GROUP:FindByName(self.SpawnTemplatePrefix) -local TemplateUnit=TemplateGroup:GetUnit(1) -local group=TemplateGroup +local group=GROUP:FindByName(self.SpawnTemplatePrefix) +local unit=group:GetUnit(1) local istransport=group:HasAttribute("Transports")and group:HasAttribute("Planes") local isawacs=group:HasAttribute("AWACS") local isfighter=group:HasAttribute("Fighters")or group:HasAttribute("Interceptors")or group:HasAttribute("Multirole fighters")or(group:HasAttribute("Bombers")and not group:HasAttribute("Strategic bombers")) local isbomber=group:HasAttribute("Strategic bombers") local istanker=group:HasAttribute("Tankers") -local ishelo=TemplateUnit:HasAttribute("Helicopters") +local ishelo=unit:HasAttribute("Helicopters") local nunits=#SpawnTemplate.units local SpawnPoint=SpawnTemplate.route.points[1] SpawnPoint.linkUnit=nil @@ -19934,26 +20361,18 @@ SpawnPoint.helipadId=AirbaseID elseif AirbaseCategory==Airbase.Category.HELIPAD then SpawnPoint.linkUnit=AirbaseID SpawnPoint.helipadId=AirbaseID -elseif AirbaseCategory==Airbase.Category.AIRDROME then +else SpawnPoint.airdromeId=AirbaseID end SpawnPoint.alt=0 SpawnPoint.type=GROUPTEMPLATE.Takeoff[Takeoff][1] SpawnPoint.action=GROUPTEMPLATE.Takeoff[Takeoff][2] local spawnonground=not(Takeoff==SPAWN.Takeoff.Air) -local spawnonship=false -local spawnonfarp=false -local spawnonrunway=false -local spawnonairport=false -if spawnonground then -if AirbaseCategory==Airbase.Category.SHIP then -spawnonship=true -elseif AirbaseCategory==Airbase.Category.HELIPAD then -spawnonfarp=true -elseif AirbaseCategory==Airbase.Category.AIRDROME then -spawnonairport=true -end -spawnonrunway=Takeoff==SPAWN.Takeoff.Runway +local autoparking=false +if SpawnAirbase.isAirdrome then +autoparking=false +else +autoparking=true end local parkingspots={} local parkingindex={} @@ -19961,8 +20380,8 @@ local spots if spawnonground and not SpawnTemplate.parked then local nfree=0 local termtype=TerminalType -if spawnonrunway then -if spawnonship then +if Takeoff==SPAWN.Takeoff.Runway then +if SpawnAirbase.isShip then if ishelo then termtype=AIRBASE.TerminalType.HelicopterUsable else @@ -19977,43 +20396,46 @@ local scanunits=true local scanstatics=true local scanscenery=false local verysafe=false -if spawnonship or spawnonfarp or spawnonrunway then +if autoparking then nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype,true) spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype,true) +elseif Parkingdata~=nil then +nfree=#Parkingdata +spots=Parkingdata else if ishelo then if termtype==nil then -spots=SpawnAirbase:FindFreeParkingSpotForAircraft(TemplateGroup,AIRBASE.TerminalType.HelicopterOnly,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,Parkingdata) +spots=SpawnAirbase:FindFreeParkingSpotForAircraft(group,AIRBASE.TerminalType.HelicopterOnly,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,Parkingdata) nfree=#spots if nfree=1 then for i=1,nunits do table.insert(parkingspots,spots[1].Coordinate) @@ -20023,7 +20445,7 @@ PointVec3=spots[1].Coordinate else _notenough=true end -elseif spawnonairport then +else if nfree>=nunits then for i=1,nunits do table.insert(parkingspots,spots[i].Coordinate) @@ -20036,10 +20458,7 @@ end if _notenough then if EmergencyAirSpawn and not self.SpawnUnControlled then self:E(string.format("WARNING: Group %s has no parking spots at %s ==> air start!",self.SpawnTemplatePrefix,SpawnAirbase:GetName())) -spawnonground=false -spawnonship=false -spawnonfarp=false -spawnonrunway=false +autoparking=false SpawnPoint.type=GROUPTEMPLATE.Takeoff[GROUP.Takeoff.Air][1] SpawnPoint.action=GROUPTEMPLATE.Takeoff[GROUP.Takeoff.Air][2] PointVec3.x=PointVec3.x+math.random(-500,500) @@ -20077,7 +20496,7 @@ local BY=SpawnTemplate.route.points[1].y local TX=PointVec3.x+(SX-BX) local TY=PointVec3.z+(SY-BY) if spawnonground then -if spawnonship or spawnonfarp or spawnonrunway then +if autoparking then SpawnTemplate.units[UnitID].x=PointVec3.x SpawnTemplate.units[UnitID].y=PointVec3.z SpawnTemplate.units[UnitID].alt=PointVec3.y @@ -20107,12 +20526,9 @@ SpawnTemplate.uncontrolled=self.SpawnUnControlled local GroupSpawned=self:SpawnWithIndex(self.SpawnIndex) if Takeoff==GROUP.Takeoff.Air then for UnitID,UnitSpawned in pairs(GroupSpawned:GetUnits())do -SCHEDULER:New(nil,BASE.CreateEventTakeoff,{GroupSpawned,timer.getTime(),UnitSpawned:GetDCSObject()},5) +self:ScheduleOnce(5,BASE.CreateEventTakeoff,{GroupSpawned,timer.getTime(),UnitSpawned:GetDCSObject()}) end end -if Takeoff~=SPAWN.Takeoff.Runway and Takeoff~=SPAWN.Takeoff.Air and spawnonairport then -SCHEDULER:New(nil,AIRBASE.CheckOnRunWay,{SpawnAirbase,GroupSpawned,75,true},1.0) -end return GroupSpawned end end @@ -20329,7 +20745,7 @@ self:SetSpawnIndex(0) return nil end function SPAWN:SpawnFromVec3(Vec3,SpawnIndex) -local PointVec3=POINT_VEC3:NewFromVec3(Vec3) +local PointVec3=COORDINATE:NewFromVec3(Vec3) if SpawnIndex then else SpawnIndex=self.SpawnIndex+1 @@ -20830,14 +21246,17 @@ SpawnTemplate.y=SpawnVec2.y end return self end -function SPAWN:_RandomizeZones(SpawnIndex) +function SPAWN:_RandomizeZones(SpawnIndex,RandomizePositionInZone) if self.SpawnRandomizeZones then local SpawnZone=nil while not SpawnZone do local ZoneID=math.random(#self.SpawnZoneTable) SpawnZone=self.SpawnZoneTable[ZoneID]:GetZoneMaybe() end -local SpawnVec2=SpawnZone:GetRandomVec2() +local SpawnVec2=SpawnZone:GetVec2() +if RandomizePositionInZone~=false then +SpawnVec2=SpawnZone:GetRandomVec2() +end local SpawnTemplate=self.SpawnGroups[SpawnIndex].SpawnTemplate self.SpawnGroups[SpawnIndex].SpawnZone=SpawnZone for UnitID=1,#SpawnTemplate.units do @@ -20964,7 +21383,7 @@ if EventPrefix==self.SpawnTemplatePrefix or(self.SpawnAliasPrefix and EventPrefi SpawnGroup:SetState(SpawnGroup,"Spawn_Landed",true) if self.RepeatOnLanding then local SpawnGroupIndex=self:GetSpawnIndexFromGroup(SpawnGroup) -SCHEDULER:New(nil,self.ReSpawn,{self,SpawnGroupIndex},3) +SCHEDULER:New(nil,self.ReSpawn,{self,SpawnGroupIndex},self.RepeatOnLandingTime or 3) end end end @@ -21048,6 +21467,7 @@ self.CountryID=SpawnCountryID or CountryID self.CategoryID=CategoryID self.CoalitionID=CoalitionID self.SpawnIndex=0 +self.StaticCopyFrom=SpawnTemplateName else error("SPAWNSTATIC:New: There is no static declared in the mission editor with SpawnTemplatePrefix = '"..tostring(SpawnTemplateName).."'") end @@ -21128,11 +21548,13 @@ function SPAWNSTATIC:InitShape(StaticShape) self.InitStaticShape=StaticShape return self end -function SPAWNSTATIC:InitFARP(CallsignID,Frequency,Modulation) +function SPAWNSTATIC:InitFARP(CallsignID,Frequency,Modulation,DynamicSpawns,DynamicHotStarts) self.InitFarp=true self.InitFarpCallsignID=CallsignID or 1 self.InitFarpFreq=Frequency or 127.5 self.InitFarpModu=Modulation or 0 +self.InitFarpDynamicSpawns=DynamicSpawns +self.InitFarpDynamicHotStarts=(DynamicSpawns==true and DynamicHotStarts==true)and true or nil return self end function SPAWNSTATIC:InitCargoMass(Mass) @@ -21162,6 +21584,11 @@ self.InitOffsetY=OffsetY or 0 self.InitOffsetAngle=OffsetAngle or 0 return self end +function SPAWNSTATIC:InitValidateAndRepositionStatic(OnOff,MaxRadius) +self.ValidateAndRepositionStatic=OnOff +self.ValidateAndRepositionStaticMaxRadius=MaxRadius +return self +end function SPAWNSTATIC:OnSpawnStatic(SpawnCallBackFunction,...) self:F("OnSpawnStatic") self.SpawnFunctionHook=SpawnCallBackFunction @@ -21196,7 +21623,7 @@ end return self:_SpawnStatic(self.TemplateStaticUnit,self.CountryID) end function SPAWNSTATIC:SpawnFromZone(Zone,Heading,NewName) -local Static=self:SpawnFromPointVec2(Zone:GetPointVec2(),Heading,NewName) +local Static=self:SpawnFromCoordinate(Zone:GetCoordinate(),Heading,NewName) return Static end function SPAWNSTATIC:_SpawnStatic(Template,CountryID) @@ -21247,9 +21674,14 @@ Template.unitId=nil end self.SpawnIndex=self.SpawnIndex+1 Template.name=self.InitStaticName or string.format("%s#%05d",self.SpawnTemplatePrefix,self.SpawnIndex) -local mystatic=_DATABASE:AddStatic(Template.name) -self:T(Template) local Static=nil +if self.ValidateAndRepositionStatic then +local validPos=UTILS.ValidateAndRepositionStatic(CountryID,Template.category,Template.type,Template,Template.shape_name,self.ValidateAndRepositionStaticMaxRadius) +if validPos then +Template.x=validPos.x +Template.y=validPos.y +end +end if self.InitFarp then local TemplateGroup={} TemplateGroup.units={} @@ -21259,6 +21691,12 @@ TemplateGroup.hidden=false TemplateGroup.x=Template.x TemplateGroup.y=Template.y TemplateGroup.name=Template.name +if self.InitFarpDynamicSpawns==true then +TemplateGroup.units[1].dynamicSpawn=true +if self.InitFarpDynamicHotStarts==true then +TemplateGroup.units[1].allowHotStart=true +end +end self:T("Spawning FARP") self:T({Template=Template}) self:T({TemplateGroup=TemplateGroup}) @@ -21273,10 +21711,28 @@ else self:T("Spawning Static") self:T2({Template=Template}) Static=coalition.addStaticObject(CountryID,Template) +if Static then +self:T(string.format("Succesfully spawned static object \"%s\" ID=%d",Static:getName(),Static:getID())) +else +self:E(string.format("ERROR: DCS static object \"%s\" is nil!",tostring(Template.name))) end +end +local mystatic=_DATABASE:AddStatic(Template.name) if self.SpawnFunctionHook then self:ScheduleOnce(0.3,self.SpawnFunctionHook,mystatic,unpack(self.SpawnFunctionArguments)) end +if self.StaticCopyFrom~=nil then +mystatic.StaticCopyFrom=self.StaticCopyFrom +if not _DATABASE.Templates.Statics[Template.name]then +local TemplateGroup={} +TemplateGroup.units={} +TemplateGroup.units[1]=Template +TemplateGroup.x=Template.x +TemplateGroup.y=Template.y +TemplateGroup.name=Template.name +_DATABASE:_RegisterStaticTemplate(TemplateGroup,self.CoalitionID,self.CategoryID,CountryID) +end +end return mystatic end TIMER={ @@ -21524,7 +21980,7 @@ MARKEROPS_BASE={ ClassName="MARKEROPS", Tag="mytag", Keywords={}, -version="0.1.3", +version="0.1.4", debug=false, Casesensitive=true, } @@ -21557,19 +22013,18 @@ if Event==nil or Event.idx==nil then self:E("Skipping onEvent. Event or Event.idx unknown.") return true end -local vec3={y=Event.pos.y,x=Event.pos.x,z=Event.pos.z} -local coord=COORDINATE:NewFromVec3(vec3) -if self.debug then -local coordtext=coord:ToStringLLDDM() -local text=tostring(Event.text) -local m=MESSAGE:New(string.format("Mark added at %s with text: %s",coordtext,text),10,"Info",false):ToAll() -end local coalition=Event.MarkCoalition if Event.id==world.event.S_EVENT_MARK_ADDED then self:T({event="S_EVENT_MARK_ADDED",carrier=Event.IniGroupName,vec3=Event.pos}) local Eventtext=tostring(Event.text) if Eventtext~=nil then if self:_MatchTag(Eventtext)then +local coord=COORDINATE:NewFromVec3({y=Event.pos.y,x=Event.pos.x,z=Event.pos.z}) +if self.debug then +local coordtext=coord:ToStringLLDDM() +local text=tostring(Event.text) +local m=MESSAGE:New(string.format("Mark added at %s with text: %s",coordtext,text),10,"Info",false):ToAll() +end local matchtable=self:_MatchKeywords(Eventtext) self:MarkAdded(Eventtext,matchtable,coord,Event.idx,coalition,Event.PlayerName,Event) end @@ -21579,6 +22034,12 @@ self:T({event="S_EVENT_MARK_CHANGE",carrier=Event.IniGroupName,vec3=Event.pos}) local Eventtext=tostring(Event.text) if Eventtext~=nil then if self:_MatchTag(Eventtext)then +local coord=COORDINATE:NewFromVec3({y=Event.pos.y,x=Event.pos.x,z=Event.pos.z}) +if self.debug then +local coordtext=coord:ToStringLLDDM() +local text=tostring(Event.text) +local m=MESSAGE:New(string.format("Mark changed at %s with text: %s",coordtext,text),10,"Info",false):ToAll() +end local matchtable=self:_MatchKeywords(Eventtext) self:MarkChanged(Eventtext,matchtable,coord,Event.idx,coalition,Event.PlayerName,Event) end @@ -21868,9 +22329,9 @@ point.markerID=nil return point end CLIENTMENU={ -ClassName="CLIENTMENUE", +ClassName="CLIENTMENU", lid="", -version="0.1.2", +version="0.1.3", name=nil, path=nil, group=nil, @@ -22035,7 +22496,7 @@ end CLIENTMENUMANAGER={ ClassName="CLIENTMENUMANAGER", lid="", -version="0.1.6", +version="0.1.7", name=nil, clientset=nil, menutree={}, @@ -22059,7 +22520,7 @@ self:I(self.lid.."Created") end return self end -function CLIENTMENUMANAGER:_EventHandler(EventData) +function CLIENTMENUMANAGER:_EventHandler(EventData,Retry) self:T(self.lid.."_EventHandler: "..EventData.id) if EventData.id==EVENTS.PlayerLeaveUnit or EventData.id==EVENTS.Ejection or EventData.id==EVENTS.Crash or EventData.id==EVENTS.PilotDead then self:T(self.lid.."Leave event for player: "..tostring(EventData.IniPlayerName)) @@ -22071,6 +22532,9 @@ elseif(EventData.id==EVENTS.PlayerEnterAircraft)and EventData.IniCoalition==self if EventData.IniPlayerName and EventData.IniGroup then if(not self.clientset:IsIncludeObject(_DATABASE:FindClient(EventData.IniUnitName)))then self:T(self.lid.."Client not in SET: "..EventData.IniPlayerName) +if not Retry then +self:ScheduleOnce(2,CLIENTMENUMANAGER._EventHandler,self,EventData,true) +end return self end local player=_DATABASE:FindClient(EventData.IniUnitName) @@ -22106,7 +22570,7 @@ self:HandleEvent(EVENTS.Crash,self._EventHandler) self:HandleEvent(EVENTS.PilotDead,self._EventHandler) self:HandleEvent(EVENTS.PlayerEnterAircraft,self._EventHandler) self:HandleEvent(EVENTS.PlayerEnterUnit,self._EventHandler) -self:SetEventPriority(5) +self:SetEventPriority(6) return self end function CLIENTMENUMANAGER:NewEntry(Text,Parent,Function,...) @@ -22306,6 +22770,10 @@ self.menutree=nil self.menutree={} return self end +function CLIENTMENUMANAGER:DeleteEntry(Entry,Client) +self:T(self.lid.."DeleteEntry") +return self:DeleteF10Entry(Entry,Client) +end function CLIENTMENUMANAGER:DeleteF10Entry(Entry,Client) self:T(self.lid.."DeleteF10Entry") local Set=self.clientset.Set @@ -22582,6 +23050,9 @@ end function POSITIONABLE:GetPosition() self:F2(self.PositionableName) local DCSPositionable=self:GetDCSObject() +if self:IsInstanceOf("GROUP")then +DCSPositionable=self:GetFirstUnitAlive():GetDCSObject() +end if DCSPositionable then local PositionablePosition=DCSPositionable:getPosition() self:T3(PositionablePosition) @@ -22641,6 +23112,14 @@ function POSITIONABLE:GetVec3() local DCSPositionable=self:GetDCSObject() if DCSPositionable then local vec3=DCSPositionable:getPoint() +if not vec3 then +local pos=DCSPositionable:getPosition() +if pos and pos.p then +vec3=pos.p +else +self:E({"Cannot get the position from DCS Object for GetVec3",Positionable=self,Alive=self:IsAlive()}) +end +end return vec3 end self:E({"Cannot get the Positionable DCS Object for GetVec3",Positionable=self,Alive=self:IsAlive()}) @@ -22660,10 +23139,10 @@ self:F2(self.PositionableName) local DCSPositionable=self:GetDCSObject() if DCSPositionable then local PositionableVec3=DCSPositionable:getPosition().p -local PositionablePointVec2=POINT_VEC2:NewFromVec3(PositionableVec3) +local PositionablePointVec2=COORDINATE:NewFromVec3(PositionableVec3) return PositionablePointVec2 end -self:E({"Cannot GetPointVec2",Positionable=self,Alive=self:IsAlive()}) +self:E({"Cannot Coordinate",Positionable=self,Alive=self:IsAlive()}) return nil end function POSITIONABLE:GetPointVec3() @@ -22675,7 +23154,7 @@ self.pointvec3.x=PositionableVec3.x self.pointvec3.y=PositionableVec3.y self.pointvec3.z=PositionableVec3.z else -self.pointvec3=POINT_VEC3:NewFromVec3(PositionableVec3) +self.pointvec3=COORDINATE:NewFromVec3(PositionableVec3) end return self.pointvec3 end @@ -22686,6 +23165,7 @@ function POSITIONABLE:GetCoord() local DCSPositionable=self:GetDCSObject() if DCSPositionable then local PositionableVec3=self:GetVec3() +if PositionableVec3 then if self.coordinate then self.coordinate:UpdateFromVec3(PositionableVec3) else @@ -22693,6 +23173,7 @@ self.coordinate=COORDINATE:NewFromVec3(PositionableVec3) end return self.coordinate end +end BASE:E({"Cannot GetCoordinate",Positionable=self,Alive=self:IsAlive()}) return nil end @@ -22700,11 +23181,13 @@ function POSITIONABLE:GetCoordinate() local DCSPositionable=self:GetDCSObject() if DCSPositionable then local PositionableVec3=self:GetVec3() +if PositionableVec3 then local coord=COORDINATE:NewFromVec3(PositionableVec3) local heading=self:GetHeading() coord.Heading=heading return coord end +end self:E({"Cannot GetCoordinate",Positionable=self,Alive=self:IsAlive()}) return nil end @@ -24029,6 +24512,49 @@ self:SetCommand(CommandSetFrequencyForUnit) end return self end +function CONTROLLABLE:CommandSmokeOnOff(OnOff,Delay) +local switch=(OnOff==nil)and true or OnOff +local command={ +id='SMOKE_ON_OFF', +params={ +value=switch +} +} +if Delay and Delay>0 then +SCHEDULER:New(nil,self.CommandSmokeOnOff,{self,switch},Delay) +else +self:SetCommand(command) +end +return self +end +function CONTROLLABLE:CommandSmokeON(Delay) +local command={ +id='SMOKE_ON_OFF', +params={ +value=true +} +} +if Delay and Delay>0 then +SCHEDULER:New(nil,self.CommandSmokeON,{self},Delay) +else +self:SetCommand(command) +end +return self +end +function CONTROLLABLE:CommandSmokeOFF(Delay) +local command={ +id='SMOKE_ON_OFF', +params={ +value=false +} +} +if Delay and Delay>0 then +SCHEDULER:New(nil,self.CommandSmokeOFF,{self},Delay) +else +self:SetCommand(command) +end +return self +end function CONTROLLABLE:TaskEPLRS(SwitchOnOff,idx) if SwitchOnOff==nil then SwitchOnOff=true @@ -24228,7 +24754,6 @@ groupsForEmbarking=g4e, return Disembarking end function CONTROLLABLE:TaskOrbitCircleAtVec2(Point,Altitude,Speed) -self:F2({self.ControllableName,Point,Altitude,Speed}) local DCSTask={ id='Orbit', params={ @@ -25384,6 +25909,18 @@ return self end return nil end +function CONTROLLABLE:OptionPreferVerticalLanding() +self:F2({self.ControllableName}) +local DCSControllable=self:GetDCSObject() +if DCSControllable then +local Controller=self:_GetController() +if self:IsAir()then +Controller:setOption(AI.Option.Air.id.PREFER_VERTICAL,true) +end +return self +end +return nil +end function CONTROLLABLE:OptionROTEvadeFirePossible() self:F2({self.ControllableName}) local DCSControllable=self:GetDCSObject() @@ -25697,6 +26234,34 @@ return self end return nil end +function CONTROLLABLE:SetOptionLandingStraightIn() +self:F2({self.ControllableName}) +if self:IsAir()then +self:SetOption("36","0") +end +return self +end +function CONTROLLABLE:SetOptionLandingForcePair() +self:F2({self.ControllableName}) +if self:IsAir()then +self:SetOption("36","1") +end +return self +end +function CONTROLLABLE:SetOptionLandingRestrictPair() +self:F2({self.ControllableName}) +if self:IsAir()then +self:SetOption("36","2") +end +return self +end +function CONTROLLABLE:SetOptionLandingOverheadBreak() +self:F2({self.ControllableName}) +if self:IsAir()then +self:SetOption("36","3") +end +return self +end function CONTROLLABLE:SetOptionRadarUsing(Option) self:F2({self.ControllableName}) if self:IsAir()then @@ -25778,6 +26343,9 @@ end function CONTROLLABLE:RelocateGroundRandomInRadius(speed,radius,onroad,shortcut,formation,onland) self:F2({self.ControllableName}) local _coord=self:GetCoordinate() +if not _coord then +return self +end local _radius=radius or 500 local _speed=speed or 20 local _tocoord=_coord:GetRandomCoordinateInRadius(_radius,100) @@ -26720,68 +27288,99 @@ end return self end function CONTROLLABLE:NewIRMarker(EnableImmediately,Runtime) -if self.ClassName=="GROUP"then +self:T2("NewIRMarker") +if self:IsInstanceOf("GROUP")then +if self.IRMarkerGroup==true then return end self.IRMarkerGroup=true self.IRMarkerUnit=false -elseif self.ClassName=="UNIT"then +elseif self:IsInstanceOf("UNIT")then +if self.IRMarkerUnit==true then return end self.IRMarkerGroup=false self.IRMarkerUnit=true end -self.spot=nil -self.timer=nil -self.stoptimer=nil +self.Runtime=Runtime or 60 if EnableImmediately and EnableImmediately==true then self:EnableIRMarker(Runtime) end return self end function CONTROLLABLE:EnableIRMarker(Runtime) +self:T2("EnableIRMarker") if self.IRMarkerGroup==nil then self:NewIRMarker(true,Runtime) return end -if(self.IRMarkerGroup==true)then -self:EnableIRMarkerForGroup() +if self:IsInstanceOf("GROUP")then +self:EnableIRMarkerForGroup(Runtime) return end +if self.timer and self.timer:IsRunning()then return self end +local Runtime=Runtime or self.Runtime self.timer=TIMER:New(CONTROLLABLE._MarkerBlink,self) self.timer:Start(nil,1-math.random(1,5)/10/2,Runtime) +self.IRMarkerUnit=true return self end function CONTROLLABLE:DisableIRMarker() -if(self.IRMarkerGroup==true)then +self:T2("DisableIRMarker") +if self:IsInstanceOf("GROUP")then self:DisableIRMarkerForGroup() return end if self.spot then -self.spot:destroy() self.spot=nil +end if self.timer and self.timer:IsRunning()then self.timer:Stop() self.timer=nil end +if self:IsInstanceOf("GROUP")then +self.IRMarkerGroup=nil +elseif self:IsInstanceOf("UNIT")then +self.IRMarkerUnit=nil end return self end -function CONTROLLABLE:EnableIRMarkerForGroup() -if self.ClassName=="GROUP"then +function CONTROLLABLE:EnableIRMarkerForGroup(Runtime) +self:T2("EnableIRMarkerForGroup") +if self:IsInstanceOf("GROUP") +then local units=self:GetUnits()or{} for _,_unit in pairs(units)do -_unit:EnableIRMarker() +_unit:EnableIRMarker(Runtime) end +self.IRMarkerGroup=true end return self end function CONTROLLABLE:DisableIRMarkerForGroup() -if self.ClassName=="GROUP"then +self:T2("DisableIRMarkerForGroup") +if self:IsInstanceOf("GROUP")then local units=self:GetUnits()or{} for _,_unit in pairs(units)do _unit:DisableIRMarker() end +self.IRMarkerGroup=nil end return self end +function CONTROLLABLE:HasIRMarker() +self:T2("HasIRMarker") +if self:IsInstanceOf("GROUP")then +local units=self:GetUnits()or{} +for _,_unit in pairs(units)do +if _unit.timer and _unit.timer:IsRunning()then return true end +end +elseif self.timer and self.timer:IsRunning()then return true end +return false +end +function CONTROLLABLE._StopSpot(spot) +if spot then +spot:destroy() +end +end function CONTROLLABLE:_MarkerBlink() +self:T2("_MarkerBlink") if self:IsAlive()~=true then self:DisableIRMarker() return @@ -26789,13 +27388,18 @@ end self.timer.dT=1-(math.random(1,2)/10/2) local _,_,unitBBHeight,_=self:GetObjectSize() local unitPos=self:GetPositionVec3() -self.spot=Spot.createInfraRed( +if self.timer:IsRunning()then +self:T2("Create Spot") +local spot=Spot.createInfraRed( self.DCSUnit, {x=0,y=(unitBBHeight+1),z=0}, {x=unitPos.x,y=(unitPos.y+unitBBHeight),z=unitPos.z} ) -local offTimer=TIMER:New(function()if self.spot then self.spot:destroy()end end) +self.spot=spot +local offTimer=nil +local offTimer=TIMER:New(CONTROLLABLE._StopSpot,spot) offTimer:Start(0.5) +end return self end GROUP={ @@ -26834,6 +27438,8 @@ GROUND_TRAIN="Ground_Train", GROUND_EWR="Ground_EWR", GROUND_AAA="Ground_AAA", GROUND_SAM="Ground_SAM", +GROUND_SHORAD="Ground_SHORAD", +GROUND_BALLISTICMISSILE="Ground_BallisticMissile", GROUND_OTHER="Ground_OtherGround", NAVAL_AIRCRAFTCARRIER="Naval_AircraftCarrier", NAVAL_WARSHIP="Naval_WarShip", @@ -27095,7 +27701,11 @@ end return nil end function GROUP:IsPlayer() -return self:GetUnit(1):IsPlayer() +local unit=self:GetUnit(1) +if unit then +return unit:IsPlayer() +end +return false end function GROUP:GetUnit(UnitNumber) local DCSGroup=self:GetDCSObject() @@ -27186,13 +27796,16 @@ function GROUP:GetVelocityVec3() local DCSGroup=self:GetDCSObject() if DCSGroup and DCSGroup:isExist()then local GroupUnits=DCSGroup:getUnits() -local GroupCount=#GroupUnits +local GroupCount=0 local VelocityVec3={x=0,y=0,z=0} for _,DCSUnit in pairs(GroupUnits)do +if DCSUnit:isExist()and DCSUnit:isActive()then local UnitVelocityVec3=DCSUnit:getVelocity() VelocityVec3.x=VelocityVec3.x+UnitVelocityVec3.x VelocityVec3.y=VelocityVec3.y+UnitVelocityVec3.y VelocityVec3.z=VelocityVec3.z+UnitVelocityVec3.z +GroupCount=GroupCount+1 +end end VelocityVec3.x=VelocityVec3.x/GroupCount VelocityVec3.y=VelocityVec3.y/GroupCount @@ -27333,7 +27946,7 @@ if FirstUnit then local FirstUnitPointVec2=FirstUnit:GetPointVec2() return FirstUnitPointVec2 end -BASE:E({"Cannot GetPointVec2",Group=self,Alive=self:IsAlive()}) +BASE:E({"Cannot get COORDINATE",Group=self,Alive=self:IsAlive()}) return nil end function GROUP:GetAverageCoordinate() @@ -27354,13 +27967,20 @@ end end end function GROUP:GetCoordinate() +local vec3=self:GetVec3() +local coord +if vec3 then +coord=COORDINATE:NewFromVec3(vec3) +coord.Heading=self:GetHeading()or 0 +return coord +end local Units=self:GetUnits()or{} for _,_unit in pairs(Units)do local FirstUnit=_unit if FirstUnit and FirstUnit:IsAlive()then local FirstUnitCoordinate=FirstUnit:GetCoordinate() if FirstUnitCoordinate then -local Heading=self:GetHeading() +local Heading=self:GetHeading()or 0 FirstUnitCoordinate.Heading=Heading return FirstUnitCoordinate end @@ -27375,6 +27995,11 @@ local position=_unit:getPosition() local point=position.p~=nil and position.p or _unit:GetPoint() if point then local coord=COORDINATE:NewFromVec3(point) +coord.Heading=0 +local munit=UNIT:Find(_unit) +if munit then +coord.Heading=munit:GetHeading()or 0 +end return coord end end @@ -27626,12 +28251,14 @@ local DCSGroup=self:GetDCSObject() if DCSGroup then local GroupVelocityMax=0 for Index,UnitData in pairs(DCSGroup:getUnits())do +if UnitData:isExist()and UnitData:isActive()then local UnitVelocityVec3=UnitData:getVelocity() local UnitVelocity=math.abs(UnitVelocityVec3.x)+math.abs(UnitVelocityVec3.y)+math.abs(UnitVelocityVec3.z) if UnitVelocity>GroupVelocityMax then GroupVelocityMax=UnitVelocity end end +end return GroupVelocityMax end return nil @@ -27676,7 +28303,10 @@ return nil end function GROUP:GetTemplateRoutePoints() local GroupName=self:GetName() -return UTILS.DeepCopy(_DATABASE:GetGroupTemplate(GroupName).route.points) +local template=_DATABASE:GetGroupTemplate(GroupName) +if template and template.route and template.route.points then +return UTILS.DeepCopy(template.route.points) +end end function GROUP:SetTemplateControlled(Template,Controlled) Template.uncontrolled=not Controlled @@ -27755,12 +28385,23 @@ h=-math.rad(360-course) end return h end +local function TransFormRoute(Template,OldPos,NewPos) +if Template.route and Template.route.points then +for _,_point in ipairs(Template.route.points)do +_point.x=_point.x-OldPos.x+NewPos.x +_point.y=_point.y-OldPos.y+NewPos.y +end +end +return Template +end if self:IsAlive()then +local OldPos=self:GetVec2() local Zone=self.InitRespawnZone local Vec3=Zone and Zone:GetVec3()or self:GetVec3() local From={x=Template.x,y=Template.y} Template.x=Vec3.x Template.y=Vec3.z +local NewPos={x=Vec3.x,y=Vec3.z} if Reset==true then for UnitID,UnitData in pairs(self:GetUnits())do local GroupUnit=UnitData @@ -27771,7 +28412,7 @@ if self.InitRespawnRandomizePositionZone then GroupUnitVec3=Zone:GetRandomVec3() else if self.InitRespawnRandomizePositionInner and self.InitRespawnRandomizePositionOuter then -GroupUnitVec3=POINT_VEC3:NewFromVec2(From):GetRandomPointVec3InRadius(self.InitRespawnRandomizePositionsOuter,self.InitRespawnRandomizePositionsInner) +GroupUnitVec3=COORDINATE:NewFromVec3(From):GetRandomVec3InRadius(self.InitRespawnRandomizePositionsOuter,self.InitRespawnRandomizePositionsInner) else GroupUnitVec3=Zone:GetVec3() end @@ -27792,6 +28433,7 @@ Template.units[UnitID].heading=_Heading(self.InitRespawnHeading and self.InitRes Template.units[UnitID].psi=-Template.units[UnitID].heading end end +Template=TransFormRoute(Template,OldPos,NewPos) elseif Reset==false then for UnitID,TemplateUnitData in pairs(Template.units)do local GroupUnitVec3={x=TemplateUnitData.x,y=TemplateUnitData.alt,z=TemplateUnitData.y} @@ -27800,7 +28442,7 @@ if self.InitRespawnRandomizePositionZone then GroupUnitVec3=Zone:GetRandomVec3() else if self.InitRespawnRandomizePositionInner and self.InitRespawnRandomizePositionOuter then -GroupUnitVec3=POINT_VEC3:NewFromVec2(From):GetRandomPointVec3InRadius(self.InitRespawnRandomizePositionsOuter,self.InitRespawnRandomizePositionsInner) +GroupUnitVec3=COORDINATE:NewFromVec2(From):GetRandomPointVec3InRadius(self.InitRespawnRandomizePositionsOuter,self.InitRespawnRandomizePositionsInner) else GroupUnitVec3=Zone:GetVec3() end @@ -27814,6 +28456,7 @@ Template.units[UnitID].x=(Template.units[UnitID].x-From.x)+GroupUnitVec3.x Template.units[UnitID].y=(Template.units[UnitID].y-From.y)+GroupUnitVec3.z Template.units[UnitID].heading=self.InitRespawnHeading and self.InitRespawnHeading or TemplateUnitData.heading end +Template=TransFormRoute(Template,OldPos,NewPos) else local units=self:GetUnits() for UnitID,Unit in pairs(Template.units)do @@ -27847,10 +28490,17 @@ if self.InitRespawnModu then Template.modulation=self.InitRespawnModu end self:Destroy(false) -_DATABASE:Spawn(Template) +if self.ValidateAndRepositionGroundUnits then +UTILS.ValidateAndRepositionGroundUnits(Template.units) +end +self:ScheduleOnce(0.1,_DATABASE.Spawn,_DATABASE,Template) self:ResetEvents() return self end +function GROUP:Teleport(Coordinate) +self:InitZone(Coordinate) +return self:Respawn(nil,false) +end function GROUP:RespawnAtCurrentAirbase(SpawnTemplate,Takeoff,Uncontrolled) if self and self:IsAlive()then local airbase=self:GetCoordinate():GetClosestAirbase() @@ -28047,6 +28697,8 @@ local infantry=self:HasAttribute("Infantry") local artillery=self:HasAttribute("Artillery") local tank=self:HasAttribute("Old Tanks")or self:HasAttribute("Modern Tanks")or self:HasAttribute("Tanks") local aaa=self:HasAttribute("AAA")and(not self:HasAttribute("SAM elements")) +local ballisticMissile=artillery and self:HasAttribute("SS_missile") +local shorad=self:HasAttribute("SR SAM") local ewr=self:HasAttribute("EWR") local ifv=self:HasAttribute("IFV") local sam=self:HasAttribute("SAM elements")or self:HasAttribute("Optical Tracker") @@ -28077,6 +28729,8 @@ elseif sam then attribute=GROUP.Attribute.GROUND_SAM elseif aaa then attribute=GROUP.Attribute.GROUND_AAA +elseif artillery and ballisticMissile then +attribute=GROUP.Attribute.GROUND_BALLISTICMISSILE elseif artillery then attribute=GROUP.Attribute.GROUND_ARTILLERY elseif tank then @@ -28148,7 +28802,7 @@ return self end function GROUP:ResetEvents() self:EventDispatcher():Reset(self) -for UnitID,UnitData in pairs(self:GetUnits())do +for UnitID,UnitData in pairs(self:GetUnits()or{})do UnitData:ResetEvents() end return self @@ -28241,6 +28895,7 @@ end return nil,nil end function GROUP:GetCustomCallSign(ShortCallsign,Keepnumber,CallsignTranslations,CustomFunction,...) +self:T("GetCustomCallSign") local callsign="Ghost 1" if self:IsAlive()then local IsPlayer=self:IsPlayer() @@ -28251,7 +28906,9 @@ local callnumber=string.match(shortcallsign,"(%d+)$")or"91" local callnumbermajor=string.char(string.byte(callnumber,1)) local callnumberminor=string.char(string.byte(callnumber,2)) local personalized=false -local playername=IsPlayer==true and self:GetPlayerName()or shortcallsign +local playername=shortcallsign +if IsPlayer then playername=self:GetPlayerName()end +self:T2("GetCustomCallSign outcome = "..playername) if CustomFunction and IsPlayer then local arguments=arg or{} local callsign=CustomFunction(groupname,playername,unpack(arguments)) @@ -28334,7 +28991,7 @@ local issam=false local units=self:GetUnits() for _,_unit in pairs(units or{})do local unit=_unit -if unit:HasSEAD()and unit:IsGround()and(not unit:HasAttribute("Mobile AAA"))then +if unit:IsSAM()then issam=true break end @@ -28342,18 +28999,54 @@ end return issam end function GROUP:IsAAA() -local issam=false +local isAAA=false local units=self:GetUnits() for _,_unit in pairs(units or{})do local unit=_unit -local desc=unit:GetDesc()or{} -local attr=desc.attributes or{} -if unit:HasSEAD()then return false end -if attr["AAA"]or attr["SAM related"]then -issam=true +if unit:IsAAA()then +isAAA=true +break end end -return issam +return isAAA +end +function GROUP:SetValidateAndRepositionGroundUnits(Enabled) +self.ValidateAndRepositionGroundUnits=Enabled +end +function GROUP:GetBoundingBox() +local bbox={min={x=math.huge,y=math.huge,z=math.huge}, +max={x=-math.huge,y=-math.huge,z=-math.huge} +} +local Units=self:GetUnits()or{} +if#Units==0 then +return nil +end +for _,unit in pairs(Units)do +if unit and unit:IsAlive()then +local ubox=unit:GetBoundingBox() +if ubox then +if ubox.min.xbbox.max.x then +bbox.max.x=ubox.max.x +end +if ubox.max.y>bbox.max.y then +bbox.max.y=ubox.max.y +end +if ubox.max.z>bbox.max.z then +bbox.max.z=ubox.max.z +end +end +end +end +return bbox end UNIT={ ClassName="UNIT", @@ -28369,6 +29062,7 @@ if unit then local group=unit:getGroup() if group then self.GroupName=group:getName() +self.groupId=group:getID() end self.DCSUnit=unit end @@ -28491,6 +29185,9 @@ i=i+1 end end SpawnGroupTemplate.groupId=nil +if self.ValidateAndRepositionGroundUnits then +UTILS.ValidateAndRepositionGroundUnits(SpawnGroupTemplate.units) +end _DATABASE:Spawn(SpawnGroupTemplate) end function UNIT:IsActive() @@ -28533,12 +29230,18 @@ return nil end function UNIT:IsPlayer() local group=self:GetGroup() -if not group then return false end +if not group then +return false +end local template=group:GetTemplate() if(template==nil)or(template.units==nil)then local DCSObject=self:GetDCSObject() if DCSObject then -if DCSObject:getPlayerName()~=nil then return true else return false end +if DCSObject:getPlayerName()~=nil then +return true +else +return false +end else return false end @@ -28587,7 +29290,7 @@ end function UNIT:GetSpeedMax() local Desc=self:GetDesc() if Desc then -local SpeedMax=Desc.speedMax +local SpeedMax=Desc.speedMax or 0 return SpeedMax*3.6 end return 0 @@ -28733,7 +29436,7 @@ end if ammotable[w].desc.typeName and string.find(ammotable[w].desc.typeName,"_AP",1,true)then nAPshells=nAPshells+Nammo end -if ammotable[w].desc.typeName and string.find(ammotable[w].desc.typeName,"_HE",1,true)then +if ammotable[w].desc.typeName and(string.find(ammotable[w].desc.typeName,"_HE",1,true)or string.find(ammotable[w].desc.typeName,"HESH",1,true))then nHEshells=nHEshells+Nammo end elseif Category==Weapon.Category.ROCKET then @@ -28762,7 +29465,11 @@ return nammo,nshells,nrockets,nbombs,nmissiles,narti,nAPshells,nHEshells end function UNIT:HasAPShells() local _,_,_,_,_,_,shells=self:GetAmmunition() -if shells>0 then return true else return false end +if shells>0 then +return true +else +return false +end end function UNIT:GetAPShells() local _,_,_,_,_,_,shells=self:GetAmmunition() @@ -28774,11 +29481,19 @@ return shells or 0 end function UNIT:HasHEShells() local _,_,_,_,_,_,_,shells=self:GetAmmunition() -if shells>0 then return true else return false end +if shells>0 then +return true +else +return false +end end function UNIT:HasArtiShells() local _,_,_,_,_,shells=self:GetAmmunition() -if shells>0 then return true else return false end +if shells>0 then +return true +else +return false +end end function UNIT:GetArtiShells() local _,_,_,_,_,shells=self:GetAmmunition() @@ -28836,7 +29551,6 @@ local DCSUnit=self:GetDCSObject() local Units={} if DCSUnit then Units[1]=UNIT:Find(DCSUnit) --self:T3(Units) return Units end return nil @@ -28921,20 +29635,30 @@ local ThreatLevels={ [10]="MR SAMs", [11]="LR SAMs" } -if Attributes["LR SAM"]then ThreatLevel=10 -elseif Attributes["MR SAM"]then ThreatLevel=9 +if Attributes["LR SAM"]then +ThreatLevel=10 +elseif Attributes["MR SAM"]then +ThreatLevel=9 elseif Attributes["SR SAM"]and -not Attributes["IR Guided SAM"]then ThreatLevel=8 +not Attributes["IR Guided SAM"]then +ThreatLevel=8 elseif(Attributes["SR SAM"]or Attributes["MANPADS"])and -Attributes["IR Guided SAM"]then ThreatLevel=7 -elseif Attributes["AAA"]then ThreatLevel=6 -elseif Attributes["Modern Tanks"]then ThreatLevel=5 +Attributes["IR Guided SAM"]then +ThreatLevel=7 +elseif Attributes["AAA"]then +ThreatLevel=6 +elseif Attributes["Modern Tanks"]then +ThreatLevel=5 elseif(Attributes["Tanks"]or Attributes["IFV"])and -Attributes["ATGM"]then ThreatLevel=4 +Attributes["ATGM"]then +ThreatLevel=4 elseif(Attributes["Tanks"]or Attributes["IFV"])and -not Attributes["ATGM"]then ThreatLevel=3 -elseif Attributes["Old Tanks"]or Attributes["APC"]or Attributes["Artillery"]then ThreatLevel=2 -elseif Attributes["Infantry"]or Attributes["EWR"]then ThreatLevel=1 +not Attributes["ATGM"]then +ThreatLevel=3 +elseif Attributes["Old Tanks"]or Attributes["APC"]or Attributes["Artillery"]then +ThreatLevel=2 +elseif Attributes["Infantry"]or Attributes["EWR"]then +ThreatLevel=1 end ThreatText=ThreatLevels[ThreatLevel+1] end @@ -28952,18 +29676,30 @@ local ThreatLevels={ [10]="Multirole Fighter", [11]="Fighter" } -if Attributes["Fighters"]then ThreatLevel=10 -elseif Attributes["Multirole fighters"]then ThreatLevel=9 -elseif Attributes["Interceptors"]then ThreatLevel=9 -elseif Attributes["Battleplanes"]then ThreatLevel=8 -elseif Attributes["Battle airplanes"]then ThreatLevel=8 -elseif Attributes["Attack helicopters"]then ThreatLevel=7 -elseif Attributes["Strategic bombers"]then ThreatLevel=6 -elseif Attributes["Bombers"]then ThreatLevel=5 -elseif Attributes["UAVs"]then ThreatLevel=4 -elseif Attributes["Transport helicopters"]then ThreatLevel=3 -elseif Attributes["AWACS"]then ThreatLevel=2 -elseif Attributes["Tankers"]then ThreatLevel=1 +if Attributes["Fighters"]then +ThreatLevel=10 +elseif Attributes["Multirole fighters"]then +ThreatLevel=9 +elseif Attributes["Interceptors"]then +ThreatLevel=9 +elseif Attributes["Battleplanes"]then +ThreatLevel=8 +elseif Attributes["Battle airplanes"]then +ThreatLevel=8 +elseif Attributes["Attack helicopters"]then +ThreatLevel=7 +elseif Attributes["Strategic bombers"]then +ThreatLevel=6 +elseif Attributes["Bombers"]then +ThreatLevel=5 +elseif Attributes["UAVs"]then +ThreatLevel=4 +elseif Attributes["Transport helicopters"]then +ThreatLevel=3 +elseif Attributes["AWACS"]then +ThreatLevel=2 +elseif Attributes["Tankers"]then +ThreatLevel=1 end ThreatText=ThreatLevels[ThreatLevel+1] end @@ -28981,12 +29717,18 @@ local ThreatLevels={ [10]="", [11]="Aircraft Carrier" } -if Attributes["Aircraft Carriers"]then ThreatLevel=10 -elseif Attributes["Destroyers"]then ThreatLevel=8 -elseif Attributes["Cruisers"]then ThreatLevel=6 -elseif Attributes["Frigates"]then ThreatLevel=4 -elseif Attributes["Corvettes"]then ThreatLevel=2 -elseif Attributes["Light armed ships"]then ThreatLevel=1 +if Attributes["Aircraft Carriers"]then +ThreatLevel=10 +elseif Attributes["Destroyers"]then +ThreatLevel=8 +elseif Attributes["Cruisers"]then +ThreatLevel=6 +elseif Attributes["Frigates"]then +ThreatLevel=4 +elseif Attributes["Corvettes"]then +ThreatLevel=2 +elseif Attributes["Light armed ships"]then +ThreatLevel=1 end ThreatText=ThreatLevels[ThreatLevel+1] end @@ -29157,6 +29899,7 @@ local VCL=nil local VCN=nil local FGL=false local template=self:GetTemplate() +if template then if template.AddPropAircraft then if template.AddPropAircraft.STN_L16 then STN=template.AddPropAircraft.STN_L16 @@ -29172,8 +29915,65 @@ end if template.datalinks and template.datalinks.SADL and template.datalinks.SADL.settings then FGL=template.datalinks.SADL.settings.flightLead end +end return STN,VCL,VCN,FGL end +do +function UNIT:SetAIOnOff(AIOnOff) +local DCSUnit=self:GetDCSObject() +if DCSUnit then +local DCSController=DCSUnit:getController() +if DCSController then +DCSController:setOnOff(AIOnOff) +return self +end +end +return nil +end +function UNIT:SetAIOn() +return self:SetAIOnOff(true) +end +function UNIT:SetAIOff() +return self:SetAIOnOff(false) +end +end +function UNIT:IsSAM() +if self:HasSEAD()and self:IsGround()and(not self:HasAttribute("Mobile AAA"))then +return true +end +return false +end +function UNIT:IsEWR() +if self:IsGround()then +local DCSUnit=self:GetDCSObject() +if DCSUnit then +local attrs=DCSUnit:getDesc().attributes +return attrs["EWR"]==true +end +end +return false +end +function UNIT:IsAAA() +local unit=self +local desc=unit:GetDesc()or{} +local attr=desc.attributes or{} +if unit:HasSEAD()then +return false +end +if attr["AAA"]or attr["SAM related"]then +return true +end +return false +end +function UNIT:SetLife(Percent) +net.dostring_in("mission",string.format("a_unit_set_life_percentage(%d, %f)",self:GetID(),Percent)) +end +function UNIT:SetCarrierIlluminationMode(Mode) +UTILS.SetCarrierIlluminationMode(self:GetID(),Mode) +end +function UNIT:SetValidateAndRepositionGroundUnits(Enabled) +self.ValidateAndRepositionGroundUnits=Enabled +end CLIENT={ ClassName="CLIENT", ClientName=nil, @@ -29478,6 +30278,8 @@ local DCSStatic=StaticObject.getByName(self.StaticName) if DCSStatic then local Life0=DCSStatic:getLife()or 1 self.Life0=Life0 +else +self:E(string.format("Static object %s does not exist!",tostring(self.StaticName))) end return self end @@ -29799,7 +30601,6 @@ AIRBASE.Syria={ ["Al_Dumayr"]="Al-Dumayr", ["Al_Qusayr"]="Al Qusayr", ["Aleppo"]="Aleppo", -["Amman"]="Amman", ["An_Nasiriyah"]="An Nasiriyah", ["At_Tanf"]="At Tanf", ["Bassel_Al_Assad"]="Bassel Al-Assad", @@ -29831,6 +30632,7 @@ AIRBASE.Syria={ ["Kuweires"]="Kuweires", ["Lakatamia"]="Lakatamia", ["Larnaca"]="Larnaca", +["Marka"]="Marka", ["Marj_Ruhayyil"]="Marj Ruhayyil", ["Marj_as_Sultan_North"]="Marj as Sultan North", ["Marj_as_Sultan_South"]="Marj as Sultan South", @@ -29861,7 +30663,7 @@ AIRBASE.Syria={ ["Wujah_Al_Hajar"]="Wujah Al Hajar", ["Ben_Gurion"]="Ben Gurion", ["Hatzor"]="Hatzor", -["Palmashim"]="Palmashim", +["Palmachim"]="Palmachim", ["Tel_Nof"]="Tel Nof", } AIRBASE.MarianaIslands={ @@ -29874,6 +30676,20 @@ AIRBASE.MarianaIslands={ ["Saipan_Intl"]="Saipan Intl", ["Tinian_Intl"]="Tinian Intl", } +AIRBASE.MarianaIslandsWWII= +{ +["Agana"]="Agana", +["Airfield_3"]="Airfield 3", +["Charon_Kanoa"]="Charon Kanoa", +["Gurguan_Point"]="Gurguan Point", +["Isley"]="Isley", +["Kagman"]="Kagman", +["Marpi"]="Marpi", +["Orote"]="Orote", +["Pagan"]="Pagan", +["Rota"]="Rota", +["Ushi"]="Ushi", +} AIRBASE.SouthAtlantic={ ["Almirante_Schroeders"]="Almirante Schroeders", ["Comandante_Luis_Piedrabuena"]="Comandante Luis Piedrabuena", @@ -29919,9 +30735,10 @@ AIRBASE.Sinai={ ["Bilbeis_Air_Base"]="Bilbeis Air Base", ["Bir_Hasanah"]="Bir Hasanah", ["Birma_Air_Base"]="Birma Air Base", -["Borj_El_Arab_International_Airport"]="Borj El Arab International Airport", +["Borg_El_Arab_International_Airport"]="Borg El Arab International Airport", ["Cairo_International_Airport"]="Cairo International Airport", ["Cairo_West"]="Cairo West", +["Damascus_Intl"]="Damascus Intl", ["Difarsuwar_Airfield"]="Difarsuwar Airfield", ["El_Arish"]="El Arish", ["El_Gora"]="El Gora", @@ -29937,15 +30754,19 @@ AIRBASE.Sinai={ ["Kibrit_Air_Base"]="Kibrit Air Base", ["Kom_Awshim"]="Kom Awshim", ["Melez"]="Melez", +["Mezzeh_Air_Base"]="Mezzeh Air Base", ["Nevatim"]="Nevatim", ["Ovda"]="Ovda", ["Palmachim"]="Palmachim", ["Quwaysina"]="Quwaysina", +["Rafic_Hariri_Intl"]="Rafic Hariri Intl", +["Ramat_David"]="Ramat David", ["Ramon_Airbase"]="Ramon Airbase", ["Ramon_International_Airport"]="Ramon International Airport", ["Sde_Dov"]="Sde Dov", ["Sharm_El_Sheikh_International_Airport"]="Sharm El Sheikh International Airport", ["St_Catherine"]="St Catherine", +["Tabuk"]="Tabuk", ["Tel_Nof"]="Tel Nof", ["Wadi_Abu_Rish"]="Wadi Abu Rish", ["Wadi_al_Jandali"]="Wadi al Jandali", @@ -29970,24 +30791,271 @@ AIRBASE.Kola={ ["Vidsel"]="Vidsel", ["Vuojarvi"]="Vuojarvi", ["Andoya"]="Andoya", -["Alakourtti"]="Alakourtti", +["Alakurtti"]="Alakurtti", +["Kittila"]="Kittila", +["Bardufoss"]="Bardufoss", +["Alta"]="Alta", +["Sodankyla"]="Sodankyla", +["Enontekio"]="Enontekio", +["Evenes"]="Evenes", +["Hosio"]="Hosio", +["Kilpyavr"]="Kilpyavr", +["Afrikanda"]="Afrikanda", +["Kalevala"]="Kalevala", +["Koshka_Yavr"]="Koshka Yavr", +["Poduzhemye"]="Poduzhemye", +["Luostari_Pechenga"]="Luostari Pechenga", } AIRBASE.Afghanistan={ +["Bagram"]="Bagram", +["Bamyan"]="Bamyan", ["Bost"]="Bost", ["Camp_Bastion"]="Camp Bastion", ["Camp_Bastion_Heliport"]="Camp Bastion Heliport", ["Chaghcharan"]="Chaghcharan", ["Dwyer"]="Dwyer", ["Farah"]="Farah", +["Gardez"]="Gardez", +["Ghazni_Heliport"]="Ghazni Heliport", ["Herat"]="Herat", +["Jalalabad"]="Jalalabad", +["Kabul"]="Kabul", ["Kandahar"]="Kandahar", ["Kandahar_Heliport"]="Kandahar Heliport", +["Khost"]="Khost", +["Khost_Heliport"]="Khost Heliport", ["Maymana_Zahiraddin_Faryabi"]="Maymana Zahiraddin Faryabi", ["Nimroz"]="Nimroz", ["Qala_i_Naw"]="Qala i Naw", +["Sharana"]="Sharana", ["Shindand"]="Shindand", ["Shindand_Heliport"]="Shindand Heliport", ["Tarinkot"]="Tarinkot", +["Urgoon_Heliport"]="Urgoon Heliport", +} +AIRBASE.Iraq={ +["Al_Asad_Airbase"]="Al-Asad Airbase", +["Al_Kut_Airport"]="Al-Kut Airport", +["Al_Sahra_Airport"]="Al-Sahra Airport", +["Al_Salam_Airbase"]="Al-Salam Airbase", +["Al_Taji_Airport"]="Al-Taji Airport", +["Al_Taquddum_Airport"]="Al-Taquddum Airport", +["Baghdad_International_Airport"]="Baghdad International Airport", +["Balad_Airbase"]="Balad Airbase", +["Bashur_Airport"]="Bashur Airport", +["Erbil_International_Airport"]="Erbil International Airport", +["H2_Airbase"]="H-2 Airbase", +["H3_Main_Airbase"]="H-3 Main Airbase", +["H3_Northwest_Airbase"]="H-3 Northwest Airbase", +["H3_Southwest_Airbase"]="H-3 Southwest Airbase", +["K1_Base"]="K1 Base", +["Kirkuk_International_Airport"]="Kirkuk International Airport", +["Mosul_International_Airport"]="Mosul International Airport", +["Qayyarah_Airfield_West"]="Qayyarah Airfield West", +["Sulaimaniyah_International_Airport"]="Sulaimaniyah International Airport", +} +AIRBASE.GermanyCW={ +["Airracing_Frankfurt"]="Airracing Frankfurt", +["Airracing_Koblenz"]="Airracing Koblenz", +["Airracing_Luebeck"]="Airracing Lubeck", +["Allstedt"]="Allstedt", +["Altes_Lager"]="Altes Lager", +["Bad_Duerkheim"]="Bad Durkheim", +["Barth"]="Barth", +["Bienenfarm"]="Bienenfarm", +["Bindersleben"]="Bindersleben", +["Bitburg"]="Bitburg", +["Braunschweig"]="Braunschweig", +["Bremen"]="Bremen", +["Briest"]="Briest", +["Buechel"]="Buchel", +["Bueckeburg"]="Buckeburg", +["Celle"]="Celle", +["Cochstedt"]="Cochstedt", +["Damgarten"]="Damgarten", +["Dedelow"]="Dedelow", +["Dessau"]="Dessau", +["Fassberg"]="Fassberg", +["Finow"]="Finow", +["Frankfurt"]="Frankfurt", +["Fritzlar"]="Fritzlar", +["Fulda"]="Fulda", +["Gardelegen"]="Gardelegen", +["Garz"]="Garz", +["Gatow"]="Gatow", +["Gelnhausen"]="Gelnhausen", +["Giebelstadt"]="Giebelstadt", +["Glindbruchkippe"]="Glindbruchkippe ", +["Gross_Mohrdorf"]="Gross Mohrdorf", +["Grosse_Wiese"]="Grosse Wiese", +["Guetersloh"]="Gutersloh", +["H_FRG_01"]="H FRG 01", +["H_FRG_02"]="H FRG 02", +["H_FRG_03"]="H FRG 03", +["H_FRG_04"]="H FRG 04", +["H_FRG_05"]="H FRG 05", +["H_FRG_06"]="H FRG 06", +["H_FRG_07"]="H FRG 07", +["H_FRG_08"]="H FRG 08", +["H_FRG_09"]="H FRG 09", +["H_FRG_10"]="H FRG 10", +["H_FRG_11"]="H FRG 11", +["H_FRG_12"]="H FRG 12", +["H_FRG_13"]="H FRG 13", +["H_FRG_14"]="H FRG 14", +["H_FRG_15"]="H FRG 15", +["H_FRG_16"]="H FRG 16", +["H_FRG_17"]="H FRG 17", +["H_FRG_18"]="H FRG 18", +["H_FRG_19"]="H FRG 19", +["H_FRG_20"]="H FRG 20", +["H_FRG_21"]="H FRG 21", +["H_FRG_23"]="H FRG 23", +["H_FRG_25"]="H FRG 25", +["H_FRG_27"]="H FRG 27", +["H_FRG_30"]="H FRG 30", +["H_FRG_31"]="H FRG 31", +["H_FRG_32"]="H FRG 32", +["H_FRG_34"]="H FRG 34", +["H_FRG_38"]="H FRG 38", +["H_FRG_39"]="H FRG 39", +["H_FRG_40"]="H FRG 40", +["H_FRG_41"]="H FRG 41", +["H_FRG_42"]="H FRG 42", +["H_FRG_43"]="H FRG 43", +["H_FRG_44"]="H FRG 44", +["H_FRG_45"]="H FRG 45", +["H_FRG_46"]="H FRG 46", +["H_FRG_47"]="H FRG 47", +["H_FRG_48"]="H FRG 48", +["H_FRG_49"]="H FRG 49", +["H_FRG_50"]="H FRG 50", +["H_FRG_51"]="H FRG 51", +["H_GDR_01"]="H GDR 01", +["H_GDR_02"]="H GDR 02", +["H_GDR_03"]="H GDR 03", +["H_GDR_04"]="H GDR 04", +["H_GDR_05"]="H GDR 05", +["H_GDR_06"]="H GDR 06", +["H_GDR_07"]="H GDR 07", +["H_GDR_08"]="H GDR 08", +["H_GDR_09"]="H GDR 09", +["H_GDR_10"]="H GDR 10", +["H_GDR_11"]="H GDR 11", +["H_GDR_12"]="H GDR 12", +["H_GDR_13"]="H GDR 13", +["H_GDR_14"]="H GDR 14", +["H_GDR_15"]="H GDR 15", +["H_GDR_16"]="H GDR 16", +["H_GDR_17"]="H GDR 17", +["H_GDR_18"]="H GDR 18", +["H_GDR_19"]="H GDR 19", +["H_GDR_21"]="H GDR 21", +["H_GDR_22"]="H GDR 22", +["H_GDR_24"]="H GDR 24", +["H_GDR_25"]="H GDR 25", +["H_GDR_26"]="H GDR 26", +["H_GDR_30"]="H GDR 30", +["H_GDR_31"]="H GDR 31", +["H_GDR_32"]="H GDR 32", +["H_GDR_33"]="H GDR 33", +["H_GDR_34"]="H GDR 34", +["H_Med_FRG_01"]="H Med FRG 01", +["H_Med_FRG_02"]="H Med FRG 02", +["H_Med_FRG_04"]="H Med FRG 04", +["H_Med_FRG_06"]="H Med FRG 06", +["H_Med_FRG_11"]="H Med FRG 11", +["H_Med_FRG_12"]="H Med FRG 12", +["H_Med_FRG_13"]="H Med FRG 13", +["H_Med_FRG_14"]="H Med FRG 14", +["H_Med_FRG_15"]="H Med FRG 15", +["H_Med_FRG_16"]="H Med FRG 16", +["H_Med_FRG_17"]="H Med FRG 17", +["H_Med_FRG_21"]="H Med FRG 21", +["H_Med_FRG_24"]="H Med FRG 24", +["H_Med_FRG_26"]="H Med FRG 26", +["H_Med_FRG_27"]="H Med FRG 27", +["H_Med_FRG_29"]="H Med FRG 29", +["H_Med_GDR_01"]="H Med GDR 01", +["H_Med_GDR_02"]="H Med GDR 02", +["H_Med_GDR_03"]="H Med GDR 03", +["H_Med_GDR_08"]="H Med GDR 08", +["H_Med_GDR_09"]="H Med GDR 09", +["H_Med_GDR_10"]="H Med GDR 10", +["H_Med_GDR_11"]="H Med GDR 11", +["H_Med_GDR_12"]="H Med GDR 12", +["H_Med_GDR_13"]="H Med GDR 13", +["H_Med_GDR_14"]="H Med GDR 14", +["H_Med_GDR_16"]="H Med GDR 16", +["H_Radar_FRG_02"]="H Radar FRG 02", +["H_Radar_GDR_01"]="H Radar GDR 01", +["H_Radar_GDR_02"]="H Radar GDR 02", +["H_Radar_GDR_03"]="H Radar GDR 03", +["H_Radar_GDR_04"]="H Radar GDR 04", +["H_Radar_GDR_05"]="H Radar GDR 05", +["H_Radar_GDR_06"]="H Radar GDR 06", +["H_Radar_GDR_07"]="H Radar GDR 07", +["H_Radar_GDR_08"]="H Radar GDR 08", +["H_Radar_GDR_09"]="H Radar GDR 09", +["Hahn"]="Hahn", +["Haina"]="Haina", +["Hamburg"]="Hamburg", +["Hamburg_Finkenwerder"]="Hamburg Finkenwerder", +["Hannover"]="Hannover", +["Hasselfelde"]="Hasselfelde", +["Herrenteich"]="Herrenteich", +["Hildesheim"]="Hildesheim", +["Hockenheim"]="Hockenheim", +["Holzdorf"]="Holzdorf", +["Kammermark"]="Kammermark", +["Koethen"]="Kothen", +["Laage"]="Laage", +["Langenselbold"]="Langenselbold", +["Laerz"]="Larz", +["Leipzig_Halle"]="Leipzig Halle", +["Leipzig_Mockau"]="Leipzig Mockau", +["Luebeck"]="Lubeck", +["Lueneburg"]="Luneburg", +["Mahlwinkel"]="Mahlwinkel", +["Mendig"]="Mendig", +["Merseburg"]="Merseburg", +["Neubrandenburg"]="Neubrandenburg", +["Neuruppin"]="Neuruppin", +["Northeim"]="Northeim", +["Ober_Moerlen"]="Ober-Morlen", +["Obermehler_Schlotheim"]="Obermehler Schlotheim", +["Parchim"]="Parchim", +["Peenemuende"]="Peenemunde", +["Pferdsfeld"]="Pferdsfeld", +["Pinnow"]="Pinnow", +["Pottschutthoehe"]="Pottschutthohe", +["Ramstein"]="Ramstein", +["Rinteln"]="Rinteln", +["Schoenefeld"]="Schonefeld", +["Schweinfurt"]="Schweinfurt", +["Sembach"]="Sembach", +["Spangdahlem"]="Spangdahlem", +["Sperenberg"]="Sperenberg", +["Stendal"]="Stendal", +["Tegel"]="Tegel", +["Tempelhof"]="Tempelhof", +["Templin"]="Templin", +["Tutow"]="Tutow", +["Uelzen"]="Uelzen", +["Uetersen"]="Uetersen", +["Ummern"]="Ummern", +["Verden_Scharnhorst"]="Verden-Scharnhorst", +["Walldorf"]="Walldorf", +["Waren_Vielist"]="Waren Vielist", +["Werneuchen"]="Werneuchen", +["Weser_Wuemme"]="Weser Wumme", +["Wiesbaden"]="Wiesbaden", +["Wismar"]="Wismar", +["Wittstock"]="Wittstock", +["Worms"]="Worms", +["Wunstorf"]="Wunstorf", +["Zerbst"]="Zerbst", +["Zweibruecken"]="Zweibrucken", } AIRBASE.TerminalType={ Runway=16, @@ -29999,6 +31067,7 @@ OpenBig=104, OpenMedOrBig=176, HelicopterUsable=216, FighterAircraft=244, +FighterAircraftSmall=344, } AIRBASE.SpotStatus={ FREE="Free", @@ -30013,8 +31082,9 @@ self.descriptors=self:GetDesc() self.category=self.descriptors and self.descriptors.category or Airbase.Category.AIRDROME if self.category==Airbase.Category.AIRDROME then self.isAirdrome=true -elseif self.category==Airbase.Category.HELIPAD then +elseif self.category==Airbase.Category.HELIPAD or self.descriptors.typeName=="FARP_SINGLE_01"then self.isHelipad=true +self.category=Airbase.Category.HELIPAD elseif self.category==Airbase.Category.SHIP then self.isShip=true if self.descriptors.typeName=="Oil rig"or self.descriptors.typeName=="Ga"then @@ -30027,10 +31097,16 @@ else self:E("ERROR: Unknown airbase category!") end self:_InitRunways() -if self.isAirdrome then +local Nrunways=#self.runways +if Nrunways>0 then self:SetActiveRunway() end self:_InitParkingSpots() +if self.category==Airbase.Category.AIRDROME and(Nrunways==0 or self.NparkingTotal==self.NparkingTerminal[AIRBASE.TerminalType.HelicopterOnly])then +self.category=Airbase.Category.HELIPAD +self.isAirdrome=true +self.isHelipad=true +end local vec2=self:GetVec2() self:GetCoordinate() self.storage=_DATABASE:AddStorage(AirbaseName) @@ -30049,6 +31125,35 @@ end self:T2(string.format("Registered airbase %s",tostring(self.AirbaseName))) return self end +function AIRBASE:_GetCategory() +local name=self.AirbaseName +local static=StaticObject.getByName(name) +local airbase=Airbase.getByName(name) +local unit=Unit.getByName(name) +local text=string.format("\n=====================================================") +text=text..string.format("\nAirbase %s:",name) +if static then +local oc,uc=static:getCategory() +local ex=static:getCategoryEx() +text=text..string.format("\nSTATIC: oc=%d, uc=%d, ex=%d",oc,uc,ex) +text=text..string.format("\n--------------------------------------------------") +end +if unit then +local oc,uc=unit:getCategory() +local ex=unit:getCategoryEx() +text=text..string.format("\nUNIT: oc=%d, uc=%d, ex=%d",oc,uc,ex) +text=text..string.format("\n--------------------------------------------------") +end +if airbase then +local oc,uc=airbase:getCategory() +local ex=airbase:getCategoryEx() +text=text..string.format("\nAIRBASE: oc=%d, uc=%d, ex=%d",oc,uc,ex) +text=text..string.format("\n--------------------------------------------------") +text=text..UTILS.PrintTableToLog(airbase:getDesc(),nil,true) +end +text=text..string.format("\n=====================================================") +env.info(text) +end function AIRBASE:Find(DCSAirbase) local AirbaseName=DCSAirbase:getName() local AirbaseFound=_DATABASE:FindAirbase(AirbaseName) @@ -30302,13 +31407,14 @@ park.ClientSpot,park.ClientName=isClient(park.Coordinate) park.AirbaseName=self.AirbaseName self.NparkingTotal=self.NparkingTotal+1 for _,terminalType in pairs(AIRBASE.TerminalType)do -if self._CheckTerminalType(terminalType,park.TerminalType)then +if self._CheckTerminalType(park.TerminalType,terminalType)then self.NparkingTerminal[terminalType]=self.NparkingTerminal[terminalType]+1 end end self.parkingByID[park.TerminalID]=park table.insert(self.parking,park) end +self.NparkingTotal=self.NparkingTotal-self.NparkingTerminal[AIRBASE.TerminalType.Runway] return self end function AIRBASE:_GetParkingSpotByID(TerminalID) @@ -30553,6 +31659,10 @@ if Term_Type==AIRBASE.TerminalType.OpenMed or Term_Type==AIRBASE.TerminalType.Op match=true end elseif termtype==AIRBASE.TerminalType.FighterAircraft then +if Term_Type==AIRBASE.TerminalType.OpenMed or Term_Type==AIRBASE.TerminalType.OpenBig or Term_Type==AIRBASE.TerminalType.Shelter then +match=true +end +elseif termtype==AIRBASE.TerminalType.FighterAircraftSmall then if Term_Type==AIRBASE.TerminalType.OpenMed or Term_Type==AIRBASE.TerminalType.OpenBig or Term_Type==AIRBASE.TerminalType.Shelter or Term_Type==AIRBASE.TerminalType.SmallSizeFighter then match=true end @@ -30570,6 +31680,7 @@ if Name then for _,_runway in pairs(self.runways)do local runway=_runway local name=self:GetRunwayName(runway) +self:T("Check Runway Name: "..name) if name==Name:upper()then return runway end @@ -30583,11 +31694,8 @@ if IncludeInverse==nil then IncludeInverse=true end local Runways={} -if self:GetAirbaseCategory()~=Airbase.Category.AIRDROME then -self.runways={} -return{} -end local function _createRunway(name,course,width,length,center) +self:T("Create Runway: name = "..name) local bearing=-1*course local heading=math.deg(bearing) local runway={} @@ -30598,6 +31706,7 @@ else runway.name=string.format("%02d",tonumber(name)) end runway.magheading=tonumber(runway.name)*10 +runway.idx=runway.magheading runway.heading=heading runway.width=width or 0 runway.length=length or 0 @@ -30635,7 +31744,7 @@ local airbase=self:GetDCSObject() if airbase then local runways=airbase:getRunways() self:T2(runways) -if runways then +if runways and#runways>0 then for _,rwy in pairs(runways)do self:T(rwy) local runway=_createRunway(rwy.Name,rwy.course,rwy.width,rwy.length,rwy.position) @@ -30650,6 +31759,9 @@ local runway=_createRunway(name2,rwy.course-math.pi,rwy.width,rwy.length,rwy.pos table.insert(Runways,runway) end end +else +self.runways={} +return{} end end local rpairs={} @@ -30777,14 +31889,47 @@ local idx=string.format("%02d",UTILS.Round((hdg-magvar)/10,0)) local runway={} runway.heading=hdg runway.idx=idx +runway.magheading=idx runway.length=c1:Get2DDistance(c2) runway.position=c1 runway.endpoint=c2 +self:T(string.format("Airbase %s: Adding runway id=%s, heading=%03d, length=%d m i=%d j=%d",self:GetName(),runway.idx,runway.heading,runway.length,i,j)) if mark then runway.position:MarkToAll(string.format("Runway %s: true heading=%03d (magvar=%d), length=%d m, i=%d, j=%d",runway.idx,runway.heading,magvar,runway.length,i,j)) end table.insert(runways,runway) end +local rpairs={} +for i,_ri in pairs(runways)do +local ri=_ri +for j,_rj in pairs(runways)do +local rj=_rj +if i0 +end +for i,j in pairs(rpairs)do +local ri=runways[i] +local rj=runways[j] +local c0=ri.position +local a=UTILS.VecTranslate(c0,1000,ri.heading) +local b=UTILS.VecSubstract(rj.position,ri.position) +b=UTILS.VecAdd(ri.position,b) +local left=isLeft(c0,a,b) +if left then +ri.isLeft=false +rj.isLeft=true +else +ri.isLeft=true +rj.isLeft=false +end +end return runways end function AIRBASE:SetActiveRunway(Name,PreferLeft) @@ -30921,8 +32066,8 @@ function SCENERY:Register(SceneryName,SceneryObject) local self=BASE:Inherit(self,POSITIONABLE:New(SceneryName)) self.SceneryName=tostring(SceneryName) self.SceneryObject=SceneryObject -if self.SceneryObject then -self.Life0=self.SceneryObject:getLife() +if self.SceneryObject and self.SceneryObject.getLife then +self.Life0=self.SceneryObject:getLife()or 0 else self.Life0=0 end @@ -30932,6 +32077,9 @@ end function SCENERY:GetProperty(PropertyName) return self.Properties[PropertyName] end +function SCENERY:HasProperty(PropertyName) +return self.Properties[PropertyName]~=nil and true or false +end function SCENERY:GetAllProperties() return self.Properties end @@ -30947,7 +32095,7 @@ return self.SceneryObject end function SCENERY:GetLife() local life=0 -if self.SceneryObject then +if self.SceneryObject and self.SceneryObject.getLife then life=self.SceneryObject:getLife() if life>self.Life0 then self.Life0=math.floor(life*1.2) @@ -30975,6 +32123,7 @@ end function SCENERY:GetRelativeLife() local life=self:GetLife() local life0=self:GetLife0() +if life==0 or life0==0 then return 0 end local rlife=math.floor((life/life0)*100) return rlife end @@ -31417,7 +32566,8 @@ local object=self.weapon:getTarget() if object then local category=Object.getCategory(object) local name=object:getName() -self:T(self.lid..string.format("Got Target Object %s, category=%d",object:getName(),category)) +if name then +self:T(self.lid..string.format("Got Target Object %s, category=%d",name,category)) if category==Object.Category.UNIT then target=UNIT:FindByName(name) elseif category==Object.Category.STATIC then @@ -31429,6 +32579,7 @@ self:E(self.lid..string.format("ERROR: Object category=%d is not implemented yet end end end +end return target end function WEAPON:GetTargetDistance(ConversionFunction) @@ -31733,9 +32884,8 @@ local ucid=self:GetPlayerUCID(nil,name)or"none" local PlayerID=self:GetPlayerIDByName(name)or"none" local PlayerSide,PlayerSlot=self:GetSlot(data.IniUnit) if not PlayerSide then PlayerSide=EventData.IniCoalition end -if not PlayerSlot then PlayerSlot=EventData.IniUnit:GetID()end +if not PlayerSlot then PlayerSlot=EventData.IniUnit:GetID()or-1 end local TNow=timer.getTime() -self:T(self.lid.."Event for: "..name.." | UCID: "..ucid.." | ID/SIDE/SLOT "..PlayerID.."/"..PlayerSide.."/"..PlayerSlot) if data.id==EVENTS.PlayerEnterUnit or data.id==EVENTS.PlayerEnterAircraft then self:T(self.lid.."Pilot Joining: "..name.." | UCID: "..ucid.." | Event ID: "..data.id) local blocked=self:IsAnyBlocked(ucid,name,PlayerID,PlayerSide,PlayerSlot) @@ -32119,14 +33269,14 @@ WEAPONS="weapons", LIQUIDS="liquids", AIRCRAFT="aircrafts", } -STORAGE.version="0.0.3" +STORAGE.version="0.1.5" function STORAGE:New(AirbaseName) local self=BASE:Inherit(self,BASE:New()) self.airbase=Airbase.getByName(AirbaseName) -if Airbase.getWarehouse then +if Airbase.getWarehouse and self.airbase then self.warehouse=self.airbase:getWarehouse() end -self.lid=string.format("STORAGE %s",AirbaseName) +self.lid=string.format("STORAGE %s | ",AirbaseName) return self end function STORAGE:NewFromStaticCargo(StaticCargoName) @@ -32135,16 +33285,16 @@ self.airbase=StaticObject.getByName(StaticCargoName) if Airbase.getWarehouse then self.warehouse=Warehouse.getCargoAsWarehouse(self.airbase) end -self.lid=string.format("STORAGE %s",StaticCargoName) +self.lid=string.format("STORAGE %s | ",StaticCargoName) return self end function STORAGE:NewFromDynamicCargo(DynamicCargoName) local self=BASE:Inherit(self,BASE:New()) -self.airbase=Unit.getByName(DynamicCargoName) +self.airbase=Unit.getByName(DynamicCargoName)or StaticObject.getByName(DynamicCargoName) if Airbase.getWarehouse then self.warehouse=Warehouse.getCargoAsWarehouse(self.airbase) end -self.lid=string.format("STORAGE %s",DynamicCargoName) +self.lid=string.format("STORAGE %s | ",DynamicCargoName) return self end function STORAGE:FindByName(AirbaseName) @@ -32153,6 +33303,10 @@ return storage end function STORAGE:SetVerbosity(VerbosityLevel) self.verbose=VerbosityLevel or 0 +if self.verbose>1 then +BASE:TraceOn() +BASE:TraceClass("STORAGE") +end return self end function STORAGE:AddItem(Name,Amount) @@ -32251,7 +33405,7 @@ unlimited=unlimited or n>2^29 or n==N if not unlimited then self:AddAmount(Type,1) end -self:I(self.lid..string.format("Type=%s: unlimited=%s (N=%d n=%d)",tostring(Type),tostring(unlimited),N,n)) +self:T(self.lid..string.format("Type=%s: unlimited=%s (N=%d n=%d)",tostring(Type),tostring(unlimited),N,n)) end return unlimited end @@ -32287,6 +33441,186 @@ function STORAGE:GetInventory(Item) local inventory=self.warehouse:getInventory(Item) return inventory.aircraft,inventory.liquids,inventory.weapon end +function STORAGE:SaveToFile(Path,Filename) +if not io then +BASE:E("ERROR: io not desanitized. Can't save the files.") +return false +end +if Path==nil and not lfs then +BASE:E("WARNING: lfs not desanitized. File will be saved in DCS installation root directory rather than your given path.") +end +local ac,lq,wp=self:GetInventory() +local DataAircraft="" +local DataLiquids="" +local DataWeapons="" +if#lq>0 then +DataLiquids=DataLiquids.."Liquids in Storage:\n" +for key,amount in pairs(lq)do +DataLiquids=DataLiquids..tostring(key).."="..tostring(amount).."\n" +end +UTILS.SaveToFile(Path,Filename.."_Liquids.csv",DataLiquids) +if self.verbose and self.verbose>0 then +self:I(self.lid.."Saving Liquids to "..tostring(Path).."\\"..tostring(Filename).."_Liquids.csv") +end +end +if UTILS.TableLength(ac)>0 then +DataAircraft=DataAircraft.."Aircraft in Storage:\n" +for key,amount in pairs(ac)do +DataAircraft=DataAircraft..tostring(key).."="..tostring(amount).."\n" +end +UTILS.SaveToFile(Path,Filename.."_Aircraft.csv",DataAircraft) +if self.verbose and self.verbose>0 then +self:I(self.lid.."Saving Aircraft to "..tostring(Path).."\\"..tostring(Filename).."_Aircraft.csv") +end +end +if UTILS.TableLength(wp)>0 then +DataWeapons=DataWeapons.."Weapons and Materiel in Storage:\n" +for _,_category in pairs(ENUMS.Storage.weapons)do +for _,_key in pairs(_category)do +local amount=self:GetAmount(_key) +if type(_key)=="table"then +_key="{"..table.concat(_key,",").."}" +end +DataWeapons=DataWeapons..tostring(_key).."="..tostring(amount).."\n" +end +end +for key,amount in pairs(ENUMS.Storage.weapons.Gazelle)do +amount=self:GetItemAmount(ENUMS.Storage.weapons.Gazelle[key]) +DataWeapons=DataWeapons.."ENUMS.Storage.weapons.Gazelle."..tostring(key).."="..tostring(amount).."\n" +end +for key,amount in pairs(ENUMS.Storage.weapons.CH47)do +amount=self:GetItemAmount(ENUMS.Storage.weapons.CH47[key]) +DataWeapons=DataWeapons.."ENUMS.Storage.weapons.CH47."..tostring(key).."="..tostring(amount).."\n" +end +for key,amount in pairs(ENUMS.Storage.weapons.UH1H)do +amount=self:GetItemAmount(ENUMS.Storage.weapons.UH1H[key]) +DataWeapons=DataWeapons.."ENUMS.Storage.weapons.UH1H."..tostring(key).."="..tostring(amount).."\n" +end +for key,amount in pairs(ENUMS.Storage.weapons.OH58)do +amount=self:GetItemAmount(ENUMS.Storage.weapons.OH58[key]) +DataWeapons=DataWeapons.."ENUMS.Storage.weapons.OH58."..tostring(key).."="..tostring(amount).."\n" +end +for key,amount in pairs(ENUMS.Storage.weapons.AH64D)do +amount=self:GetItemAmount(ENUMS.Storage.weapons.AH64D[key]) +DataWeapons=DataWeapons.."ENUMS.Storage.weapons.AH64D."..tostring(key).."="..tostring(amount).."\n" +end +UTILS.SaveToFile(Path,Filename.."_Weapons.csv",DataWeapons) +if self.verbose and self.verbose>0 then +self:I(self.lid.."Saving Weapons to "..tostring(Path).."\\"..tostring(Filename).."_Weapons.csv") +end +end +return self +end +function STORAGE:LoadFromFile(Path,Filename) +if not io then +BASE:E("ERROR: io not desanitized. Can't read the files.") +return false +end +if Path==nil and not lfs then +BASE:E("WARNING: lfs not desanitized. File will be read from DCS installation root directory rather than your give path.") +end +if self:IsLimitedLiquids()then +local Ok,Liquids=UTILS.LoadFromFile(Path,Filename.."_Liquids.csv") +if Ok then +if self.verbose and self.verbose>0 then +self:I(self.lid.."Loading Liquids from "..tostring(Path).."\\"..tostring(Filename).."_Liquids.csv") +end +for _id,_line in pairs(Liquids)do +if string.find(_line,"Storage")==nil then +local tbl=UTILS.Split(_line,"=") +local lqno=tonumber(tbl[1]) +local lqam=tonumber(tbl[2]) +self:SetLiquid(lqno,lqam) +end +end +else +self:E("File for Liquids could not be found: "..tostring(Path).."\\"..tostring(Filename).."_Liquids.csv") +end +end +if self:IsLimitedAircraft()then +local Ok,Aircraft=UTILS.LoadFromFile(Path,Filename.."_Aircraft.csv") +if Ok then +if self.verbose and self.verbose>0 then +self:I(self.lid.."Loading Aircraft from "..tostring(Path).."\\"..tostring(Filename).."_Aircraft.csv") +end +for _id,_line in pairs(Aircraft)do +if string.find(_line,"Storage")==nil then +local tbl=UTILS.Split(_line,"=") +local acname=tbl[1] +local acnumber=tonumber(tbl[2]) +self:SetAmount(acname,acnumber) +end +end +else +self:E("File for Aircraft could not be found: "..tostring(Path).."\\"..tostring(Filename).."_Aircraft.csv") +end +end +if self:IsLimitedWeapons()then +local Ok,Weapons=UTILS.LoadFromFile(Path,Filename.."_Weapons.csv") +if Ok then +if self.verbose and self.verbose>0 then +self:I(self.lid.."Loading Weapons from "..tostring(Path).."\\"..tostring(Filename).."_Weapons.csv") +end +for _id,_line in pairs(Weapons)do +if string.find(_line,"Storage")==nil then +local tbl=UTILS.Split(_line,"=") +local wpname=tbl[1] +local wpnumber=tonumber(tbl[2]) +if string.find(wpname,"{")==1 then +wpname=string.gsub(wpname,"{","") +wpname=string.gsub(wpname,"}","") +local tbl=UTILS.Split(wpname,",") +local wptbl={} +for _id,_key in ipairs(tbl)do +table.insert(wptbl,_id,_key) +end +self:SetAmount(wptbl,wpnumber) +else +self:SetAmount(wpname,wpnumber) +end +end +end +else +self:E("File for Weapons could not be found: "..tostring(Path).."\\"..tostring(Filename).."_Weapons.csv") +end +end +return self +end +function STORAGE:StartAutoSave(Path,Filename,Interval,LoadOnce) +if LoadOnce~=false then +self:LoadFromFile(Path,Filename) +end +local interval=Interval or 300 +self.SaverTimer=TIMER:New(STORAGE.SaveToFile,self,Path,Filename) +self.SaverTimer:Start(interval,interval) +return self +end +function STORAGE:StopAutoSave() +if self.SaverTimer and self.SaverTimer:IsRunning()then +self.SaverTimer:Stop() +self.SaverTimer=nil +end +return self +end +function STORAGE:FindSyriaHHelipadWarehouse(ZoneName) +local findzone=ZONE:New(ZoneName) +local base=world.getAirbases() +for i=1,#base do +local info={} +info.callsign=Airbase.getCallsign(base[i]) +info.id=Airbase.getID(base[i]) +info.point=Airbase.getPoint(base[i]) +info.coordinate=COORDINATE:NewFromVec3(info.point) +info.DCSObject=base[i] +if info.callsign=="H"and findzone:IsCoordinateInZone(info.coordinate)then +info.warehouse=info.DCSObject:getWarehouse() +info.Storage=STORAGE:New(info.callsign..info.id) +info.Storage.airbase=info.DCSObject +info.Storage.warehouse=info.warehouse +return info.Storage +end +end +end DYNAMICCARGO={ ClassName="DYNAMICCARGO", verbose=0, @@ -32327,7 +33661,7 @@ DYNAMICCARGO.AircraftDimensions={ ["ropelength"]=30, }, } -DYNAMICCARGO.version="0.0.5" +DYNAMICCARGO.version="0.0.7" function DYNAMICCARGO:Register(CargoName) local self=BASE:Inherit(self,POSITIONABLE:New(CargoName)) self.StaticName=CargoName @@ -32353,7 +33687,7 @@ end return self end function DYNAMICCARGO:GetDCSObject() -local DCSStatic=Unit.getByName(self.StaticName) +local DCSStatic=StaticObject.getByName(self.StaticName)or Unit.getByName(self.StaticName) if DCSStatic then return DCSStatic end @@ -32377,14 +33711,14 @@ return false end end function DYNAMICCARGO:IsUnloaded() -if self.CargoState and self.CargoState==DYNAMICCARGO.State.REMOVED then +if self.CargoState and self.CargoState==DYNAMICCARGO.State.UNLOADED then return true else return false end end function DYNAMICCARGO:IsRemoved() -if self.CargoState and self.CargoState==DYNAMICCARGO.State.UNLOADED then +if self.CargoState and self.CargoState==DYNAMICCARGO.State.REMOVED then return true else return false @@ -32449,6 +33783,27 @@ else return self.StaticName end end +function DYNAMICCARGO:_HeloHovering(Unit,ropelength) +local DCSUnit=Unit:GetDCSObject() +local hovering=false +local Height=0 +if DCSUnit then +local UnitInAir=DCSUnit:inAir() +local UnitCategory=DCSUnit:getDesc().category +if UnitInAir==true and UnitCategory==1 then +local VelocityVec3=DCSUnit:getVelocity() +local Velocity=UTILS.VecNorm(VelocityVec3) +local Coordinate=DCSUnit:getPoint() +local LandHeight=land.getHeight({x=Coordinate.x,y=Coordinate.z}) +Height=Coordinate.y-LandHeight +if Velocity<1 and Height<=ropelength and Height>6 then +hovering=true +end +end +return hovering,Height +end +return false +end function DYNAMICCARGO:_GetPossibleHeloNearby(pos,loading) local set=_DYNAMICCARGO_HELOS:GetAliveSet() local success=false @@ -32459,28 +33814,33 @@ local helo=_helo local name=helo:GetPlayerName()or _DATABASE:_FindPlayerNameByUnitName(helo:GetName())or"None" self:T(self.lid.." Checking: "..name) local hpos=helo:GetCoordinate() -local inair=helo:InAir() -self:T(self.lid.." InAir: AGL/InAir: "..hpos.y-hpos:GetLandHeight().."/"..tostring(inair)) local typename=helo:GetTypeName() -if hpos and typename and inair==false then local dimensions=DYNAMICCARGO.AircraftDimensions[typename] -if dimensions then +local hovering,height=self:_HeloHovering(helo,dimensions.ropelength) +local helolanded=not helo:InAir() +self:T(self.lid.." InAir: AGL/Hovering: "..hpos.y-hpos:GetLandHeight().."/"..tostring(hovering)) +if hpos and typename and dimensions then local delta2D=hpos:Get2DDistance(pos) local delta3D=hpos:Get3DDistance(pos) if self.testing then self:T(string.format("Cargo relative position: 2D %dm | 3D %dm",delta2D,delta3D)) self:T(string.format("Helo dimension: length %dm | width %dm | rope %dm",dimensions.length,dimensions.width,dimensions.ropelength)) +self:T(string.format("Helo hovering: %s at %dm",tostring(hovering),height)) end -if loading~=true and delta2D>dimensions.length or delta2D>dimensions.width or delta3D>dimensions.ropelength then +if loading~=true and(delta2D>dimensions.length or delta2D>dimensions.width)and helolanded then success=true Helo=helo Playername=name end -if loading==true and delta2Ddimensions.ropelength then success=true Helo=helo Playername=name end +if loading==true and((delta2D0.5 then -if self.CargoState==DYNAMICCARGO.State.NEW then +if self.CargoState==DYNAMICCARGO.State.NEW or self.CargoState==DYNAMICCARGO.State.UNLOADED then local isloaded,client,playername=self:_GetPossibleHeloNearby(pos,true) self:T(self.lid.." moved! NEW -> LOADED by "..tostring(playername)) self.CargoState=DYNAMICCARGO.State.LOADED self.Owner=playername _DATABASE:CreateEventDynamicCargoLoaded(self) +end elseif self.CargoState==DYNAMICCARGO.State.LOADED then local count=_DYNAMICCARGO_HELOS:CountAlive() local landheight=pos:GetLandHeight() @@ -32510,26 +33871,18 @@ self:T(self.lid.." AGL: "..agl or-1) local isunloaded=true local client local playername=self.Owner -if count>0 and(agl>0 or self.testing)then +if count>0 then self:T(self.lid.." Possible alive helos: "..count or-1) -if agl~=0 or self.testing then isunloaded,client,playername=self:_GetPossibleHeloNearby(pos,false) -end if isunloaded then self:T(self.lid.." moved! LOADED -> UNLOADED by "..tostring(playername)) self.CargoState=DYNAMICCARGO.State.UNLOADED self.Owner=playername _DATABASE:CreateEventDynamicCargoUnloaded(self) end -elseif count>0 and agl==0 then -self:T(self.lid.." moved! LOADED -> UNLOADED by "..tostring(playername)) -self.CargoState=DYNAMICCARGO.State.UNLOADED -self.Owner=playername -_DATABASE:CreateEventDynamicCargoUnloaded(self) end end self.LastPosition=pos -end else if self.timer and self.timer:IsRunning()then self.timer:Stop()end self:T(self.lid.." dead! "..self.CargoState.."-> REMOVED") @@ -34260,6 +35613,7 @@ local TargetType=nil local TargetUnitCoalition=nil local TargetUnitCategory=nil local TargetUnitType=nil +local TargetIsScenery=false if Event.IniDCSUnit then InitUnit=Event.IniDCSUnit InitUNIT=Event.IniUnit @@ -34285,6 +35639,10 @@ TargetPlayerName=Event.TgtPlayerName TargetCoalition=Event.TgtCoalition TargetCategory=Event.TgtCategory TargetType=Event.TgtTypeName +if(not TargetCategory)and TargetUNIT~=nil and TargetUnit:IsInstanceOf("SCENERY")then +TargetCategory=Unit.Category.STRUCTURE +TargetIsScenery=true +end TargetUnitCoalition=_SCORINGCoalition[TargetCoalition] TargetUnitCategory=_SCORINGCategory[TargetCategory] TargetUnitType=TargetType @@ -34354,17 +35712,22 @@ MESSAGE:NewType(self.DisplayMessagePrefix.."Player '"..InitPlayerName.."' hit en MESSAGE.Type.Update) :ToAllIf(self:IfMessagesHit()and self:IfMessagesToAll()) :ToCoalitionIf(InitCoalition,self:IfMessagesHit()and self:IfMessagesToCoalition()) -else +elseif TargetIsScenery~=true then MESSAGE:NewType(self.DisplayMessagePrefix.."Player '"..InitPlayerName.."' hit enemy target "..TargetUnitCategory.." ( "..TargetType.." ) "..PlayerHit.ScoreHit.." times. ".. "Score: "..PlayerHit.Score..". Score Total:"..Player.Score-Player.Penalty, MESSAGE.Type.Update) :ToAllIf(self:IfMessagesHit()and self:IfMessagesToAll()) :ToCoalitionIf(InitCoalition,self:IfMessagesHit()and self:IfMessagesToCoalition()) +elseif TargetIsScenery==true then +MESSAGE:NewType(self.DisplayMessagePrefix.."Player '"..InitPlayerName.."' hit scenery object.".." Score: "..PlayerHit.Score..". Score Total:"..Player.Score-Player.Penalty, +MESSAGE.Type.Update) +:ToAllIf(self:IfMessagesHit()and self:IfMessagesToAll()) +:ToCoalitionIf(InitCoalition,self:IfMessagesHit()and self:IfMessagesToCoalition()) end self:ScoreCSV(InitPlayerName,TargetPlayerName,"HIT_SCORE",1,1,InitUnitName,InitUnitCoalition,InitUnitCategory,InitUnitType,TargetUnitName,TargetUnitCoalition,TargetUnitCategory,TargetUnitType) end else -MESSAGE:NewType(self.DisplayMessagePrefix.."Player '"..InitPlayerName.."' hit scenery object.", +MESSAGE:NewType(self.DisplayMessagePrefix.."Player '"..InitPlayerName.."' hit nothing special.", MESSAGE.Type.Update) :ToAllIf(self:IfMessagesHit()and self:IfMessagesToAll()) :ToCoalitionIf(InitCoalition,self:IfMessagesHit()and self:IfMessagesToCoalition()) @@ -35125,14 +36488,14 @@ self:T({"CleanUp: Add to CleanUpList: ",CleanUpGroup:GetName(),CleanUpUnitName}) end function CLEANUP_AIRBASE.__:EventAddForCleanUp(Event) self:F({Event}) -if Event.IniDCSUnit and Event.IniCategory==Object.Category.UNIT then +if Event.IniDCSUnit and Event.IniUnit and Event.IniCategory==Object.Category.UNIT then if self.CleanUpList[Event.IniDCSUnitName]==nil then if self:IsInAirbase(Event.IniUnit:GetVec2())then self:AddForCleanUp(Event.IniUnit,Event.IniDCSUnitName) end end end -if Event.TgtDCSUnit and Event.TgtCategory==Object.Category.UNIT then +if Event.TgtDCSUnit and Event.TgtUnit and Event.TgtCategory==Object.Category.UNIT then if self.CleanUpList[Event.TgtDCSUnitName]==nil then if self:IsInAirbase(Event.TgtUnit:GetVec2())then self:AddForCleanUp(Event.TgtUnit,Event.TgtDCSUnitName) @@ -35146,7 +36509,7 @@ for CleanUpUnitName,CleanUpListData in pairs(self.CleanUpList)do CleanUpCount=CleanUpCount+1 local CleanUpUnit=CleanUpListData.CleanUpUnit local CleanUpGroupName=CleanUpListData.CleanUpGroupName -if CleanUpUnit:IsAlive()~=nil then +if CleanUpUnit and CleanUpUnit:IsAlive()~=nil then if self:IsInAirbase(CleanUpUnit:GetVec2())then if _DATABASE:GetStatusGroup(CleanUpGroupName)~="ReSpawn"then local CleanUpCoordinate=CleanUpUnit:GetCoordinate() @@ -35166,7 +36529,7 @@ self:DestroyUnit(CleanUpUnit) end end end -if CleanUpUnit and not CleanUpUnit:GetPlayerName()then +if CleanUpUnit and(CleanUpUnit.GetPlayerName==nil or not CleanUpUnit:GetPlayerName())then local CleanUpUnitVelocity=CleanUpUnit:GetVelocityKMH() if CleanUpUnitVelocity<1 then if CleanUpListData.CleanUpMoved then @@ -35297,6 +36660,7 @@ SEAD.Harms={ ["AGM_122"]="AGM_122", ["AGM_84"]="AGM_84", ["AGM_45"]="AGM_45", +["AGM_65"]="AGM_65", ["ALARM"]="ALARM", ["LD-10"]="LD-10", ["X_58"]="X_58", @@ -35312,6 +36676,7 @@ SEAD.Harms={ SEAD.HarmData={ ["AGM_88"]={150,3}, ["AGM_45"]={12,2}, +["AGM_65"]={16,0.9}, ["AGM_122"]={16.5,2.3}, ["AGM_84"]={280,0.8}, ["ALARM"]={45,2}, @@ -35347,7 +36712,7 @@ self:HandleEvent(EVENTS.Shot,self.HandleEventShot) self:SetStartState("Running") self:AddTransition("*","ManageEvasion","*") self:AddTransition("*","CalculateHitZone","*") -self:I("*** SEAD - Started Version 0.4.8") +self:I("*** SEAD - Started Version 0.4.9") return self end function SEAD:UpdateSet(SEADGroupPrefixes) @@ -35585,7 +36950,7 @@ local _target=EventData.Weapon:getTarget() if not _target or self.debug then self:E("***** SEAD - No target data for "..(SEADWeaponName or"None")) if string.find(SEADWeaponName,"AGM_88",1,true)or string.find(SEADWeaponName,"AGM_154",1,true)then -self:I("**** Tracking AGM-88/154 with no target data.") +self:T("**** Tracking AGM-88/154 with no target data.") local pos0=SEADPlane:GetCoordinate() local fheight=SEADPlane:GetHeight() self:__CalculateHitZone(20,SEADWeapon,pos0,fheight,SEADGroup,SEADWeaponName) @@ -36266,7 +37631,6 @@ end function ESCORT:_ReportTargetsScheduler() self:F(self.EscortGroup:GetName()) if self.EscortGroup:IsAlive()and self.EscortClient:IsAlive()then -if true then local EscortGroupName=self.EscortGroup:GetName() self.EscortMenuAttackNearbyTargets:RemoveSubMenus() if self.EscortMenuTargetAssistance then @@ -36317,8 +37681,6 @@ else self.EscortGroup:MessageToClient("No targets detected.",10,self.EscortClient) end return true -else -end end return false end @@ -36935,7 +38297,7 @@ return true end ATC_GROUND_UNIVERSAL={ ClassName="ATC_GROUND_UNIVERSAL", -Version="0.0.1", +Version="0.0.2", SetClient=nil, Airbases=nil, AirbaseList=nil, @@ -36945,14 +38307,21 @@ function ATC_GROUND_UNIVERSAL:New(AirbaseList) local self=BASE:Inherit(self,BASE:New()) self:T({self.ClassName}) self.Airbases={} -for _name,_ in pairs(_DATABASE.AIRBASES)do -self.Airbases[_name]={} -end self.AirbaseList=AirbaseList if not self.AirbaseList then self.AirbaseList={} -for _name,_ in pairs(_DATABASE.AIRBASES)do +for _name,_base in pairs(_DATABASE.AIRBASES)do +if _base and _base.isAirdrome==true then self.AirbaseList[_name]=_name +self.Airbases[_name]={} +end +end +else +for _,_name in pairs(AirbaseList)do +local airbase=_DATABASE:FindAirbase(_name) +if airbase and(airbase.isAirdrome==true)then +self.Airbases[_name]={} +end end end self.SetClient=SET_CLIENT:New():FilterCategories("plane"):FilterStart() @@ -41495,11 +42864,16 @@ local status=ratcraft.status local active=ratcraft.active local Nunits=ratcraft.nunits local N0units=group:GetInitialSize() -local Pnow=coords -local Dtravel=Pnow:Get2DDistance(ratcraft.Pnow) -ratcraft.Pnow=Pnow +local Dtravel=0 +if coords and ratcraft.Pnow then +local Dtravel=coords:Get2DDistance(ratcraft.Pnow) +ratcraft.Pnow=coords +end ratcraft.Distance=ratcraft.Distance+Dtravel -local Ddestination=Pnow:Get2DDistance(ratcraft.destination:GetCoordinate()) +local Ddestination=-1 +if ratcraft.Pnow then +Ddestination=ratcraft.Pnow:Get2DDistance(ratcraft.destination:GetCoordinate()) +end if(forID and spawnindex==forID)or(not forID)then local text=string.format("ID %i of flight %s",spawnindex,prefix) if N0units>1 then @@ -42885,6 +44259,8 @@ targetsheet=nil, targetpath=nil, targetprefix=nil, Coalition=nil, +ceilingaltitude=20000, +ceilingenabled=false, } RANGE.Defaults={ goodhitrange=25, @@ -42954,7 +44330,7 @@ IRExitRange={filename="IR-ExitRange.ogg",duration=3.10}, RANGE.Names={} RANGE.MenuF10={} RANGE.MenuF10Root=nil -RANGE.version="2.8.0" +RANGE.version="2.8.1" function RANGE:New(RangeName,Coalition) local self=BASE:Inherit(self,FSM:New()) self.rangename=RangeName or"Practice Range" @@ -43137,6 +44513,26 @@ end self.rangezone=zone return self end +function RANGE:SetRangeCeiling(altitude) +self:T(self.lid.."SetRangeCeiling") +if altitude and type(altitude)=="number"then +self.ceilingaltitude=altitude +else +self:E(self.lid.."Altitude either not provided or is not a number, using default setting (20000).") +self.ceilingaltitude=20000 +end +return self +end +function RANGE:EnableRangeCeiling(enabled) +self:T(self.lid.."EnableRangeCeiling") +if enabled and type(enabled)=="boolean"then +self.ceilingenabled=enabled +else +self:E(self.lid.."Enabled either not provide or is not a boolean, using default setting (false).") +self.ceilingenabled=false +end +return self +end function RANGE:SetBombTargetSmokeColor(colorid) self.BombSmokeColor=colorid or SMOKECOLOR.Red return self @@ -43581,7 +44977,7 @@ local _unitID=_unit:GetID() local target=EventData.TgtUnit local targetname=EventData.TgtUnitName local _currentTarget=self.strafeStatus[_unitID] -if _currentTarget and target:IsAlive()then +if _currentTarget and target and target:IsAlive()then local playerPos=_unit:GetCoordinate() local targetPos=target:GetCoordinate() for _,_target in pairs(_currentTarget.zone.targets)do @@ -43632,10 +45028,10 @@ local _unit=playerData.unit local impactcoord=weapon:GetImpactCoordinate() local insidezone=self.rangezone:IsCoordinateInZone(impactcoord) if playerData and playerData.smokebombimpact and insidezone then -if playerData and playerData.delaysmoke then -timer.scheduleFunction(self._DelayedSmoke,{coord=impactcoord,color=playerData.smokecolor},timer.getTime()+self.TdelaySmoke) +if playerData.delaysmoke then +impactcoord:Smoke(playerData.smokecolor,30,self.TdelaySmoke) else -impactcoord:Smoke(playerData.smokecolor) +impactcoord:Smoke(playerData.smokecolor,30) end end for _,_bombtarget in pairs(self.bombingTargets)do @@ -43686,7 +45082,12 @@ result.rangename=self.rangename result.attackHdg=attackHdg result.attackVel=attackVel result.attackAlt=attackAlt -result.date=os and os.date()or"n/a" +if os and os.date then +result.date=os.date() +else +self:E(self.lid.."os or os.date() not available") +result.date="n/a" +end table.insert(_results,result) self:Impact(result,playerData) elseif insidezone then @@ -43984,9 +45385,6 @@ end data=data..string.format("%s,%s,%d,%d,%s,%s,%s,%s",_playername,target,roundsFired,roundsHit,strafeResult,airframe,time,date) _savefile(filename,data) end -function RANGE._DelayedSmoke(_args) -_args.coord:Smoke(_args.color) -end function RANGE:_DisplayMyStrafePitResults(_unitName) self:F(_unitName) local _unit,_playername,_multiplayer=self:_GetPlayerUnitAndName(_unitName) @@ -44211,7 +45609,7 @@ local ca2g=coord:ToStringA2G(_unit,_settings) _text=_text..string.format("\n- %s:\n%s @ %s",bombtarget.name or"unknown",ca2g,eltxt) end end -self:_DisplayMessageToGroup(_unit,_text,120,true,true,_multiplayer) +self:_DisplayMessageToGroup(_unit,_text,150,true,true,_multiplayer) end end function RANGE:_DisplayStrafePits(_unitname) @@ -44279,7 +45677,9 @@ local playersettings=_playersettings local unitname=playersettings.unitname local unit=UNIT:FindByName(unitname) if unit and unit:IsAlive()then -if unit:IsInZone(self.rangezone)then +local unitalt=unit:GetAltitude(false) +local unitaltinfeet=UTILS.MetersToFeet(unitalt) +if unit:IsInZone(self.rangezone)and(not self.ceilingenabled or unitaltinfeet1 then +if self.SpeedMax>3.6 then self.ismobile=true else self.ismobile=false @@ -45857,7 +47334,7 @@ else self.Nsmoke=0 self.Nsmoke0=0 end -local _dbproperties=self:_CheckDB(self.DisplayName) +local _dbproperties=self:_CheckDB(self.Type) self:T({dbproperties=_dbproperties}) if _dbproperties~=nil then for property,value in pairs(_dbproperties)do @@ -45889,8 +47366,8 @@ text=text..string.format("Artillery attribute = %s\n",tostring(self.IsArtillery) text=text..string.format("Type = %s\n",self.Type) text=text..string.format("Display Name = %s\n",self.DisplayName) text=text..string.format("Number of units = %d\n",self.IniGroupStrength) -text=text..string.format("Speed max = %d km/h\n",self.SpeedMax) -text=text..string.format("Speed default = %d km/h\n",self.Speed) +text=text..string.format("Speed max = %.1f km/h\n",self.SpeedMax) +text=text..string.format("Speed default = %.1f km/h\n",self.Speed) text=text..string.format("Is mobile = %s\n",tostring(self.ismobile)) text=text..string.format("Is cargo = %s\n",tostring(self.iscargo)) text=text..string.format("Min range = %.1f km\n",self.minrange/1000) @@ -46526,7 +48003,7 @@ local Nammo,Nshells,Nrockets,Nmissiles,Narty=self:GetAmmo() local nfire=Narty local _type="shots" if target.weapontype==ARTY.WeaponType.Auto then -nfire=Narty +nfire=Nammo _type="shots" elseif target.weapontype==ARTY.WeaponType.Cannon then nfire=Narty @@ -49487,7 +50964,7 @@ return _nstock end end function WAREHOUSE:GetCoordinate() -return self.warehouse:GetCoordinate() +return self.warehouse:GetCoord() end function WAREHOUSE:GetVec3() local vec3=self.warehouse:GetVec3() @@ -50073,6 +51550,9 @@ self:I(self.lid..text) self:T({DCSdesc=asset.DCSdesc}) self:T3({Template=asset.template}) end +function WAREHOUSE:SetValidateAndRepositionGroundUnits(Enabled) +self.ValidateAndRepositionGroundUnits=Enabled +end function WAREHOUSE:onafterNewAsset(From,Event,To,asset,assignment) self:T(self.lid..string.format("New asset %s id=%d with assignment %s.",tostring(asset.templatename),asset.uid,tostring(assignment))) end @@ -50888,6 +52368,9 @@ template.route.points[1].y=coord.z template.x=coord.x template.y=coord.z template.alt=coord.y +if self.ValidateAndRepositionGroundUnits then +UTILS.ValidateAndRepositionGroundUnits(template.units) +end local group=_DATABASE:Spawn(template) return group end @@ -50927,7 +52410,7 @@ local AirbaseID=self.airbase:GetID() local AirbaseCategory=self:GetAirbaseCategory() if AirbaseCategory==Airbase.Category.HELIPAD or AirbaseCategory==Airbase.Category.SHIP then else -if#parking<#template.units and not airstart then +if parking and#parking<#template.units and not airstart then local text=string.format("ERROR: Not enough parking! Free parking = %d < %d aircraft to be spawned.",#parking,#template.units) self:_DebugMessage(text) return nil @@ -50954,7 +52437,7 @@ else coord=parking[i].Coordinate terminal=parking[i].TerminalID end -if self.Debug then +if self.Debug and terminal then local text=string.format("Spawnplace unit %s terminal %d.",unit.name,terminal) coord:MarkToAll(text) env.info(text) @@ -51330,7 +52813,7 @@ local CountryNeutral=nil if gotunits then for _,_unit in pairs(units)do local unit=_unit -local distance=coord:Get2DDistance(unit:GetCoordinate()) +local distance=coord:Get2DDistance(unit:GetCoord()) if unit:IsGround()and unit:IsAlive()and distance<=radius then local _coalition=unit:GetCoalition() local _country=unit:GetCountry() @@ -51994,9 +53477,11 @@ break else if self.Debug then local coord=problem.coord +if coord then local text=string.format("Obstacle %s [type=%s] blocking spot=%d! Size=%.1f m and distance=%.1f m.",problem.name,problem.type,_termid,problem.size,problem.dist) self:I(self.lid..text) -coord:MarkToAll(string.format(text)) +coord:MarkToAll(text) +end else self:T(self.lid..string.format("Parking spot %d is occupied or not big enough!",_termid)) end @@ -52274,7 +53759,6 @@ end end end function WAREHOUSE:_DeleteQueueItem(qitem,queue) -self:F({qitem=qitem,queue=queue}) for i=1,#queue do local _item=queue[i] if _item.uid==qitem.uid then @@ -53074,7 +54558,7 @@ weapon.tracking=false end function FOX:onafterMissileLaunch(From,Event,To,missile) local text=string.format("FOX: Tracking missile %s(%s) - target %s - shooter %s",missile.missileType,missile.missileName,tostring(missile.targetName),missile.shooterName) -self:I(FOX.lid..text) +self:T(FOX.lid..text) MESSAGE:New(text,10):ToAllIf(self.Debug) for _,_player in pairs(self.players)do local player=_player @@ -53473,6 +54957,7 @@ end MANTIS={ ClassName="MANTIS", name="mymantis", +version="0.9.34", SAM_Templates_Prefix="", SAM_Group=nil, EWR_Templates_Prefix="", @@ -53484,6 +54969,7 @@ SAM_Table={}, SAM_Table_Long={}, SAM_Table_Medium={}, SAM_Table_Short={}, +SAM_Table_PointDef={}, lid="", Detection=nil, AWACS_Detection=nil, @@ -53517,6 +55003,11 @@ automode=true, autoshorad=true, ShoradGroupSet=nil, checkforfriendlies=false, +SmokeDecoy=false, +SmokeDecoyColor=SMOKECOLOR.White, +checkcounter=1, +DLinkCacheTime=120, +logsamstatus=false, } MANTIS.AdvancedState={ GREEN=0, @@ -53527,11 +55018,17 @@ MANTIS.SamType={ SHORT="Short", MEDIUM="Medium", LONG="Long", +POINT="Point", } +MANTIS.radiusscale={} +MANTIS.radiusscale[MANTIS.SamType.LONG]=1.1 +MANTIS.radiusscale[MANTIS.SamType.MEDIUM]=1.2 +MANTIS.radiusscale[MANTIS.SamType.SHORT]=1.75 +MANTIS.radiusscale[MANTIS.SamType.POINT]=3 MANTIS.SamData={ ["Hawk"]={Range=35,Blindspot=0,Height=12,Type="Medium",Radar="Hawk"}, ["NASAMS"]={Range=14,Blindspot=0,Height=7,Type="Short",Radar="NSAMS"}, -["Patriot"]={Range=99,Blindspot=0,Height=25,Type="Long",Radar="Patriot"}, +["Patriot"]={Range=99,Blindspot=0,Height=25,Type="Long",Radar="Patriot str"}, ["Rapier"]={Range=10,Blindspot=0,Height=3,Type="Short",Radar="rapier"}, ["SA-2"]={Range=40,Blindspot=7,Height=25,Type="Medium",Radar="S_75M_Volhov"}, ["SA-3"]={Range=18,Blindspot=6,Height=18,Type="Short",Radar="5p73 s-125 ln"}, @@ -53539,68 +55036,103 @@ MANTIS.SamData={ ["SA-6"]={Range=25,Blindspot=0,Height=8,Type="Medium",Radar="1S91"}, ["SA-10"]={Range=119,Blindspot=0,Height=18,Type="Long",Radar="S-300PS 4"}, ["SA-11"]={Range=35,Blindspot=0,Height=20,Type="Medium",Radar="SA-11"}, -["Roland"]={Range=5,Blindspot=0,Height=5,Type="Short",Radar="Roland"}, +["Roland"]={Range=6,Blindspot=0,Height=5,Type="Short",Radar="Roland"}, +["Gepard"]={Range=5,Blindspot=0,Height=4,Type="Point",Radar="Gepard"}, ["HQ-7"]={Range=12,Blindspot=0,Height=3,Type="Short",Radar="HQ-7"}, -["SA-9"]={Range=4,Blindspot=0,Height=3,Type="Short",Radar="Strela"}, +["SA-9"]={Range=4,Blindspot=0,Height=3,Type="Point",Radar="Strela",Point="true"}, ["SA-8"]={Range=10,Blindspot=0,Height=5,Type="Short",Radar="Osa 9A33"}, ["SA-19"]={Range=8,Blindspot=0,Height=3,Type="Short",Radar="Tunguska"}, -["SA-15"]={Range=11,Blindspot=0,Height=6,Type="Short",Radar="Tor 9A331"}, -["SA-13"]={Range=5,Blindspot=0,Height=3,Type="Short",Radar="Strela"}, +["SA-15"]={Range=11,Blindspot=0,Height=6,Type="Point",Radar="Tor 9A331",Point="true"}, +["SA-13"]={Range=5,Blindspot=0,Height=3,Type="Point",Radar="Strela",Point="true"}, ["Avenger"]={Range=4,Blindspot=0,Height=3,Type="Short",Radar="Avenger"}, ["Chaparral"]={Range=8,Blindspot=0,Height=3,Type="Short",Radar="Chaparral"}, -["Linebacker"]={Range=4,Blindspot=0,Height=3,Type="Short",Radar="Linebacker"}, +["Linebacker"]={Range=4,Blindspot=0,Height=3,Type="Point",Radar="Linebacker",Point="true"}, ["Silkworm"]={Range=90,Blindspot=1,Height=0.2,Type="Long",Radar="Silkworm"}, +["C-RAM"]={Range=2,Blindspot=0,Height=2,Type="Point",Radar="HEMTT_C-RAM_Phalanx",Point="true"}, ["SA-10B"]={Range=75,Blindspot=0,Height=18,Type="Medium",Radar="SA-10B"}, -["SA-17"]={Range=50,Blindspot=3,Height=30,Type="Medium",Radar="SA-17"}, +["SA-17"]={Range=50,Blindspot=3,Height=50,Type="Medium",Radar="SA-17"}, ["SA-20A"]={Range=150,Blindspot=5,Height=27,Type="Long",Radar="S-300PMU1"}, ["SA-20B"]={Range=200,Blindspot=4,Height=27,Type="Long",Radar="S-300PMU2"}, ["HQ-2"]={Range=50,Blindspot=6,Height=35,Type="Medium",Radar="HQ_2_Guideline_LN"}, -["SHORAD"]={Range=3,Blindspot=0,Height=3,Type="Short",Radar="Igla"}, ["TAMIR IDFA"]={Range=20,Blindspot=0.6,Height=12.3,Type="Short",Radar="IRON_DOME_LN"}, ["STUNNER IDFA"]={Range=250,Blindspot=1,Height=45,Type="Long",Radar="DAVID_SLING_LN"}, +["NIKE"]={Range=155,Blindspot=6,Height=30,Type="Long",Radar="HIPAR"}, +["Dog Ear"]={Range=11,Blindspot=0,Height=9,Type="Point",Radar="Dog Ear",Point="true"}, +["Pantsir S1"]={Range=20,Blindspot=1.2,Height=15,Type="Point",Radar="PantsirS1",Point="true"}, +["Tor M2"]={Range=12,Blindspot=1,Height=10,Type="Point",Radar="TorM2",Point="true"}, +["IRIS-T SLM"]={Range=40,Blindspot=0.5,Height=20,Type="Medium",Radar="CH_IRIST_SLM"}, } MANTIS.SamDataHDS={ ["SA-2 HDS"]={Range=56,Blindspot=7,Height=30,Type="Medium",Radar="V759"}, ["SA-3 HDS"]={Range=20,Blindspot=6,Height=30,Type="Short",Radar="V-601P"}, -["SA-10C HDS 2"]={Range=90,Blindspot=5,Height=25,Type="Long",Radar="5P85DE ln"}, -["SA-10C HDS 1"]={Range=90,Blindspot=5,Height=25,Type="Long",Radar="5P85CE ln"}, -["SA-12 HDS 2"]={Range=100,Blindspot=10,Height=25,Type="Long",Radar="S-300V 9A82 l"}, -["SA-12 HDS 1"]={Range=75,Blindspot=1,Height=25,Type="Long",Radar="S-300V 9A83 l"}, +["SA-10B HDS"]={Range=90,Blindspot=5,Height=25,Type="Long",Radar="5P85CE ln"}, +["SA-10C HDS"]={Range=75,Blindspot=5,Height=25,Type="Long",Radar="5P85SE ln"}, +["SA-17 HDS"]={Range=50,Blindspot=3,Height=50,Type="Medium",Radar="SA-17 "}, +["SA-12 HDS 2"]={Range=100,Blindspot=13,Height=30,Type="Long",Radar="S-300V 9A82 l"}, +["SA-12 HDS 1"]={Range=75,Blindspot=6,Height=25,Type="Long",Radar="S-300V 9A83 l"}, ["SA-23 HDS 2"]={Range=200,Blindspot=5,Height=37,Type="Long",Radar="S-300VM 9A82ME"}, ["SA-23 HDS 1"]={Range=100,Blindspot=1,Height=50,Type="Long",Radar="S-300VM 9A83ME"}, ["HQ-2 HDS"]={Range=50,Blindspot=6,Height=35,Type="Medium",Radar="HQ_2_Guideline_LN"}, +["SAMPT Block 1 HDS"]={Range=120,Blindspot=1,Height=20,Type="long",Radar="SAMPT_MLT_Blk1"}, +["SAMPT Block 1INT HDS"]={Range=150,Blindspot=1,Height=25,Type="long",Radar="SAMPT_MLT_Blk1NT"}, +["SAMPT Block 2 HDS"]={Range=200,Blindspot=10,Height=70,Type="long",Radar="SAMPT_MLT_Blk2"}, } MANTIS.SamDataSMA={ -["RBS98M SMA"]={Range=20,Blindspot=0,Height=8,Type="Short",Radar="RBS-98"}, -["RBS70 SMA"]={Range=8,Blindspot=0,Height=5.5,Type="Short",Radar="RBS-70"}, -["RBS70M SMA"]={Range=8,Blindspot=0,Height=5.5,Type="Short",Radar="BV410_RBS70"}, -["RBS90 SMA"]={Range=8,Blindspot=0,Height=5.5,Type="Short",Radar="RBS-90"}, -["RBS90M SMA"]={Range=8,Blindspot=0,Height=5.5,Type="Short",Radar="BV410_RBS90"}, -["RBS103A SMA"]={Range=150,Blindspot=3,Height=24.5,Type="Long",Radar="LvS-103_Lavett103_Rb103A"}, -["RBS103B SMA"]={Range=35,Blindspot=0,Height=36,Type="Medium",Radar="LvS-103_Lavett103_Rb103B"}, -["RBS103AM SMA"]={Range=150,Blindspot=3,Height=24.5,Type="Long",Radar="LvS-103_Lavett103_HX_Rb103A"}, -["RBS103BM SMA"]={Range=35,Blindspot=0,Height=36,Type="Medium",Radar="LvS-103_Lavett103_HX_Rb103B"}, -["Lvkv9040M SMA"]={Range=4,Blindspot=0,Height=2.5,Type="Short",Radar="LvKv9040"}, +["RBS98M SMA"]={Range=20,Blindspot=0.2,Height=8,Type="Short",Radar="RBS-98"}, +["RBS70 SMA"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="RBS-70"}, +["RBS70M SMA"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="BV410_RBS70"}, +["RBS90 SMA"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="RBS-90"}, +["RBS90M SMA"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="BV410_RBS90"}, +["RBS103A SMA"]={Range=160,Blindspot=1,Height=36,Type="Long",Radar="LvS-103_Lavett103_Rb103A"}, +["RBS103B SMA"]={Range=120,Blindspot=3,Height=24.5,Type="Long",Radar="LvS-103_Lavett103_Rb103B"}, +["RBS103AM SMA"]={Range=160,Blindspot=1,Height=36,Type="Long",Radar="LvS-103_Lavett103_HX_Rb103A"}, +["RBS103BM SMA"]={Range=120,Blindspot=3,Height=24.5,Type="Long",Radar="LvS-103_Lavett103_HX_Rb103B"}, +["Lvkv9040M SMA"]={Range=2,Blindspot=0.1,Height=1.2,Type="Point",Radar="LvKv9040",Point="true"}, } MANTIS.SamDataCH={ -["2S38 CH"]={Range=8,Blindspot=0.5,Height=6,Type="Short",Radar="2S38"}, -["PantsirS1 CH"]={Range=20,Blindspot=1.2,Height=15,Type="Short",Radar="PantsirS1"}, -["PantsirS2 CH"]={Range=30,Blindspot=1.2,Height=18,Type="Medium",Radar="PantsirS2"}, -["PGL-625 CH"]={Range=10,Blindspot=0.5,Height=5,Type="Short",Radar="PGL_625"}, -["HQ-17A CH"]={Range=20,Blindspot=1.5,Height=10,Type="Short",Radar="HQ17A"}, -["M903PAC2 CH"]={Range=160,Blindspot=3,Height=24.5,Type="Long",Radar="MIM104_M903_PAC2"}, -["M903PAC3 CH"]={Range=120,Blindspot=1,Height=40,Type="Long",Radar="MIM104_M903_PAC3"}, -["TorM2 CH"]={Range=12,Blindspot=1,Height=10,Type="Short",Radar="TorM2"}, -["TorM2K CH"]={Range=12,Blindspot=1,Height=10,Type="Short",Radar="TorM2K"}, -["TorM2M CH"]={Range=16,Blindspot=1,Height=10,Type="Short",Radar="TorM2M"}, -["NASAMS3-AMRAAMER CH"]={Range=50,Blindspot=2,Height=35.7,Type="Medium",Radar="CH_NASAMS3_LN_AMRAAM_ER"}, -["NASAMS3-AIM9X2 CH"]={Range=20,Blindspot=0.2,Height=18,Type="Short",Radar="CH_NASAMS3_LN_AIM9X2"}, -["C-RAM CH"]={Range=2,Blindspot=0,Height=2,Type="Short",Radar="CH_Centurion_C_RAM"}, -["PGZ-09 CH"]={Range=4,Blindspot=0,Height=3,Type="Short",Radar="CH_PGZ09"}, -["S350-9M100 CH"]={Range=15,Blindspot=1.5,Height=8,Type="Short",Radar="CH_S350_50P6_9M100"}, -["S350-9M96D CH"]={Range=150,Blindspot=2.5,Height=30,Type="Long",Radar="CH_S350_50P6_9M96D"}, -["LAV-AD CH"]={Range=8,Blindspot=0.2,Height=4.8,Type="Short",Radar="CH_LAVAD"}, -["HQ-22 CH"]={Range=170,Blindspot=5,Height=27,Type="Long",Radar="CH_HQ22_LN"}, +["2S38 CHM"]={Range=6,Blindspot=0.1,Height=4.5,Type="Short",Radar="2S38"}, +["PantsirS1 CHM"]={Range=20,Blindspot=1.2,Height=15,Type="Point",Radar="PantsirS1",Point="true"}, +["PantsirS2 CHM"]={Range=30,Blindspot=1.2,Height=18,Type="Medium",Radar="PantsirS2"}, +["PGL-625 CHM"]={Range=10,Blindspot=1,Height=5,Type="Short",Radar="PGL_625"}, +["HQ-17A CHM"]={Range=15,Blindspot=1.5,Height=10,Type="Short",Radar="HQ17A"}, +["M903PAC2 CHM"]={Range=120,Blindspot=3,Height=24.5,Type="Long",Radar="MIM104_M903_PAC2"}, +["M903PAC3 CHM"]={Range=160,Blindspot=1,Height=40,Type="Long",Radar="MIM104_M903_PAC3"}, +["TorM2 CHM"]={Range=12,Blindspot=1,Height=10,Type="Point",Radar="TorM2",Point="true"}, +["TorM2K CHM"]={Range=12,Blindspot=1,Height=10,Type="Point",Radar="TorM2K",Point="true"}, +["TorM2M CHM"]={Range=16,Blindspot=1,Height=10,Type="Point",Radar="TorM2M",Point="true"}, +["NASAMS3-AMRAAMER CHM"]={Range=50,Blindspot=2,Height=35.7,Type="Medium",Radar="CH_NASAMS3_LN_AMRAAM_ER"}, +["NASAMS3-AIM9X2 CHM"]={Range=20,Blindspot=0.2,Height=18,Type="Short",Radar="CH_NASAMS3_LN_AIM9X2"}, +["C-RAM CHM"]={Range=2,Blindspot=0,Height=2,Type="Point",Radar="CH_Centurion_C_RAM",Point="true"}, +["PGZ-09 CHM"]={Range=4,Blindspot=0.5,Height=3,Type="Point",Radar="CH_PGZ09",Point="true"}, +["S350-9M100 CHM"]={Range=15,Blindspot=1,Height=8,Type="Short",Radar="CH_S350_50P6_9M100"}, +["S350-9M96D CHM"]={Range=150,Blindspot=2.5,Height=30,Type="Long",Radar="CH_S350_50P6_9M96D"}, +["LAV-AD CHM"]={Range=8,Blindspot=0.16,Height=4.8,Type="Short",Radar="CH_LAVAD"}, +["HQ-22 CHM"]={Range=170,Blindspot=5,Height=27,Type="Long",Radar="CH_HQ22_LN"}, +["PGZ-95 CHM"]={Range=2.5,Blindspot=0.5,Height=2,Type="Point",Radar="CH_PGZ95",Point="true"}, +["LD-3000 CHM"]={Range=2.5,Blindspot=0.1,Height=3,Type="Point",Radar="CH_LD3000_stationary",Point="true"}, +["LD-3000M CHM"]={Range=2.5,Blindspot=0.1,Height=3,Type="Point",Radar="CH_LD3000",Point="true"}, +["FlaRakRad CHM"]={Range=8,Blindspot=1.5,Height=6,Type="Short",Radar="CH_FlaRakRad"}, +["IRIS-T SLM CHM"]={Range=40,Blindspot=0.5,Height=20,Type="Medium",Radar="CH_IRIST_SLM"}, +["M903PAC2KAT1 CHM"]={Range=120,Blindspot=3,Height=24.5,Type="Long",Radar="CH_MIM104_M903_PAC2_KAT1"}, +["Skynex CHM"]={Range=3.5,Blindspot=0.1,Height=3.5,Type="Point",Radar="CH_SkynexHX",Point="true"}, +["Skyshield CHM"]={Range=3.5,Blindspot=0.1,Height=3.5,Type="Point",Radar="CH_Skyshield_Gun",Point="true"}, +["WieselOzelot CHM"]={Range=8,Blindspot=0.16,Height=4.8,Type="Short",Radar="CH_Wiesel2Ozelot"}, +["BukM3-9M317M CHM"]={Range=70,Blindspot=0.25,Height=35,Type="Medium",Radar="CH_BukM3_9A317M"}, +["BukM3-9M317MA CHM"]={Range=70,Blindspot=0.25,Height=35,Type="Medium",Radar="CH_BukM3_9A317MA"}, +["SkySabre CHM"]={Range=30,Blindspot=0.5,Height=10,Type="Medium",Radar="CH_SkySabreLN"}, +["Stormer CHM"]={Range=7.5,Blindspot=0.3,Height=7,Type="Short",Radar="CH_StormerHVM"}, +["THAAD CHM"]={Range=200,Blindspot=40,Height=150,Type="Long",Radar="CH_THAAD_M1120"}, +["USInfantryFIM92K CHM"]={Range=8,Blindspot=0.16,Height=4.8,Type="Short",Radar="CH_USInfantry_FIM92"}, +["RBS98M CHM"]={Range=20,Blindspot=0.2,Height=8,Type="Short",Radar="RBS-98"}, +["RBS70 CHM"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="RBS-70"}, +["RBS70M CHM"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="BV410_RBS70"}, +["RBS90 CHM"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="RBS-90"}, +["RBS90M CHM"]={Range=8,Blindspot=0.25,Height=6,Type="Short",Radar="BV410_RBS90"}, +["RBS103A CHM"]={Range=160,Blindspot=1,Height=36,Type="Long",Radar="LvS-103_Lavett103_Rb103A"}, +["RBS103B CHM"]={Range=120,Blindspot=3,Height=24.5,Type="Long",Radar="LvS-103_Lavett103_Rb103B"}, +["RBS103AM CHM"]={Range=160,Blindspot=1,Height=36,Type="Long",Radar="LvS-103_Lavett103_HX_Rb103A"}, +["RBS103BM CHM"]={Range=120,Blindspot=3,Height=24.5,Type="Long",Radar="LvS-103_Lavett103_HX_Rb103B"}, +["Lvkv9040M CHM"]={Range=2,Blindspot=0.1,Height=1.2,Type="Point",Radar="LvKv9040",Point="true"}, } do function MANTIS:New(name,samprefix,ewrprefix,hq,coalition,dynamic,awacs,EmOnOff,Padding,Zones) @@ -53614,6 +55146,7 @@ self.SAM_Table={} self.SAM_Table_Long={} self.SAM_Table_Medium={} self.SAM_Table_Short={} +self.SAM_Table_PointDef={} self.dynamic=dynamic or false self.checkradius=25000 self.grouping=5000 @@ -53641,10 +55174,6 @@ self.DLink=false self.Padding=Padding or 10 self.SuppressedGroups={} self.automode=true -self.radiusscale={} -self.radiusscale[MANTIS.SamType.LONG]=1.1 -self.radiusscale[MANTIS.SamType.MEDIUM]=1.2 -self.radiusscale[MANTIS.SamType.SHORT]=1.3 self.usezones=false self.AcceptZones={} self.RejectZones={} @@ -53652,6 +55181,7 @@ self.ConflictZones={} self.maxlongrange=1 self.maxmidrange=2 self.maxshortrange=2 +self.maxpointdefrange=6 self.maxclassic=6 self.autoshorad=true self.ShoradGroupSet=SET_GROUP:New() @@ -53659,6 +55189,8 @@ self.FilterZones=Zones self.SkateZones=nil self.SkateNumber=3 self.shootandscoot=false +self.SmokeDecoy=false +self.SmokeDecoyColor=SMOKECOLOR.White self.UseEmOnOff=true if EmOnOff==false then self.UseEmOnOff=false @@ -53668,6 +55200,7 @@ self.advAwacs=true else self.advAwacs=false end +self:SetDLinkCacheTime() self.lid=string.format("MANTIS %s | ",self.name) if self.debug then BASE:TraceOnOff(true) @@ -53690,6 +55223,7 @@ end if self.advAwacs then table.insert(self.ewr_templates,awacs) end +self.logsamstatus=false self:T({self.ewr_templates}) self.SAM_Group=SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition) self.EWR_Group=SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition) @@ -53706,7 +55240,7 @@ end if self.HQ_Template_CC then self.HQ_CC=GROUP:FindByName(self.HQ_Template_CC) end -self.version="0.8.18" +self.checkcounter=1 self:I(string.format("***** Starting MANTIS Version %s *****",self.version)) self:SetStartState("Stopped") self:AddTransition("Stopped","Start","Running") @@ -53751,7 +55285,11 @@ self:T(self.lid.."AddZones") self.AcceptZones=AcceptZones or{} self.RejectZones=RejectZones or{} self.ConflictZones=ConflictZones or{} -if#AcceptZones>0 or#RejectZones>0 or#ConflictZones>0 then +self.AcceptZonesNo=UTILS.TableLength(self.AcceptZones) +self.RejectZonesNo=UTILS.TableLength(self.RejectZones) +self.ConflictZonesNo=UTILS.TableLength(self.ConflictZones) +self:T(string.format("AcceptZonesNo = %d | RejectZonesNo = %d | ConflictZonesNo = %d",self.AcceptZonesNo,self.RejectZonesNo,self.ConflictZonesNo)) +if self.AcceptZonesNo>0 or self.RejectZonesNo>0 or self.ConflictZonesNo>0 then self.usezones=true end return self @@ -53775,12 +55313,18 @@ end self.engagerange=range return self end -function MANTIS:SetMaxActiveSAMs(Short,Mid,Long,Classic) +function MANTIS:SetSmokeDecoy(Onoff,Color) +self.SmokeDecoy=Onoff +self.SmokeDecoyColor=Color or SMOKECOLOR.White +return self +end +function MANTIS:SetMaxActiveSAMs(Short,Mid,Long,Classic,Point) self:T(self.lid.."SetMaxActiveSAMs") self.maxclassic=Classic or 6 self.maxlongrange=Long or 1 self.maxmidrange=Mid or 2 self.maxshortrange=Short or 2 +self.maxpointdefrange=Point or 6 return self end function MANTIS:SetNewSAMRangeWhileRunning(range) @@ -53845,6 +55389,11 @@ end end return self end +function MANTIS:SetDLinkCacheTime(seconds) +self.DLinkCacheTime=math.abs(seconds or 120) +if self.DLinkCacheTime<5 then self.DLinkCacheTime=5 end +return self +end function MANTIS:SetDetectInterval(interval) self:T(self.lid.."SetDetectInterval") local interval=interval or 30 @@ -53922,6 +55471,20 @@ end end return self end +function MANTIS:_CheckAnyEWRAlive() +self:T(self.lid.."_CheckAnyEWRAlive") +local alive=false +if self.EWR_Group:CountAlive()>0 then +alive=true +end +if not alive and self.AWACS_Prefix then +local awacs=GROUP:FindByName(self.AWACS_Prefix) +if awacs and awacs:IsAlive()then +alive=true +end +end +return alive +end function MANTIS:_CalcAdvState() self:T(self.lid.."CalcAdvState") local m=MESSAGE:New(self.lid.." Calculating Advanced State",10,"MANTIS"):ToAllIf(self.debug) @@ -53987,7 +55550,8 @@ end function MANTIS:_CheckCoordinateInZones(coord) self:T(self.lid.."_CheckCoordinateInZones") local inzone=false -if#self.AcceptZones>0 then +self:T(string.format("AcceptZonesNo = %d | RejectZonesNo = %d | ConflictZonesNo = %d",self.AcceptZonesNo,self.RejectZonesNo,self.ConflictZonesNo)) +if self.AcceptZonesNo>0 then for _,_zone in pairs(self.AcceptZones)do local zone=_zone if zone:IsCoordinateInZone(coord)then @@ -53997,7 +55561,7 @@ break end end end -if#self.RejectZones>0 and inzone then +if self.RejectZonesNo>0 then for _,_zone in pairs(self.RejectZones)do local zone=_zone if zone:IsCoordinateInZone(coord)then @@ -54007,7 +55571,7 @@ break end end end -if#self.ConflictZones>0 and not inzone then +if self.ConflictZonesNo>0 then for _,_zone in pairs(self.ConflictZones)do local zone=_zone if zone:IsCoordinateInZone(coord)then @@ -54043,9 +55607,8 @@ local set=dectset if dlink then set=self:_PreFilterHeight(height) end -local friendlyset -if self.checkforfriendlies==true then -friendlyset=SET_GROUP:New():FilterCoalitions(self.Coalition):FilterCategories({"plane","helicopter"}):FilterFunction(function(grp)if grp and grp:InAir()then return true else return false end end):FilterOnce() +if self.checkforfriendlies==true and self.friendlyset==nil then +self.friendlyset=SET_GROUP:New():FilterCoalitions(self.Coalition):FilterCategories({"plane","helicopter"}):FilterFunction(function(grp)if grp and grp:InAir()then return true else return false end end):FilterStart() end for _,_coord in pairs(set)do local coord=_coord @@ -54054,23 +55617,24 @@ if not targetdistance then targetdistance=samcoordinate:Get2DDistance(coord) end local zonecheck=true +self:T("self.usezones = "..tostring(self.usezones)) if self.usezones then zonecheck=self:_CheckCoordinateInZones(coord) end if self.verbose and self.debug then -local dectstring=coord:ToStringLLDMS() -local samstring=samcoordinate:ToStringLLDMS() +local samstring=samcoordinate:ToStringMGRS({MGRS_Accuracy=0}) +samstring=string.gsub(samstring,"%s","") local inrange="false" if targetdistance<=rad then inrange="true" end -local text=string.format("Checking SAM at %s | Targetdist %d | Rad %d | Inrange %s",samstring,targetdistance,rad,inrange) +local text=string.format("Checking SAM at %s | Tgtdist %.1fkm | Rad %.1fkm | Inrange %s",samstring,targetdistance/1000,rad/1000,inrange) local m=MESSAGE:New(text,10,"Check"):ToAllIf(self.debug) self:T(self.lid..text) end local nofriendlies=true if self.checkforfriendlies==true then -local closestfriend,distance=friendlyset:GetClosestGroup(samcoordinate) +local closestfriend,distance=self.friendlyset:GetClosestGroup(samcoordinate) if closestfriend and distance and distance65 then +if self.checkcounter%3==0 then self:_RefreshSAMTable() end +self.checkcounter=self.checkcounter+1 +local instatusred=0 +local instatusgreen=0 +local activeshorads=0 if self.automode then local samset=self.SAM_Table_Long -self:_CheckLoop(samset,detset,dlink,self.maxlongrange) +local instatusredl,instatusgreenl,activeshoradsl=self:_CheckLoop(samset,detset,dlink,self.maxlongrange) local samset=self.SAM_Table_Medium -self:_CheckLoop(samset,detset,dlink,self.maxmidrange) +local instatusredm,instatusgreenm,activeshoradsm=self:_CheckLoop(samset,detset,dlink,self.maxmidrange) local samset=self.SAM_Table_Short -self:_CheckLoop(samset,detset,dlink,self.maxshortrange) +local instatusreds,instatusgreens,activeshoradss=self:_CheckLoop(samset,detset,dlink,self.maxshortrange) +local samset=self.SAM_Table_PointDef +instatusred,instatusgreen,activeshorads=self:_CheckLoop(samset,detset,dlink,self.maxpointdefrange) else local samset=self:_GetSAMTable() -self:_CheckLoop(samset,detset,dlink,self.maxclassic) +instatusred,instatusgreen,activeshorads=self:_CheckLoop(samset,detset,dlink,self.maxclassic) +end +local function GetReport() +local statusreport=REPORT:New("\nMANTIS Status "..self.name) +statusreport:Add("+-----------------------------+") +statusreport:Add(string.format("+ SAM in RED State: %2d",instatusred)) +statusreport:Add(string.format("+ SAM in GREEN State: %2d",instatusgreen)) +if self.Shorad then +statusreport:Add(string.format("+ SHORAD active: %2d",activeshorads)) +end +statusreport:Add("+-----------------------------+") +return statusreport +end +if self.debug or self.verbose then +local statusreport=GetReport() +MESSAGE:New(statusreport:Text(),10):ToAll():ToLog() +elseif reporttolog==true then +local statusreport=GetReport() +MESSAGE:New(statusreport:Text(),10):ToLog() end return self end @@ -54448,7 +56110,7 @@ else self.Detection=self:StartIntelDetection() end if self.autoshorad then -self.Shorad=SHORAD:New(self.name.."-SHORAD",self.name.."-SHORAD",self.SAM_Group,self.ShoradActDistance,self.ShoradTime,self.coalition,self.UseEmOnOff) +self.Shorad=SHORAD:New(self.name.."-SHORAD","SHORAD",self.SAM_Group,self.ShoradActDistance,self.ShoradTime,self.coalition,self.UseEmOnOff) self.Shorad:SetDefenseLimits(80,95) self.ShoradLink=true self.Shorad.Groupset=self.ShoradGroupSet @@ -54463,7 +56125,31 @@ end function MANTIS:onbeforeStatus(From,Event,To) self:T({From,Event,To}) if not self.state2flag then -self:_Check(self.Detection,self.DLink) +self:_Check(self.Detection,self.DLink,self.logsamstatus) +end +local EWRAlive=self:_CheckAnyEWRAlive() +local function FindSAMSRTR() +for i=1,1000 do +local randomsam=self.SAM_Group:GetRandom() +if randomsam and randomsam:IsAlive()then +if randomsam:IsSAM()then return randomsam end +end +end +end +if not EWRAlive then +local randomsam=FindSAMSRTR() +if randomsam and randomsam:IsAlive()then +if self.UseEmOnOff then +randomsam:EnableEmission(true) +else +randomsam:OptionAlarmStateRed() +end +local name=randomsam:GetName() +if self.SamStateTracker[name]~="RED"then +self:__RedState(1,randomsam) +self.SamStateTracker[name]="RED" +end +end end if self.autorelocate then local relointerval=self.relointerval @@ -54489,7 +56175,7 @@ self:T({From,Event,To}) if self.debug and self.verbose then self:I(self.lid.."Status Report") for _name,_state in pairs(self.SamStateTracker)do -self:I(string.format("Site %s\tStatus %s",_name,_state)) +self:I(string.format("Site %s | Status %s",_name,_state)) end end local interval=self.detectinterval*-1 @@ -54527,7 +56213,7 @@ if self.ShoradLink then local Shorad=self.Shorad local radius=self.checkradius local ontime=self.ShoradTime -Shorad:WakeUpShorad(Name,radius,ontime) +Shorad:WakeUpShorad(Name,radius,ontime,nil,true) self:__ShoradActivated(1,Name,radius,ontime) end return self @@ -54563,7 +56249,7 @@ shootandscoot=false, SkateNumber=3, SkateZones=nil, minscootdist=100, -minscootdist=3000, +maxscootdist=3000, scootrandomcoord=false, } do @@ -54779,9 +56465,11 @@ local returnname=false for _,_groups in pairs(shoradset)do local groupname=_groups:GetName() if string.find(groupname,tgtgrp,1,true)then +if _groups:IsSAM()then returnname=true end end +end return returnname end function SHORAD:_ShotIsDetected() @@ -54795,7 +56483,7 @@ IsDetected=true end return IsDetected end -function SHORAD:onafterWakeUpShorad(From,Event,To,TargetGroup,Radius,ActiveTimer,TargetCat) +function SHORAD:onafterWakeUpShorad(From,Event,To,TargetGroup,Radius,ActiveTimer,TargetCat,ShotAt) self:T(self.lid.." WakeUpShorad") self:T({TargetGroup,Radius,ActiveTimer,TargetCat}) local targetcat=TargetCat or Object.Category.UNIT @@ -54832,7 +56520,20 @@ end end local TDiff=4 for _,_group in pairs(shoradset)do -if _group:IsAnyInZone(targetzone)then +local groupname=_group:GetName() +if groupname==TargetGroup and ShotAt==true then +if self.UseEmOnOff then +_group:EnableEmission(false) +end +_group:OptionAlarmStateGreen() +self.ActiveGroups[groupname]=nil +local text=string.format("Shot at SHORAD %s! Evading!",_group:GetName()) +self:T(text) +local m=MESSAGE:New(text,10,"SHORAD"):ToAllIf(self.debug) +if self.shootandscoot then +self:__ShootAndScoot(1,_group) +end +elseif _group:IsAnyInZone(targetzone)or groupname==TargetGroup then local text=string.format("Waking up SHORAD %s",_group:GetName()) self:T(text) local m=MESSAGE:New(text,10,"SHORAD"):ToAllIf(self.debug) @@ -54840,7 +56541,6 @@ if self.UseEmOnOff then _group:EnableEmission(true) end _group:OptionAlarmStateRed() -local groupname=_group:GetName() if self.ActiveGroups[groupname]==nil then self.ActiveGroups[groupname]={Timing=ActiveTimer} local endtime=timer.getTime()+(ActiveTimer*math.random(75,100)/100) @@ -54898,7 +56598,7 @@ _targetgroup=tgtgrp _targetgroupname=tgtgrp:GetName() _targetskill=tgtgrp:GetUnit(1):GetSkill() self:T("*** Found Target = ".._targetgroupname) -self:WakeUpShorad(_targetgroupname,self.Radius,self.ActiveTimer,Object.Category.UNIT) +self:WakeUpShorad(_targetgroupname,self.Radius,self.ActiveTimer,Object.Category.UNIT,true) end end end @@ -55004,7 +56704,7 @@ local shotatus=self:_CheckShotAtShorad(targetgroupname) local shotatsams=self:_CheckShotAtSams(targetgroupname) if shotatsams or shotatus then self:T({shotatsams=shotatsams,shotatus=shotatus}) -self:WakeUpShorad(targetgroupname,self.Radius,self.ActiveTimer,targetcat) +self:WakeUpShorad(targetgroupname,self.Radius,self.ActiveTimer,targetcat,true) end end end @@ -55014,7 +56714,7 @@ end end AICSAR={ ClassName="AICSAR", -version="0.1.16", +version="0.1.18", lid="", coalition=coalition.side.BLUE, template="", @@ -55059,6 +56759,8 @@ Speed=100, Altitude=1500, UseEventEject=false, Delay=100, +UseRescueZone=false, +RescueZone=nil, } AICSAR.Messages={ EN={ @@ -55102,7 +56804,7 @@ PILOTRESCUED=3.5, PILOTINHELO=2.6, }, } -function AICSAR:New(Alias,Coalition,Pilottemplate,Helotemplate,FARP,MASHZone) +function AICSAR:New(Alias,Coalition,Pilottemplate,Helotemplate,FARP,MASHZone,Helonumber) local self=BASE:Inherit(self,FSM:New()) if Coalition and type(Coalition)=="string"then if Coalition=="blue"then @@ -55157,7 +56859,7 @@ self.DCSRadioGroup=nil self.DCSRadioQueue=nil self.MGRS_Accuracy=2 self.limithelos=true -self.helonumber=3 +self.helonumber=Helonumber or 3 self:InitLocalization() self.lid=string.format("%s (%s) | ",self.alias,self.coalition and UTILS.GetCoalitionName(self.coalition)or"unknown") self.PilotStore=FIFO:New() @@ -55199,12 +56901,17 @@ self.gettext:AddEntry("de","PILOTRESCUED",AICSAR.Messages.DE.PILOTRESCUED,AICSAR self.locale="en" return self end +function AICSAR:SetUsingRescueZone(Zone) +self.UseRescueZone=true +self.RescueZone=Zone +return self +end function AICSAR:SetSRSRadio(OnOff,Path,Frequency,Modulation,SoundPath,Port) self:T(self.lid.."SetSRSRadio") self.SRSRadio=OnOff and true self.SRSTTSRadio=false self.SRSFrequency=Frequency or 243 -self.SRSPath=Path or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.SRSPath=Path or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.SRS:SetLabel("ACSR") self.SRS:SetCoalition(self.coalition) self.SRSModulation=Modulation or radio.modulation.AM @@ -55222,7 +56929,7 @@ self:T(self.lid.."SetSRSTTSRadio") self.SRSTTSRadio=OnOff and true self.SRSRadio=false self.SRSFrequency=Frequency or 243 -self.SRSPath=Path or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.SRSPath=Path or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.SRSModulation=Modulation or radio.modulation.AM self.SRSPort=Port or MSRS.port or 5002 if OnOff then @@ -55308,7 +57015,6 @@ if self.UseEventEject then local _LandingPos=COORDINATE:NewFromVec3(_event.initiator:getPosition().p) local _country=_event.initiator:getCountry() local _coalition=coalition.getCountryCoalition(_country) -local data=UTILS.DeepCopy(EventData) Unit.destroy(_event.initiator) self:ScheduleOnce(self.Delay,self._DelayedSpawnPilot,self,_LandingPos,_coalition) end @@ -55317,6 +57023,13 @@ return self end function AICSAR:_DelayedSpawnPilot(_LandingPos,_coalition) local distancetofarp=_LandingPos:Get2DDistance(self.farp:GetCoordinate()) +if self.UseRescueZone==true and self.RescueZone~=nil then +if self.RescueZone:IsCoordinateInZone(_LandingPos)then +distancetofarp=self.maxdistance-10 +else +distancetofarp=self.maxdistance+10 +end +end local Text,Soundfile,Soundlength,Subtitle=self.gettext:GetEntry("PILOTDOWN",self.locale) local text="" local setting={} @@ -55383,6 +57096,13 @@ local _LandingPos=COORDINATE:NewFromVec3(_event.initiator:getPosition().p) local _country=_event.initiator:getCountry() local _coalition=coalition.getCountryCoalition(_country) local distancetofarp=_LandingPos:Get2DDistance(self.farp:GetCoordinate()) +if self.UseRescueZone==true and self.RescueZone~=nil then +if self.RescueZone:IsCoordinateInZone(_LandingPos)then +distancetofarp=self.maxdistance-10 +else +distancetofarp=self.maxdistance+10 +end +end local Text,Soundfile,Soundlength,Subtitle=self.gettext:GetEntry("PILOTDOWN",self.locale) local text="" local setting={} @@ -55444,6 +57164,7 @@ local newhelo=SPAWN:NewWithAlias(self.helotemplate,self.helotemplate..math.rando :InitUnControlled(true) :OnSpawnGroup( function(Group) +Group:OptionPreferVerticalLanding() self:__HeloOnDuty(1,Group) end ) @@ -55482,6 +57203,9 @@ function helo:OnAfterUnloaded(From,Event,To,OpsGroupCargo) AICHeloUnloaded(helo,OpsGroupCargo) helo:__UnloadingDone(5) end +function helo:OnAfterLandAtAirbase(From,Event,To,airbase) +helo:Despawn(2) +end self.helos[Index]=helo return self end @@ -55512,7 +57236,8 @@ local state=helo:GetState() local name=helo:GetName() self:T("Helo group "..name.." in state "..state) if state=="Arrived"then -helo:__Stop(5) +helo.OnAfterDead=nil +helo:Despawn(35) self.helos[_index]=nil end else @@ -55541,7 +57266,6 @@ local flightgroup=self.helos[_index] if self:_CheckInMashZone(_pilot)then self:T("Pilot".._pilot.GroupName.." rescued!") if OpsGroup then -OpsGroup:Despawn(10) else _pilot:Destroy(true,10) end @@ -56228,8 +57952,11 @@ verbose=0, alias="", debug=false, smokemenu=true, +RoundingPrecision=0, +increasegroundawareness=false, +MonitorFrequency=30, } -AUTOLASE.version="0.1.25" +AUTOLASE.version="0.1.31" function AUTOLASE:New(RecceSet,Coalition,Alias,PilotSet) BASE:T({RecceSet,Coalition,Alias,PilotSet}) local self=BASE:Inherit(self,BASE:New()) @@ -56282,6 +58009,7 @@ self.reporttimeshort=10 self.reporttimelong=30 self.smoketargets=false self.smokecolor=SMOKECOLOR.Red +self.smokeoffset=nil self.notifypilots=true self.targetsperrecce={} self.RecceUnits={} @@ -56298,6 +58026,10 @@ self:SetLaserCodes({1688,1130,4785,6547,1465,4578}) self.playermenus={} self.smokemenu=true self.threatmenu=true +self.RoundingPrecision=0 +self.increasegroundawareness=false +self.MonitorFrequency=30 +self:EnableSmokeMenu({Angle=math.random(0,359),Distance=math.random(10,20)}) self.lid=string.format("AUTOLASE %s (%s) | ",self.alias,self.coalition and UTILS.GetCoalitionName(self.coalition)or"unknown") self:AddTransition("*","Monitor","*") self:AddTransition("*","Lasing","*") @@ -56316,10 +58048,22 @@ self:__Start(2) self:__Monitor(math.random(5,10)) return self end +function AUTOLASE:SetMonitorFrequency(Seconds) +self.MonitorFrequency=Seconds or 30 +return self +end function AUTOLASE:SetLaserCodes(LaserCodes) self.LaserCodes=(type(LaserCodes)=="table")and LaserCodes or{LaserCodes} return self end +function AUTOLASE:EnableImproveGroundUnitsDetection() +self.increasegroundawareness=true +return self +end +function AUTOLASE:DisableImproveGroundUnitsDetection() +self.increasegroundawareness=false +return self +end function AUTOLASE:SetPilotMenu() if self.usepilotset then local pilottable=self.pilotset:GetSetObjects()or{} @@ -56415,7 +58159,7 @@ end function AUTOLASE:SetUsingSRS(OnOff,Path,Frequency,Modulation,Label,Gender,Culture,Port,Voice,Volume,PathToGoogleKey) if OnOff then self.useSRS=true -self.SRSPath=Path or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.SRSPath=Path or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.SRSFreq=Frequency or 271 self.SRSMod=Modulation or radio.modulation.AM self.Gender=Gender or MSRS.gender or"male" @@ -56496,12 +58240,22 @@ local Message="Smoking targets is now "..smktxt.."!" self:NotifyPilots(Message,10) return self end -function AUTOLASE:EnableSmokeMenu() +function AUTOLASE:SetRoundingPrecsion(IDP) +self.RoundingPrecision=IDP or 0 +return self +end +function AUTOLASE:EnableSmokeMenu(Offset) self.smokemenu=true +if Offset then +self.smokeoffset={} +self.smokeoffset.Distance=Offset.Distance or math.random(10,20) +self.smokeoffset.Angle=Offset.Angle or math.random(0,359) +end return self end function AUTOLASE:DisableSmokeMenu() self.smokemenu=false +self.smokeoffset=nil return self end function AUTOLASE:EnableThreatLevelMenu() @@ -56541,7 +58295,8 @@ if recce and recce:IsAlive()then local unit=recce:GetUnit(1) local name=unit:GetName() if not self.RecceUnits[name]then -self.RecceUnits[name]={name=name,unit=unit,cooldown=false,timestamp=timer.getAbsTime()} +local isground=(unit and unit.IsGround)and unit:IsGround()or false +self.RecceUnits[name]={name=name,unit=unit,cooldown=false,timestamp=timer.getAbsTime(),isground=isground} end end end @@ -56614,9 +58369,11 @@ name=string.match(name,"^(.*)#") end local code=self:GetLaserCode(unit:GetName()) report:Add(string.format("Recce %s has code %d",name,code)) +report:Add("---------------") end end report:Add(string.format("Lasing min threat level %d",self.minthreatlevel)) +report:Add("---------------") local lines=0 for _ind,_entry in pairs(self.CurrentLasing)do local entry=_entry @@ -56636,22 +58393,27 @@ end if playername then local settings=_DATABASE:GetPlayerSettings(playername) if settings then -self:I("Get Settings ok!") +self:T("Get Settings ok!") if settings:IsA2G_MGRS()then locationstring=entry.coordinate:ToStringMGRS(settings) elseif settings:IsA2G_LL_DMS()then locationstring=entry.coordinate:ToStringLLDMS(settings) +elseif settings:IsA2G_LL_DDM()then +locationstring=entry.coordinate:ToStringLLDDM(settings) elseif settings:IsA2G_BR()then -locationstring=entry.coordinate:ToStringBR(Group:GetCoordinate()or Unit:GetCoordinate(),settings) +local startcoordinate=Unit:GetCoordinate()or Group:GetCoordinate() +locationstring=entry.coordinate:ToStringBR(startcoordinate,settings,false,self.RoundingPrecision) end end end -local text=string.format("%s lasing %s code %d\nat %s",reccename,typename,code,locationstring) +local text=string.format("+ %s lasing %s code %d\nat %s",reccename,typename,code,locationstring) report:Add(text) +report:Add("---------------") lines=lines+1 end if lines==0 then report:Add("No targets!") +report:Add("---------------") end local reporttime=self.reporttimelong if lines==0 then reporttime=self.reporttimeshort end @@ -56736,8 +58498,57 @@ end end return canlase end +function AUTOLASE:_Prescient() +for _,_data in pairs(self.RecceUnits)do +if _data.isground and _data.unit and _data.unit:IsAlive()then +local unit=_data.unit +local position=unit:GetCoordinate() +local needsinit=false +if position then +local lastposition=unit:GetProperty("lastposition") +if not lastposition then +unit:SetProperty("lastposition",position) +lastposition=position +needsinit=true +end +local dist=position:Get2DDistance(lastposition) +local TNow=timer.getAbsTime() +if dist>10 or needsinit==true or TNow-_data.timestamp>29 then +local hasunits,hasstatics,_,Units,Statics=position:ScanObjects(self.LaseDistance,true,true,false) +if hasunits then +self:T(self.lid.."Checking possibly visible UNITs for Recce "..unit:GetName()) +for _,_target in pairs(Units)do +local target=_target +if target and target:GetCoalition()~=self.coalition then +if unit:IsLOS(target)and(not target:IsUnitDetected(unit))then +unit:KnowUnit(target,true,true) +end +end +end +end +if hasstatics then +self:T(self.lid.."Checking possibly visible STATICs for Recce "..unit:GetName()) +for _,_static in pairs(Statics)do +local static=STATIC:Find(_static) +if static and static:GetCoalition()~=self.coalition and static:GetCoordinate()then +local IsLOS=position:IsLOS(static:GetCoordinate()) +if IsLOS then +unit:KnowUnit(static,true,true) +end +end +end +end +end +end +end +end +return self +end function AUTOLASE:onbeforeMonitor(From,Event,To) self:T({From,Event,To}) +if self.increasegroundawareness then +self:_Prescient() +end self:UpdateIntel() return self end @@ -56863,6 +58674,9 @@ coordinate=unit:GetCoordinate(), } if self.smoketargets then local coord=unit:GetCoordinate() +if self.smokeoffset then +coord:Translate(self.smokeoffset.Distance,self.smokeoffset.Angle,true,true) +end local color=self:GetSmokeColor(reccename) coord:Smoke(color) end @@ -56872,7 +58686,8 @@ self:__Lasing(2,laserspot) end end end -self:__Monitor(-30) +local nextloop=-self.MonitorFrequency or-30 +self:__Monitor(nextloop) return self end function AUTOLASE:onbeforeRecceKIA(From,Event,To,RecceName) @@ -57067,8 +58882,8 @@ end end TIRESIAS={ ClassName="TIRESIAS", -debug=false, -version="0.0.5", +debug=true, +version=" 0.0.7-OPT", Interval=20, GroundSet=nil, VehicleSet=nil, @@ -57079,6 +58894,8 @@ AAARange=60, HeloSwitchRange=10, PlaneSwitchRange=25, SwitchAAA=true, +_cached_zones={}, +_cached_groupsets={}, } function TIRESIAS:New() local self=BASE:Inherit(self,FSM:New()) @@ -57086,9 +58903,10 @@ self:SetStartState("Stopped") self:AddTransition("Stopped","Start","Running") self:AddTransition("*","Status","*") self:AddTransition("*","Stop","Stopped") -self.ExceptionSet=SET_GROUP:New():Clear(false) +self.ExceptionSet=nil +self._cached_zones={} self:HandleEvent(EVENTS.PlayerEnterAircraft,self._EventHandler) -self.lid=string.format("TIRESIAS %s | ",self.version) +self.lid="TIRESIAS "..self.version.." | " self:I(self.lid.."Managing ground groups!") self:__Start(1) return self @@ -57096,6 +58914,7 @@ end function TIRESIAS:SetActivationRanges(HeloMiles,PlaneMiles) self.HeloSwitchRange=HeloMiles or 10 self.PlaneSwitchRange=PlaneMiles or 25 +self._cached_zones={} return self end function TIRESIAS:SetAAARanges(FiringRange,SwitchAAA) @@ -57104,87 +58923,106 @@ self.SwitchAAA=(SwitchAAA==false)and false or true return self end function TIRESIAS:AddExceptionSet(Set) -self:T(self.lid.."AddExceptionSet") +self:T(self.lid.." AddExceptionSet") +if not self.ExceptionSet then +self.ExceptionSet=SET_GROUP:New() +end local exceptions=self.ExceptionSet -Set:ForEachGroupAlive( -function(grp) -if not grp.Tiresias then -grp.Tiresias={ -type="Exception", +local exception_data={ +type=" Exception", exception=true, } +Set:ForEachGroupAlive( +function(grp) +local inAAASet=self.AAASet:IsIncludeObject(grp) +local inVehSet=self.VehicleSet:IsIncludeObject(grp) +local inSAMSet=self.SAMSet:IsIncludeObject(grp) +if grp:IsGround()and(not grp.Tiresias)and(not inAAASet)and(not inVehSet)and(not inSAMSet)then +grp.Tiresias=exception_data exceptions:AddGroup(grp,true) +BASE:T(" TIRESIAS: Added exception group: "..grp:GetName()) end -BASE:T("TIRESIAS: Added exception group: "..grp:GetName()) end ) return self end function TIRESIAS._FilterNotAAA(Group) local grp=Group -local isaaa=grp:IsAAA() -if isaaa==true and grp:IsGround()and not grp:IsShip()then -return false -else +local is_air=grp:IsAir() +local is_ship=grp:IsShip() +local is_AAA=grp:IsAAA() +if is_air or grp:IsShip()then return true end +return not is_AAA end function TIRESIAS._FilterNotSAM(Group) local grp=Group -local issam=grp:IsSAM() -if issam==true and grp:IsGround()and not grp:IsShip()then -return false -else +local is_air=grp:IsGround() +local is_ship=grp:IsShip() +local is_SAM=grp:IsSAM() +if is_air or grp:IsShip()then return true end +return not is_SAM end function TIRESIAS._FilterAAA(Group) local grp=Group -local isaaa=grp:IsAAA() -if isaaa==true and grp:IsGround()and not grp:IsShip()then -return true -else +local is_ground=grp:IsGround() +if(not is_ground)or grp:IsShip()then return false end +return grp:IsAAA() end function TIRESIAS._FilterSAM(Group) local grp=Group -local issam=grp:IsSAM() -if issam==true and grp:IsGround()and not grp:IsShip()then -return true -else +local is_ground=grp:IsGround() +if(not is_ground)or grp:IsShip()then return false end +return grp:IsSAM() end function TIRESIAS:_InitGroups() -self:T(self.lid.."_InitGroups") +self:T(self.lid.." _InitGroups") local EngageRange=self.AAARange local SwitchAAA=self.SwitchAAA +local aaa_data_template={ +type=" AAA", +invisible=true, +range=EngageRange, +exception=false, +AIOff=SwitchAAA, +} +local vehicle_data_template={ +type=" Vehicle", +invisible=true, +AIOff=true, +exception=false, +} +local sam_data_template={ +type=" SAM", +invisible=true, +exception=false, +} self.AAASet:ForEachGroupAlive( function(grp) -if not grp.Tiresias then +local tiresias_data=grp.Tiresias +if not tiresias_data then grp:OptionEngageRange(EngageRange) grp:SetCommandInvisible(true) if SwitchAAA then grp:SetAIOff() grp:EnableEmission(false) end -grp.Tiresias={ -type="AAA", -invisible=true, -range=EngageRange, -exception=false, -AIOff=SwitchAAA, -} -end -if grp.Tiresias and(not grp.Tiresias.exception==true)then -if grp.Tiresias.invisible and grp.Tiresias.invisible==false then +grp.Tiresias=aaa_data_template +elseif not tiresias_data.exception==true then +if not tiresias_data.invisible==true then grp:SetCommandInvisible(true) -grp.Tiresias.invisible=true -if SwitchAAA then +tiresias_data.invisible=true +if SwitchAAA==true then grp:SetAIOff() grp:EnableEmission(false) -grp.Tiresias.AIOff=true +tiresias_data.AIOff=true end end end @@ -57192,39 +59030,31 @@ end ) self.VehicleSet:ForEachGroupAlive( function(grp) -if not grp.Tiresias then +local tiresias_data=grp.Tiresias +if not tiresias_data then grp:SetAIOff() grp:SetCommandInvisible(true) -grp.Tiresias={ -type="Vehicle", -invisible=true, -AIOff=true, -exception=false, -} -end -if grp.Tiresias and(not grp.Tiresias.exception==true)then -if grp.Tiresias and grp.Tiresias.invisible and grp.Tiresias.invisible==false then +grp.Tiresias=vehicle_data_template +elseif not tiresias_data.exception==true then +if not tiresias_data.invisible then grp:SetCommandInvisible(true) grp:SetAIOff() -grp.Tiresias.invisible=true +tiresias_data.invisible=true +tiresias_data.AIOff=true end end end ) self.SAMSet:ForEachGroupAlive( function(grp) -if not grp.Tiresias then +local tiresias_data=grp.Tiresias +if not tiresias_data then grp:SetCommandInvisible(true) -grp.Tiresias={ -type="SAM", -invisible=true, -exception=false, -} -end -if grp.Tiresias and(not grp.Tiresias.exception==true)then -if grp.Tiresias and grp.Tiresias.invisible and grp.Tiresias.invisible==false then +grp.Tiresias=sam_data_template +elseif not tiresias_data.exception==true then +if not tiresias_data.invisible then grp:SetCommandInvisible(true) -grp.Tiresias.invisible=true +tiresias_data.invisible=true end end end @@ -57232,52 +59062,64 @@ end return self end function TIRESIAS:_EventHandler(EventData) -self:T(string.format("%s Event = %d",self.lid,EventData.id)) +self:T(string.format(" %s Event = %d",self.lid,EventData.id)) local event=EventData if event.id==EVENTS.PlayerEnterAircraft or event.id==EVENTS.PlayerEnterUnit then -local unitname=event.IniUnitName or"none" -local _unit=event.IniUnit local _group=event.IniGroup if _group and _group:IsAlive()then -local radius=self.PlaneSwitchRange -if _group:IsHelicopter()then -radius=self.HeloSwitchRange -end +local radius=_group:IsHelicopter()and self.HeloSwitchRange or self.PlaneSwitchRange self:_SwitchOnGroups(_group,radius) end end return self end function TIRESIAS:_SwitchOnGroups(group,radius) -self:T(self.lid.."_SwitchOnGroups "..group:GetName().." Radius "..radius.." NM") -local zone=ZONE_GROUP:New("Zone-"..group:GetName(),group,UTILS.NMToMeters(radius)) -local ground=SET_GROUP:New():FilterCategoryGround():FilterZones({zone}):FilterOnce() +self:T(self.lid.." _SwitchOnGroups "..group:GetName().." Radius "..radius.." NM") +local group_name=group:GetName() +local cache_key=group_name.." _"..radius +local zone=self._cached_zones[cache_key] +local ground=self._cached_groupsets[cache_key] +if not zone then +zone=ZONE_GROUP:New(" Zone-"..group_name,group,UTILS.NMToMeters(radius)) +self._cached_zones[cache_key]=zone +else +zone:UpdateFromGroup(group) +end +if not ground then +ground=SET_GROUP:New():FilterCategoryGround():FilterZones({zone}):FilterOnce() +self._cached_groupsets[cache_key]=ground +else +ground:FilterZones({zone},true):FilterOnce() +end local count=ground:CountAlive() if self.debug then -local text=string.format("There are %d groups around this plane or helo!",count) -self:I(text) +self:I(string.format(" There are %d groups around this plane or helo!",count)) end +if count>0 then local SwitchAAA=self.SwitchAAA -if ground:CountAlive()>0 then +local group_coalition=group:GetCoalition() ground:ForEachGroupAlive( function(grp) -local name=grp:GetName() -if grp.Tiresias and grp.Tiresias.type and(not grp.Tiresias.exception==true)then -if grp.Tiresias.invisible==true then +local tiresias_data=grp.Tiresias +if grp:GetCoalition()~=group_coalition +and tiresias_data +and tiresias_data.type +and not tiresias_data.exception==true then +if tiresias_data.invisible==true then grp:SetCommandInvisible(false) -grp.Tiresias.invisible=false +tiresias_data.invisible=false end -if grp.Tiresias.type=="Vehicle"and grp.Tiresias.AIOff and grp.Tiresias.AIOff==true then +local grp_type=tiresias_data.type +if grp_type=="Vehicle"and tiresias_data.AIOff==true then grp:SetAIOn() -grp.Tiresias.AIOff=false -end -if SwitchAAA and grp.Tiresias.type=="AAA"and grp.Tiresias.AIOff and grp.Tiresias.AIOff==true then +tiresias_data.AIOff=false +elseif SwitchAAA==true and grp_type=="AAA"and tiresias_data.AIOff==true then grp:SetAIOn() grp:EnableEmission(true) -grp.Tiresias.AIOff=false +tiresias_data.AIOff=false end else -BASE:T("TIRESIAS - This group "..tostring(name).." has not been initialized or is an exception!") +BASE:T("TIRESIAS - This group "..tostring(grp:GetName()).." has not been initialized or is an exception!") end end ) @@ -57290,17 +59132,37 @@ local VehicleSet=SET_GROUP:New():FilterCategoryGround():FilterFunction(TIRESIAS. local AAASet=SET_GROUP:New():FilterCategoryGround():FilterFunction(TIRESIAS._FilterAAA):FilterStart() local SAMSet=SET_GROUP:New():FilterCategoryGround():FilterFunction(TIRESIAS._FilterSAM):FilterStart() local OpsGroupSet=SET_OPSGROUP:New():FilterActive(true):FilterStart() -self.FlightSet=SET_GROUP:New():FilterCategories({"plane","helicopter"}):FilterStart() +self.FlightSet=SET_GROUP:New():FilterCategories({" plane"," helicopter"}):FilterStart() local EngageRange=self.AAARange +local SwitchAAA=self.SwitchAAA local ExceptionSet=self.ExceptionSet -if self.ExceptionSet then -function ExceptionSet:OnAfterAdded(From,Event,To,ObjectName,Object) -BASE:I("TIRESIAS: EXCEPTION Object Added: "..Object:GetName()) -if Object and Object:IsAlive()then -Object.Tiresias={ -type="Exception", +local exception_data={ +type=" Exception", exception=true, } +local vehicle_data={ +type=" Vehicle", +invisible=true, +AIOff=true, +exception=false, +} +local aaa_data={ +type=" AAA", +invisible=true, +range=EngageRange, +exception=false, +AIOff=SwitchAAA, +} +local sam_data={ +type=" SAM", +invisible=true, +exception=false, +} +if ExceptionSet then +function ExceptionSet:OnAfterAdded(From,Event,To,ObjectName,Object) +BASE:I(" TIRESIAS: EXCEPTION Object Added: "..Object:GetName()) +if Object and Object:IsAlive()then +Object.Tiresias=exception_data Object:SetAIOn() Object:SetCommandInvisible(false) Object:EnableEmission(true) @@ -57318,46 +59180,30 @@ ExceptionSet:AddGroup(grp,true) end end function VehicleSet:OnAfterAdded(From,Event,To,ObjectName,Object) -BASE:I("TIRESIAS: VEHCILE Object Added: "..Object:GetName()) +BASE:T(" TIRESIAS: VEHICLE Object Added: "..Object:GetName()) if Object and Object:IsAlive()then Object:SetAIOff() Object:SetCommandInvisible(true) -Object.Tiresias={ -type="Vehicle", -invisible=true, -AIOff=true, -exception=false, -} +Object.Tiresias=vehicle_data end end -local SwitchAAA=self.SwitchAAA function AAASet:OnAfterAdded(From,Event,To,ObjectName,Object) if Object and Object:IsAlive()then -BASE:I("TIRESIAS: AAA Object Added: "..Object:GetName()) +BASE:I(" TIRESIAS: AAA Object Added: "..Object:GetName()) Object:OptionEngageRange(EngageRange) Object:SetCommandInvisible(true) if SwitchAAA then Object:SetAIOff() Object:EnableEmission(false) end -Object.Tiresias={ -type="AAA", -invisible=true, -range=EngageRange, -exception=false, -AIOff=SwitchAAA, -} +Object.Tiresias=aaa_data end end function SAMSet:OnAfterAdded(From,Event,To,ObjectName,Object) if Object and Object:IsAlive()then -BASE:I("TIRESIAS: SAM Object Added: "..Object:GetName()) +BASE:T(" TIRESIAS: SAM Object Added: "..Object:GetName()) Object:SetCommandInvisible(true) -Object.Tiresias={ -type="SAM", -invisible=true, -exception=false, -} +Object.Tiresias=sam_data end end self.VehicleSet=VehicleSet @@ -57370,10 +59216,7 @@ return self end function TIRESIAS:onbeforeStatus(From,Event,To) self:T({From,Event,To}) -if self:GetState()=="Stopped"then -return false -end -return self +return self:GetState()~=" Stopped" end function TIRESIAS:onafterStatus(From,Event,To) self:T({From,Event,To}) @@ -57381,22 +59224,22 @@ if self.debug then local count=self.VehicleSet:CountAlive() local AAAcount=self.AAASet:CountAlive() local SAMcount=self.SAMSet:CountAlive() -local text=string.format("Overall: %d | Vehicles: %d | AAA: %d | SAM: %d",count+AAAcount+SAMcount,count,AAAcount,SAMcount) -self:I(text) +self:I(string.format(" Overall: %d | Vehicles: %d | AAA: %d | SAM: %d", +count+AAAcount+SAMcount,count,AAAcount,SAMcount)) end self:_InitGroups() -if self.FlightSet:CountAlive()>0 then +local flight_count=self.FlightSet:CountAlive() +if flight_count>0 then local Set=self.FlightSet:GetAliveSet() -for _,_plane in pairs(Set)do +local helo_range=self.HeloSwitchRange +local plane_range=self.PlaneSwitchRange +for _,_plane in pairs(Set or{})do local plane=_plane -local radius=self.PlaneSwitchRange -if plane:IsHelicopter()then -radius=self.HeloSwitchRange -end -self:_SwitchOnGroups(_plane,radius) +local radius=plane:IsHelicopter()and helo_range or plane_range +self:_SwitchOnGroups(plane,radius) end end -if self:GetState()~="Stopped"then +if self:GetState()~=" Stopped"then self:__Status(self.Interval) end return self @@ -57404,6 +59247,7 @@ end function TIRESIAS:onafterStop(From,Event,To) self:T({From,Event,To}) self:UnHandleEvent(EVENTS.PlayerEnterAircraft) +self._cached_zones={} return self end STRATEGO={ @@ -58991,6 +60835,8 @@ C2A="C2A_Greyhound", RHINOE="FA-18E", RHINOF="FA-18F", GROWLER="EA-18G", +CORSAIR="F4U-1D", +CORSAIR_CW="F4U-1D CW", } AIRBOSS.CarrierType={ ROOSEVELT="CVN_71", @@ -58999,7 +60845,12 @@ WASHINGTON="CVN_73", TRUMAN="CVN_75", STENNIS="Stennis", FORRESTAL="Forrestal", +ENTERPRISE66="USS Enterprise 1966", +ENTERPRISEMODERN="cvn-65", VINSON="VINSON", +ESSEX="Essex", +BONHOMMERICHARD="USS Bon Homme Richard", +ESSEXSCB125="essex_scb125", HERMES="HERMES81", INVINCIBLE="hms_invincible", TARAWA="LHA_Tarawa", @@ -59033,6 +60884,7 @@ GROOVE_IM="Groove In the Middle", GROOVE_IC="Groove In Close", GROOVE_AR="Groove At the Ramp", GROOVE_IW="Groove In the Wires", +GROOVE_IWs="Groove In the Wires stopped?", GROOVE_AL="Groove Abeam Landing Spot", GROOVE_LC="Groove Level Cross", BOLTER="Bolter Pattern", @@ -59056,7 +60908,7 @@ HARD="TOPGUN Graduate", } AIRBOSS.MenuF10={} AIRBOSS.MenuF10Root=nil -AIRBOSS.version="1.3.3" +AIRBOSS.version="1.4.2" function AIRBOSS:New(carriername,alias) local self=BASE:Inherit(self,FSM:New()) self:F2({carriername=carriername,alias=alias}) @@ -59091,6 +60943,7 @@ self:SetBeaconRefresh() self:SetMaxLandingPattern() self:SetMaxMarshalStacks() self:SetMaxSectionSize() +self:SetMaxSectionDistance() self:SetMaxFlightsPerStack() self:SetHandleAION() self:SetExtraVoiceOvers(false) @@ -59134,8 +60987,18 @@ elseif self.carriertype==AIRBOSS.CarrierType.TRUMAN then self:_InitNimitz() elseif self.carriertype==AIRBOSS.CarrierType.FORRESTAL then self:_InitForrestal() +elseif self.carriertype==AIRBOSS.CarrierType.ENTERPRISE66 then +self:_InitEnterprise() +elseif self.carriertype==AIRBOSS.CarrierType.ENTERPRISEMODERN then +self:_InitEnterprise() elseif self.carriertype==AIRBOSS.CarrierType.VINSON then self:_InitStennis() +elseif self.carriertype==AIRBOSS.CarrierType.ESSEX then +self:_InitEssex() +elseif self.carriertype==AIRBOSS.CarrierType.BONHOMMERICHARD then +self:_InitBonHommeRichard() +elseif self.carriertype==AIRBOSS.CarrierType.ESSEXSCB125 then +self:_InitEssexSCB125() elseif self.carriertype==AIRBOSS.CarrierType.HERMES then self:_InitHermes() elseif self.carriertype==AIRBOSS.CarrierType.INVINCIBLE then @@ -59236,6 +61099,10 @@ self:AddTransition("*","Save","*") self:AddTransition("*","Stop","Stopped") return self end +function AIRBOSS:SetCarrierIllumination(Mode) +self.carrier:SetCarrierIlluminationMode(Mode) +return self +end function AIRBOSS:SetWelcomePlayers(Switch) self.welcome=Switch return self @@ -59461,7 +61328,12 @@ self.Tmessage=Duration or 10 return self end function AIRBOSS:SetGlideslopeErrorThresholds(_max,_min,High,HIGH,Low,LOW) -if self.carriertype==AIRBOSS.CarrierType.INVINCIBLE or self.carriertype==AIRBOSS.CarrierType.HERMES or self.carriertype==AIRBOSS.CarrierType.TARAWA or self.carriertype==AIRBOSS.CarrierType.AMERICA or self.carriertype==AIRBOSS.CarrierType.JCARLOS or self.carriertype==AIRBOSS.CarrierType.CANBERRA then +if self.carriertype==AIRBOSS.CarrierType.INVINCIBLE or +self.carriertype==AIRBOSS.CarrierType.HERMES or +self.carriertype==AIRBOSS.CarrierType.TARAWA or +self.carriertype==AIRBOSS.CarrierType.AMERICA or +self.carriertype==AIRBOSS.CarrierType.JCARLOS or +self.carriertype==AIRBOSS.CarrierType.CANBERRA then self.gle._max=_max or 0.7 self.gle.High=High or 1.4 self.gle.HIGH=HIGH or 1.9 @@ -59579,19 +61451,19 @@ self.SRS:SetCoalition(self:GetCoalition()) self.SRS:SetCoordinate(self:GetCoordinate()) self.SRS:SetCulture(Culture or"en-US") self.SRS:SetGender(Gender or"male") -self.SRS:SetPath(PathToSRS) -self.SRS:SetPort(Port or 5002) +self.SRS:SetPort(Port or MSRS.port or 5002) self.SRS:SetLabel(self.AirbossRadio.alias or"AIRBOSS") self.SRS:SetCoordinate(self.carrier:GetCoordinate()) self.SRS:SetVolume(Volume or 1) if GoogleCreds then -self.SRS:SetProviderOptionsGoogle(GoogleCreds,GoogleCreds) -self.SRS:SetProvider(MSRS.Provider.GOOGLE) +self.SRS:SetGoogle(GoogleCreds) end if Voice then self.SRS:SetVoice(Voice) end -self.SRS:SetVolume(Volume or 1.0) +if(not Voice)and self.SRS and self.SRS:GetProvider()==MSRS.Provider.GOOGLE then +self.SRS.voice=MSRS.poptions["gcloud"].voice or MSRS.Voices.Google.Standard.en_US_Standard_B +end self.SRSQ=MSRSQUEUE:New("AIRBOSS") self.SRSQ:SetTransmitOnlyWithPlayers(true) if not self.PilotRadio then @@ -59721,6 +61593,17 @@ nmax=math.min(nmax,4) self.NmaxSection=nmax-1 return self end +function AIRBOSS:SetMaxSectionDistance(dmax) +if dmax then +if dmax<10 then +dmax=10 +elseif dmax>5000 then +dmax=5000 +end +end +self.maxsectiondistance=dmax or 100 +return self +end function AIRBOSS:SetMaxFlightsPerStack(nmax) nmax=nmax or 2 nmax=math.max(nmax,1) @@ -59855,7 +61738,6 @@ self:HandleEvent(EVENTS.Ejection) self:HandleEvent(EVENTS.PlayerLeaveUnit,self._PlayerLeft) self:HandleEvent(EVENTS.MissionEnd) self:HandleEvent(EVENTS.RemoveUnit) -self:HandleEvent(EVENTS.UnitLost,self.OnEventRemoveUnit) self.StatusTimer=TIMER:New(self._Status,self):Start(2,0.5) self:__Status(1) end @@ -60256,7 +62138,7 @@ self.BreakEntry.LimitZmin=nil self.BreakEntry.LimitZmax=nil self.BreakEarly.name="Early Break" self.BreakEarly.Xmin=-UTILS.NMToMeters(1) -self.BreakEarly.Xmax=UTILS.NMToMeters(5) +self.BreakEarly.Xmax=UTILS.NMToMeters(7) self.BreakEarly.Zmin=-UTILS.NMToMeters(2) self.BreakEarly.Zmax=UTILS.NMToMeters(1) self.BreakEarly.LimitXmin=0 @@ -60265,7 +62147,7 @@ self.BreakEarly.LimitZmin=-UTILS.NMToMeters(0.2) self.BreakEarly.LimitZmax=nil self.BreakLate.name="Late Break" self.BreakLate.Xmin=-UTILS.NMToMeters(1) -self.BreakLate.Xmax=UTILS.NMToMeters(5) +self.BreakLate.Xmax=UTILS.NMToMeters(7) self.BreakLate.Zmin=-UTILS.NMToMeters(2) self.BreakLate.Zmax=UTILS.NMToMeters(1) self.BreakLate.LimitXmin=0 @@ -60274,7 +62156,7 @@ self.BreakLate.LimitZmin=-UTILS.NMToMeters(0.8) self.BreakLate.LimitZmax=nil self.Abeam.name="Abeam Position" self.Abeam.Xmin=-UTILS.NMToMeters(5) -self.Abeam.Xmax=UTILS.NMToMeters(5) +self.Abeam.Xmax=UTILS.NMToMeters(7) self.Abeam.Zmin=-UTILS.NMToMeters(2) self.Abeam.Zmax=500 self.Abeam.LimitXmin=-200 @@ -60331,7 +62213,7 @@ self.carrierparam.rwywidth=25 self.carrierparam.wire1=55 self.carrierparam.wire2=67 self.carrierparam.wire3=79 -self.carrierparam.wire4=92 +self.carrierparam.wire4=96 self.carrierparam.landingdist=self.carrierparam.sterndist+self.carrierparam.wire3 end function AIRBOSS:_InitForrestal() @@ -60350,6 +62232,58 @@ self.carrierparam.wire3=64 self.carrierparam.wire4=74 self.carrierparam.landingdist=self.carrierparam.sterndist+self.carrierparam.wire3 end +function AIRBOSS:_InitEnterprise() +self:_InitForrestal() +self.carrierparam.sterndist=-164.30 +self.carrierparam.deckheight=19.52 +self.carrierparam.totlength=335 +self.carrierparam.rwylength=223 +self.carrierparam.wire1=57.7 +self.carrierparam.wire2=69.6 +self.carrierparam.wire3=79.5 +self.carrierparam.wire4=90.0 +end +function AIRBOSS:_InitEssex() +self:_InitNimitz() +self.carrierparam.sterndist=-126 +self.carrierparam.deckheight=19.27 +self.carrierparam.totlength=268 +self.carrierparam.totwidthport=23 +self.carrierparam.totwidthstarboard=23 +self.carrierparam.rwyangle=0.0 +self.carrierparam.rwylength=265 +self.carrierparam.rwywidth=20 +self.carrierparam.wire1=21.9 +self.carrierparam.wire2=28.3 +self.carrierparam.wire3=34.7 +self.carrierparam.wire4=41.1 +self.carrierparam.wire5=47.4 +self.carrierparam.wire6=53.7 +self.carrierparam.wire7=59.0 +self.carrierparam.wire8=64.1 +self.carrierparam.wire9=72.7 +self.carrierparam.wire10=78.0 +self.carrierparam.wire11=85.5 +self.carrierparam.wire12=105.9 +self.carrierparam.wire13=113.3 +self.carrierparam.wire14=121.0 +self.carrierparam.wire15=128.5 +self.carrierparam.landingdist=self.carrierparam.sterndist+self.carrierparam.wire3 +end +function AIRBOSS:_InitBonHommeRichard() +self:_InitEssex() +self.carrierparam.deckheight=16.95 +self.carrierparam.rwyangle=-11.4 +self.carrierparam.rwylength=97 +self.carrierparam.rwywidth=20 +self.carrierparam.wire1=40.4 +self.carrierparam.wire2=45 +self.carrierparam.wire3=51 +self.carrierparam.wire4=58.1 +end +function AIRBOSS:_InitEssexSCB125() +self:_InitBonHommeRichard() +end function AIRBOSS:_InitHermes() self:_InitStennis() self.carrierparam.sterndist=-105 @@ -60622,6 +62556,7 @@ self.LSOCall.N7.duration=0.51 self.LSOCall.N8.duration=0.38 self.LSOCall.N9.duration=0.34 self.LSOCall.PADDLESCONTACT.duration=0.91 +self.LSOCall.POWERsoft.duration=0.9 self.LSOCall.POWER.duration=0.45 self.LSOCall.RADIOCHECK.duration=0.90 self.LSOCall.RIGHTFORLINEUP.duration=0.70 @@ -60669,6 +62604,7 @@ self.LSOCall.N8.duration=0.37 self.LSOCall.N9.duration=0.40 self.LSOCall.PADDLESCONTACT.duration=1.00 self.LSOCall.POWER.duration=0.50 +self.LSOCall.POWERsoft.duration=0.9 self.LSOCall.RADIOCHECK.duration=1.10 self.LSOCall.RIGHTFORLINEUP.duration=0.80 self.LSOCall.ROGERBALL.duration=1.00 @@ -60741,6 +62677,7 @@ RIGHTFORLINEUP={file="LSO-RightForLineup",suffix="ogg",loud=true,subtitle="Right HIGH={file="LSO-High",suffix="ogg",loud=true,subtitle="You're high",duration=0.65,subduration=1}, LOW={file="LSO-Low",suffix="ogg",loud=true,subtitle="You're low",duration=0.50,subduration=1}, POWER={file="LSO-Power",suffix="ogg",loud=true,subtitle="Power",duration=0.50,subduration=1}, +POWERsoft={file="LSO-Power-soft",suffix="ogg",loud=false,subtitle="Power-soft",duration=0.90,subduration=1}, SLOW={file="LSO-Slow",suffix="ogg",loud=true,subtitle="You're slow",duration=0.65,subduration=1}, FAST={file="LSO-Fast",suffix="ogg",loud=true,subtitle="You're fast",duration=0.70,subduration=1}, ROGERBALL={file="LSO-RogerBall",suffix="ogg",loud=false,subtitle="Roger ball",duration=1.00,subduration=2}, @@ -60854,6 +62791,7 @@ local goshawk=playerData.actype==AIRBOSS.AircraftCarrier.T45C local skyhawk=playerData.actype==AIRBOSS.AircraftCarrier.A4EC local harrier=playerData.actype==AIRBOSS.AircraftCarrier.AV8B local tomcat=playerData.actype==AIRBOSS.AircraftCarrier.F14A or playerData.actype==AIRBOSS.AircraftCarrier.F14B +local corsair=playerData.actype==AIRBOSS.AircraftCarrier.CORSAIR or playerData.actype==AIRBOSS.AircraftCarrier.CORSAIR_CW local aoa={} if hornet then aoa.SLOW=9.8 @@ -60864,13 +62802,13 @@ aoa.OnSpeedMin=7.4 aoa.Fast=6.9 aoa.FAST=6.3 elseif tomcat then -aoa.SLOW=self:_AoAUnit2Deg(playerData,17.0) -aoa.Slow=self:_AoAUnit2Deg(playerData,16.0) -aoa.OnSpeedMax=self:_AoAUnit2Deg(playerData,15.5) +aoa.SLOW=self:_AoAUnit2Deg(playerData,17.5) +aoa.Slow=self:_AoAUnit2Deg(playerData,16.5) +aoa.OnSpeedMax=self:_AoAUnit2Deg(playerData,16.0) aoa.OnSpeed=self:_AoAUnit2Deg(playerData,15.0) -aoa.OnSpeedMin=self:_AoAUnit2Deg(playerData,14.5) -aoa.Fast=self:_AoAUnit2Deg(playerData,14.0) -aoa.FAST=self:_AoAUnit2Deg(playerData,13.0) +aoa.OnSpeedMin=self:_AoAUnit2Deg(playerData,14.0) +aoa.Fast=self:_AoAUnit2Deg(playerData,13.5) +aoa.FAST=self:_AoAUnit2Deg(playerData,12.5) elseif goshawk then aoa.SLOW=8.00 aoa.Slow=7.75 @@ -60880,13 +62818,13 @@ aoa.OnSpeedMin=6.75 aoa.Fast=6.25 aoa.FAST=6.00 elseif skyhawk then -aoa.SLOW=9.50 -aoa.Slow=9.25 -aoa.OnSpeedMax=9.00 +aoa.SLOW=10.50 +aoa.Slow=9.50 +aoa.OnSpeedMax=9.25 aoa.OnSpeed=8.75 -aoa.OnSpeedMin=8.50 -aoa.Fast=8.25 -aoa.FAST=8.00 +aoa.OnSpeedMin=8.25 +aoa.Fast=8.00 +aoa.FAST=7.00 elseif harrier then aoa.SLOW=16.0 aoa.Slow=13.5 @@ -60895,6 +62833,14 @@ aoa.OnSpeed=10.0 aoa.OnSpeedMin=9.5 aoa.Fast=8.0 aoa.FAST=7.5 +elseif corsair then +aoa.SLOW=16.0 +aoa.Slow=13.5 +aoa.OnSpeedMax=12.5 +aoa.OnSpeed=10.0 +aoa.OnSpeedMin=9.5 +aoa.Fast=8.0 +aoa.FAST=7.5 end return aoa end @@ -60928,6 +62874,7 @@ local skyhawk=playerData.actype==AIRBOSS.AircraftCarrier.A4EC local tomcat=playerData.actype==AIRBOSS.AircraftCarrier.F14A or playerData.actype==AIRBOSS.AircraftCarrier.F14B local harrier=playerData.actype==AIRBOSS.AircraftCarrier.AV8B local goshawk=playerData.actype==AIRBOSS.AircraftCarrier.T45C +local corsair=playerData.actype==AIRBOSS.AircraftCarrier.CORSAIR or playerData.actype==AIRBOSS.AircraftCarrier.CORSAIR_CW local alt local aoa local dist @@ -60964,6 +62911,9 @@ speed=UTILS.KnotsToMps(250) elseif goshawk then alt=UTILS.FeetToMeters(800) speed=UTILS.KnotsToMps(300) +elseif corsair then +alt=UTILS.FeetToMeters(300) +speed=UTILS.KnotsToMps(120) end elseif step==AIRBOSS.PatternStep.BREAKENTRY then if hornet or tomcat or harrier then @@ -60975,24 +62925,36 @@ speed=UTILS.KnotsToMps(250) elseif goshawk then alt=UTILS.FeetToMeters(800) speed=UTILS.KnotsToMps(300) +elseif corsair then +alt=UTILS.FeetToMeters(200) +speed=UTILS.KnotsToMps(110) end elseif step==AIRBOSS.PatternStep.EARLYBREAK then if hornet or tomcat or harrier or goshawk then alt=UTILS.FeetToMeters(800) elseif skyhawk then alt=UTILS.FeetToMeters(600) +elseif corsair then +alt=UTILS.FeetToMeters(200) +speed=UTILS.KnotsToMps(100) end elseif step==AIRBOSS.PatternStep.LATEBREAK then if hornet or tomcat or harrier or goshawk then alt=UTILS.FeetToMeters(800) elseif skyhawk then alt=UTILS.FeetToMeters(600) +elseif corsair then +alt=UTILS.FeetToMeters(150) +speed=UTILS.KnotsToMps(100) end elseif step==AIRBOSS.PatternStep.ABEAM then if hornet or tomcat or harrier or goshawk then alt=UTILS.FeetToMeters(600) elseif skyhawk then alt=UTILS.FeetToMeters(500) +elseif corsair then +alt=UTILS.FeetToMeters(150) +speed=UTILS.KnotsToMps(90) end aoa=aoaac.OnSpeed if goshawk then @@ -61011,6 +62973,9 @@ elseif skyhawk then alt=UTILS.FeetToMeters(500) elseif harrier then alt=UTILS.FeetToMeters(425) +elseif corsair then +alt=UTILS.FeetToMeters(90) +speed=UTILS.KnotsToMps(90) end aoa=aoaac.OnSpeed elseif step==AIRBOSS.PatternStep.WAKE then @@ -61020,6 +62985,8 @@ elseif tomcat then alt=UTILS.FeetToMeters(430) elseif skyhawk then alt=UTILS.FeetToMeters(370) +elseif corsair then +alt=UTILS.FeetToMeters(80) end aoa=aoaac.OnSpeed elseif step==AIRBOSS.PatternStep.FINAL then @@ -61031,6 +62998,8 @@ elseif skyhawk then alt=UTILS.FeetToMeters(300) elseif harrier then alt=UTILS.FeetToMeters(312) +elseif corsair then +alt=UTILS.FeetToMeters(80) end aoa=aoaac.OnSpeed end @@ -61421,6 +63390,8 @@ elseif flight.actype==AIRBOSS.AircraftCarrier.F14A_AI or flight.actype==AIRBOSS. Speed=UTILS.KnotsToKmph(175) elseif flight.actype==AIRBOSS.AircraftCarrier.S3B or flight.actype==AIRBOSS.AircraftCarrier.S3BTANKER then Speed=UTILS.KnotsToKmph(140) +elseif flight.actype==AIRBOSS.AircraftCarrier.CORSAIR or flight.actype==AIRBOSS.AircraftCarrier.CORSAIR_CW then +Speed=UTILS.KnotsToKmph(100) end local Carrier=self:GetCoordinate() local hdg=self:GetHeading() @@ -62147,6 +64118,28 @@ if playerData then local unit=playerData.unit if unit and unit:IsAlive()then if unit:IsInZone(self.zoneCCA)then +if playerData.step==AIRBOSS.PatternStep.WAKE then +if math.abs(playerData.unit:GetRoll())>35 and math.abs(playerData.unit:GetRoll())<=40 then +playerData.wrappedUpAtWakeLittle=true +elseif math.abs(playerData.unit:GetRoll())>40 and math.abs(playerData.unit:GetRoll())<=45 then +playerData.wrappedUpAtWakeFull=true +elseif math.abs(playerData.unit:GetRoll())>45 then +playerData.wrappedUpAtWakeUnderline=true +elseif math.abs(playerData.unit:GetRoll())<20 and math.abs(playerData.unit:GetRoll())>=10 then +playerData.AAatWakeLittle=true +elseif math.abs(playerData.unit:GetRoll())<10 and math.abs(playerData.unit:GetRoll())>=2 then +playerData.AAatWakeFull=true +elseif math.abs(playerData.unit:GetRoll())<2 then +playerData.AAatWakeUnderline=true +else +end +if math.abs(playerData.unit:GetAoA())>=15 then +playerData.AFU=true +elseif math.abs(playerData.unit:GetAoA())<=5 then +playerData.AFU=true +else +end +end if playerData.attitudemonitor then self:_AttitudeMonitor(playerData) end @@ -62248,7 +64241,7 @@ end end function AIRBOSS:_SetTimeInGroove(playerData) if playerData.TIG0 then -playerData.Tgroove=timer.getTime()-playerData.TIG0 +playerData.Tgroove=timer.getTime()-playerData.TIG0-1.5 else playerData.Tgroove=999 end @@ -62528,13 +64521,13 @@ end function AIRBOSS:OnEventRemoveUnit(EventData) self:F3({eventland=EventData}) if EventData==nil then -self:E(self.lid.."ERROR: EventData=nil in event REMOVEUNIT!") -self:E(EventData) +self:T(self.lid.."ERROR: EventData=nil in event REMOVEUNIT!") +self:T(EventData) return end if EventData.IniUnit==nil then -self:E(self.lid.."ERROR: EventData.IniUnit=nil in event REMOVEUNIT!") -self:E(EventData) +self:T(self.lid.."ERROR: EventData.IniUnit=nil in event REMOVEUNIT!") +self:T(EventData) return end local _unitName=EventData.IniUnitName @@ -62819,7 +64812,17 @@ function AIRBOSS:_DirtyUp(playerData) self:_CheckCorridor(playerData) local inzone=playerData.unit:IsInZone(self:_GetZoneDirtyUp(playerData.case)) if inzone then -self:_PlayerHint(playerData) +playerData.Tgroove=timer.getTime()-playerData.TIG0-1.5 +playerData.wrappedUpAtWakeLittle=false +playerData.wrappedUpAtWakeFull=false +playerData.wrappedUpAtWakeUnderline=false +playerData.wrappedUpAtStartLittle=false +playerData.wrappedUpAtStartFull=false +playerData.wrappedUpAtStartUnderline=false +playerData.AAatWakeLittle=false +playerData.AAatWakeFull=false +playerData.AAatWakeUnderline=false +playerData.AFU=false if playerData.actype==AIRBOSS.AircraftCarrier.HORNET or playerData.actype==AIRBOSS.AircraftCarrier.F14A or playerData.actype==AIRBOSS.AircraftCarrier.F14B @@ -62879,9 +64882,77 @@ if self:_CheckAbort(X,Z,self.BreakEntry)then self:_AbortPattern(playerData,X,Z,self.BreakEntry,true) return end +local stern=self:_GetSternCoord() +local coord=playerData.unit:GetCoordinate() +local dist=coord:Get2DDistance(stern) +local playerCallsign=playerData.unit:GetCallsign() +local playerName=playerData.name +local unit=playerData.unit +local unitClient=Unit.getByName(unit:GetName()) +local hookArgument=unitClient:getDrawArgumentValue(25) +local hookArgument_Tomcat=unitClient:getDrawArgumentValue(1305) +local speedMPS=playerData.unit:GetVelocityMPS() +local speedKTS=UTILS.MpsToKnots(speedMPS) +local player_alt=playerData.unit:GetAltitude() +player_alt_feet=player_alt*3.28 +player_alt_feet=player_alt_feet/10 +player_alt_feet=math.floor(player_alt_feet)*10 +local player_velocity_round=speedKTS*1.00 +player_velocity_round=player_velocity_round/10 +player_velocity_round=math.floor(player_velocity_round)*10 +local player_alt_feet=player_alt*3.28 +player_alt_feet=player_alt_feet/10 +player_alt_feet=math.floor(player_alt_feet)*10 +local Play_SH_Sound=USERSOUND:New("Airboss Soundfiles/GreatBallsOfFire.ogg") +local Play_666SH_Sound=USERSOUND:New("Airboss Soundfiles/Runninwiththedevil.ogg") +local playerType=playerData.actype +if dist<1000 and clientSHBFlag==false then +if speedKTS>450 and speedKTS<590 then +if player_alt_feet<1500 then +if hookArgument>0 or hookArgument_Tomcat>0 then +playerData.shb=true +trigger.action.outText(playerName..' performing a Sierra Hotel Break in a '..playerType,10) +local sh_message_to_discord=('**'..playerName..' is performing a Sierra Hotel Break in a '..playerType..' at '..player_velocity_round..' knots and '..player_alt_feet..' feet!**') +HypeMan.sendBotMessage(sh_message_to_discord) +Play_SH_Sound:ToAll() +clientSHBFlag=true +else +playerData.shb=false +end +else +end +elseif speedKTS>589 then +if player_alt_feet<625 and player_alt_feet>575 then +if hookArgument>0 or hookArgument_Tomcat>0 then +playerData.shb=true +trigger.action.outText(playerName..' performing a 666 Sierra Hotel Break in a '..playerType,10) +local sh_message_to_discord=('**'..playerName..' is performing a 666 Sierra Hotel Break in a '..playerType..' at '..player_velocity_round..' knots and '..player_alt_feet..' feet!**') +HypeMan.sendBotMessage(sh_message_to_discord) +Play_666SH_Sound:ToAll() +clientSHBFlag=true +else +playerData.shb=false +end +else +if hookArgument>0 or hookArgument_Tomcat>0 then +playerData.shb=true +trigger.action.outText(playerName..' performing a Sierra Hotel Break in a '..playerType,10) +local sh_message_to_discord=('**'..playerName..' is performing a Sierra Hotel Break in a '..playerType..' at '..player_velocity_round..' knots and '..player_alt_feet..' feet!**') +HypeMan.sendBotMessage(sh_message_to_discord) +Play_SH_Sound:ToAll() +clientSHBFlag=true +else +playerData.shb=false +end +end +else +end +else +end if self:_CheckLimits(X,Z,self.BreakEntry)then self:_PlayerHint(playerData) self:_SetPlayerStep(playerData,AIRBOSS.PatternStep.EARLYBREAK) +clientSHBFlag=false end end function AIRBOSS:_Break(playerData,part) @@ -62953,6 +65024,16 @@ self:_SetPlayerStep(playerData,AIRBOSS.PatternStep.NINETY) end end function AIRBOSS:_Ninety(playerData) +playerData.wrappedUpAtWakeLittle=false +playerData.wrappedUpAtWakeFull=false +playerData.wrappedUpAtWakeUnderline=false +playerData.wrappedUpAtStartLittle=false +playerData.wrappedUpAtStartFull=false +playerData.wrappedUpAtStartUnderline=false +playerData.AAatWakeLittle=false +playerData.AAatWakeFull=false +playerData.AAatWakeUnderline=false +playerData.AFU=false local X,Z=self:_GetDistances(playerData.unit) if self:_CheckAbort(X,Z,self.Ninety)then self:_AbortPattern(playerData,X,Z,self.Ninety,true) @@ -63005,6 +65086,9 @@ groovedata.Alt=self:_GetAltCarrier(playerData.unit) groovedata.AoA=playerData.unit:GetAoA() groovedata.GSE=self:_Glideslope(playerData.unit) groovedata.LUE=self:_Lineup(playerData.unit,true) +groovedata.LUEwire=self:_LineupWIRE(playerData.unit,true) +groovedata.LeftNozzle=self:_NozzleArgumentLeft(playerData.unit) +groovedata.RightNozzle=self:_NozzleArgumentRight(playerData.unit) groovedata.Roll=playerData.unit:GetRoll() groovedata.Pitch=playerData.unit:GetPitch() groovedata.Yaw=playerData.unit:GetYaw() @@ -63043,6 +65127,7 @@ local RXX=UTILS.NMToMeters(0.750) local RIM=UTILS.NMToMeters(0.500) local RIC=UTILS.NMToMeters(0.250) local RAR=UTILS.NMToMeters(0.040) +local RIW=UTILS.NMToMeters(-0.020) local groovedata=self:_GetGrooveData(playerData) table.insert(playerData.trapsheet,groovedata) local X=groovedata.X @@ -63055,7 +65140,7 @@ local rho=groovedata.Rho local lineupError=groovedata.LUE local glideslopeError=groovedata.GSE local AoA=groovedata.AoA -if rho<=RXX and playerData.step==AIRBOSS.PatternStep.GROOVE_XX and(math.abs(groovedata.Roll)<=4.0 and playerData.unit:IsInZone(self:_GetZoneLineup()))then +if rho<=RXX and playerData.step==AIRBOSS.PatternStep.GROOVE_XX and(math.abs(groovedata.Roll)<=3.5 or playerData.unit:IsInZone(self:_GetZoneLineup()))then playerData.TIG0=timer.getTime() self:RadioTransmission(self.LSORadio,self.LSOCall.CALLTHEBALL,nil,nil,nil,true) playerData.Tlso=timer.getTime() @@ -63076,6 +65161,8 @@ self:_SetPlayerStep(playerData,AIRBOSS.PatternStep.GROOVE_AL) else self:_SetPlayerStep(playerData,AIRBOSS.PatternStep.GROOVE_IW) end +elseif rho<=RIW and playerData.step==AIRBOSS.PatternStep.GROOVE_IW then +playerData.groove.IW=UTILS.DeepCopy(groovedata) elseif rho<=RAR and playerData.step==AIRBOSS.PatternStep.GROOVE_AL then playerData.groove.AL=UTILS.DeepCopy(groovedata) local ZoneALS=self:_GetZoneAbeamLandingSpot() @@ -63119,6 +65206,37 @@ local gd=playerData.groove[gs] if gd then self:T3(gd) local d=UTILS.MetersToNM(rho) +if playerData.case~=3 then +if playerData.wrappedUpAtWakeUnderline==true or playerData.wrappedUpAtStartUnderline==true then +gd.WrappedUp="_WU_" +elseif playerData.wrappedUpAtWakeUnderline==false and playerData.wrappedUpAtStartUnderline==false then +if playerData.wrappedUpAtWakeFull==true or playerData.wrappedUpAtStartFull==true then +gd.WrappedUp="WU" +elseif playerData.wrappedUpAtStartFull==false then +if playerData.wrappedUpAtWakeLittle==true or playerData.wrappedUpAtStartLittle==true then +gd.WrappedUp="(WU)" +end +end +else +end +if playerData.AAatWakeUnderline==true then +gd.AngledApch="_AA_" +elseif playerData.AAatWakeUnderline==false then +if playerData.AAatWakeFull==true then +gd.AngledApch="AA" +elseif playerData.AAatWakeFull==false then +if playerData.AAatWakeLittle==true then +gd.AngledApch="(AA)" +end +end +else +end +if playerData.AFU==true then +gd.AFU="AFU" +else +end +else +end if rho>=RAR and rho<=RIM then if gd.LUE>0.22 and lineupError<-0.22 then env.info" Drift Right across centre ==> DR-" @@ -63305,6 +65423,8 @@ elseif self.carriertype==AIRBOSS.CarrierType.STENNIS then self.sterncoord:Translate(self.carrierparam.sterndist,hdg,true,true):Translate(7,FB+90,true,true) elseif self.carriertype==AIRBOSS.CarrierType.FORRESTAL then self.sterncoord:Translate(self.carrierparam.sterndist,hdg,true,true):Translate(7.5,FB+90,true,true) +elseif self.carriertype==AIRBOSS.CarrierType.ESSEX then +self.sterncoord:Translate(self.carrierparam.sterndist,hdg,true,true):Translate(-1,FB+90,true,true) else self.sterncoord:Translate(self.carrierparam.sterndist,hdg,true,true):Translate(9.5,FB+90,true,true) end @@ -63407,13 +65527,13 @@ end playerData.wire=wire local text=string.format("Trapped %d-wire.",wire) if wire==3 then -text=text.." Well done!" +text=text.." " elseif wire==2 then -text=text.." Not bad, maybe you even get the 3rd next time." +text=text.." " elseif wire==4 then -text=text.." That was scary. You can do better than this!" +text=text.." " elseif wire==1 then -text=text.." Try harder next time!" +text=text.." " end self:MessageToPlayer(playerData,text,"LSO","") local hint=string.format("Trapped %d-wire.",wire) @@ -63743,6 +65863,33 @@ else text=text..string.format("\nR=%.2f NM | X=%d Z=%d m",UTILS.MetersToNM(rho),dx,dz) text=text..string.format("\nGamma=%.1f° | Rho=%.1f°",relhead,phi) end +local lueWire=self:_LineupWIRE(playerData.unit,true) +text=text..string.format("\nLineUpForWireCalls=%.2f° | lineup for Groove calls=%.2f°",lueWire or 0,lue or 0) +local unitClient=Unit.getByName(unit:GetName()) +local hornet=playerData.actype==AIRBOSS.AircraftCarrier.HORNET +local tomcat=playerData.actype==AIRBOSS.AircraftCarrier.F14A or playerData.actype==AIRBOSS.AircraftCarrier.F14B +if hornet then +local nozzlePosL=0 +local burnerPosL=unitClient:getDrawArgumentValue(28) +if burnerPosL<0.2 then +nozzlePosL=unitClient:getDrawArgumentValue(89) +else +nozzlePosL=0 +end +local nozzlePosR=0 +local burnerPosR=unitClient:getDrawArgumentValue(29) +if burnerPosR<0.2 then +nozzlePosR=unitClient:getDrawArgumentValue(90) +else +nozzlePosR=0 +end +text=text..string.format("\n Left Nozzle position=%.2f | Right Nozzle position=%.2f ",nozzlePosL,nozzlePosR) +end +if tomcat then +local nozzlePosL=unitClient:getDrawArgumentValue(434) +local nozzlePosR=unitClient:getDrawArgumentValue(433) +text=text..string.format("\n Left Nozzle position=%.2f | Right Nozzle position=%.2f ",nozzlePosL,nozzlePosR) +end MESSAGE:New(text,1,nil,true):ToClient(playerData.client) end function AIRBOSS:_Glideslope(unit,optangle) @@ -63803,6 +65950,61 @@ local z=UTILS.VecDot(Z,C) local lineup=math.deg(math.atan2(z,x)) return lineup end +function AIRBOSS:_LineupWIRE(unit,runway) +local landingcoord=self:_GetOptLandingCoordinateWIRE() +local A=landingcoord:GetVec3() +local B=unit:GetVec3() +local C=UTILS.VecSubstract(A,B) +C.y=0.0 +local X=self.carrier:GetOrientationX() +X.y=0.0 +if runway then +X=UTILS.Rotate2D(X,-self.carrierparam.rwyangle) +end +local x=UTILS.VecDot(X,C) +local Z=self.carrier:GetOrientationZ() +Z.y=0.0 +if runway then +Z=UTILS.Rotate2D(Z,-self.carrierparam.rwyangle) +end +local z=UTILS.VecDot(Z,C) +local lineup=math.deg(math.atan2(z,x)) +return lineup +end +function AIRBOSS:_NozzleArgumentLeft(unit) +local unitClient=Unit.getByName(unit:GetName()) +local typeName=unit:GetTypeName() +local nozzlePosL=0 +local burnerPosL=0 +if typeName=="FA-18C_hornet"then +burnerPosL=unitClient:getDrawArgumentValue(28) +if burnerPosL<0.2 then +nozzlePosL=unitClient:getDrawArgumentValue(89) +else +nozzlePosL=0 +end +elseif typeName=="F-14A-135-GR"or typeName=="F-14B"then +nozzlePosL=unitClient:getDrawArgumentValue(434) +end +return nozzlePosL +end +function AIRBOSS:_NozzleArgumentRight(unit) +local unitClient=Unit.getByName(unit:GetName()) +local typeName=unit:GetTypeName() +local nozzlePosR=0 +local burnerPosR=0 +if typeName=="FA-18C_hornet"then +burnerPosR=unitClient:getDrawArgumentValue(29) +if burnerPosR<0.2 then +nozzlePosR=unitClient:getDrawArgumentValue(90) +else +nozzlePosR=0 +end +elseif typeName=="F-14A-135-GR"or typeName=="F-14B"then +nozzlePosR=unitClient:getDrawArgumentValue(433) +end +return nozzlePosR +end function AIRBOSS:_GetAltCarrier(unit) local h=unit:GetAltitude()-self.carrierparam.deckheight-2 return h @@ -63827,6 +66029,16 @@ self.landingcoord.y=self.landingcoord.y+2 end return self.landingcoord end +function AIRBOSS:_GetOptLandingCoordinateWIRE() +self.landingcoord:UpdateFromCoordinate(self:_GetSternCoord()) +local FB=self:GetFinalBearing(false) +local case=self.case +if self.carrierparam.wire3 then +self.landingcoord:Translate(self.carrierparam.wire3+500,FB,true,true) +end +self.landingcoord.y=self.landingcoord.y+2 +return self.landingcoord +end function AIRBOSS:_GetLandingSpotCoordinate() self.landingspotcoord:UpdateFromCoordinate(self:_GetSternCoord()) local hdg=self:GetHeading() @@ -63940,7 +66152,7 @@ theta=math.asin(vdeck*math.sin(alpha)/vwind) v=vdeck*math.cos(alpha)-vwind*math.cos(theta) end local magvar=magnetic and self.magvar or 0 -local intowind=(540+(windto-magvar+math.deg(theta)))%360 +local intowind=self:GetHeadingIntoWind_old(vdeck) return intowind,v end function AIRBOSS:GetBRCintoWind(vdeck) @@ -64051,6 +66263,9 @@ advice=advice+self.LSOCall.POWER.duration elseif glideslopeError=25 then +grade="_LIG_" elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B and t<55 then grade="FAST V/STOL Groove" elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B and t<75 then @@ -64108,7 +66329,7 @@ grade="SLOW V/STOL Groove" else grade="LIG" end -if t>=16.4 and t<=16.6 then +if t>=16.49 and t<=16.6 then grade="_OK_" end if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and(t>=60.0 and t<=65.0)then @@ -64120,25 +66341,42 @@ function AIRBOSS:_LSOgrade(playerData) local function count(base,pattern) return select(2,string.gsub(base,pattern,"")) end +local TIG="" +if playerData.Tgroove and playerData.Tgroove<=360 and playerData.case<3 then +TIG=self:_EvalGrooveTime(playerData) +end local GXX,nXX=self:_Flightdata2Text(playerData,AIRBOSS.GroovePos.XX) local GIM,nIM=self:_Flightdata2Text(playerData,AIRBOSS.GroovePos.IM) local GIC,nIC=self:_Flightdata2Text(playerData,AIRBOSS.GroovePos.IC) local GAR,nAR=self:_Flightdata2Text(playerData,AIRBOSS.GroovePos.AR) +local GIW,nIW=self:_Flightdata2Text(playerData,AIRBOSS.GroovePos.IW) local vtol=playerData.actype==AIRBOSS.AircraftCarrier.AV8B -local G=GXX.." "..GIM.." ".." "..GIC.." "..GAR -local N=nXX+nIM+nIC+nAR +local G=GXX.." "..GIM.." ".." "..GIC.." "..GAR.." "..GIW.." "..TIG +local gradeWithDeviations=GXX.."["..nXX.."] "..GIM.."["..nIM.."] "..GIC.."["..nIC.."] "..GAR.."["..nAR.."] "..GIW.."["..nIW.."]" +env.info("LSO Grade [with deviation count]: "..gradeWithDeviations) +local N=nXX+nIM+nIC+nAR+nIW local nL=count(G,'_')/2 local nS=count(G,'%(') local nN=N-nS-nL local Tgroove=playerData.Tgroove -local TgrooveUnicorn=Tgroove and(Tgroove>=15.0 and Tgroove<=18.99)or false +local TgrooveUnicorn=Tgroove and(Tgroove>=16.49 and Tgroove<=16.59)or false local TgrooveVstolUnicorn=Tgroove and(Tgroove>=60.0 and Tgroove<=65.0)and playerData.actype==AIRBOSS.AircraftCarrier.AV8B or false local grade local points -if N==0 and(TgrooveUnicorn or TgrooveVstolUnicorn or playerData.case==3)then +if N==0 and TgrooveVstolUnicorn then grade="_OK_" points=5.0 G="Unicorn" +end +if N==0 and TgrooveUnicorn then +if playerData.wire==3 then +grade="_OK_" +points=5.0 +G="Unicorn" +else +grade="OK" +points=4.0 +end else if vtol then local Gb=GXX.." "..GIM @@ -64184,6 +66422,7 @@ text=text.."# of large deviations _ = "..nL.."\n" text=text.."# of normal deviations = "..nN.."\n" text=text.."# of small deviations ( = "..nS.."\n" self:T2(self.lid..text) +env.info(text) if playerData.wop then if playerData.lig then grade="WO" @@ -64226,6 +66465,16 @@ grade="CUT" points=0.0 end end +if playerData.wire==1 and points>1 then +if points==4 then +points=3 +grade="(OK)" +elseif points==3 then +points=2 +grade="--" +end +end +env.info("Returning: "..grade.." "..points.." "..G) return grade,points,G end function AIRBOSS:_Flightdata2Text(playerData,groovestep) @@ -64244,20 +66493,24 @@ local step=fdata.Step local AOA=fdata.AoA local GSE=fdata.GSE local LUE=fdata.LUE +local LUEwire=fdata.LUEwire +local Lnoz=fdata.LeftNozzle +local Rnoz=fdata.RightNozzle local ROL=fdata.Roll +local GT=fdata.GT local acaoa=self:_GetAircraftAoA(playerData) local P=nil -if step==AIRBOSS.PatternStep.GROOVE_XX and ROL<=4.0 and playerData.case<3 then -if LUE>self.lue.RIGHT then -P=underline("AA") -elseif LUE>self.lue.RightMed then -P="AA " -elseif LUE>self.lue.Right then -P=little("AA") +if step==AIRBOSS.PatternStep.GROOVE_XX and ROL<=3.5 and playerData.case<3 then +if LUE>3.2 then +P=underline("LUL") +elseif LUE>2.2 then +P="LUL" +elseif LUE>1.2 then +P=little("LUL") end end local O=nil -if step==AIRBOSS.PatternStep.GROOVE_XX then +if step==AIRBOSS.PatternStep.GROOVE_XX and playerData.case<3 then if LUEacaoa.SLOW then S=underline("SLO") elseif AOA>acaoa.Slow then @@ -64294,59 +66550,141 @@ A="LO" elseif GSEself.lue.RIGHT then +local DW=nil +local Rol=nil +local Noz=nil +if AIRBOSS.PatternStep.GROOVE_AR and playerData.waveoff==true and playerData.owo==true then +else +if LUE>self.lue.RIGHT and step~=AIRBOSS.PatternStep.GROOVE_XX and step~=AIRBOSS.PatternStep.GROOVE_IW then D=underline("LUL") -elseif LUE>self.lue.Right then +elseif LUE>self.lue.Right and step~=AIRBOSS.PatternStep.GROOVE_XX and step~=AIRBOSS.PatternStep.GROOVE_IW then D="LUL" -elseif LUE>self.lue._max then +elseif LUE>self.lue._max and step~=AIRBOSS.PatternStep.GROOVE_XX and step~=AIRBOSS.PatternStep.GROOVE_IW then D=little("LUL") -elseif playerData.case<3 then -if LUE1.2 then +DW=underline("LL") +elseif LUEwire>0.4 then +DW="LL" +elseif LUEwire>0.25 then +DW=little("LL") +elseif LUEwire<-1.17 then +DW=underline("LR") +elseif LUEwire<-0.46 then +DW="LR" +elseif LUEwire<-0.25 then +DW=little("LR") +else +end +if ROL>5 and ROL<=10 then +Rol=little("LRWD") +elseif ROL>10 and ROL<=15 then +Rol=("LRWD") +elseif ROL>15 then +Rol=underline("LRWD") +elseif ROL<-5 and ROL>=-10 then +Rol=little("LLWD") +elseif ROL<-10 and ROL>=-15 then +Rol=("LLWD") +elseif ROL<-15 then +Rol=underline("LLWD") +else +end +local hornet=playerData.actype==AIRBOSS.AircraftCarrier.HORNET +local tomcat=playerData.actype==AIRBOSS.AircraftCarrier.F14A or playerData.actype==AIRBOSS.AircraftCarrier.F14B +if hornet then +if Lnoz>0.6 and Rnoz>0.6 then +Noz=underline("EG") +else +end +end +if playerData.Tgroove and playerData.Tgroove<=360 and playerData.case<3 then +local grooveTime=playerData.Tgroove +if grooveTime>19 or grooveTime<15 then +GT="" +end end end local G="" local n=0 +if stepMod=="XX"then +if playerData.case<3 then +if fdata.WrappedUp then +env.info("Adding WrappedUp deviation.") +G=G..fdata.WrappedUp +n=n+1 +end +if fdata.AngledApch then +env.info("Adding AngledApch deviation.") +G=G..fdata.AngledApch +n=n+1 +end +if fdata.AFU then +env.info("Adding AFU deviation.") +G=G..fdata.AFU +n=n+1 +end +end +end if fdata.FlyThrough then G=G..fdata.FlyThrough end -if P then -G=G..P -n=n -end if S then +env.info("Adding speed deviation.") G=G..S n=n+1 end if A then +env.info("Adding altitude deviation.") G=G..A n=n+1 end if D then +env.info("Adding line up deviation.") G=G..D n=n+1 end if fdata.Drift then +env.info("Adding drift deviation.") G=G..fdata.Drift n=n end if O then +env.info("Adding overshoot deviation.") G=G..O n=n+1 end +if DW then +env.info("Adding landed L/R deviation.") +G=G..DW +n=n+1 +end +if Rol then +env.info("Adding landed rol deviation.") +G=G..Rol +n=n+1 +end +if Noz then +env.info("Adding eased guns deviation.") +G=G..Noz +n=n+1 +end +if GT then +G=G..GT +n=n+1 +end local step=self:_GS(step) step=step:gsub("XX","X") if G~=""then @@ -64815,7 +67153,7 @@ if playerData.wire and playerData.wire<=4 then text=text..string.format(" %d-wire",playerData.wire) end if playerData.Tgroove and playerData.Tgroove<=360 and playerData.case<3 then -text=text..string.format("\nTime in the groove %.1f seconds: %s",playerData.Tgroove,self:_EvalGrooveTime(playerData)) +text=text..string.format("\nTime in the groove %.1f seconds.",playerData.Tgroove) end end playerData.lastdebrief=UTILS.DeepCopy(playerData.debrief) @@ -66412,6 +68750,15 @@ text=string.format("negative, you are not airborne. Request denied!") end else text="affirmative, you can bypass the pattern and are cleared for final approach!" +playerData.wrappedUpAtWakeLittle=false +playerData.wrappedUpAtWakeFull=false +playerData.wrappedUpAtWakeUnderline=false +playerData.wrappedUpAtStartLittle=false +playerData.wrappedUpAtStartFull=false +playerData.wrappedUpAtStartUnderline=false +playerData.AAatWakeLittle=false +playerData.AAatWakeFull=false +playerData.AAatWakeUnderline=false local lead=self:_GetFlightLead(playerData) self:_SetPlayerStep(lead,AIRBOSS.PatternStep.EMERGENCY) for _,sec in pairs(lead.section)do @@ -66581,7 +68928,7 @@ if _unit and _playername then local playerData=self.players[_playername] if playerData then local mycoord=_unit:GetCoordinate() -local dmax=100 +local dmax=self.maxsectiondistance local text if self.NmaxSection==0 then text=string.format("negative, setting sections is disabled in this mission. You stay alone.") @@ -67786,6 +70133,7 @@ self.orientation=self.carrier:GetOrientationX() self.orientlast=self.carrier:GetOrientationX() self.position=self.carrier:GetCoordinate() self:__Status(10) +return self end function RECOVERYTANKER:onafterStatus(From,Event,To) local time=timer.getTime() @@ -68424,6 +70772,7 @@ self.formation:SetFollowTimeInterval(self.dtFollow) self.formation:SetFlightModeFormation(self.helo) self.formation:__Start(delay) self:__Status(1) +return self end function RESCUEHELO:onafterStatus(From,Event,To) local time=timer.getTime() @@ -68632,6 +70981,10 @@ Syria=5, MarianaIslands=2, Falklands=12, SinaiMap=5, +Kola=15, +Afghanistan=3, +Iraq=4.4, +GermanyCW=0.1, } ATIS.ICAOPhraseology={ Caucasus=true, @@ -68643,85 +70996,89 @@ Syria=true, MarianaIslands=true, Falklands=true, SinaiMap=true, +Kola=true, +Afghanistan=true, +Iraq=true, +GermanyCW=true, } ATIS.Sound={ -ActiveRunway={filename="ActiveRunway.ogg",duration=0.99}, -ActiveRunwayDeparture={filename="ActiveRunwayDeparture.ogg",duration=0.99}, -ActiveRunwayArrival={filename="ActiveRunwayArrival.ogg",duration=0.99}, -AdviceOnInitial={filename="AdviceOnInitial.ogg",duration=3.00}, -Airport={filename="Airport.ogg",duration=0.66}, -Altimeter={filename="Altimeter.ogg",duration=0.68}, -At={filename="At.ogg",duration=0.41}, -CloudBase={filename="CloudBase.ogg",duration=0.82}, -CloudCeiling={filename="CloudCeiling.ogg",duration=0.61}, -CloudsBroken={filename="CloudsBroken.ogg",duration=1.07}, -CloudsFew={filename="CloudsFew.ogg",duration=0.99}, -CloudsNo={filename="CloudsNo.ogg",duration=1.01}, -CloudsNotAvailable={filename="CloudsNotAvailable.ogg",duration=2.35}, -CloudsOvercast={filename="CloudsOvercast.ogg",duration=0.83}, -CloudsScattered={filename="CloudsScattered.ogg",duration=1.18}, -Decimal={filename="Decimal.ogg",duration=0.54}, -DegreesCelsius={filename="DegreesCelsius.ogg",duration=1.27}, -DegreesFahrenheit={filename="DegreesFahrenheit.ogg",duration=1.23}, -DewPoint={filename="DewPoint.ogg",duration=0.65}, -Dust={filename="Dust.ogg",duration=0.54}, -Elevation={filename="Elevation.ogg",duration=0.78}, -EndOfInformation={filename="EndOfInformation.ogg",duration=1.15}, -Feet={filename="Feet.ogg",duration=0.45}, -Fog={filename="Fog.ogg",duration=0.47}, -Gusting={filename="Gusting.ogg",duration=0.55}, -HectoPascal={filename="HectoPascal.ogg",duration=1.15}, -Hundred={filename="Hundred.ogg",duration=0.47}, -InchesOfMercury={filename="InchesOfMercury.ogg",duration=1.16}, -Information={filename="Information.ogg",duration=0.85}, -Kilometers={filename="Kilometers.ogg",duration=0.78}, -Knots={filename="Knots.ogg",duration=0.59}, -Left={filename="Left.ogg",duration=0.54}, -MegaHertz={filename="MegaHertz.ogg",duration=0.87}, -Meters={filename="Meters.ogg",duration=0.59}, -MetersPerSecond={filename="MetersPerSecond.ogg",duration=1.14}, -Miles={filename="Miles.ogg",duration=0.60}, -MillimetersOfMercury={filename="MillimetersOfMercury.ogg",duration=1.53}, -Minus={filename="Minus.ogg",duration=0.64}, -N0={filename="N-0.ogg",duration=0.55}, -N1={filename="N-1.ogg",duration=0.41}, -N2={filename="N-2.ogg",duration=0.37}, -N3={filename="N-3.ogg",duration=0.41}, -N4={filename="N-4.ogg",duration=0.37}, -N5={filename="N-5.ogg",duration=0.43}, -N6={filename="N-6.ogg",duration=0.55}, -N7={filename="N-7.ogg",duration=0.43}, -N8={filename="N-8.ogg",duration=0.38}, -N9={filename="N-9.ogg",duration=0.55}, -NauticalMiles={filename="NauticalMiles.ogg",duration=1.04}, -None={filename="None.ogg",duration=0.43}, -QFE={filename="QFE.ogg",duration=0.63}, -QNH={filename="QNH.ogg",duration=0.71}, -Rain={filename="Rain.ogg",duration=0.41}, -Right={filename="Right.ogg",duration=0.44}, -Snow={filename="Snow.ogg",duration=0.48}, -SnowStorm={filename="SnowStorm.ogg",duration=0.82}, -StatuteMiles={filename="StatuteMiles.ogg",duration=1.15}, -SunriseAt={filename="SunriseAt.ogg",duration=0.92}, -SunsetAt={filename="SunsetAt.ogg",duration=0.95}, -Temperature={filename="Temperature.ogg",duration=0.64}, -Thousand={filename="Thousand.ogg",duration=0.55}, -ThunderStorm={filename="ThunderStorm.ogg",duration=0.81}, -TimeLocal={filename="TimeLocal.ogg",duration=0.90}, -TimeZulu={filename="TimeZulu.ogg",duration=0.86}, -TowerFrequency={filename="TowerFrequency.ogg",duration=1.19}, -Visibilty={filename="Visibility.ogg",duration=0.79}, -WeatherPhenomena={filename="WeatherPhenomena.ogg",duration=1.07}, -WindFrom={filename="WindFrom.ogg",duration=0.60}, +ActiveRunway={filename="ActiveRunway.ogg",duration=0.85}, +ActiveRunwayDeparture={filename="ActiveRunwayDeparture.ogg",duration=1.50}, +ActiveRunwayArrival={filename="ActiveRunwayArrival.ogg",duration=1.38}, +AdviceOnInitial={filename="AdviceOnInitial.ogg",duration=2.98}, +Airport={filename="Airport.ogg",duration=0.55}, +Altimeter={filename="Altimeter.ogg",duration=0.91}, +At={filename="At.ogg",duration=0.32}, +CloudBase={filename="CloudBase.ogg",duration=0.69}, +CloudCeiling={filename="CloudCeiling.ogg",duration=0.53}, +CloudsBroken={filename="CloudsBroken.ogg",duration=0.81}, +CloudsFew={filename="CloudsFew.ogg",duration=0.74}, +CloudsNo={filename="CloudsNo.ogg",duration=0.69}, +CloudsNotAvailable={filename="CloudsNotAvailable.ogg",duration=2.64}, +CloudsOvercast={filename="CloudsOvercast.ogg",duration=0.82}, +CloudsScattered={filename="CloudsScattered.ogg",duration=0.89}, +Decimal={filename="Decimal.ogg",duration=0.71}, +DegreesCelsius={filename="DegreesCelsius.ogg",duration=1.08}, +DegreesFahrenheit={filename="DegreesFahrenheit.ogg",duration=1.07}, +DewPoint={filename="DewPoint.ogg",duration=0.59}, +Dust={filename="Dust.ogg",duration=0.37}, +Elevation={filename="Elevation.ogg",duration=0.92}, +EndOfInformation={filename="EndOfInformation.ogg",duration=1.24}, +Feet={filename="Feet.ogg",duration=0.34}, +Fog={filename="Fog.ogg",duration=0.41}, +Gusting={filename="Gusting.ogg",duration=0.58}, +HectoPascal={filename="HectoPascal.ogg",duration=0.92}, +Hundred={filename="Hundred.ogg",duration=0.53}, ILSFrequency={filename="ILSFrequency.ogg",duration=1.30}, -InnerNDBFrequency={filename="InnerNDBFrequency.ogg",duration=1.56}, -OuterNDBFrequency={filename="OuterNDBFrequency.ogg",duration=1.59}, -RunwayLength={filename="RunwayLength.ogg",duration=0.91}, -VORFrequency={filename="VORFrequency.ogg",duration=1.38}, -TACANChannel={filename="TACANChannel.ogg",duration=0.88}, -PRMGChannel={filename="PRMGChannel.ogg",duration=1.18}, -RSBNChannel={filename="RSBNChannel.ogg",duration=1.14}, -Zulu={filename="Zulu.ogg",duration=0.62}, +InchesOfMercury={filename="InchesOfMercury.ogg",duration=1.26}, +Information={filename="Information.ogg",duration=0.99}, +InnerNDBFrequency={filename="InnerNDBFrequency.ogg",duration=1.69}, +Kilometers={filename="Kilometers.ogg",duration=0.93}, +Knots={filename="Knots.ogg",duration=0.46}, +Left={filename="Left.ogg",duration=0.41}, +MegaHertz={filename="MegaHertz.ogg",duration=0.83}, +Meters={filename="Meters.ogg",duration=0.55}, +MetersPerSecond={filename="MetersPerSecond.ogg",duration=1.03}, +Miles={filename="Miles.ogg",duration=0.44}, +MillimetersOfMercury={filename="MillimetersOfMercury.ogg",duration=1.59}, +Minus={filename="Minus.ogg",duration=0.55}, +N0={filename="N-0.ogg",duration=0.52}, +N1={filename="N-1.ogg",duration=0.35}, +N2={filename="N-2.ogg",duration=0.41}, +N3={filename="N-3.ogg",duration=0.34}, +N4={filename="N-4.ogg",duration=0.37}, +N5={filename="N-5.ogg",duration=0.40}, +N6={filename="N-6.ogg",duration=0.46}, +N7={filename="N-7.ogg",duration=0.52}, +N8={filename="N-8.ogg",duration=0.36}, +N9={filename="N-9.ogg",duration=0.51}, +NauticalMiles={filename="NauticalMiles.ogg",duration=0.93}, +None={filename="None.ogg",duration=0.33}, +OuterNDBFrequency={filename="OuterNDBFrequency.ogg",duration=1.70}, +PRMGChannel={filename="PRMGChannel.ogg",duration=1.27}, +QFE={filename="QFE.ogg",duration=0.90}, +QNH={filename="QNH.ogg",duration=0.94}, +Rain={filename="Rain.ogg",duration=0.35}, +Right={filename="Right.ogg",duration=0.31}, +RSBNChannel={filename="RSBNChannel.ogg",duration=1.26}, +RunwayLength={filename="RunwayLength.ogg",duration=0.81}, +Snow={filename="Snow.ogg",duration=0.40}, +SnowStorm={filename="SnowStorm.ogg",duration=0.73}, +StatuteMiles={filename="StatuteMiles.ogg",duration=0.90}, +SunriseAt={filename="SunriseAt.ogg",duration=0.82}, +SunsetAt={filename="SunsetAt.ogg",duration=0.87}, +TACANChannel={filename="TACANChannel.ogg",duration=0.81}, +Temperature={filename="Temperature.ogg",duration=0.70}, +Thousand={filename="Thousand.ogg",duration=0.58}, +ThunderStorm={filename="ThunderStorm.ogg",duration=0.79}, +TimeLocal={filename="TimeLocal.ogg",duration=0.83}, +TimeZulu={filename="TimeZulu.ogg",duration=0.83}, +TowerFrequency={filename="TowerFrequency.ogg",duration=1.05}, +Visibilty={filename="Visibility.ogg",duration=1.16}, +VORFrequency={filename="VORFrequency.ogg",duration=1.28}, +WeatherPhenomena={filename="WeatherPhenomena.ogg",duration=1.09}, +WindFrom={filename="WindFrom.ogg",duration=0.63}, +Zulu={filename="Zulu.ogg",duration=0.51}, } ATIS.Messages={ EN= @@ -68966,7 +71323,7 @@ DELIMITER="Décimal", } ATIS.locale="en" _ATIS={} -ATIS.version="1.0.0" +ATIS.version="1.0.1" function ATIS:New(AirbaseName,Frequency,Modulation) local self=BASE:Inherit(self,FSM:New()) self.airbasename=AirbaseName @@ -69497,12 +71854,14 @@ self:T3(string.format("NATO =%s",tostring(NATO))) local hours=self.gettext:GetEntry("HOURS",self.locale) local sunrise=coord:GetSunrise() local SUNRISE="no time" +local NorthPolar=true if tostring(sunrise)~="N/S"and tostring(sunrise)~="N/R"then sunrise=UTILS.Split(sunrise,":") SUNRISE=string.format("%s%s",sunrise[1],sunrise[2]) if self.useSRS then SUNRISE=string.format("%s %s %s",sunrise[1],sunrise[2],hours) end +NorthPolar=false end local sunset=coord:GetSunset() local SUNSET="no time" @@ -69512,6 +71871,7 @@ SUNSET=string.format("%s%s",sunset[1],sunset[2]) if self.useSRS then SUNSET=string.format("%s %s %s",sunset[1],sunset[2],hours) end +NorthPolar=false end local temperature=coord:GetTemperature(height+5) local dewpoint=temperature-(100-self.relHumidity)/5 @@ -69521,33 +71881,31 @@ dewpoint=UTILS.CelsiusToFahrenheit(dewpoint) end local TEMPERATURE=string.format("%d",math.abs(temperature)) local DEWPOINT=string.format("%d",math.abs(dewpoint)) -local clouds,visibility,turbulence,fog,dust,static=self:GetMissionWeather() -if fog and fog.thicknessheight+25 then +dust=true +visibility=math.min(visibility,dustdens) end -if dust and height+25>UTILS.FeetToMeters(1500)then -dust=nil -end -local visibilitymin=visibility -if fog then -if fog.visibility0 and fheight>height+25 then +fog=true +visibility=math.min(visibility,fvis) end end local VISIBILITY="" if self.metric then -local reportedviz=UTILS.Round(visibilitymin/1000) +local reportedviz=UTILS.Round(visibility/1000) if reportedviz>10 then reportedviz=10 end VISIBILITY=string.format("%d",reportedviz) else -local reportedviz=UTILS.Round(UTILS.MetersToSM(visibilitymin)) +local reportedviz=UTILS.Round(UTILS.MetersToSM(visibility)) if reportedviz>10 then reportedviz=10 end @@ -69735,7 +72093,7 @@ alltext=alltext..";\n"..subtitle if not self.zulutimeonly then local sunrise=self.gettext:GetEntry("SUNRISEAT",self.locale) subtitle=string.format(sunrise,SUNRISE) -if not self.useSRS then +if not self.useSRS and NorthPolar==false then self:Transmission(self.Sound.SunriseAt,0.5,subtitle) self.radioqueue:Number2Transmission(SUNRISE,nil,0.2) self:Transmission(self.Sound.TimeLocal,0.2) @@ -69743,7 +72101,7 @@ end alltext=alltext..";\n"..subtitle local sunset=self.gettext:GetEntry("SUNSETAT",self.locale) subtitle=string.format(sunset,SUNSET) -if not self.useSRS then +if not self.useSRS and NorthPolar==false then self:Transmission(self.Sound.SunsetAt,0.5,subtitle) self.radioqueue:Number2Transmission(SUNSET,nil,0.5) self:Transmission(self.Sound.TimeLocal,0.2) @@ -70050,7 +72408,6 @@ end end end _RUNACT=subtitle -alltext=alltext..";\n"..subtitle if self.rwylength then local runact=self.airbase:GetActiveRunway(self.runwaym2t) local length=runact.length @@ -70407,18 +72764,13 @@ local dust=nil if weather.enable_dust==true then dust=weather.dust_density end -local fog=nil -if weather.enable_fog==true then -fog=weather.fog -end self:T("FF weather:") self:T({clouds=clouds}) self:T({visibility=visibility}) self:T({turbulence=turbulence}) -self:T({fog=fog}) self:T({dust=dust}) self:T({static=static}) -return clouds,visibility,turbulence,fog,dust,static +return clouds,visibility,turbulence,dust,static end function ATIS:_GetThousandsAndHundreds(n) local N=UTILS.Round(n/1000,1) @@ -70441,6 +72793,7 @@ Positionable=nil, HasBeenDropped=false, PerCrateMass=0, Stock=nil, +Stock0=nil, Mark=nil, DontShowInMenu=false, Location=nil, @@ -70469,6 +72822,7 @@ self.Positionable=Positionable or nil self.HasBeenDropped=Dropped or false self.PerCrateMass=PerCrateMass or 0 self.Stock=Stock or nil +self.Stock0=Stock or nil self.Mark=nil self.Subcategory=Subcategory or"Other" self.DontShowInMenu=DontShowInMenu or false @@ -70572,6 +72926,20 @@ else return-1 end end +function CTLD_CARGO:GetStock0() +if self.Stock0 then +return self.Stock0 +else +return-1 +end +end +function CTLD_CARGO:GetRelativeStock() +if self.Stock and self.Stock0 then +return math.floor((self.Stock/self.Stock0)*100) +else +return-1 +end +end function CTLD_CARGO:AddStock(Number) if self.Stock then local number=Number or 1 @@ -70807,8 +73175,13 @@ ChinookTroopCircleRadius=5, TroopUnloadDistGround=5, TroopUnloadDistGroundHerc=25, TroopUnloadDistGroundHook=15, +TroopUnloadDistHoverHook=5, TroopUnloadDistHover=1.5, UserSetGroup=nil, +LoadedGroupsTable={}, +keeploadtable=true, +allowCATransport=false, +VehicleMoveFormation=AI.Task.VehicleFormation.VEE, } CTLD.RadioModulation={ AM=0, @@ -70835,6 +73208,7 @@ CTLD.UnitTypeCapabilities={ ["Mi-24V"]={type="Mi-24V",crates=true,troops=true,cratelimit=2,trooplimit=8,length=18,cargoweightlimit=700}, ["Hercules"]={type="Hercules",crates=true,troops=true,cratelimit=7,trooplimit=64,length=25,cargoweightlimit=19000}, ["UH-60L"]={type="UH-60L",crates=true,troops=true,cratelimit=2,trooplimit=20,length=16,cargoweightlimit=3500}, +["UH-60L_DAP"]={type="UH-60L_DAP",crates=false,troops=true,cratelimit=0,trooplimit=2,length=16,cargoweightlimit=500}, ["MH-60R"]={type="MH-60R",crates=true,troops=true,cratelimit=2,trooplimit=20,length=16,cargoweightlimit=3500}, ["SH-60B"]={type="SH-60B",crates=true,troops=true,cratelimit=2,trooplimit=20,length=16,cargoweightlimit=3500}, ["AH-64D_BLK_II"]={type="AH-64D_BLK_II",crates=false,troops=true,cratelimit=0,trooplimit=2,length=17,cargoweightlimit=200}, @@ -70842,8 +73216,15 @@ CTLD.UnitTypeCapabilities={ ["OH-6A"]={type="OH-6A",crates=false,troops=true,cratelimit=0,trooplimit=4,length=7,cargoweightlimit=550}, ["OH58D"]={type="OH58D",crates=false,troops=false,cratelimit=0,trooplimit=0,length=14,cargoweightlimit=400}, ["CH-47Fbl1"]={type="CH-47Fbl1",crates=true,troops=true,cratelimit=4,trooplimit=31,length=20,cargoweightlimit=10800}, +["MosquitoFBMkVI"]={type="MosquitoFBMkVI",crates=true,troops=false,cratelimit=2,trooplimit=0,length=13,cargoweightlimit=1800}, +["M 818"]={type="M 818",crates=true,troops=true,cratelimit=4,trooplimit=12,length=9,cargoweightlimit=4500}, } -CTLD.version="1.1.18" +CTLD.FixedWingTypes={ +["Hercules"]="Hercules", +["Bronco"]="Bronco", +["Mosquito"]="Mosquito", +} +CTLD.version="1.3.38" function CTLD:New(Coalition,Prefixes,Alias) local self=BASE:Inherit(self,FSM:New()) BASE:T({Coalition,Prefixes,Alias}) @@ -70890,7 +73271,10 @@ self:AddTransition("*","CratesBuild","*") self:AddTransition("*","CratesRepaired","*") self:AddTransition("*","CratesBuildStarted","*") self:AddTransition("*","CratesRepairStarted","*") +self:AddTransition("*","CratesPacked","*") +self:AddTransition("*","HelicopterLost","*") self:AddTransition("*","Load","*") +self:AddTransition("*","Loaded","*") self:AddTransition("*","Save","*") self:AddTransition("*","Stop","Stopped") self.PilotGroups={} @@ -70943,10 +73327,13 @@ self.smokedistance=2000 self.movetroopstowpzone=true self.movetroopsdistance=5000 self.troopdropzoneradius=100 +self.VehicleMoveFormation=AI.Task.VehicleFormation.VEE self.enableHercules=false -self.HercMinAngels=165 -self.HercMaxAngels=2000 -self.HercMaxSpeed=77 +self.enableFixedWing=false +self.FixedMinAngels=165 +self.FixedMaxAngels=2000 +self.FixedMaxSpeed=77 +self.validateAndRepositionUnits=false self.suppressmessages=false self.repairtime=300 self.buildtime=300 @@ -70960,9 +73347,13 @@ self.enableLoadSave=false self.filepath=nil self.saveinterval=600 self.eventoninject=true +self.keeploadtable=true +self.LoadedGroupsTable={} self.usesubcats=false self.subcats={} self.subcatsTroop={} +self.showstockinmenuitems=false +self.onestepmenu=false self.nobuildinloadzones=true self.movecratesbeforebuild=true self.surfacetypes={land.SurfaceType.LAND,land.SurfaceType.ROAD,land.SurfaceType.RUNWAY,land.SurfaceType.SHALLOW_WATER} @@ -70979,6 +73370,8 @@ self.FlareColor=FLARECOLOR.Red for i=1,100 do math.random() end +self.allowCATransport=false +self.CATransportSet=nil self:_GenerateVHFrequencies() self:_GenerateUHFrequencies() self:_GenerateFMFrequencies() @@ -71001,6 +73394,11 @@ capabilities.cargoweightlimit=0 end return capabilities end +function CTLD:AllowCATransport(OnOff,ClientSet) +self.allowCATransport=OnOff +self.CATransportSet=ClientSet +return self +end function CTLD:_GenerateUHFrequencies() self:T(self.lid.." _GenerateUHFrequencies") self.FreeUHFFrequencies={} @@ -71052,14 +73450,33 @@ local unitname=event.IniUnitName or"none" self.Loaded_Cargo[unitname]=nil self:_RefreshF10Menus() end -if self:IsHercules(_unit)and self.enableHercules then +if self:IsFixedWing(_unit)and self.enableFixedWing then +local unitname=event.IniUnitName or"none" +self.Loaded_Cargo[unitname]=nil +self:_RefreshF10Menus() +end +if _unit:IsGround()and self.allowCATransport then local unitname=event.IniUnitName or"none" self.Loaded_Cargo[unitname]=nil self:_RefreshF10Menus() end return +elseif event.id==EVENTS.Land or event.id==EVENTS.Takeoff then +local unitname=event.IniUnitName +if self.CtldUnits[unitname]then +local _group=event.IniGroup +local _unit=event.IniUnit +self:_RefreshLoadCratesMenu(_group,_unit) +if self:IsFixedWing(_unit)and self.enableFixedWing then +self:_RefreshDropCratesMenu(_group,_unit) +end +end elseif event.id==EVENTS.PlayerLeaveUnit or event.id==EVENTS.UnitLost then local unitname=event.IniUnitName or"none" +if self.CtldUnits[unitname]then +local lostcargo=UTILS.DeepCopy(self.Loaded_Cargo[unitname]or{}) +self:__HelicopterLost(1,unitname,lostcargo) +end self.CtldUnits[unitname]=nil self.Loaded_Cargo[unitname]=nil self.MenusDone[unitname]=nil @@ -71160,6 +73577,17 @@ end end return nil end +function CTLD:AddAllowedFixedWingType(typename) +if type(typename)=="string"then +self.FixedWingTypes[typename]=typename +elseif typename and typename.ClassName and typename:IsInstanceOf("UNIT")then +local TypeName=typename:GetTypeName()or"none" +self.FixedWingTypes[TypeName]=TypeName +else +self:E(self.lid.."No valid typename or no UNIT handed!") +end +return self +end function CTLD:PreloadTroops(Unit,Troopname) self:T(self.lid.." PreloadTroops") local name=Troopname or"Unknown" @@ -71291,7 +73719,8 @@ self:T({cargotype=loadcargotype}) loaded.Troopsloaded=loaded.Troopsloaded+troopsize table.insert(loaded.Cargo,loadcargotype) self.Loaded_Cargo[unitname]=loaded -self:_SendMessage("Troops boarded!",10,false,Group) +self:_SendMessage(string.format("%s boarded!",cgoname),10,false,Group) +self:_RefreshDropTroopsMenu(Group,Unit) self:__TroopsPickedUp(1,Group,Unit,Cargotype) self:_UpdateUnitCargoMass(Unit) Cargotype:RemoveStock() @@ -71391,6 +73820,7 @@ function CTLD:_ExtractTroops(Group,Unit) self:T(self.lid.." _ExtractTroops") local grounded=not self:IsUnitInAir(Unit) local hoverload=self:CanHoverLoad(Unit) +local hassecondaries=false if not grounded and not hoverload then self:_SendMessage("You need to land or hover in position to load!",10,false,Group) if not self.debug then return self end @@ -71475,10 +73905,12 @@ local running=math.floor(nearestDistance/4)+20 loaded.Troopsloaded=loaded.Troopsloaded+troopsize table.insert(loaded.Cargo,loadcargotype) self.Loaded_Cargo[unitname]=loaded -self:ScheduleOnce(running,self._SendMessage,self,"Troops boarded!",10,false,Group) -self:_SendMessage("Troops boarding!",10,false,Group) +self:ScheduleOnce(running,self._SendMessage,self,string.format("%s boarded!",Cargotype.Name),10,false,Group) +self:_SendMessage(string.format("%s boarding!",Cargotype.Name),10,false,Group) +self:_RefreshDropTroopsMenu(Group,Unit) self:_UpdateUnitCargoMass(Unit) -self:__TroopsExtracted(running,Group,Unit,nearestGroup) +local groupname=nearestGroup:GetName() +self:__TroopsExtracted(running,Group,Unit,nearestGroup,groupname) local coord=Unit:GetCoordinate()or Group:GetCoordinate() local Point if coord then @@ -71489,7 +73921,7 @@ if Point then nearestGroup:RouteToVec2(Point,5) end end -local hassecondaries=false +hassecondaries=false if type(Cargotype.Templates)=="table"and Cargotype.Templates[2]then for _,_key in pairs(Cargotype.Templates)do table.insert(secondarygroups,_key) @@ -71568,8 +74000,9 @@ if numbernearby>=canloadcratesno and not drop then self:_SendMessage("There are enough crates nearby already! Take care of those first!",10,false,Group) return self end -local IsHerc=self:IsHercules(Unit) +local IsHerc=self:IsFixedWing(Unit) local IsHook=self:IsHook(Unit) +local IsTruck=Unit:IsGround() local cargotype=Cargo local number=number or cargotype:GetCratesNeeded() local cratesneeded=cargotype:GetCratesNeeded() @@ -71590,7 +74023,7 @@ local cratedistance=0 local rheading=0 local angleOffNose=0 local addon=0 -if IsHerc or IsHook then +if IsHerc or IsHook or IsTruck then addon=180 end heading=(heading+addon)%360 @@ -71607,7 +74040,11 @@ local cratealias=string.format("%s-%s-%d",cratename,cratetemplate,math.random(1, if not self.placeCratesAhead or drop==true then cratedistance=(i-1)*2.5+capabilities.length if cratedistance>self.CrateDistance then cratedistance=self.CrateDistance end +if self:IsUnitInAir(Unit)and self:IsFixedWing(Unit)then +rheading=math.random(20,60) +else rheading=UTILS.RandomGaussian(0,30,-90,90,100) +end rheading=math.fmod((heading+rheading),360) cratecoord=position:Translate(cratedistance,rheading) else @@ -71696,8 +74133,10 @@ local text=string.format("Crates for %s have been positioned near you!",cratenam if drop then text=string.format("Crates for %s have been dropped!",cratename) self:__CratesDropped(1,Group,Unit,droppedcargo) -end +else self:_SendMessage(text,10,false,Group) +end +self:_RefreshLoadCratesMenu(Group,Unit) return self end function CTLD:InjectStatics(Zone,Cargo,RandomCoord,FromLoad) @@ -71802,24 +74241,25 @@ self:T(self.lid.." _RemoveCratesNearby") local finddist=self.CrateDistance or 35 local crates,number=self:_FindCratesNearby(_group,_unit,finddist,true,true) if number>0 then +local removedIDs={} local text=REPORT:New("Removing Crates Found Nearby:") text:Add("------------------------------------------------------------") for _,_entry in pairs(crates)do local entry=_entry -local name=entry:GetName() -local dropped=entry:WasDropped() -if dropped then +local name=entry:GetName()or"none" text:Add(string.format("Crate for %s, %dkg removed",name,entry.PerCrateMass)) -else -text:Add(string.format("Crate for %s, %dkg removed",name,entry.PerCrateMass)) -end +if entry:GetPositionable()then entry:GetPositionable():Destroy(false) end +table.insert(removedIDs,entry:GetID()) +end if text:GetCount()==1 then text:Add(" N O N E") end text:Add("------------------------------------------------------------") self:_SendMessage(text:Text(),30,true,_group) +self:_CleanupTrackedCrates(removedIDs) +self:_RefreshLoadCratesMenu(_group,_unit) else self:_SendMessage(string.format("No (loadable) crates within %d meters!",finddist),10,false,_group) end @@ -71862,21 +74302,26 @@ local IsHook=self:IsHook(_unit) if not _ignoreweight then maxloadable=self:_GetMaxLoadableMass(_unit) end -self:T2(self.lid.." Max loadable mass: "..maxloadable) +self:T(self.lid.." Max loadable mass: "..maxloadable) for _,_cargoobject in pairs(existingcrates)do local cargo=_cargoobject local static=cargo:GetPositionable() local weight=cargo:GetMass() local staticid=cargo:GetID() -self:T2(self.lid.." Found cargo mass: "..weight) +self:T(self.lid.." Found cargo mass: "..weight) if static and static:IsAlive()then local restricthooktononstatics=self.enableChinookGCLoading and IsHook +self:T(self.lid.." restricthooktononstatics: "..tostring(restricthooktononstatics)) local cargoisstatic=cargo:GetType()==CTLD_CARGO.Enum.STATIC and true or false +self:T(self.lid.." Cargo is static: "..tostring(cargoisstatic)) local restricted=cargoisstatic and restricthooktononstatics +self:T(self.lid.." Loading restricted: "..tostring(restricted)) local staticpos=static:GetCoordinate() local cando=cargo:UnitCanCarry(_unit) if ignoretype==true then cando=true end +self:T(self.lid.." Unit can carry: "..tostring(cando)) local distance=self:_GetDistance(location,staticpos) +self:T(self.lid..string.format("Dist %dm/%dm | weight %dkg | maxloadable %dkg",distance,finddist,weight,maxloadable)) if distance<=finddist and(weight<=maxloadable or _ignoreweight)and restricted==false and cando==true then index=index+1 table.insert(found,staticid,cargo) @@ -71909,12 +74354,10 @@ elseif not grounded and not canhoverload then self:_SendMessage("Land or hover over the crates to pick them up!",10,false,Group) else local numberonboard=0 -local massonboard=0 local loaded={} if self.Loaded_Cargo[unitname]then loaded=self.Loaded_Cargo[unitname] numberonboard=loaded.Cratesloaded or 0 -massonboard=self:_GetUnitCargoMass(Unit) else loaded={} loaded.Troopsloaded=0 @@ -71935,23 +74378,24 @@ return self else local capacity=cratelimit-numberonboard local crateidsloaded={} -local loops=0 -while loaded.Cratesloadedcrateind and _crate.Positionable~=nil then -crateind=_crate:GetID() -end -else -if not _crate:HasMoved()and not _crate:WasDropped()and _crate:GetID()>crateind then -crateind=_crate:GetID() +local crateMap={} +for _,cObj in pairs(nearcrates)do +if not cObj:HasMoved()or self.allowcratepickupagain then +local cName=cObj:GetName()or"Unknown" +crateMap[cName]=crateMap[cName]or{} +table.insert(crateMap[cName],cObj) end end -end -if crateind>0 then -local crate=nearcrates[crateind] +for cName,crateList in pairs(crateMap)do +if capacity<=0 then break end +table.sort(crateList,function(a,b)return a:GetID()>b:GetID()end) +local needed=crateList[1]:GetCratesNeeded()or 1 +local totalFound=#crateList +local loadedHere=0 +while loaded.Cratesloaded0 then +local fullSets=math.floor(loadedHere/needed) +local leftover=loadedHere%needed +if needed>1 then +if fullSets>0 and leftover==0 then +self:_SendMessage(string.format("Loaded %d %s.",fullSets,cName),10,false,Group) +elseif fullSets>0 and leftover>0 then +self:_SendMessage(string.format("Loaded %d %s(s), with %d leftover crate(s).",fullSets,cName,leftover),10,false,Group) +else +self:_SendMessage(string.format("Loaded only %d/%d crate(s) of %s.",loadedHere,needed,cName),15,false,Group) +end +else +self:_SendMessage(string.format("Loaded %d %s(s).",loadedHere,cName),10,false,Group) +end end end self.Loaded_Cargo[unitname]=loaded self:_UpdateUnitCargoMass(Unit) +self:_RefreshDropCratesMenu(Group,Unit) +self:_RefreshLoadCratesMenu(Group,Unit) self:_CleanupTrackedCrates(crateidsloaded) +self:__CratesPickedUp(1,Group,Unit,loaded.Cargo) end end return self @@ -72069,18 +74533,25 @@ end report:Add("------------------------------------------------------------") report:Add(" -- CRATES --") local cratecount=0 +local accumCrates={} for _,_cargo in pairs(cargotable or{})do local cargo=_cargo local type=cargo:GetType() if(type~=CTLD_CARGO.Enum.TROOPS and type~=CTLD_CARGO.Enum.ENGINEERS and type~=CTLD_CARGO.Enum.GCLOADABLE)and(not cargo:WasDropped()or self.allowcratepickupagain)then -report:Add(string.format("Crate: %s size 1",cargo:GetName())) -cratecount=cratecount+1 +local cName=cargo:GetName() +local needed=cargo:GetCratesNeeded()or 1 +accumCrates[cName]=accumCrates[cName]or{count=0,needed=needed} +accumCrates[cName].count=accumCrates[cName].count+1 end if type==CTLD_CARGO.Enum.GCLOADABLE and not cargo:WasDropped()then report:Add(string.format("GC loaded Crate: %s size 1",cargo:GetName())) cratecount=cratecount+1 end end +for cName,data in pairs(accumCrates)do +cratecount=cratecount+data.count +report:Add(string.format("Crate: %s %d/%d",cName,data.count,data.needed)) +end if cratecount==0 then report:Add(" N O N E") end @@ -72176,15 +74647,20 @@ self:_SendMessage(string.format("Nothing in stock!"),10,false,Group) end return self end -function CTLD:IsHercules(Unit) -if Unit:GetTypeName()=="Hercules"or string.find(Unit:GetTypeName(),"Bronco")then +function CTLD:IsFixedWing(Unit) +local typename=Unit:GetTypeName()or"none" +for _,_name in pairs(self.FixedWingTypes or{})do +if _name and(typename==_name or string.find(typename,_name,1,true))then return true -else +end +end return false end -end function CTLD:IsHook(Unit) -if Unit and string.find(Unit:GetTypeName(),"CH.47")then +if not Unit then return false end +local typeName=Unit:GetTypeName() +if not typeName then return false end +if string.find(typeName,"CH.47")then return true else return false @@ -72225,7 +74701,7 @@ if inzone then droppingatbase=true end local hoverunload=self:IsCorrectHover(Unit) -local IsHerc=self:IsHercules(Unit) +local IsHerc=self:IsFixedWing(Unit) local IsHook=self:IsHook(Unit) if IsHerc and(not IsHook)then hoverunload=self:IsCorrectFlightParameters(Unit) @@ -72258,7 +74734,12 @@ local Angle=(heading+270)%360 if IsHerc or IsHook then Angle=(heading+180)%360 end local offset=hoverunload and self.TroopUnloadDistHover or self.TroopUnloadDistGround if IsHerc then offset=self.TroopUnloadDistGroundHerc or 25 end -if IsHook then offset=self.TroopUnloadDistGroundHook or 15 end +if IsHook then +offset=self.TroopUnloadDistGroundHook or 15 +if hoverunload and self.TroopUnloadDistHoverHook then +offset=self.TroopUnloadDistHoverHook or 5 +end +end randomcoord:Translate(offset,Angle,nil,true) end local tempcount=0 @@ -72273,6 +74754,8 @@ local Positions=self:_GetUnitPositions(randomcoord,rad,heading,_template) self.DroppedTroops[self.TroopCounter]=SPAWN:NewWithAlias(_template,alias) :InitDelayOff() :InitSetUnitAbsolutePositions(Positions) +:InitValidateAndRepositionGroundUnits(self.validateAndRepositionUnits) +:OnSpawnGroup(function(grp)grp.spawntime=timer.getTime()end) :SpawnFromVec2(randomcoord:GetVec2()) self:__TroopsDeployed(1,Group,Unit,self.DroppedTroops[self.TroopCounter],type) end @@ -72319,6 +74802,7 @@ end end self.Loaded_Cargo[unitname]=nil self.Loaded_Cargo[unitname]=loaded +self:_RefreshDropTroopsMenu(Group,Unit) self:_UpdateUnitCargoMass(Unit) else if IsHerc then @@ -72345,7 +74829,7 @@ self:_SendMessage("You need to open the door(s) to drop cargo!",10,false,Group) if not self.debug then return self end end local hoverunload=self:IsCorrectHover(Unit) -local IsHerc=self:IsHercules(Unit) +local IsHerc=self:IsFixedWing(Unit) local IsHook=self:IsHook(Unit) if IsHerc and(not IsHook)then hoverunload=self:IsCorrectFlightParameters(Unit) @@ -72355,6 +74839,8 @@ local unitname=Unit:GetName() if self.Loaded_Cargo[unitname]and(grounded or hoverunload)then local loadedcargo=self.Loaded_Cargo[unitname]or{} local cargotable=loadedcargo.Cargo +local droppedCount={} +local neededMap={} for _,_cargo in pairs(cargotable)do local cargo=_cargo local type=cargo:GetType() @@ -72362,6 +74848,27 @@ if type~=CTLD_CARGO.Enum.TROOPS and type~=CTLD_CARGO.Enum.ENGINEERS and type~=CT self:_GetCrates(Group,Unit,cargo,1,true) cargo:SetWasDropped(true) cargo:SetHasMoved(true) +local cname=cargo:GetName()or"Unknown" +droppedCount[cname]=(droppedCount[cname]or 0)+1 +if not neededMap[cname]then +neededMap[cname]=cargo:GetCratesNeeded()or 1 +end +end +end +for cname,count in pairs(droppedCount)do +local needed=neededMap[cname]or 1 +if needed>1 then +local full=math.floor(count/needed) +local left=count%needed +if full>0 and left==0 then +self:_SendMessage(string.format("Dropped %d %s.",full,cname),10,false,Group) +elseif full>0 and left>0 then +self:_SendMessage(string.format("Dropped %d %s(s), with %d leftover crate(s).",full,cname,left),10,false,Group) +else +self:_SendMessage(string.format("Dropped %d/%d crate(s) of %s.",count,needed,cname),15,false,Group) +end +else +self:_SendMessage(string.format("Dropped %d %s(s).",count,cname),10,false,Group) end end local loaded={} @@ -72384,6 +74891,7 @@ end self.Loaded_Cargo[unitname]=nil self.Loaded_Cargo[unitname]=loaded self:_UpdateUnitCargoMass(Unit) +self:_RefreshDropCratesMenu(Group,Unit) else if IsHerc then self:_SendMessage("Nothing loaded or not within airdrop parameters!",10,false,Group) @@ -72393,9 +74901,9 @@ end end return self end -function CTLD:_BuildCrates(Group,Unit,Engineering) +function CTLD:_BuildCrates(Group,Unit,Engineering,MultiDrop) self:T(self.lid.." _BuildCrates") -if self:IsHercules(Unit)and self.enableHercules and not Engineering then +if self:IsFixedWing(Unit)and self.enableFixedWing and not Engineering then local speed=Unit:GetVelocityKMH() if speed>1 then self:_SendMessage("You need to land / stop to build something, Pilot!",10,false,Group) @@ -72478,12 +74986,13 @@ local build=_build if build.CanBuild then self:_CleanUpCrates(crates,build,number) if self.buildtime and self.buildtime>0 then -local buildtimer=TIMER:New(self._BuildObjectFromCrates,self,Group,Unit,build,false,Group:GetCoordinate()) +local buildtimer=TIMER:New(self._BuildObjectFromCrates,self,Group,Unit,build,false,Group:GetCoordinate(),MultiDrop) buildtimer:Start(self.buildtime) self:_SendMessage(string.format("Build started, ready in %d seconds!",self.buildtime),15,false,Group) -self:__CratesBuildStarted(1,Group,Unit) +self:__CratesBuildStarted(1,Group,Unit,build.Name) +self:_RefreshDropTroopsMenu(Group,Unit) else -self:_BuildObjectFromCrates(Group,Unit,build) +self:_BuildObjectFromCrates(Group,Unit,build,false,nil,MultiDrop) end end end @@ -72504,13 +75013,16 @@ for _,_entry in pairs(self.Cargo_Crates)do if(_entry.Templates[1]==_Template.GroupName)then _Group:Destroy() self:_GetCrates(Group,Unit,_entry,nil,false,true) -return self +self:_RefreshLoadCratesMenu(Group,Unit) +self:__CratesPacked(1,Group,Unit,_entry) +return true end end end end end -return self +self:_SendMessage("Nothing to pack at this distance pilot!",10,false,Group) +return false end function CTLD:_RepairCrates(Group,Unit,Engineering) self:T(self.lid.." _RepairCrates") @@ -72583,7 +75095,7 @@ if not Engineering then self:_SendMessage(string.format("No crates within %d met end return self end -function CTLD:_BuildObjectFromCrates(Group,Unit,Build,Repair,RepairLocation) +function CTLD:_BuildObjectFromCrates(Group,Unit,Build,Repair,RepairLocation,MultiDrop) self:T(self.lid.." _BuildObjectFromCrates") if Group and Group:IsAlive()or(RepairLocation and not Repair)then local name=Build.Name @@ -72604,6 +75116,9 @@ else zone=ZONE_GROUP:New(string.format("Unload zone-%d",math.random(1,10000)),Group,100) end local randomcoord=Build.Coord or zone:GetRandomCoordinate(35):GetVec2() +if MultiDrop and(not Repair)and canmove then +local randomcoord=zone:GetRandomCoordinate(35):GetVec2() +end if Repair then randomcoord=RepairLocation:GetVec2() end @@ -72613,10 +75128,14 @@ local alias=string.format("%s-%d",_template,math.random(1,100000)) if canmove then self.DroppedTroops[self.TroopCounter]=SPAWN:NewWithAlias(_template,alias) :InitDelayOff() +:InitValidateAndRepositionGroundUnits(self.validateAndRepositionUnits) +:OnSpawnGroup(function(grp)grp.spawntime=timer.getTime()end) :SpawnFromVec2(randomcoord) else self.DroppedTroops[self.TroopCounter]=SPAWN:NewWithAlias(_template,alias) :InitDelayOff() +:InitValidateAndRepositionGroundUnits(self.validateAndRepositionUnits) +:OnSpawnGroup(function(grp)grp.spawntime=timer.getTime()end) :SpawnFromVec2(randomcoord) end if Repair then @@ -72630,20 +75149,28 @@ self:T(self.lid.."Group KIA while building!") end return self end +function CTLD:_GetVehicleFormation() +local VehicleMoveFormation=self.VehicleMoveFormation or AI.Task.VehicleFormation.VEE +if type(self.VehicleMoveFormation)=="table"then +VehicleMoveFormation=self.VehicleMoveFormation[math.random(1,#self.VehicleMoveFormation)] +end +return VehicleMoveFormation +end function CTLD:_MoveGroupToZone(Group) self:T(self.lid.." _MoveGroupToZone") local groupname=Group:GetName()or"none" local groupcoord=Group:GetCoordinate() local outcome,name,zone,distance=self:IsUnitInZone(Group,CTLD.CargoZoneType.MOVE) +self:T({canmove=outcome,name=name,zone=zone,dist=distance,max=self.movetroopsdistance}) if(distance<=self.movetroopsdistance)and outcome==true and zone~=nil then local groupname=Group:GetName() local zonecoord=zone:GetRandomCoordinate(20,125) -local coordinate=zonecoord:GetVec2() +local formation=self:_GetVehicleFormation() Group:SetAIOn() Group:OptionAlarmStateAuto() Group:OptionDisperseOnAttack(30) -Group:OptionROEOpenFirePossible() -Group:RouteToVec2(coordinate,5) +Group:OptionROEOpenFire() +Group:RouteGroundTo(zonecoord,25,formation) end return self end @@ -72673,25 +75200,86 @@ end self:_CleanupTrackedCrates(destIDs) return self end +function CTLD:_DropAndBuild(Group,Unit) +if self.nobuildinloadzones then +if self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD)then +self:_SendMessage("You cannot build in a loading area, Pilot!",10,false,Group) +return self +end +end +self:_UnloadCrates(Group,Unit) +timer.scheduleFunction(function()self:_BuildCrates(Group,Unit,false,true)end,{},timer.getTime()+1) +end +function CTLD:_DropSingleAndBuild(Group,Unit,setIndex) +if self.nobuildinloadzones then +if self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD)then +self:_SendMessage("You cannot build in a loading area, Pilot!",10,false,Group) +return self +end +end +self:_UnloadSingleCrateSet(Group,Unit,setIndex) +timer.scheduleFunction(function()self:_BuildCrates(Group,Unit,false)end,{},timer.getTime()+1) +end +function CTLD:_PackAndLoad(Group,Unit) +if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then +self:_SendMessage("You need to open the door(s) to load cargo!",10,false,Group) +return self +end +if not self:_PackCratesNearby(Group,Unit)then +return self +end +timer.scheduleFunction(function()self:_LoadCratesNearby(Group,Unit)end,{},timer.getTime()+1) +return self +end +function CTLD:_PackAndRemove(Group,Unit) +if not self:_PackCratesNearby(Group,Unit)then +return self +end +timer.scheduleFunction(function()self:_RemoveCratesNearby(Group,Unit)end,{},timer.getTime()+1) +return self +end +function CTLD:_GetAndLoad(Group,Unit,cargoObj) +if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then +self:_SendMessage("You need to open the door(s) to load cargo!",10,false,Group) +return self +end +self:_GetCrates(Group,Unit,cargoObj) +timer.scheduleFunction(function()self:_LoadSingleCrateSet(Group,Unit,cargoObj.Name)end,{},timer.getTime()+1) +end +function CTLD:_GetAllAndLoad(Group,Unit) +if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then +self:_SendMessage("You need to open the door(s) to load cargo!",10,false,Group) +return self +end +timer.scheduleFunction(function()self:_LoadCratesNearby(Group,Unit)end,{},timer.getTime()+1) +end function CTLD:_RefreshF10Menus() self:T(self.lid.." _RefreshF10Menus") +self.onestepmenu=self.onestepmenu or false local PlayerSet=self.PilotGroups local PlayerTable=PlayerSet:GetSetObjects() local _UnitList={} -for _key,_group in pairs(PlayerTable)do -local _unit=_group:GetFirstUnitAlive() -if _unit then -if _unit:IsAlive()and _unit:IsPlayer()then -if _unit:IsHelicopter()or(self:IsHercules(_unit)and self.enableHercules)then -local unitName=_unit:GetName() -_UnitList[unitName]=unitName -else -local unitName=_unit:GetName() -_UnitList[unitName]=nil +for _,groupObj in pairs(PlayerTable)do +local firstUnit=groupObj:GetFirstUnitAlive() +if firstUnit then +if firstUnit:IsPlayer()then +if firstUnit:IsHelicopter()or(self.enableFixedWing and self:IsFixedWing(firstUnit))then +local _unit=firstUnit:GetName() +_UnitList[_unit]=_unit end end end end +if self.allowCATransport and self.CATransportSet then +for _,_clientobj in pairs(self.CATransportSet.Set)do +local client=_clientobj +if client:IsGround()then +local cname=client:GetName() +self:T(self.lid.."Adding: "..cname) +_UnitList[cname]=cname +end +end +end self.CtldUnits=_UnitList if self.usesubcats then for _id,_cargo in pairs(self.Cargo_Crates)do @@ -72716,156 +75304,237 @@ end local menucount=0 local menus={} for _,_unitName in pairs(self.CtldUnits)do -if not self.MenusDone[_unitName]then +if(not self.MenusDone[_unitName])or(self.showstockinmenuitems==true)then +self:T(self.lid.."Menu not done yet for ".._unitName) local _unit=UNIT:FindByName(_unitName) -if _unit then +if not _unit and self.allowCATransport then +_unit=CLIENT:FindByName(_unitName) +end +if _unit and _unit:IsAlive()then local _group=_unit:GetGroup() if _group then -local unittype=_unit:GetTypeName() +self:T(self.lid.."Unit and Group exist") local capabilities=self:_GetUnitCapabilities(_unit) local cantroops=capabilities.troops local cancrates=capabilities.crates +local unittype=_unit:GetTypeName() local isHook=self:IsHook(_unit) local nohookswitch=true -local topmenu=MENU_GROUP:New(_group,"CTLD",nil) +if _group.CTLDTopmenu then +_group.CTLDTopmenu:Remove() +_group.CTLDTopmenu=nil +end local toptroops=nil local topcrates=nil +local topmenu=MENU_GROUP:New(_group,"CTLD",nil) +_group.CTLDTopmenu=topmenu if cantroops then -toptroops=MENU_GROUP:New(_group,"Manage Troops",topmenu) -end -if cancrates then -topcrates=MENU_GROUP:New(_group,"Manage Crates",topmenu) -end -local listmenu=MENU_GROUP_COMMAND:New(_group,"List boarded cargo",topmenu,self._ListCargo,self,_group,_unit) -local invtry=MENU_GROUP_COMMAND:New(_group,"Inventory",topmenu,self._ListInventory,self,_group,_unit) -local rbcns=MENU_GROUP_COMMAND:New(_group,"List active zone beacons",topmenu,self._ListRadioBeacons,self,_group,_unit) -local smoketopmenu=MENU_GROUP:New(_group,"Smokes, Flares, Beacons",topmenu) -local smokemenu=MENU_GROUP_COMMAND:New(_group,"Smoke zones nearby",smoketopmenu,self.SmokeZoneNearBy,self,_unit,false) -local smokeself=MENU_GROUP:New(_group,"Drop smoke now",smoketopmenu) -local smokeselfred=MENU_GROUP_COMMAND:New(_group,"Red smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Red) -local smokeselfblue=MENU_GROUP_COMMAND:New(_group,"Blue smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Blue) -local smokeselfgreen=MENU_GROUP_COMMAND:New(_group,"Green smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Green) -local smokeselforange=MENU_GROUP_COMMAND:New(_group,"Orange smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Orange) -local smokeselfwhite=MENU_GROUP_COMMAND:New(_group,"White smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.White) -local flaremenu=MENU_GROUP_COMMAND:New(_group,"Flare zones nearby",smoketopmenu,self.SmokeZoneNearBy,self,_unit,true) -local flareself=MENU_GROUP_COMMAND:New(_group,"Fire flare now",smoketopmenu,self.SmokePositionNow,self,_unit,true) -local beaconself=MENU_GROUP_COMMAND:New(_group,"Drop beacon now",smoketopmenu,self.DropBeaconNow,self,_unit):Refresh() -if cantroops then +local toptroops=MENU_GROUP:New(_group,"Manage Troops",topmenu) local troopsmenu=MENU_GROUP:New(_group,"Load troops",toptroops) +_group.MyTopTroopsMenu=toptroops if self.usesubcats then local subcatmenus={} -for _name,_entry in pairs(self.subcatsTroop)do -subcatmenus[_name]=MENU_GROUP:New(_group,_name,troopsmenu) +for catName,_ in pairs(self.subcatsTroop)do +subcatmenus[catName]=MENU_GROUP:New(_group,catName,troopsmenu) end -for _,_entry in pairs(self.Cargo_Troops)do -local entry=_entry -local subcat=entry.Subcategory -local noshow=entry.DontShowInMenu -if not noshow then -menucount=menucount+1 -menus[menucount]=MENU_GROUP_COMMAND:New(_group,entry.Name,subcatmenus[subcat],self._LoadTroops,self,_group,_unit,entry) +for _,cargoObj in pairs(self.Cargo_Troops)do +if not cargoObj.DontShowInMenu then +local stock=cargoObj:GetStock() +local menutext=cargoObj.Name +if(stock>=0)and(self.showstockinmenuitems==true)then menutext=menutext.." ["..stock.."]"end +MENU_GROUP_COMMAND:New(_group,menutext,subcatmenus[cargoObj.Subcategory],self._LoadTroops,self,_group,_unit,cargoObj) end end else -for _,_entry in pairs(self.Cargo_Troops)do -local entry=_entry -local noshow=entry.DontShowInMenu -if not noshow then -menucount=menucount+1 -menus[menucount]=MENU_GROUP_COMMAND:New(_group,entry.Name,troopsmenu,self._LoadTroops,self,_group,_unit,entry) +for _,cargoObj in pairs(self.Cargo_Troops)do +if not cargoObj.DontShowInMenu then +local stock=cargoObj:GetStock() +local menutext=cargoObj.Name +if(stock>=0)and(self.showstockinmenuitems==true)then menutext=menutext.." ["..stock.."]"end +MENU_GROUP_COMMAND:New(_group,menutext,troopsmenu,self._LoadTroops,self,_group,_unit,cargoObj) +end +end +end +local dropTroopsMenu=MENU_GROUP:New(_group,"Drop Troops",toptroops):Refresh() +MENU_GROUP_COMMAND:New(_group,"Drop ALL troops",dropTroopsMenu,self._UnloadTroops,self,_group,_unit):Refresh() +MENU_GROUP_COMMAND:New(_group,"Extract troops",toptroops,self._ExtractTroops,self,_group,_unit):Refresh() +local uName=_unit:GetName() +local loadedData=self.Loaded_Cargo[uName] +if loadedData and loadedData.Cargo then +for i,cargoObj in ipairs(loadedData.Cargo)do +if cargoObj and(cargoObj:GetType()==CTLD_CARGO.Enum.TROOPS or cargoObj:GetType()==CTLD_CARGO.Enum.ENGINEERS)and not cargoObj:WasDropped()then +local name=cargoObj:GetName()or"Unknown" +local needed=cargoObj:GetCratesNeeded()or 1 +local cID=cargoObj:GetID() +local line=string.format("Drop: %s",name,needed,cID) +MENU_GROUP_COMMAND:New(_group,line,dropTroopsMenu,self._UnloadSingleTroopByID,self,_group,_unit,cID):Refresh() end end end -local unloadmenu1=MENU_GROUP_COMMAND:New(_group,"Drop troops",toptroops,self._UnloadTroops,self,_group,_unit):Refresh() -local extractMenu1=MENU_GROUP_COMMAND:New(_group,"Extract troops",toptroops,self._ExtractTroops,self,_group,_unit):Refresh() end if cancrates then -if nohookswitch then -local loadmenu=MENU_GROUP_COMMAND:New(_group,"Load crates",topcrates,self._LoadCratesNearby,self,_group,_unit) -end +local topcrates=MENU_GROUP:New(_group,"Manage Crates",topmenu) +_group.MyTopCratesMenu=topcrates local cratesmenu=MENU_GROUP:New(_group,"Get Crates",topcrates) -local packmenu=MENU_GROUP_COMMAND:New(_group,"Pack crates",topcrates,self._PackCratesNearby,self,_group,_unit) -local removecratesmenu=MENU_GROUP:New(_group,"Remove crates",topcrates) +if self.onestepmenu then if self.usesubcats then local subcatmenus={} -for _name,_entry in pairs(self.subcats)do -subcatmenus[_name]=MENU_GROUP:New(_group,_name,cratesmenu) +for catName,_ in pairs(self.subcats)do +subcatmenus[catName]=MENU_GROUP:New(_group,catName,cratesmenu) end -for _,_entry in pairs(self.Cargo_Crates)do -local entry=_entry -local subcat=entry.Subcategory -local noshow=entry.DontShowInMenu -local zone=entry.Location -if not noshow then -menucount=menucount+1 -local menutext=string.format("Crate %s (%dkg)",entry.Name,entry.PerCrateMass or 0) -if zone then -menutext=string.format("Crate %s (%dkg)[R]",entry.Name,entry.PerCrateMass or 0) -end -menus[menucount]=MENU_GROUP_COMMAND:New(_group,menutext,subcatmenus[subcat],self._GetCrates,self,_group,_unit,entry) +for _,cargoObj in pairs(self.Cargo_Crates)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +local mSet=MENU_GROUP:New(_group,txt,subcatmenus[cargoObj.Subcategory]) +MENU_GROUP_COMMAND:New(_group,"Get",mSet,self._GetCrates,self,_group,_unit,cargoObj) +MENU_GROUP_COMMAND:New(_group,"Get and Load",mSet,self._GetAndLoad,self,_group,_unit,cargoObj) end end -for _,_entry in pairs(self.Cargo_Statics)do -local entry=_entry -local subcat=entry.Subcategory -local noshow=entry.DontShowInMenu -local zone=entry.Location -if not noshow then -menucount=menucount+1 -local menutext=string.format("Crate %s (%dkg)",entry.Name,entry.PerCrateMass or 0) -if zone then -menutext=string.format("Crate %s (%dkg)[R]",entry.Name,entry.PerCrateMass or 0) -end -menus[menucount]=MENU_GROUP_COMMAND:New(_group,menutext,subcatmenus[subcat],self._GetCrates,self,_group,_unit,entry) +for _,cargoObj in pairs(self.Cargo_Statics)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +local mSet=MENU_GROUP:New(_group,txt,subcatmenus[cargoObj.Subcategory]) +MENU_GROUP_COMMAND:New(_group,"Get",mSet,self._GetCrates,self,_group,_unit,cargoObj) +MENU_GROUP_COMMAND:New(_group,"Get and Load",mSet,self._GetAndLoad,self,_group,_unit,cargoObj) end end else -for _,_entry in pairs(self.Cargo_Crates)do -local entry=_entry -local noshow=entry.DontShowInMenu -local zone=entry.Location -if not noshow then -menucount=menucount+1 -local menutext=string.format("Crate %s (%dkg)",entry.Name,entry.PerCrateMass or 0) -if zone then -menutext=string.format("Crate %s (%dkg)[R]",entry.Name,entry.PerCrateMass or 0) -end -menus[menucount]=MENU_GROUP_COMMAND:New(_group,menutext,cratesmenu,self._GetCrates,self,_group,_unit,entry) +for _,cargoObj in pairs(self.Cargo_Crates)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +local mSet=MENU_GROUP:New(_group,txt,cratesmenu) +MENU_GROUP_COMMAND:New(_group,"Get",mSet,self._GetCrates,self,_group,_unit,cargoObj) +MENU_GROUP_COMMAND:New(_group,"Get and Load",mSet,self._GetAndLoad,self,_group,_unit,cargoObj) end end -for _,_entry in pairs(self.Cargo_Statics)do -local entry=_entry -local noshow=entry.DontShowInMenu -local zone=entry.Location -if not noshow then -menucount=menucount+1 -local menutext=string.format("Crate %s (%dkg)",entry.Name,entry.PerCrateMass or 0) -if zone then -menutext=string.format("Crate %s (%dkg)[R]",entry.Name,entry.PerCrateMass or 0) -end -menus[menucount]=MENU_GROUP_COMMAND:New(_group,menutext,cratesmenu,self._GetCrates,self,_group,_unit,entry) +for _,cargoObj in pairs(self.Cargo_Statics)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +local mSet=MENU_GROUP:New(_group,txt,cratesmenu) +MENU_GROUP_COMMAND:New(_group,"Get",mSet,self._GetCrates,self,_group,_unit,cargoObj) +MENU_GROUP_COMMAND:New(_group,"Get and Load",mSet,self._GetAndLoad,self,_group,_unit,cargoObj) end end end -listmenu=MENU_GROUP_COMMAND:New(_group,"List crates nearby",topcrates,self._ListCratesNearby,self,_group,_unit) -local removecrates=MENU_GROUP_COMMAND:New(_group,"Remove crates nearby",removecratesmenu,self._RemoveCratesNearby,self,_group,_unit) -local unloadmenu -if nohookswitch then -unloadmenu=MENU_GROUP_COMMAND:New(_group,"Drop crates",topcrates,self._UnloadCrates,self,_group,_unit) +else +if self.usesubcats then +local subcatmenus={} +for catName,_ in pairs(self.subcats)do +subcatmenus[catName]=MENU_GROUP:New(_group,catName,cratesmenu) end +for _,cargoObj in pairs(self.Cargo_Crates)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +MENU_GROUP_COMMAND:New(_group,txt,subcatmenus[cargoObj.Subcategory],self._GetCrates,self,_group,_unit,cargoObj) +end +end +for _,cargoObj in pairs(self.Cargo_Statics)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +MENU_GROUP_COMMAND:New(_group,txt,subcatmenus[cargoObj.Subcategory],self._GetCrates,self,_group,_unit,cargoObj) +end +end +else +for _,cargoObj in pairs(self.Cargo_Crates)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +MENU_GROUP_COMMAND:New(_group,txt,cratesmenu,self._GetCrates,self,_group,_unit,cargoObj) +end +end +for _,cargoObj in pairs(self.Cargo_Statics)do +if not cargoObj.DontShowInMenu then +local txt=string.format("Crate %s (%dkg)",cargoObj.Name,cargoObj.PerCrateMass or 0) +if cargoObj.Location then txt=txt.."[R]"end +local stock=cargoObj:GetStock() +if stock>=0 and self.showstockinmenuitems then txt=txt.."["..stock.."]"end +MENU_GROUP_COMMAND:New(_group,txt,cratesmenu,self._GetCrates,self,_group,_unit,cargoObj) +end +end +end +end +local loadCratesMenu=MENU_GROUP:New(_group,"Load Crates",topcrates) +_group.MyLoadCratesMenu=loadCratesMenu +MENU_GROUP_COMMAND:New(_group,"Load ALL",loadCratesMenu,self._LoadCratesNearby,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"Show loadable crates",loadCratesMenu,self._RefreshLoadCratesMenu,self,_group,_unit) +local dropCratesMenu=MENU_GROUP:New(_group,"Drop Crates",topcrates) +topcrates.DropCratesMenu=dropCratesMenu if not self.nobuildmenu then -local buildmenu=MENU_GROUP_COMMAND:New(_group,"Build crates",topcrates,self._BuildCrates,self,_group,_unit) -local repairmenu=MENU_GROUP_COMMAND:New(_group,"Repair",topcrates,self._RepairCrates,self,_group,_unit):Refresh() -elseif unloadmenu then -unloadmenu:Refresh() +MENU_GROUP_COMMAND:New(_group,"Build crates",topcrates,self._BuildCrates,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"Repair",topcrates,self._RepairCrates,self,_group,_unit):Refresh() end -end -if self:IsHercules(_unit)then -local hoverpars=MENU_GROUP_COMMAND:New(_group,"Show flight parameters",topmenu,self._ShowFlightParams,self,_group,_unit):Refresh() +local removecratesmenu=MENU_GROUP:New(_group,"Remove crates",topcrates) +MENU_GROUP_COMMAND:New(_group,"Remove crates nearby",removecratesmenu,self._RemoveCratesNearby,self,_group,_unit) +if self.onestepmenu then +local mPack=MENU_GROUP:New(_group,"Pack crates",topcrates) +MENU_GROUP_COMMAND:New(_group,"Pack",mPack,self._PackCratesNearby,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"Pack and Load",mPack,self._PackAndLoad,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"Pack and Remove",mPack,self._PackAndRemove,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"List crates nearby",topcrates,self._ListCratesNearby,self,_group,_unit) else -local hoverpars=MENU_GROUP_COMMAND:New(_group,"Show hover parameters",topmenu,self._ShowHoverParams,self,_group,_unit):Refresh() +MENU_GROUP_COMMAND:New(_group,"Pack crates",topcrates,self._PackCratesNearby,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"List crates nearby",topcrates,self._ListCratesNearby,self,_group,_unit) +end +local uName=_unit:GetName() +local loadedData=self.Loaded_Cargo[uName] +if loadedData and loadedData.Cargo then +local cargoByName={} +for _,cgo in pairs(loadedData.Cargo)do +if cgo and(not cgo:WasDropped())then +local cname=cgo:GetName() +local cneeded=cgo:GetCratesNeeded() +cargoByName[cname]=cargoByName[cname]or{count=0,needed=cneeded} +cargoByName[cname].count=cargoByName[cname].count+1 +end +end +for name,info in pairs(cargoByName)do +local line=string.format("Drop %s (%d/%d)",name,info.count,info.needed) +MENU_GROUP_COMMAND:New(_group,line,dropCratesMenu,self._UnloadSingleCrateSet,self,_group,_unit,name) +end +end +end +MENU_GROUP_COMMAND:New(_group,"List boarded cargo",topmenu,self._ListCargo,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"Inventory",topmenu,self._ListInventory,self,_group,_unit) +MENU_GROUP_COMMAND:New(_group,"List active zone beacons",topmenu,self._ListRadioBeacons,self,_group,_unit) +local smoketopmenu=MENU_GROUP:New(_group,"Smokes, Flares, Beacons",topmenu) +MENU_GROUP_COMMAND:New(_group,"Smoke zones nearby",smoketopmenu,self.SmokeZoneNearBy,self,_unit,false) +local smokeself=MENU_GROUP:New(_group,"Drop smoke now",smoketopmenu) +MENU_GROUP_COMMAND:New(_group,"Red smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Red) +MENU_GROUP_COMMAND:New(_group,"Blue smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Blue) +MENU_GROUP_COMMAND:New(_group,"Green smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Green) +MENU_GROUP_COMMAND:New(_group,"Orange smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Orange) +MENU_GROUP_COMMAND:New(_group,"White smoke",smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.White) +MENU_GROUP_COMMAND:New(_group,"Flare zones nearby",smoketopmenu,self.SmokeZoneNearBy,self,_unit,true) +MENU_GROUP_COMMAND:New(_group,"Fire flare now",smoketopmenu,self.SmokePositionNow,self,_unit,true) +MENU_GROUP_COMMAND:New(_group,"Drop beacon now",smoketopmenu,self.DropBeaconNow,self,_unit):Refresh() +if self:IsFixedWing(_unit)then +MENU_GROUP_COMMAND:New(_group,"Show flight parameters",topmenu,self._ShowFlightParams,self,_group,_unit):Refresh() +else +MENU_GROUP_COMMAND:New(_group,"Show hover parameters",topmenu,self._ShowHoverParams,self,_group,_unit):Refresh() end self.MenusDone[_unitName]=true +self:_RefreshLoadCratesMenu(_group,_unit) +self:_RefreshDropCratesMenu(_group,_unit) end end else @@ -72874,6 +75543,534 @@ end end return self end +function CTLD:_RefreshLoadCratesMenu(Group,Unit) +if not Group.MyLoadCratesMenu then return end +Group.MyLoadCratesMenu:RemoveSubMenus() +local d=self.CrateDistance or 35 +local nearby,n=self:_FindCratesNearby(Group,Unit,d,true,true) +if n==0 then +MENU_GROUP_COMMAND:New(Group,"No crates found! Rescan?",Group.MyLoadCratesMenu,function()self:_RefreshLoadCratesMenu(Group,Unit)end) +return +end +MENU_GROUP_COMMAND:New(Group,"Load ALL",Group.MyLoadCratesMenu,self._LoadCratesNearby,self,Group,Unit) +local cargoByName={} +for _,crate in pairs(nearby)do +local name=crate:GetName() +cargoByName[name]=cargoByName[name]or{} +table.insert(cargoByName[name],crate) +end +local lineIndex=1 +for cName,list in pairs(cargoByName)do +local needed=list[1]:GetCratesNeeded()or 1 +table.sort(list,function(a,b)return a:GetID()=needed then +label=string.format("%d. Load %s",lineIndex,cName) +i=i+needed +else +label=string.format("%d. Load %s (%d/%d)",lineIndex,cName,left,needed) +i=#list+1 +end +MENU_GROUP_COMMAND:New(Group,label,Group.MyLoadCratesMenu,self._LoadSingleCrateSet,self,Group,Unit,cName) +lineIndex=lineIndex+1 +end +end +end +function CTLD:_LoadSingleCrateSet(Group,Unit,cargoName) +self:T(self.lid.." _LoadSingleCrateSet cargoName="..(cargoName or"nil")) +local grounded=not self:IsUnitInAir(Unit) +local hover=self:CanHoverLoad(Unit) +if not grounded and not hover then +self:_SendMessage("You must land or hover to load crates!",10,false,Group) +return self +end +if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then +self:_SendMessage("You need to open the door(s) to load cargo!",10,false,Group) +return self +end +local finddist=self.CrateDistance or 35 +local cratesNearby,number=self:_FindCratesNearby(Group,Unit,finddist,false,false) +if number==0 then +self:_SendMessage("No crates found in range!",10,false,Group) +return self +end +local matchingCrates={} +local needed=nil +for _,crateObj in pairs(cratesNearby)do +if crateObj:GetName()==cargoName then +needed=needed or crateObj:GetCratesNeeded() +table.insert(matchingCrates,crateObj) +end +end +if not needed then +self:_SendMessage(string.format("No \"%s\" crates found in range!",cargoName),10,false,Group) +return self +end +local found=#matchingCrates +local unitName=Unit:GetName() +local loadedData=self.Loaded_Cargo[unitName]or{Troopsloaded=0,Cratesloaded=0,Cargo={}} +local capabilities=self:_GetUnitCapabilities(Unit) +local capacity=capabilities.cratelimit or 0 +if loadedData.Cratesloaded>=capacity then +self:_SendMessage("No more capacity to load crates!",10,false,Group) +return self +end +local spaceLeft=capacity-loadedData.Cratesloaded +local toLoad=math.min(found,needed,spaceLeft) +if toLoad<1 then +self:_SendMessage("Cannot load crates: either none found or no capacity left.",10,false,Group) +return self +end +local crateIDsLoaded={} +for i=1,toLoad do +local crate=matchingCrates[i] +crate:SetHasMoved(true) +crate:SetWasDropped(false) +table.insert(loadedData.Cargo,crate) +loadedData.Cratesloaded=loadedData.Cratesloaded+1 +local stObj=crate:GetPositionable() +if stObj and stObj:IsAlive()then +stObj:Destroy(false) +end +table.insert(crateIDsLoaded,crate:GetID()) +end +self.Loaded_Cargo[unitName]=loadedData +self:_UpdateUnitCargoMass(Unit) +local newSpawned={} +for _,cObj in ipairs(self.Spawned_Cargo)do +local keep=true +for i=1,toLoad do +if matchingCrates[i]and cObj:GetID()==matchingCrates[i]:GetID()then +keep=false +break +end +end +if keep then +table.insert(newSpawned,cObj) +end +end +self.Spawned_Cargo=newSpawned +local loadedHere=toLoad +if loadedHere=capacity then +self:_SendMessage(string.format("Loaded only %d/%d crate(s) of %s. Cargo limit is now reached!",loadedHere,needed,cargoName),10,false,Group) +else +local fullSets=math.floor(loadedHere/needed) +local leftover=loadedHere%needed +if needed>1 then +if fullSets>0 and leftover==0 then +self:_SendMessage(string.format("Loaded %d %s.",fullSets,cargoName),10,false,Group) +elseif fullSets>0 and leftover>0 then +self:_SendMessage(string.format("Loaded %d %s(s), with %d leftover crate(s).",fullSets,cargoName,leftover),10,false,Group) +else +self:_SendMessage(string.format("Loaded only %d/%d crate(s) of %s.",loadedHere,needed,cargoName),15,false,Group) +end +else +self:_SendMessage(string.format("Loaded %d %s(s).",loadedHere,cargoName),10,false,Group) +end +end +self:_RefreshLoadCratesMenu(Group,Unit) +self:_RefreshDropCratesMenu(Group,Unit) +return self +end +function CTLD:_UnloadSingleCrateSet(Group,Unit,setIndex) +self:T(self.lid.." _UnloadSingleCrateSet") +if not self.dropcratesanywhere then +local inzone,zoneName,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.DROP) +if not inzone then +self:_SendMessage("You are not close enough to a drop zone!",10,false,Group) +if not self.debug then +return self +end +end +end +if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then +self:_SendMessage("You need to open the door(s) to drop cargo!",10,false,Group) +if not self.debug then return self end +end +local unitName=Unit:GetName() +if not self.CrateGroupList or not self.CrateGroupList[unitName]then +self:_SendMessage("No crate groups found for this unit!",10,false,Group) +if not self.debug then return self end +return self +end +local chunk=self.CrateGroupList[unitName][setIndex] +if not chunk then +self:_SendMessage("No crate set found or index invalid!",10,false,Group) +if not self.debug then return self end +return self +end +if#chunk==0 then +self:_SendMessage("No crate found in that set!",10,false,Group) +if not self.debug then return self end +return self +end +local grounded=not self:IsUnitInAir(Unit) +local hoverunload=self:IsCorrectHover(Unit) +local isHerc=self:IsFixedWing(Unit) +local isHook=self:IsHook(Unit) +if isHerc and not isHook then +hoverunload=self:IsCorrectFlightParameters(Unit) +end +if not grounded and not hoverunload then +if isHerc then +self:_SendMessage("Nothing loaded or not within airdrop parameters!",10,false,Group) +else +self:_SendMessage("Nothing loaded or not hovering within parameters!",10,false,Group) +end +if not self.debug then return self end +return self +end +local crateObj=chunk[1] +if not crateObj then +self:_SendMessage("No crate found in that set!",10,false,Group) +if not self.debug then return self end +return self +end +local needed=crateObj:GetCratesNeeded()or 1 +self:_GetCrates(Group,Unit,crateObj,#chunk,true) +for _,cObj in ipairs(chunk)do +cObj:SetWasDropped(true) +cObj:SetHasMoved(true) +end +local cname=crateObj:GetName()or"Unknown" +local count=#chunk +if needed>1 then +if count==needed then +self:_SendMessage(string.format("Dropped %d %s.",1,cname),10,false,Group) +else +self:_SendMessage(string.format("Dropped %d/%d crate(s) of %s.",count,needed,cname),15,false,Group) +end +else +self:_SendMessage(string.format("Dropped %d %s(s).",count,cname),10,false,Group) +end +local loadedData=self.Loaded_Cargo[unitName] +if loadedData and loadedData.Cargo then +local newList={} +local newCratesCount=0 +for _,cObj in ipairs(loadedData.Cargo)do +if not cObj:WasDropped()then +table.insert(newList,cObj) +local ct=cObj:GetType() +if ct~=CTLD_CARGO.Enum.TROOPS and ct~=CTLD_CARGO.Enum.ENGINEERS then +newCratesCount=newCratesCount+1 +end +end +end +loadedData.Cargo=newList +loadedData.Cratesloaded=newCratesCount +self.Loaded_Cargo[unitName]=loadedData +end +self:_UpdateUnitCargoMass(Unit) +self:_RefreshDropCratesMenu(Group,Unit) +self:_RefreshLoadCratesMenu(Group,Unit) +return self +end +function CTLD:_RefreshDropCratesMenu(Group,Unit) +if not Group.CTLDTopmenu then return end +local topCrates=Group.MyTopCratesMenu +if not topCrates then return end +if topCrates.DropCratesMenu then +topCrates.DropCratesMenu:RemoveSubMenus() +else +topCrates.DropCratesMenu=MENU_GROUP:New(Group,"Drop Crates",topCrates) +end +local dropCratesMenu=topCrates.DropCratesMenu +local loadedData=self.Loaded_Cargo[Unit:GetName()] +if not loadedData or not loadedData.Cargo then +MENU_GROUP_COMMAND:New(Group,"No crates to drop!",dropCratesMenu,function()end) +return +end +local cargoByName={} +local dropableCrates=0 +for _,cObj in ipairs(loadedData.Cargo)do +if cObj and not cObj:WasDropped()then +local cType=cObj:GetType() +if cType~=CTLD_CARGO.Enum.TROOPS and cType~=CTLD_CARGO.Enum.ENGINEERS and cType~=CTLD_CARGO.Enum.GCLOADABLE then +local name=cObj:GetName()or"Unknown" +cargoByName[name]=cargoByName[name]or{} +table.insert(cargoByName[name],cObj) +dropableCrates=dropableCrates+1 +end +end +end +if dropableCrates==0 then +MENU_GROUP_COMMAND:New(Group,"No crates to drop!",dropCratesMenu,function()end) +return +end +if not self.onestepmenu then +MENU_GROUP_COMMAND:New(Group,"Drop ALL crates",dropCratesMenu,self._UnloadCrates,self,Group,Unit) +self.CrateGroupList=self.CrateGroupList or{} +self.CrateGroupList[Unit:GetName()]={} +local lineIndex=1 +for cName,list in pairs(cargoByName)do +local needed=list[1]:GetCratesNeeded()or 1 +table.sort(list,function(a,b)return a:GetID()=needed then +local chunk={} +for n=i,i+needed-1 do +table.insert(chunk,list[n]) +end +local label=string.format("%d. %s",lineIndex,cName) +table.insert(self.CrateGroupList[Unit:GetName()],chunk) +local setIndex=#self.CrateGroupList[Unit:GetName()] +MENU_GROUP_COMMAND:New(Group,label,dropCratesMenu,self._UnloadSingleCrateSet,self,Group,Unit,setIndex) +i=i+needed +else +local chunk={} +for n=i,#list do +table.insert(chunk,list[n]) +end +local label=string.format("%d. %s %d/%d",lineIndex,cName,left,needed) +table.insert(self.CrateGroupList[Unit:GetName()],chunk) +local setIndex=#self.CrateGroupList[Unit:GetName()] +MENU_GROUP_COMMAND:New(Group,label,dropCratesMenu,self._UnloadSingleCrateSet,self,Group,Unit,setIndex) +i=#list+1 +end +lineIndex=lineIndex+1 +end +end +else +local mAll=MENU_GROUP:New(Group,"Drop ALL crates",dropCratesMenu) +MENU_GROUP_COMMAND:New(Group,"Drop",mAll,self._UnloadCrates,self,Group,Unit) +if not(self:IsUnitInAir(Unit)and self:IsFixedWing(Unit))then +MENU_GROUP_COMMAND:New(Group,"Drop and build",mAll,self._DropAndBuild,self,Group,Unit) +end +self.CrateGroupList=self.CrateGroupList or{} +self.CrateGroupList[Unit:GetName()]={} +local lineIndex=1 +for cName,list in pairs(cargoByName)do +local needed=list[1]:GetCratesNeeded()or 1 +table.sort(list,function(a,b)return a:GetID()=needed then +local chunk={} +for n=i,i+needed-1 do +table.insert(chunk,list[n]) +end +local label=string.format("%d. %s",lineIndex,cName) +table.insert(self.CrateGroupList[Unit:GetName()],chunk) +local setIndex=#self.CrateGroupList[Unit:GetName()] +local mSet=MENU_GROUP:New(Group,label,dropCratesMenu) +MENU_GROUP_COMMAND:New(Group,"Drop",mSet,self._UnloadSingleCrateSet,self,Group,Unit,setIndex) +if not(self:IsUnitInAir(Unit)and self:IsFixedWing(Unit))then +MENU_GROUP_COMMAND:New(Group,"Drop and build",mSet,self._DropSingleAndBuild,self,Group,Unit,setIndex) +end +i=i+needed +else +local chunk={} +for n=i,#list do +table.insert(chunk,list[n]) +end +local label=string.format("%d. %s %d/%d",lineIndex,cName,left,needed) +table.insert(self.CrateGroupList[Unit:GetName()],chunk) +local setIndex=#self.CrateGroupList[Unit:GetName()] +MENU_GROUP_COMMAND:New(Group,label,dropCratesMenu,self._UnloadSingleCrateSet,self,Group,Unit,setIndex) +i=#list+1 +end +lineIndex=lineIndex+1 +end +end +end +end +function CTLD:_UnloadSingleTroopByID(Group,Unit,chunkID) +self:T(self.lid.." _UnloadSingleTroopByID chunkID="..tostring(chunkID)) +local droppingatbase=false +local inzone,zonename,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD) +if not inzone then +inzone,zonename,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.SHIP) +end +if inzone then +droppingatbase=true +end +if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then +self:_SendMessage("You need to open the door(s) to unload troops!",10,false,Group) +if not self.debug then return self end +end +local hoverunload=self:IsCorrectHover(Unit) +local isHerc=self:IsFixedWing(Unit) +local isHook=self:IsHook(Unit) +if isHerc and not isHook then +hoverunload=self:IsCorrectFlightParameters(Unit) +end +local grounded=not self:IsUnitInAir(Unit) +local unitName=Unit:GetName() +if self.Loaded_Cargo[unitName]and(grounded or hoverunload)then +if not droppingatbase or self.debug then +if not self.TroopsIDToChunk or not self.TroopsIDToChunk[chunkID]then +self:_SendMessage(string.format("No troop cargo chunk found for ID %d!",chunkID),10,false,Group) +if not self.debug then return self end +return self +end +local chunk=self.TroopsIDToChunk[chunkID] +if not chunk or#chunk==0 then +self:_SendMessage(string.format("Troop chunk is empty for ID %d!",chunkID),10,false,Group) +if not self.debug then return self end +return self +end +local foundCargo=chunk[1] +if not foundCargo then +self:_SendMessage(string.format("No troop cargo at chunk %d!",chunkID),10,false,Group) +if not self.debug then return self end +return self +end +local cType=foundCargo:GetType() +local name=foundCargo:GetName()or"none" +local tmpl=foundCargo:GetTemplates()or{} +local zoneradius=self.troopdropzoneradius or 100 +local factor=1 +if isHerc then +factor=foundCargo:GetCratesNeeded()or 1 +zoneradius=Unit:GetVelocityMPS()or 100 +end +local zone=ZONE_GROUP:New(string.format("Unload zone-%s",unitName),Group,zoneradius*factor) +local randomcoord=zone:GetRandomCoordinate(10,30*factor) +local heading=Group:GetHeading()or 0 +if grounded or hoverunload then +randomcoord=Group:GetCoordinate() +local Angle=(heading+270)%360 +if isHerc or isHook then +Angle=(heading+180)%360 +end +local offset=hoverunload and self.TroopUnloadDistHover or self.TroopUnloadDistGround +if isHerc then +offset=self.TroopUnloadDistGroundHerc or 25 +end +if isHook then +offset=self.TroopUnloadDistGroundHook or 15 +if hoverunload and self.TroopUnloadDistHoverHook then +offset=self.TroopUnloadDistHoverHook or 5 +end +end +randomcoord:Translate(offset,Angle,nil,true) +end +local tempcount=0 +if isHook then +tempcount=self.ChinookTroopCircleRadius or 5 +end +for _,_template in pairs(tmpl)do +self.TroopCounter=self.TroopCounter+1 +tempcount=tempcount+1 +local alias=string.format("%s-%d",_template,math.random(1,100000)) +local rad=2.5+(tempcount*2) +local Positions=self:_GetUnitPositions(randomcoord,rad,heading,_template) +self.DroppedTroops[self.TroopCounter]=SPAWN:NewWithAlias(_template,alias) +:InitDelayOff() +:InitSetUnitAbsolutePositions(Positions) +:InitValidateAndRepositionGroundUnits(self.validateAndRepositionUnits) +:OnSpawnGroup(function(grp)grp.spawntime=timer.getTime()end) +:SpawnFromVec2(randomcoord:GetVec2()) +self:__TroopsDeployed(1,Group,Unit,self.DroppedTroops[self.TroopCounter],cType) +end +foundCargo:SetWasDropped(true) +if cType==CTLD_CARGO.Enum.ENGINEERS then +self.Engineers=self.Engineers+1 +local grpname=self.DroppedTroops[self.TroopCounter]:GetName() +self.EngineersInField[self.Engineers]=CTLD_ENGINEERING:New(name,grpname) +self:_SendMessage(string.format("Dropped Engineers %s into action!",name),10,false,Group) +else +self:_SendMessage(string.format("Dropped Troops %s into action!",name),10,false,Group) +end +table.remove(chunk,1) +if#chunk==0 then +self.TroopsIDToChunk[chunkID]=nil +end +else +self:_SendMessage("Troops have returned to base!",10,false,Group) +self:__TroopsRTB(1,Group,Unit,zonename,zone) +if self.TroopsIDToChunk and self.TroopsIDToChunk[chunkID]then +local chunk=self.TroopsIDToChunk[chunkID] +if#chunk>0 then +local firstObj=chunk[1] +local cName=firstObj:GetName() +local gentroops=self.Cargo_Troops +for _id,_troop in pairs(gentroops)do +if _troop.Name==cName then +local st=_troop:GetStock() +if st and tonumber(st)>=0 then +_troop:AddStock() +end +end +end +firstObj:SetWasDropped(true) +table.remove(chunk,1) +if#chunk==0 then +self.TroopsIDToChunk[chunkID]=nil +end +end +end +end +local cargoList=self.Loaded_Cargo[unitName].Cargo +for i=#cargoList,1,-1 do +if cargoList[i]:WasDropped()then +table.remove(cargoList,i) +end +end +local troopsLoaded=0 +local cratesLoaded=0 +for _,cargo in ipairs(cargoList)do +local cT=cargo:GetType() +if cT==CTLD_CARGO.Enum.TROOPS or cT==CTLD_CARGO.Enum.ENGINEERS then +troopsLoaded=troopsLoaded+1 +else +cratesLoaded=cratesLoaded+1 +end +end +self.Loaded_Cargo[unitName].Troopsloaded=troopsLoaded +self.Loaded_Cargo[unitName].Cratesloaded=cratesLoaded +self:_RefreshDropTroopsMenu(Group,Unit) +else +local isHerc=self:IsFixedWing(Unit) +if isHerc then +self:_SendMessage("Nothing loaded or not within airdrop parameters!",10,false,Group) +else +self:_SendMessage("Nothing loaded or not hovering within parameters!",10,false,Group) +end +end +return self +end +function CTLD:_RefreshDropTroopsMenu(Group,Unit) +local theGroup=Group +local theUnit=Unit +if not theGroup.CTLDTopmenu then return end +local topTroops=theGroup.MyTopTroopsMenu +if not topTroops then return end +if topTroops.DropTroopsMenu then +topTroops.DropTroopsMenu:Remove() +end +local dropTroopsMenu=MENU_GROUP:New(theGroup,"Drop Troops",topTroops) +topTroops.DropTroopsMenu=dropTroopsMenu +MENU_GROUP_COMMAND:New(theGroup,"Drop ALL troops",dropTroopsMenu,self._UnloadTroops,self,theGroup,theUnit) +local loadedData=self.Loaded_Cargo[theUnit:GetName()] +if not loadedData or not loadedData.Cargo then return end +local troopsByName={} +for _,cargoObj in ipairs(loadedData.Cargo)do +if cargoObj +and(cargoObj:GetType()==CTLD_CARGO.Enum.TROOPS or cargoObj:GetType()==CTLD_CARGO.Enum.ENGINEERS) +and not cargoObj:WasDropped() +then +local name=cargoObj:GetName()or"Unknown" +troopsByName[name]=troopsByName[name]or{} +table.insert(troopsByName[name],cargoObj) +end +end +self.TroopsIDToChunk=self.TroopsIDToChunk or{} +for tName,objList in pairs(troopsByName)do +table.sort(objList,function(a,b)return a:GetID()distance then +self:T("Zone Active: "..tostring(active)) +if(zone:IsVec2InZone(unitVec2)or Zonetype==CTLD.CargoZoneType.MOVE)and active==true and distance0 and not Troopstable[genname]then +Troopstable[genname]={ +Stock0=generic:GetStock0(), +Stock=generic:GetStock(), +StockR=generic:GetRelativeStock(), +Infield=0, +Inhelo=0, +CratesInfield=0, +Sum=generic:GetStock(), +} +if Restock==true then +Troopstable[genname].GenericCargo=generic +end +end +end +for _id,_cargo in pairs(self.Cargo_Troops)do +local generic=_cargo +local genname=generic:GetName() +if generic and generic:GetStock0()>0 and not Troopstable[genname]then +Troopstable[genname]={ +Stock0=generic:GetStock0(), +Stock=generic:GetStock(), +StockR=generic:GetRelativeStock(), +Infield=0, +Inhelo=0, +CratesInfield=0, +Sum=generic:GetStock(), +} +if Restock==true then +Troopstable[genname].GenericCargo=generic +end +end +end +for _index,_group in pairs(self.DroppedTroops)do +if _group and _group:IsAlive()then +self:T("Looking at ".._group:GetName().." in the field") +local generic=self:GetGenericCargoObjectFromGroupName(_group:GetName()) +if generic then +local genname=generic:GetName() +self:T("Found Generic "..genname.." in the field. Adding.") +if generic:GetStock0()>0 then +Troopstable[genname].Infield=Troopstable[genname].Infield+1 +Troopstable[genname].Sum=Troopstable[genname].Infield+Troopstable[genname].Stock+Troopstable[genname].Inhelo +end +else +self:E(self.lid.."Group without Cargo Generic: ".._group:GetName()) +end +end +end +for _unitname,_loaded in pairs(self.Loaded_Cargo)do +local _unit=UNIT:FindByName(_unitname) +if _unit and _unit:IsAlive()then +local unitname=_unit:GetName() +local loadedcargo=self.Loaded_Cargo[unitname].Cargo or{} +for _,_cgo in pairs(loadedcargo)do +local cargo=_cgo +local type=cargo.CargoType +local gname=cargo.Name +local gcargo=self:_FindCratesCargoObject(gname)or self:_FindTroopsCargoObject(gname) +self:T("Looking at "..gname.." in the helo - type = "..type) +if(type==CTLD_CARGO.Enum.TROOPS or type==CTLD_CARGO.Enum.ENGINEERS or type==CTLD_CARGO.Enum.VEHICLE or type==CTLD_CARGO.Enum.FOB)then +if gcargo and gcargo:GetStock0()>0 then +self:T("Adding "..gname.." in the helo - type = "..type) +if(type==CTLD_CARGO.Enum.TROOPS or type==CTLD_CARGO.Enum.ENGINEERS)then +Troopstable[gname].Inhelo=Troopstable[gname].Inhelo+1 +end +if(type==CTLD_CARGO.Enum.VEHICLE or type==CTLD_CARGO.Enum.FOB)then +local counting=gcargo.CratesNeeded +local added=1 +if counting>1 then +added=added/counting +end +Troopstable[gname].Inhelo=Troopstable[gname].Inhelo+added +end +Troopstable[gname].Sum=Troopstable[gname].Infield+Troopstable[gname].Stock+Troopstable[gname].Inhelo+Troopstable[gname].CratesInfield +end +end +end +end +end +if self.Spawned_Cargo then +for i=#self.Spawned_Cargo,1,-1 do +local cargo=self.Spawned_Cargo[i] +if cargo and cargo:GetPositionable()and cargo:GetPositionable():IsAlive()then +local genname=cargo:GetName() +local gcargo=self:_FindCratesCargoObject(genname) +if Troopstable[genname]and gcargo and gcargo:GetStock0()>0 then +local needed=gcargo.CratesNeeded or 1 +local added=1 +if needed>1 then +added=added/needed +end +Troopstable[genname].CratesInfield=Troopstable[genname].CratesInfield+added +Troopstable[genname].Sum=Troopstable[genname].Infield+Troopstable[genname].Stock ++Troopstable[genname].Inhelo+Troopstable[genname].CratesInfield +end +end +end +for i=#self.Spawned_Cargo,1,-1 do +local cargo=self.Spawned_Cargo[i] +if cargo and cargo:GetPositionable()and cargo:GetPositionable():IsAlive()then +local genname=cargo:GetName() +if Troopstable[genname]then +if Troopstable[genname].Inhelo==0 and Troopstable[genname].CratesInfield<1 then +Troopstable[genname].CratesInfield=0 +Troopstable[genname].Sum=Troopstable[genname].Stock +cargo:GetPositionable():Destroy(false) +table.remove(self.Spawned_Cargo,i) +local leftover=Troopstable[genname].Stock0-(Troopstable[genname].Infield+Troopstable[genname].Inhelo+Troopstable[genname].CratesInfield) +if leftover12 then clock=clock-12 end end return clock end -function CSAR:_AddBeaconToGroup(_group,_freq,_name) +function CSAR:_AddBeaconToGroup(_group,_freq,BeaconName) self:T(self.lid.." _AddBeaconToGroup") if self.CreateRadioBeacons==false then return end local _group=_group @@ -76124,10 +79643,10 @@ local _radioUnit=_group:GetUnit(1) if _radioUnit then local name=_radioUnit:GetName() local Frequency=_freq -local name=_radioUnit:GetName() local Sound="l10n/DEFAULT/"..self.radioSound local vec3=_radioUnit:GetVec3()or _radioUnit:GetPositionVec3()or{x=0,y=0,z=0} -trigger.action.radioTransmission(Sound,vec3,0,false,Frequency,self.ADFRadioPwr or 1000,_name) +self:I(self.lid..string.format("Added Radio Beacon %d Hertz | Name %s | Position {%d,%d,%d}",Frequency,BeaconName,vec3.x,vec3.y,vec3.z)) +trigger.action.radioTransmission(Sound,vec3,0,true,Frequency,self.ADFRadioPwr or 500,BeaconName) end end return self @@ -76143,9 +79662,11 @@ local pilot=_pilot local group=pilot.group local frequency=pilot.frequency or 0 local bname=pilot.BeaconName or pilot.name..math.random(1,100000) -trigger.action.stopRadioTransmission(bname) if group and group:IsAlive()and frequency>0 then -self:_AddBeaconToGroup(group,frequency,bname) +else +if frequency>0 then +trigger.action.stopRadioTransmission(bname) +end end end end @@ -76168,6 +79689,21 @@ local limit=self.maxdownedpilots local islimited=self.limitmaxdownedpilots local count=self:_CountActiveDownedPilots() if islimited and(count>=limit)then +if self.useFIFOLimitReplacement then +local oldIndex=-1 +local oldDownedPilot=nil +for _index,_downedpilot in pairs(self.downedPilots)do +oldIndex=_index +oldDownedPilot=_downedpilot +break +end +if oldDownedPilot then +oldDownedPilot.group:Destroy(false) +oldDownedPilot.alive=false +self:_CheckDownedPilotTable() +return false +end +end return true else return false @@ -76199,6 +79735,8 @@ else self.allheligroupset=SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterCategoryHelicopter():FilterStart() end self.mash=SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterPrefixes(self.mashprefix):FilterStart() +self.staticmashes=SET_STATIC:New():FilterCoalitions(self.coalitiontxt):FilterPrefixes(self.mashprefix):FilterStart() +self.zonemashes=SET_ZONE:New():FilterPrefixes(self.mashprefix):FilterStart() if not self.coordinate then local csarhq=self.mash:GetRandom() if csarhq then @@ -76519,7 +80057,7 @@ local description=dataset[7] local typeName=dataset[8] local unitName=dataset[9] local freq=tonumber(dataset[10]) -self:_AddCsar(coalition,country,point,typeName,unitName,playerName,freq,nil,description,nil) +self:_AddCsar(coalition,country,point,typeName,unitName,playerName,freq,false,description,nil) end return self end @@ -76540,7 +80078,7 @@ capFormation=nil, capOptionVaryStartTime=nil, capOptionVaryEndTime=nil, } -AIRWING.version="0.9.5" +AIRWING.version="0.9.7" function AIRWING:New(warehousename,airwingname) local self=BASE:Inherit(self,LEGION:New(warehousename,airwingname)) if not self then @@ -76834,19 +80372,29 @@ point.type,point.noccupied,point.heading,point.leg,point.altitude,point.speed) return text end function AIRWING:UpdatePatrolPointMarker(point) -if self.markpoints then +if self and self.markpoints then local text=string.format("%s Occupied=%d\nheading=%03d, leg=%d NM, alt=%d ft, speed=%d kts", point.type,point.noccupied,point.heading,point.leg,point.altitude,point.speed) +if point.IsZonePoint and point.IsZonePoint==true and point.patrolzone then +local Coordinate=point.patrolzone:GetCoordinate() +point.marker:UpdateCoordinate(Coordinate) +point.marker:UpdateText(text,1.5) +else point.marker:UpdateText(text,1) end end -function AIRWING:NewPatrolPoint(Type,Coordinate,Altitude,Speed,Heading,LegLength,RefuelSystem) -if Coordinate and Coordinate:IsInstanceOf("ZONE_BASE")then -Coordinate=Coordinate:GetCoordinate() end +function AIRWING:NewPatrolPoint(Type,Coordinate,Altitude,Speed,Heading,LegLength,RefuelSystem) local patrolpoint={} patrolpoint.type=Type or"Unknown" patrolpoint.coord=Coordinate or self:GetCoordinate():Translate(UTILS.NMToMeters(math.random(10,15)),math.random(360)) +if Coordinate and Coordinate:IsInstanceOf("ZONE_BASE")then +patrolpoint.IsZonePoint=true +patrolpoint.patrolzone=Coordinate +patrolpoint.coord=patrolpoint.patrolzone:GetCoordinate() +else +patrolpoint.IsZonePoint=false +end patrolpoint.heading=Heading or math.random(360) patrolpoint.leg=LegLength or 15 patrolpoint.altitude=Altitude or math.random(10,20)*1000 @@ -76855,7 +80403,7 @@ patrolpoint.noccupied=0 patrolpoint.refuelsystem=RefuelSystem if self.markpoints then patrolpoint.marker=MARKER:New(Coordinate,"New Patrol Point"):ToAll() -AIRWING.UpdatePatrolPointMarker(patrolpoint) +self:UpdatePatrolPointMarker(patrolpoint) end return patrolpoint end @@ -76908,6 +80456,26 @@ function AIRWING:SetTakeoffAir() self:SetTakeoffType("Air") return self end +function AIRWING:SetLandingStraightIn() +self.OptionLandingStraightIn=true +return self +end +function AIRWING:SetLandingForcePair() +self.OptionLandingForcePair=true +return self +end +function AIRWING:SetLandingRestrictPair() +self.OptionLandingRestrictPair=true +return self +end +function AIRWING:SetLandingOverheadBreak() +self.OptionLandingOverheadBreak=true +return self +end +function AIRWING:SetOptionPreferVerticalLanding() +self.OptionPreferVerticalLanding=true +return self +end function AIRWING:SetDespawnAfterLanding(Switch) if Switch then self.despawnAfterLanding=Switch @@ -76979,6 +80547,9 @@ if PatrolPoints and#PatrolPoints>0 then table.sort(PatrolPoints,sort) for _,_patrolpoint in pairs(PatrolPoints)do local patrolpoint=_patrolpoint +if patrolpoint.IsZonePoint and patrolpoint.IsZonePoint==true and patrolpoint.patrolzone then +patrolpoint.coord=patrolpoint.patrolzone:GetCoordinate() +end if(RefuelSystem and patrolpoint.refuelsystem and RefuelSystem==patrolpoint.refuelsystem)or RefuelSystem==nil or patrolpoint.refuelsystem==nil then return patrolpoint end @@ -77009,7 +80580,7 @@ missionCAP:SetTime(ClockStart) end missionCAP.patroldata=patrol patrol.noccupied=patrol.noccupied+1 -if self.markpoints then AIRWING.UpdatePatrolPointMarker(patrol)end +if self.markpoints then self:UpdatePatrolPointMarker(patrol)end self:AddMission(missionCAP) end return self @@ -77035,7 +80606,7 @@ local missionRECON=AUFTRAG:NewRECON(ZoneSet,patrol.speed,patrol.altitude,true) missionRECON.patroldata=patrol missionRECON.categories={AUFTRAG.Category.AIRCRAFT} patrol.noccupied=patrol.noccupied+1 -if self.markpoints then AIRWING.UpdatePatrolPointMarker(patrol)end +if self.markpoints then self:UpdatePatrolPointMarker(patrol)end self:AddMission(missionRECON) end return self @@ -77059,7 +80630,7 @@ local altitude=patrol.altitude+1000*patrol.noccupied local mission=AUFTRAG:NewTANKER(patrol.coord,altitude,patrol.speed,patrol.heading,patrol.leg,Unit.RefuelingSystem.BOOM_AND_RECEPTACLE) mission.patroldata=patrol patrol.noccupied=patrol.noccupied+1 -if self.markpoints then AIRWING.UpdatePatrolPointMarker(patrol)end +if self.markpoints then self:UpdatePatrolPointMarker(patrol)end self:AddMission(mission) end for i=1,self.nflightsTANKERprobe-Nprob do @@ -77068,7 +80639,7 @@ local altitude=patrol.altitude+1000*patrol.noccupied local mission=AUFTRAG:NewTANKER(patrol.coord,altitude,patrol.speed,patrol.heading,patrol.leg,Unit.RefuelingSystem.PROBE_AND_DROGUE) mission.patroldata=patrol patrol.noccupied=patrol.noccupied+1 -if self.markpoints then AIRWING.UpdatePatrolPointMarker(patrol)end +if self.markpoints then self:UpdatePatrolPointMarker(patrol)end self:AddMission(mission) end return self @@ -77087,19 +80658,21 @@ local altitude=patrol.altitude+1000*patrol.noccupied local mission=AUFTRAG:NewAWACS(patrol.coord,altitude,patrol.speed,patrol.heading,patrol.leg) mission.patroldata=patrol patrol.noccupied=patrol.noccupied+1 -if self.markpoints then AIRWING.UpdatePatrolPointMarker(patrol)end +if self.markpoints then self:UpdatePatrolPointMarker(patrol)end self:AddMission(mission) end return self end function AIRWING:CheckRescuhelo() local N=self:CountMissionsInQueue({AUFTRAG.Type.RESCUEHELO}) +if self.airbase then local name=self.airbase:GetName() local carrier=UNIT:FindByName(name) for i=1,self.nflightsRescueHelo-N do local mission=AUFTRAG:NewRESCUEHELO(carrier) self:AddMission(mission) end +end return self end function AIRWING:GetTankerForFlight(flightgroup) @@ -77142,6 +80715,18 @@ self:T(self.lid..string.format("Group %s on %s mission %s",FlightGroup:GetName() if self.UseConnectedOpsAwacs and self.ConnectedOpsAwacs then self.ConnectedOpsAwacs:__FlightOnMission(2,FlightGroup,Mission) end +if self.OptionLandingForcePair then +FlightGroup:SetOptionLandingForcePair() +elseif self.OptionLandingOverheadBreak then +FlightGroup:SetOptionLandingOverheadBreak() +elseif self.OptionLandingRestrictPair then +FlightGroup:SetOptionLandingRestrictPair() +elseif self.OptionLandingStraightIn then +FlightGroup:SetOptionLandingStraightIn() +end +if self.OptionPreferVerticalLanding then +FlightGroup:SetOptionPreferVertical() +end end function AIRWING:CountPayloadsInStock(MissionTypes,UnitTypes,Payloads) if MissionTypes then @@ -77222,7 +80807,7 @@ ClassName="ARMYGROUP", formationPerma=nil, engage={}, } -ARMYGROUP.version="1.0.1" +ARMYGROUP.version="1.0.3" function ARMYGROUP:New(group) local og=_DATABASE:GetOpsGroup(group) if og then @@ -78017,31 +81602,12 @@ self.radio.Modu=radio.modulation.AM self:SetDefaultRadio(self.radio.Freq,self.radio.Modu,self.radio.On) self.option.Formation=template.route.points[1].action self.optionDefault.Formation=ENUMS.Formation.Vehicle.OnRoad -if self.groupinitialized then -self:T(self.lid.."WARNING: Group was already initialized! Will NOT do it again!") -return -end -self:T(self.lid.."FF Initializing Group") -local template=Template or self:_GetTemplate() -self.isAI=true -self.isLateActivated=template.lateActivation -self.isUncontrolled=false -self.speedMax=self.group:GetSpeedMax() -if self.speedMax>3.6 then -self.isMobile=true -else -self.isMobile=false -end -self.speedCruise=self.speedMax*0.7 -self.ammo=self:GetAmmoTot() -self.radio.On=false -self.radio.Freq=133 -self.radio.Modu=radio.modulation.AM -self:SetDefaultRadio(self.radio.Freq,self.radio.Modu,self.radio.On) -self.option.Formation=template.route.points[1].action -self.optionDefault.Formation=ENUMS.Formation.Vehicle.OnRoad +if not self.tacanDefault then self:SetDefaultTACAN(nil,nil,nil,nil,true) +end +if not self.tacan then self.tacan=UTILS.DeepCopy(self.tacanDefault) +end local units=self.group:GetUnits() local dcsgroup=Group.getByName(self.groupname) local size0=dcsgroup:getInitialSize() @@ -78165,6 +81731,7 @@ conditionFailure={}, conditionPush={}, conditionSuccessSet=false, conditionFailureSet=false, +repeatDelay=1, } _AUFTRAGSNR=0 AUFTRAG.Type={ @@ -78275,7 +81842,7 @@ HELICOPTER="Helicopter", GROUND="Ground", NAVAL="Naval", } -AUFTRAG.version="1.2.2" +AUFTRAG.version="1.2.1" function AUFTRAG:New(Type) local self=BASE:Inherit(self,FSM:New()) _AUFTRAGSNR=_AUFTRAGSNR+1 @@ -78464,7 +82031,12 @@ mission.categories={AUFTRAG.Category.AIRCRAFT} return mission end function AUFTRAG:NewTANKER(Coordinate,Altitude,Speed,Heading,Leg,RefuelSystem) -local mission=AUFTRAG:NewORBIT_RACETRACK(Coordinate,Altitude,Speed,Heading,Leg) +local mission +if Leg==0 then +mission=AUFTRAG:NewORBIT_CIRCLE(Coordinate,Altitude,Speed) +else +mission=AUFTRAG:NewORBIT_RACETRACK(Coordinate,Altitude,Speed,Heading,Leg) +end mission.type=AUFTRAG.Type.TANKER mission:_SetLogID() mission.refuelSystem=RefuelSystem @@ -78503,7 +82075,7 @@ Altitude=Altitude or 10000 local mission=AUFTRAG:NewORBIT(Coordinate or ZoneCAP:GetCoordinate(),Altitude,Speed or 350,Heading,Leg) mission.type=AUFTRAG.Type.CAP mission:_SetLogID() -mission.engageZone=ZoneCAP +mission.engageZone=ZoneCAP or Coordinate mission.engageTargetTypes=TargetTypes or{"Air"} mission.missionTask=ENUMS.MissionTask.CAP mission.optionROE=ENUMS.ROE.OpenFire @@ -78632,10 +82204,27 @@ mission.categories={AUFTRAG.Category.AIRCRAFT} mission.DCStask=mission:GetDCSMissionTask() return mission end -function AUFTRAG:NewSTRIKE(Target,Altitude) +function AUFTRAG:NewSEADInZone(TargetZone,Altitude,TargetTypes,Duration) +local mission=AUFTRAG:New(AUFTRAG.Type.SEAD) +mission.engageWeaponType=ENUMS.WeaponFlag.Auto +mission.engageWeaponExpend=AI.Task.WeaponExpend.ALL +mission.engageAltitude=UTILS.FeetToMeters(Altitude or 25000) +mission.engageZone=TargetZone +mission.engageTargetTypes=TargetTypes or{"Air Defence"} +mission.missionTask=ENUMS.MissionTask.SEAD +mission.missionAltitude=mission.engageAltitude +mission.missionFraction=0.2 +mission.optionROE=ENUMS.ROE.OpenFire +mission.optionROT=ENUMS.ROT.EvadeFire +mission.categories={AUFTRAG.Category.AIRCRAFT} +mission.DCStask=mission:GetDCSMissionTask() +mission:SetDuration(Duration or 1800) +return mission +end +function AUFTRAG:NewSTRIKE(Target,Altitude,EngageWeaponType) local mission=AUFTRAG:New(AUFTRAG.Type.STRIKE) mission:_TargetFromObject(Target) -mission.engageWeaponType=ENUMS.WeaponFlag.Auto +mission.engageWeaponType=EngageWeaponType or ENUMS.WeaponFlag.Auto mission.engageWeaponExpend=AI.Task.WeaponExpend.ALL mission.engageAltitude=UTILS.FeetToMeters(Altitude or 2000) mission.missionTask=ENUMS.MissionTask.GROUNDATTACK @@ -78647,10 +82236,10 @@ mission.categories={AUFTRAG.Category.AIRCRAFT} mission.DCStask=mission:GetDCSMissionTask() return mission end -function AUFTRAG:NewBOMBING(Target,Altitude) +function AUFTRAG:NewBOMBING(Target,Altitude,EngageWeaponType,Divebomb) local mission=AUFTRAG:New(AUFTRAG.Type.BOMBING) mission:_TargetFromObject(Target) -mission.engageWeaponType=ENUMS.WeaponFlag.Auto +mission.engageWeaponType=EngageWeaponType or ENUMS.WeaponFlag.Auto mission.engageWeaponExpend=AI.Task.WeaponExpend.ALL mission.engageAltitude=UTILS.FeetToMeters(Altitude or 25000) mission.missionTask=ENUMS.MissionTask.GROUNDATTACK @@ -78658,6 +82247,7 @@ mission.missionAltitude=mission.engageAltitude*0.8 mission.missionFraction=0.5 mission.optionROE=ENUMS.ROE.OpenFire mission.optionROT=ENUMS.ROT.NoReaction +mission.optionDivebomb=Divebomb or nil mission.dTevaluate=5*60 mission.categories={AUFTRAG.Category.AIRCRAFT} mission.DCStask=mission:GetDCSMissionTask() @@ -78832,6 +82422,7 @@ mission.engageWeaponType=ENUMS.WeaponFlag.Auto mission.optionROE=ENUMS.ROE.OpenFire mission.optionAlarm=0 mission.missionFraction=0.0 +mission.missionWaypointRadius=0.0 mission.dTevaluate=8*60 mission.categories={AUFTRAG.Category.GROUND,AUFTRAG.Category.NAVAL} mission.DCStask=mission:GetDCSMissionTask() @@ -79240,6 +82831,10 @@ function AUFTRAG:SetRepeat(Nrepeat) self.Nrepeat=Nrepeat or 0 return self end +function AUFTRAG:SetRepeatDelay(RepeatDelay) +self.repeatDelay=RepeatDelay +return self +end function AUFTRAG:SetRepeatOnFailure(Nrepeat) self.NrepeatFailure=Nrepeat or 0 return self @@ -80054,6 +83649,11 @@ groupdata.waypointcoordinate=coordinate end return self end +function AUFTRAG:SetIngressCoordinate(coordinate) +self.missionIngressCoord=coordinate +self.missionIngressCoordAlt=UTILS.MetersToFeet(coordinate.y)or 10000 +return self +end function AUFTRAG:GetGroupWaypointCoordinate(opsgroup) local groupdata=self:GetGroupData(opsgroup) if groupdata then @@ -80102,6 +83702,7 @@ return groupdata.waypointEgressUID end end function AUFTRAG:CheckGroupsDone() +local fsmState=self:GetState() for groupname,data in pairs(self.groupdata)do local groupdata=data if groupdata then @@ -80143,6 +83744,10 @@ if self:IsStarted()and self:CountOpsGroups()==0 then self:T(self.lid..string.format("CheckGroupsDone: Mission is STARTED state %s [FSM=%s] but count of alive OPSGROUP is zero. Mission DONE!",self.status,self:GetState())) return true end +if(self:IsStarted()or self:IsExecuting())and(fsmState==AUFTRAG.Status.STARTED or fsmState==AUFTRAG.Status.EXECUTING)and self:CountOpsGroups()>0 then +self:T(self.lid..string.format("CheckGroupsDone: Mission is STARTED state %s [FSM=%s] and count of alive OPSGROUP > zero. Mission NOT DONE!",self.status,self:GetState())) +return false +end return true end function AUFTRAG:OnEventUnitLost(EventData) @@ -80283,7 +83888,7 @@ if repeatme then self.repeatedSuccess=self.repeatedSuccess+1 local N=math.max(self.NrepeatSuccess,self.Nrepeat) self:T(self.lid..string.format("Mission SUCCESS! Repeating mission for the %d time (max %d times) ==> Repeat mission!",self.repeated+1,N)) -self:Repeat() +self:__Repeat(self.repeatDelay) else self:T(self.lid..string.format("Mission SUCCESS! Number of max repeats %d reached ==> Stopping mission!",self.repeated+1)) self:Stop() @@ -80303,7 +83908,7 @@ if repeatme then self.repeatedFailure=self.repeatedFailure+1 local N=math.max(self.NrepeatFailure,self.Nrepeat) self:T(self.lid..string.format("Mission FAILED! Repeating mission for the %d time (max %d times) ==> Repeat mission!",self.repeated+1,N)) -self:Repeat() +self:__Repeat(self.repeatDelay) else self:T(self.lid..string.format("Mission FAILED! Number of max repeats %d reached ==> Stopping mission!",self.repeated+1)) self:Stop() @@ -80586,18 +84191,52 @@ function AUFTRAG:SetMissionWaypointRandomization(Radius) self.missionWaypointRadius=Radius return self end -function AUFTRAG:SetMissionEgressCoord(Coordinate,Altitude) +function AUFTRAG:SetMissionEgressCoord(Coordinate,Altitude,Speed) if Coordinate:IsInstanceOf("ZONE_BASE")then Coordinate=Coordinate:GetCoordinate() end self.missionEgressCoord=Coordinate if Altitude then self.missionEgressCoord.y=UTILS.FeetToMeters(Altitude) +self.missionEgressCoordAlt=UTILS.FeetToMeters(Altitude) end +self.missionEgressCoordSpeed=Speed and Speed or nil +return self +end +function AUFTRAG:SetMissionIngressCoord(Coordinate,Altitude,Speed) +if Coordinate:IsInstanceOf("ZONE_BASE")then +Coordinate=Coordinate:GetCoordinate() +end +self.missionIngressCoord=Coordinate +if Altitude then +self.missionIngressCoord.y=UTILS.FeetToMeters(Altitude) +self.missionIngressCoordAlt=UTILS.FeetToMeters(Altitude or 10000) +end +self.missionIngressCoordSpeed=Speed and Speed or nil +return self +end +function AUFTRAG:SetMissionHoldingCoord(Coordinate,Altitude,Speed,Duration) +if Coordinate:IsInstanceOf("ZONE_BASE")then +Coordinate=Coordinate:GetCoordinate() +end +self.missionHoldingCoord=Coordinate +self.missionHoldingDuration=Duration or 900 +if Altitude then +self.missionHoldingCoord.y=UTILS.FeetToMeters(Altitude) +self.missionHoldingCoordAlt=UTILS.FeetToMeters(Altitude or 10000) +end +self.missionHoldingCoordSpeed=Speed and Speed or nil +return self end function AUFTRAG:GetMissionEgressCoord() return self.missionEgressCoord end +function AUFTRAG:GetMissionIngressCoord() +return self.missionIngressCoord +end +function AUFTRAG:GetMissionHoldingCoord() +return self.missionHoldingCoord +end function AUFTRAG:_GetMissionWaypointCoordSet() if self.missionWaypointCoord then local coord=self.missionWaypointCoord @@ -80615,8 +84254,20 @@ coord.y=self.missionAltitude end return coord end -local waypointcoord=COORDINATE:New(0,0,0) local coord=group:GetCoordinate() +if self.missionHoldingCoord then +coord=self.missionHoldingCoord +if self.missionHoldingCoorddAlt then +coord:SetAltitude(self.missionHoldingCoordAlt,true) +end +end +if self.missionIngressCoord then +coord=self.missionIngressCoord +if self.missionIngressCoordAlt then +coord:SetAltitude(self.missionIngressCoordAlt,true) +end +end +local waypointcoord=COORDINATE:New(0,0,0) if coord then waypointcoord=coord:GetIntermediateCoordinate(self:GetTargetCoordinate(),self.missionFraction) else @@ -80714,8 +84365,11 @@ table.insert(self.enrouteTasks,DCStask) elseif self.type==AUFTRAG.Type.BAI then self:_GetDCSAttackTask(self.engageTarget,DCStasks) elseif self.type==AUFTRAG.Type.BOMBING then -local DCStask=CONTROLLABLE.TaskBombing(nil,self:GetTargetVec2(),self.engageAsGroup,self.engageWeaponExpend,self.engageQuantity,self.engageDirection,self.engageAltitude,self.engageWeaponType,Divebomb) +local coords=self.engageTarget:GetCoordinates() +for _,coord in pairs(coords)do +local DCStask=CONTROLLABLE.TaskBombing(nil,coord:GetVec2(),self.engageAsGroup,self.engageWeaponExpend,self.engageQuantity,self.engageDirection,self.engageAltitude,self.engageWeaponType,self.optionDivebomb) table.insert(DCStasks,DCStask) +end elseif self.type==AUFTRAG.Type.STRAFING then local DCStask=CONTROLLABLE.TaskStrafing(nil,self:GetTargetVec2(),self.engageQuantity,self.engageLength,self.engageWeaponType,self.engageWeaponExpend,self.engageDirection,self.engageAsGroup) table.insert(DCStasks,DCStask) @@ -80726,7 +84380,14 @@ elseif self.type==AUFTRAG.Type.BOMBCARPET then local DCStask=CONTROLLABLE.TaskCarpetBombing(nil,self:GetTargetVec2(),self.engageAsGroup,self.engageWeaponExpend,self.engageQuantity,self.engageDirection,self.engageAltitude,self.engageWeaponType,self.engageLength) table.insert(DCStasks,DCStask) elseif self.type==AUFTRAG.Type.CAP then -local DCStask=CONTROLLABLE.EnRouteTaskEngageTargetsInZone(nil,self.engageZone:GetVec2(),self.engageZone:GetRadius(),self.engageTargetTypes,Priority) +local Vec2=self.engageZone:GetVec2() +local Radius +if self.engageZone:IsInstanceOf("COORDINATE")then +Radius=UTILS.NMToMeters(20) +else +Radius=self.engageZone:GetRadius() +end +local DCStask=CONTROLLABLE.EnRouteTaskEngageTargetsInZone(nil,Vec2,Radius,self.engageTargetTypes,Priority) table.insert(self.enrouteTasks,DCStask) elseif self.type==AUFTRAG.Type.CAS then local DCStask=CONTROLLABLE.EnRouteTaskEngageTargetsInZone(nil,self.engageZone:GetVec2(),self.engageZone:GetRadius(),self.engageTargetTypes,Priority) @@ -80778,10 +84439,29 @@ param.lastindex=nil DCStask.params=param table.insert(DCStasks,DCStask) elseif self.type==AUFTRAG.Type.SEAD then +if self.engageZone then +self.engageZone:Scan({Object.Category.UNIT},{Unit.Category.GROUND_UNIT}) +local ScanUnitSet=self.engageZone:GetScannedSetUnit() +local SeadUnitSet=SET_UNIT:New() +for _,_unit in pairs(ScanUnitSet.Set)do +local unit=_unit +if unit and unit:IsAlive()and unit:HasSEAD()then +self:T("Adding UNIT for SEAD: "..unit:GetName()) +local task=CONTROLLABLE.TaskAttackUnit(nil,unit,GroupAttack,AI.Task.WeaponExpend.ALL,1,Direction,self.engageAltitude,2956984318) +table.insert(DCStasks,task) +SeadUnitSet:AddUnit(unit) +end +end +self.engageTarget=TARGET:New(SeadUnitSet) +else self:_GetDCSAttackTask(self.engageTarget,DCStasks) +end elseif self.type==AUFTRAG.Type.STRIKE then -local DCStask=CONTROLLABLE.TaskAttackMapObject(nil,self:GetTargetVec2(),self.engageAsGroup,self.engageWeaponExpend,self.engageQuantity,self.engageDirection,self.engageAltitude,self.engageWeaponType) +local coords=self.engageTarget:GetCoordinates() +for _,coord in pairs(coords)do +local DCStask=CONTROLLABLE.TaskAttackMapObject(nil,coord:GetVec2(),self.engageAsGroup,self.engageWeaponExpend,self.engageQuantity,self.engageDirection,self.engageAltitude,self.engageWeaponType) table.insert(DCStasks,DCStask) +end elseif self.type==AUFTRAG.Type.TANKER or self.type==AUFTRAG.Type.RECOVERYTANKER then local DCStask=CONTROLLABLE.EnRouteTaskTanker(nil) table.insert(self.enrouteTasks,DCStask) @@ -81132,7 +84812,7 @@ end do AWACS={ ClassName="AWACS", -version="0.2.67", +version="0.2.72", lid="", coalition=coalition.side.BLUE, coalitiontxt="blue", @@ -81504,7 +85184,7 @@ self.HasEscorts=false self.EscortTemplate="" self.EscortMission={} self.EscortMissionReplacement={} -self.PathToSRS="C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.PathToSRS="C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.Gender="female" self.Culture="en-GB" self.Voice=nil @@ -81593,6 +85273,8 @@ self:AddTransition("*","FlightOnMission","*") self:AddTransition("*","Intercept","*") self:AddTransition("*","InterceptSuccess","*") self:AddTransition("*","InterceptFailure","*") +self:AddTransition("*","VIDSuccess","*") +self:AddTransition("*","VIDFailure","*") self:AddTransition("*","Stop","Stopped") local text=string.format("%sAWACS Version %s Initiated",self.lid,self.version) self:I(text) @@ -81859,7 +85541,7 @@ if Event.IniCoalition==self.coalition then self:_SetClientMenus() end end -if Event.id==EVENTS.PlayerLeaveUnit then +if Event.id==EVENTS.PlayerLeaveUnit and Event.IniGroupName then self:T("Player group left unit: "..Event.IniGroupName) self:T("Player name left: "..Event.IniPlayerName) self:T("Coalition = "..UTILS.GetCoalitionName(Event.IniCoalition)) @@ -82006,7 +85688,9 @@ self:T(self.lid.."SetAdditionalZone") self.BorderZone=Zone if self.debug then Zone:DrawZone(self.coalition,{1,0.64,0},1,{1,0.64,0},0.2,1,true) +if self.AllowMarkers then MARKER:New(Zone:GetCoordinate(),"Defensive Zone"):ToCoalition(self.coalition) +end elseif Draw then Zone:DrawZone(self.coalition,{1,0.64,0},1,{1,0.64,0},0.2,1,true) end @@ -82019,8 +85703,10 @@ if Draw then Zone:DrawZone(self.coalition,{1,0.64,0},1,{1,0.64,0},0.2,1,true) elseif self.debug then Zone:DrawZone(self.coalition,{1,0.64,0},1,{1,0.64,0},0.2,1,true) +if self.AllowMarkers then MARKER:New(Zone:GetCoordinate(),"Rejection Zone"):ToCoalition(self.coalition) end +end return self end function AWACS:DrawFEZ() @@ -82055,7 +85741,7 @@ return self end function AWACS:SetSRS(PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey,AccessKey,Backend) self:T(self.lid.."SetSRS") -self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.Gender=Gender or MSRS.gender or"male" self.Culture=Culture or MSRS.culture or"en-US" self.Port=Port or MSRS.port or 5002 @@ -82099,7 +85785,7 @@ self.MaxAIonCAP=MaxAICap or 4 self.AICAPCAllName=Callsign or CALLSIGN.Aircraft.Colt return self end -function AWACS:SetEscort(EscortNumber) +function AWACS:SetEscort(EscortNumber,Formation,OffsetVector,EscortEngageMaxDistance) self:T(self.lid.."SetEscort") if EscortNumber and EscortNumber>0 then self.HasEscorts=true @@ -82108,6 +85794,9 @@ else self.HasEscorts=false self.EscortNumber=0 end +self.EscortFormation=Formation +self.OffsetVec=OffsetVector or{x=500,y=100,z=500} +self.EscortEngageMaxDistance=EscortEngageMaxDistance or 45 return self end function AWACS:_MessageVector(GID,Tag,Coordinate,Angels) @@ -82137,10 +85826,20 @@ self:T(self.lid.."_StartEscorts") local AwacsFG=self.AwacsFG local group=AwacsFG:GetGroup() local timeonstation=(self.EscortsTimeOnStation+self.ShiftChangeTime)*3600 +local OffsetX=500 +local OffsetY=500 +local OffsetZ=500 +if self.OffsetVec then +OffsetX=self.OffsetVec.x or 500 +OffsetY=self.OffsetVec.y or 500 +OffsetZ=self.OffsetVec.z or 500 +end for i=1,self.EscortNumber do -local escort=AUFTRAG:NewESCORT(group,{x=-100*((i+(i%2))/2),y=0,z=(100+100*((i+(i%2))/2))*(-1)^i},45,{"Air"}) -escort:SetRequiredAssets(1) +local escort=AUFTRAG:NewESCORT(group,{x=OffsetX*((i+(i%2))/2),y=OffsetY*((i+(i%2))/2),z=(OffsetZ+OffsetZ*((i+(i%2))/2))*(-1)^i},self.EscortEngageMaxDistance,{"Air"}) escort:SetTime(nil,timeonstation) +if self.Escortformation then +escort:SetFormation(self.Escortformation) +end escort:SetMissionRange(self.MaxMissionRange) self.AirWing:AddMission(escort) self.CatchAllMissions[#self.CatchAllMissions+1]=escort @@ -82852,11 +86551,13 @@ self.Contacts:Push(cluster,CID) local vidpos=self.gettext:GetEntry("VIDPOS",self.locale) text=string.format(vidpos,Callsign,self.callsigntxt,Declaration) self:T(text) +self:__VIDSuccess(3,GID,group,cluster) else self:T("Contact VID not close enough") local vidneg=self.gettext:GetEntry("VIDNEG",self.locale) text=string.format(vidneg,Callsign,self.callsigntxt) self:T(text) +self:__VIDFailure(3,GID,group,cluster) end self:_NewRadioEntry(text,text,GID,Outcome,true,true,false,true) end @@ -83368,6 +87069,10 @@ basemenu=basemenu, checkin=checkin, } self.clientmenus:Push(menus,cgrpname) +local GID,hasentry=self:_GetManagedGrpID(cgrp) +if hasentry then +self:_CheckOut(cgrp,GID,true) +end end end else @@ -83478,11 +87183,15 @@ AnchorStackOne.StationName=newname if self.debug then AnchorStackOne.StationZone:DrawZone(self.coalition,{0,0,1},1,{0,0,1},0.2,5,true) local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) +end else local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) end +end self.AnchorStacks:Push(AnchorStackOne,newname) self.PlayerStationName=newname return self @@ -83511,11 +87220,15 @@ AnchorStackOne.StationName=newname if self.debug then AnchorStackOne.StationZone:DrawZone(self.coalition,{0,0,1},1,{0,0,1},0.2,5,true) local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) +end else local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) end +end self.AnchorStacks:Push(AnchorStackOne,newname) else local newsubname=AWACS.AnchorNames[stackscreated+1]or tostring(stackscreated+1) @@ -83536,11 +87249,15 @@ AnchorStackOne.StationName=newname if self.debug then AnchorStackOne.StationZone:DrawZone(self.coalition,{0,0,1},1,{0,0,1},0.2,5,true) local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) +end else local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) end +end self.AnchorStacks:Push(AnchorStackOne,newname) end return true,self.AnchorStacks:GetSize() @@ -84171,11 +87888,15 @@ AnchorStackOne.StationName=newname if self.debug then AnchorStackOne.StationZone:DrawZone(self.coalition,{0,0,1},1,{0,0,1},0.2,5,true) local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) +end else local stationtag=string.format("Station: %s\nCoordinate: %s",newname,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then AnchorStackOne.AnchorMarker=MARKER:New(AnchorStackOne.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) end +end self.AnchorStacks:Push(AnchorStackOne,newname) AirWing.HasOwnStation=true AirWing.StationName=newname @@ -84814,28 +88535,41 @@ self.ControlZone:DrawZone(self.coalition,{0,1,0},1,{1,0,0},0.05,3,true) self.OpsZone:DrawZone(self.coalition,{1,0,0},1,{1,0,0},0.2,5,true) local AOCoordString=self.AOCoordinate:ToStringLLDDM() local Rocktag=string.format("FEZ: %s\nBulls Coordinate: %s",self.AOName,AOCoordString) +if self.AllowMarkers then MARKER:New(self.AOCoordinate,Rocktag):ToCoalition(self.coalition) +end self.StationZone:DrawZone(self.coalition,{0,0,1},1,{0,0,1},0.2,5,true) local stationtag=string.format("Station: %s\nCoordinate: %s",self.StationZoneName,self.StationZone:GetCoordinate():ToStringLLDDM()) if not self.GCI then +if self.AllowMarkers then MARKER:New(self.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) +end self.OrbitZone:DrawZone(self.coalition,{0,1,0},1,{0,1,0},0.2,5,true) +if self.AllowMarkers then MARKER:New(self.OrbitZone:GetCoordinate(),"AIC Orbit Zone"):ToCoalition(self.coalition) end +end else local AOCoordString=self.AOCoordinate:ToStringLLDDM() local Rocktag=string.format("FEZ: %s\nBulls Coordinate: %s",self.AOName,AOCoordString) +if self.AllowMarkers then MARKER:New(self.AOCoordinate,Rocktag):ToCoalition(self.coalition) +end if not self.GCI then +if self.AllowMarkers then MARKER:New(self.OrbitZone:GetCoordinate(),"AIC Orbit Zone"):ToCoalition(self.coalition) end +end local stationtag=string.format("Station: %s\nCoordinate: %s",self.StationZoneName,self.StationZone:GetCoordinate():ToStringLLDDM()) +if self.AllowMarkers then MARKER:New(self.StationZone:GetCoordinate(),stationtag):ToCoalition(self.coalition) end +end if not self.GCI then local AwacsAW=self.AirWing local mission=AUFTRAG:NewORBIT_RACETRACK(self.OrbitZone:GetCoordinate(),self.AwacsAngels*1000,self.Speed,self.Heading,self.Leg) mission:SetMissionRange(self.MaxMissionRange) +mission:SetRequiredAttribute({GROUP.Attribute.AIR_AWACS}) local timeonstation=(self.AwacsTimeOnStation+self.ShiftChangeTime)*3600 mission:SetTime(nil,timeonstation) self.CatchAllMissions[#self.CatchAllMissions+1]=mission @@ -85060,17 +88794,18 @@ else report:Add("***** Cannot obtain (yet) this missions OpsGroup!") end report:Add("====================") +local RESMission if self.ShiftChangeEscortsFlag and self.ShiftChangeEscortsRequested then -ESmission=self.EscortMissionReplacement[i] -local esstatus=ESmission:GetState() -local ESmissiontime=(timer.getTime()-self.EscortsTimeStamp) -local ESTOSLeft=UTILS.Round((((self.EscortsTimeOnStation+self.ShiftChangeTime)*3600)-ESmissiontime),0) +RESMission=self.EscortMissionReplacement[i] +local esstatus=RESMission:GetState() +local RESMissiontime=(timer.getTime()-self.EscortsTimeStamp) +local ESTOSLeft=UTILS.Round((((self.EscortsTimeOnStation+self.ShiftChangeTime)*3600)-RESMissiontime),0) ESTOSLeft=UTILS.Round(ESTOSLeft/60,0) local ChangeTime=UTILS.Round(((self.ShiftChangeTime*3600)/60),0) report:Add("ESCORTS REPLACEMENT:") report:Add(string.format("Auftrag Status: %s",esstatus)) report:Add(string.format("TOS Left: %d min",ESTOSLeft)) -local OpsGroups=ESmission:GetOpsGroups() +local OpsGroups=RESMission:GetOpsGroups() local OpsGroup=self:_GetAliveOpsGroupFromTable(OpsGroups) if OpsGroup then local OpsName=OpsGroup:GetName()or"Unknown" @@ -85081,11 +88816,11 @@ report:Add(string.format("Mission FG State %s",OpsGroup:GetState())) else report:Add("***** Cannot obtain (yet) this missions OpsGroup!") end -if ESmission:IsExecuting()then +if RESMission and RESMission:IsExecuting()then self.ShiftChangeEscortsFlag=false self.ShiftChangeEscortsRequested=false if ESmission and ESmission:IsNotOver()then -ESmission:Cancel() +ESmission:__Cancel(1) end self.EscortMission[i]=self.EscortMissionReplacement[i] self.EscortMissionReplacement[i]=nil @@ -87127,11 +90862,19 @@ descriptors={}, properties={}, operations={}, } -COHORT.version="0.3.5" +COHORT.version="0.3.7" +_COHORTNAMES={} function COHORT:New(TemplateGroupName,Ngroups,CohortName) +local name=tostring(CohortName or TemplateGroupName) +if UTILS.IsAnyInTable(_COHORTNAMES,name)then +env.error(string.format('ERROR: cannot create cohort "%s" because another cohort with that name already exists. Names must be unique!',name)) +return nil +else +table.insert(_COHORTNAMES,name) +end local self=BASE:Inherit(self,FSM:New()) self.templatename=TemplateGroupName -self.name=tostring(CohortName or TemplateGroupName) +self.name=name self.lid=string.format("COHORT %s | ",self.name) self.templategroup=GROUP:FindByName(self.templatename) if not self.templategroup then @@ -87270,9 +91013,10 @@ function COHORT:SetMissionRange(Range) self.engageRange=UTILS.NMToMeters(Range or 150) return self end -function COHORT:SetCallsign(Callsign,Index) +function COHORT:SetCallsign(Callsign,Index,CallsignString) self.callsignName=Callsign self.callsignIndex=Index +self.callsignClearName=CallsignString self.callsign={} self.callsign.NumberSquad=Callsign self.callsign.NumberGroup=Index @@ -87372,6 +91116,9 @@ self.callsigncounter=self.callsigncounter+2 else self.callsigncounter=self.callsigncounter+1 end +callsign["name"]=self.callsignClearName or UTILS.GetCallsignName(self.callsignName)or"None" +callsign["name"]=string.format("%s%d%d",callsign["name"],callsign[2],callsign[3]) +callsign[4]=callsign["name"] Asset.callsign[i]=callsign self:T3({callsign=callsign}) end @@ -87894,6 +91641,7 @@ gcicapZones={}, awacsZones={}, tankerZones={}, limitMission={}, +maxMissionsAssignPerCycle=1, } COMMANDER.version="0.1.4" function COMMANDER:New(Coalition,Alias) @@ -88518,6 +92266,7 @@ if mission.importance and mission.importance=(self.maxMissionsAssignPerCycle or 1)then return end +end else end end end +function COMMANDER:SetMaxMissionsAssignPerCycle(MaxMissionsAssignPerCycle) +self.maxMissionsAssignPerCycle=MaxMissionsAssignPerCycle or 1 +return self +end function COMMANDER:_GetCohorts(Legions,Cohorts,Operation) local function CheckOperation(LegionOrCohort) if#self.opsqueue==0 then @@ -88576,7 +92332,10 @@ local cohorts={} if(Legions and#Legions>0)or(Cohorts and#Cohorts>0)then for _,_legion in pairs(Legions or{})do local legion=_legion -local Runway=legion:IsAirwing()and legion:IsRunwayOperational()or true +local Runway=true +if legion:IsAirwing()then +Runway=legion:IsRunwayOperational()and legion.airbase and legion.airbase:GetCoalition()==legion:GetCoalition() +end if legion:IsRunning()and Runway then for _,_cohort in pairs(legion.cohorts)do local cohort=_cohort @@ -88595,7 +92354,10 @@ end else for _,_legion in pairs(self.legions)do local legion=_legion -local Runway=legion:IsAirwing()and legion:IsRunwayOperational()or true +local Runway=true +if legion:IsAirwing()then +Runway=legion:IsRunwayOperational()and legion.airbase and legion.airbase:GetCoalition()==legion:GetCoalition() +end if legion:IsRunning()and Runway then for _,_cohort in pairs(legion.cohorts)do local cohort=_cohort @@ -88630,8 +92392,10 @@ if can and(MaxWeight==nil or cohort.cargobayLimit>MaxWeight)then MaxWeight=cohort.cargobayLimit end end +if MaxWeight then self:T(self.lid..string.format("Largest cargo bay available=%.1f",MaxWeight)) end +end local legions=self.legions local cohorts=nil if Mission.specialLegions or Mission.specialCohorts then @@ -91051,7 +94815,7 @@ GRADUATE="Graduate", INSTRUCTOR="Instructor", } FLIGHTGROUP.Players={} -FLIGHTGROUP.version="1.0.2" +FLIGHTGROUP.version="1.0.3" function FLIGHTGROUP:New(group) local og=_DATABASE:GetOpsGroup(group) if og then @@ -91059,7 +94823,7 @@ og:I(og.lid..string.format("WARNING: OPS group already exists in data base!")) return og end local self=BASE:Inherit(self,OPSGROUP:New(group)) -self.lid=string.format("FLIGHTGROUP %s | ",self.groupname) +self.lid=string.format("FLIGHTGROUP %s | ",self.groupname or"N/A") self:SetDefaultROE() self:SetDefaultROT() self:SetDefaultEPLRS(self.isEPLRS) @@ -91169,6 +94933,41 @@ self:GetGroup():SetOption(AI.Option.Air.id.PROHIBIT_JETT,not Switch) end return self end +function FLIGHTGROUP:SetOptionLandingStraightIn() +self.OptionLandingStraightIn=true +if self:GetGroup():IsAlive()then +self:GetGroup():SetOptionLandingStraightIn() +end +return self +end +function FLIGHTGROUP:SetOptionLandingForcePair() +self.OptionLandingForcePair=true +if self:GetGroup():IsAlive()then +self:GetGroup():SetOptionLandingForcePair() +end +return self +end +function FLIGHTGROUP:SetOptionLandingRestrictPair() +self.OptionLandingRestrictPair=true +if self:GetGroup():IsAlive()then +self:GetGroup():SetOptionLandingRestrictPair() +end +return self +end +function FLIGHTGROUP:SetOptionLandingOverheadBreak() +self.OptionLandingOverheadBreak=true +if self:GetGroup():IsAlive()then +self:GetGroup():SetOptionLandingOverheadBreak() +end +return self +end +function FLIGHTGROUP:SetOptionPreferVertical() +self.OptionPreferVertical=true +if self:GetGroup():IsAlive()then +self:GetGroup():OptionPreferVerticalLanding() +end +return self +end function FLIGHTGROUP:SetReadyForTakeoff(ReadyTO,Delay) if Delay and Delay>0 then self:ScheduleOnce(Delay,FLIGHTGROUP.SetReadyForTakeoff,self,ReadyTO,0) @@ -91433,6 +95232,15 @@ if timer.getAbsTime()>self.Twaiting+self.dTwait then end end end +if mission and mission.missionHoldingCoord and self.isHoldingAtHoldingPoint==true then +self:T(self.lid.."...yes") +if mission:IsReadyToPush()then +self.flaghold:Set(1) +self.Twaiting=nil +self.dTwait=nil +self.isHoldingAtHoldingPoint=false +end +end if mission and mission.updateDCSTask then if(mission:GetType()==AUFTRAG.Type.ORBIT or mission:GetType()==AUFTRAG.Type.RECOVERYTANKER or mission:GetType()==AUFTRAG.Type.CAP)and mission.orbitVec2 then local vec2=mission:GetTargetVec2() @@ -91746,6 +95554,7 @@ self:__ElementAirborne(0.01,Element) end function FLIGHTGROUP:onafterElementAirborne(From,Event,To,Element) self:T2(self.lid..string.format("Element airborne %s",Element.name)) +self:_SetElementParkingFree(Element) self:_UpdateStatus(Element,OPSGROUP.ElementStatus.AIRBORNE) end function FLIGHTGROUP:onafterElementLanded(From,Event,To,Element,airbase) @@ -92289,7 +96098,7 @@ if self:IsAlive()then local allowed=true local Tsuspend=nil if airbase==nil then -self:T(self.lid.."ERROR: Airbase is nil in LandAtAirase() call!") +self:T(self.lid.."ERROR: Airbase is nil in LandAtAirbase() call!") allowed=false end if airbase and airbase:GetCoalition()~=self.group:GetCoalition()and airbase:GetCoalition()>0 then @@ -92613,7 +96422,10 @@ flightgroup.Twaiting=nil flightgroup.dTwait=nil flightgroup:_CheckGroupDone(0.1) end -function FLIGHTGROUP:_InitGroup(Template) +function FLIGHTGROUP:_InitGroup(Template,Delay) +if Delay and Delay>0 then +self:ScheduleOnce(Delay,FLIGHTGROUP._InitGroup,self,Template,0) +else if self.groupinitialized then self:T(self.lid.."WARNING: Group was already initialized! Will NOT do it again!") return @@ -92654,8 +96466,12 @@ self.optionDefault.Formation=ENUMS.Formation.RotaryWing.EchelonLeft.D300 else self.optionDefault.Formation=ENUMS.Formation.FixedWing.EchelonLeft.Group end +if not self.tacanDefault then self:SetDefaultTACAN(nil,nil,nil,nil,true) +end +if not self.tacan then self.tacan=UTILS.DeepCopy(self.tacanDefault) +end self.isAI=not self:_IsHuman(group) if not self.isAI then self.menu=self.menu or{} @@ -92673,6 +96489,7 @@ for _,unit in pairs(units)do self:_AddElementByName(unit:GetName()) end self.groupinitialized=true +end return self end function FLIGHTGROUP:GetHomebaseFromWaypoints() @@ -92813,29 +96630,6 @@ end end return nil end -function FLIGHTGROUP:InitWaypoints() -self.waypoints0=self.group:GetTemplateRoutePoints() -self.waypoints={} -for index,wp in pairs(self.waypoints0)do -local waypoint=self:_CreateWaypoint(wp) -self:_AddWaypoint(waypoint) -end -self.homebase=self.homebase or self:GetHomebaseFromWaypoints() -self.destbase=self.destbase or self:GetDestinationFromWaypoints() -self.currbase=self:GetHomebaseFromWaypoints() -if self.destbase and#self.waypoints>1 then -table.remove(self.waypoints,#self.waypoints) -else -self.destbase=self.homebase -end -self:T(self.lid..string.format("Initializing %d waypoints. Homebase %s ==> %s Destination",#self.waypoints,self.homebase and self.homebase:GetName()or"unknown",self.destbase and self.destbase:GetName()or"uknown")) -if#self.waypoints>0 then -if#self.waypoints==1 then -self:_PassedFinalWaypoint(true,"FLIGHTGROUP:InitWaypoints #self.waypoints==1") -end -end -return self -end function FLIGHTGROUP:AddWaypoint(Coordinate,Speed,AfterWaypointWithID,Altitude,Updateroute) local coordinate=self:_CoordinateFromObject(Coordinate) local wpnumber=self:GetWaypointIndexAfterID(AfterWaypointWithID) @@ -92959,6 +96753,10 @@ end function FLIGHTGROUP:GetParkingSpot(element,maxdist,airbase) local coord=element.unit:GetCoordinate() airbase=airbase or self:GetClosestAirbase() +if airbase==nil then +self:T(self.lid.."No airbase found for element "..element.name) +return nil +end local parking=airbase.parking if airbase and airbase:IsShip()then if#parking>1 then @@ -93029,12 +96827,14 @@ local clients=_DATABASE.CLIENTS local coords={} for clientname,client in pairs(clients)do local template=_DATABASE:GetGroupTemplateFromUnitName(clientname) +if template then local units=template.units for i,unit in pairs(units)do local coord=COORDINATE:New(unit.x,unit.alt,unit.y) coords[unit.name]=coord end end +end return coords end local airbasecategory=airbase:GetAirbaseCategory() @@ -94510,13 +98310,13 @@ ClassName="INTEL_DLINK", verbose=0, lid=nil, alias=nil, -cachetime=300, +cachetime=120, interval=20, contacts={}, clusters={}, contactcoords={}, } -INTEL_DLINK.version="0.0.1" +INTEL_DLINK.version="0.0.2" function INTEL_DLINK:New(Intels,Alias,Interval,Cachetime) local self=BASE:Inherit(self,FSM:New()) self.intels=Intels or{} @@ -94528,9 +98328,9 @@ self.alias=tostring(Alias) else self.alias="SPECTRE" end -self.cachetime=Cachetime or 300 self.interval=Interval or 20 self.lid=string.format("INTEL_DLINK %s | ",self.alias) +self:SetDLinkCacheTime(Cachetime or 120) self:SetStartState("Stopped") self:AddTransition("Stopped","Start","Running") self:AddTransition("*","Collect","*") @@ -94552,6 +98352,11 @@ self:I(self.lid..text) self:__Collect(-math.random(1,10)) return self end +function INTEL_DLINK:SetDLinkCacheTime(seconds) +self.cachetime=math.abs(seconds or 120) +self:I(self.lid.."Caching for "..self.cachetime.." seconds.") +return self +end function INTEL_DLINK:onbeforeCollect(From,Event,To) self:T({From,Event,To}) self:T("Contacts Data Gathering") @@ -94635,7 +98440,7 @@ transportqueue={}, cohorts={}, } LEGION.RandomAssetScore=1 -LEGION.version="0.5.0" +LEGION.version="0.5.1" function LEGION:New(WarehouseName,LegionName) local self=BASE:Inherit(self,WAREHOUSE:New(WarehouseName,LegionName)) if not self then @@ -94716,6 +98521,14 @@ end end return self end +function LEGION:DelAsset(Asset) +if Asset.cohort then +Asset.cohort:DelAsset(Asset) +else +self:E(self.lid..string.format("ERROR: Asset has not cohort attached. Cannot remove it from legion!")) +end +return self +end function LEGION:RelocateCohort(Cohort,Legion,Delay,NcarriersMin,NcarriersMax,TransportLegions) if Delay and Delay>0 then self:ScheduleOnce(Delay,LEGION.RelocateCohort,self,Cohort,Legion,0,NcarriersMin,NcarriersMax,TransportLegions) @@ -95261,6 +99074,7 @@ self:GetParent(self,LEGION).onafterAssetDead(self,From,Event,To,asset,request) if self.commander and self.commander.chief then self.commander.chief.detectionset:RemoveGroupsByName({asset.spawngroupname}) end +self:DelAsset(asset) end function LEGION:onafterDestroyed(From,Event,To) self:T(self.lid.."Legion warehouse destroyed!") @@ -95316,6 +99130,7 @@ if self:IsAirwing()then opsgroup=FLIGHTGROUP:New(asset.spawngroupname) elseif self:IsBrigade()then opsgroup=ARMYGROUP:New(asset.spawngroupname) +opsgroup:SetValidateAndRepositionGroundUnits(self.ValidateAndRepositionGroundUnits) elseif self:IsFleet()then opsgroup=NAVYGROUP:New(asset.spawngroupname) else @@ -95324,6 +99139,7 @@ end opsgroup:_SetLegion(self) opsgroup.cohort=self:_GetCohortOfAsset(asset) opsgroup.homebase=self.airbase +opsgroup.destbase=self.airbase opsgroup.homezone=self.spawnzone if opsgroup.cohort.weaponData then local text="Weapon data for group:" @@ -95673,7 +99489,10 @@ local cohorts={} if(Legions and#Legions>0)or(Cohorts and#Cohorts>0)then for _,_legion in pairs(Legions or{})do local legion=_legion -local Runway=legion:IsAirwing()and legion:IsRunwayOperational()or true +local Runway=true +if legion:IsAirwing()then +Runway=legion:IsRunwayOperational()and legion.airbase and legion.airbase:GetCoalition()==legion:GetCoalition() +end if legion:IsRunning()and Runway then for _,_cohort in pairs(legion.cohorts)do local cohort=_cohort @@ -96205,7 +100024,7 @@ Qintowind={}, pathCorridor=400, engage={}, } -NAVYGROUP.version="1.0.2" +NAVYGROUP.version="1.0.3" function NAVYGROUP:New(group) local og=_DATABASE:GetOpsGroup(group) if og then @@ -96427,7 +100246,7 @@ else return false end end -function NAVYGROUP:Status(From,Event,To) +function NAVYGROUP:Status() local fsmstate=self:GetState() local alive=self:IsAlive() local freepath=0 @@ -96526,6 +100345,24 @@ text=text..string.format("\n[%d] ID=%d Start=%s Stop=%s Open=%s Over=%s",i,recov end self:I(self.lid..text) end +if self.verbose>=2 then +local text="Elements:" +for i,_element in pairs(self.elements)do +local element=_element +local name=element.name +local status=element.status +local unit=element.unit +local life,life0=self:GetLifePoints(element) +local life0=element.life0 +local ammo=self:GetAmmoElement(element) +text=text..string.format("\n[%d] %s: status=%s, life=%.1f/%.1f, guns=%d, rockets=%d, bombs=%d, missiles=%d, cargo=%d/%d kg", +i,name,status,life,life0,ammo.Guns,ammo.Rockets,ammo.Bombs,ammo.Missiles,element.weightCargo,element.weightMaxCargo) +end +if#self.elements==0 then +text=text.." none!" +end +self:I(self.lid..text) +end if self:IsCruising()and self.detectionOn and self.engagedetectedOn then local targetgroup,targetdist=self:_GetDetectedTarget() if targetgroup then @@ -96543,7 +100380,7 @@ end function NAVYGROUP:onafterSpawned(From,Event,To) self:T(self.lid..string.format("Group spawned!")) if self.verbose>=1 then -local text=string.format("Initialized Navy Group %s:\n",self.groupname) +local text=string.format("Initialized Navy Group %s [GID=%d]:\n",self.groupname,self.group:GetID()) text=text..string.format("Unit type = %s\n",self.actype) text=text..string.format("Speed max = %.1f Knots\n",UTILS.KmphToKnots(self.speedMax)) text=text..string.format("Speed cruise = %.1f Knots\n",UTILS.KmphToKnots(self.speedCruise)) @@ -96886,7 +100723,10 @@ self:__UpdateRoute(-0.01) end return waypoint end -function NAVYGROUP:_InitGroup(Template) +function NAVYGROUP:_InitGroup(Template,Delay) +if Delay and Delay>0 then +self:ScheduleOnce(Delay,NAVYGROUP._InitGroup,self,Template,0) +else if self.groupinitialized then self:T(self.lid.."WARNING: Group was already initialized! Will NOT do it again!") return @@ -96909,10 +100749,18 @@ self.radio.Freq=tonumber(template.units[1].frequency)/1000000 self.radio.Modu=tonumber(template.units[1].modulation) self.optionDefault.Formation="Off Road" self.option.Formation=self.optionDefault.Formation +if not self.tacanDefault then self:SetDefaultTACAN(nil,nil,nil,nil,true) +end +if not self.tacan then self.tacan=UTILS.DeepCopy(self.tacanDefault) +end +if not self.iclsDefault then self:SetDefaultICLS(nil,nil,nil,true) +end +if not self.icls then self.icls=UTILS.DeepCopy(self.iclsDefault) +end local units=self.group:GetUnits() local dcsgroup=Group.getByName(self.groupname) local size0=dcsgroup:getInitialSize() @@ -96923,6 +100771,7 @@ for _,unit in pairs(units)do self:_AddElementByName(unit:GetName()) end self.groupinitialized=true +end return self end function NAVYGROUP:_CheckFreePath(DistanceMax,dx) @@ -97754,7 +101603,7 @@ ASSIGNED="assigned to carrier", BOARDING="boarding", LOADED="loaded", } -OPSGROUP.version="1.0.1" +OPSGROUP.version="1.0.4" function OPSGROUP:New(group) local self=BASE:Inherit(self,FSM:New()) if type(group)=="string"then @@ -97942,7 +101791,7 @@ self.legionReturn=false else self.legionReturn=true end -self:T(self.lid..string.format("Setting ReturnToLetion=%s",tostring(self.legionReturn))) +self:T(self.lid..string.format("Setting ReturnToLegion=%s",tostring(self.legionReturn))) return self end function OPSGROUP:SetDefaultSpeed(Speed) @@ -98103,21 +101952,43 @@ return false end return nil end -function OPSGROUP:GetCoordinateInRange(TargetCoord,WeaponBitType,RefCoord) +function OPSGROUP:GetCoordinateInRange(TargetCoord,WeaponBitType,RefCoord,SurfaceTypes) local coordInRange=nil RefCoord=RefCoord or self:GetCoordinate() local weapondata=self:GetWeaponData(WeaponBitType) +local dh={0,-5,5,-10,10,-15,15,-20,20,-25,25,-30,30,-35,35,-40,40,-45,45,-50,50,-55,55,-60,60,-65,65,-70,70,-75,75,-80,80} +local function _checkSurface(point) +if SurfaceTypes then +local stype=point:GetSurfaceType() +for _,sf in pairs(SurfaceTypes)do +if sf==stype then +return true +end +end +return false +else +return true +end +end if weapondata then -local heading=RefCoord:HeadingTo(TargetCoord) +local heading=TargetCoord:HeadingTo(RefCoord) local dist=RefCoord:Get2DDistance(TargetCoord) +local range=nil if dist>weapondata.RangeMax then -local d=(dist-weapondata.RangeMax)*1.05 -coordInRange=RefCoord:Translate(d,heading) -self:T(self.lid..string.format("Out of max range = %.1f km for weapon %s",weapondata.RangeMax/1000,tostring(WeaponBitType))) +range=weapondata.RangeMax +self:T(self.lid..string.format("Out of max range = %.1f km by %.1f km for weapon %s",weapondata.RangeMax/1000,(weapondata.RangeMax-dist)/1000,tostring(WeaponBitType))) elseif dist TaskExecute() self:TaskExecute(waypointtask) return end -if self.speedMax<=3.6 or mission.teleport then +if(self.speedMax<=3.6 or mission.teleport)and not mission.unpaused then self:Teleport(waypointcoord,nil,true) self:__TaskExecute(-1,waypointtask) else @@ -101224,14 +105115,27 @@ self.Ndestroyed=self.Ndestroyed+1 end end self:Despawn(0,true) -else +end for _,_element in pairs(self.elements)do local element=_element +if element and element.status~=OPSGROUP.ElementStatus.DEAD then self:ElementInUtero(element) end end -self:T({Template=Template}) +self:_Spawn(0.01,Template) +end +return self +end +function OPSGROUP:_Spawn(Delay,Template) +if Delay and Delay>0 then +self:ScheduleOnce(Delay,OPSGROUP._Spawn,self,0,Template) +else +self:T2({Template=Template}) +if self:IsArmygroup()and self.ValidateAndRepositionGroundUnits then +UTILS.ValidateAndRepositionGroundUnits(Template.units) +end self.group=_DATABASE:Spawn(Template) +self.group:SetValidateAndRepositionGroundUnits(self.ValidateAndRepositionGroundUnits) self.dcsgroup=self:GetDCSGroup() self.controller=self.dcsgroup:getController() self.isLateActivated=Template.lateActivation @@ -101242,9 +105146,8 @@ self.groupinitialized=false self.wpcounter=1 self.currentwp=1 self:_InitWaypoints() -self:_InitGroup(Template) +self:_InitGroup(Template,0.001) end -return self end function OPSGROUP:onafterInUtero(From,Event,To) self:T(self.lid..string.format("Group inutero at t=%.3f",timer.getTime())) @@ -101859,7 +105762,7 @@ local element=self:GetElementByName(UnitName) if element then element.weightCargo=element.weightCargo+Weight self:T(self.lid..string.format("%s: Adding %.1f kg cargo weight. New cargo weight=%.1f kg",UnitName,Weight,element.weightCargo)) -if self.isFlightgroup then +if self.isFlightgroup and element.unit and element.unit:IsAlive()then trigger.action.setUnitInternalCargo(element.name,element.weightCargo) end end @@ -104358,6 +108261,9 @@ end end return targetgroup,targetdist end +function OPSGROUP:SetValidateAndRepositionGroundUnits(Enabled) +self.ValidateAndRepositionGroundUnits=Enabled +end OPSTRANSPORT={ ClassName="OPSTRANSPORT", verbose=0, @@ -105402,12 +109308,13 @@ Tblu=0, Tnut=0, chiefs={}, Missions={}, +UpdateSeconds=120, } OPSZONE.ZoneType={ Circular="Circular", Polygon="Polygon", } -OPSZONE.version="0.6.1" +OPSZONE.version="0.6.2" function OPSZONE:New(Zone,CoalitionOwner) local self=BASE:Inherit(self,FSM:New()) if Zone then @@ -105641,10 +109548,12 @@ end function OPSZONE:onafterStart(From,Event,To) self:I(self.lid..string.format("Starting OPSZONE v%s",OPSZONE.version)) self.timerStatus=self.timerStatus or TIMER:New(OPSZONE.Status,self) -self.timerStatus:Start(1,120) +local EveryUpdateIn=self.UpdateSeconds or 120 +self.timerStatus:Start(1,EveryUpdateIn) if self.airbase then self:HandleEvent(EVENTS.BaseCaptured) end +return self end function OPSZONE:onafterStop(From,Event,To) self:I(self.lid..string.format("Stopping OPSZONE")) @@ -105912,7 +109821,7 @@ captured(coalition.side.NEUTRAL) end else if Nblu>0 then -if not self:IsAttacked()and self.Tnut>=self.threatlevelCapture then +if not self:IsAttacked()and self.Tblu>=self.threatlevelCapture then self:Attacked(coalition.side.BLUE) end elseif Nblu==0 then @@ -105937,7 +109846,7 @@ captured(coalition.side.NEUTRAL) end else if Nred>0 then -if not self:IsAttacked()and self.Tnut>=self.threatlevelCapture then +if not self:IsAttacked()and self.Tred>=self.threatlevelCapture then self:Attacked(coalition.side.RED) end elseif Nred==0 then @@ -106155,7 +110064,7 @@ NextTaskFailure={}, FinalState="none", PreviousCount=0, } -PLAYERTASK.version="0.1.24" +PLAYERTASK.version="0.1.28" function PLAYERTASK:New(Type,Target,Repeat,Times,TTSType) local self=BASE:Inherit(self,FSM:New()) self.Type=Type @@ -106281,6 +110190,9 @@ end end) return OpsZone:GetOwner()==Coalition and isClientInZone and isCaptureGroupInZone end +function PLAYERTASK:CanJoinTask(Group,Client) +return true +end function PLAYERTASK:_SetController(Controller) self:T(self.lid.."_SetController") self.TaskController=Controller @@ -106365,17 +110277,17 @@ end,task:GetTarget() ) return self end -function PLAYERTASK:AddOpsZoneCaptureSuccessCondition(CaptureSquadGroupNamePrefix,Coalition) +function PLAYERTASK:AddOpsZoneCaptureSuccessCondition(CaptureSquadGroupNamePrefix,Coalition,CheckClientInZone) local task=self task:AddConditionSuccess( function(target) if target:IsInstanceOf("OPSZONE")then -return task:_CheckCaptureOpsZoneSuccess(target,CaptureSquadGroupNamePrefix,Coalition,true) +return task:_CheckCaptureOpsZoneSuccess(target,CaptureSquadGroupNamePrefix,Coalition,CheckClientInZone or true) elseif target:IsInstanceOf("SET_OPSZONE")then local successes=0 local isClientInZone=false target:ForEachZone(function(opszone) -if task:_CheckCaptureOpsZoneSuccess(opszone,CaptureSquadGroupNamePrefix,Coalition)then +if task:_CheckCaptureOpsZoneSuccess(opszone,CaptureSquadGroupNamePrefix,Coalition,CheckClientInZone or true)then successes=successes+1 end for _,client in ipairs(task:GetClientObjects())do @@ -106443,6 +110355,11 @@ IsDone=true end return IsDone end +function PLAYERTASK:IsNotDone() +self:T(self.lid.."IsNotDone?") +local IsNotDone=not self:IsDone() +return IsNotDone +end function PLAYERTASK:HasClients() self:T(self.lid.."HasClients?") local hasclients=self:CountClients()>0 and true or false @@ -106603,6 +110520,10 @@ self:T({From,Event,To}) self:T(self.lid.."onafterStatus") local status=self:GetState() if status=="Stopped"then return self end +if self.TargetMarker then +local coordinate=self.Target:GetCoordinate() +self.TargetMarker:UpdateCoordinate(coordinate,0.5) +end local targetdead=false if self.Type~=AUFTRAG.Type.CTLD and self.Type~=AUFTRAG.Type.CSAR then if self.Target:IsDead()or self.Target:IsDestroyed()or self.Target:CountTargets()==0 then @@ -106711,7 +110632,7 @@ if self.TaskController then self.TaskController:__TaskCancelled(-1,self) end self.timestamp=timer.getAbsTime() -self.FinalState="Cancel" +self.FinalState="Cancelled" self:__Done(-1) return self end @@ -106723,7 +110644,7 @@ end if self.TargetMarker then self.TargetMarker:Remove() end -if self.TaskController.Scoring then +if self.TaskController and self.TaskController.Scoring then local clients,count=self:GetClientObjects() if count>0 then for _,_client in pairs(clients)do @@ -106751,7 +110672,10 @@ if self.TargetMarker then self.TargetMarker:Remove() end self.FinalState="Failed" -self:__Done(-1) +if self.TaskController then +self.TaskController:__TaskFailed(-1,self) +end +self:__Done(-1.5) end if self.TaskController.Scoring then local clients,count=self:GetClientObjects() @@ -106809,6 +110733,8 @@ InfoHasCoordinate=false, UseTypeNames=false, Scoring=nil, MenuNoTask=nil, +InformationMenu=false, +TaskInfoDuration=30, } PLAYERTASKCONTROLLER.Type={ A2A="Air-To-Air", @@ -106925,6 +110851,7 @@ FRIGATE="Frigate", CRUISER="Cruiser", DESTROYER="Destroyer", CARRIER="Aircraft Carrier", +RADIOS="Radios", }, DE={ TASKABORT="Auftrag abgebrochen!", @@ -107008,9 +110935,10 @@ FRIGATE="Fregatte", CRUISER="Kreuzer", DESTROYER="Zerstörer", CARRIER="Flugzeugträger", +RADIOS="Frequenzen", }, } -PLAYERTASKCONTROLLER.version="0.1.67" +PLAYERTASKCONTROLLER.version="0.1.70" function PLAYERTASKCONTROLLER:New(Name,Coalition,Type,ClientFilter) local self=BASE:Inherit(self,FSM:New()) self.Name=Name or"CentCom" @@ -107028,13 +110956,14 @@ self.TargetQueue=FIFO:New() self.TaskQueue=FIFO:New() self.TasksPerPlayer=FIFO:New() self.PrecisionTasks=FIFO:New() +self.LasingDroneSet=SET_OPSGROUP:New() self.FlashPlayer={} self.AllowFlash=false self.lasttaskcount=0 self.taskinfomenu=false self.activehasinfomenu=false self.MenuName=nil -self.menuitemlimit=5 +self.menuitemlimit=6 self.holdmenutime=30 self.MarkerReadOnly=false self.repeatonfailed=true @@ -107048,6 +110977,8 @@ self.noflaresmokemenu=false self.illumenu=false self.ShowMagnetic=true self.UseTypeNames=false +self.InformationMenu=false +self.TaskInfoDuration=30 self.IsClientSet=false if ClientFilter and type(ClientFilter)=="table"and ClientFilter.ClassName and ClientFilter.ClassName=="SET_CLIENT"then self.ClientSet=ClientFilter @@ -107120,6 +111051,11 @@ self:T(self.lid.."SetAllowFlashDirection") self.AllowFlash=OnOff return self end +function PLAYERTASKCONTROLLER:SetShowRadioInfoMenu(OnOff) +self:T(self.lid.."SetAllowRadioInfoMenu") +self.InformationMenu=OnOff +return self +end function PLAYERTASKCONTROLLER:SetDisableSmokeFlareTask() self:T(self.lid.."SetDisableSmokeFlareTask") self.noflaresmokemenu=true @@ -107153,7 +111089,7 @@ self.InfoHasCoordinate=OnOff self.InfoHasLLDDM=LLDDM return self end -function PLAYERTASKCONTROLLER:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations) +function PLAYERTASKCONTROLLER:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations,CallsignCustomFunc,...) if not ShortCallsign or ShortCallsign==false then self.ShortCallsign=false else @@ -107161,6 +111097,8 @@ self.ShortCallsign=true end self.Keepnumber=Keepnumber or false self.CallsignTranslations=CallsignTranslations +self.CallsignCustomFunc=CallsignCustomFunc +self.CallsignCustomArgs=arg or{} return self end function PLAYERTASKCONTROLLER:_GetTextForSpeech(text) @@ -107182,6 +111120,11 @@ self.repeattimes=Repeats or 5 end return self end +function PLAYERTASKCONTROLLER:SetBriefingDuration(Seconds) +self:T(self.lid.."SetBriefingDuration") +self.TaskInfoDuration=Seconds or 30 +return self +end function PLAYERTASKCONTROLLER:_SendMessageToClients(Text,Seconds) self:T(self.lid.."_SendMessageToClients") local seconds=Seconds or 10 @@ -107194,35 +111137,46 @@ end ) return self end -function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode,HoldingPoint,Alt,Speed) +function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode,HoldingPoint,Alt,Speed,MaxTravelDist) self:T(self.lid.."EnablePrecisionBombing") +if not self.LasingDroneSet then +self.LasingDroneSet=SET_OPSGROUP:New() +end +local LasingDrone if FlightGroup then if FlightGroup.ClassName and(FlightGroup.ClassName=="FLIGHTGROUP"or FlightGroup.ClassName=="ARMYGROUP")then -self.LasingDrone=FlightGroup -self.LasingDrone.playertask={} -self.LasingDrone.playertask.busy=false -self.LasingDrone.playertask.id=0 +LasingDrone=FlightGroup self.precisionbombing=true -self.LasingDrone:SetLaser(LaserCode) -self.LaserCode=LaserCode or 1688 -self.LasingDroneTemplate=self.LasingDrone:_GetTemplate(true) -self.LasingDroneAlt=Alt or 10000 -self.LasingDroneSpeed=Speed or 120 -if self.LasingDrone:IsFlightgroup()then -self.LasingDroneIsFlightgroup=true +LasingDrone.playertask={} +LasingDrone.playertask.id=0 +LasingDrone.playertask.busy=false +LasingDrone.playertask.lasercode=LaserCode or 1688 +LasingDrone:SetLaser(LasingDrone.playertask.lasercode) +LasingDrone.playertask.template=LasingDrone:_GetTemplate(true) +LasingDrone.playertask.alt=Alt or 10000 +LasingDrone.playertask.speed=Speed or 120 +LasingDrone.playertask.maxtravel=UTILS.NMToMeters(MaxTravelDist or 50) +if LasingDrone:IsFlightgroup()then local BullsCoordinate=COORDINATE:NewFromVec3(coalition.getMainRefPoint(self.Coalition)) if HoldingPoint then BullsCoordinate=HoldingPoint end -local Orbit=AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,self.LasingDroneAlt,self.LasingDroneSpeed) -self.LasingDrone:AddMission(Orbit) -elseif self.LasingDrone:IsArmygroup()then -self.LasingDroneIsArmygroup=true +local Orbit=AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,Alt,Speed) +Orbit:SetMissionAltitude(Alt) +LasingDrone:AddMission(Orbit) +elseif LasingDrone:IsArmygroup()then local BullsCoordinate=COORDINATE:NewFromVec3(coalition.getMainRefPoint(self.Coalition)) if HoldingPoint then BullsCoordinate=HoldingPoint end local Orbit=AUFTRAG:NewONGUARD(BullsCoordinate) -self.LasingDrone:AddMission(Orbit) +LasingDrone:AddMission(Orbit) end +self.LasingDroneSet:AddObject(FlightGroup) +elseif FlightGroup.ClassName and(FlightGroup.ClassName=="SET_OPSGROUP")then +FlightGroup:ForEachGroup( +function(group) +self:EnablePrecisionBombing(group,LaserCode,HoldingPoint,Alt,Speed,MaxTravelDist) +end +) else -self:E(self.lid.."No FLIGHTGROUP object passed or FLIGHTGROUP is not alive!") +self:E(self.lid.."No OPSGROUP/SET_OPSGROUP object passed or object is not alive!") end else self.autolase=nil @@ -107230,6 +111184,10 @@ self.precisionbombing=false end return self end +function PLAYERTASKCONTROLLER:AddPrecisionBombingOpsGroup(FlightGroup,LaserCode,HoldingPoint,Alt,Speed) +self:EnablePrecisionBombing(FlightGroup,LaserCode,HoldingPoint,Alt,Speed) +return self +end function PLAYERTASKCONTROLLER:EnableBuddyLasing(Recce) self:T(self.lid.."EnableBuddyLasing") self.buddylasing=true @@ -107276,7 +111234,7 @@ local ttsplayername=nil if not self.customcallsigns[playername]then local playergroup=Client:GetGroup() if playergroup~=nil then -ttsplayername=playergroup:GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +ttsplayername=playergroup:GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local newplayername=self:_GetTextForSpeech(ttsplayername) self.customcallsigns[playername]=newplayername ttsplayername=newplayername @@ -107308,7 +111266,7 @@ self.activehasinfomenu=InfoMenu or false if self.activehasinfomenu then self:EnableTaskInfoMenu() end -self.menuitemlimit=ItemLimit or 5 +self.menuitemlimit=ItemLimit+1 or 6 self.holdmenutime=HoldTime or 30 return self end @@ -107371,7 +111329,7 @@ if EventData.IniGroup then if self.customcallsigns[playername]then self.customcallsigns[playername]=nil end -playername=EventData.IniGroup:GetCustomCallSign(self.ShortCallsign,self.Keepnumber) +playername=EventData.IniGroup:GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) end playername=self:_GetTextForSpeech(playername) local text=string.format(switchtext,playername,self.MenuName or self.Name,freqtext) @@ -107569,37 +111527,62 @@ return self end function PLAYERTASKCONTROLLER:_CheckPrecisionTasks() self:T(self.lid.."_CheckPrecisionTasks") +self:T({count=self.PrecisionTasks:Count(),enabled=self.precisionbombing}) if self.PrecisionTasks:Count()>0 and self.precisionbombing then -if not self.LasingDrone or self.LasingDrone:IsDead()then +self.LasingDroneSet:ForEachGroup( +function(LasingDrone) +if not LasingDrone or LasingDrone:IsDead()then self:E(self.lid.."Lasing drone is dead ... creating a new one!") -if self.LasingDrone then -self.LasingDrone:_Respawn(1,nil,true) +if LasingDrone then +LasingDrone:_Respawn(1,nil,true) else -if self.LasingDroneIsFlightgroup then -local FG=FLIGHTGROUP:New(self.LasingDroneTemplate) -FG:Activate() -self:EnablePrecisionBombing(FG,self.LaserCode or 1688) -else -local FG=ARMYGROUP:New(self.LasingDroneTemplate) -FG:Activate() -self:EnablePrecisionBombing(FG,self.LaserCode or 1688) end end -return self end -if self.LasingDrone and self.LasingDrone:IsAlive()then -if self.LasingDrone.playertask and(not self.LasingDrone.playertask.busy)then -self:T(self.lid.."Sending lasing unit to target") +) +local function SelectDrone(coord) +local selected=nil +local mindist=math.huge +local dist=math.huge +self.LasingDroneSet:ForEachGroup( +function(grp) +if grp.playertask and(not grp.playertask.busy)then +local gc=grp:GetCoordinate() +if coord and gc then +dist=coord:Get2DDistance(gc) +end +if dist%s",CoordText) end end local ThreatLocaleTextTTS=self.gettext:GetEntry("THREATTEXTTTS",self.locale) local ttstext=string.format(ThreatLocaleTextTTS,ttsplayername,self.MenuName or self.Name,ttstaskname,ThreatLevelText,targets,CoordText) if task.Type==AUFTRAG.Type.PRECISIONBOMBING and self.precisionbombing then -if self.LasingDrone.playertask.inreach and self.LasingDrone:IsLasing()then +if LasingDrone and LasingDrone.playertask.inreach and LasingDrone:IsLasing()then local lasingtext=self.gettext:GetEntry("POINTERTARGETLASINGTTS",self.locale) ttstext=ttstext..lasingtext end @@ -108172,7 +112204,7 @@ else text=self.gettext:GetEntry("NOACTIVETASK",self.locale) end if not self.NoScreenOutput then -local m=MESSAGE:New(text,15,"Tasking"):ToClient(Client) +local m=MESSAGE:New(text,self.TaskInfoDuration or 30,"Tasking"):ToClient(Client) end return self end @@ -108442,6 +112474,10 @@ if self.TaskQueue:Count()>0 and self.MenuNoTask~=nil then JoinTaskMenuTemplate:DeleteGenericEntry(self.MenuNoTask) self.MenuNoTask=nil end +if self.InformationMenu then +local radioinfo=self.gettext:GetEntry("RADIOS",self.locale) +JoinTaskMenuTemplate:NewEntry(radioinfo,self.JoinTopMenu,self._ShowRadioInfo,self) +end self.JoinTaskMenuTemplate=JoinTaskMenuTemplate return self end @@ -108572,6 +112608,24 @@ self:E(self.lid.."*****NO detection has been set up (yet)!") end return self end +function PLAYERTASKCONTROLLER:AddConflictZone(ConflictZone) +self:T(self.lid.."AddConflictZone") +if self.Intel then +self.Intel:AddConflictZone(ConflictZone) +else +self:E(self.lid.."*****NO detection has been set up (yet)!") +end +return self +end +function PLAYERTASKCONTROLLER:AddConflictZoneSet(ConflictZoneSet) +self:T(self.lid.."AddConflictZoneSet") +if self.Intel then +self.Intel.conflictzoneset:AddSet(ConflictZoneSet) +else +self:E(self.lid.."*****NO detection has been set up (yet)!") +end +return self +end function PLAYERTASKCONTROLLER:RemoveAcceptZone(AcceptZone) self:T(self.lid.."RemoveAcceptZone") if self.Intel then @@ -108581,7 +112635,7 @@ self:E(self.lid.."*****NO detection has been set up (yet)!") end return self end -function PLAYERTASKCONTROLLER:RemoveRejectZoneSet(RejectZone) +function PLAYERTASKCONTROLLER:RemoveRejectZone(RejectZone) self:T(self.lid.."RemoveRejectZone") if self.Intel then self.Intel:RemoveRejectZone(RejectZone) @@ -108590,6 +112644,15 @@ self:E(self.lid.."*****NO detection has been set up (yet)!") end return self end +function PLAYERTASKCONTROLLER:RemoveConflictZone(ConflictZone) +self:T(self.lid.."RemoveConflictZone") +if self.Intel then +self.Intel:RemoveConflictZone(ConflictZone) +else +self:E(self.lid.."*****NO detection has been set up (yet)!") +end +return self +end function PLAYERTASKCONTROLLER:SetMenuName(Name) self:T(self.lid.."SetMenuName: "..Name) self.MenuName=Name @@ -108674,9 +112737,9 @@ NewContact(Contact) end return self end -function PLAYERTASKCONTROLLER:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey,AccessKey,Coordinate) +function PLAYERTASKCONTROLLER:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey,AccessKey,Coordinate,Backend) self:T(self.lid.."SetSRS") -self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.Gender=Gender or MSRS.gender or"male" self.Culture=Culture or MSRS.culture or"en-US" self.Port=Port or MSRS.port or 5002 @@ -108689,7 +112752,7 @@ self.Frequency=Frequency or{127,251} self.BCFrequency=self.Frequency self.Modulation=Modulation or{radio.modulation.FM,radio.modulation.AM} self.BCModulation=self.Modulation -self.SRS=MSRS:New(self.PathToSRS,self.Frequency,self.Modulation) +self.SRS=MSRS:New(self.PathToSRS,self.Frequency,self.Modulation,Backend) self.SRS:SetCoalition(self.Coalition) self.SRS:SetLabel(self.MenuName or self.Name) self.SRS:SetGender(self.Gender) @@ -108879,7 +112942,7 @@ PLAYERRECCE={ ClassName="PLAYERRECCE", verbose=true, lid=nil, -version="0.1.23", +version="0.1.26", ViewZone={}, ViewZoneVisual={}, ViewZoneLaser={}, @@ -108907,7 +112970,8 @@ TForget=600, TargetCache=nil, smokeownposition=false, SmokeOwn={}, -smokeaveragetargetpos=false, +smokeaveragetargetpos=true, +reporttostringbullsonly=true, } PLAYERRECCE.LaserRelativePos={ ["SA342M"]={x=1.7,y=1.2,z=0}, @@ -108915,7 +112979,8 @@ PLAYERRECCE.LaserRelativePos={ ["SA342Minigun"]={x=1.7,y=1.2,z=0}, ["SA342L"]={x=1.7,y=1.2,z=0}, ["Ka-50"]={x=6.1,y=-0.85,z=0}, -["Ka-50_3"]={x=6.1,y=-0.85,z=0} +["Ka-50_3"]={x=6.1,y=-0.85,z=0}, +["OH58D"]={x=0,y=2.8,z=0}, } PLAYERRECCE.MaxViewDistance={ ["SA342M"]=8000, @@ -108924,6 +112989,7 @@ PLAYERRECCE.MaxViewDistance={ ["SA342L"]=8000, ["Ka-50"]=8000, ["Ka-50_3"]=8000, +["OH58D"]=8000, } PLAYERRECCE.Cameraheight={ ["SA342M"]=2.85, @@ -108932,6 +112998,7 @@ PLAYERRECCE.Cameraheight={ ["SA342L"]=2.85, ["Ka-50"]=0.5, ["Ka-50_3"]=0.5, +["OH58D"]=4.25, } PLAYERRECCE.CanLase={ ["SA342M"]=true, @@ -108940,6 +113007,7 @@ PLAYERRECCE.CanLase={ ["SA342L"]=true, ["Ka-50"]=true, ["Ka-50_3"]=true, +["OH58D"]=false, } PLAYERRECCE.SmokeColor={ ["highsmoke"]=SMOKECOLOR.Orange, @@ -108965,6 +113033,7 @@ self.lid=string.format("PlayerForwardController %s %s | ",self.Name,self.version self:SetLaserCodes({1688,1130,4785,6547,1465,4578}) self.lasingtime=60 self.minthreatlevel=0 +self.reporttostringbullsonly=true self.TForget=600 self.TargetCache=FIFO:New() self:SetStartState("Stopped") @@ -109090,12 +113159,39 @@ local vivihorizontal=dcsunit:getDrawArgumentValue(215)or 0 if vivihorizontal<-0.7 or vivihorizontal>0.7 then camera=false end +elseif string.find(typename,"OH58")then +local dcsunit=Unit.getByName(client:GetName()) +local vivihorizontal=dcsunit:getDrawArgumentValue(528)or 0 +if vivihorizontal<-0.527 or vivihorizontal>0.527 then +camera=false +end elseif string.find(typename,"Ka-50")then camera=true end end return camera end +function PLAYERRECCE:_GetKiowaMMSSight(Kiowa) +self:T(self.lid.."_GetKiowaMMSSight") +local unit=Kiowa +if unit and unit:IsAlive()then +local dcsunit=Unit.getByName(Kiowa:GetName()) +local mmshorizontal=dcsunit:getDrawArgumentValue(528)or 0 +local mmsvertical=dcsunit:getDrawArgumentValue(527)or 0 +self:T(string.format("Kiowa MMS Arguments Read: H %.3f V %.3f",mmshorizontal,mmsvertical)) +local mmson=true +if mmshorizontal<-0.527 or mmshorizontal>0.527 then mmson=false end +local horizontalview=mmshorizontal/0.527*190 +local heading=unit:GetHeading() +local mmsheading=(heading+horizontalview)%360 +local mmsyaw=math.atan(mmsvertical)*40 +local maxview=self:_GetActualMaxLOSight(unit,mmsheading,mmsyaw,not mmson) +if maxview>8000 then maxview=8000 end +self:T(string.format("Kiowa MMS Heading %d, Yaw %d, MaxView %dm MMS On %s",mmsheading,mmsyaw,maxview,tostring(mmson))) +return mmsheading,mmsyaw,maxview,mmson +end +return 0,0,0,false +end function PLAYERRECCE:_GetGazelleVivianneSight(Gazelle) self:T(self.lid.."GetGazelleVivianneSight") local unit=Gazelle @@ -109112,33 +113208,11 @@ vivihorizontal=0.67 vivioff=true return 0,0,0,false end -vivivertical=vivivertical/1.10731 local horizontalview=vivihorizontal*-180 -local verticalview=vivivertical*30 +local verticalview=math.atan(vivivertical) local heading=unit:GetHeading() local viviheading=(heading+horizontalview)%360 local maxview=self:_GetActualMaxLOSight(unit,viviheading,verticalview,vivioff) -local factor=3.15 -self.GazelleViewFactors={ -[1]=1.18, -[2]=1.32, -[3]=1.46, -[4]=1.62, -[5]=1.77, -[6]=1.85, -[7]=2.05, -[8]=2.05, -[9]=2.3, -[10]=2.3, -[11]=2.27, -[12]=2.27, -[13]=2.43, -} -local lfac=UTILS.Round(maxview,-2) -if lfac<=1300 then -factor=3.15 -maxview=math.ceil((maxview*factor)/100)*100 -end if maxview>8000 then maxview=8000 end return viviheading,verticalview,maxview,not vivioff end @@ -109151,20 +113225,20 @@ local maxview=0 if unit and unit:IsAlive()then local typename=unit:GetTypeName() maxview=self.MaxViewDistance[typename]or 8000 -local CamHeight=self.Cameraheight[typename]or 0 -if vnod<0 then +local CamHeight=self.Cameraheight[typename]or 1 +if vnod<-2 then local beta=90 -local gamma=math.floor(90-vnod) -local alpha=math.floor(180-beta-gamma) +local gamma=90-math.abs(vnod) +local alpha=90-gamma local a=unit:GetHeight()-unit:GetCoordinate():GetLandHeight()+CamHeight local b=a/math.sin(math.rad(alpha)) local c=b*math.sin(math.rad(gamma)) maxview=c*1.2 end end -return math.abs(maxview) +return math.ceil(math.abs(maxview)) end -function PLAYERRECCE:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations) +function PLAYERRECCE:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations,CallsignCustomFunc,...) if not ShortCallsign or ShortCallsign==false then self.ShortCallsign=false else @@ -109172,6 +113246,8 @@ self.ShortCallsign=true end self.Keepnumber=Keepnumber or false self.CallsignTranslations=CallsignTranslations +self.CallsignCustomFunc=CallsignCustomFunc +self.CallsignCustomArgs=arg or{} return self end function PLAYERRECCE:_GetViewZone(unit,vheading,minview,maxview,angle,camon,laser) @@ -109259,22 +113335,30 @@ local finalcount=0 local minview=0 local typename=unit:GetTypeName() local playername=unit:GetPlayerName() -local maxview=self.MaxViewDistance[typename]or 5000 +local maxview=self.MaxViewDistance[typename]or 8000 local heading,nod,maxview,angle=0,30,8000,10 local camon=false local name=unit:GetName() if string.find(typename,"SA342")and camera then heading,nod,maxview,camon=self:_GetGazelleVivianneSight(unit) angle=10 -maxview=self.MaxViewDistance[typename]or 5000 +maxview=self.MaxViewDistance[typename]or 8000 elseif string.find(typename,"Ka-50")and camera then heading=unit:GetHeading() nod,maxview,camon=10,1000,true angle=10 -maxview=self.MaxViewDistance[typename]or 5000 +maxview=self.MaxViewDistance[typename]or 8000 +elseif string.find(typename,"OH58")and camera then +nod,maxview,camon=0,8000,true +heading,nod,maxview,camon=self:_GetKiowaMMSSight(unit) +angle=8 +if maxview==0 then +maxview=self.MaxViewDistance[typename]or 8000 +end else heading=unit:GetHeading() -nod,maxview,camon=10,1000,true +nod,maxview,camon=10,3000,true +maxview=self.MaxViewDistance[typename]or 3000 angle=45 end if laser then @@ -109363,7 +113447,8 @@ self:T("Targetstate: "..target:GetState()) self:T("Laser State: "..tostring(laser:IsLasing())) if(not oldtarget)or targetset:IsNotInSet(oldtarget)or target:IsDead()or target:IsDestroyed()then laser:LaseOff() -if target:IsDead()or target:IsDestroyed()or target:GetLife()<2 then +self:T(self.lid.."Target Life Points: "..target:GetLife()or"none") +if target:IsDead()or target:IsDestroyed()or target:GetDamage()>79 or target:GetLife()<=1 then self:__Shack(-1,client,oldtarget) else self:__TargetLOSLost(-1,client,oldtarget) @@ -109604,6 +113689,9 @@ report:Add("Target type: "..target:GetTypeName()or"unknown") report:Add("Threat Level: "..ThreatGraph.." ("..ThreatLevelText..")") if not self.ReferencePoint then report:Add("Location: "..client:GetCoordinate():ToStringBULLS(self.Coalition,Settings)) +if self.reporttostringbullsonly~=true then +report:Add("Location: "..client:GetCoordinate():ToStringA2G(nil,Settings)) +end else report:Add("Location: "..client:GetCoordinate():ToStringFromRPShort(self.ReferencePoint,self.RPName,client,Settings)) end @@ -109640,8 +113728,14 @@ report:Add("Target count: "..number) report:Add("Threat Level: "..ThreatGraph.." ("..ThreatLevelText..")") if not self.ReferencePoint then report:Add("Location: "..client:GetCoordinate():ToStringBULLS(self.Coalition,Settings)) +if self.reporttostringbullsonly~=true then +report:Add("Location: "..client:GetCoordinate():ToStringA2G(nil,Settings)) +end else report:Add("Location: "..client:GetCoordinate():ToStringFromRPShort(self.ReferencePoint,self.RPName,client,Settings)) +if self.reporttostringbullsonly~=true then +report:Add("Location: "..client:GetCoordinate():ToStringA2G(nil,Settings)) +end end report:Add(string.rep("-",15)) local text=report:Text() @@ -109665,6 +113759,7 @@ for _,_client in pairs(clientset)do local client=_client if client and client:IsAlive()then local playername=client:GetPlayerName() +self:T("Menu for "..playername) if not self.UnitLaserCodes[playername]then self:_SetClientLaserCode(nil,nil,playername,1688) end @@ -109673,6 +113768,7 @@ self.SmokeOwn[playername]=self.smokeownposition end local group=client:GetGroup() if not self.ClientMenus[playername]then +self:T("Start Menubuild for "..playername) local canlase=self.CanLase[client:GetTypeName()] self.ClientMenus[playername]=MENU_GROUP:New(group,self.MenuName or self.Name or"RECCE") local txtonstation=self.OnStation[playername]and"ON"or"OFF" @@ -109788,9 +113884,9 @@ self:TargetDetected(targetsbyclock,client,playername) end return self end -function PLAYERRECCE:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey) +function PLAYERRECCE:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey,Backend) self:T(self.lid.."SetSRS") -self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" self.Gender=Gender or MSRS.gender or"male" self.Culture=Culture or MSRS.culture or"en-US" self.Port=Port or MSRS.port or 5002 @@ -109809,6 +113905,9 @@ self.SRS:SetGender(self.Gender) self.SRS:SetCulture(self.Culture) self.SRS:SetPort(self.Port) self.SRS:SetVolume(self.Volume) +if Backend then +self.SRS:SetBackend(Backend) +end if self.PathToGoogleKey then self.SRS:SetProviderOptionsGoogle(self.PathToGoogleKey,self.PathToGoogleKey) self.SRS:SetProvider(MSRS.Provider.GOOGLE) @@ -109834,11 +113933,21 @@ self:T(self.lid.."SetMenuName: "..Name) self.MenuName=Name return self end +function PLAYERRECCE:SetReportBullsOnly(OnOff) +self:T(self.lid.."SetReportBullsOnly: "..tostring(OnOff)) +self.reporttostringbullsonly=OnOff +return self +end function PLAYERRECCE:EnableSmokeOwnPosition() self:T(self.lid.."EnableSmokeOwnPosition") self.smokeownposition=true return self end +function PLAYERRECCE:EnableKiowaAutolase() +self:T(self.lid.."EnableKiowaAutolase") +self.CanLase.OH58D=true +return self +end function PLAYERRECCE:DisableSmokeOwnPosition() self:T(self.lid.."DisableSmokeOwnPosition") self.smokeownposition=false @@ -109946,7 +114055,7 @@ return self end function PLAYERRECCE:onafterRecceOnStation(From,Event,To,Client,Playername) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition) if self.ReferencePoint then @@ -109955,7 +114064,7 @@ coordtext=coord:ToStringFromRPShort(self.ReferencePoint,self.RPName,Client,Setti end local text1="Party time!" local text2=string.format("All stations, FACA %s on station\nat %s!",callsign,coordtext) -local text2tts=string.format("All stations, FACA %s on station at %s!",callsign,coordtext) +local text2tts=string.format(" All stations, FACA %s on station at %s!",callsign,coordtext) text2tts=self:_GetTextForSpeech(text2tts) if self.debug then self:T(text2.."\n"..text2tts) @@ -109977,7 +114086,7 @@ return self end function PLAYERRECCE:onafterRecceOffStation(From,Event,To,Client,Playername) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition) if self.ReferencePoint then @@ -110093,7 +114202,7 @@ return self end function PLAYERRECCE:onafterIllumination(From,Event,To,Client,Playername,TargetSet) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition) if self.AttackSet then @@ -110126,7 +114235,7 @@ return self end function PLAYERRECCE:onafterTargetsSmoked(From,Event,To,Client,Playername,TargetSet) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition) if self.AttackSet then @@ -110159,7 +114268,7 @@ return self end function PLAYERRECCE:onafterTargetsFlared(From,Event,To,Client,Playername,TargetSet) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition) if self.AttackSet then @@ -110192,7 +114301,7 @@ return self end function PLAYERRECCE:onafterTargetLasing(From,Event,To,Client,Target,Lasercode,Lasingtime) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local Settings=(Client and _DATABASE:GetPlayerSettings(Client:GetPlayerName()))or _SETTINGS local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition,Settings) @@ -110230,7 +114339,7 @@ return self end function PLAYERRECCE:onafterShack(From,Event,To,Client,Target) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local Settings=(Client and _DATABASE:GetPlayerSettings(Client:GetPlayerName()))or _SETTINGS local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition,Settings) @@ -110268,7 +114377,7 @@ return self end function PLAYERRECCE:onafterTargetLOSLost(From,Event,To,Client,Target) self:T({From,Event,To}) -local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations) +local callsign=Client:GetGroup():GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations,self.CallsignCustomFunc,self.CallsignCustomArgs) local Settings=(Client and _DATABASE:GetPlayerSettings(Client:GetPlayerName()))or _SETTINGS local coord=Client:GetCoordinate() local coordtext=coord:ToStringBULLS(self.Coalition,Settings) @@ -111022,9 +115131,23 @@ return 0 elseif Target.Type==TARGET.ObjectType.COORDINATE then return 0 elseif Target.Type==TARGET.ObjectType.ZONE then -return 0 +local zone=Target.Object +local foundunits={} +if zone:IsInstanceOf("ZONE_RADIUS")or zone:IsInstanceOf("ZONE_POLYGON")then +zone:Scan({Object.Category.UNIT},{Unit.Category.GROUND_UNIT,Unit.Category.SHIP}) +foundunits=zone:GetScannedSetUnit() +else +foundunits=SET_UNIT:New():FilterZones({zone}):FilterOnce() +end +local ThreatMax=foundunits:GetThreatLevelMax()or 0 +return ThreatMax +elseif Target.Type==TARGET.ObjectType.OPSZONE then +local unitset=Target.Object:GetScannedUnitSet() +local ThreatMax=unitset:GetThreatLevelMax() +return ThreatMax else self:E("ERROR: unknown target object type in GetTargetThreatLevel!") +return 0 end return self end @@ -111245,6 +115368,17 @@ end self:E(self.lid..string.format("ERROR: Cannot get average coordinate of target %s",tostring(self.name))) return nil end +function TARGET:GetCoordinates() +local coordinates={} +for _,_target in pairs(self.targets)do +local target=_target +local coordinate=self:GetTargetCoordinate(target) +if coordinate then +table.insert(coordinates,coordinate) +end +end +return coordinates +end function TARGET:GetHeading() for _,_target in pairs(self.targets)do local Target=_target @@ -111374,6 +115508,14 @@ return target.Object end return nil end +function TARGET:GetObjects() +local objects={} +for _,_target in pairs(self.targets)do +local target=_target +table.insert(objects,target.Object) +end +return objects +end function TARGET:CountObjectives(Target,Coalitions) local N=0 if Target.Type==TARGET.ObjectType.GROUP then @@ -111486,26 +115628,34 @@ engagerange=50, repeatsonfailure=3, GoZoneSet=nil, NoGoZoneSet=nil, +ConflictZoneSet=nil, Monitor=false, TankerInvisible=true, CapFormation=nil, ReadyFlightGroups={}, DespawnAfterLanding=false, DespawnAfterHolding=true, -ListOfAuftrag={} +ListOfAuftrag={}, +defaulttakeofftype="hot", +FuelLowThreshold=25, +FuelCriticalThreshold=10, +showpatrolpointmarks=false, +EngageTargetTypes={"Air"}, } -EASYGCICAP.version="0.1.15" +EASYGCICAP.version="0.1.30" function EASYGCICAP:New(Alias,AirbaseName,Coalition,EWRName) local self=BASE:Inherit(self,FSM:New()) self.alias=Alias or AirbaseName.." CAP Wing" self.coalitionname=string.lower(Coalition)or"blue" self.coalition=self.coalitionname=="blue"and coalition.side.BLUE or coalition.side.RED self.wings={} -self.EWRName=EWRName or self.coalitionname.." EWR" +if type(EWRName)=="string"then EWRName={EWRName}end +self.EWRName=EWRName self.airbasename=AirbaseName self.airbase=AIRBASE:FindByName(self.airbasename) self.GoZoneSet=SET_ZONE:New() self.NoGoZoneSet=SET_ZONE:New() +self.ConflictZoneSet=SET_ZONE:New() self.resurrection=900 self.capspeed=300 self.capalt=25000 @@ -111523,6 +115673,11 @@ self.CapFormation=ENUMS.Formation.FixedWing.FingerFour.Group self.DespawnAfterLanding=false self.DespawnAfterHolding=true self.ListOfAuftrag={} +self.defaulttakeofftype="hot" +self.FuelLowThreshold=25 +self.FuelCriticalThreshold=10 +self.showpatrolpointmarks=false +self.EngageTargetTypes={"Air"} self.lid=string.format("EASYGCICAP %s | ",self.alias) self:SetStartState("Stopped") self:AddTransition("Stopped","Start","Running") @@ -111533,6 +115688,39 @@ self:I(self.lid.."Created new instance (v"..self.version..")") self:__Start(math.random(6,12)) return self end +function EASYGCICAP:GetAirwing(AirbaseName) +self:T(self.lid.."GetAirwing") +if self.wings[AirbaseName]then +return self.wings[AirbaseName][1] +end +return nil +end +function EASYGCICAP:GetAirwingTable() +self:T(self.lid.."GetAirwingTable") +local Wingtable={} +for _,_object in pairs(self.wings or{})do +table.insert(Wingtable,_object[1]) +end +return Wingtable +end +function EASYGCICAP:SetFuelLow(Percent) +self:T(self.lid.."SetFuelLow") +self.FuelLowThreshold=Percent or 25 +return self +end +function EASYGCICAP:ShowPatrolPointMarkers(onoff) +if onoff then +self.showpatrolpointmarks=true +else +self.showpatrolpointmarks=false +end +return self +end +function EASYGCICAP:SetFuelCritical(Percent) +self:T(self.lid.."SetFuelCritical") +self.FuelCriticalThreshold=Percent or 10 +return self +end function EASYGCICAP:SetCAPFormation(Formation) self:T(self.lid.."SetCAPFormation") self.CapFormation=Formation @@ -111543,6 +115731,16 @@ self:T(self.lid.."SetTankerAndAWACSInvisible") self.TankerInvisible=Switch return self end +function EASYGCICAP:_CountAliveAuftrags() +local alive=0 +for _,_auftrag in pairs(self.ListOfAuftrag)do +local auftrag=_auftrag +if auftrag and(not(auftrag:IsCancelled()or auftrag:IsDone()or auftrag:IsOver()))then +alive=alive+1 +end +end +return alive +end function EASYGCICAP:SetMaxAliveMissions(Maxiumum) self:T(self.lid.."SetMaxAliveMissions") self.MaxAliveMissions=Maxiumum or 8 @@ -111558,6 +115756,11 @@ self:T(self.lid.."SetDefaultRepeatOnFailure") self.repeatsonfailure=Retries or 3 return self end +function EASYGCICAP:SetDefaultTakeOffType(Takeoff) +self:T(self.lid.."SetDefaultTakeOffType") +self.defaulttakeofftype=Takeoff or"hot" +return self +end function EASYGCICAP:SetDefaultCAPSpeed(Speed) self:T(self.lid.."SetDefaultSpeed") self.capspeed=Speed or 300 @@ -111620,6 +115823,10 @@ self.capOptionVaryStartTime=Start or 5 self.capOptionVaryEndTime=End or 60 return self end +function EASYGCICAP:SetCAPEngageTargetTypes(types) +self.EngageTargetTypes=types or{"Air"} +return self +end function EASYGCICAP:AddAirwing(Airbasename,Alias) self:T(self.lid.."AddAirwing "..Airbasename) local AWEntry={} @@ -111643,6 +115850,11 @@ self:T(self.lid.."_AddAirwing "..Airbasename) local CapFormation=self.CapFormation local DespawnAfterLanding=self.DespawnAfterLanding local DespawnAfterHolding=self.DespawnAfterHolding +local check=STATIC:FindByName(Airbasename,false)or UNIT:FindByName(Airbasename) +if check==nil then +MESSAGE:New(self.lid.."There's no warehouse static on the map (wrong naming?) for airbase "..tostring(Airbasename).."!",30,"CHECK"):ToAllIf(self.debug):ToLog() +return +end local CAP_Wing=AIRWING:New(Airbasename,Alias) CAP_Wing:SetVerbosityLevel(0) CAP_Wing:SetReportOff() @@ -111651,6 +115863,9 @@ CAP_Wing:SetAirbase(AIRBASE:FindByName(Airbasename)) CAP_Wing:SetRespawnAfterDestroyed() CAP_Wing:SetNumberCAP(self.capgrouping) CAP_Wing:SetCapCloseRaceTrack(true) +if self.showpatrolpointmarks then +CAP_Wing:ShowPatrolPointMarkers(true) +end if self.capOptionVaryStartTime then CAP_Wing:SetCapStartTimeVariation(self.capOptionVaryStartTime,self.capOptionVaryEndTime) end @@ -111667,13 +115882,19 @@ end if#self.ManagedREC>0 then CAP_Wing:SetNumberRecon(1) end -CAP_Wing:SetTakeoffHot() +CAP_Wing:SetTakeoffType(self.defaulttakeofftype) CAP_Wing:SetLowFuelThreshold(0.3) CAP_Wing.RandomAssetScore=math.random(50,100) CAP_Wing:Start() local Intel=self.Intel local TankerInvisible=self.TankerInvisible -function CAP_Wing:OnAfterFlightOnMission(From,Event,To,Flightgroup,Mission) +local engagerange=self.engagerange +local GoZoneSet=self.GoZoneSet +local NoGoZoneSet=self.NoGoZoneSet +local FuelLow=self.FuelLowThreshold or 25 +local FuelCritical=self.FuelCriticalThreshold or 10 +local EngageTypes=self.EngageTargetTypes or{"Air"} +function CAP_Wing:onbeforeFlightOnMission(From,Event,To,Flightgroup,Mission) local flightgroup=Flightgroup if DespawnAfterLanding then flightgroup:SetDespawnAfterLanding() @@ -111683,10 +115904,15 @@ end flightgroup:SetDestinationbase(AIRBASE:FindByName(Airbasename)) flightgroup:GetGroup():CommandEPLRS(true,5) flightgroup:GetGroup():SetOptionRadarUsingForContinousSearch() +flightgroup:GetGroup():SetOptionLandingOverheadBreak() if Mission.type~=AUFTRAG.Type.TANKER and Mission.type~=AUFTRAG.Type.AWACS and Mission.type~=AUFTRAG.Type.RECON then flightgroup:SetDetection(true) -flightgroup:SetEngageDetectedOn(self.engagerange,{"Air"},self.GoZoneSet,self.NoGoZoneSet) +flightgroup:SetEngageDetectedOn(engagerange,EngageTypes,GoZoneSet,NoGoZoneSet) flightgroup:SetOutOfAAMRTB() +flightgroup:SetFuelLowRTB(true) +flightgroup:SetFuelLowThreshold(FuelLow) +flightgroup:SetFuelCriticalRTB(true) +flightgroup:SetFuelCriticalThreshold(FuelCritical) if CapFormation then flightgroup:GetGroup():SetOption(AI.Option.Air.id.FORMATION,CapFormation) end @@ -111703,7 +115929,7 @@ flightgroup:GetGroup():OptionROTEvadeFire() flightgroup:SetFuelLowRTB(true) Intel:AddAgent(flightgroup) if DespawnAfterHolding then -function flightgroup:OnAfterHolding(From,Event,To) +function flightgroup:onbeforeHolding(From,Event,To) self:Despawn(1,true) end end @@ -111719,17 +115945,22 @@ self.wings[Airbasename]={CAP_Wing,AIRBASE:FindByName(Airbasename):GetZone(),Airb return self end function EASYGCICAP:AddPatrolPointCAP(AirbaseName,Coordinate,Altitude,Speed,Heading,LegLength) -self:T(self.lid.."AddPatrolPointCAP "..Coordinate:ToStringLLDDM()) +self:T(self.lid.."AddPatrolPointCAP") +local coordinate=Coordinate local EntryCAP={} +if Coordinate:IsInstanceOf("ZONE_BASE")then +coordinate=Coordinate:GetCoordinate() +EntryCAP.Zone=Coordinate +end EntryCAP.AirbaseName=AirbaseName -EntryCAP.Coordinate=Coordinate +EntryCAP.Coordinate=coordinate EntryCAP.Altitude=Altitude or 25000 EntryCAP.Speed=Speed or 300 EntryCAP.Heading=Heading or 90 EntryCAP.LegLength=LegLength or 15 self.ManagedCP[#self.ManagedCP+1]=EntryCAP if self.debug then -local mark=MARKER:New(Coordinate,self.lid.."Patrol Point"):ToAll() +local mark=MARKER:New(coordinate,self.lid.."Patrol Point"):ToAll() end return self end @@ -111782,6 +116013,11 @@ function EASYGCICAP:_SetTankerPatrolPoints() self:T(self.lid.."_SetTankerPatrolPoints") for _,_data in pairs(self.ManagedTK)do local data=_data +self:T("Airbasename = "..data.AirbaseName) +if not self.wings[data.AirbaseName]then +MESSAGE:New(self.lid.."You are trying to create a TANKER point for which there is no wing! "..tostring(data.AirbaseName),30,"CHECK"):ToAllIf(self.debug):ToLog() +return +end local Wing=self.wings[data.AirbaseName][1] local Coordinate=data.Coordinate local Altitude=data.Altitude @@ -111796,6 +116032,11 @@ function EASYGCICAP:_SetAwacsPatrolPoints() self:T(self.lid.."_SetAwacsPatrolPoints") for _,_data in pairs(self.ManagedEWR)do local data=_data +self:T("Airbasename = "..data.AirbaseName) +if not self.wings[data.AirbaseName]then +MESSAGE:New(self.lid.."You are trying to create an AWACS point for which there is no wing! "..tostring(data.AirbaseName),30,"CHECK"):ToAllIf(self.debug):ToLog() +return +end local Wing=self.wings[data.AirbaseName][1] local Coordinate=data.Coordinate local Altitude=data.Altitude @@ -111810,20 +116051,35 @@ function EASYGCICAP:_SetCAPPatrolPoints() self:T(self.lid.."_SetCAPPatrolPoints") for _,_data in pairs(self.ManagedCP)do local data=_data +self:T("Airbasename = "..data.AirbaseName) +if not self.wings[data.AirbaseName]then +MESSAGE:New(self.lid.."You are trying to create a CAP point for which there is no wing! "..tostring(data.AirbaseName),30,"CHECK"):ToAllIf(self.debug):ToLog() +return +end local Wing=self.wings[data.AirbaseName][1] local Coordinate=data.Coordinate local Altitude=data.Altitude local Speed=data.Speed local Heading=data.Heading local LegLength=data.LegLength +local Zone=_data.Zone +if Zone then +Wing:AddPatrolPointCAP(Zone,Altitude,Speed,Heading,LegLength) +else Wing:AddPatrolPointCAP(Coordinate,Altitude,Speed,Heading,LegLength) end +end return self end function EASYGCICAP:_SetReconPatrolPoints() self:T(self.lid.."_SetReconPatrolPoints") for _,_data in pairs(self.ManagedREC)do local data=_data +self:T("Airbasename = "..data.AirbaseName) +if not self.wings[data.AirbaseName]then +MESSAGE:New(self.lid.."You are trying to create a RECON point for which there is no wing! "..tostring(data.AirbaseName),30,"CHECK"):ToAllIf(self.debug):ToLog() +return +end local Wing=self.wings[data.AirbaseName][1] local Coordinate=data.Coordinate local Altitude=data.Altitude @@ -111961,7 +116217,9 @@ Squadron_One:SetLivery(Livery) Squadron_One:SetSkill(Skill or AI.Skill.AVERAGE) Squadron_One:SetMissionRange(self.missionrange) Squadron_One:SetRadio(Frequency,Modulation) +if TACAN then Squadron_One:AddTacanChannel(TACAN,TACAN) +end local wing=self.wings[AirbaseName][1] wing:AddSquadron(Squadron_One) wing:NewPayload(TemplateName,-1,{AUFTRAG.Type.TANKER},75) @@ -111984,7 +116242,7 @@ wing:NewPayload(TemplateName,-1,{AUFTRAG.Type.AWACS},75) return self end function EASYGCICAP:AddAcceptZone(Zone) -self:T(self.lid.."AddAcceptZone0") +self:T(self.lid.."AddAcceptZone") self.GoZoneSet:AddZone(Zone) return self end @@ -111993,20 +116251,26 @@ self:T(self.lid.."AddRejectZone") self.NoGoZoneSet:AddZone(Zone) return self end +function EASYGCICAP:AddConflictZone(Zone) +self:T(self.lid.."AddConflictZone") +self.ConflictZoneSet:AddZone(Zone) +self.GoZoneSet:AddZone(Zone) +return self +end function EASYGCICAP:_TryAssignIntercept(ReadyFlightGroups,InterceptAuftrag,Group,WingSize) -self:I("_TryAssignIntercept for size "..WingSize or 1) +self:T("_TryAssignIntercept for size "..WingSize or 1) local assigned=false local wingsize=WingSize or 1 local mindist=0 local disttable={} if Group and Group:IsAlive()then local gcoord=Group:GetCoordinate()or COORDINATE:New(0,0,0) -self:I(self.lid..string.format("Assignment for %s",Group:GetName())) +self:T(self.lid..string.format("Assignment for %s",Group:GetName())) for _name,_FG in pairs(ReadyFlightGroups or{})do local FG=_FG local fcoord=FG:GetCoordinate() local dist=math.floor(UTILS.Round(fcoord:Get2DDistance(gcoord)/1000,1)) -self:I(self.lid..string.format("FG %s Distance %dkm",_name,dist)) +self:T(self.lid..string.format("FG %s Distance %dkm",_name,dist)) disttable[#disttable+1]={FG=FG,dist=dist} if dist>mindist then mindist=dist end end @@ -112020,7 +116284,7 @@ FG:AddMission(InterceptAuftrag) local cm=FG:GetMissionCurrent() if cm then cm:Cancel()end wingsize=wingsize-1 -self:I(self.lid..string.format("Assigned to FG %s Distance %dkm",FG:GetName(),_entry.dist)) +self:T(self.lid..string.format("Assigned to FG %s Distance %dkm",FG:GetName(),_entry.dist)) if wingsize==0 then assigned=true break @@ -112037,8 +116301,9 @@ local maxsize=self.maxinterceptsize local repeatsonfailure=self.repeatsonfailure local wings=self.wings local ctlpts=self.ManagedCP -local MaxAliveMissions=self.MaxAliveMissions*self.capgrouping +local MaxAliveMissions=self.MaxAliveMissions local nogozoneset=self.NoGoZoneSet +local conflictzoneset=self.ConflictZoneSet local ReadyFlightGroups=self.ReadyFlightGroups if Cluster.ctype~=INTEL.Ctype.AIRCRAFT then return end local contact=self.Intel:GetHighestThreatContact(Cluster) @@ -112076,6 +116341,9 @@ for _,_data in pairs(ctlpts)do local data=_data local name=data.AirbaseName local zonecoord=data.Coordinate +if data.Zone then +zonecoord=data.Zone:GetCoordinate() +end local airwing=wings[name][1] local coa=AIRBASE:FindByName(name):GetCoalition() local samecoalitionab=coa==self.coalition and true or false @@ -112091,8 +116359,9 @@ local text=string.format("Closest Airwing is %s",targetawname) local m=MESSAGE:New(text,10,"CAPGCI"):ToAllIf(self.debug):ToLog() if targetairwing then local AssetCount=targetairwing:CountAssetsOnMission(MissionTypes,Cohort) +local missioncount=self:_CountAliveAuftrags() self:T(self.lid.." Assets on Mission "..AssetCount) -if AssetCount<=MaxAliveMissions then +if missioncount0 then InterceptAuftrag:AddConditionSuccess( -function(group,zoneset) +function(group,zoneset,conflictset) local success=false if group and group:IsAlive()then local coord=group:GetCoordinate() -if coord and zoneset:IsCoordinateInZone(coord)then +if coord and zoneset:Count()>0 and zoneset:IsCoordinateInZone(coord)then success=true end +if coord and conflictset:Count()>0 and conflictset:IsCoordinateInZone(coord)then +success=false +end end return success end, contact.group, -nogozoneset +nogozoneset, +conflictzoneset ) end table.insert(self.ListOfAuftrag,InterceptAuftrag) @@ -112132,13 +116405,14 @@ end function EASYGCICAP:_StartIntel() self:T(self.lid.."_StartIntel") local BlueAir_DetectionSetGroup=SET_GROUP:New() -BlueAir_DetectionSetGroup:FilterPrefixes({self.EWRName}) +BlueAir_DetectionSetGroup:FilterPrefixes(self.EWRName) BlueAir_DetectionSetGroup:FilterStart() -local BlueIntel=INTEL:New(BlueAir_DetectionSetGroup,self.coalitionname,self.EWRName) +local BlueIntel=INTEL:New(BlueAir_DetectionSetGroup,self.coalitionname,self.alias) BlueIntel:SetClusterAnalysis(true,false,false) BlueIntel:SetForgetTime(300) BlueIntel:SetAcceptZones(self.GoZoneSet) BlueIntel:SetRejectZones(self.NoGoZoneSet) +BlueIntel:SetConflictZones(self.ConflictZoneSet) BlueIntel:SetVerbosity(0) BlueIntel:Start() if self.debug then @@ -112147,7 +116421,7 @@ end local function AssignCluster(Cluster) self:_AssignIntercept(Cluster) end -function BlueIntel:OnAfterNewCluster(From,Event,To,Cluster) +function BlueIntel:onbeforeNewCluster(From,Event,To,Cluster) AssignCluster(Cluster) end self.Intel=BlueIntel @@ -112234,12 +116508,14 @@ local threatcount=#self.Intel.Clusters or 0 local text="GCICAP "..self.alias text=text.."\nWings: "..wings.."\nSquads: "..squads.."\nCapPoints: "..caps.."\nAssets on Mission: "..assets.."\nAssets in Stock: "..instock text=text.."\nThreats: "..threatcount -text=text.."\nMissions: "..capmission+interceptmission +text=text.."\nAirWing managed Missions: "..capmission+awacsmission+tankermission+reconmission text=text.."\n - CAP: "..capmission -text=text.."\n - Intercept: "..interceptmission text=text.."\n - AWACS: "..awacsmission text=text.."\n - TANKER: "..tankermission text=text.."\n - Recon: "..reconmission +text=text.."\nSelf managed Missions:" +text=text.."\n - Mission Limit: "..self.MaxAliveMissions +text=text.."\n - Alert5+Intercept "..self:_CountAliveAuftrags() MESSAGE:New(text,15,"GCICAP"):ToAll():ToLogIf(self.debug) end self:__Status(30) @@ -112248,6 +116524,9 @@ end function EASYGCICAP:onafterStop(From,Event,To) self:T({From,Event,To}) self.Intel:Stop() +for _,_wing in pairs(self.wings or{})do +_wing:Stop() +end return self end AI_BALANCER={ @@ -112312,7 +116591,7 @@ local SwitchWayPointCommand=AIGroup:CommandSwitchWayPoint(1,WayPointCount,1) AIGroup:SetCommand(SwitchWayPointCommand) AIGroup:MessageToRed("Returning to home base ...",30) else -local PointVec2=POINT_VEC2:New(AIGroup:GetVec2().x,AIGroup:GetVec2().y) +local PointVec2=COORDINATE:New(AIGroup:GetVec2().x,0,AIGroup:GetVec2().y) local ClosestAirbase=self.ReturnAirbaseSet:FindNearestAirbaseFromPointVec2(PointVec2) self:T(ClosestAirbase.AirbaseName) AIGroup:RouteRTB(ClosestAirbase) @@ -112597,15 +116876,15 @@ return end local FromRTBRoutePoint=FromCoord:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, RTBSpeed, true ) local ToRTBRoutePoint=ToAirbaseCoord:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, RTBSpeed, true ) @@ -112654,8 +116933,8 @@ local RefuelRoute={} local FromRefuelCoord=AIGroup:GetCoordinate() local ToRefuelCoord=Tanker:GetCoordinate() local ToRefuelSpeed=math.random(self.PatrolMinSpeed,self.PatrolMaxSpeed) -local FromRefuelRoutePoint=FromRefuelCoord:WaypointAir(self.PatrolAltType,POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,ToRefuelSpeed,true) -local ToRefuelRoutePoint=Tanker:GetCoordinate():WaypointAir(self.PatrolAltType,POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,ToRefuelSpeed,true) +local FromRefuelRoutePoint=FromRefuelCoord:WaypointAir(self.PatrolAltType,COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,ToRefuelSpeed,true) +local ToRefuelRoutePoint=Tanker:GetCoordinate():WaypointAir(self.PatrolAltType,COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,ToRefuelSpeed,true) self:F({ToRefuelSpeed=ToRefuelSpeed}) RefuelRoute[#RefuelRoute+1]=FromRefuelRoutePoint RefuelRoute[#RefuelRoute+1]=ToRefuelRoutePoint @@ -112765,7 +117044,7 @@ ToTargetCoord:SetAlt(altitude) self:SetTargetDistance(ToTargetCoord) local ToTargetSpeed=math.random(self.PatrolMinSpeed,self.PatrolMaxSpeed) local speedkmh=ToTargetSpeed -local FromWP=CurrentCoord:WaypointAir(self.PatrolAltType or"RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,ToTargetSpeed,true) +local FromWP=CurrentCoord:WaypointAir(self.PatrolAltType or"RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,ToTargetSpeed,true) PatrolRoute[#PatrolRoute+1]=FromWP if self.racetrack then local heading=math.random(self.racetrackheadingmin,self.racetrackheadingmax) @@ -112788,7 +117067,7 @@ local taskCond=AIPatrol:TaskCondition(nil,nil,nil,nil,duration,nil) local taskCont=AIPatrol:TaskControlled(taskOrbit,taskCond) PatrolRoute[2]=c1:WaypointAirTurningPoint(self.PatrolAltType,speedkmh,{taskCont,taskPatrol},"CAP Orbit") else -local ToWP=ToTargetCoord:WaypointAir(self.PatrolAltType,POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,ToTargetSpeed,true) +local ToWP=ToTargetCoord:WaypointAir(self.PatrolAltType,COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,ToTargetSpeed,true) PatrolRoute[#PatrolRoute+1]=ToWP local Tasks={} Tasks[#Tasks+1]=AIPatrol:TaskFunction("AI_AIR_PATROL.___PatrolRoute",self) @@ -112891,12 +117170,12 @@ self:__Engage(0.1,AttackSetUnit) else local EngageRoute={} local AttackTasks={} -local FromWP=DefenderCoord:WaypointAir(self.PatrolAltType or"RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,EngageSpeed,true) +local FromWP=DefenderCoord:WaypointAir(self.PatrolAltType or"RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,EngageSpeed,true) EngageRoute[#EngageRoute+1]=FromWP self:SetTargetDistance(TargetCoord) local FromEngageAngle=DefenderCoord:GetAngleDegrees(DefenderCoord:GetDirectionVec3(TargetCoord)) local ToCoord=DefenderCoord:Translate(EngageDistance,FromEngageAngle,true) -local ToWP=ToCoord:WaypointAir(self.PatrolAltType or"RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,EngageSpeed,true) +local ToWP=ToCoord:WaypointAir(self.PatrolAltType or"RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,EngageSpeed,true) EngageRoute[#EngageRoute+1]=ToWP AttackTasks[#AttackTasks+1]=DefenderGroup:TaskFunction("AI_AIR_ENGAGE.___EngageRoute",self,AttackSetUnit) EngageRoute[#EngageRoute].task=DefenderGroup:TaskCombo(AttackTasks) @@ -112939,12 +117218,12 @@ local TargetDistance=DefenderCoord:Get2DDistance(TargetCoord) local EngageDistance=(DefenderGroup:IsHelicopter()and 5000)or(DefenderGroup:IsAirPlane()and 10000) local EngageRoute={} local AttackTasks={} -local FromWP=DefenderCoord:WaypointAir(self.EngageAltType or"RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,EngageSpeed,true) +local FromWP=DefenderCoord:WaypointAir(self.EngageAltType or"RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,EngageSpeed,true) EngageRoute[#EngageRoute+1]=FromWP self:SetTargetDistance(TargetCoord) local FromEngageAngle=DefenderCoord:GetAngleDegrees(DefenderCoord:GetDirectionVec3(TargetCoord)) local ToCoord=DefenderCoord:Translate(EngageDistance,FromEngageAngle,true) -local ToWP=ToCoord:WaypointAir(self.EngageAltType or"RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,EngageSpeed,true) +local ToWP=ToCoord:WaypointAir(self.EngageAltType or"RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,EngageSpeed,true) EngageRoute[#EngageRoute+1]=ToWP if TargetDistance<=EngageDistance*9 then local AttackUnitTasks=self:CreateAttackUnitTasks(AttackSetUnit,DefenderGroup,EngageAltitude) @@ -116491,12 +120770,12 @@ self:T("Not in the air, finding route path within PatrolZone") local CurrentVec2=self.Controllable:GetVec2() if not CurrentVec2 then return end local CurrentAltitude=self.Controllable:GetAltitude() -local CurrentPointVec3=POINT_VEC3:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) +local CurrentPointVec3=COORDINATE:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) local ToPatrolZoneSpeed=self.PatrolMaxSpeed local CurrentRoutePoint=CurrentPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TakeOffParking, -POINT_VEC3.RoutePointAction.FromParkingArea, +COORDINATE.WaypointType.TakeOffParking, +COORDINATE.WaypointAction.FromParkingArea, ToPatrolZoneSpeed, true ) @@ -116506,12 +120785,12 @@ self:T("In the air, finding route path within PatrolZone") local CurrentVec2=self.Controllable:GetVec2() if not CurrentVec2 then return end local CurrentAltitude=self.Controllable:GetAltitude() -local CurrentPointVec3=POINT_VEC3:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) +local CurrentPointVec3=COORDINATE:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) local ToPatrolZoneSpeed=self.PatrolMaxSpeed local CurrentRoutePoint=CurrentPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, ToPatrolZoneSpeed, true ) @@ -116522,11 +120801,11 @@ self:T2(ToTargetVec2) local ToTargetAltitude=math.random(self.PatrolFloorAltitude,self.PatrolCeilingAltitude) local ToTargetSpeed=math.random(self.PatrolMinSpeed,self.PatrolMaxSpeed) self:T2({self.PatrolMinSpeed,self.PatrolMaxSpeed,ToTargetSpeed}) -local ToTargetPointVec3=POINT_VEC3:New(ToTargetVec2.x,ToTargetAltitude,ToTargetVec2.y) +local ToTargetPointVec3=COORDINATE:New(ToTargetVec2.x,ToTargetAltitude,ToTargetVec2.y) local ToTargetRoutePoint=ToTargetPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, ToTargetSpeed, true ) @@ -116552,13 +120831,21 @@ local OrbitTask=OldAIControllable:TaskOrbitCircle(math.random(self.PatrolFloorAl local TimedOrbitTask=OldAIControllable:TaskControlled(OrbitTask,OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil)) OldAIControllable:SetTask(TimedOrbitTask,10) RTB=true -else end local Damage=self.Controllable:GetLife() if Damage<=self.PatrolDamageThreshold then self:T(self.Controllable:GetName().." is damaged:"..Damage..", RTB!") RTB=true end +if self:IsInstanceOf("AI_CAS")or self:IsInstanceOf("AI_BAI")then +local atotal,shells,rockets,bombs,missiles=self.Controllable:GetAmmunition() +local arelevant=rockets+bombs +if arelevant==0 or missiles==0 then +RTB=true +self:T({total=atotal,shells=shells,rockets=rockets,bombs=bombs,missiles=missiles}) +self:T(self.Controllable:GetName().." is out of ammo, RTB!") +end +end if RTB==true then self:RTB() else @@ -116575,12 +120862,12 @@ local PatrolRoute={} local CurrentVec2=self.Controllable:GetVec2() if not CurrentVec2 then return end local CurrentAltitude=self.Controllable:GetAltitude() -local CurrentPointVec3=POINT_VEC3:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) +local CurrentPointVec3=COORDINATE:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) local ToPatrolZoneSpeed=self.PatrolMaxSpeed local CurrentRoutePoint=CurrentPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, ToPatrolZoneSpeed, true ) @@ -116682,12 +120969,12 @@ local EngageRoute={} local CurrentVec2=self.Controllable:GetVec2() if not CurrentVec2 then return self end local CurrentAltitude=self.Controllable:GetAltitude() -local CurrentPointVec3=POINT_VEC3:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) +local CurrentPointVec3=COORDINATE:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) local ToEngageZoneSpeed=self.PatrolMaxSpeed local CurrentRoutePoint=CurrentPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, ToEngageZoneSpeed, true ) @@ -116697,11 +120984,11 @@ self:T2(ToTargetVec2) local ToTargetAltitude=math.random(self.EngageFloorAltitude,self.EngageCeilingAltitude) local ToTargetSpeed=math.random(self.PatrolMinSpeed,self.PatrolMaxSpeed) self:T2({self.PatrolMinSpeed,self.PatrolMaxSpeed,ToTargetSpeed}) -local ToTargetPointVec3=POINT_VEC3:New(ToTargetVec2.x,ToTargetAltitude,ToTargetVec2.y) +local ToTargetPointVec3=COORDINATE:New(ToTargetVec2.x,ToTargetAltitude,ToTargetVec2.y) local ToPatrolRoutePoint=ToTargetPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, ToTargetSpeed, true ) @@ -116845,12 +121132,12 @@ Controllable:OptionROTVertical() local EngageRoute={} local CurrentVec2=self.Controllable:GetVec2() local CurrentAltitude=self.Controllable:GetAltitude() -local CurrentPointVec3=POINT_VEC3:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) +local CurrentPointVec3=COORDINATE:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) local ToEngageZoneSpeed=self.PatrolMaxSpeed local CurrentRoutePoint=CurrentPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) @@ -116877,11 +121164,11 @@ AttackTasks[#AttackTasks+1]=Controllable:TaskFunction("AI_CAS_ZONE.EngageRoute", EngageRoute[#EngageRoute].task=Controllable:TaskCombo(AttackTasks) local ToTargetVec2=self.EngageZone:GetRandomVec2() self:T2(ToTargetVec2) -local ToTargetPointVec3=POINT_VEC3:New(ToTargetVec2.x,self.EngageAltitude,ToTargetVec2.y) +local ToTargetPointVec3=COORDINATE:New(ToTargetVec2.x,self.EngageAltitude,ToTargetVec2.y) local ToTargetRoutePoint=ToTargetPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) @@ -117016,12 +121303,12 @@ if Controllable:IsAlive()then local EngageRoute={} local CurrentVec2=self.Controllable:GetVec2() local CurrentAltitude=self.Controllable:GetAltitude() -local CurrentPointVec3=POINT_VEC3:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) +local CurrentPointVec3=COORDINATE:New(CurrentVec2.x,CurrentAltitude,CurrentVec2.y) local ToEngageZoneSpeed=self.PatrolMaxSpeed local CurrentRoutePoint=CurrentPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) @@ -117061,11 +121348,11 @@ end EngageRoute[#EngageRoute].task=Controllable:TaskCombo(AttackTasks) local ToTargetVec2=self.EngageZone:GetRandomVec2() self:T2(ToTargetVec2) -local ToTargetPointVec3=POINT_VEC3:New(ToTargetVec2.x,self.EngageAltitude,ToTargetVec2.y) +local ToTargetPointVec3=COORDINATE:New(ToTargetVec2.x,self.EngageAltitude,ToTargetVec2.y) local ToTargetRoutePoint=ToTargetPointVec3:WaypointAir( self.PatrolAltType, -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) @@ -117193,7 +121480,7 @@ FollowGroupSet:Flush(self) local FollowSet=FollowGroupSet:GetSet() local i=1 for FollowID,FollowGroup in pairs(FollowSet)do -local PointVec3=POINT_VEC3:New() +local PointVec3=COORDINATE:New() PointVec3:SetX(XStart+i*XSpace) PointVec3:SetY(YStart+i*YSpace) PointVec3:SetZ(ZStart+i*ZSpace) @@ -117232,7 +121519,7 @@ function AI_FORMATION:onafterFormationCenterWing(FollowGroupSet,From,Event,To,XS local FollowSet=FollowGroupSet:GetSet() local i=0 for FollowID,FollowGroup in pairs(FollowSet)do -local PointVec3=POINT_VEC3:New() +local PointVec3=COORDINATE:New() local Side=(i%2==0)and 1 or-1 local Row=i/2+1 PointVec3:SetX(XStart+Row*XSpace) @@ -117253,7 +121540,7 @@ function AI_FORMATION:onafterFormationBox(FollowGroupSet,From,Event,To,XStart,XS local FollowSet=FollowGroupSet:GetSet() local i=0 for FollowID,FollowGroup in pairs(FollowSet)do -local PointVec3=POINT_VEC3:New() +local PointVec3=COORDINATE:New() local ZIndex=i%ZLevels local XIndex=math.floor(i/ZLevels) local YIndex=math.floor(i/ZLevels) @@ -119445,8 +123732,8 @@ local landheight=CoordinateTo:GetLandHeight() CoordinateTo.y=landheight+50 local WaypointTo=CoordinateTo:WaypointAir( "RADIO", -POINT_VEC3.RoutePointType.TurningPoint, -POINT_VEC3.RoutePointAction.TurningPoint, +COORDINATE.WaypointType.TurningPoint, +COORDINATE.WaypointAction.TurningPoint, 50, true ) @@ -119472,7 +123759,7 @@ local Route={} local CoordinateTo=Coordinate local landheight=CoordinateTo:GetLandHeight() CoordinateTo.y=landheight+50 -local WaypointTo=CoordinateTo:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,50,true) +local WaypointTo=CoordinateTo:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,50,true) Route[#Route+1]=WaypointTo local Tasks={} Tasks[#Tasks+1]=Helicopter:TaskOrbitCircle(math.random(30,80),150,CoordinateTo:GetRandomCoordinateInRadius(800,500)) @@ -119500,11 +123787,11 @@ Coordinate.y=Height local _speed=Speed or Helicopter:GetSpeedMax()*0.5 local Route={} local CoordinateFrom=Helicopter:GetCoordinate() -local WaypointFrom=CoordinateFrom:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,_speed,true) +local WaypointFrom=CoordinateFrom:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,_speed,true) local CoordinateTo=Coordinate local landheight=CoordinateTo:GetLandHeight() CoordinateTo.y=landheight+50 -local WaypointTo=CoordinateTo:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,_speed,true) +local WaypointTo=CoordinateTo:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,_speed,true) Route[#Route+1]=WaypointFrom Route[#Route+1]=WaypointTo Helicopter:WayPointInitialize(Route) @@ -119528,13 +123815,13 @@ local Route={} Coordinate.y=Height local _speed=Speed or Helicopter:GetSpeedMax()*0.5 local CoordinateFrom=Helicopter:GetCoordinate() -local WaypointFrom=CoordinateFrom:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,_speed,true) +local WaypointFrom=CoordinateFrom:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,_speed,true) Route[#Route+1]=WaypointFrom Route[#Route+1]=WaypointFrom local CoordinateTo=Coordinate local landheight=CoordinateTo:GetLandHeight() CoordinateTo.y=landheight+50 -local WaypointTo=CoordinateTo:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,_speed,true) +local WaypointTo=CoordinateTo:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,_speed,true) Route[#Route+1]=WaypointTo Route[#Route+1]=WaypointTo Helicopter:WayPointInitialize(Route) @@ -119555,12 +123842,12 @@ local Route={} Height=Height or 50 Speed=Speed or Helicopter:GetSpeedMax()*0.5 local CoordinateFrom=Helicopter:GetCoordinate() -local WaypointFrom=CoordinateFrom:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,Speed,true) +local WaypointFrom=CoordinateFrom:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,Speed,true) Route[#Route+1]=WaypointFrom local CoordinateTo=Coordinate local landheight=CoordinateTo:GetLandHeight() CoordinateTo.y=landheight+Height -local WaypointTo=CoordinateTo:WaypointAir("RADIO",POINT_VEC3.RoutePointType.TurningPoint,POINT_VEC3.RoutePointAction.TurningPoint,Speed,true) +local WaypointTo=CoordinateTo:WaypointAir("RADIO",COORDINATE.WaypointType.TurningPoint,COORDINATE.WaypointAction.TurningPoint,Speed,true) Route[#Route+1]=WaypointTo Helicopter:WayPointInitialize(Route) local Tasks={} @@ -119713,7 +124000,7 @@ return end local Points={} local AirbasePointVec2=Airbase:GetPointVec2() -local ToWaypoint=AirbasePointVec2:WaypointAir(POINT_VEC3.RoutePointAltType.BARO,"Land","Landing",Speed or Airplane:GetSpeedMax()*0.8,true,Airbase) +local ToWaypoint=AirbasePointVec2:WaypointAir(COORDINATE.WaypointAltType.BARO,"Land","Landing",Speed or Airplane:GetSpeedMax()*0.8,true,Airbase) if self.Airbase then Template.route.points[2]=ToWaypoint Airplane:RespawnAtCurrentAirbase(Template,Takeoff,Uncontrolled) @@ -120585,7 +124872,7 @@ self.DisplayCount=self.DisplayCount+1 end return true end -function ACT_ACCOUNT:onafterEvent(ProcessUnit,From,Event,To,Event) +function ACT_ACCOUNT:onafterEvent(ProcessUnit,From,Event,To) self:__NoMore(1) end end @@ -120978,12 +125265,18 @@ end return true end function CIRCLE:GetRandomVec2() +math.random() +math.random() +math.random() local angle=math.random()*2*math.pi local rx=math.random(0,self.Radius)*math.cos(angle)+self.CenterVec2.x local ry=math.random(0,self.Radius)*math.sin(angle)+self.CenterVec2.y return{x=rx,y=ry} end function CIRCLE:GetRandomVec2OnBorder() +math.random() +math.random() +math.random() local angle=math.random()*2*math.pi local rx=self.Radius*math.cos(angle)+self.CenterVec2.x local ry=self.Radius*math.sin(angle)+self.CenterVec2.y @@ -121666,6 +125959,9 @@ local has_pos=(d1>0)or(d2>0)or(d3>0) return not(has_neg and has_pos) end function TRIANGLE:GetRandomVec2(points) +math.random() +math.random() +math.random() points=points or self.Points local pt={math.random(),math.random()} table.sort(pt) @@ -122211,7 +126507,6 @@ local sender=self:_GetRadioSender() local filename=string.format("%s%s",transmission.path,transmission.filename) if sender then self:T(self.lid..string.format("Broadcasting from aircraft %s",sender:GetName())) -if not self.senderinit then local commandFrequency={ id="SetFrequency", params={ @@ -122220,7 +126515,6 @@ modulation=self.modulation, }} sender:SetCommand(commandFrequency) self.senderinit=true -end local subtitle=nil local duration=nil if transmission.subtitle and transmission.subduration and transmission.subduration>0 then @@ -122639,6 +126933,135 @@ UsePowerShell=false, } MSRS.version="0.3.3" MSRS.Voices={ +Amazon={ +Generative={ +en_AU={ +Olivia="Olivia", +}, +en_GB={ +Amy="Amy", +}, +en_US={ +Danielle="Danielle", +Joanna="Joanna", +Ruth="Ruth", +Stephen="Stephen", +}, +fr_FR={ +["Léa"]="Léa", +["Rémi"]="Rémi", +}, +de_DE={ +Vicki="Vicki", +Daniel="Daniel", +}, +it_IT={ +Bianca="Bianca", +Adriano="Adriano", +}, +es_ES={ +Lucia="Lucia", +Sergio="Sergio", +}, +}, +LongForm={ +en_US={ +Danielle="Danielle", +Gregory="Gregory", +Ivy="Ivy", +Ruth="Ruth", +Patrick="Patrick", +}, +es_ES={ +Alba="Alba", +["Raúl"]="Raúl", +}, +}, +Neural={ +en_AU={ +Olivia="Olivia", +}, +en_GB={ +Amy="Amy", +Emma="Emma", +Brian="Brian", +Arthur="Arthur", +}, +en_US={ +Danielle="Danielle", +Gregory="Gregory", +Ivy="Ivy", +Joanna="Joanna", +Kendra="Kendra", +Kimberly="Kimberly", +Salli="Salli", +Joey="Joey", +Kevin="Kevin", +Ruth="Ruth", +Stephen="Stephen", +}, +fr_FR={ +["Léa"]="Léa", +["Rémi"]="Rémi", +}, +de_DE={ +Vicki="Vicki", +Daniel="Daniel", +}, +it_IT={ +Bianca="Bianca", +Adriano="Adriano", +}, +es_ES={ +Lucia="Lucia", +Sergio="Sergio", +}, +}, +Standard={ +en_AU={ +Nicole="Nicole", +Russel="Russel", +}, +en_GB={ +Amy="Amy", +Emma="Emma", +Brian="Brian", +}, +en_IN={ +Aditi="Aditi", +Raveena="Raveena", +}, +en_US={ +Ivy="Ivy", +Joanna="Joanna", +Kendra="Kendra", +Kimberly="Kimberly", +Salli="Salli", +Joey="Joey", +Kevin="Kevin", +}, +fr_FR={ +Celine="Celine", +["Léa"]="Léa", +Mathieu="Mathieu", +}, +de_DE={ +Marlene="Marlene", +Vicki="Vicki", +Hans="Hans", +}, +it_IT={ +Carla="Carla", +Bianca="Bianca", +Giorgio="Giorgio", +}, +es_ES={ +Conchita="Conchita", +Lucia="Lucia", +Enrique="Enrique", +}, +}, +}, Microsoft={ ["Hedda"]="Microsoft Hedda Desktop", ["Hazel"]="Microsoft Hazel Desktop", @@ -122689,11 +127112,15 @@ Standard={ ["en_IN_Standard_B"]='en-IN-Standard-B', ["en_IN_Standard_C"]='en-IN-Standard-C', ["en_IN_Standard_D"]='en-IN-Standard-D', +["en_IN_Standard_E"]='en-IN-Standard-E', +["en_IN_Standard_F"]='en-IN-Standard-F', ["en_GB_Standard_A"]='en-GB-Standard-A', ["en_GB_Standard_B"]='en-GB-Standard-B', ["en_GB_Standard_C"]='en-GB-Standard-C', ["en_GB_Standard_D"]='en-GB-Standard-D', ["en_GB_Standard_F"]='en-GB-Standard-F', +["en_GB_Standard_N"]='en-GB-Standard-N', +["en_GB_Standard_O"]='en-GB-Standard-O', ["en_US_Standard_A"]='en-US-Standard-A', ["en_US_Standard_B"]='en-US-Standard-B', ["en_US_Standard_C"]='en-US-Standard-C', @@ -122704,25 +127131,33 @@ Standard={ ["en_US_Standard_H"]='en-US-Standard-H', ["en_US_Standard_I"]='en-US-Standard-I', ["en_US_Standard_J"]='en-US-Standard-J', -["fr_FR_Standard_A"]="fr-FR-Standard-A", -["fr_FR_Standard_B"]="fr-FR-Standard-B", -["fr_FR_Standard_C"]="fr-FR-Standard-C", -["fr_FR_Standard_D"]="fr-FR-Standard-D", -["fr_FR_Standard_E"]="fr-FR-Standard-E", -["de_DE_Standard_A"]="de-DE-Standard-A", -["de_DE_Standard_B"]="de-DE-Standard-B", -["de_DE_Standard_C"]="de-DE-Standard-C", -["de_DE_Standard_D"]="de-DE-Standard-D", -["de_DE_Standard_E"]="de-DE-Standard-E", -["de_DE_Standard_F"]="de-DE-Standard-F", -["es_ES_Standard_A"]="es-ES-Standard-A", -["es_ES_Standard_B"]="es-ES-Standard-B", -["es_ES_Standard_C"]="es-ES-Standard-C", -["es_ES_Standard_D"]="es-ES-Standard-D", -["it_IT_Standard_A"]="it-IT-Standard-A", -["it_IT_Standard_B"]="it-IT-Standard-B", -["it_IT_Standard_C"]="it-IT-Standard-C", -["it_IT_Standard_D"]="it-IT-Standard-D", +["fr_FR_Standard_A"]="fr-FR-Standard-F", +["fr_FR_Standard_B"]="fr-FR-Standard-G", +["fr_FR_Standard_C"]="fr-FR-Standard-F", +["fr_FR_Standard_D"]="fr-FR-Standard-G", +["fr_FR_Standard_E"]="fr-FR-Standard-F", +["fr_FR_Standard_G"]="fr-FR-Standard-G", +["fr_FR_Standard_F"]="fr-FR-Standard-F", +["de_DE_Standard_A"]='de-DE-Standard-A', +["de_DE_Standard_B"]='de-DE-Standard-B', +["de_DE_Standard_C"]='de-DE-Standard-C', +["de_DE_Standard_D"]='de-DE-Standard-D', +["de_DE_Standard_E"]='de-DE-Standard-E', +["de_DE_Standard_F"]='de-DE-Standard-F', +["de_DE_Standard_G"]='de-DE-Standard-G', +["de_DE_Standard_H"]='de-DE-Standard-H', +["es_ES_Standard_A"]="es-ES-Standard-E", +["es_ES_Standard_B"]="es-ES-Standard-F", +["es_ES_Standard_C"]="es-ES-Standard-E", +["es_ES_Standard_D"]="es-ES-Standard-F", +["es_ES_Standard_E"]="es-ES-Standard-E", +["es_ES_Standard_F"]="es-ES-Standard-F", +["it_IT_Standard_A"]="it-IT-Standard-E", +["it_IT_Standard_B"]="it-IT-Standard-E", +["it_IT_Standard_C"]="it-IT-Standard-F", +["it_IT_Standard_D"]="it-IT-Standard-F", +["it_IT_Standard_E"]="it-IT-Standard-E", +["it_IT_Standard_F"]="it-IT-Standard-F", }, Wavenet={ ["en_AU_Wavenet_A"]='en-AU-Wavenet-A', @@ -122733,11 +127168,15 @@ Wavenet={ ["en_IN_Wavenet_B"]='en-IN-Wavenet-B', ["en_IN_Wavenet_C"]='en-IN-Wavenet-C', ["en_IN_Wavenet_D"]='en-IN-Wavenet-D', +["en_IN_Wavenet_E"]='en-IN-Wavenet-E', +["en_IN_Wavenet_F"]='en-IN-Wavenet-F', ["en_GB_Wavenet_A"]='en-GB-Wavenet-A', ["en_GB_Wavenet_B"]='en-GB-Wavenet-B', ["en_GB_Wavenet_C"]='en-GB-Wavenet-C', ["en_GB_Wavenet_D"]='en-GB-Wavenet-D', ["en_GB_Wavenet_F"]='en-GB-Wavenet-F', +["en_GB_Wavenet_O"]='en-GB-Wavenet-O', +["en_GB_Wavenet_N"]='en-GB-Wavenet-N', ["en_US_Wavenet_A"]='en-US-Wavenet-A', ["en_US_Wavenet_B"]='en-US-Wavenet-B', ["en_US_Wavenet_C"]='en-US-Wavenet-C', @@ -122748,25 +127187,144 @@ Wavenet={ ["en_US_Wavenet_H"]='en-US-Wavenet-H', ["en_US_Wavenet_I"]='en-US-Wavenet-I', ["en_US_Wavenet_J"]='en-US-Wavenet-J', -["fr_FR_Wavenet_A"]="fr-FR-Wavenet-A", -["fr_FR_Wavenet_B"]="fr-FR-Wavenet-B", -["fr_FR_Wavenet_C"]="fr-FR-Wavenet-C", -["fr_FR_Wavenet_D"]="fr-FR-Wavenet-D", -["fr_FR_Wavenet_E"]="fr-FR-Wavenet-E", -["de_DE_Wavenet_A"]="de-DE-Wavenet-A", -["de_DE_Wavenet_B"]="de-DE-Wavenet-B", -["de_DE_Wavenet_C"]="de-DE-Wavenet-C", -["de_DE_Wavenet_D"]="de-DE-Wavenet-D", -["de_DE_Wavenet_E"]="de-DE-Wavenet-E", -["de_DE_Wavenet_F"]="de-DE-Wavenet-F", -["es_ES_Wavenet_B"]="es-ES-Wavenet-B", -["es_ES_Wavenet_C"]="es-ES-Wavenet-C", -["es_ES_Wavenet_D"]="es-ES-Wavenet-D", -["it_IT_Wavenet_A"]="it-IT-Wavenet-A", -["it_IT_Wavenet_B"]="it-IT-Wavenet-B", -["it_IT_Wavenet_C"]="it-IT-Wavenet-C", -["it_IT_Wavenet_D"]="it-IT-Wavenet-D", +["fr_FR_Wavenet_A"]="fr-FR-Wavenet-F", +["fr_FR_Wavenet_B"]="fr-FR-Wavenet-G", +["fr_FR_Wavenet_C"]="fr-FR-Wavenet-F", +["fr_FR_Wavenet_D"]="fr-FR-Wavenet-G", +["fr_FR_Wavenet_E"]="fr-FR-Wavenet-F", +["fr_FR_Wavenet_G"]="fr-FR-Wavenet-G", +["fr_FR_Wavenet_F"]="fr-FR-Wavenet-F", +["de_DE_Wavenet_A"]='de-DE-Wavenet-A', +["de_DE_Wavenet_B"]='de-DE-Wavenet-B', +["de_DE_Wavenet_C"]='de-DE-Wavenet-C', +["de_DE_Wavenet_D"]='de-DE-Wavenet-D', +["de_DE_Wavenet_E"]='de-DE-Wavenet-E', +["de_DE_Wavenet_F"]='de-DE-Wavenet-F', +["de_DE_Wavenet_G"]='de-DE-Wavenet-G', +["de_DE_Wavenet_H"]='de-DE-Wavenet-H', +["es_ES_Wavenet_B"]="es-ES-Wavenet-E", +["es_ES_Wavenet_C"]="es-ES-Wavenet-F", +["es_ES_Wavenet_D"]="es-ES-Wavenet-E", +["es_ES_Wavenet_E"]="es-ES-Wavenet-E", +["es_ES_Wavenet_F"]="es-ES-Wavenet-F", +["it_IT_Wavenet_A"]="it-IT-Wavenet-E", +["it_IT_Wavenet_B"]="it-IT-Wavenet-E", +["it_IT_Wavenet_C"]="it-IT-Wavenet-F", +["it_IT_Wavenet_D"]="it-IT-Wavenet-F", +["it_IT_Wavenet_E"]="it-IT-Wavenet-E", +["it_IT_Wavenet_F"]="it-IT-Wavenet-F", }, +Chirp3HD={ +["en_GB_Chirp3_HD_Aoede"]='en-GB-Chirp3-HD-Aoede', +["en_GB_Chirp3_HD_Charon"]='en-GB-Chirp3-HD-Charon', +["en_GB_Chirp3_HD_Fenrir"]='en-GB-Chirp3-HD-Fenrir', +["en_GB_Chirp3_HD_Kore"]='en-GB-Chirp3-HD-Kore', +["en_GB_Chirp3_HD_Leda"]='en-GB-Chirp3-HD-Leda', +["en_GB_Chirp3_HD_Orus"]='en-GB-Chirp3-HD-Orus', +["en_GB_Chirp3_HD_Puck"]='en-GB-Chirp3-HD-Puck', +["en_GB_Chirp3_HD_Zephyr"]='en-GB-Chirp3-HD-Zephyr', +["en_US_Chirp3_HD_Charon"]='en-US-Chirp3-HD-Charon', +["en_US_Chirp3_HD_Fenrir"]='en-US-Chirp3-HD-Fenrir', +["en_US_Chirp3_HD_Kore"]='en-US-Chirp3-HD-Kore', +["en_US_Chirp3_HD_Leda"]='en-US-Chirp3-HD-Leda', +["en_US_Chirp3_HD_Orus"]='en-US-Chirp3-HD-Orus', +["en_US_Chirp3_HD_Puck"]='en-US-Chirp3-HD-Puck', +["de_DE_Chirp3_HD_Aoede"]='de-DE-Chirp3-HD-Aoede', +["de_DE_Chirp3_HD_Charon"]='de-DE-Chirp3-HD-Charon', +["de_DE_Chirp3_HD_Fenrir"]='de-DE-Chirp3-HD-Fenrir', +["de_DE_Chirp3_HD_Kore"]='de-DE-Chirp3-HD-Kore', +["de_DE_Chirp3_HD_Leda"]='de-DE-Chirp3-HD-Leda', +["de_DE_Chirp3_HD_Orus"]='de-DE-Chirp3-HD-Orus', +["de_DE_Chirp3_HD_Puck"]='de-DE-Chirp3-HD-Puck', +["de_DE_Chirp3_HD_Zephyr"]='de-DE-Chirp3-HD-Zephyr', +["en_AU_Chirp3_HD_Aoede"]='en-AU-Chirp3-HD-Aoede', +["en_AU_Chirp3_HD_Charon"]='en-AU-Chirp3-HD-Charon', +["en_AU_Chirp3_HD_Fenrir"]='en-AU-Chirp3-HD-Fenrir', +["en_AU_Chirp3_HD_Kore"]='en-AU-Chirp3-HD-Kore', +["en_AU_Chirp3_HD_Leda"]='en-AU-Chirp3-HD-Leda', +["en_AU_Chirp3_HD_Orus"]='en-AU-Chirp3-HD-Orus', +["en_AU_Chirp3_HD_Puck"]='en-AU-Chirp3-HD-Puck', +["en_AU_Chirp3_HD_Zephyr"]='en-AU-Chirp3-HD-Zephyr', +["en_IN_Chirp3_HD_Aoede"]='en-IN-Chirp3-HD-Aoede', +["en_IN_Chirp3_HD_Charon"]='en-IN-Chirp3-HD-Charon', +["en_IN_Chirp3_HD_Fenrir"]='en-IN-Chirp3-HD-Fenrir', +["en_IN_Chirp3_HD_Kore"]='en-IN-Chirp3-HD-Kore', +["en_IN_Chirp3_HD_Leda"]='en-IN-Chirp3-HD-Leda', +["en_IN_Chirp3_HD_Orus"]='en-IN-Chirp3-HD-Orus', +}, +ChirpHD={ +["en_US_Chirp_HD_D"]='en-US-Chirp-HD-D', +["en_US_Chirp_HD_F"]='en-US-Chirp-HD-F', +["en_US_Chirp_HD_O"]='en-US-Chirp-HD-O', +["de_DE_Chirp_HD_D"]='de-DE-Chirp-HD-D', +["de_DE_Chirp_HD_F"]='de-DE-Chirp-HD-F', +["de_DE_Chirp_HD_O"]='de-DE-Chirp-HD-O', +["en_AU_Chirp_HD_D"]='en-AU-Chirp-HD-D', +["en_AU_Chirp_HD_F"]='en-AU-Chirp-HD-F', +["en_AU_Chirp_HD_O"]='en-AU-Chirp-HD-O', +["en_IN_Chirp_HD_D"]='en-IN-Chirp-HD-D', +["en_IN_Chirp_HD_F"]='en-IN-Chirp-HD-F', +["en_IN_Chirp_HD_O"]='en-IN-Chirp-HD-O', +}, +}, +Neural2={ +["en_GB_Neural2_A"]='en-GB-Neural2-A', +["en_GB_Neural2_B"]='en-GB-Neural2-B', +["en_GB_Neural2_C"]='en-GB-Neural2-C', +["en_GB_Neural2_D"]='en-GB-Neural2-D', +["en_GB_Neural2_F"]='en-GB-Neural2-F', +["en_GB_Neural2_N"]='en-GB-Neural2-N', +["en_GB_Neural2_O"]='en-GB-Neural2-O', +["en_US_Neural2_A"]='en-US-Neural2-A', +["en_US_Neural2_C"]='en-US-Neural2-C', +["en_US_Neural2_D"]='en-US-Neural2-D', +["en_US_Neural2_E"]='en-US-Neural2-E', +["en_US_Neural2_F"]='en-US-Neural2-F', +["en_US_Neural2_G"]='en-US-Neural2-G', +["en_US_Neural2_H"]='en-US-Neural2-H', +["en_US_Neural2_I"]='en-US-Neural2-I', +["en_US_Neural2_J"]='en-US-Neural2-J', +["de_DE_Neural2_G"]='de-DE-Neural2-G', +["de_DE_Neural2_H"]='de-DE-Neural2-H', +["en_AU_Neural2_A"]='en-AU-Neural2-A', +["en_AU_Neural2_B"]='en-AU-Neural2-B', +["en_AU_Neural2_C"]='en-AU-Neural2-C', +["en_AU_Neural2_D"]='en-AU-Neural2-D', +["en_IN_Neural2_A"]='en-IN-Neural2-A', +["en_IN_Neural2_B"]='en-IN-Neural2-B', +["en_IN_Neural2_C"]='en-IN-Neural2-C', +["en_IN_Neural2_D"]='en-IN-Neural2-D', +}, +News={ +["en_GB_News_G"]='en-GB-News-G', +["en_GB_News_H"]='en-GB-News-H', +["en_GB_News_I"]='en-GB-News-I', +["en_GB_News_J"]='en-GB-News-J', +["en_GB_News_K"]='en-GB-News-K', +["en_GB_News_L"]='en-GB-News-L', +["en_GB_News_M"]='en-GB-News-M', +["en_US_News_K"]='en-US-News-K', +["en_US_News_L"]='en-US-News-L', +["en_US_News_N"]='en-US-News-N', +["en_AU_News_E"]='en-AU-News-E', +["en_AU_News_F"]='en-AU-News-F', +["en_AU_News_G"]='en-AU-News-G', +}, +Casual={ +["en_US_Casual_K"]='en-US-Casual-K', +}, +Polyglot={ +["en_US_Polyglot_1"]='en-US-Polyglot-1', +["de_DE_Polyglot_1"]='de-DE-Polyglot-1', +["en_AU_Polyglot_1"]='en-AU-Polyglot-1', +}, +Studio={ +["en_GB_Studio_B"]='en-GB-Studio-B', +["en_GB_Studio_C"]='en-GB-Studio-C', +["en_US_Studio_O"]='en-US-Studio-O', +["en_US_Studio_Q"]='en-US-Studio-Q', +["de_DE_Studio_B"]='de-DE-Studio-B', +["de_DE_Studio_C"]='de-DE-Studio-C', }, } MSRS.Backend={ @@ -122861,7 +127419,7 @@ return self.backend end function MSRS:SetPath(Path) self:F({Path=Path}) -self.path=Path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +self.path=Path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" local n=1;local nmax=1000 while(self.path:sub(-1)=="/"or self.path:sub(-1)==[[\]])and n<=nmax do self.path=self.path:sub(1,#self.path-1) @@ -123119,6 +127677,7 @@ self:ScheduleOnce(Delay,MSRS.PlaySoundFile,self,Soundfile,0) else local command=self:_GetCommand() command=command..' --file="'..tostring(soundfile)..'"' +command=string.gsub(command,"--ssml","-h") self:_ExecCommand(command) end return self @@ -123242,7 +127801,7 @@ command=command..string.format(' --ssml -G "%s"',pops.credentials) pwsh=pwsh..string.format(' --ssml -G "%s"',pops.credentials) elseif self.provider==MSRS.Provider.WINDOWS then else -self:E("ERROR: SRS only supports WINWOWS and GOOGLE as TTS providers! Use DCS-gRPC backend for other providers such as ") +self:E("ERROR: SRS only supports WINDOWS and GOOGLE as TTS providers! Use DCS-gRPC backend for other providers such as AWS and Azure.") end if not UTILS.FileExists(fullPath)then self:E("ERROR: MSRS SRS executable does not exist! FullPath="..fullPath) @@ -123263,7 +127822,7 @@ local filename=os.getenv('TMP').."\\MSRS-"..MSRS.uuid()..".bat" if self.UsePowerShell==true then filename=os.getenv('TMP').."\\MSRS-"..MSRS.uuid()..".ps1" batContent=command.."\'" -self:I({batContent=batContent}) +self:T({batContent=batContent}) end local script=io.open(filename,"w+") script:write(batContent) @@ -123335,9 +127894,9 @@ ssml=string.format("%s",gender,language,Text) end end for _,freq in pairs(Frequencies)do -self:F("Calling GRPC.tts with the following parameter:") -self:F({ssml=ssml,freq=freq,options=options}) -self:F(options.provider[provider]) +self:T("Calling GRPC.tts with the following parameter:") +self:T({ssml=ssml,freq=freq,options=options}) +self:T(options.provider[provider]) GRPC.tts(ssml,freq*1e6,options) end end @@ -123355,7 +127914,7 @@ env.info("FF reading config file") assert(loadfile(path..file))() if MSRS_Config then local Self=self or MSRS -Self.path=MSRS_Config.Path or"C:\\Program Files\\DCS-SimpleRadio-Standalone" +Self.path=MSRS_Config.Path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio" Self.port=MSRS_Config.Port or 5002 Self.backend=MSRS_Config.Backend or MSRS.Backend.SRSEXE Self.frequencies=MSRS_Config.Frequency or{127,243} @@ -123450,6 +128009,7 @@ end return self end function MSRSQUEUE:NewTransmission(text,duration,msrs,tstart,interval,subgroups,subtitle,subduration,frequency,modulation,gender,culture,voice,volume,label,coordinate) +self:T({Text=text,Dur=duration,start=tstart,int=interval,sub=subgroups,subt=subtitle,sudb=subduration,F=frequency,M=modulation,G=gender,C=culture,V=voice,Vol=volume,L=label}) if self.TransmitOnlyWithPlayers then if self.PlayerSet and self.PlayerSet:CountAlive()==0 then return self

8}>TBJ6ZJ4j`&DRU_^~3QT8n!;- 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