From 5ba1fda722be2eea7cdd0ca64c88ebbcbd4c2af1 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Mon, 21 Mar 2016 19:01:58 +0100 Subject: [PATCH 1/4] implemented content assist; started implementation of the keyowrd collector --- .../raven/sqdev/editors/BasicCodeEditor.class | Bin 5500 -> 5643 bytes .../editors/BasicContentAssistProcessor.class | Bin 0 -> 3722 bytes .../editors/BasicKeywordProvider$1.class | Bin 0 -> 1050 bytes .../editors/BasicKeywordProvider$2.class | Bin 0 -> 1056 bytes .../sqdev/editors/BasicKeywordProvider.class | Bin 702 -> 3097 bytes .../BasicSourceViewerConfiguration.class | Bin 3768 -> 5928 bytes .../editors/CharacterPairHandler$1.class | Bin 618 -> 612 bytes .../sqdev/editors/CharacterPairHandler.class | Bin 5309 -> 5289 bytes .../sqdev/editors/IKeywordProvider.class | Bin 226 -> 279 bytes .../raven/sqdev/editors/KeywordScanner.class | Bin 5547 -> 5394 bytes .../raven/sqdev/editors/BasicCodeEditor.java | 15 +- .../editors/BasicContentAssistProcessor.java | 92 ++++++ .../sqdev/editors/BasicKeywordProvider.java | 131 ++++++++- .../BasicSourceViewerConfiguration.java | 58 +++- .../sqdev/editors/CharacterPairHandler.java | 7 +- .../raven/sqdev/editors/IKeywordProvider.java | 8 + .../raven/sqdev/editors/KeywordScanner.java | 16 +- plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF | 1 + .../constants/SQDevPreferenceConstants.class | Bin 1439 -> 1530 bytes .../raven/sqdev/constants/TextConstants.class | Bin 0 -> 557 bytes .../exceptions/SQDevCollectionException.class | Bin 0 -> 991 bytes .../infoCollection/SQFCommandCollector.class | Bin 0 -> 3234 bytes .../infoCollection/base/ELocality$1.class | Bin 0 -> 602 bytes .../infoCollection/base/ELocality$2.class | Bin 0 -> 603 bytes .../infoCollection/base/ELocality$3.class | Bin 0 -> 606 bytes .../sqdev/infoCollection/base/ELocality.class | Bin 0 -> 1490 bytes .../sqdev/infoCollection/base/Keyword.class | Bin 0 -> 1238 bytes .../infoCollection/base/KeywordList.class | Bin 0 -> 326 bytes .../infoCollection/base/SQFCommand.class | Bin 0 -> 4056 bytes .../bin/raven/sqdev/misc/CharacterPair.class | Bin 0 -> 1254 bytes .../bin/raven/sqdev/syntax/Syntax.class | Bin 0 -> 3005 bytes .../raven/sqdev/syntax/SyntaxElement.class | Bin 0 -> 2164 bytes .../constants/SQDevPreferenceConstants.java | 6 + .../raven/sqdev/constants/TextConstants.java | 26 ++ .../exceptions/SQDevCollectionException.java | 30 ++ .../infoCollection/SQFCommandCollector.java | 138 +++++++++ .../sqdev/infoCollection/base/ELocality.java | 34 +++ .../sqdev/infoCollection/base/Keyword.java | 93 ++++++ .../infoCollection/base/KeywordList.java | 11 + .../sqdev/infoCollection/base/SQFCommand.java | 268 ++++++++++++++++++ .../src/raven/sqdev/misc/CharacterPair.java | 65 +++++ .../src/raven/sqdev/syntax/Syntax.java | 143 ++++++++++ .../src/raven/sqdev/syntax/SyntaxElement.java | 121 ++++++++ .../sqfeditor/SQFKeywordProvider.class | Bin 2649 -> 2436 bytes .../editors/sqfeditor/SQFKeywordProvider.java | 30 +- plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF | 3 +- .../bin/raven/sqdev/sqdevFile/SQDevFile.class | Bin 9559 -> 9557 bytes .../bin/raven/sqdev/util/ColorUtils.class | Bin 1835 -> 1833 bytes .../bin/raven/sqdev/util/EditorUtil.class | Bin 0 -> 1412 bytes .../sqdev/util/SQDevPreferenceUtil.class | Bin 5249 -> 5374 bytes .../bin/raven/sqdev/util/TextUtils.class | Bin 0 -> 3501 bytes .../src/raven/sqdev/sqdevFile/SQDevFile.java | 4 +- .../src/raven/sqdev/util/ColorUtils.java | 2 +- .../src/raven/sqdev/util/EditorUtil.java | 49 ++++ .../raven/sqdev/util/SQDevPreferenceUtil.java | 29 +- .../src/raven/sqdev/util/TextUtils.java | 201 +++++++++++++ .../sqdevProject/SQDevProjectWizardPage.class | Bin 8477 -> 8475 bytes .../sqdevProject/SQDevProjectWizardPage.java | 6 +- .../SQDevPreferenceInitializer.class | Bin 3000 -> 3049 bytes .../pages/SQDevEditorPreferencePage.class | Bin 2822 -> 3053 bytes .../SQDevPreferenceInitializer.java | 7 +- .../pages/SQDevEditorPreferencePage.java | 9 +- 62 files changed, 1549 insertions(+), 54 deletions(-) create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicContentAssistProcessor.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider$1.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider$2.class create mode 100644 plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicContentAssistProcessor.java create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/TextConstants.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/exceptions/SQDevCollectionException.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality$1.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality$2.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality$3.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/CharacterPair.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/syntax/Syntax.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/syntax/SyntaxElement.class create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevCollectionException.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/ELocality.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/CharacterPair.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/Syntax.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/SyntaxElement.java create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/util/EditorUtil.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/util/TextUtils.class create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/util/TextUtils.java diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCodeEditor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCodeEditor.class index a348546853d8a135313ae11476c98972a161a43d..b64ae4bf7413e414838472ec97e4ff2eee762f53 100644 GIT binary patch delta 696 zcmZXR%TH556oFcOzlR)Oo8> zp>}4u)h<0}f9-{H!EiLx9xgM8lQ0=4SHp;fTie5@LT$0mpg{{0CX;wItpBQ3G(MPE z$=3O(Q6^m$s-&ebH=86gCOLf4s4u=5S))p9CDu6;15@X-I$`r^^Xi7}ap88-sm8_* zRBbwhJ&W$)|67F$4G~=gL zJ#dUwwh1OgF{jzU88*sUPCJ!!u#E^+bc$bx_{G>mm-wA$pTu=sR6Win?TY&0tj@S9 z8rReoSFGq3S=^Q$?@&NDMf9+iyOeN`0Qc2|>sZc1!9K#|i6EXTUtZbeOITz$@`K(% zUM29Sj$uYMQo$JUZdRtEQR2hA`&*UVGt7GneZoryut+s{<*A}*z$D|mP#`f-+# oP(Sm^OK0Wtg*D$e#KHixLYV!ZFfD``oXn|)e7F8ZBrJUW1F0&hpa1{> delta 542 zcmZ9I%}Z2a6o;Sp>TnzHb>_~DqfDSQO^97>DxIXMF)^bu3~C{1MARappf5~nS5UMO zf;^N(Eh4B^eMp&UR>tH^-L&$bXxX|VqSFTiEndzCzvp+(dxl%S`(E&4>IINv!NxLV zBwd*qYs)$&Eemd1&N@p>=F*8;>2zF~aq6tbroYvrFV0iT3uAcg5~j+gWN1}9CG%D) zQpGH9T&j6%*rv=<8ICrG-?=!rHuLf_nl*FsIeI6Rr;_zVDX^GM8t9^tjb!PTdtP^V z3pQI7>XENr!SqUdtRu985If~`Y%tlUlXnrLU)eom*vm@xkHlZ)52)lIO&nqchgqdD z#}V=zWgW+K)NwXw-o>DfI>{!6*sOUEr{r6Fw>cwyiH^`Y^*Ar1iJ|%t7I9fuyh1Ib z)N_?(T%(!mv~fe0*YsE4RP8NXZmZ(1T&!u`-m8}}dfAx&gy|CQuQ17sVN9D93PMC9 z+}9sIz|($CEB6n?8rrqmr>_FzNg@pgU?h0^1)4T+4hEd!=rTj^DHf%Z z48wgmpkP14sTN}8c@@v$pdW}+oR}@GQ6@r_`z7Z?Dtd6(H_3oyyGDA3Y8k0&kjbby zqT+cRC5&tJSpNLHzPI}O~!f@oM1$I1YWdv+qO2* z$08a=Kjuri(<)xTfI!%BHQRO0n(nAnrWz!6PQe)_LY+h{Pxk79BC*b@co9RCF>B;9 z5{DHp8O9*a%L;fwU_}kwWHK2`NpUZ#cp0ydNK2{l74;L_PHn5w_bA1#}m zNw}6;=_b%TZCXZ_4^y5mY?cf3f^DI6(CI z1FoiD?$`2O*H>^|ATr&(+1|_C@P9P#N({=hl~uPoX}Sx{6x}t)y@=>xIns33u<4*6 zt6fittdd`SvW0}{wQbAp=e3UkE3n!FuH=x?vSwQ2tx=$tW%5arzAhVT81}p55mVm2 z+DkpQ#$9xq3{74jSf2Pa@(IdI9B;P@$IS@yJ&&^^2=E7lJ13!bZvFuazvC=`#e6Ry zEzm~Fr%16HOE_ERpT<(Oa7H?ht01>l?s+@|0nFz*@L=;@EEj0|5l@}iTEzNWSlRhK z78VgJB3{HZcR`K1g151$V!4~kjgdyu^fnZcT%@IUbOrCBe`pdXxe*-dYQDd_sbRNr z8(op+R%J(5C=%jfNl?V8TUZ-uyobS|NT`iVskD5_1F1=zE8?ZIHx<#Uv^IVH=(k8? z5!zR1i4cyXpOG$NrH$KbfxkPXGV_ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider$1.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider$1.class new file mode 100644 index 0000000000000000000000000000000000000000..3a24cc4d3387ebc3b7d130b9e4fc7ab6af0abb2c GIT binary patch literal 1050 zcma)5*>2N76g@WyHE|3HffmZvg#gYXOeLNODoX@XX-bh2^1=gh>`^+EeZoSrCr#xp7jMs7 zy~$Y*WGs_S!b5ldwD!I~_PxlD2VN)9G9EOmJwmRfLXiid;NTP%Y-Dl9frYb#MfdoW zVq3=I#c0?Uy6g8NK`6IX;72`Q%Tzx!=F-s!jk!ClZ18A>iXW@^V5mlhw^BaZ0U^t4 zB<#BFnfu*hBnDa-v!i%VN;j(~#C8%t8JVVyOSo)dnc&Wggo7)%$}2QVC)}1>?d5SD zs}@!WD>Iv$-sfNq>xBI7_M1-karae+u>Suh3D$5r5}|%V_`mZL?2a1gKs=KvUdzX^ z_D;$VLh)%FM9MHfc0{tLLI+jU7#AawLz*+FOYZBV$fR^~w&GamR^%Ha3|5&}S^k5l zR7%OkQifj(r`euosl|HgFVyN^VAmSo;C!3}75QsVf{7FFqs02sL@(eR%B*n`&f@~x za#&>FpMo@vs(pt26&F9@+6NBJ;BUcAzW>pTf;Ui^bbND?a|^fm%rP%q)LF9GM||@0 E8{$J0=Kufz literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider$2.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider$2.class new file mode 100644 index 0000000000000000000000000000000000000000..6c7a57cf870d3f92d144d4e6ce76b450f8ae2f53 GIT binary patch literal 1056 zcma)5*>2N76g@WyHE|3{11*%T3jv%(7*)IlfuI7ZG;NU_^3n(7*rRkR$5UpUp#Bvg z7KsNwfR94lBt=M&lvuLoZs*Qjj(`08_8q`OG%REYH608^;+eOR7IPY;q*_Jwz(y2g8{x`c)FP@2jEPTra~ zdy`R*WFphYgeUI&u+~v947@l{~4k5RtB9RB7;NTn@i?lx|kfi1pJT9hjz#tGH%ih2YM+2?y74gGXqTPPr_%+R5V< z)-0?NR%aGBxzE8mHVFCsoi~2_Y5TQL*!X{u1gk%3iBLZy{O|q=wyy>{6ffjxUn|pC zdw;|aLh*SL#>y~1c13!qA_rB}2#YY$u7(TXA5FFj!-D zW%)m%QfWjnmNNWWIM4PxOIxgu{DoTmGwfR9E1VDGpdx?maWFCP7$w%1$9e&aD6_^O zT*76x<*>xQ-wA0FRr>_{3$A>`&G#Id!JmXF-#?s@@HQ&ritmgucX5x;9J9kkoh6%n I#3w($0FLq(`v3p{ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider.class index 4972258083400cb2a3e818e6f748029d13faefda..368372103bfee1ea02ee8b4d0f23adedb1a83b98 100644 GIT binary patch literal 3097 zcma)8ZF3XX6@IR?_S#~>Mz#nv24wS6Nj9iZ2O10nBA}6xF<{rOAup_@i?v4VI=d?q z)8?g3+Cb8z4ed-O`H-2+bjH(}WQNXwO~ZubTW9(`ANvP7{RNpM&U06*AX6np9`D_I z_nb%PJm)!Q^{;O}xd&hn@92mKq+D}e+F9@UlAO=VlI1(DmwnRotl~+zaK&*;r(I{> zDoIy|CeS%+&YRhaY0qRwr)Oo+*U>7ly%|RS0e^wEOEpAKpzD0$KGK-)TK3G4z`DA@ znB)4gB+z}nsonaz-BDN8O~pBZcFR*+f(f)9v~0^iED%klCj_*dQ<5=65jU_79qk~v zfi*DH-39||VF+{-EL)zcUY?fjxH(;s0`Y=VG%FLPYpH#BsQG1!Ib;gW(r!i_Q(H45 z{g4p4CQ|7piK$Sw7|_wCBe{y}8bbnW$9%JRX~dihBB3FHy++^-sV2DT2^~8b@56?> zeNP)w{Qi*3WS#98b|9nZ>lb(;_3+vMZ>iH0G3-KC$8LdM$DPT_V#S*CWVYzIGV4}t z-?}Wbv(B`a9d@P-`~)48k5??qQdN~j_gH2=5!hDvzwTsTQ}#L@qwoURReh_HJ?gsV zLc#L<7@HxkETj~F6%35vlp?~q%23%8d8M|~2HFu*24@Y7VVp7gPQVKX!zwA&^KX<_c*ed} z^vY6$zH3CRrdf4CvFf_g_H$*^6%aYPh9{w~>bNF@L0GiTvr$*K z7>uxx%ELp48QXeNs1)Cr#|HLkW5%I_4l3{A+i7nMCNfI#(!fO}Wo_26>=??J)xp%Z z+)p`g`_gr*a}4A73q?8STaInul5*;p`0YHSrjfG)o44gWn3Y zcoiubww4-BPlSH|xzL8+3+$gXEj93y7ace0mt|5(QSF_J-_5OL+4PdWc}dzy-*J)^ z$DZj`Y+O@pT>qZ-;yXhyy<~$No7INGX%AXeB}fa613EIxSf7dB zMwhxI{?4Na9^o}kAfTVu0Rrx#>uzl1iBWUICj5vyfk)93LJo6PkX@Nu*!)k#qMu^x zB6PL8$>V4M+ZvecZGh?up?YbQL&pZ#%?HIb5qY5}#a}K|SFab{rx&?c%m+5NwX`L7G5qCPhKFesNBOvB3 z2B(&>uh3~8T10n$xLu-*dbA5S4)t_i{p-qqgNG+nu2TnE@9k@e?$Z{L+0>fQ_MY0c zgrS~0cwz~;_t4ef(`lBL@bk|x$Oro;U(-ZFOSF8r^2L3)Pcr>WIQc31ZeujcZ|x=U zXitAn&8_xq>k`gye}}>5z1nebv;X3#>nnj zWHEuqFo~1+C8lr=7VkZty@U(6j%mD&BL2qp7AMd@FoS!XK8n)AXjK%2l*aKfenBrb z1vN2AtO#i>gm)*gCBTm2O{8%iPxI+B^j12mc|OZKRs20@{~8;042sS*D=dhvL#Q1D zmp))yWQ9MzqV-cGHq-Grh8oC3oMpmFvJ2#@>piq7%5L(Kcpn3IVb(-bERd=J{+AZ9 zUI}RCE-F(4%dkHS?C;?DC0see(skokcktpO+En>wYUf*JH(veA2Ux3|;=fzQ>&h$f z{>m4DGc)VMPG(ug3Fbe_wI=!rG6N1|odd*x&5F#Cl?7V=n)WXuL&kUG73{~WIEZV= z;SD1Eff#S$G^;R1uTZpSf%~uV7p1wiOBShOr zthab}ngpq{Xux+b+Kd%;ZzN!Jmm<5o_Dg7Apso`?=qapF>A_E--Vx1|w zP)I9Oqn#K>Q`KIf2@)7KBW1P}G?*0T527xsV70?D+yfg6S!O35YUJ3vuLI;!AQC9T zV>aXwt08;g5v4z9c|~OhWze4Em3-6k-n6_#%jc1Tl^rSs6sn<~2oGq(;?fB_CzSqe b>3Hh%pCFd2ysi>CW83^_Ons3pEqp%#7t$P( diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicSourceViewerConfiguration.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicSourceViewerConfiguration.class index 4fa1bb67d37ee2ad6cf3b18160a91ec07dc69c69..9f94af4af76cc0f39185d7185fb2ae564f3cdcdd 100644 GIT binary patch literal 5928 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 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler$1.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler$1.class index 8d65da161e53f63a712b691ea8205cb6a4be3c02..c09a138d9f2d5dc031fca75cdefe9f9370875b61 100644 GIT binary patch delta 54 zcmaFG@`PnVoUpQnPf=o7YMy>^VM=P5er{%Q^2CxSjOLRg8I@Q-yva?B3t3edSQykM IYcM$h02>bxp#T5? delta 39 vcmaFD@``0b9J88+&qM*miS^eQttN*tDovCTo!rGZnN^vAg+X<)5|a}E|5XbP diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler.class index 6cadaf3e0b2b2984b2e2ff893e752306ed27efeb..21b030f11a26a15b0fc4f812c6dcb43861e7a6b3 100644 GIT binary patch delta 594 zcmZXQU2KbC6vuzh^p$>W)3C4$#)v!P#6sK7;~Zgs_t zg_IJ}L#}kF7AH}8)!}Cu0UD@cIg5$0gq8VdX-J)1BL;CitRu*J8Mm;AjWn{ERcxV& zt!yAcC#~#eJ1MC>?BEb>9FcmQU7V(av!Xap7Z>T~5=pMGmusRP;vl!^WB0oZu6u^my4+*%^s5h$&`s$>}fUIp1aMVi({lHC(5jo05K556pR5 zdsim+CHg}w9*N=!VOdbkGr4s{;=iDomvY1??Y!1I-RIOh{lmT1_<%t{*PHtsWAbO8 z@iMM&n;CNgA72UajS42jXHwUA2F;?-pF*dE7KQ#2+N7OUSpC*@R^x01hEh6XH5)eR Y4E@GRnr2yd6vjW_&0p-IwcqBNOQ)V;_(H@k(#lF!kkAEsQAE_6$Rhd!tf&{gs3Y|1oaZ^ud3eqluXFtCD+u2GqG)G1!WmI55~m-N0sIW=nT12%VQgHL>?5oc%k|tK#;9&zbZ_;TOvWYp1RidS zVvKKCVaPT23l{t$Lf*x$m|=wI$i^+%U`;tTkTp%6Qt?(swotDpjX(~~w` Tc$G;&xv5qzV#=qZ#l8Okh0ugN diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/IKeywordProvider.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/IKeywordProvider.class index 7c73cf7d45acd4cfefca362d944d025c4a64cb7b..27a4c84c76f38f826292437cacff29514f541a9c 100644 GIT binary patch delta 101 zcmaFFIGu^>)W2Q(7#J8#7gOcprRxWm6lLb6TTh&Bpv=s|$iT|L#=roi*%>&%G$#WW&^$&4ZXn6Tzykmq`4&1a*Pa|K$3}p3jj9J B2n+xK diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/KeywordScanner.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/KeywordScanner.class index 136edf51dc8a9aa8a109c9213d8399dbe9676ca2..a63b1c346e371b117c42b2dd71773f88c81fe5bd 100644 GIT binary patch literal 5394 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 zdefz5c{&EaIContentAssistProcessor using the + * keywords provided by the {@linkplain BasicKeywordProvider} to generate + * content assist for them + * + * @author Raven + * + */ +public class BasicContentAssistProcessor implements IContentAssistProcessor { + /** + * The editor this processor is working on + */ + protected BasicCodeEditor editor; + + public BasicContentAssistProcessor(BasicCodeEditor editor) { + this.editor = editor; + } + + @Override + public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { + String prefix = EditorUtil.getWordBeforeOffset(viewer.getDocument(), offset); + + String[] keywords; + // get the respective list of keywords + if (prefix.isEmpty()) { + keywords = editor.getBasicConfiguration().getKeywordScanner().getKeywordProvider() + .getKeywords(); + } else { + String[][] allKeywords = editor.getBasicConfiguration().getKeywordScanner() + .getKeywordProvider().getSortedKeywords(); + + keywords = allKeywords[prefix.toLowerCase().charAt(0) - 'a']; + } + + ArrayList proposals = new ArrayList(); + + // create proposals + for (String currentKeyword : keywords) { + if (currentKeyword.toLowerCase().startsWith(prefix.toLowerCase())) { + // TODO: provide descriptions + proposals.add(new CompletionProposal(currentKeyword, offset - prefix.length(), + prefix.length(), currentKeyword.length())); + } + } + + if (proposals.size() > 0) { + return proposals.toArray(new ICompletionProposal[proposals.size()]); + } else { + return new ICompletionProposal[] { new CompletionProposal("", offset, 0, 0, null, + "No proposals available!", null, null) }; + } + } + + @Override + public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) { + return null; + } + + @Override + public char[] getCompletionProposalAutoActivationCharacters() { + return null; + } + + @Override + public char[] getContextInformationAutoActivationCharacters() { + return null; + } + + @Override + public String getErrorMessage() { + return null; + } + + @Override + public IContextInformationValidator getContextInformationValidator() { + return null; + } + +} diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java index 97ccf476..2a343194 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java @@ -1,5 +1,15 @@ package raven.sqdev.editors; +import java.util.ArrayList; +import java.util.Calendar; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; + +import raven.sqdev.exceptions.SQDevCoreException; + /** * A basic implementation of the keywordProvider providing the keywords for * syntax highlighting @@ -14,14 +24,133 @@ public class BasicKeywordProvider implements IKeywordProvider { */ protected String[] keywords; + /** + * A list of the given keywords sorted alphabetically + */ + protected String[][] keywordsSorted; + + /** + * A flag indicating whether or not the keywords in keywordsSorted are + * currently sorted properly + */ + protected boolean keywordsAreSorted; + + /** + * A flag indicating whether the keywords are currently getting sorted + */ + protected boolean isSorting; + + public BasicKeywordProvider() { + keywordsAreSorted = false; + isSorting = false; + } + @Override public String[] getKeywords() { - return (keywords == null)? new String[0] : keywords; + return (keywords == null) ? new String[0] : keywords; } @Override public void setKeywords(String[] keywords) { this.keywords = keywords; + + // sort the new keywords + Job sortJob = new Job("Sorting keywords") { + + @Override + protected IStatus run(IProgressMonitor monitor) { + sort(); + + return Status.OK_STATUS; + } + }; + + sortJob.schedule(); + } + + /** + * Will sort the given keywords into keywordsSorted. This method should get + * executed in it's own thread if there are many keywords to sort + */ + protected void sort() { + isSorting = true; + keywordsAreSorted = false; + + ArrayList> sortedKeywords = new ArrayList>(); + + // create empty sub-lists + for (char currentChar = 'a'; currentChar <= 'z'; currentChar++) { + sortedKeywords.add(new ArrayList()); + } + + for (char currentChar = 'a'; currentChar <= 'z'; currentChar++) { + for (String currentKeyword : keywords) { + if (currentKeyword.toLowerCase().startsWith(String.valueOf(currentChar))) { + // add the keyword to the list + sortedKeywords.get(currentChar - 'a').add(currentKeyword); + } + } + } + + // convert the list into an array + keywordsSorted = new String[sortedKeywords.size()][]; + + for (int i = 0; i < sortedKeywords.size(); i++) { + keywordsSorted[i] = sortedKeywords.get(i).toArray(new String[sortedKeywords.size()]); + } + + isSorting = false; + keywordsAreSorted = true; + } + + public String[][] getSortedKeywords() { + if (keywordsAreSorted) { + return keywordsSorted; + } else { + if (!isSorting) { + // first sort and then return the sorted keywords + Job sortJob = new Job("Sorting keywords") { + + @Override + protected IStatus run(IProgressMonitor monitor) { + sort(); + + return Status.OK_STATUS; + } + }; + sortJob.schedule(); + try { + // wait until sorting has finished + sortJob.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + + throw new SQDevCoreException(e); + } + + return keywordsSorted; + + } else { + // wait until sorting has finished + + long startTime = Calendar.getInstance().getTimeInMillis(); + + while (isSorting) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + if (Calendar.getInstance().getTimeInMillis() - startTime > 60000) { + throw new SQDevCoreException( + "Waiting for the sorting of keywords has taken too long!"); + } + } + + return keywordsSorted; + } + } } } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java index 96942edf..e288689d 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java @@ -2,14 +2,20 @@ import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.TextAttribute; +import org.eclipse.jface.text.contentassist.ContentAssistant; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.text.contentassist.IContentAssistant; import org.eclipse.jface.text.presentation.IPresentationReconciler; import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.rules.DefaultDamagerRepairer; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import raven.sqdev.constants.ISQDevColorConstants; import raven.sqdev.constants.SQDevPreferenceConstants; +import raven.sqdev.util.SQDevPreferenceUtil; /** * Basic implementation of a SourceViewerConfiguration @@ -19,8 +25,9 @@ * @see {@linkplain SourceViewerConfiguration} * */ -public class BasicSourceViewerConfiguration extends SourceViewerConfiguration { - +public class BasicSourceViewerConfiguration extends SourceViewerConfiguration + implements IPropertyChangeListener { + /** * The color manager */ @@ -36,9 +43,17 @@ public class BasicSourceViewerConfiguration extends SourceViewerConfiguration { */ protected BasicCodeEditor editor; + /** + * The contentAssistant for this editor + */ + protected ContentAssistant assistant; + public BasicSourceViewerConfiguration(ColorManager manager, BasicCodeEditor editor) { this.setColorManager(manager); this.editor = editor; + + // register to get notified about preference changes + SQDevPreferenceUtil.getPreferenceStore().addPropertyChangeListener(this); } @Override @@ -98,4 +113,43 @@ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceVie return reconciler; } + + @Override + public IContentAssistant getContentAssistant(ISourceViewer viewer) { + assistant = new ContentAssistant(); + assistant.enableAutoInsert(SQDevPreferenceUtil.isAutoCompleteEnabled()); + + IContentAssistProcessor processor = new BasicContentAssistProcessor(editor); + + assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE); + + assistant.setInformationControlCreator(getInformationControlCreator(viewer)); + + return assistant; + } + + @Override + public void propertyChange(PropertyChangeEvent event) { + if (event.getNewValue() == null) { + // if there is no useful new value just ignore it + return; + } + + // watch out for a change concerning the autoCompletion + switch (event.getProperty()) { + case SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY: + assistant.enableAutoActivation((boolean) event.getNewValue()); + break; + + case SQDevPreferenceConstants.SQDEV_EDITOR_SYNTAXHIGHLIGHTING_COLOR_KEY: + getKeywordScanner().syncToPropertyChange(event); + break; + + default: + // don't update the editor + return; + } + + editor.update(); + } } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java index 0b2e3b9b..0a0135fd 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java @@ -5,7 +5,8 @@ import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.VerifyEvent; -import raven.sqdev.util.StringUtils; +import raven.sqdev.misc.CharacterPair; +import raven.sqdev.util.TextUtils; /** * This class will handle character inputs that have a predefined partner to @@ -82,9 +83,9 @@ public void handleAddition(VerifyEvent event) { String previousText = text.getText(0, caretPosition - 1); String followingText = text.getText(caretPosition, text.getText().length() - 1); - int occuranceBefore = StringUtils.countMatches(previousText, + int occuranceBefore = TextUtils.countMatches(previousText, String.valueOf(event.character)); - int occuranceAfter = StringUtils.countMatches(followingText, + int occuranceAfter = TextUtils.countMatches(followingText, String.valueOf(event.character)); // TODO: handle escaped character or only consider characters diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/IKeywordProvider.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/IKeywordProvider.java index d0ecab9f..0fae1c8b 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/IKeywordProvider.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/IKeywordProvider.java @@ -21,4 +21,12 @@ public interface IKeywordProvider { * The array of keywords */ public void setKeywords(String[] keywords); + + /** + * Gets the keywords sorted alphabetically. Normally the keywords starting + * with an A are listed at index 0 + * + * @return The twodimensional array of sorted keywords + */ + public String[][] getSortedKeywords(); } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java index 68cc131f..e9dd10d5 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java @@ -7,7 +7,6 @@ import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.rules.Token; import org.eclipse.jface.text.rules.WordRule; -import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; @@ -23,7 +22,7 @@ * @author Raven * */ -public class KeywordScanner extends RuleBasedScanner implements IPropertyChangeListener { +public class KeywordScanner extends RuleBasedScanner { /** * A token that indicates an unrecognized word meaning any word, that is not @@ -86,8 +85,6 @@ public KeywordScanner(IKeywordProvider provider, String colorPreferenceKey, "Invalid preference key \"" + colorPreferenceKey + "\""); } - SQDevPreferenceUtil.getPreferenceStore().addPropertyChangeListener(this); - // assign variables preferenceKey = colorPreferenceKey; this.provider = provider; @@ -119,8 +116,15 @@ public KeywordScanner(IKeywordProvider provider, String colorPreferenceKey, this(provider, colorPreferenceKey, editor, true); } - @Override - public void propertyChange(PropertyChangeEvent event) { + /** + * Synchronizes this scanner to a PropertyChangeEvent (adjusts the color of + * the highlighting + * + * @param event + * The respective PropertyChangeEvent. Must be the same as the + * one this scanner has been initialized with + */ + public void syncToPropertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(preferenceKey)) { // if the changed property is the one for the color this scanner // depends on diff --git a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF index 0ad801d5..2937a1e0 100644 --- a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF @@ -11,4 +11,5 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.constants, raven.sqdev.exceptions, + raven.sqdev.misc, raven.sqdev.pluginManager diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/SQDevPreferenceConstants.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/SQDevPreferenceConstants.class index 7bce975e251490bfc5d2e12e516f4f8872ef544b..4238b468cc2e52e35c0f387122c70f4d66d71582 100644 GIT binary patch delta 227 zcmbQw{fnFH)W2Q(7#J8#7%Vq(EoAak2@Z5|4U2bm@eJ_~ig)#MbniQ delta 137 zcmeyxJ)fKF)W2Q(7#J8#7|b?uEo7SfjY*SHak2t)2&2m6QsziT^~vX%9T~MI3$hro z>GLpXGw4kAWSP#$Gx;IQK@Ua-Mvw@Q)CC%$52P7^G^^Hj2EC0y1`~q;kYoc3axfSI U**p*h3`PvbKprE|R*))F0Bsf)Z2$lO diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/TextConstants.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/TextConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..93df6f36e5e1ac28079c23394cf40b0d5a0b7472 GIT binary patch literal 557 zcma)2%Syvg5Iwg^lQyP$eZMw}2-StzxKorGBZ@_(O_U%~(s2qJ!f zA0^JcD&o$~yv~`KGxPrO@&;fPvnC1*3%#f>QYX7P7kwx0rdb}PdFJ@yE_Z)26FLLG ziu#e$iP8(_uze-soWVNT-SfTXQO)%j3a2hZX{%9l_dUPKFxfov+`U@8b#mC)Zn?WP zLVT}5NNGLpBx#awFlg1KV+P&ro{KUVDmIERWHe;M{ECKclweS$o}}X7_PQ;4e$?&= zhLL(VjylItFOm6o(O6fbEohjqF$Rmq=a)&wuvq`cscUpqvwPc%#ZIDj{CUKR`~l`k zpGGg#FfHX$G%dv{Pg2PjNOBn#@dhZ%ppymm&DUb6@wp(>xfO&(UI{{jmxCwR+)z+e zLQ4`lmC#ubn*2TpOZA4qp@d3ep+&&j0;rJpLIGtE|!C?PMk6^UIQ)%G_mKI>)Hlf`1 z0{J?*IFYI=PJBtIv_qG#6nrtqdD4i_yom6ueVy?+-R=|23mHXXkdpuLL|B`4+C5X@ zrM{NUYL_+b(k2vLkwi?er@H#9B{ZiYdAoC^8FoWs>xA9^E$jEQ!uz_gL0FN2cG*dW zL&e?k+wjBmd3Kk|i_?=>xbM44xNO?$go$$Hk*BBIxaz-ns%L`-AZ{DH)=@->cax(6 zZo=SielcDbICH?c0`H~f&KQedQcamxE6px(Z5hiPS2Gn>P~nL6Sj8P?XqG*XRh?y3 zn6-KZYYlgERy}7OvwQ8|Z0_uiu|5l{vVmF(+stGWV`grQOQEra)M6vYzGD+b##)SR q*v1(5X36Wgg^iTFmnkP?YeKeivL4eWk6IhG@Q}asaJM)r;L&g2ugnMl literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class new file mode 100644 index 0000000000000000000000000000000000000000..d79db0033de0251220002da38e1179012a377db1 GIT binary patch literal 3234 zcmb7G?N=1n9e#!#m}N7HSwTciSvRTjwvHuME3Cwb8i@-ipa`)|hTRK{&dw||vp|xj zd8uuhwCP)#w3@!9U;LV$(=4{0ll1gMdrtp=eC|I|>2qh6brIT=p5-ui?)}~0%kw<< zcjuoE{_+`sWB7xH1_ehvb6Gfszf=&*hULt=!>(&?ndKxo}v`I!bp^M4D zvz!ImHDxWw3WgLs*|pilR^#rg3e;h@AQFgShmL0KR1oXxzM8-;BsDy)pwsmh43W33 zk}r(B>j}dvJAqXc#)bXF`^bwuOZt^}bts^e?u zXC4b8h(wfrL;~GgH6S-0)A4m2SFnc~Do(i*!WPS>6UfxY9h-z4s;9K7v~7H8_=bY^ zhq8_=&y+2@AiOvR6ztC0)=<_=EqY@9RN7dvZdyhHCyR8H04gK-Q~rRh{)1-3Yqj^mtyhV)Pz&v80ym_u2EnaMySI-bWxp2fh8 z5>U`eIv=fSPzrif#~8+Gn|GbSv>YmHe|=iRi>5azmde7(i^1;MI4&#bm|7Gmza;Y3 zyd?@LsfCo!BcDnq(1npWrW9OArwXp{Q;r*?s;*OJ%BI5k>UqL1xlVz{Jr%gAV3WJB zNzf?lH!0T1Bd*YM23eW#jE-5nAkUgp5UbVL)_Bwy-?n)ht0=f?|1RGjvvV0-u zpEG;#u8to{GgY>P1m43>H2j!})j%1qwH_Tmm3v!Cynu)ko8**d=IJGapUZmQe^_*Q zB}^@P?uu;5EQ-Cp?D5V>NM@r_X&uR93oUGuY_V1Ln=MI8M7Bc0+iIIe9;P;^;nzIA z8%am{+aU2HWT~3PplH`5)g(a?BtJ3fmc6_0C15$O{L**s(X3~1nw_fa_F zZN#U_m1eTV2z+~=>(cIU&l>dJduZwVJ9hR}&~^u!dKYT!9`;Z7^nQxYp1x0U@Q*Z& z;Yt4A7dlPR-9frd;{cxG=&Lxy-&0&qMQ+0xzT$A026e)bOr(KNpcM`4Xh%$gqM=J8 zy*SMSiyrjSqK_6b-Hc3CS)~VAz~6d${)Emo7`dL_H9VcWj}tS=lWQ2{^uY>-l4tmD zV|=!5e4gV9E{yiFzT6%3-$!O9+cO4+_gGk&CO!DlDYkq563;q%c9)%u%F;2i2ulP9Ug z+g}EzFC7~MeMFLT7>q`Det`ya0>7>}RYB4hWa!s~LAGgD$=S%a)By literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality$2.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality$2.class new file mode 100644 index 0000000000000000000000000000000000000000..1f5536071c73cf69936c1d93440799ca87bc5e8c GIT binary patch literal 603 zcma)2O;5r=5Pb^;YDE-8ym;`y0VLRj7%v!uA()Umu zlyO=bW1ykc5kq%#^=7ZnV8>=X0Ykmj{yUeA z8cjY|#^;K`nV4l5h-;a&QTbWsX|fLLbfg1iB3j3dh!d8{0zSztWS52Y-M+ z$~Y~JG0_8??7o@VH*Y>ZzurFpoa3l~978+gE1{g|$rmd}s+k_>AP`nmgk-lxp4^wI&SaK>Namfno`H*bLYI zG2M-8_7c%uS1NJ0e4L8#o=*e8P)UcF@K7dx7Bu69j2Jqbt2eqm1}oO<2^gx)*5A1- zR2Yg&<%=1$;WOA{y$n5ZBa=?bKl?mOHbTt~l^5uUHgYTCg(iM!q?8B;0goaP^-sWP zJ;}+@&0~xF0$CR@)3|louCq5-uPI}jUOQ#hiA7rEmk0q1J17%UMeJo79m3?#sO-NG fpHaY(o>Un9%TWYEVqL0OL_ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/ELocality.class new file mode 100644 index 0000000000000000000000000000000000000000..203a3135745b43cb5f890bf16d1d3628042f43f5 GIT binary patch literal 1490 zcmb7DTT|L#5Ivs(0x?BQ>kYN7l~zD2_1X()rHCD-5gw?_Wcm~^+Bg{6aGBv>weWyb zr%s>yqdMI$pyr{Sk(X@pW%umav*-K$=f@R*P3(vmVTjp!%dislug69!VOl4(Os!fq zDh;z{CCYl;NMzMoMX#ETwg?YH@Jw&%iK=d$CbCxZoWZLWGHI1zS-mq*lEL?0ExhAp zfusC>_8^zf?lX*L^GAn~Qd&LA78zDP4Tb1WRjQ_CHg*|=XspEG$<&Sw5o1K{&deff zet0DWp~$$82gEZqz?_V#x04qewrQOvbFoqY43jdv@QIins?)k3qJ$|Z9AZv}$RQpM z1+n3WU&4GJ;)x7Dd>kwyBLInEOf@Yd-#jlH_D8*3H5e3Ul_lLa`L}Z@L4ZPHH9nhl z8n>lan+CnCMq|UsFJT3%BAzpZTq?Ee4dYx!0xxLKx^3(2O6^OVA@0_)P(CBKC37x$ zua8Jy2GOBZIAM6}E*q>MHiSp`sGBm@u*I!OndOhhPa07lj3^zOZHtnvvw!sh_ zVkL<-M1o7jTGOr=2PWT3@aB%K@{Xid(LA;EM$@LBJ1%0JMQVt4yF^*eS(aftGaB{1 z1!^zQ_4n+}aMuD9$$CyC{{W#dcMoNF$xow@DgPdQwc(*BkiJAvQ$j)y<6TT#VoFnH zJUxWFn7zcjrabcY@VJWw-%l`2=wPC#c{-RaYTgbOid`&zCy)_5rRPIxOhl-eNG*bN z7se6BG$NS85|Mo7Wb$mfiUS&Jbk6CE@#VQ5mTtj(lz>4I=S(Sx@_A^Q7~+HSZJLUg zPj;}VeGuYTT8i^L6lO25yz-6y^r`jH*bRjMxn_NU5vLrEFDWd3fsJ2a|E&vwsBaJI o_()vCKJ}OXranRm0$w>pUgM1ulSokv(|M30_CQMY<9t8<1tVTqm;e9( literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class new file mode 100644 index 0000000000000000000000000000000000000000..191c5f5c5831abdef33936711326495966ed0f4f GIT binary patch literal 1238 zcma))&r;J+6vn^Xqz#17B2bhH0*cb6KvdYFh=V%Jh`K0)V|QtKEf-2slN5(n@dezl z&>02Cg-aGbl;gSSof4IWlbPIq=Y02fzH@*6`u+pJDpn0-7#2eJi2F|TuE~!a;lB+w zgLa#Hu?T#p;YQqf&X3;*Vbg%lFtYC+xlY^lTh6P-K1DGY2fcHK(d~=VS{w?$wZ<^i zHriYQ z1)kg9bweT7YEzH*M8r_p{?EGCOlTOBG~*0fxw0$iCM;aVAcGn4SotHjCoPoZcAmDM zr0X_Y{Wym4a^>F&1}Xi9g)DL=W^vQN+#hcD{IqZj^JKY*o*s7MKK^L@x{@xI!x_BV}14Hmtj5^V4q>s zuAZW3FP`Gsh3F`BI=1OwC4xodv6P6<_R{*|1tm^W(gc!axQ;1xjYA_Novi%@)1PRP zAt59*z)B)$^#YV2lP^alyA&-8E>+KwC&ZZ#F!YbmwQson+OB@Zw8YgC#e9PG5aVRi zBsNk$l=`S8g<7SoEHZ@+$wu8#*QHsP{$|~}l$D;dN?up2ImxwjVPmg1HM(yn#gywa zM5|Il9dH&U}F?;pQahC{08m{ B&x-&6 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class new file mode 100644 index 0000000000000000000000000000000000000000..504c5b6b477c33609eb40dab65c510c30d872d1a GIT binary patch literal 326 zcmb7fhE8}>+eylm%>e@14xAKj) zOC3zizh&A#n2vB<{R8Qokl*-qX!y#+kIO%}Cy^9;5H2|w;uLvAGfAgE85keFVdGVb a1i5G~E+tYKZON;USHOv>4Q>H9-@*qg(wyu6e$lWA}Oyzfdc9@otB~Lq)aA-s`x-~ z>CxkkSj;!3d_UOu;p5s>i?);Nvl1wWun#}*tfA9V7cfWi8^xog! z-3HK)cVnp2(CZj;rk%>4n=t26mOYuHiezp znhu6j4pSqZ-+^s(&}d#TW@fVzqbJu2{R529XeXkN$x@p zhMO);Tei8sFf(pCM~v|-VYHn7q-j zUB@b{7TR~}*oEiW5t$sj*|J&x3cVNeq1ieN>DVKOBTRs96<7@`7fC^hYj>%QlM6|x zMycBdL^;Dcn$SQm6hPTa-vU(*aUzw76R&R^$6+CKL_=%!VIk(Iju)|-Wcq_g!S@R3 zjg!tqPsl(Kpkq3kp(~)}^UD(<#|2V5^V#7{6=qD^Eg#=lsfMst-(5USjS1pcbR5I+ zIL5&Np5dGf>SR#|I!sKm@@`IzP7bnSae~uQf}GKD5~nmID=NLHcaDolHb+4194@t) zZeXbUMmiwr**bEVWohP&Y{5K0D>9vmEvEHP16YXDl2Fv*=j({g=+K(R634ar+S6*3lt{8^2YSYdoxn zX{FJ9SMRr2dlxOe-(%g0n|Sm(*2>P8d=(*1Fl|ARrtvTh4|*YWW$K4acxSaXZuX$J z6esD$InK2tA5Y#wUvHA`C6l1*F+_2Syq^wG6E9^G_barCRw}IQG%}V(Li_nC%oqG9 zJ;^(0N#4NbtB6HELo{*=1IK!AV32z|u0r=8cONT*Xk&O_5*;{0k}M=J9RSi(0@8yQ zu$SQ^+Xh6IZr8fF;&3b_ysw7XG|`laO_SJkHL)&7L`5PKk;*mOB3RkKUX z>@tbH638b=tde?=*d{7fh&@=6bTzSus)#*OCRQG6iG7d6zE6@qAaNfCfCPyh^~7IE zEN3`@NNrOdBz7z5J0bMddAgJ~1U?GTR`1s;Dzn))p74dyE%Hm=uKzfw3##!%nKUJY zPe|IQXvgPt_C)}1cS#7{-b_$J-~?&eE{vVVOMb*t6t{Ft8@2ZGa9@P17$d!XH!vlk z6m}KrYYO=riuyX)zTt&Zt=v`$)y7a3{nm4op5;kt=Y}n;oL%4qYGobLkxF`;74M;ci&i@aIDcVtUrZfF=*KiMRI1>$s7#*wM~X3g+8 z==0Ga6ZvAf2h>IN59--l<%_DJB*+H2gz2$7G-O8&jkiieW6by7NoL+I4+wb-4hWBU gtr5*y6aNKk4g~Bh1??M@R>5IwiMZJ{n@sig`9geuT3A1exqf+S@@LMW~DgQPZwY?lozmKNKBKa9`f z3-CjuLZZe8@S%)z?^dWv{Lwoz_s*PiW_HpaKfinjFpDRCco>H2=80X^8?Scl6aCO> zSh}%q)=jHv*PoeA-4B^TJupv9y<%4P^i27{wwer)+L5e4~8DyijYX`v4qacLq48FzIyEkqaiS15$>Q&%{k9#*1_+770L5J%_ z6?D4Zpn?E=q$%Z8?ey_s*{Zr{rD~R0**5DAkHuvG5=J;@kh9-ba0jCd{)XM; zLuK&BOGHlsoBK|KftmE923VPr_I@YH@kGhs!lo2lgTl~BPnjdTY7+uAXmIQq1sW#Y zH=|N(@V5@9YE_PRZ9hs4(QC+b0&8Ev zit4yJeh&2`!Xk>PF%d;X6ju`>x+$WP`a(qgB6_2~716*4g7RR9&IrkZAPQoDs5GdU zM-Og^3=lmnLQBK}iQqCK+Bt^3-@HXBS}4i`g|s$xhS()$NM!ZX86~tq^b!-t)7)x| ziAFj1IO2rOy##q4%Jzx&CAy{0)Z*32@+`0R36t;1ai#mj<%ob*+=Lc1a z?IG*aCO%{GQe;5fj#B$$0wLmNU5ImqaAMkn7S;^qa3Ox}40om3)4!xlwMp?`NTKDq zs$Bl3eD2Ef`}Ei2cCtn6ypu4o&qd#%i|j+PUg=ckQY7&~-Ki|K^%TD7DU3&A;EzQ% L3lZ>w=wa~}aLuyG literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/syntax/Syntax.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/syntax/Syntax.class new file mode 100644 index 0000000000000000000000000000000000000000..465ef813728b29060fa46f96cfe38d850c1237a3 GIT binary patch literal 3005 zcma)8U2_v<6n@@p+LUzZciLjDEl6pS7NUZDm|7`?%12t%mR9N)+hl3CB%83isVxeM zqQHgYJvR84`~M7;M!$H*qeEK6HU8MZ^0P1DArsX0Z9F%CS* zXC(DhWJkQ{$x+6sA2CeB8D*mA<49t&0>SZoMh`?RPoiaOMX&>_(7 z)=-NvjCM3jzb+LaGzc`O3{#&f<`#5oMq9|bwdd1Xc2=_t`L}NjI!gxY?s+2s4>!AITTlZ|*4yF+-5 zoK}b|zf~!<*O}eaS1F#_Iz34xL)a(K|EzY0aDatwRNJAVknO6W=3FVbv%Ct z9*^e(O*Vk^i+&ktToRX3F^N9nThi<)awID`sp1{uA`N!7A)V(!G)%e2s+(LE4JWc4XH_gpXN9@gM%`OZ0^!Pp3JgS##h#sAhRdqR z!DKidmuY#fqIo~DK%HS`^i>LpVrrr1n6+4x8+SZUz64rn;(jUQ&9Y5unDiCpCQ$h{ zrE6z>=eo3as9rx`)UvkRm1`<4;4=~+<773P1hkihEF4=IP~jIVz+WzG z_lXOc)=lnnm?O#~PR_VD^5 z1HFU}^kEAvo!()*z<2T|;wB|X`t|xL61;OuqAvamT7Tk005W8~YaDRHNHlct!w4qm zqebEy<6XXMikHw|!uA`e3*J_4)1p*G8Lo=b9z6$`5<-K6V1Op^(TvIBufXhJXq5#l}zF&MTJFh5=N z@cK66vQbTC=SC_=t4OF&c?z@ZLFU{b4*!-d?-}|7&8%g6@FqgRTL>!m@cx|CfZO<> z%Wsog!BIB$IIB3}rtq5H<5wkR;VJB62K72AEmGRDx;g|}4$3Bef-}6zrq25aBC-WU zpxuD#Kk9Q*bRM%_?is4}6gir!${ktH9l;WL^fDq|jC<5m(=ttYbXi|z{Uy8wulwq})m#R7t_G1Y-=6;0l=`Gb4Q${M{>!^sY zhmy0;jFg4;Z%;+%p2{o+aL~oY^b+rbSalP6DvS9E1GKNW;Jes`iptug$~L`Ap$8C?G+rXQOFu}9GI|T$@!k@?9F~_7zH%L} zD56*T-F);)#G@Jq~inM(Q^{kTGPUnSCOoRsT0z~{sG&aEcyp;&Ll1pTiN oV}y{uq1FPNjedN~3Kdsh&8Ta6h*l2IL;ermDtmO*?aQ_Q0R^yg%K!iX literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/syntax/SyntaxElement.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/syntax/SyntaxElement.class new file mode 100644 index 0000000000000000000000000000000000000000..1f7f0c66379d3cfc4bf21ce9a4446568c00fc59e GIT binary patch literal 2164 zcmaJ?&r=*l7=69FFtAJr%g@9Rfq&DAy(-orB#-v9Q>Os_4Uj|Sblie>FJ)YU%&5t@9X{Z?_Ylha0!lvl)$iW z?nu`N9<9k8BY5J5=3}E04YQ8imTssaBha;F?wE#Sx*NtqbxT^IK!+pE^(021ySx`s z34Pn$Cy1DDQVzTj<4w66hVxAFg?p`0wd>2mKn}7Z^C`$Ln?5S(CmB zyR4&#D-?D^hOvJ+0xZ;|E9qI|TE~4nU^A)hju|kxr>UsXB9lp@s^d$1rOLLZV;L*zZB7YY zB^$50)qM9Pr?87GvJ%Kvyt;468+Oz-O&8mwatM2mFuV`bNU3h)TS|E}8YuurjS;L8 zpC>r`hTl^hFN{4$XW=CV3Jv6*qN~t7(7@@Z&@w+FlYW7-D`SOUaQ-KTrtv19-N^7c z#%F^Dr` z<@|#NuD-yv=a}W{WCJ%FxD_wYH?Y`1Y zA}@!8g~3s=XyHLi3N;ngGS21BK9rUOMJS6Vo6E`OT$}>si0R(h6Qwg!{yynFpwiWS zfVpN`N*uO9g8V~L_#%<-vFP_2FrT6&y<7MLVqP6L&foWHg%gVt>(xYZA{$uW<1iAr zeG{Fq(FKQpgD!^QVFW&H8of=|N=8av#mhJirIhsT%xfMzF F@L#t0!ruS@ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/SQDevPreferenceConstants.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/SQDevPreferenceConstants.java index 54b32c96..a1d0af71 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/SQDevPreferenceConstants.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/SQDevPreferenceConstants.java @@ -52,6 +52,12 @@ public class SQDevPreferenceConstants { */ public static final String SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY = "raven.sqdev.matchingBracketsColor"; + /** + * The name of the preference indicating whether autoCompletion should be + * enabled + */ + public static final String SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY = "raven.sqdev.enableAutoComplete"; + /** * The name of the preference indicating whether the current line should get * highlighted diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java new file mode 100644 index 00000000..046f23b7 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java @@ -0,0 +1,26 @@ +package raven.sqdev.constants; + +/** + * A class holding constants for the usage with text + * + * @author Raven + * + */ +public class TextConstants { + /** + * An array containing whitespace characters + */ + public static final char[] WHITESPACE = { ' ', '\n', '\r', '\t' }; + + /** + * An array containg all bracket characters (uneven index = opening bracket; + * even index = closing bracket) + */ + public static final char[] BRACKETS = { '(', ')', '[', ']', '{', '}' }; + + /** + * An array containing all special characters a valid word can constist of + * apart from letters and digits + */ + public static final char[] SPECIAL_WORD_CHARACTERS = { '_' }; +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevCollectionException.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevCollectionException.java new file mode 100644 index 00000000..5b837a96 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevCollectionException.java @@ -0,0 +1,30 @@ +package raven.sqdev.exceptions; + +/** + * An exception indicating that something went wrong during a collection process + * + * @author Raven + * + */ +public class SQDevCollectionException extends SQDevException { + + private static final long serialVersionUID = 5076943149344521751L; + + public SQDevCollectionException(String message) { + super(message); + } + + public SQDevCollectionException(Throwable cause) { + super(cause); + } + + public SQDevCollectionException(String message, Throwable cause) { + super(message, cause); + } + + public SQDevCollectionException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java new file mode 100644 index 00000000..daef6d0f --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java @@ -0,0 +1,138 @@ +package raven.sqdev.infoCollection; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.net.URL; + +import org.eclipse.core.runtime.Assert; + +import raven.sqdev.exceptions.SQDevCollectionException; +import raven.sqdev.infoCollection.base.KeywordList; + +/** + * A class for collecting all SQF commands from the BIKI. + * + * @author Raven + * + */ +public class SQFCommandCollector { + + /** + * The URL to the base site where all commands are listed + */ + private URL baseSite; + + /** + * The name of the first command in the list on the base site + */ + private String firstCommandName; + + public SQFCommandCollector(URL baseSite, String firstCommandName) { + Assert.isNotNull(baseSite); + Assert.isTrue(firstCommandName != null && !firstCommandName.isEmpty()); + + this.baseSite = baseSite; + this.firstCommandName = firstCommandName; + } + + public KeywordList collect() throws SQDevCollectionException { + String siteContent = getSite(baseSite); + + // get relevant content only + siteContent = trimToRelevantListOnly(siteContent); + + // compose the line where the collecting should start at + String relevantLine = "
  • " + firstCommandName + "
  • "; + + if (!siteContent.contains(relevantLine)) { + throw new SQDevCollectionException("The specified base site \"" + baseSite.toString() + + "\" does not contain a line corresponding to the specified first command \"" + + firstCommandName + "\""); + } + + // start the list at the first command + siteContent = siteContent.substring(siteContent.indexOf(relevantLine)); + + // go through each link and gather respective information + for (String currentLine : siteContent.split("\n")) { + // get the postfix for the wiki page of the current command + String postfix = currentLine.substring(currentLine.indexOf("\"") + 1); + postfix = postfix.substring(0, postfix.indexOf("\"")); + + // TODO: call respective site and extract SQFCommand with all + // necessary information + } + + return null; + } + + /** + * Gets the trimmed content of the specified site + * + * @param url + * The URL to the site + * @return + * @throws SQDevCollectionException + */ + private String getSite(URL url) throws SQDevCollectionException { + try { + BufferedReader siteReader = new BufferedReader(new InputStreamReader(url.openStream())); + + String content = ""; + + String inputLine = ""; + + while ((inputLine = siteReader.readLine()) != null) { + content += inputLine + "\n"; + } + + siteReader.close(); + + return content.trim(); + + } catch (IOException e) { + e.printStackTrace(); + + // rethrow + throw new SQDevCollectionException(e); + } + } + + /** + * Trims the given html content so that it only contains the lines relevant + * for the list containing the SQF commands + * + * @param htmlContent + * The content to trim + * @throws SQDevCollectionException + */ + private String trimToRelevantListOnly(String htmlContent) throws SQDevCollectionException { + BufferedReader reader = new BufferedReader(new StringReader(htmlContent)); + + String content = ""; + + String currentLine = ""; + + try { + while ((currentLine = reader.readLine()) != null) { + // only consider lines containing a link to the wiki + if (currentLine.contains("
  • null if no description is given + */ + public String getDescription() { + return description; + } + + /** + * Sets the description for this keyword + * + * @param description + * The new description for this keyword or null to + * indicate that no description is provided + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Checks whether this keyword does provide a description + */ + public boolean hasDescription() { + return (getDescription() != null && !getDescription().isEmpty()); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java new file mode 100644 index 00000000..64a2d5b0 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java @@ -0,0 +1,11 @@ +package raven.sqdev.infoCollection.base; + +public class KeywordList { + + public KeywordList() { + // TODO Auto-generated constructor stub + } + + // TODO: store keywords sorted alphabetically + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java new file mode 100644 index 00000000..18ad93f3 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java @@ -0,0 +1,268 @@ +package raven.sqdev.infoCollection.base; + +import java.net.URL; +import java.util.ArrayList; + +import org.eclipse.core.runtime.Assert; + +import raven.sqdev.syntax.Syntax; + +/** + * A class representing a SQF command and all necessary information about it + * + * @author Raven + * + */ +public class SQFCommand extends Keyword { + + /** + * The syntaxes of this command + */ + private ArrayList syntaxes; + + /** + * An example of the usage of this command + */ + private ArrayList examples; + + /** + * An array containing the locality of this command's arguments (index 0) + * and the locality of it's effect (index 1) + */ + private String[] locality; + + /** + * The url to the wiki page of this command + */ + private URL wikiPage; + + /** + * The notes attached to this command + */ + private ArrayList notes; + + /** + * Creates an instance of a SQF command + * + * @param command + * The command itself + */ + public SQFCommand(String command) { + this(command, null); + } + + /** + * Creates an instance of a SQF command + * + * @param command + * The command itself + * @param description + * The description for this command + */ + public SQFCommand(String command, String description) { + super(command, description); + + + } + + /** + * Gets the syntaxes of this command. If the syntaxlist has not been + * initialized yet this will initialize it as an empty list and then returns + * that newly created list. + * + * @return The syntaxes of this command + */ + public ArrayList getSyntaxes() { + if (syntaxes == null) { + syntaxes = new ArrayList(); + } + + return syntaxes; + } + + /** + * Sets the syntaxes of this command + * + * @param syntaxes + * The syntax to add + */ + public void setSyntaxes(ArrayList syntaxes) { + Assert.isNotNull(syntaxes); + + this.syntaxes = syntaxes; + } + + /** + * Adds a syntax to this command if it is not already registered + * + * @param syntax + * The syntax to add + */ + public void addSyntax(Syntax syntax) { + Assert.isTrue(syntax != null && !syntax.isEmpty()); + + if (!getSyntaxes().contains(syntax)) { + getSyntaxes().add(syntax); + } + } + + /** + * Gets the examples associated with this command + * + * @return A list containing the examples (empty list if there are no + * examples) + */ + public ArrayList getExamples() { + if (examples != null) { + examples = new ArrayList(); + } + + return examples; + } + + /** + * Sets the examples of this command + * + * @param examples + * The new set of examples + */ + public void setExamples(ArrayList examples) { + Assert.isNotNull(examples); + + this.examples = examples; + } + + /** + * Adds an example to this command + * + * @param example + * The example to add + */ + public void addExample(String example) { + Assert.isTrue(example != null && !example.isEmpty()); + + if (!getExamples().contains(example)) { + getExamples().add(example); + } + } + + /** + * Gets the locality of this command's arguments (index 0) and the locality + * of it's effect (index 1) + * + * @return The array containg the localities + */ + public String[] getLocality() { + return locality; + } + + /** + * Sets the localities of this command + * + * @param locality + */ + protected void setLocality(String[] locality) { + Assert.isNotNull(locality); + Assert.isTrue(locality.length == 2); + + this.locality = locality; + } + + /** + * Sets the locality of the command's arguments + * + * @param locality + * The locality of the arguemnts + */ + public void setArgumentLocality(ELocality locality) { + String[] loc = getLocality(); + loc[0] = locality.toString(); + + setLocality(loc); + } + + /** + * Gets this command's argument's locality + */ + public ELocality getArgumentLocality() { + return ELocality.valueOf(getLocality()[0]); + } + + /** + * Sets the locality of the command's effect + * + * @param locality + * The locality of the effect + */ + public void setEffectLocality(ELocality locality) { + String[] loc = getLocality(); + loc[1] = locality.toString(); + + setLocality(loc); + } + + /** + * Gets this command's effect's locality + */ + public ELocality getEffectLocality() { + return ELocality.valueOf(getLocality()[1]); + } + + /** + * Gets the URL of this command's wiki page + */ + public URL getWikiPage() { + return wikiPage; + } + + /** + * Sets the URL to this command's wiki page + * + * @param wikiPage + * The wiki page URL + */ + public void setWikiPage(URL wikiPage) { + Assert.isNotNull(wikiPage); + + this.wikiPage = wikiPage; + } + + /** + * Checks whether the wiki page of this command has been set + */ + public boolean isWikiGiven() { + return getWikiPage() != null; + } + + /** + * Gets the notes of this command + */ + public ArrayList getNotes() { + if (notes == null) { + notes = new ArrayList(); + } + + return notes; + } + + /** + * Sets the notes for this command + * + * @param notes + * The new notes + */ + public void setNotes(ArrayList notes) { + this.notes = notes; + } + + /** + * Adds a note ot he ones already associated to this command + * + * @param note + */ + public void addNote(String note) { + if (!getNotes().contains(note)) { + getNotes().add(note); + } + } +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/CharacterPair.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/CharacterPair.java new file mode 100644 index 00000000..7ee975aa --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/CharacterPair.java @@ -0,0 +1,65 @@ +package raven.sqdev.misc; + +/** + * This class is to associate a character with a respective partner element.
    + * A typical example of a character pair is '(' and + * ')' + * + * @author Raven + * + */ +public class CharacterPair { + + public static final CharacterPair SINGLE_QUOTATION_MARKS = new CharacterPair('\'', '\''); + public static final CharacterPair DOUBLE_QUOTATION_MARKS = new CharacterPair('"', '"'); + public static final CharacterPair ROUND_BRACKETS = new CharacterPair('(', ')'); + public static final CharacterPair SQUARE_BRACKETS = new CharacterPair('[', ']'); + public static final CharacterPair CURLY_BRACKETS = new CharacterPair('{', '}'); + + private char[] pair; + + /** + * Creates a new character pair + * @param a Opening character of the pair + * @param b Closing character of the pair + */ + public CharacterPair(char a, char b) { + char[] pair = { a, b }; + + this.setPair(pair); + } + + public char[] getPair() { + return this.pair; + } + + public void setPair(char[] pair) { + this.pair = pair; + } + + /** + * Gets the opening character of this pair + * @return + */ + public char getOpener() { + return this.getPair()[0]; + } + + /** + * Gets the closing character of this pair + * @return + */ + public char getCloser() { + return this.getPair()[1]; + } + + /** + * Check if this pair includes the given character + * @param c The character to search for + * @return + */ + public boolean includes(char c) { + return (this.getOpener() == c || this.getCloser() == c); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/Syntax.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/Syntax.java new file mode 100644 index 00000000..b2496bcd --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/Syntax.java @@ -0,0 +1,143 @@ +package raven.sqdev.syntax; + +import java.util.ArrayList; + +import org.eclipse.core.runtime.Assert; + +/** + * A class representing a syntax that consist SyntaxElements + * + * @see SyntaxElement + * + * @author Raven + * + */ +public class Syntax { + + /** + * The name of the command this syntax is associated with + */ + private String commandName; + + /** + * A list of all SyntaxElements this syntax conatains + */ + private ArrayList elements; + + public Syntax(String commandName) { + this.commandName = commandName; + + elements = new ArrayList(); + } + + /** + * Gets the command name this syntax is associated with + */ + public String getCommandName() { + return commandName; + } + + /** + * Checks whether this syntax is empty + */ + public boolean isEmpty() { + return getElements().size() == 0; + } + + @Override + public String toString() { + String str = ""; + + for (SyntaxElement currentElement : getElements()) { + str += currentElement.toString() + " "; + } + + return str.trim(); + } + + /** + * Gets the SyntaxElements this Syntax consists of + */ + public ArrayList getElements() { + return elements; + } + + /** + * Sets the elements for this syntax + * + * @param elements + * The new elements (Must at least contain one element!) + */ + public void setElements(ArrayList elements) { + Assert.isTrue(elements != null && elements.size() >= 1); + + this.elements = elements; + } + + /** + * Adds an SyntaxElement to this syntax + * + * @param element + * The element to add + */ + public void addElement(SyntaxElement element) { + if (!getElements().contains(element)) { + getElements().add(element); + } + } + + /** + * Gets the SyntaxElement at the given index in this + * Syntax + * + * @param index + * The index of th desired SyntaxElement + */ + public SyntaxElement getElement(int index) { + return getElements().get(index); + } + + /** + * Gets the the amount of argument for this Syntax + */ + public int getArgumentCount() { + return getElements().size() - 1; + } + + /** + * Gets the amount of single component this syntax consists of (not counting + * arrays as an element -> only leafs are considered) + * + * @return The component count + */ + public int getComponentCount() { + int count = 0; + + for (SyntaxElement currentElement : getElements()) { + count += currentElement.getLeafCount(); + } + + return count; + } + + @Override + public boolean equals(Object obj) { + if (!this.getClass().equals(obj.getClass())) { + return false; + } + + Syntax comp = (Syntax) obj; + + if (this.getComponentCount() != comp.getComponentCount()) { + return false; + } + + for (int i = 0; i < this.getComponentCount(); i++) { + if (!this.getElement(i).equals(comp.getElement(i))) { + return false; + } + } + + return true; + } +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/SyntaxElement.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/SyntaxElement.java new file mode 100644 index 00000000..a322b3fa --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/syntax/SyntaxElement.java @@ -0,0 +1,121 @@ +package raven.sqdev.syntax; + +import org.eclipse.core.runtime.Assert; + +import raven.sqdev.misc.CharacterPair; + +/** + * A class representing a syntax element.
    + * A syntax element can either be a leaf-element meaning that is simply + * represented by a String or it can be a node-element meaning that it consists + * of another sub-syntax and the respective encapsulating characters. + * + * @author Raven + * + */ +public class SyntaxElement { + + /** + * The value of this SyntaxElement if it's a leaf-element + */ + private String leafElement; + + /** + * The value of this SyntaxElement if it's a node-element + */ + private Syntax subSyntax; + + /** + * The encapsulating characters if this is a node element + */ + private CharacterPair encapsulator; + + + /** + * Creates a SyntaxElement as a leaf element representing the + * given String + * + * @param leafElement + * The String that is represented by this + * SyntaxElement. It may only be one word + */ + public SyntaxElement(String leafElement) { + Assert.isTrue(leafElement != null && !leafElement.isEmpty() && !leafElement.contains(" ")); + + this.leafElement = leafElement; + } + + /** + * Creates a SyntaxElement as a node element representing the + * given Syntax as a subSyntax + * + * @param subSyntax + * The Syntax represented by this + * SyntaxElement. + * @param encapsulator + * The CharacterPair encapsulating this node element + */ + public SyntaxElement(Syntax subSyntax, CharacterPair encapsulator) { + Assert.isTrue(subSyntax != null && !subSyntax.isEmpty()); + + this.subSyntax = subSyntax; + } + + /** + * Checks whether this SyntaxElement is a leaf element + * + * @return True if this SyntaxElement is a leaf + * element. False if it's a node element + */ + public boolean isLeafElement() { + return leafElement != null; + } + + @Override + public String toString() { + if (isLeafElement()) { + return leafElement; + } else { + return getEncapsulator().getOpener() + subSyntax.toString() + + getEncapsulator().getCloser(); + } + } + + /** + * Gets the encapsulating CharacterPair + */ + public CharacterPair getEncapsulator() { + return encapsulator; + } + + /** + * Gets the amount of leafs represented by this SyntaxElement + */ + public int getLeafCount() { + if (isLeafElement()) { + return 1; + } else { + return subSyntax.getComponentCount(); + } + } + + @Override + public boolean equals(Object obj) { + if (!this.getClass().equals(obj.getClass())) { + return false; + } + + SyntaxElement comp = (SyntaxElement) obj; + + if (this.isLeafElement() != comp.isLeafElement()) { + return false; + } + + if (this.getLeafCount() != comp.getLeafCount()) { + return false; + } + + return this.toString().equals(comp.toString()); + } + +} diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.class index 8e13ad32adece3d2d95bc2860e1086533bab51c1..535f2ff1ab5e900c6d488838cbc39ef4035e915b 100644 GIT binary patch delta 1131 zcmZXS-A`L(9LGOTdrnU|JKeApq`a-bkV1j3^0KYS#Nj4LnK1TZbyI7pSO%1p4&2lc z%`O&iv^m}^F-y=3Zk8A|X_qz1ZVZX>%Eb$By)ZGxKVjnUuwCiJdCv3vp6|==<@qge zv&Q`CpZh-m18fw{VHGY`2LdNjtJ(Bq=GuBLKR2Dvt!3vj`Qm1SRb`>$G1#Z5v9IVg zUK5ilgZ;(dJ3KzBygX(5RLJY2#v(wiJ*Y-no>o*Zq}Ec=#nkeAbhePsF3+1Nf)))l z+MlT|)okBaht)y*FBNKUqSbL}Q`CkN|K$yLoi{jS_qp2CGxm%t=4~hJpu6l(T+xAc zA{IULDzw~6W?A75cTJcy5w$psM{!_9%nP%HRQmGSd@7wWc-H>g)u;ySDtC*wpCL!< zh#hq|hhrRb4sogUNgCN)^h_otosc9i?Niqa<9hK>~#T{yl!!kOZJaiNWJ;pAKI6y_;IU!%X6vWeWC4jP*R^* zUb!lj=QF7#gMuA3`Zi?fG6u22BdYn1hq1qaXqM)=)MrtO7vBTB`fqNd&>-#IU3iT=x|)$ z+MvgQJ@26XCrZ3{8()R-r2pkIiS3AUH?=1r;Gn*<`>R8o*}{A*aW+!of}|1G+(Y^n zfuL5aM{0%i+5_rlZ|X{pg4o>sv)duoe}kJ&8Cy)=!z8!)VuLpxZx~18EosIL4$9gn zrzR{~k)-!jDm68y|Gzc52e>{r+)>qFiaIV6o8=E%r=0&I);JT6J; z9`BNsditqnfygX_+=Dfoy6gP1{GgKt+z|3jSfJYv7W2dY}6J`^bz GH~s}9;Md#$ delta 1277 zcmZWpO;B4^6#nk}4X-b0{(vNu5-1pw0BNL98%j$-TamOyX^T-%(-1L~CNV^6t2Ux^ zbmwHQ8)lr&sEckoQ?Z(Kno+uA#&KoGg|6H>qf1v>@!XJcp_9ow_n!NG-#Onqciy_| zC%5t4-}k=-a0oZb#z?DuDY=@AEGM&zk+T<<(y5{jjiI}2ciShY(pRtK3JcSP+-hba zUEnj?fpXr{WHr$QL&x57*`wKD)!{7P>CqgpTF_kn*>7>6)r1FLF0oP8#>ZHz)^1`y zI`}*bvQGX1JID_3d(3a~qeqB6#(!Zx*3187T`a`+OHoSzed3^>&q|R)0Ypq3M3h0v z<gzz>h(bY#0oC^My>dI8#ifE}bhRQ)wN;{JzwtJi(|5CcF4=lErcuF(Em^ z|B~7*Ll_mCW4u%L&}PiU35@d-a<|`yCrvzsaVl0UWG-89ih=nJ_%LbW8BFmTa+saw zoALxZ%m0uA);M|$*zlZ*8Jy!m#qSxy1rxKPF*UWETS*&8U{J>kJgInMHq4orubWxP zT%$7^UN-Rxl4NT!U1VtPoeakRJCzX~sk?WT&lq3T=9PCCT*6n24hzE`qBTafBIrS$ z)Lcdr7~V5M2>!b^P@-Nap@=;VU#2z9ke+)0DNbh^WgmvBFl(?Ss<6jva8Pue?sK{; zXgSlrjYvrT2EGdR)!i$)NnY_U&WCs zj+SDINFR@>x6mhG69Vl#S;5mAu+|VyIL}luy%iQ`&(s7aReiXd(w_xllJRh#$ zMQS6a$it-N_A1S4xS2>VJ%Dd!U1hW-#HTyIh6HinCV34YT0)fW%M>>72`)BboLFwk5@5(%XCMt z5PFT!A7U6EQT}6MZ4j$;6G!nmj^j4Q@g*kkfa3Qg^8-#HP37}q5_m{Lixf?4<27Vx zK5lGb36~&IGxxAeMP!oqAd4I|JVvZMUZ?rZVH5?dP%cHKi+F=_H|d|nD&=mM$cY%e zf;(uZF5jf1tMx*xQS2HOdy6s?XxbqYiVmj3ro*A*ZL#!wAHk<%NQcj7-67Kd5DD#( zAY5m5k}Bcd-P?r-MOGqZHS`tMzMzFvf9)FOf$6$?v%Xdv?wR;jG}y-oEfG!&g}=ty f=D%#Co;^=CF4PrTc2Nxl!q@FmWxOvq64w6#DiYu* diff --git a/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.java b/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.java index c1fa8248..9c910841 100644 --- a/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.java +++ b/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.java @@ -6,14 +6,24 @@ import java.io.InputStreamReader; import java.util.ArrayList; -import raven.sqdev.editors.IKeywordProvider; +import raven.sqdev.editors.BasicKeywordProvider; import raven.sqdev.editors.sqfeditor.exceptions.IllegalBlankException; import raven.sqdev.exceptions.SQDevEditorException; import raven.sqdev.util.ResourceManager; import raven.sqdev.util.SQDevInfobox; -public class SQFKeywordProvider implements IKeywordProvider { +/** + * The KeywordProvider for the SQF keywords + * + * @author Raven + * + */ +public class SQFKeywordProvider extends BasicKeywordProvider { + /** + * Creates an instance of this SQFKeywordProvider that will set it's + * keywords automatically + */ public SQFKeywordProvider() { ArrayList keywordList = new ArrayList(); @@ -69,20 +79,4 @@ public SQFKeywordProvider() { setKeywords(keywords); } - - /** - * The keyword this provider provides - */ - protected String[] keywords; - - @Override - public String[] getKeywords() { - return keywords; - } - - @Override - public void setKeywords(String[] keywords) { - this.keywords = keywords; - } - } diff --git a/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF index dc1b608a..c662619d 100644 --- a/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF @@ -12,7 +12,8 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.ui.editors, org.eclipse.ui.workbench, org.eclipse.swt, - raven.sqdev.misc;bundle-version="0.1.0" + raven.sqdev.misc;bundle-version="0.1.0", + org.eclipse.jface.text Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.sqdevFile, diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/SQDevFile.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/SQDevFile.class index c959cdb6f9177f71d15403f602d69024719edc86..b83afd23e55a703fd7830954869c25553a493afc 100644 GIT binary patch delta 35 qcmccab=7ObK29;IqQtV)JpJOrl+-f)(vr*^{gBj(lFipR8>ImWb`C`V delta 37 scmccWb=_;jK28alqQtV)JpJOrl+-f)(vr*^{osL|rc5 z{1ZO<q^VgV4X>wp=H0!=|%X-w>W6bYJ&FU)><2?BWW+C`S#EMG8F@ z(iRsB%ZlFho1%Wgdogn?@0xxtDneLde>G}O8u6V6os2SSN3*c9qsBpY*LEs|n! zZ7mjz;j&$gWYZB|;BUpk*;sQu;VAJ)IhC7{mu!kql`6&RNAOEZ`eC!wi(?oxF+e!? zxqJ)9kt6i*{Z$b*)q00;C5w|dW#S9M(EbV@gL7mODt}WrvvDk>vTz!CmdlTqWx^^L z_G)p}#2LcLPjSs9e$Wt7qZ_ht4#RvG-%B`dA3`FF3m7qR@jtJ#OVGk4e955Wq#kz| z6HeHb!<5LPfTDh}Q9{l>s8n%9pBT3=fk}cXMN7z-S>z8vvz~fcJ0nUq?Tp!t};*7eC==R?FeMDn}_kQ@{ex3@q}=Nu-a?&<^isOdKN< Z7x)8la0eLKVF`_W>)@Kda8?(V-T|4{OL+hQ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevPreferenceUtil.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevPreferenceUtil.class index 48b6f7312e2c53ac08a61a3362be3156713b064f..fbdd784c142bbcb56b6e6857e8222e23cc65c61a 100644 GIT binary patch delta 635 zcmaKo%PWLY7{;G7nBlvSnQvT@QlzHTkV|5N$wqQnSg=CA#ndpEVXOHIr1uYSzuygJ z#$d2;-&2ahA7D@Nj>NanoI0JS^PcDTp63lXJ{{8a=fN?63fyc<4^pn(?W-U0dtKiC zL67d&8wYxNJ$hd%rYRuVWkZRcr4}(yWpbf;5z7`VQI}klw1QO%$dzK9LUOTV6WbPS z3FHm;jOqhU-%y`E>KyUAJx-U`;~nl`KyhIq+p-g6}N~`RA~~2WL7Ig zjB3?taYlZ%iXPQ$I#u(+-5`&f((Cv1or3^SPhG1T!d;wvYLxy~>a;=Z*AT1^OJBZS>8u9?^kq%#M&VSS5C zKL6T>64A!2;RLul#@#dS&VV~egtJBy&|aAK%Cr{)O&rmUOn;{;tvbVEu$`lsCTyCxpaMW2+)@jaH=@NIXx-U;*uK5ge#64H?Aq5jyi6Upolu(AH$srCrsK^*Tn<0wuH=@k}*sO1#jBcSZQj4ewfC)Pw^m$S|RBArfy7_Hh6KH^;L~{;lC0 zVyhO8EJXB+43;HWxJo0L;GD#-0WUj1k>e5u`0Q#aJ1wf;+i+#(KA9``aA`YEw`{Zu zYgN`NJ(?qnIVu^3KbOIRgm|YP7f%4F?HPmgt!tC{f9ZC+b#A)BYQ0A+Qo$JVms)jn U$J6GTv~7fap3ZH7*Vcz`zq}Q0zW@LL diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/TextUtils.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/TextUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..9c32c56ac42dbe2e5cd4e356340ef5aec9229dc9 GIT binary patch literal 3501 zcmcImYfl{K6@K2mvy8)f?FDnq0FHqLn^#w@dVb{3o7 zlC*X&Q7W|`<0@7C$sgjX#FemBM^>8;jnqHU&y_0m4@9NUJF~zp7s*mpA?Eg;bKd7X z=Q-!yzyIgYF9CGnqaZv2HI}xno1M8ki~4$J-ZnCwQ~Eu7nh&`kd;*c%+Pc=6(afdJ zv4z`u+7@^tkxGrt3|*X`93M&!CsOmt%ZZ6Za%yN|etcr=%20A@G%+$H;JJ|$2=%2i zhH2OX0^ZiPYXZJxc2O^bK)C`x0s<8&!_-Ifs|&g{r7dK1foLk5)-u;L%aHGdkAXfX zOc-876ugEIL)ptlPM|JzbPl}&N;;c2?GepRFYB~!X-(~=G-+Fgxzu~`OWSZ5l{ghd zRS5;Iy@G1g2m}ptQNK5KOCWYgOgBQEf_gLv1Twn0WG_1;IH6Sqjc5`m%jFkx4hk7& zxa}Ym3FNebH*kh*rn9E487A|nE#5P^tXY%#oxE6H;}tw49Vk-Mg4jKxuHl@*B>Z&pH@BbkI{X&WgcXFGeBO&Uw4X6G$B zCSK98uL!A3MoZhe)jPm=GX1v{oJW^rJU6tuW^Xt&UJs&2;DnQ5DT*+<5s`l1Qg8v3 zK)IcjK^>TsO>5hYWElN;CkV>Yjo>JJcV`9PMuK!3xs+}biF8UzEd59-xG2{ucGkwM zi^h^+%e6}izJtrexvpjMx>Uv~x*eLD#CSzk_3A$PxLxKD=`$Vj6)ls=-qjZ+Iu<_W z#w$&kN&3_7dU-l;S-NRUbJmtUSXtUn8*4i~)p1y;qe>B!%^JD8yfK^`Hksg#HhN#N z#J$Bt6f`6-@rvF@p*kdJn8RgO!C9OO;f6qULX|wKtNEO*nps<2&{bWks4;}^2{aX! zm$jT~XVsjoS+;uDu$NU$%{awx3}RlOYJV#Y=8epvZiS#xLj^`uSp!GAYD*aJAuT7> z;=T$Oa&NmPEp91T0=qGwt*z-MP3uY(;~E$C>J8yGOT}$gHZ0 zbyE`I%qv0fl|}ubf@$ywDKm0|WO+rm%kVxv4B`WU=HfGeQ<8Nw?VNL%C3oHw{6uOv zG|1EH>d@3AyCW?SHgYprYjK=)m*IY<;OEk+YUgyD8JoDccf`>tJekc~Y5kHR&#KpU zkIQpXAROvUndd8YCyzHil_7*6|B0J#J@D}gR0h8A&w3;0re}Q-b$ZqxnV!k=@+ z1BKTB?SUwcIbUQv9(jcroxICcfBYFL_PZQ&Tol&;#~DIGIDwM|=MM-^0&Mj5KSu1n zN5tdpTZr+$_U0B|zbfCFA8!A%?g@>&4wf1xj|L)BnNuTiG^2{ouj7ofnd$~a3tH*J z&}icmB}R)l+IjEbSN`1i8h&w{XxN(k*vXF`d_&SAD)=QlTeQX`)!o-csRzneH`zwT!U!fXm7zK!XHK-t{{mNMlphMzF)_L z;}v%bIL8$?**UI{GT8eI;u0vW2zHT{gcIo4afdpn}ggnaKi0sw0M5I0XZB zSixzSWOEH~amsWfkIPsmOZUj;2LJN-DLYO|+-3E_E~^g;thQmU!0KhZd4N@EwZrOZ zgcMOmS|dl&+9PSTxvSfXe?y*t7yK`KeBOb_I9ctl@9J-_bF{QRbKfiK zW4=e*|8ltBlTsx+0{DnM@iA)gD<=Fg<^5|XDYq}q7m^CG6I`j(5{49rXICKZ+Dzw!T*lnKPC7_|0nQ2LZSfveWosHYkrC! z&tCAo9FVgpTJ5Xr>Z`5!J^a2WoJ)1}kGB8ql}x)+$OZcu2ig-(pFgl+KjWnN+yP6* zWH`#{UEZVY63MUIZc%u*Y2@e3bi1ou%HaMknBNq@bkuNsd?Gi0iU<2p)zlt^s=?{V t7rcJKsDB}if8}KS5>0%L<8MXiItu7&OVFKwuS^bs5_kf?U>Y9$^1qrc_eB5z literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/SQDevFile.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/SQDevFile.java index a883036c..d7085413 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/SQDevFile.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/SQDevFile.java @@ -21,7 +21,7 @@ import raven.sqdev.exceptions.SQDevFileNoSuchAttributeException; import raven.sqdev.exceptions.SQDevIllegalFileChangeException; import raven.sqdev.util.SQDevInfobox; -import raven.sqdev.util.StringUtils; +import raven.sqdev.util.TextUtils; /** * A SQDevFile contains some project specific information for the @@ -266,7 +266,7 @@ public boolean isValid() { } for (String currentAttribute : getAttributesAsString()) { - if (StringUtils.countMatches(completeFile, currentAttribute) > 1) { + if (TextUtils.countMatches(completeFile, currentAttribute) > 1) { // Each attribute may only be specified once return false; } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ColorUtils.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ColorUtils.java index e9c7df87..a270afe1 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ColorUtils.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ColorUtils.java @@ -36,7 +36,7 @@ public static RGB decodeRGB(String str) { RGB rgb = new RGB(0, 0, 0); try { - if (StringUtils.countMatches(str, ",") != 2) { + if (TextUtils.countMatches(str, ",") != 2) { throw new IllegalRGBSyntaxException( "The string \"" + str + "\" has an illegal syntax for decoding as RGB!"); } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java new file mode 100644 index 00000000..b8f00f54 --- /dev/null +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java @@ -0,0 +1,49 @@ +package raven.sqdev.util; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.text.IDocument; + +/** + * A class containing various static util methods for usage with editors + * + * @author Raven + * + */ +public class EditorUtil { + + /** + * Gets the word(part) in this document that occurs directly before the + * given offset. It will take all characters that are considered valid by + * TextUtil.isWordPart(char c) + * + * @param document + * The document to search on + * @param offset + * The offset the search should use (has to be in range of the + * document!) + * @return The found word(part) + */ + public static String getWordBeforeOffset(IDocument document, int offset) { + Assert.isTrue(document.getLength() >= offset); + + // get relevant content in reverse order + String relevantContent = new StringBuilder(document.get().substring(0, offset)).reverse() + .toString(); + + String word = ""; + + for (char currentChar : relevantContent.toCharArray()) { + if (TextUtils.isWordPart(currentChar)) { + word += currentChar; + } else { + // word has ended + break; + } + } + + // bring the word in correct order again + word = new StringBuilder(word).reverse().toString(); + + return word; + } +} diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java index 42c87434..81571d02 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java @@ -157,8 +157,8 @@ public static String getArmaProgramDirectory() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_KEY - * preference that holds the path to the ArmA folder in the programs - * directory + * preference that indicates whether matching brackets should get + * highlighted * * @see {@linkplain SQDevPreferenceConstants} */ @@ -170,8 +170,7 @@ public static boolean areMatchingBracketsShown() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY - * preference that holds the path to the ArmA folder in the programs - * directory + * preference that indicates whether the current line should be highlighted * * @see {@linkplain SQDevPreferenceConstants} */ @@ -180,11 +179,23 @@ public static boolean isCurrentLineHighlighted() { .getBoolean(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY); } + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY + * preference that indicates whether the content assist will insert the + * proposal automatically when there is only one proposal + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static boolean isAutoCompleteEnabled() { + return getPreferenceStore() + .getBoolean(SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY); + } + /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY - * preference that holds the path to the ArmA folder in the programs - * directory + * preference that indicates whether matching brackets should be highlighted * * @see {@linkplain SQDevPreferenceConstants} */ @@ -196,8 +207,7 @@ public static Color getMatchingBracketHighlightingColor() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY - * preference that holds the path to the ArmA folder in the programs - * directory + * preference that defines the color for the highlight of the current line * * @see {@linkplain SQDevPreferenceConstants} */ @@ -209,8 +219,7 @@ public static Color getCurrentLineHighlightingColor() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_EDITOR_SYNTAXHIGHLIGHTING_COLOR_KEY - * preference that holds the path to the ArmA folder in the programs - * directory + * preference that defines the color for the hihlighting of keywords * * @see {@linkplain SQDevPreferenceConstants} */ diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/TextUtils.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/TextUtils.java new file mode 100644 index 00000000..14b7f75e --- /dev/null +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/TextUtils.java @@ -0,0 +1,201 @@ +package raven.sqdev.util; + +import java.util.ArrayList; + +import raven.sqdev.constants.TextConstants; + +/** + * A class containing various static text functions + * + * @author Raven + * + */ +public class TextUtils { + /** + * An array containing all special characters that are allowed in project + * names + */ + public static final char[] ALLOWED_SPECIAL_CHARACTER_PROJECTNAME = { '.', ' ', '_' }; + + /** + * Counts the occurence of a String in another String + * + * @param str + * The String to be searched + * @param match + * The String to be searched for + * @return How often the searched string has been found + */ + public static int countMatches(String str, String match) { + int counter = 0; + + while (str.contains(match)) { + counter++; + + str = str.substring(str.indexOf(match) + match.length()); + } + + return counter; + } + + /** + * Checks if the given name is valid.
    + * A name is considered valid if it starts with a letter and then continues + * with either letters or digits or any character specified in + * allowedChars.
    + * If you don't want any additional characters to be allowed just pass + * null + * + * @param name + * The name to validate + * @param allowedChars + * A list of additional characters that are allowed for this + * name. May be null + */ + public static boolean isValidName(String name, ArrayList allowedChars) { + if (name.isEmpty() || name == null) { + // an empty name can't be valid + return false; + } + + if (allowedChars == null) { + // initialize empty list + allowedChars = new ArrayList(); + } + + char[] chars = name.toCharArray(); + + if (!Character.isLetter(chars[0])) { + // name has to start with a letter + return false; + } + + for (char currentChar : chars) { + if (!Character.isLetterOrDigit(currentChar)) { + // check if special character is allowed + if (!allowedChars.contains((Character) currentChar)) { + return false; + } + } + } + + return true; + } + + /** + * Checks for the reason the given name is invalid. + * + * @param name + * The invalid name (mustn't be valid) + * @param allowedChars + * A list of additional characters that are allowed for this + * name. May be null + * @return The error message explaining why the given name isn't valid. + */ + public static String whyIsInvalidName(String name, ArrayList allowedChars) { + if (isValidName(name, allowedChars) || name == null) { + // if it is a valid name no error message can be found + return null; + } + + if (name.isEmpty()) { + return "A name must not be empty!"; + } + + if (allowedChars == null) { + // initialize empty list + allowedChars = new ArrayList(); + } + + char[] chars = name.toCharArray(); + + if (!Character.isLetter(chars[0])) { + // name has to start with a letter + return "A name has to start with a letter!"; + } + + for (char currentChar : chars) { + if (!Character.isLetterOrDigit(currentChar)) { + // check if special character is allowed + if (!allowedChars.contains((Character) currentChar)) { + return "Invalid character '" + currentChar + "' in \"" + name + "\"!"; + } + } + } + + // one of the above has to have matched + return null; + } + + /** + * Checks if the given name is a valid project name + * + * @param name + * The name to check + * @see #isValidName + */ + public static boolean isValidProjectName(String name) { + ArrayList allowedChars = new ArrayList(); + + for (char currentChar : ALLOWED_SPECIAL_CHARACTER_PROJECTNAME) { + allowedChars.add((Character) currentChar); + } + + return isValidName(name, allowedChars); + } + + /** + * Get the error code for why the name isn't valid + * + * @param name + * The name to check (mustn't be valid) + * @see #whyIsInvalidName + */ + public static String whyIsInvalidProjectName(String name) { + ArrayList allowedChars = new ArrayList(); + + for (char currentChar : ALLOWED_SPECIAL_CHARACTER_PROJECTNAME) { + allowedChars.add((Character) currentChar); + } + + return whyIsInvalidName(name, allowedChars); + } + + /** + * Checks if the given character is a bracket + * + * @param c + * @see #BRACKETS + */ + public static boolean isBracket(char c) { + for (char currentChar : TextConstants.BRACKETS) { + if (currentChar == c) { + return true; + } + } + + return false; + } + + /** + * Checks whether the given character can be part of a word + * + * @param c + * The character to check + */ + public static boolean isWordPart(char c) { + if (Character.isLetterOrDigit(c)) { + return true; + } + + // check for valid special characters + for (char currentChar : TextConstants.SPECIAL_WORD_CHARACTERS) { + if (c == currentChar) { + return true; + } + } + + return false; + } + +} diff --git a/plugin/Raven.SQDev.Wizards/bin/raven/sqdev/wizards/sqdevProject/SQDevProjectWizardPage.class b/plugin/Raven.SQDev.Wizards/bin/raven/sqdev/wizards/sqdevProject/SQDevProjectWizardPage.class index 02ad292528ec3c5807abadc5151824744622900e..de42ec8abec5d0991012e814545f24e0d33c5cc5 100644 GIT binary patch delta 35 qcmbR1G}~!|n1Gm6QDRwYo_=v*N@|&YX-Q^|en@IX$!0x)_W}UpPz>S# delta 37 scmbR3G}mc^n1F;#QDRwYo_=v*N@|&YX-Q^|esD=qW?uSc9f9`(0RIOKwg3PC diff --git a/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/sqdevProject/SQDevProjectWizardPage.java b/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/sqdevProject/SQDevProjectWizardPage.java index 1349641a..92f1335f 100644 --- a/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/sqdevProject/SQDevProjectWizardPage.java +++ b/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/sqdevProject/SQDevProjectWizardPage.java @@ -20,7 +20,7 @@ import raven.sqdev.util.EProjectType; import raven.sqdev.util.SQDevInformation; import raven.sqdev.util.SQDevPreferenceUtil; -import raven.sqdev.util.StringUtils; +import raven.sqdev.util.TextUtils; import raven.sqdev.util.Util; /** @@ -215,8 +215,8 @@ private void validate() { } // check if the entered project name is valid - if (!StringUtils.isValidProjectName(getProjectName())) { - updateStatus(StringUtils.whyIsInvalidProjectName(getProjectName())); + if (!TextUtils.isValidProjectName(getProjectName())) { + updateStatus(TextUtils.whyIsInvalidProjectName(getProjectName())); return; } diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class index 63d717c73b3062e076882a34d99b0108aeb6204b..900ba935a82d77dab660297781f56d95eb94220e 100644 GIT binary patch delta 707 zcma)&OHUI~7>1u|>C8~ZNJ;<|Q==vbt&|XSqY064iAEzL1T9_%n3lmZg?6ZbmnvSs z3l}*G(Vcr2;Gz^wOx*et`~fDK_z#Tn6j)%~xcN@L_nhy2pY!D_zgL!i`TgM&aD-(I zk3y5^RCX;Y)vIUU`VItBX2xCpiz6R{k#FJU#0xyhE~@JPaPEuEBQ^1 z+?4Ia4H68CZ|c#K7)b*kBMRl>v!~2g+oO{bP1->{hHEfJM%dc%_88*^69g4>H@WGd zaZAD2aJG~6?RLWQGfA>g?iysdCvmKCJME?wyfwAGI#c3@)}T)FL}Nzm*TdeYJQE#y zi$2Y)!5s7AjUFza$03+ie_fyIZG=`v{54OD>f}L*daTO1+H;j%=vd` z%{={QJ`#(D^9-)x1V(eDbKI2LWHh|S?HqSr;|s3@?ytyE??zmOTqbm&(#amWsG*w> zJ=>z{wxU!H@qmXYJdzVS$}d71w#2C=C{ash!Km5w6>JiF4$HqZgl~1 zD+otTy!0P{7o})|@zyKGnrovm4@mcOJ5d&1H3n|3EEV* z*g7NJbDf_Ys@CbL4O;YZR$!bz6YRZk@wDWc>U3W64+yq24`(y6Y$!DtPeyaiJ3WQN zhrA{M!WK8#FL1`9`Dl8?AgX>kw>QOz8w?4m6QPk%AQ?)>0zLU`JRP%0a7&rSL05#7 zg@d%9PJOr4I=q)9!zyg-mJzZRIr6Gx9BYp-VsV!yfy`%CH4H`t){1gG6KK~&CIwQ< z;eo|N9%-CtA)d?U1a^DxK&BI9TqQmsdDm^9Ot#g8%k-1lQ?T-^^{r8x=wwUx@^L6$a-?)?~`uE^|lM z3PImI_sZP=h{HEqQ=HYK_7$soeMIQMNhghT;h~!rde&L(TeEVqhbKHm@Jvrg#BW** zVj9Owldh^>*XH6_nO9{d|H7F5Z;XD8G@!-8?A3qaC%O)!bq&M(7sJ1dp#flnrg`@V DFU^qf diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class index 7dc048702499f3d2f5de559e946b6493a9cfbdd7..27ccceb521cc42b7451f3f5744f2fa2adcbe41e1 100644 GIT binary patch delta 689 zcmY*VO=}ZT6g@9yK3XlvfVHs_UZoT}ZBqq9Y?|7nN&01NZ2YLPesq#f&A?`}0=-m$0TF zzz`FC!O;HTk6=AqGd4^o;yqq7HzKBE6m2v0#COwfrD~hLsUpsBY9QMpxbY7YSCL?N z)@HoXjO8_Fz5jZ6#WWntdBpv);q#K~_@?7?!}Bc9=T9x$<~hsp%$iRPCa>1qs_Pkc zOQK@`pKO>V6>*_z2MkGl>5u4D32*|kcv-4zBo?b>e5Q;}pC7Qa}J=$E>KQw$k8 zQWs_EEX#;3={%bjd(s&;E51pWT(aSr5t7*MjG@1#PhnD|$%z3t!jr+RZks>LHcjeKHK7lj0tRDE2@` zFS;PQIurE>G8n}yE?^!Pv4{wk5Jdqo6fuT%#8JjLY$V`N?O_6&n8b4=QAY|dFoi9u zw~@wcWbp>m*uf0mlHz-+KVS|YN%=V0-fLfu6J*_dySRo z3gTjD7q0ySB1BN=vK062zv#A0@zvmFm~#$uKIUKh{^Pc*>x-Yj8TjA`NnUA%eplOx-A1)EkuiA8jj*K6Lz8z@LUAZJ% zwL^B;7DE4=Vn#=yZqR#2m+Y8*+oVktntOV}PT83z9YkRu^r_g#h|76QkNXoZ@4ckV zYvyG12U2{bkI$s330|R}H8QM|Ws^bb46!YEha9`)`9guOjId9U1Hng>_|7N~#J$!W z!b2Vjl1Y;A4khRt^SqZ1&)Aa0g&Zvmuq43?cv5ASipai%r}#uweq@JksZ_;CfMHQ? Lff&`qG{({mt3pzl diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java index 7f9be29e..462f9307 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java @@ -37,13 +37,13 @@ public void initializeDefaultPreferences() { // set default profile store.setDefault(SQDevPreferenceConstants.SQDEV_INFO_DEFAULT_PROFILE, System.getProperty("user.name")); - + // set deafult map store.setDefault(SQDevPreferenceConstants.SQDEV_INFO_DEFAULT_TERRAIN, "Altis"); // set default autoExport store.setDefault(SQDevPreferenceConstants.SQDEV_INFO_DEFAULT_AUTOEXPORT, false); - + // let the preference page always ask for saving store.setDefault(SQDevPreferenceConstants.SQDEV_PREF_ALWAYS_SAVE_ON_EXIT, false); @@ -57,6 +57,9 @@ public void initializeDefaultPreferences() { store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY, ColorUtils.getRGBValuesAsString(ISQDevColorConstants.CURRENTLINE)); + // enable autoComplete + store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY, true); + // set syntax highlighting store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_SYNTAXHIGHLIGHTING_COLOR_KEY, ColorUtils.getRGBValuesAsString(ISQDevColorConstants.KEYWORD)); diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java index a5e420f5..292989af 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java @@ -11,7 +11,7 @@ * The preferencePage that contains all settings concerning the editor * * @author Raven - * + * */ public class SQDevEditorPreferencePage extends SQDevPreferencePage { @@ -43,7 +43,12 @@ public void init(IWorkbench workbench) { behaviour); addPreferenceEditor(enableBracketMatchEditor); - + addPreferenceEditor(new BooleanSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY, "&Enable autoComplete:", + "Enables/Disables autoComplete meaning that content assist will insert the proposal automatically if there is only one choice", + behaviour)); + + // preferences for the coloring Group colors = createGroup("Colors"); From a4c1d39afd5d30a697ec5ba009f87e144cdd35f9 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Sat, 2 Apr 2016 23:48:50 +0200 Subject: [PATCH 2/4] tweaked on SQF command collection; Implemented Keyword framework; improved content assist with descriptions --- .../raven/sqdev/editors/BasicCodeEditor.class | Bin 5643 -> 5646 bytes .../editors/BasicContentAssistProcessor.class | Bin 3722 -> 4331 bytes .../sqdev/editors/BasicKeywordProvider.class | Bin 3097 -> 915 bytes .../BasicSourceViewerConfiguration.class | Bin 5928 -> 5931 bytes .../editors/CharacterPairHandler$1.class | Bin 612 -> 612 bytes .../sqdev/editors/CharacterPairHandler.class | Bin 5289 -> 5292 bytes .../sqdev/editors/EditorKeyEventManager.class | Bin 2173 -> 2191 bytes .../sqdev/editors/EditorKeyEventQueue.class | Bin 2301 -> 2319 bytes .../raven/sqdev/editors/KeywordScanner.class | Bin 5394 -> 6079 bytes .../sqdev/editors/activator/Activator.class | Bin 1333 -> 1339 bytes .../editors/sqdevEditor/SQDevFileEditor.class | Bin 2443 -> 2478 bytes .../editors/BasicContentAssistProcessor.java | 24 +- .../sqdev/editors/BasicKeywordProvider.java | 122 +- .../sqdev/editors/CharacterPairHandler.java | 1 + .../sqdev/editors/EditorKeyEventManager.java | 2 + .../sqdev/editors/EditorKeyEventQueue.java | 1 + .../raven/sqdev/editors/KeywordScanner.java | 21 +- .../sqdev/editors/activator/Activator.java | 2 +- .../editors/sqdevEditor/SQDevFileEditor.java | 17 +- plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF | 5 +- .../constants/SQDevPreferenceConstants.class | Bin 1530 -> 1704 bytes .../exceptions/activator/Activator.class | Bin 914 -> 920 bytes .../infoCollection/SQFCommandCollector.class | Bin 3234 -> 17707 bytes .../sqdev/infoCollection/base/ELocality.class | Bin 1490 -> 1859 bytes .../sqdev/infoCollection/base/Keyword.class | Bin 1238 -> 4182 bytes .../infoCollection/base/KeywordList.class | Bin 326 -> 5347 bytes .../infoCollection/base/SQFCommand.class | Bin 4056 -> 12045 bytes .../base/SQFControlStructure.class | Bin 0 -> 436 bytes .../infoCollection/base/SQFElement.class | Bin 0 -> 2892 bytes .../sqdev/interfaces/IEditorKeyHandler.class | Bin 0 -> 466 bytes .../sqdev/interfaces/IKeywordProvider.class | Bin 0 -> 287 bytes .../raven/sqdev/interfaces/ISaveable.class | Bin 0 -> 243 bytes .../SQDevEclipseEventManager$1$1.class | Bin 0 -> 3191 bytes .../SQDevEclipseEventManager$1.class | Bin 0 -> 2327 bytes .../SQDevEclipseEventManager.class | Bin 0 -> 1601 bytes .../pluginManagement/SQDevPluginManager.class | Bin 0 -> 3179 bytes .../constants/SQDevPreferenceConstants.java | 12 + .../sqdev/exceptions/activator/Activator.java | 2 +- .../infoCollection/SQFCommandCollector.java | 855 +- .../sqdev/infoCollection/base/ELocality.java | 18 + .../sqdev/infoCollection/base/Keyword.java | 180 +- .../infoCollection/base/KeywordList.java | 237 +- .../sqdev/infoCollection/base/SQFCommand.java | 512 +- .../base/SQFControlStructure.java | 21 + .../sqdev/infoCollection/base/SQFElement.java | 148 + .../sqdev/interfaces/IEditorKeyHandler.java | 51 + .../sqdev/interfaces/IKeywordProvider.java | 26 + .../src/raven/sqdev/interfaces/ISaveable.java | 43 + .../SQDevEclipseEventManager.java | 136 + .../pluginManagement/SQDevPluginManager.java | 151 + .../bin/raven/sqdev/activator/Activator.class | Bin 1301 -> 1307 bytes .../sqfeditor/SQFKeywordProvider.class | Bin 2436 -> 1219 bytes .../sqdev/editors/sqfeditor/SQF_Editor.class | Bin 4672 -> 4675 bytes .../src/raven/sqdev/activator/Activator.java | 2 +- .../editors/sqfeditor/SQFKeywordProvider.java | 67 +- .../bin/raven/sqdev/activator/Activator.class | Bin 1015 -> 1021 bytes .../sqdevFile/ESQDevFileAnnotation$1.class | Bin 618 -> 751 bytes .../sqdevFile/ESQDevFileAnnotation$2.class | Bin 620 -> 774 bytes .../sqdevFile/ESQDevFileAnnotation.class | Bin 2822 -> 2847 bytes .../sqdevFile/ESQDevFileAttribute$1.class | Bin 700 -> 879 bytes .../sqdevFile/ESQDevFileAttribute$2.class | Bin 693 -> 837 bytes .../sqdevFile/ESQDevFileAttribute$3.class | Bin 685 -> 828 bytes .../sqdevFile/ESQDevFileAttribute$4.class | Bin 685 -> 851 bytes .../sqdev/sqdevFile/ESQDevFileAttribute.class | Bin 2662 -> 2691 bytes .../bin/raven/sqdev/util/FileUtil.class | Bin 3466 -> 4516 bytes .../raven/sqdev/util/ResourceManager.class | Bin 2830 -> 8051 bytes .../bin/raven/sqdev/util/SQDevInfobox$1.class | Bin 1805 -> 1814 bytes .../bin/raven/sqdev/util/SQDevInfobox.class | Bin 1894 -> 1894 bytes .../sqdev/util/SQDevPreferenceUtil.class | Bin 5374 -> 5617 bytes .../resources/sqf/SQFKeywords.txt | 60790 ++++++++++++++++ .../src/raven/sqdev/activator/Activator.java | 2 +- .../sqdev/sqdevFile/ESQDevFileAnnotation.java | 35 +- .../sqdev/sqdevFile/ESQDevFileAttribute.java | 31 + .../src/raven/sqdev/util/FileUtil.java | 84 + .../src/raven/sqdev/util/ResourceManager.java | 405 +- .../src/raven/sqdev/util/SQDevInfobox.java | 7 +- .../raven/sqdev/util/SQDevPreferenceUtil.java | 27 +- .../sqdev/wizards/activator/Activator.class | Bin 1054 -> 1060 bytes .../sqdev/wizards/activator/Activator.java | 2 +- .../preferences/activator/Activator.class | Bin 1164 -> 1170 bytes .../SQDevPreferenceInitializer.class | Bin 3049 -> 3185 bytes .../pages/SQDevEditorPreferencePage.class | Bin 3053 -> 3057 bytes .../pages/SQDevMiscPreferencePage$1$1$1.class | Bin 0 -> 1150 bytes .../pages/SQDevMiscPreferencePage$1$1.class | Bin 0 -> 3584 bytes .../pages/SQDevMiscPreferencePage$1.class | Bin 0 -> 2080 bytes .../pages/SQDevMiscPreferencePage.class | Bin 0 -> 2827 bytes .../pages/SQDevPreferencePage.class | Bin 8954 -> 8805 bytes .../ValueSQDevPreferenceEditor$1.class | Bin 0 -> 1266 bytes .../ValueSQDevPreferenceEditor.class | Bin 0 -> 5076 bytes plugin/RavenSQDev.Preferences/plugin.xml | 6 + .../preferences/activator/Activator.java | 2 +- .../SQDevPreferenceInitializer.java | 4 + .../pages/SQDevEditorPreferencePage.java | 3 +- .../pages/SQDevMiscPreferencePage.java | 134 + .../pages/SQDevPreferencePage.java | 11 +- .../ValueSQDevPreferenceEditor.java | 216 + 96 files changed, 64123 insertions(+), 292 deletions(-) create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFControlStructure.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFElement.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IEditorKeyHandler.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IKeywordProvider.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/ISaveable.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager$1$1.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager$1.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/pluginManagement/SQDevPluginManager.class create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFControlStructure.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFElement.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IEditorKeyHandler.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IKeywordProvider.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/ISaveable.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevPluginManager.java create mode 100644 plugin/Raven.SQDev.Util/resources/sqf/SQFKeywords.txt create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1$1$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ValueSQDevPreferenceEditor$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ValueSQDevPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ValueSQDevPreferenceEditor.java diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCodeEditor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCodeEditor.class index b64ae4bf7413e414838472ec97e4ff2eee762f53..4f2660f5200442f0220604fdd5292db703fc937e 100644 GIT binary patch delta 37 scmeCy>C@RTg-1eH!>1^*EHzKRxG*KPOg}TPB(*3lF*$YfN}eQ60RFEHoB#j- delta 18 ZcmeCv>DJjWg@;K?V`8D`=5;&?oB%vk1_J;9 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicContentAssistProcessor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicContentAssistProcessor.class index d1f3e2b480c531aa24ebe8790182334edf5b290c..29db48fd8cfd0502eecc92412ee199f905f6dd42 100644 GIT binary patch delta 1845 zcma)+S!`5g7>1v}vz%diickt=v@De-?X=X13l?XfQj1EZlw#3R7WK4q+76C0aAqi! zs)IYCxE)1{S{9e8XoArUR#MYD6K}jT#w)M%!o+wfk%-@!PItGQod10P^1k2uE&n;T z?3eNd-~9RISHMktqEVm-+2!t%Pb(tsOifj=*)safL@2dCYW9UA%}m$-3e&lrI~0Xe?o*0V@x9mRGeQT_vG}G?gJl{0j;frG zO*&27rC2x((w4N+W>ir;9T>_(DrnZ(LW{l16U?;gY~yZ)x2xB%8YE74Ra3CBknP;7 zagXF-(r*r~)6NcsOMEF7%h7RNaU; ziRtX6Md6=Hr=JSqIuDVsk9jKH`xJHd8C7Z@@y@q@@GJ>iIw?efH*O|+(!G+Ns$i4D z)u(gN;c}X3qnYZmV*8w4@sp%qXC8;`7HzQ2$;-n!kMO7Bxj*9L z1qD7{va7YL?Vq*Y6$_@iY`j^d5si2}-_tmb6kFz?r@FxD=Ko|Xnz)jYdU@>ce9_O=&--4@TaKF*Qh}BB^1@)InIg#pT&fwN zR8jT?%UWu)tQurl_2*obC730YWz7hpDN94xJWvjP9^E;LXx2PzRpn!9i{ecrKFc$gP*j>i(!R z_i2xU`iwn27J(af_DP>UBJR;)+CwWt>0U>{jxA8J0Jk@f39C>OI=~&~) z(+;vd2R$R^SphWSxy)*fip$h$Y`-GPd>Tq)sk{}kqRE}pJWL}AyU@wTPxc3&EL~@lW8gfcCmP4dhN3}3DUp%2K1Oe zqJQ_#85XrqrvtwzUneGAQecbT)s$Fv(S%2*wXX^^LZvTwtI*B^T zI=ikgs7RR?>G_X&Sj_H-TXOaqb|tl<#W4*XXw{l8X33){c}X z;*nq{q0aInD?}siHKsEWPp8;svd-p2%&hWcou~Gnv{c9nc`vMg6LHtEKcGD#^+fuT zY@KJn;_xL?#Ejv9v=%!JL$xj_waVhuC27oLlk5ix%YFv|w$Vxtw-c9V(!=sL67p?l zC%p{HIYgga+nvma<%m508vUGMfOqA5Pi!Ab)W`Ca*VxV1vVPz`ev-3Q;19@DWsJhQSiGW#Ko$X-5=kh!$StCEQZ}6<(I*77~3dONxhA z1t=(R*L|;v?{%?^;JHS^B6f|f7AMx}z;B@}Hp_~M#gYO_n~@k^eg}X diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicKeywordProvider.class index 368372103bfee1ea02ee8b4d0f23adedb1a83b98..16f1833471b880c04d54f0842e0360ac301089c3 100644 GIT binary patch literal 915 zcmb7@O>fgc5Qg8iP23nKO$vmMQu@JHngGjz8>kXQAR$tU6jTXr8+#kJHC|Y|LHr`F zAW>BUi7OI63Nh;#kyNNs51!qfoq7Duc>L@4w;urR;kplpp>4!iraXHe%Q2U+%C*V( zBax}-nf&-coA`y%V--u|!((Xdim~8{NJo5YxGSUFM}^_$G()AiG&>@a8Gm{N!7#Ts zfo2T1`?Fa)x~G$bkV>a~C^E^*?7qtK`wY#$sSk}DXp_sBfxTv^s>~i$I%23iP^ro{ z7~J;yHiOsGu?*m%5h6sb3WkLcRRnf-HpFQJ4D)@J%IEuUhtj+h!$eX{Uq>R@7Dm}~ z>Gbk9id1)IR3Fzbl3X9je5wcr-d>-{SLyLpTb-9f_?Yu?g`sPN*D2B96gtaQ2u fSo|k4D7;;&`&NN#O`=L1#TUJx>BUvbc5v+vm%7up literal 3097 zcma)8ZF3XX6@IR?_S#~>Mz#nv24wS6Nj9iZ2O10nBA}6xF<{rOAup_@i?v4VI=d?q z)8?g3+Cb8z4ed-O`H-2+bjH(}WQNXwO~ZubTW9(`ANvP7{RNpM&U06*AX6np9`D_I z_nb%PJm)!Q^{;O}xd&hn@92mKq+D}e+F9@UlAO=VlI1(DmwnRotl~+zaK&*;r(I{> zDoIy|CeS%+&YRhaY0qRwr)Oo+*U>7ly%|RS0e^wEOEpAKpzD0$KGK-)TK3G4z`DA@ znB)4gB+z}nsonaz-BDN8O~pBZcFR*+f(f)9v~0^iED%klCj_*dQ<5=65jU_79qk~v zfi*DH-39||VF+{-EL)zcUY?fjxH(;s0`Y=VG%FLPYpH#BsQG1!Ib;gW(r!i_Q(H45 z{g4p4CQ|7piK$Sw7|_wCBe{y}8bbnW$9%JRX~dihBB3FHy++^-sV2DT2^~8b@56?> zeNP)w{Qi*3WS#98b|9nZ>lb(;_3+vMZ>iH0G3-KC$8LdM$DPT_V#S*CWVYzIGV4}t z-?}Wbv(B`a9d@P-`~)48k5??qQdN~j_gH2=5!hDvzwTsTQ}#L@qwoURReh_HJ?gsV zLc#L<7@HxkETj~F6%35vlp?~q%23%8d8M|~2HFu*24@Y7VVp7gPQVKX!zwA&^KX<_c*ed} z^vY6$zH3CRrdf4CvFf_g_H$*^6%aYPh9{w~>bNF@L0GiTvr$*K z7>uxx%ELp48QXeNs1)Cr#|HLkW5%I_4l3{A+i7nMCNfI#(!fO}Wo_26>=??J)xp%Z z+)p`g`_gr*a}4A73q?8STaInul5*;p`0YHSrjfG)o44gWn3Y zcoiubww4-BPlSH|xzL8+3+$gXEj93y7ace0mt|5(QSF_J-_5OL+4PdWc}dzy-*J)^ z$DZj`Y+O@pT>qZ-;yXhyy<~$No7INGX%AXeB}fa613EIxSf7dB zMwhxI{?4Na9^o}kAfTVu0Rrx#>uzl1iBWUICj5vyfk)93LJo6PkX@Nu*!)k#qMu^x zB6PL8$>V4M+ZvecZGh?up?YbQL&pZ#%?HIb5qY5}#a}K|SFab{rx&?c%m+5NwX`L7G5qCPhKFesNBOvB3 z2B(&>uh3~8T10n$xLu-*dbA5S4)t_i{p-qqgNG+nu2TnE@9k@e?$Z{L+0>fQ_MY0c zgrS~0cwz~;_t4ef(`lBL@bk|x$Oro;U(-ZFOSF8r^2L3)Pcr>WIQc31ZeujcZ|x=U zXitAn&8_xq>k`gye}}>5z1nebv;X3#>nnj zWHEuqFo~1+C8lr=7VkZty@U(6j%mD&BL2qp7AMd@FoS!XK8n)AXjK%2l*aKfenBrb z1vN2AtO#i>gm)*gCBTm2O{8%iPxI+B^j12mc|OZKRs20@{~8;042sS*D=dhvL#Q1D zmp))yWQ9MzqV-cGHq-Grh8oC3oMpmFvJ2#@>piq7%5L(Kcpn3IVb(-bERd=J{+AZ9 zUI}RCE-F(4%dkHS?C;?DC0see(skokcktpO+En>wYUf*JH(veA2Ux3|;=fzQ>&h$f z{>m4DGc)VMPG(ug3Fbe_wI=!rG6N1|odd*x&5F#Cl?7V=n)WXuL&kUG73{~WIEZV= z;SD1Eff#S$G^;R1uTZpSf%~uV7p1wiOBShOr zthab}ngpq{Xux+b+Kd%;ZzN!Jmm<5o_Dg7Ap6L)!*% diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler$1.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler$1.class index c09a138d9f2d5dc031fca75cdefe9f9370875b61..e6397de44c91a6295a201bb2331a47916df85013 100644 GIT binary patch delta 17 YcmaFD@`PoBEEB6L0}F%tWF;mi04%`+?f?J) delta 17 YcmaFD@`PoBEEB5=0}F%NWF;mi04%cu>;M1& diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/CharacterPairHandler.class index 21b030f11a26a15b0fc4f812c6dcb43861e7a6b3..9a8c5bd04ce4a2575f0e9b877097a5ee8ca4206e 100644 GIT binary patch delta 469 zcmWNN%}Z2a6vlsVbfuZ`>)t!#M|vxX@FUWR63R+2l!AyLi#|3s*&VaRR5Lar1uoi^ z+1LvrRIIU1>9J+(v#?2l-VvxOLS_F$~j*+wx<_I4~6G!rGMY!?-@ zQpFy&vX^G|iMG$x6bELwQvzLh9AYC!R6a@*$Jozt+Ucf)6Cx)$$0^QpntsI$XSl*y z1{H76!!1=uNO4ykqY0@aM!52b~~BpbLd?+@56xmL-w@x=C(&F`2}Wm?u}@g-ixbLyF=K?`>C zQubfzsMk8=t<1i&hs#IJNBh0J%UQtTv#oP4M!xFLz7c21-g5`sWfJ@(;1`=&mdD_TxL{~-sh^~mPiFVk(UcLEeH~9w~gJaf7tya=%fr+!zc(j>n In~V?r2OKYL(EtDd delta 451 zcmWNNOGuPq6o#J<{K1(~n}7b9m`2A7DLRU!Rw$B!WD1&rj;OWBv^2`^ zL}MdHAK7b-I2^?5`;I~*kq82M#L@0g$IeZ8WpS0;c**8EIou$Z4DwcDBmAoWo&XAQ zQG|~Y89yMEhuo!{d@3j)NEwwprHXp0X_VSZ4Q)K4OX^#m@Sa+R#4$=8<2+}A7fkVz zkK&%?6`y&{0v&wg4J&lAPB-7_Wt%>B?b7__9eWJuUy)~#gA!*LQ()H!>FubHXOeKi zd6_1S8Sd~&($DFpE34^WWb##_FJiGIj%AW%K?-Yf>$=3>pqNcL;s=lUsY{(BYD*_r z9)04>Fm^E5)rn?&@VV)BctQw1{NjG%)FA+qO`>1)X5u}gg3t3$S9^!lvtLUr(ax{l3Jz@m)^XQ z$&FE5%Ll6@Nbh7h7GY**4NXi_C+D;9GrCN!XHiDAZSrmwGYMS{JVr{ge&!TsU}2D8 z;AfDWEXr0bE6X6tAPP2S1k&a9;YQodP=m4%U0l!1jojDep)e6l)QwX8IQD1$76JP>L! zC@>f>C^8r`C^1+uNHaJys7>C_HkDCxawxkit1bg8gWlx%>=~Sv4BS9@5eA#d0vsW% Nt_++EZj&=P)BrQ^C364( diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/EditorKeyEventQueue.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/EditorKeyEventQueue.class index a0f5edbdbdf04963f96fd08152ba1f7c4df2b060..2f3080260fe8abc3073f3e0fffab67c14657b30a 100644 GIT binary patch delta 274 zcmew>*e^7pnbC1#g2-e6CO*#0ypq(Sw8Z4p$puVe8xNT?GCEIwz$k_(H`$7bhsi|) zn?7#|T@9b2#In>p{o=xu)G~d9p%<85iEH7ID_|1Y{D^rfqnHMEybtNj2NUDOeU{q4`4K(#L=Sa1e9`N5M*#;5Mpp=5M%IUkYw;; XkYn&=FlO*$um;jD41tqZa-;zOMJ+9t diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/KeywordScanner.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/KeywordScanner.class index a63b1c346e371b117c42b2dd71773f88c81fe5bd..a940acbc386e5a2b70f1f360bdc703ae3bd4dbb8 100644 GIT binary patch delta 2222 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 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/activator/Activator.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/activator/Activator.class index eee6163880e8ad5dee1f307d731969cfb9d7d16a..4017057ae07e0425ec9a3159a3a32a438d5ff021 100644 GIT binary patch delta 79 zcmdnWwVP|h5=L45qQtV)JpJOrl+-f)f}GOy%sk)3yu|d>+|<01$@>`96^u1BeefyT J%*15O3;>@29L@j$ delta 36 pcmdnZwUukb5=KUy$!{1X7>gz!WK?G~nEaAa8q5~nEX}0A3;^TK3nc&m diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/sqdevEditor/SQDevFileEditor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/sqdevEditor/SQDevFileEditor.class index 2102c9100f32f7450d2451a88aaaa71b1b78560d..2ef078af3b6a24a45034a905f6a80bcd9846c5c7 100644 GIT binary patch delta 837 zcma)4TWb?R7(J8SWaGLKG1g0M1@F1lZEJ0*fi!JeFKuGf)M~U|HrZ|5X5FO8CQ=Y% zKoImv_80i%TcIyovCtpjtKfrA;tw%?ONFAbAj5n!bNJ5r&U`a(gKNS4pMQSZ0x*IV z0Uid~e#gn{6R){Yw5BvQQ?9S5T2t1|rAn$|7+TTNE2dmf>Y6;Ktv;*NRQoIUd`!Ru z!@2)th#1GDgej!#MgDYa95WIwBgL?Eiy;#$$ZW$2?T$SL(HPQ~HmzAa>8;V(y zb5>0^OYv?byddHt<|L$%VGtEn{cVyV7E1ryUSHRZ;;u{@F_XaH?n@%OZjANBSRXQG=(j#};(Gp)cWadA z5+5+IlfH>u{=n@G+#$|A2lpL3qTS;^*)Na5YuW6g>|H2637Yv1nr&V_MAswMZ>~VW6!awE|WJX=(lF03!|{&|#>7n6NQ% z(UqA$U{~%;x|udKHm+T|H1Qu8e?svBCeWsvd*7UU&OP_edtaTKPREaf);@q~Z16BK z`1DU^-*)(;+2PDf8*j++Pzn8B>R#f?t}a7Vyh++#3H*(}4b z811TxQYq(KOy}i{7Id%JF^>fv5A-#Q-};a|M7O@qkLfLoa3#ucrZ0(Ws#40$)s$jZ zR&991z-H`-;IRM;o^<-_2b^nY9^np}5bz91eZ(4UMmk6UDFG{3W#FnxL#ClbH~GF` za2&PhkY5Q{gT%mVMmdCnY;{B|uf98KRMR2gveK+Lw=DbDICJO=PLEhdr()g-10e%* zOCQW^beP*}|JlX;K548++CwCDDz<|~Vm~zyH?TCQ`Ry@q!N5hY*TC{OJU8(2JJL-9 z*=@4t;HT(;o#G|f;Kn)n8mD|2lk~iNSf(uDD&El3tkZ2xb@?2{2BFiGZBUV;IwS1~ zD9FP^%Cjh-NT;{N5UAE;mFQF^B;Wzph6`36jHj-QVg+!t;XH(?z keywords; // get the respective list of keywords if (prefix.isEmpty()) { keywords = editor.getBasicConfiguration().getKeywordScanner().getKeywordProvider() - .getKeywords(); + .getKeywordList().getKeywords(); } else { - String[][] allKeywords = editor.getBasicConfiguration().getKeywordScanner() - .getKeywordProvider().getSortedKeywords(); + List> allKeywords = editor.getBasicConfiguration().getKeywordScanner() + .getKeywordProvider().getKeywordList().getKeywordsSorted(); - keywords = allKeywords[prefix.toLowerCase().charAt(0) - 'a']; + keywords = allKeywords.get(prefix.toLowerCase().charAt(0) - 'a'); } ArrayList proposals = new ArrayList(); // create proposals - for (String currentKeyword : keywords) { - if (currentKeyword.toLowerCase().startsWith(prefix.toLowerCase())) { - // TODO: provide descriptions - proposals.add(new CompletionProposal(currentKeyword, offset - prefix.length(), - prefix.length(), currentKeyword.length())); + for (Keyword currentKeyword : keywords) { + if (currentKeyword.getKeyword().toLowerCase().startsWith(prefix.toLowerCase())) { + // add a proposal + proposals.add(new CompletionProposal(currentKeyword.getKeyword(), + offset - prefix.length(), prefix.length(), + currentKeyword.getKeyword().length(), null, currentKeyword.getKeyword(), + null, currentKeyword.getDescription())); } } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java index 2a343194..172a14e8 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicKeywordProvider.java @@ -1,14 +1,7 @@ package raven.sqdev.editors; -import java.util.ArrayList; -import java.util.Calendar; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; - -import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.infoCollection.base.KeywordList; +import raven.sqdev.interfaces.IKeywordProvider; /** * A basic implementation of the keywordProvider providing the keywords for @@ -22,12 +15,7 @@ public class BasicKeywordProvider implements IKeywordProvider { /** * The keywords this provider will return */ - protected String[] keywords; - - /** - * A list of the given keywords sorted alphabetically - */ - protected String[][] keywordsSorted; + protected KeywordList keywords; /** * A flag indicating whether or not the keywords in keywordsSorted are @@ -46,111 +34,13 @@ public BasicKeywordProvider() { } @Override - public String[] getKeywords() { - return (keywords == null) ? new String[0] : keywords; + public KeywordList getKeywordList() { + return (keywords == null) ? new KeywordList() : keywords; } @Override - public void setKeywords(String[] keywords) { + public void setKeywordList(KeywordList keywords) { this.keywords = keywords; - - // sort the new keywords - Job sortJob = new Job("Sorting keywords") { - - @Override - protected IStatus run(IProgressMonitor monitor) { - sort(); - - return Status.OK_STATUS; - } - }; - - sortJob.schedule(); - } - - /** - * Will sort the given keywords into keywordsSorted. This method should get - * executed in it's own thread if there are many keywords to sort - */ - protected void sort() { - isSorting = true; - keywordsAreSorted = false; - - ArrayList> sortedKeywords = new ArrayList>(); - - // create empty sub-lists - for (char currentChar = 'a'; currentChar <= 'z'; currentChar++) { - sortedKeywords.add(new ArrayList()); - } - - for (char currentChar = 'a'; currentChar <= 'z'; currentChar++) { - for (String currentKeyword : keywords) { - if (currentKeyword.toLowerCase().startsWith(String.valueOf(currentChar))) { - // add the keyword to the list - sortedKeywords.get(currentChar - 'a').add(currentKeyword); - } - } - } - - // convert the list into an array - keywordsSorted = new String[sortedKeywords.size()][]; - - for (int i = 0; i < sortedKeywords.size(); i++) { - keywordsSorted[i] = sortedKeywords.get(i).toArray(new String[sortedKeywords.size()]); - } - - isSorting = false; - keywordsAreSorted = true; - } - - public String[][] getSortedKeywords() { - if (keywordsAreSorted) { - return keywordsSorted; - } else { - if (!isSorting) { - // first sort and then return the sorted keywords - Job sortJob = new Job("Sorting keywords") { - - @Override - protected IStatus run(IProgressMonitor monitor) { - sort(); - - return Status.OK_STATUS; - } - }; - sortJob.schedule(); - try { - // wait until sorting has finished - sortJob.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - - throw new SQDevCoreException(e); - } - - return keywordsSorted; - - } else { - // wait until sorting has finished - - long startTime = Calendar.getInstance().getTimeInMillis(); - - while (isSorting) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - if (Calendar.getInstance().getTimeInMillis() - startTime > 60000) { - throw new SQDevCoreException( - "Waiting for the sorting of keywords has taken too long!"); - } - } - - return keywordsSorted; - } - } } } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java index 0a0135fd..1b3d42c0 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/CharacterPairHandler.java @@ -5,6 +5,7 @@ import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.VerifyEvent; +import raven.sqdev.interfaces.IEditorKeyHandler; import raven.sqdev.misc.CharacterPair; import raven.sqdev.util.TextUtils; diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventManager.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventManager.java index 33c03111..aa179b32 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventManager.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventManager.java @@ -5,6 +5,8 @@ import org.eclipse.swt.custom.VerifyKeyListener; import org.eclipse.swt.events.VerifyEvent; +import raven.sqdev.interfaces.IEditorKeyHandler; + /** * This class provides management for KeyEvents.
    * It will ask every registered handler if it wants to handle the current event diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventQueue.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventQueue.java index 30725ee0..bc6341de 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventQueue.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/EditorKeyEventQueue.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import raven.sqdev.exceptions.IllegalModificationException; +import raven.sqdev.interfaces.IEditorKeyHandler; /** * This class can queue IEditorKeyHandler for later assignment to diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java index e9dd10d5..a3163af3 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java @@ -1,5 +1,7 @@ package raven.sqdev.editors; +import java.util.ArrayList; + import org.eclipse.core.runtime.Assert; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.text.rules.IRule; @@ -12,6 +14,9 @@ import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; +import raven.sqdev.infoCollection.base.Keyword; +import raven.sqdev.infoCollection.base.KeywordList; +import raven.sqdev.interfaces.IKeywordProvider; import raven.sqdev.util.ColorUtils; import raven.sqdev.util.SQDevPreferenceUtil; @@ -148,15 +153,17 @@ public void syncToPropertyChange(PropertyChangeEvent event) { * The token the rule should use */ protected void updateRules(IToken token) { - String[] keywords = provider.getKeywords(); + ArrayList keywordList = provider.getKeywordList().getKeywords(); + + Keyword[] keywords = keywordList.toArray(new Keyword[keywordList.size()]); // create the respective WordRule WordRule keywordRule = new WordRule(new WordDetector(), getDefaultToken(), !isCaseSensitive()); // add keywords - for (String currentKeyword : keywords) { - keywordRule.addWord(currentKeyword, token); + for (Keyword currentKeyword : keywords) { + keywordRule.addWord(currentKeyword.getKeyword(), token); } IRule[] rules = { keywordRule }; @@ -189,12 +196,12 @@ public void setKeywordProvider(IKeywordProvider provider) { /** * Sets the keywords for this scanner * - * @param keywords - * The new keywords + * @param list + * The new keyword list */ - public void setKeywords(String[] keywords) { + public void setKeywords(KeywordList list) { IKeywordProvider provider = getKeywordProvider(); - provider.setKeywords(keywords); + provider.setKeywordList(list); setKeywordProvider(provider); } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java index d905c3e1..323d9755 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java @@ -4,7 +4,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManager.SQDevPluginManager; +import raven.sqdev.pluginManagement.SQDevPluginManager; import raven.sqdev.util.SQDevPreferenceUtil; /** diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/sqdevEditor/SQDevFileEditor.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/sqdevEditor/SQDevFileEditor.java index 88412140..a97931d7 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/sqdevEditor/SQDevFileEditor.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/sqdevEditor/SQDevFileEditor.java @@ -1,9 +1,9 @@ package raven.sqdev.editors.sqdevEditor; -import java.util.ArrayList; - import raven.sqdev.editors.BasicCodeEditor; import raven.sqdev.editors.BasicPartitionScanner; +import raven.sqdev.infoCollection.base.Keyword; +import raven.sqdev.infoCollection.base.KeywordList; import raven.sqdev.sqdevFile.ESQDevFileAnnotation; import raven.sqdev.sqdevFile.ESQDevFileAttribute; @@ -23,7 +23,7 @@ public SQDevFileEditor() { // remove the multi-line comment getBasicProvider().getPartitionScanner() .removeRule(BasicPartitionScanner.MULTILINE_COMMENT_RULE); - + getBasicConfiguration().getKeywordScanner().makeCaseSensitive(false); } @@ -35,21 +35,22 @@ public SQDevFileEditor() { * @see {@linkplain ESQDevFileAnnotation} */ protected void setKeywords() { - ArrayList keywords = new ArrayList(); + KeywordList keywordList = new KeywordList(); // add all attributes for (ESQDevFileAttribute currentAttribute : ESQDevFileAttribute.values()) { - keywords.add(currentAttribute.toString()); + keywordList.addKeyword( + new Keyword(currentAttribute.toString(), currentAttribute.getDescription())); } // add all annotations including the "@" for (ESQDevFileAnnotation currentAnnotation : ESQDevFileAnnotation.values()) { - keywords.add("@" + currentAnnotation.toString()); + keywordList.addKeyword(new Keyword("@" + currentAnnotation.toString(), + currentAnnotation.getDescription())); } // set the keywords - getBasicConfiguration().getKeywordScanner() - .setKeywords(keywords.toArray(new String[keywords.size()])); + getBasicConfiguration().getKeywordScanner().setKeywords(keywordList); } } diff --git a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF index 2937a1e0..d199b68f 100644 --- a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF @@ -11,5 +11,8 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.constants, raven.sqdev.exceptions, + raven.sqdev.infoCollection, + raven.sqdev.infoCollection.base, + raven.sqdev.interfaces, raven.sqdev.misc, - raven.sqdev.pluginManager + raven.sqdev.pluginManagement diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/SQDevPreferenceConstants.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/SQDevPreferenceConstants.class index 4238b468cc2e52e35c0f387122c70f4d66d71582..6b40571983edb4bf7934f065b10ff978f25c146d 100644 GIT binary patch delta 308 zcmeyxy@HqP)W2Q(7#J8#80=+rCH8jH*8Cab2Q&PDYm>Dd1fG#$j?8!2nk$>_- zmWvsZ40;S~42%ryK)*0C=rc$%7$WhFfHI6A9YE3ys6rpiXJBB}+Rk9U5v;`$NP-Mt bVBlb|0+KvnHYWs#d`x&Ld+|8>QpECjg)Xod6 delta 39 rcmbQiK8byUFC(MQWIsj;#-hm^8HFd;GK#PmXlVLCgf?$ve9i~}(~b(+ diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class index d79db0033de0251220002da38e1179012a377db1..a8d9ec6baf4d0fafbed3f125bab01d046199bfa0 100644 GIT binary patch literal 17707 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 N17pO$@CWLa{{`eYhZg_< literal 3234 zcmb7G?N=1n9e#!#m}N7HSwTciSvRTjwvHuME3Cwb8i@-ipa`)|hTRK{&dw||vp|xj zd8uuhwCP)#w3@!9U;LV$(=4{0ll1gMdrtp=eC|I|>2qh6brIT=p5-ui?)}~0%kw<< zcjuoE{_+`sWB7xH1_ehvb6Gfszf=&*hULt=!>(&?ndKxo}v`I!bp^M4D zvz!ImHDxWw3WgLs*|pilR^#rg3e;h@AQFgShmL0KR1oXxzM8-;BsDy)pwsmh43W33 zk}r(B>j}dvJAqXc#)bXF`^bwuOZt^}bts^e?u zXC4b8h(wfrL;~GgH6S-0)A4m2SFnc~Do(i*!WPS>6UfxY9h-z4s;9K7v~7H8_=bY^ zhq8_=&y+2@AiOvR6ztC0)=<_=EqY@9RN7dvZdyhHCyR8H04gK-Q~rRh{)1-3Yqj^mtyhV)Pz&v80ym_u2EnaMySI-bWxp2fh8 z5>U`eIv=fSPzrif#~8+Gn|GbSv>YmHe|=iRi>5azmde7(i^1;MI4&#bm|7Gmza;Y3 zyd?@LsfCo!BcDnq(1npWrW9OArwXp{Q;r*?s;*OJ%BI5k>UqL1xlVz{Jr%gAV3WJB zNzf?lH!0T1Bd*YM23eW#jE-5nAkUgp5UbVL)_Bwy-?n)ht0=f?|1RGjvvV0-u zpEG;#u8to{GgY>P1m43>H2j!})j%1qwH_Tmm3v!Cynu)ko8**d=IJGapUZmQe^_*Q zB}^@P?uu;5EQ-Cp?D5V>NM@r_X&uR93oUGuY_V1Ln=MI8M7Bc0+iIIe9;P;^;nzIA z8%am{+aU2HWT~3PplH`5)g(a?BtJ3fmc6_0C15$O{L**s(X3~1nw_fa_F zZN#U_m1eTV2z+~=>(cIU&l>dJduZwVJ9hR}&~^u!dKYT!9`;Z7^nQxYp1x0U@Q*Z& z;Yt4A7dlPR-9frd;{cxG=&Lxy-&0&qMQ+0xzT$A026e)bOr(KNpcM`4Xh%$gqM=J8 zy*SMSiyrjSqK_6b-Hc3CS)~VAz~6d${)Emo7`dL_H9VcWj}tS=lWQ2{^uY>-l4tmD zV|=!5e4gV9E{yiFzT6%3-$!O9+cO4+_gGk&CO!DlDYkq563;q%c9)%u%F;2i2ulP9Ug z+g}EzFC%-6g~IN&dxf_5;L-rC9DY{81_R}7e!_H5Elh?a8+!ydu(0^Fz(3g14Bh) zYc-Xnl`X_%Ar>@tmiiO?4Yt6YfdVbwJNKP??>RU3{p$JAYyUj{egxn)UhUhi$XKE3 z1pc;)4#a$hP;qbrW6^+^+9lj{a0@j;MhD9}Tx+iq`bLZ1y4;pkU$$4PXKdYOwFwJ% z2$%oQIk+1u^yt6~KB%xEJ1VZe?_d&jLRxKZNxwtLjb4y#uB@w;)b-+9_V$C8^w;zb z!M#v&?o6;+TVbf$nvh-AvbC`!-@leCzOrE3c!+rmjep15>1g%N!6Q75v}kaVfhP_Y z@bsHuj1Z-xV(RzqCkU9lrRpKdZzfYmGsg5+T+62hYhJmFY8T@rK3&}V470rVQP5!F z%gGVt8DY!0TyTOzXX z0O%LEl>Exy)G*COd9#pTK#3c&+)(04iP3hcbcn^MX%5k|Xw%Gj-agYJnI=|`CyU)< aZv#t7^c>9uU*IL<0Q0?!iRU>M&hQl3@@;?s delta 198 zcmX@icZr+p)W2Q(7#J8#7;HCk2{BDBVzQFcVbEh|&}C#0$Vx0r)Xz!GOV^xb8$%TWN!Gwpwkim5GO=eX_M%KyySuRh`Ws_mlp4`PID{07J#K6eF z3p84bfeFZBVBivB)Y`#dJox~dqPQ7UPMv|7fdweXuB9!roxyza4>lQn3m~6~!IHrW ZOj|S90BI?pIzAxH;K0Bj4y9!wGywV=A^`vZ diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class index 191c5f5c5831abdef33936711326495966ed0f4f..763ccd9e8922772a7c3dae8eee2dcf80ba73ffea 100644 GIT binary patch literal 4182 zcma)9Yj9L&8GgRKWH;fEge?n!0!<-6vI||RC0GK1uvtn%F2IJ+&!`W9JHHVpuO4 ziT%duQw1v>@gWey+CbZCa9E|O(X=?bf(hDLtO_3y88PT zz!Ao60!uoLV#dl%N@8Z*tn!|l?`jzXNF+SxTz8=p4y6K%va?17s&?eeoZT+qZ*CbB z2qX(xhPPS(H4wN%!wNL=!kXukGJi%IsO!m@Mqg=S*sum1vLii(jGiCVt(+XYlL31y zR}^UJnR{8cR06Lcx&Vfj!5a9nQKDQa@wRA)VZA_2(Xid?k<*(rY?jltoc2(|eWR6q zlvH!e{FthF{B8})QB#BWVrvNZkd=ZpnlLi?+$5!%DOg6rDw%d}!bo%!i-u)uXvH>C zn=1}jCCV+(e6;0g4emu-2o#D((2l+|>;M%Jpx7p;E8cYGM6W*SQdLWg9?%ldZVe5n zVLW4c(X*s3k&Xm9HMAokUGCLzANB}@a>dldqZDei#OcR=4L#@; z2-9^kuNS%bwmIae$u_yQU&B6hNuLKb+~xS}Cy>JM_}o--9S})I~T+s zE&-8at})h`3bD6fP3WvMqXNrsE(Uu_xqQ~J!r+kF2tTCZ zNt}_=Gqc9DM7W?4bze_w_%J@gn<l}fENkxSS|B4?!6eS?tfP-<_&A;+KbeAQ z>p7Ehz1_=2k{U=;^@f=-sBm7%h`L~6cB`VIfCRWh)=Z{pcD7Es>$RRKwP#L1Gn6ZN zen!I}j?iSfP_i<{-kf}QG*>ToNl`J_bZ*qt?UKc%lINmaL!O!0CvL~PPLuYwo3_q> z3EOZdFVGJkg5ax4CGH#7+j$ zu1qXbCPS_X9#GJjQ8d=*8XMvsKONM?u3|$hUPg0lQyKADToDAgypP{5GSkg?_ABF! z&asN|I@dT&$-+#tLe@gpjcjGy!PwWaO64Wo`>ge&NG z-Hg6Ss%=tzid0W~(AQPaI|K_zPn45<4Lh)hU#YMZTZz3sRz|Xn)H#Iwq%3enZJs6l zF%R^54|LK|yIY#zlg6(!d4a&CMz+ypH-UGT(RUs}|CRW4h+a+}pkxk|aY#){zZ}!I zGxm61i!jYR$-vH_p2aSTkJ9s5GV~0U{|RixrxYqjTiYrDZ$lab1QX@zVdjHRh0dq9 z{w*vGLDX@LmBxW9x(T+5ex{|I?>{GjN{k#xjOQF?dO1w?UBY6yq+;kJ=%LoYW`3iA zi>Q{J)_}h?cnQs$qQNpA+N{185%gX0PP~j@;L4exhz6s93-A2OKg)DCMF_mes6We$ z_#E@%^H@zf*Ww~$eu=-+UZ&oCri_~y^=i)RD(7P8b9-ya!eP$&>7mQ*ZAB8p$WUPSaW>0dP%+tnaLvjasHS51 zpPY)f5ES+GGKUTBbY$=XZOJt3{uV}tB4bxEF1afsADNV&x|v=XR*&2gzlIVwMNV@; ziehFx5@kriYK-ZG4hFKQZK4o@DZLGIgF)$#a^?A)osy zT3)K2y^y+|MpQM4cbL~ztWHcR!GCnOM~^Sy0P(URDtA U11S_(xy6SU)b~YJ6gfKge-?ynO#lD@ literal 1238 zcma))&r;J+6vn^Xqz#17B2bhH0*cb6KvdYFh=V%Jh`K0)V|QtKEf-2slN5(n@dezl z&>02Cg-aGbl;gSSof4IWlbPIq=Y02fzH@*6`u+pJDpn0-7#2eJi2F|TuE~!a;lB+w zgLa#Hu?T#p;YQqf&X3;*Vbg%lFtYC+xlY^lTh6P-K1DGY2fcHK(d~=VS{w?$wZ<^i zHriYQ z1)kg9bweT7YEzH*M8r_p{?EGCOlTOBG~*0fxw0$iCM;aVAcGn4SotHjCoPoZcAmDM zr0X_Y{Wym4a^>F&1}Xi9g)DL=W^vQN+#hcD{IqZj^JKY*o*s7MKK^L@x{@xI!x_BV}14Hmtj5^V4q>s zuAZW3FP`Gsh3F`BI=1OwC4xodv6P6<_R{*|1tm^W(gc!axQ;1xjYA_Novi%@)1PRP zAt59*z)B)$^#YV2lP^alyA&-8E>+KwC&ZZ#F!YbmwQson+OB@Zw8YgC#e9PG5aVRi zBsNk$l=`S8g<7SoEHZ@+$wu8#*QHsP{$|~}l$D;dN?up2ImxwjVPmg1HM(yn#gywa zM5|Il9dH&U}F?;pQahC{08m{ B&x-&6 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class index 504c5b6b477c33609eb40dab65c510c30d872d1a..ebdff4e930c3deb2ec6b4542cf880ee840472fe8 100644 GIT binary patch literal 5347 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 Rs()byH*SSLlf?ku{ST&*2)Y0O delta 140 zcmaE?d5nqc)W2Q(7#J8#7z8GAxhpU-u-RnhWtP}6GB9gshA}d*IOnINaxpM7aPly) zGO$gyWJ;JU&7&Fs)WX0Bgg`MM$qwWhgZT^$tXkU{I5q+Wm>9T#Bo~kd3No+&6>$Su VJV0e2J`V#gkY;4y1CmS(`~ZHQ54HdR diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class index 1accfc06fa7486666f8b9f05d6be756a97b642c5..3a8ee0976ffefabdb395dc9d72d9d2bdf91cc8a6 100644 GIT binary patch literal 12045 zcmbVS34D~*wLj<1KKV$(z!1YC$f6{ZFp3xzWQh0$ABk_)KODYkIcg$cKGPgUPOhw|UWs%O_sF!?9M$4vnDzdR96-lI~GgVk58=B_j z5%iJ)^l;eR-4JgNhndD?_&1!|&|KfTxOo6d8OTp+if&AqSd*AWH`g!EAQcGhr2tb| zbL8B7kw)fl3Z)7%m50Mw980iqIh2+`WIF_`v}{>ih&Qs~wE9J-HZ~N|sFy}T0Sy}? zT|J%AjJ6KR>@O7TP^Qvw*xGN2b!cY$U_u=R7Fs9^4n4sQS$p1*D zl5kjdTD(V@BnL6l(IBh!AsA4`q0J4gOPiaP)i*9JE=L{H(B^2WHxbt!o>9qYJ6@qw z$0Jg@Q;HL~qpeMWA^*Ef-*_S(V4HSjK6{m>)!3aVQoP{0V*d z)=fP)hx>$BJeHcp$^qBFHF22pDM;Q?|f6DJ535kr`I+RUu#CkHL`&{8PZZis^_ z#)o4rH>jRY^ieCVFlZ&Mf~l7_&1;yyps8UVQ|KQGnbWd|&R`m*ZJ6&qemb32i#E@K zk|!^yS|)tg7&M1w2-I%SbQ4-@&|DK*XV5IdsY}|U$+kqSNA3~KI-*vJ6k(>}vZRaeC^jIbLOn{fr(ohomeK^M|i_+c#B(AAULq@!u2 zoakbMw$UXBvskh<(TiwsPF`7sFHDyibT*wM3jeM_-=ixK*=^mponvvBHP6vA=K;1(LpRf^^!@q-+0%^=1uf-1h@ zhu9XfpSIJj9@>FRec)z;Zll|wE0i)_Ov5wc+3Op@-r}XZpo58$vnI;I-J;2RpbdMT zn7b~LXo;@xjmF!eGpbg4={^{0Vpt=2XcuB=Ao~-0W1a2MgrDxG2PGJm2=tIa57Q%H z7wPGV#-aOKI}@wwvVzejs6}grkl16;qjD~9s@vS}rN>1U5#>j_ zc5>PBra`}wxO2mkBArQz;9nbbJ)Hvyt;-oHGZpFRh-MrdU)p*T30=MG8w!wz{vG#2 z5eq_A1gRAoW`Jg{Zl)=dVRUHrNuT!+>9(=;)Q!BS&XSexf|M z5Ry2VJ~Ze*=syMey+QBMf5CM+yW7A3w^$*AT15J{Ip$DFMQhh0+vkKF3d#f5yjYW} z61mO`6btkq7YQiReQwaFVoPTn3osmPA)jDUpqj;^)Jt+z|Gz==$nB*+V;lCYL$`%( zAe-BULLCHbHKwrm+MxfF=+_i&b)ZJI%?*f^?Nflr4ukqdHlMB@rGZ1MCG<1Rlb1bk z%%(_JbUNan*=Mj{IQb#_!sw=RyA$nRMoU)?qd3iYe4anvNV-g)<(D!Mpm(h4>O=KiBzm7E6C0|EF89>ZjCg#UO4SH8T zjx!@dtdKOnj5p{@Eh&;sBASG2M$D2(Ox}XlTk6aC-HEP93WXpaZtz69-OH1~#gxtL z5d63Ux!T|m*T5ZOsc0gS>P|@TTZhyo%>rwEMhQ>hBR$d)1@t|U_toH|c&c~}`rd&T zm6f5SeAwgVV<3g@ZcI@o`GxMW1|O&E253QAXOV2W!87;-&`ie8ga4r{mpsk044y5^ z?#^huBel-U^-yhIi|+UGT-Z4471n9J+<;ZhI{Rr7_MU|9X<##rWmNv9mO-)v7Gg~k zus#U-BHdhC3%Z5E;$o@)^Ey;0yH$?gjH_dums=sqfR+?!NH`^8=Pbk1u%H>rs&HEg zkGHjwSUDZ`umzZf3jM6r4ghUix!2S;PGHR~k-@=Q5FQ|(h_)r7kyLbkqPt7nr_JC9 zy)NMtHF&LDCPpkNUY7AN=5+?M6bH;_8+5Zkt=wsF7o$wajhO82+yKh6?blZ3?)?^N zPU!a-^gDWApoBpmn-J>Y|24U9Fz7F|1Sd*DymnJQC?KgDTD$_K^c7T|O&_@>O9ffS zfSRIarQDO?DO$B#=r}@kkxDOa- z#j`dT*#-UGumrQd`mL${HY6jX^|2%~*I#`iiuJ`KuwE@m=q}h=_n9;O#oyB1n`n#9 zk4g7hmTN$#Nc_`bNaYSZ`c+URxyX%~2Qx)p%>A}`3Fbp=^HR*qZS$d+53|jOV?M$* z7y6a9`AE!0+va01A8VVB!+gALJ^}Mdw)x?hPqxjgFb~=0HJDGa&BK@!}VEBXJ|x-lR#4 zFt=GGfI!Xqs6wpKBDRN|+7XsihidjxOSS76YJHNHRX;(?9FNm!Edn?-@HCyi!m*dm ze3By70y{O_reSkEYFqEfo$PS(LE4>QeGiq=z3{pFpp{)zLl4k#^dRbx-8kbzTI6x2 zFj)x@dWInl8oKZz!-;1P9F7Dgs+Y2HNU(u+{sp)kii? zMQnAW%~m%Rw^bykCesZ*gR;JWt-iFW$Zjh$&h56EL$h%vmRl0Pu$8Js_Vhv#pTZ`$ zG+G9`!)~xp;LbGd+(DB11B#E1s+S&4_8cg z@2_(?>R|N?D&0Zn)FzFy7dW-Gvc0d|b5@$30e;~5zzb=5(WEflBl~Lh(aW+^82@xT zc>^c!B9}~d*E&q>H2oa2N>5;Kn%>ClsPtehBg>*~P7XSQuATiC!3Ex`$$FfCc8{A+ zLvj4C$pv?)WJMu%(meLiN$jK5Y~YD&2wjBnGA_lFMH&5&%h3;)q7w1Z+dQ1!=OBFo z?~{}_4a$TnvtIfs{YK}jlaMIh*1^9TX8x^sEL}zm=-&W&v=84;{^4_YNw1HS?(c^si+@%4ie0O}$)+iQVs9=Ncfn7n|x-%xn|)He{-mm>op(qmMF{eDFdHXAnL*``Uh~7TjIazj~1Jw z^jz*suyITssF#y$dhu8!S<2JmQaT5batWkthLo+4a_Kjg@{{6HIt!#+Ra8oJ`#79= z6&9w~Xx>#Ag;PWaq*q=;9&W=QG1uD27fG-GQ;=Ry1z))e-Es{^bFQJw818{G)@zbx z4dTw4$}N8vfM#=PRaVTjiblZF`DTmyltI%fZ24L49u&}?l}1P=;Z2a@JIG2G&_v!$ zwS1vXqA6L4rr;8g2(j)$?HLIPIz*LSBfI zcB4qZNxV`kJdYo#TkY(qxxDy>VdjS5pc^X84V8m#7-eo4Gw6n~=7z)U8$vn% z880Opzkz=KSI7)+Q3L;)*79#qqr6QI@Nem5e#d5pS1mI*@F#)^+6>Hik~0LVtS?#Fu@=Y_x!nAQ3#wTWFg70XVre|c@o-fm20?ivB z&!opA+bmLV<*oO`vgu2-H|ipr*n_s2r6iLcO91loI4!S7QIe?ay8A>M{RqV<5!<3G?g{v%z=AJcUhZ{knsA^wb> zig~kAd_CaXl#}mQZhk;{ z_z8^rl#hR^41P}yQGQjbMqwPQ%G5M9Of68u)tM@&HmDKm3cxq0L)0B=q`C{c9>(~n z8lzrR223bSyc|wgBbV6r$t%X(FNBkj6#&m1+5(>%QIRTMvefivthBR`R+R zscQ%<^kH>qFR$57CDq6u?K{ZjcsLXaAjkLNhi9G@3LvZZ>8|mXMK#DTc`fP)vqh~% zH`;`sJCP@yu^q%u59rKvW6G>=Btv%k*msB`V2@s*ySYwC1or4w|_0e!Tu z8guU0=Hj3$=-%1?4k(TkiX%;mW3m(lB`{9Y^zN_oIO^O&(;IY8o$ji12~9niG+k+q zZF6(b9rTzqCkV|6Ce6chG=bu%bV+Pmr=RYw#F}2f4^(4z;nO{p?tOgDOH@+n!FWJ4 zSgn`R++D5L(!3tBqrd6HkJf28N7Y;D4NTRt8~f`@9Cdz?-3a=pPWM&%M0P!xvis7U z+~((?KUiYQevHsO#-xcL%t&gYY&S&#Qg80{hMTAbJysQ!t7;0UDKt!lX{yjz{ik7E9mI-j3b7x43HGrxrKfZBp& zaz4L~@s}9iR9pESbrHX-w(5 zxEI}tyklHJK|T)pq=qUZC=F?#Byx;oC%@AIUlI;Un{2GD=AX@@3yGkd$<*VZNrw z*OmE*<_2pUf!}NzG5|Yoi}fxeltSb`$WCDkog$Z78A~lg78NxkQ|;vo%}gbUYUg(9 z)>#U`TAg$NoDm8j;{a&YNdv&bPyiVNz=mzkyN+?rosokz3ltMh7ZeRV!F6V&-N zi@v%N&7rT(WYAYPWX$NDbU0F;b0>`rdXV|(kf1N<-AO}(B|-mA@&|_mjk`sTTvXF$ zy!n#4lDz6F@~dlUwE8|G`Z}7TuBT(w4KzpHh-kivn$^v;O5K7e-cDU=2W?Qd(iU|) zZB=*CdRf0reogrgqa?>LEn#BlMa20ejRQ z_Nm8hQINSJVJPd0yqqrPt$Y#8cMYA-7XxzO88yY*06FPS>f}oRx$tL!cD@vloA#ho zxD1eo_Tn#+mjm+Bv-oG6-v#8O19)Zp9w0wnyHDUN0F}^N_&4lV0+PSI*YH(HOv>4Q>H9-@*qg(wyu6e$lWA}Oyzfdc9@otB~Lq)aA-s`x-~ z>CxkkSj;!3d_UOu;p5s>i?);Nvl1wWun#}*tfA9V7cfWi8^xog! z-3HK)cVnp2(CZj;rk%>4n=t26mOYuHiezp znhu6j4pSqZ-+^s(&}d#TW@fVzqbJu2{R529XeXkN$x@p zhMO);Tei8sFf(pCM~v|-VYHn7q-j zUB@b{7TR~}*oEiW5t$sj*|J&x3cVNeq1ieN>DVKOBTRs96<7@`7fC^hYj>%QlM6|x zMycBdL^;Dcn$SQm6hPTa-vU(*aUzw76R&R^$6+CKL_=%!VIk(Iju)|-Wcq_g!S@R3 zjg!tqPsl(Kpkq3kp(~)}^UD(<#|2V5^V#7{6=qD^Eg#=lsfMst-(5USjS1pcbR5I+ zIL5&Np5dGf>SR#|I!sKm@@`IzP7bnSae~uQf}GKD5~nmID=NLHcaDolHb+4194@t) zZeXbUMmiwr**bEVWohP&Y{5K0D>9vmEvEHP16YXDl2Fv*=j({g=+K(R634ar+S6*3lt{8^2YSYdoxn zX{FJ9SMRr2dlxOe-(%g0n|Sm(*2>P8d=(*1Fl|ARrtvTh4|*YWW$K4acxSaXZuX$J z6esD$InK2tA5Y#wUvHA`C6l1*F+_2Syq^wG6E9^G_barCRw}IQG%}V(Li_nC%oqG9 zJ;^(0N#4NbtB6HELo{*=1IK!AV32z|u0r=8cONT*Xk&O_5*;{0k}M=J9RSi(0@8yQ zu$SQ^+Xh6IZr8fF;&3b_ysw7XG|`laO_SJkHL)&7L`5PKk;*mOB3RkKUX z>@tbH638b=tde?=*d{7fh&@=6bTzSus)#*OCRQG6iG7d6zE6@qAaNfCfCPyh^~7IE zEN3`@NNrOdBz7z5J0bMddAgJ~1U?GTR`1s;Dzn))p74dyE%Hm=uKzfw3##!%nKUJY zPe|IQXvgPt_C)}1cS#7{-b_$J-~?&eE{vVVOMb*t6t{Ft8@2ZGa9@P17$d!XH!vlk z6m}KrYYO=riuyX)zTt&Zt=v`$)y7a3{nm4op5;kt=Y}n;oL%4qYGobLkxF`;74M;ci&i@aIDcVtUrZfF=*KiMRI1>$s7#*wM~X3g+8 z==0Ga6ZvAf2h>IN59--l<%_DJB*+H2gz2$7G-O8&jkiieW6by7NoL+I4+wb-4hWBU gtr5*y6aNKk4g~Bh1?ZBnCc!k3w7u z6EO5nI^8?Hdw#x;&$o8~eRLxP0%uOvWRmi6N_C>ltxc`gRCr}gGLa=E`SmEZ#yhKX z@2bLAjv}-KdP^)`YMPVr0^x-+$`1whjaldH!9T;6zf+~adA5X`-`^MrL=W`*WZkq;|Km#_&TZui z8mZ>}gMTh@+AQG^f}J-ZIN3heh|v%MClK~dUa|JVU4WQtyqI>Gxr+_P``;|IvB`+} N*g|KawaqBN&KIi_aMAz( literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFElement.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFElement.class new file mode 100644 index 0000000000000000000000000000000000000000..62d387e468f8e6b1901df9b8e63fd4cd90897ef6 GIT binary patch literal 2892 zcmah~ZF3V<7(KU1NxEGq1SleJsS317%YwX03j!s@N?TqMiUpx;liPM7*$um!7JR`M zRGiV#8NcCYXZ%uUbVgH0X7rmM{7KFzp1awkp{>KTv%7cqKIeJPdCqsn{%d7H0>E9>${dc(=V`g(6K$=wEc0j zSdnqG39P$n-LWp3GcxO&u76x$a{!qcJNpb^9J)Yvq=L8ri!8wH?&X>@d;lU%!37P|6{0_YgAY&ljbO-VOrP8Fr% z=;Y1fxanGI9lnhEvz8~&JMugcmqcf=n^!3#sMDSc| zSl`|AEdMrgd`ZVztm9U%dFzHSRb8o`aSeOW9m8IMU5-0r$b8W%(-nEgm4;ifeXAsm z)1D_?Uq=s80&SKz=J;ckVsTmJ7p890SN(xpmRB$DoJIQueYmEi-=||2l5_)Gp1(6{ zmP6$>kWrRSRbmb~ZprioHr07G8%gPLP{)28h~Y3zxZG)HDps)|T@6R^S`5di&hi~P zj)SVl=9CXFObhI3*1yhTr4KZosT0aM+v0egxLTcJ&ApoXep<&F4AOsQxh!oSlD=l_ z@GOMgYGM@@-LD~ob1@7F=t0$Cn{>Q^12nwv)DYr$Q$Pd>&oS3@sF&`_yemy#4!KTg zS##>C*@Or#>KMhCYR6?AS&T8AGCvAa$CTn3<<^pt;)E(u>UbHi#4sbU zyZKnjdwCfg2ahA{tenf#*Kt@Jd%0Pe%d&RS@}1c|KH_ zr^Cm34wf>VKtVTOzoudh>yf5AhK_n0IX7v}{hfZOx1aXH7RN?^dLpC&g>*xhg6+ z8LVuWMpA1|Zfcx$DsEm5S!#@SEKS0FiZ!~}jR=3gBG`&ntl=ugRSV)=YfbBRzT<%7 zH#O}#u%6cqTpeK~$2{VxL_#cL(@#P47G5<*fYXk{4lnRYuk9o5i(Dy;Z6U@fVyM0G zR63DZ1!F%k4g?sTwS6H5Bd|TFQK5B)Xv0KPjAE&D?;>_AFKB=PCjzi!ZCe8@7J@Mp zJGrZcfE=D7tiih?+M4a);*xF#oa})*-akpZqrGLflRQeZmEtRz{ zC}R{+T%fiWn|NxC(zHN(RX`fOA?8WmRqpmw6@7oAHM$U4;4;!w)_7A{?ID;E>=CMq z9O@yK$1qi&ky^y7BTsN>f`uMg#6aR?6{l2!D$epLF|01_yi{?1B)ud=cY#OIxtpIU~kqTipm0rY!$0U`m;?lQhjVz?oiFg$`b$RPn zS|!g_@pcurMpI9anP89eRTRF*zOg5mo=~+XW?4ClzO9Na)r##~g!9Mo=+3nlF4b2sm4-g|MEu`VNhHmrgP-fv)z zyysECJH&brFh5k|)M(=@zbnJ^GV)&FumP%ZpAiwp#_%rQqYYGt_M>&Zc*=y47(@(5 z`LFJkr#!IH#w)&1Z>Rs}K@jSfC2Z#pWEUmMVWsB#H5HY94<17g6nwDsE_b4)>B;Ro zzEg5jn!1Vh(2u}Ff`7u({D{Zna~_N@D8-kg@D<(jH4fsNfNH9iutD{3*yP<5@?&Bs cx!Z{IkW>{x4N+}__y?PWa`C5p(}K_b1MP}uJOBUy literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IEditorKeyHandler.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IEditorKeyHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..bb1f649de813d173fe75e8e93c9e8312ebbeb05b GIT binary patch literal 466 zcma)2OHKko6s(5fH_AseF1&!4sJ(IL${H@>UUDNZx#&!mJ1_-zD0Gz;u2k=nF zHv`dy8#n!`Dpl152|0n5Q*#PsJPl|rO_-1yDowGx=>#T;+$}AyRTx-u zC3pgjv6?GsRXCClgE8quz+V_^*B*hxRyT4ZN!pr8Ofp_1lDIyJWuKfGE;}hXKY9|V zJ!iES0e@qn@ZZt?PxO*3t)sq)e~H&>r~O_#3P_;dH6h*4UI*kJ)xfgS>_%GIzH%nz z8&PNh(H5xo5~W}6)MTUky=dk%U70kw|7VlabdDlNk>^PPk0&ai$UvZka&{}}MFl># z*tgBNgB&BkKWLQSQ1Djy6|+35{MNFjW9~TNoMaBpWNy^aV78NaMVZAW!yI0YZwrldV|8ODWZ1TRIE^Icp} zQZtNls^8T}8XNE+jJ}zfTB)+MZK*0A3q$;4u(SyCgO~?@5yB&be^6(g&{~$nF!?<{ bYk#{83>~WuIM$^H7p;?rzD*bgZ4Unhb@Ww& literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/ISaveable.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/ISaveable.class new file mode 100644 index 0000000000000000000000000000000000000000..395eee096528ecc17d7cf86ed712f4c59b85c829 GIT binary patch literal 243 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 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/pluginManagement/SQDevPluginManager.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/pluginManagement/SQDevPluginManager.class new file mode 100644 index 0000000000000000000000000000000000000000..993317ec497d5f88dd5807d3a3dbc06b567b71d0 GIT binary patch literal 3179 zcmb7GS#uOs7(F)$>7;2)3~Nwihz1i#(h4qU0!RX4AQ{jJ!Jt5TW-gP4neL&xCt-0% zWf6Cg!t&87UwnvLBBn}w(kg#}zr_df-0sdWl7xa(rI*{c&v(9azVGY#>)&601MmdC z)KDd0de*pfO#ft7j+@1NDQ7!_mSg2)K{|n%dU2;5-(RunX{ZrsJZ_C!X5Mmg=DzfC znF$26Lim;^@c6(zLUs%2QRD&JC)DzR5WW=Hd2@&7S*O)9H`S-?oMQzgPYP_GZ%@yF z>*Y+D$=gL=nk75V$J~+j1JB9?2l}H_y0;Onw#RntV4Fa7Tl=s;O`n^UI;zoNU@;60 z_X{kYhlh?vG}J?2nE?%T0u2MUBa@{0JcJe+ z&=#p%VQ_c*AxajxByiWbw_&9M&vtUeQqdkY(1vz_Iy;b_6}S{+1qHdKd4Ig#y%-zO zsiA|?&V6d23nu+@8=lBR{abz&~gQ zV>(hepkYX0U8Q9i*OR7Kass;`&HZ^RIOci>MU8Ktp$QbG zU%B|Ifx|Ea7KMaVj~z9z7XunBf!4~&CQoH#F|b|7kH+M#*?SEcft6vUhE*5|)myUj zS?Se5IX*Nd6JY?EO+-zVXwi{IP7R;21-fQf?Kp1W1oCv*Di)=a73iEd_XVPN*TE6! zYDusl5{?@rJelKgl^%HnZXzJ9IU|3a3R^UAQWafY;6~}_7)4G;fN>3_*-;s$Th_tA zgi^Ah$fgg%DK*3?EH#`KXup$^eYCoaqT>|KDp_6=SXG(p(3s~=s0rKMKCIylftCeZ zuM9@r(s4sSaEEqg>lZya-siI11Vlgo>010<`hSv2lUWh(Y2wn&3%I1=qQKe(>wJgr zOD{0+0WOo1?I+zJS<2J?c}FxM8}X5WkJT8cwz8}az2wZYQx88g@Od~RJXvtZnUkJ! zOI}7kZ>t%%a*p?2mntNzV;fZSM?)3DFAuM3)W?sj_2H_{yDIhB{fwpGhr5^acwdP32yt4`fc03xHT5>%!AjKfT#r>~j`4O8UHvWl0jvMS zk{JjBKKLV6^L~=+)wqS(#kWnOYzi^eduzfSqLE+^VQmb#m5}OT{f3{gbmJ5f-|?m@ z#HkH=Yz^OE5p9Y&DOL~T5k6N?tufR$+*8B1wbbr zu3>oNFL-IN;|~l*PzSelT*oT{@!gtlC@{AlnViAs$PCgWP1$K2;9&~xG`t(h z&MEjaI5pBajWajIB+2cCjq`XN$9Yue=zcW5AB_b|Vky%&OaYEC#iPu0l!6_mU|ANS z#BSumH&e)S+B;l5NdzBfIk?X8d>-TM!U!ACOMMANDS_TO_IGNORE_ARRAY + */ + public static final List CONTROL_STRUCTURE_KEYWORDS = Arrays + .asList(CONTROL_STRUCTURE_KEYWORDS_ARRAY); + /** * The URL to the base site where all commands are listed */ @@ -28,45 +80,149 @@ public class SQFCommandCollector { * The name of the first command in the list on the base site */ private String firstCommandName; + /** + * The name of the last command in the list on the base site + */ + private String lastCommandName; - public SQFCommandCollector(URL baseSite, String firstCommandName) { + /** + * Creates an instance of this collector + * + * @param baseSite + * The base site that lists all commands + * @param firstCommandName + * The name of the first command in the list (The one to start + * with) + * @param lastCommandName + * The name of the last ommand in the list (The one to end with) + */ + public SQFCommandCollector(URL baseSite, String firstCommandName, String lastCommandName) { Assert.isNotNull(baseSite); Assert.isTrue(firstCommandName != null && !firstCommandName.isEmpty()); + Assert.isTrue(lastCommandName != null && !lastCommandName.isEmpty()); this.baseSite = baseSite; this.firstCommandName = firstCommandName; + this.lastCommandName = lastCommandName; } - public KeywordList collect() throws SQDevCollectionException { + /** + * Starts the collection of the SQF commands + * + * @param monitor + * The IProgressMonitor used to watch this + * collection + * @return The KeywordList conatining the gathered keywords + * @throws SQDevCollectionException + */ + public KeywordList collect(IProgressMonitor monitor) throws SQDevCollectionException { String siteContent = getSite(baseSite); // get relevant content only siteContent = trimToRelevantListOnly(siteContent); // compose the line where the collecting should start at - String relevantLine = "
  • " + firstCommandName + "
  • "; - if (!siteContent.contains(relevantLine)) { + String relevantEndLine = "
  • " + lastCommandName + "
  • "; + + if (!siteContent.contains(relevanStarttLine) || !siteContent.contains(relevantEndLine)) { throw new SQDevCollectionException("The specified base site \"" + baseSite.toString() + "\" does not contain a line corresponding to the specified first command \"" - + firstCommandName + "\""); + + firstCommandName + "\" or last command \"" + lastCommandName + "\""); } // start the list at the first command - siteContent = siteContent.substring(siteContent.indexOf(relevantLine)); + siteContent = siteContent.substring(siteContent.indexOf(relevanStarttLine), + siteContent.indexOf(relevantEndLine) + relevantEndLine.length()).trim(); + + + // create keywordList + KeywordList list = new KeywordList(); + + monitor.beginTask("Gathering SQF commands", siteContent.split("\n").length); // go through each link and gather respective information for (String currentLine : siteContent.split("\n")) { + if (monitor.isCanceled()) { + // if the job was canceled return the current state of the list + return list; + } + // get the postfix for the wiki page of the current command String postfix = currentLine.substring(currentLine.indexOf("\"") + 1); postfix = postfix.substring(0, postfix.indexOf("\"")); - // TODO: call respective site and extract SQFCommand with all - // necessary information + String name = postfix.substring(postfix.lastIndexOf("/") + 1); + + // display which cammand currently is processed + monitor.subTask("Current Command: \"" + name + "\""); + + URL commandPageURL; + try { + String strURL = baseSite.toString(); + strURL = strURL.substring(0, strURL.indexOf("/wiki")) + postfix; + + if (strURL.equals("https://community.bistudio.com/wiki/for")) { + // use this link as it does provide a description + strURL = "https://community.bistudio.com/wiki/for_forspec"; + } + + commandPageURL = new URL(strURL); + } catch (MalformedURLException e) { + e.printStackTrace(); + + // rethrow + throw new SQDevCollectionException(e); + } + + if (!CONTROL_STRUCTURE_KEYWORDS.contains(name)) { + SQFCommand command = processCommand(new SQFCommand(name), commandPageURL); + + if (command != null) { + list.addKeyword(command); + } + } else { + SQFControlStructure control = processControlStructure(new SQFControlStructure(name), + commandPageURL); + + if (control != null) { + list.addKeyword(control); + } + } + + monitor.worked(1); } - return null; + return list; + } + + /** + * Will process the given commandPage and feed the gathered information into + * the given SQFControlStructure + * + * @param control + * The SQFControlStructure the gathered information + * should be associated with + * @param commandPage + * The URL to the commandPage wiki page + * @return The SQFControlStructure filled with information + * @throws SQDevCollectionException + */ + private SQFControlStructure processControlStructure(SQFControlStructure control, + URL commandPage) throws SQDevCollectionException { + // set wiki URL + control.setWikiPage(commandPage); + + String content = formatCommandPageContent(getSite(commandPage)); + + String[] categories = categorizeContent(content); + // set description + control.setDescription(categories[CATEGORY_DESCRIPTION]); + + return control; } /** @@ -135,4 +291,683 @@ private String trimToRelevantListOnly(String htmlContent) throws SQDevCollection return content.trim(); } + /** + * Will process the given commandPage and feed the gathered information into + * the given SQFCommand + * + * @param command + * The command the gathered information should be associated with + * @param commandPage + * The URL to the command's wiki page + * @return The command filled with information + * @throws SQDevCollectionException + */ + private SQFCommand processCommand(SQFCommand command, URL commandPage) + throws SQDevCollectionException { + // get site content + String siteContent = formatCommandPageContent(getSite(commandPage)); + + String[] categories = categorizeContent(siteContent); + + if (!commandPage.toString().endsWith(command.getKeyword()) + || command.getKeyword().endsWith("_array")) { + // The current command should be integrated in the previous command + // with this name TODO + return null; + } + + + // store information + + // commandInfo + String commandInfo = categories[CATEGORY_COMMAND_INFO]; + applyCommandInfo(command, commandInfo); + + // wikiPage + command.setWikiPage(commandPage); + + // description + String description = categories[CATEGORY_DESCRIPTION]; + if (description.startsWith("Description:\n")) { + // remove that unnecessary line + description = description.substring(description.indexOf("\n") + 1); + } + + if (!description.isEmpty()) { + command.setDescription(description); + } + + for (String currentLine : categories) { + System.out.println(currentLine); + System.out.println(); + } + + // syntax + String syntax = categories[CATEGORY_SYNTAX]; + + if (!syntax.isEmpty()) { + applySyntax(command, syntax); + } else { + throw new SQDevCollectionException( + "The command \"" + command.getKeyword() + "\" does not specify a syntax!"); + } + + // examples + String examples = categories[CATEGORY_EXAMPLES]; + + if (!examples.isEmpty()) { + applyExamples(command, examples); + } + + // Notes + String notes = categories[CATEGORY_NOTES]; + + if (!notes.isEmpty()) { + try { + applyNotes(command, notes); + } catch (SQDevCollectionException e) { + e.printStackTrace(); + } + } + + return command; + } + + /** + * Extracts the relevant parts and formats the content of a commandPage + * + * @param content + * The content of the commandPage + * @return The formatted content + */ + private String formatCommandPageContent(String content) { + String[] tagsToRemove = { "script", "style", "header", "head" }; + + for (String currentTag : tagsToRemove) { + // remove tags + boolean proceed = content.contains("<" + currentTag) + && content.contains(""); + + while (proceed) { + String fragment1 = content.substring(0, content.indexOf("<" + currentTag)); + String fragment2 = content.substring(content.indexOf("<" + currentTag)); + String fragment3 = fragment2.substring( + fragment2.indexOf("") + 3 + currentTag.length()); + + content = fragment1 + fragment3; + + proceed = content.contains("<" + currentTag) + && content.contains(""); + } + } + + if (content.contains("
    ")) { + // if there are notes attached make sure that every note has a date + // attached (even an empty one) + + String fragment1 = content.substring(0, content.indexOf("
    ")).trim(); + String fragment2 = content.substring(content.indexOf("
    ")).trim(); + + boolean proceed = true; + + while (proceed) { + // add the necessary "Posted on" + if (!fragment1.substring(fragment1.lastIndexOf("\n")) + .contains("
    Posted on")) { + fragment1 = fragment1 + "\n
    Posted on\n"; + } + + // check if there are futher notes + proceed = fragment2.substring(fragment2.indexOf("\n")) + .contains("
    "); + + if (proceed) { + // reassemble fragments to process further notes + String previousNoteLine = fragment2.substring(0, fragment2.indexOf("\n")); + String helper = fragment2.substring(previousNoteLine.length()); + String fragment3 = helper.substring(0, helper.indexOf("
    ")); + + fragment1 += "\n" + previousNoteLine + "\n" + fragment3.trim(); + fragment1 = fragment1.trim(); + + fragment2 = fragment2.substring(previousNoteLine.length() + fragment3.length()); + fragment2 = fragment2.trim(); + } else { + // reset content + content = fragment1 + "\n" + fragment2; + } + } + + // make sure that the user name stands in it's own line + content = content.replace("
    ", "\n
    "); + } + + // mark parameter + content = content.replace("
    ", "\nparam:\n"); + + // keep code markdown + content = content.replace("", " $Code$"); + content = content.replace("", "$/Code$ "); + + String commandInfoLine = content.substring(content.indexOf("
    ")); + commandInfoLine = commandInfoLine.substring(0, commandInfoLine.indexOf("\n")); + + // remove tags + boolean proceed = content.contains("<") && content.contains(">"); + while (proceed) { + String fragment1 = content.substring(0, content.indexOf("<")); + String fragment2 = content.substring(content.indexOf("<")); + String fragment3 = fragment2.substring(fragment2.indexOf(">") + 1); + + content = fragment1 + " " + fragment3; + + proceed = content.contains("<") && content.contains(">"); + } + + // remove tabs + while (content.contains("\t")) { + content = content.replace("\t", ""); + } + + while (content.contains("\n ")) { + content = content.replace("\n ", "\n"); + } + + // reduce lineBreaks + while (content.contains("\n\n")) { + content = content.replace("\n\n", "\n"); + } + + content = content.replaceAll("&[^;]*;", " "); + + while (content.contains(" ")) { + content = content.replace(" ", " "); + } + + while (content.contains(" .")) { + content = content.replace(" .", "."); + } + + content = content.trim(); + + // add information about the command + String commandInfo = ""; + + if (commandInfoLine.contains("arguments_local.gif")) { + commandInfo += "Arguments: " + ELocality.LOCAL + "\n"; + } + + if (commandInfoLine.contains("arguments_global.gif")) { + commandInfo += "Arguments: " + ELocality.GLOBAL + "\n"; + } + + if (commandInfoLine.contains("effects_local.gif")) { + commandInfo += "Effects: " + ELocality.LOCAL + "\n"; + } + + if (commandInfoLine.contains("effects_global.gif")) { + commandInfo += "Effects: " + ELocality.GLOBAL + "\n"; + } + + if (commandInfoLine.contains("Exec_Server.gif")) { + commandInfo += "ServerExecution: true"; + } else { + commandInfo += "ServerExecution: false"; + } + + // add the gathered information to the content + if (!commandInfo.isEmpty()) { + content = "#CommandInfo\n" + commandInfo.trim() + "\n#EndCommandInfo\n\n" + content; + } + + // make sure that commas are set properly + while (content.contains(" ,")) { + content = content.replace(" ,", ","); + } + + // make sure points are set properly + while (content.contains(" .")) { + content = content.replace(" .", "."); + } + + return content; + } + + /** + * This will categorize the formatted content of a commandPage + * + * @param content + * The formatted content + * @return An array with the categories
    + */ + private String[] categorizeContent(String content) { + String[] categories = new String[5]; + + String commandInfo = "\n"; + String description = "\n"; + String syntax = "\n"; + String examples = "\n"; + String notes = "\n"; + + // add the command infos + commandInfo += content.substring(content.indexOf("\n") + 1, + content.indexOf("#EndCommandInfo") - 1); + + content = content.substring(content.indexOf("#EndCommandInfo") + 15).trim(); + + // add the name of the command + commandInfo = "Name: " + + content.substring(0, content.indexOf("\n")).trim().replace(" ", "_") + "\n" + + commandInfo; + + content = content.substring(content.indexOf("\n") + 1); + + String currentCategory = ""; + + // categorize the content + for (String currentLine : content.split("\n")) { + currentLine = currentLine.trim(); + + if (currentLine.startsWith("Only post proven facts here.")) { + // skip this line + continue; + } + + // check for a change of categories + switch (currentLine) { + case "Description": + case "Syntax": + case "Examples": + case "Notes": + currentCategory = currentLine; + break; + case "Additional Information": + case "Bottom Section": + currentCategory = ""; + break; + } + + if (currentCategory.isEmpty() && currentLine.startsWith("Posted")) { + currentCategory = "Notes"; + } else { + if (!currentCategory.isEmpty() && (currentLine.startsWith("Categories") + || currentLine.startsWith("Retrieved from"))) { + currentCategory = ""; + } + } + + // add line to respective category + switch (currentCategory) { + case "Description": + if (!currentLine.equals(currentCategory)) { + description += currentLine + "\n"; + } + break; + case "Syntax": + if (!currentLine.equals(currentCategory)) { + syntax += currentLine + "\n"; + } + break; + case "Examples": + if (!currentLine.equals(currentCategory)) { + examples += currentLine + "\n"; + } + break; + case "Notes": + if (!currentLine.equals(currentCategory)) { + notes += currentLine + "\n"; + } + break; + } + } + + categories[CATEGORY_COMMAND_INFO] = commandInfo; + categories[CATEGORY_DESCRIPTION] = description.substring(description.indexOf("\n")).trim(); + categories[CATEGORY_SYNTAX] = syntax.substring(syntax.indexOf("\n")).trim(); + categories[CATEGORY_EXAMPLES] = examples.substring(examples.indexOf("\n")).trim(); + categories[CATEGORY_NOTES] = notes.substring(notes.indexOf("\n")).trim(); + + return categories; + } + + /** + * Applies the given commandInfo to the given command + * + * @param command + * The command the info should get added to + * @param info + * The info to add up + * @throws SQDevCollectionException + */ + private void applyCommandInfo(SQFCommand command, String info) throws SQDevCollectionException { + String name = info.substring(info.indexOf("Name:") + 5, info.indexOf("\n")).trim(); + + if (!name.toLowerCase().equals(command.getKeyword().toLowerCase())) { + throw new SQDevCollectionException( + "The given commandInfo does not specify the same name (\"" + name + + "\") as the SQFCommand object (\"" + command.getKeyword() + "\")!"); + } + + // remove processed line + info = info.substring(info.indexOf("\n") + 1); + + for (String currentLine : info.split("\n")) { + currentLine = currentLine.trim(); + + if (currentLine.startsWith("Arguments:")) { + // store argument's locality + String argumentsLocality = currentLine.substring(10).trim(); + + command.setArgumentLocality(ELocality.resolve(argumentsLocality)); + } else { + if (currentLine.startsWith("Effects:")) { + // store effects locality + String effectsLocality = currentLine.substring(8).trim(); + + command.setEffectLocality(ELocality.resolve(effectsLocality)); + } else { + if (currentLine.equals("ServerExecution: true")) { + // add a note when a server execution is necessary + command.addNote("This scripting command must be executed on the server" + + " to work properly in multiplayer"); + } + } + } + } + } + + /** + * Adds the given examples to the given SQFCommand + * + * @param command + * The command theexamples should get added to + * @param examples + * The String containing the examples indexed by "Example 1:" and + * so on + */ + private void applyExamples(SQFCommand command, String examples) { + boolean proceed = true; + int counter = 1; + + if (examples.contains("Example needed")) { + return; + } + + examples = examples.trim(); + + while (proceed) { + String exampleNum = "Example " + counter + ":"; + + if (examples.startsWith(exampleNum)) { + // if there is an example with this number + examples = examples.substring(examples.indexOf(exampleNum) + exampleNum.length()) + .trim(); + + counter++; + + String nextExampleNum = "Example " + counter + ":"; + + if (examples.contains(nextExampleNum)) { + // only take the content until next example starts + String currentExample = examples.substring(0, examples.indexOf(nextExampleNum)) + .trim(); + + command.addExample(currentExample); + + // remove processed examples from the examples String + examples = examples.substring(currentExample.length()).trim(); + + proceed = !examples.isEmpty(); + } else { + // the complete content belongs to the current example + if (!examples.isEmpty()) { + command.addExample(examples); + } + + proceed = false; + } + } else { + break; + } + } + } + + /** + * Applies the given notes to the given command + * + * @param command + * The command the notes should be applied to + * @param notes + * The notes to apply + * @throws SQDevCollectionException + */ + private void applyNotes(SQFCommand command, String notes) throws SQDevCollectionException { + String currentNote = ""; + boolean skippedName = false; + + if (!notes.contains("Posted on")) { + throw new SQDevCollectionException( + "The notes of " + command.getKeyword() + "arenot in the proper format!"); + } + + for (String currentLine : notes.split("\n")) { + if (currentLine.startsWith("Posted on")) { + if (!currentNote.isEmpty()) { + // add the previous note to the command + command.addNote(currentNote.trim()); + + // reset currentNote + currentNote = ""; + } + + // a new note is beginning -> start with post date + String date = currentLine.substring(9).trim(); + + if (date.contains("-")) { + // don't store time + date = date.substring(0, date.indexOf("-")).trim(); + } + + if (!date.isEmpty()) { + currentNote += "(" + date + ")\n"; + } + + // indicate that the name has not yet been skipped + skippedName = false; + } else { + if (skippedName) { + // the following lines are the note + currentNote += currentLine + "\n"; + } else { + // indicate that the name has been skipped + skippedName = true; + } + } + } + + if (!currentNote.isEmpty()) { + command.addNote(currentNote); + } + } + + /** + * Applies the given syntax to the given command after having brought it + * into the propre format + * + * @param command + * The command the notes should be applied to + * @param syntaxContent + * The syntax with it's parameters that should be applied to the + * command + */ + private void applySyntax(SQFCommand command, String syntaxContent) { + String[][] syntaxes = splitSyntaxes(syntaxContent); + + for (String[] currentSyntax : syntaxes) { + // add the raw syntax to the command + command.addRawSyntax(currentSyntax[SYNTAXPART_SYNTAX]); + } + } + + /** + * Brings the given syntaxContent into the proper format + * + * @param syntaxContent + * The syntaxContent to format + * @return The formatted content + */ + private String formatSyntaxContent(String syntaxContent) { + syntaxContent = syntaxContent.trim(); + + while (Character.isDigit(syntaxContent.charAt(0))) { + syntaxContent = syntaxContent.substring(1).trim(); + } + + // check for return value + if (!syntaxContent.contains("Return Value:")) { + // add a Nothing-return value + syntaxContent += " Return Value: Nothing"; + } else { + // make sure that a return value is specified + if (syntaxContent.substring(syntaxContent.indexOf("Return Value:")).trim().isEmpty()) { + syntaxContent += " Nothing"; + } + } + + if (syntaxContent.startsWith("Syntax:")) { + // make the syntax start directly without prefix "Syntax:" + syntaxContent = syntaxContent.substring(7).trim(); + } + + if (syntaxContent.contains("Parameters:")) { + // remove unnecessary statement + syntaxContent = syntaxContent.substring(0, syntaxContent.indexOf("Parameters:")) + "\n" + + syntaxContent.substring(syntaxContent.indexOf("Parameters:") + 11); + } + + // make each syntax part stand in it's own line + + syntaxContent = syntaxContent.substring(0, syntaxContent.indexOf("Return Value:")) + "\n" + + syntaxContent.substring(syntaxContent.indexOf("Return Value:")); + + syntaxContent = syntaxContent.substring(0, syntaxContent.indexOf("Return Value:") + 13) + .trim() + " " + + syntaxContent.substring(syntaxContent.indexOf("Return Value:") + 13).trim(); + + + if (syntaxContent.substring(0, syntaxContent.indexOf("\n")).contains("=")) { + syntaxContent = syntaxContent.substring(syntaxContent.indexOf("=") + 1).trim(); + } + + + /* + * TODO: alternative syntaxes; optional parameters; repeating + * parameters: TKOH only parameters; parameter description; multiple + * options parameters; + */ + return syntaxContent; + } + + /** + * Splits the given syntax(es) and return them in an array (everything + * properly formatted) + * + * @param syntaxContent + * The syntaxes with the respective information + * @return A two-dimensional array where the first dimension stands for + * different syntaxes (alternatives syntaxes) and the second + * dimension is as following: + *
  • index 0: The raw syntax
  • + *
  • index 1: The parameters (each prefixed by "param:\n") with + * their description
  • + *
  • index 2: The return value
  • + */ + private String[][] splitSyntaxes(String syntaxContent) { + // split the syntaxes and their components + ArrayList> syntaxes = new ArrayList>(1); + + for (String currentSyntaxContent : syntaxContent.split("Alternative Syntax")) { + // format the content + currentSyntaxContent = formatSyntaxContent(currentSyntaxContent); + + ArrayList currentSyntaxComponents = new ArrayList(3); + + // get the syntax + String currentSyntax = currentSyntaxContent.substring(0, + currentSyntaxContent.indexOf("\n")); + + // trim syntaxContent to remove processed line + currentSyntaxContent = currentSyntaxContent.substring(currentSyntax.length()).trim(); + + // get the parameters + String currentParameter = currentSyntaxContent.substring(0, + currentSyntaxContent.indexOf("Return Value:")); + + + // trim syntaxContent to remove processed line + currentSyntaxContent = currentSyntaxContent.substring(currentParameter.length()).trim(); + + currentSyntaxContent += "\n"; + + String currentReturnValue = currentSyntaxContent + .substring(currentSyntaxContent.indexOf("Return Value:") + 13); + currentReturnValue = currentReturnValue.substring(0, currentReturnValue.indexOf("\n")); + + // store the gathered values + currentSyntaxComponents.add(SYNTAXPART_SYNTAX, formatRawSyntax(currentSyntax)); + currentSyntaxComponents.add(SYNTAXPART_PARAMETERS, formatParameters(currentParameter)); + currentSyntaxComponents.add(SYNTAXPART_RETURN_VALUE, + formatReturnValue(currentReturnValue)); + + syntaxes.add(currentSyntaxComponents); + } + + String[][] syntaxArray = new String[syntaxes.size()][]; + + for (int i = 0; i < syntaxes.size(); i++) { + syntaxArray[i] = syntaxes.get(i).toArray(new String[syntaxes.get(i).size()]); + } + + return syntaxArray; + } + + /** + * Brings the given raw syntax into a proper format + * + * @param syntax + * The raw syntax that should be formatted + * @return The formatted raw syntax + */ + private String formatRawSyntax(String syntax) { + // remove round brackets + syntax = syntax.replaceAll("\\(.*\\)", "").trim(); + // TODO + return syntax; + } + + /** + * Brings the given parameters into the proper format + * + * @param parameters + * The parameters to format + * @return The formatted parameters + */ + private String formatParameters(String parameters) { + parameters = parameters.trim(); + // TODO + return parameters; + } + + /** + * Brings the given returnValue into the proper format + * + * @param returnValue + * The returnValue to format + * @return The formatted returnValue + */ + private String formatReturnValue(String returnValue) { + returnValue = returnValue.trim(); + // TODO + return returnValue; + } } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/ELocality.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/ELocality.java index c8ccb634..15145c2e 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/ELocality.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/ELocality.java @@ -31,4 +31,22 @@ public String toString() { return "undefined"; } }; + + /** + * Finds the locality enum constant represented by this String + * + * @param locality + * The String representation of the desired enum constant + * @return The resolved enum constant or null if none could be + * found + */ + public static ELocality resolve(String locality) { + for (ELocality current : ELocality.values()) { + if (current.toString().toLowerCase().equals(locality.toLowerCase())) { + return current; + } + } + + return null; + } } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java index f15f3482..c1b899d4 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java @@ -2,14 +2,37 @@ import org.eclipse.core.runtime.Assert; +import raven.sqdev.interfaces.ISaveable; + /** * A class representing a keyword and providing additional information about the * represented keyword * * @author Raven - * + * */ -public class Keyword { +public class Keyword implements Comparable, ISaveable { + + /** + * The sequence indicating the start of the keyword attribute in the + * saveable String format of this class + */ + public static final String KEYWORD_START_SAVESEQUENCE = "KeywordStart:"; + /** + * The sequence indicating the end of the keyword attribute in the saveable + * String format of this class + */ + public static final String KEYWORD_END_SAVESEQUENCE = "//KeywordEnd//"; + /** + * The sequence indicating the start of the description attribute in the + * saveable String format of this class + */ + public static final String DESCRIPTION_START_SAVESEQUENCE = "DescriptionStart:"; + /** + * The sequence indicating the end of the description attribute in the + * saveable String format of this class + */ + public static final String DESCRIPTION_END_SAVESEQUENCE = "//DescriptionEnd//"; /** * The keyword itself @@ -21,6 +44,13 @@ public class Keyword { */ private String description; + /** + * Creates an instance of a Keyword + */ + public Keyword() { + this("", null); + } + /** * Creates an instance of a Keyword * @@ -58,7 +88,9 @@ public String getKeyword() { * The new keyword (May not be null or empty) */ public void setKeyword(String keyword) { - Assert.isTrue(keyword != null && !keyword.isEmpty()); + Assert.isTrue(keyword != null); + + keyword = keyword.trim(); this.keyword = keyword; } @@ -66,10 +98,10 @@ public void setKeyword(String keyword) { /** * Gets the description for this keyword * - * @return The description or null if no description is given + * @return The description or an empty String if no description is given */ public String getDescription() { - return description; + return (description == null) ? "" : description; } /** @@ -80,6 +112,10 @@ public String getDescription() { * indicate that no description is provided */ public void setDescription(String description) { + if (description != null) { + description = description.trim(); + } + this.description = description; } @@ -87,7 +123,139 @@ public void setDescription(String description) { * Checks whether this keyword does provide a description */ public boolean hasDescription() { - return (getDescription() != null && !getDescription().isEmpty()); + return !getDescription().isEmpty(); + } + + @Override + public boolean equals(Object obj) { + if (!this.getClass().equals(obj.getClass())) { + return false; + } + + Keyword compare = (Keyword) obj; + + if (!this.getKeyword().equals(compare.getKeyword())) { + return false; + } + + if (!this.getDescription().equals(compare.getDescription())) { + return false; + } + + return true; + } + + @Override + public int compareTo(Keyword keyword) { + // check if they are equal + if (this.equals(keyword)) { + return 0; + } + + // declare Strings which will be compared + String own; + String compare; + + if (this.getKeyword().equals(keyword.getKeyword())) { + own = getDescription(); + compare = keyword.getDescription(); + } else { + own = getKeyword(); + compare = getKeyword(); + } + + int minLength = own.length(); + + if (compare.length() < minLength) { + minLength = compare.length(); + } + + // compare according to alphabetical order + for (int i = 0; i < minLength; i++) { + if (own.charAt(i) < compare.charAt(i)) { + return -1; + } else { + if (own.charAt(i) > compare.charAt(i)) { + return 1; + } + } + } + + return 0; + } + + @Override + public String getSaveableFormat() { + // store attributes + String saveFormat = KEYWORD_START_SAVESEQUENCE + "\n" + getKeyword() + "\n" + + KEYWORD_END_SAVESEQUENCE + "\n"; + saveFormat += DESCRIPTION_START_SAVESEQUENCE + "\n" + getDescription() + "\n" + + DESCRIPTION_END_SAVESEQUENCE; + + return saveFormat; + } + + @Override + public boolean recreateFrom(String savedFormat) { + if (!isSaveFormat(savedFormat)) { + return false; + } + + // get the keyword + String keyword = savedFormat.substring( + savedFormat.indexOf(KEYWORD_START_SAVESEQUENCE) + + KEYWORD_START_SAVESEQUENCE.length(), + savedFormat.indexOf(KEYWORD_END_SAVESEQUENCE)).trim(); + // get the description + String description = savedFormat.substring( + savedFormat.indexOf(DESCRIPTION_START_SAVESEQUENCE) + + DESCRIPTION_START_SAVESEQUENCE.length(), + savedFormat.indexOf(DESCRIPTION_END_SAVESEQUENCE)).trim(); + + // apply the values + setKeyword(keyword); + setDescription(description); + + return true; + } + + @Override + public boolean isSaveFormat(String format) { + if (!format.contains(KEYWORD_START_SAVESEQUENCE) + || !format.contains(KEYWORD_END_SAVESEQUENCE) + || !format.contains(DESCRIPTION_START_SAVESEQUENCE) + || !format.contains(DESCRIPTION_END_SAVESEQUENCE)) { + // all these keywords have to be present + return false; + } + + // check for positions of these keywords + int keywordStart = format.indexOf(KEYWORD_START_SAVESEQUENCE); + int keywordEnd = format.indexOf(KEYWORD_END_SAVESEQUENCE); + int descriptionStart = format.indexOf(DESCRIPTION_START_SAVESEQUENCE); + int descriptionEnd = format.indexOf(DESCRIPTION_END_SAVESEQUENCE); + + if (keywordEnd < keywordStart || descriptionEnd < descriptionStart + || keywordStart > descriptionStart || descriptionStart < keywordEnd) { + // the order of the keywords is messed up + return false; + } + + // check that there is actually content in it + String keyword = format.substring( + format.indexOf(KEYWORD_START_SAVESEQUENCE) + KEYWORD_START_SAVESEQUENCE.length(), + format.indexOf(KEYWORD_END_SAVESEQUENCE)).trim(); + String description = format.substring( + format.indexOf(DESCRIPTION_START_SAVESEQUENCE) + + DESCRIPTION_START_SAVESEQUENCE.length(), + format.indexOf(DESCRIPTION_END_SAVESEQUENCE)).trim(); + + if (keyword.isEmpty() || description.isEmpty()) { + return false; + } + + // everything is ok + return true; } } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java index 64a2d5b0..1c32ca6e 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java @@ -1,11 +1,242 @@ package raven.sqdev.infoCollection.base; -public class KeywordList { +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.eclipse.core.runtime.Assert; + +import raven.sqdev.interfaces.ISaveable; + +/** + * A list containing multiple Keywords + * + * @author Raven + * + */ +public class KeywordList implements ISaveable { + + /** + * The sequence indicating the start of the keywordList in the saveable + * String format of this class + */ + public static final String LIST_START_SAVESEQUENCE = "KeywordList:"; + /** + * The sequence indicating the end of the keywordList in the saveable String + * format of this class + */ + public static final String LIST_END_SAVESEQUENCE = "//KeywordListEnd//"; + /** + * The sequence seperating the single keywords in the saveable String format + * of this class + */ + public static final String LIST_SEPERATOR_SAVESEQUENCE = "%NextListItem%"; + /** + * The list of keywords where every starting letter has it's own list. + * Therefor get('b'-'a') will get the list for the starting + * letter b + */ + private List> keywords; + + + /** + * Creates an instance of this KeywordList + */ public KeywordList() { - // TODO Auto-generated constructor stub + keywords = new ArrayList>(26); + + // initialize a list for every letter + for (int i = 'a'; i <= 'z'; i++) { + keywords.add(new ArrayList()); + } + } + + /** + * Recreates an instance of this KeywordList from the given + * saveFormat. If saveFormat is not considered a valid saveFormat the list + * will be initialized as if no parameter was given + * + * @param saveFormat + * The saveFormat which should be used to initialize this list + * from + */ + public KeywordList(String saveFormat) { + this(); + + if (isSaveFormat(saveFormat)) { + recreateFrom(saveFormat); + } + } + + /** + * Adds a keyword to this list + * + * @param keyword + * Th keyword to add + */ + public void addKeyword(Keyword keyword) { + Assert.isNotNull(keyword); + + keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a').add(keyword); + + Collections.sort(keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a')); + } + + /** + * removes a keyword from this list + * + * @param keyword + * The keyword to remove + */ + public void removeKeyword(Keyword keyword) { + Assert.isNotNull(keyword); + + if (this.contains(keyword)) { + // only add a keyword once + return; + } + + keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a').remove(keyword); + } + + /** + * Checks if the given Keyword is contained in this list + * + * @param keyword + * The keyword to search for + */ + public boolean contains(Keyword keyword) { + return keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a') + .contains(keyword); } - // TODO: store keywords sorted alphabetically + /** + * Gets all of the keywords stored in this list as one single list + * + * @return The list of keywords contained in this List in alphabetical order + */ + public ArrayList getKeywords() { + ArrayList allKeywords = new ArrayList(); + + for (List currentList : keywords) { + allKeywords.addAll(currentList); + } + + return allKeywords; + } + + /** + * Gets the keywordList where each starting letter is stored in it's own + * subList.
    + * 'a' is index 0 + */ + public List> getKeywordsSorted() { + return keywords; + } + + /** + * Gets the keyword with the respective String representation + * + * @param keyword + * The String representation of the desired keyword + * @return The desired Keyword or null if none + * could be found + */ + public Keyword getKeyword(String keyword) { + List list = keywords.get(Character.toLowerCase(keyword.charAt(0)) - 'a'); + + for (Keyword currentKeyword : list) { + if (currentKeyword.getKeyword().equals(keyword)) { + return currentKeyword; + } + } + + return null; + } + + /** + * Checks whether this list contains a keyword with the given String + * representation + * + * @param keyword + * The String representation of the desired keyword + */ + public boolean contains(String keyword) { + return getKeyword(keyword) != null; + } + + @Override + public String getSaveableFormat() { + String saveableFormat = LIST_START_SAVESEQUENCE + "\n\n"; + + for (Keyword currentKeyword : getKeywords()) { + saveableFormat += "\n" + currentKeyword.getSaveableFormat(); + + saveableFormat += "\n\n" + LIST_SEPERATOR_SAVESEQUENCE + "\n"; + } + + if (getKeywords().size() > 0) { + // remove last seperator + saveableFormat = saveableFormat.substring(0, + saveableFormat.length() - (LIST_SEPERATOR_SAVESEQUENCE.length() + 1)); + } + + saveableFormat += "\n\n" + LIST_END_SAVESEQUENCE; + + return saveableFormat.replace("\n", "\r\n"); + } + + @Override + public boolean recreateFrom(String savedFormat) { + savedFormat = savedFormat.replace("\r\n", "\n"); + + String listContent = savedFormat.substring( + savedFormat.indexOf(LIST_START_SAVESEQUENCE) + LIST_START_SAVESEQUENCE.length(), + savedFormat.indexOf(LIST_END_SAVESEQUENCE)).trim(); + + for (String currentKeywordContent : listContent.split(LIST_SEPERATOR_SAVESEQUENCE)) { + currentKeywordContent = currentKeywordContent.trim(); + + Keyword currentKeyword; + + if (currentKeywordContent.contains(SQFCommand.SYNTAX_START_SAVESEQUENCE)) { + // if the info corresponds to a SQF command + currentKeyword = new SQFCommand(); + } else { + if (currentKeywordContent.contains(SQFElement.WIKI_START_SAVESEQUENCE)) { + // if the info corresponds to a SQFElement + currentKeyword = new SQFElement(); + } else { + // else it's just a normal Keyword + currentKeyword = new Keyword(); + } + } + + if (!currentKeyword.recreateFrom(currentKeywordContent)) { + return false; + } else { + addKeyword(currentKeyword); + } + } + + return true; + } + + @Override + public boolean isSaveFormat(String format) { + if (!format.contains(LIST_START_SAVESEQUENCE) || !format.contains(LIST_END_SAVESEQUENCE)) { + return false; + } + + int startPos = format.indexOf(LIST_START_SAVESEQUENCE); + int endPos = format.indexOf(LIST_END_SAVESEQUENCE); + + if (endPos < startPos) { + return false; + } + + return true; + } } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java index 18ad93f3..c654b397 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java @@ -1,6 +1,5 @@ package raven.sqdev.infoCollection.base; -import java.net.URL; import java.util.ArrayList; import org.eclipse.core.runtime.Assert; @@ -8,17 +7,109 @@ import raven.sqdev.syntax.Syntax; /** - * A class representing a SQF command and all necessary information about it + * A SQFElement representing a SQF command and all necessary + * information about it * * @author Raven * */ -public class SQFCommand extends Keyword { +public class SQFCommand extends SQFElement { + + /** + * The sequence indicating the start of the syntax attribute in the saveable + * String format of this class + */ + public static final String SYNTAX_START_SAVESEQUENCE = "SyntaxStart:"; + /** + * The sequence indicating the end of the syntax attribute in the saveable + * String format of this class + */ + public static final String SYNTAX_END_SAVESEQUENCE = "//SyntaxEnd//"; + /** + * The sequence seperating multiple syntaxes in the saveable String format + * of this class + */ + public static final String SYNTAX_SEPERATOR_SAVESEQUENCE = "%NextSyntax%"; + /** + * The sequence indicating the start of the rawSyntax attribute in the + * saveable String format of this class + */ + public static final String RAWSYNTAX_START_SAVESEQUENCE = "RawSyntaxStart:"; + /** + * The sequence indicating the end of the rawSyntax attribute in the + * saveable String format of this class + */ + public static final String RAWSYNTAX_END_SAVESEQUENCE = "//RawSyntaxEnd//"; + /** + * The sequence seperating multiple rawSyntaxes in the saveable String + * format of this class + */ + public static final String RAWSYNTAX_SEPERATOR_SAVESEQUENCE = "%NextRawSyntax%"; + /** + * The sequence indicating the start of the example attribute in the + * saveable String format of this class + */ + public static final String EXAMPLE_START_SAVESEQUENCE = "ExampleStart:"; + /** + * The sequence indicating the end of the example attribute in the saveable + * String format of this class + */ + public static final String EXAMPLE_END_SAVESEQUENCE = "//ExampleEnd//"; + /** + * The sequence seperating multiple examples in the saveable String format + * of this class + */ + public static final String EXAMPLE_SEPERATOR_SAVESEQUENCE = "%NextExample%"; + /** + * The sequence indicating the start of the locality attribute in the + * saveable String format of this class + */ + public static final String LOCALITY_START_SAVESEQUENCE = "LocalityStart:"; + /** + * The sequence indicating the end of the locality attribute in the saveable + * String format of this class + */ + public static final String LOCALITY_END_SAVESEQUENCE = "//LocalityEnd//"; + /** + * The seperator used to seperate the effect's locality from the argument's + * locality + */ + public static final String LOCALITY_SEPERATOR_SAVESEQUENCE = "/"; + /** + * The sequence indicating the start of the note attribute in the saveable + * String format of this class + */ + public static final String NOTE_START_SAVESEQUENCE = "NoteStart:"; + /** + * The sequence indicating the end of the locality attribute in the saveable + * String format of this class + */ + public static final String NOTE_END_SAVESEQUENCE = "//NoteEnd//"; + /** + * The sequence seperating multiple notes in the saveable String format of + * this class + */ + public static final String NOTE_SEPERATOR_SAVESEQUENCE = "%NextNote%"; + /** + * The sequence indicating the start of the returnValue attribute in the + * saveable String format of this class + */ + public static final String RETURNVALUE_START_SAVESEQUENCE = "ReturnValueStart:"; + /** + * The sequence indicating the end of the returnValue attribute in the + * saveable String format of this class + */ + public static final String RETURNVALUE_END_SAVESEQUENCE = "//ReturnValueEnd//"; /** * The syntaxes of this command */ private ArrayList syntaxes; + /** + * The syntaxes of this command in their raw form without having been + * processed with their parameters + */ + private ArrayList rawSytaxes; /** * An example of the usage of this command @@ -29,17 +120,24 @@ public class SQFCommand extends Keyword { * An array containing the locality of this command's arguments (index 0) * and the locality of it's effect (index 1) */ - private String[] locality; + private ELocality[] locality; /** - * The url to the wiki page of this command + * The notes attached to this command */ - private URL wikiPage; + private ArrayList notes; /** - * The notes attached to this command + * The ruturn type of this command */ - private ArrayList notes; + private String returnType; + + /** + * Creates an instance of a SQF command + */ + public SQFCommand() { + this("", null); + } /** * Creates an instance of a SQF command @@ -62,7 +160,14 @@ public SQFCommand(String command) { public SQFCommand(String command, String description) { super(command, description); + locality = new ELocality[2]; + locality[0] = ELocality.UNDEFINED; + locality[1] = ELocality.UNDEFINED; + examples = new ArrayList(0); + syntaxes = new ArrayList(1); + notes = new ArrayList(0); + rawSytaxes = new ArrayList(1); } /** @@ -106,6 +211,13 @@ public void addSyntax(Syntax syntax) { } } + /** + * Checks if this command has a stored syntax + */ + public boolean hasSyntax() { + return !getSyntaxes().isEmpty(); + } + /** * Gets the examples associated with this command * @@ -139,11 +251,38 @@ public void setExamples(ArrayList examples) { * The example to add */ public void addExample(String example) { + example = example.trim(); + Assert.isTrue(example != null && !example.isEmpty()); - if (!getExamples().contains(example)) { - getExamples().add(example); + if (!example.contains("$Code$") && !example.contains("$/Code$")) { + // surround with Code tags + example = "$Code$" + example.trim() + "$/Code$"; } + + String taggedExample = ""; + + for (String current : example.split("$Code§")) { + // put the example part that is not yet in code bracket intop it as + // a comment + String comment = "\n// " + current.substring(current.indexOf("$/Code$") + 7).trim() + .replace("\n", "\n//"); + taggedExample += ((current.startsWith("$Code$")) ? "" : "$Code$") + + current.substring(0, current.indexOf("$/Code$")) + + ((comment.equals("\n// ")) ? "" : comment) + "$/Code$"; + } + + + if (!getExamples().contains(taggedExample)) { + getExamples().add(taggedExample); + } + } + + /** + * Checks if this command has stored examples + */ + public boolean hasExample() { + return !getExamples().isEmpty(); } /** @@ -152,7 +291,7 @@ public void addExample(String example) { * * @return The array containg the localities */ - public String[] getLocality() { + public ELocality[] getLocality() { return locality; } @@ -161,7 +300,7 @@ public String[] getLocality() { * * @param locality */ - protected void setLocality(String[] locality) { + protected void setLocality(ELocality[] locality) { Assert.isNotNull(locality); Assert.isTrue(locality.length == 2); @@ -175,8 +314,8 @@ protected void setLocality(String[] locality) { * The locality of the arguemnts */ public void setArgumentLocality(ELocality locality) { - String[] loc = getLocality(); - loc[0] = locality.toString(); + ELocality[] loc = getLocality(); + loc[0] = locality; setLocality(loc); } @@ -185,7 +324,7 @@ public void setArgumentLocality(ELocality locality) { * Gets this command's argument's locality */ public ELocality getArgumentLocality() { - return ELocality.valueOf(getLocality()[0]); + return getLocality()[0]; } /** @@ -195,8 +334,8 @@ public ELocality getArgumentLocality() { * The locality of the effect */ public void setEffectLocality(ELocality locality) { - String[] loc = getLocality(); - loc[1] = locality.toString(); + ELocality[] loc = getLocality(); + loc[1] = locality; setLocality(loc); } @@ -205,33 +344,7 @@ public void setEffectLocality(ELocality locality) { * Gets this command's effect's locality */ public ELocality getEffectLocality() { - return ELocality.valueOf(getLocality()[1]); - } - - /** - * Gets the URL of this command's wiki page - */ - public URL getWikiPage() { - return wikiPage; - } - - /** - * Sets the URL to this command's wiki page - * - * @param wikiPage - * The wiki page URL - */ - public void setWikiPage(URL wikiPage) { - Assert.isNotNull(wikiPage); - - this.wikiPage = wikiPage; - } - - /** - * Checks whether the wiki page of this command has been set - */ - public boolean isWikiGiven() { - return getWikiPage() != null; + return getLocality()[1]; } /** @@ -261,8 +374,319 @@ public void setNotes(ArrayList notes) { * @param note */ public void addNote(String note) { + note = note.trim(); + + Assert.isTrue(note != null && !note.isEmpty()); + if (!getNotes().contains(note)) { getNotes().add(note); } } + + /** + * Checks if this command has notes attached to it + */ + public boolean hasNote() { + return !getNotes().isEmpty(); + } + + /** + * Gets the return type of this command. "Nothing" is returned when this + * command does not have a return value + */ + public String getReturnType() { + return (returnType == null) ? "Nothing" : returnType; + } + + /** + * Sets the return type for this command + * + * @param returnType + * The return type + */ + public void setReturnType(String returnType) { + if (returnType == null || returnType.isEmpty()) { + returnType = "Nothing"; + } + + returnType = returnType.trim(); + + this.returnType = returnType; + } + + /** + * Checks whether this command has a return type + */ + public boolean hasReturnValue() { + return !getReturnType().equals("Nothing"); + } + + /** + * Gets the raw syntaxes of this command. These are for display purposes + * only as they have not been processed with their parameters + */ + public ArrayList getRawSytaxes() { + return rawSytaxes; + } + + /** + * Sets the raw syntaxes of this command + * + * @param rawSytaxes + * The raw (unprocessed) syntaxes for this command that can be + * used for display purposes + */ + public void setRawSytaxes(ArrayList rawSytaxes) { + Assert.isNotNull(rawSytaxes); + + this.rawSytaxes = rawSytaxes; + } + + /** + * Adds a raw syntax to this command + * + * @param rawSyntax + * The raw syntax to add + */ + public void addRawSyntax(String rawSyntax) { + rawSyntax = rawSyntax.trim(); + + Assert.isTrue(rawSyntax != null && !rawSyntax.isEmpty()); + + getRawSytaxes().add(rawSyntax); + } + + /** + * Checks if this command has raw syntaxes attached to it + */ + public boolean hasRawSyntax() { + return !getRawSytaxes().isEmpty(); + } + + @Override + public String toString() { + String representation = ""; + + representation += "Name: " + getKeyword() + "\n"; + representation += "hasDescription: " + hasDescription() + "\n"; + representation += "hasSyntax: " + hasSyntax() + "\n"; + representation += "hasRawSyntax: " + hasRawSyntax() + "\n"; + representation += "hasExamples: " + hasExample() + "\n"; + representation += "hasNotes: " + hasNote() + "\n"; + + return representation; + } + + @Override + public String getSaveableFormat() { + String format = super.getSaveableFormat() + "\n"; + + // add syntaxes + format += SYNTAX_START_SAVESEQUENCE + "\n"; + for (Syntax currentSyntax : getSyntaxes()) { + format += currentSyntax.toString() + "\n"; + format += SYNTAX_SEPERATOR_SAVESEQUENCE + "\n"; + } + if (getSyntaxes().size() > 0) { + // remove last seperator + format = format.substring(0, + format.length() - (SYNTAX_SEPERATOR_SAVESEQUENCE.length() + 1)); + } + format += SYNTAX_END_SAVESEQUENCE + "\n"; + + // add rawSyntaxes + format += RAWSYNTAX_START_SAVESEQUENCE + "\n"; + for (String currentSyntax : getRawSytaxes()) { + format += currentSyntax + "\n"; + format += RAWSYNTAX_SEPERATOR_SAVESEQUENCE + "\n"; + } + if (getRawSytaxes().size() > 0) { + // remove last seperator + format = format.substring(0, + format.length() - (RAWSYNTAX_SEPERATOR_SAVESEQUENCE.length() + 1)); + } + format += RAWSYNTAX_END_SAVESEQUENCE + "\n"; + + // add examples + format += EXAMPLE_START_SAVESEQUENCE + "\n"; + for (String currentExample : getExamples()) { + format += currentExample + "\n"; + format += EXAMPLE_SEPERATOR_SAVESEQUENCE + "\n"; + } + if (getExamples().size() > 0) { + // remove last seperator + format = format.substring(0, + format.length() - (EXAMPLE_SEPERATOR_SAVESEQUENCE.length() + 1)); + } + format += EXAMPLE_END_SAVESEQUENCE + "\n"; + + // add locality + format += LOCALITY_START_SAVESEQUENCE + "\n"; + format += getLocality()[0].toString() + " " + LOCALITY_SEPERATOR_SAVESEQUENCE + " " + + getLocality()[1].toString() + "\n"; + format += LOCALITY_END_SAVESEQUENCE + "\n"; + + + // add notes + format += NOTE_START_SAVESEQUENCE + "\n"; + for (String currentNote : getNotes()) { + format += currentNote + "\n"; + format += NOTE_SEPERATOR_SAVESEQUENCE + "\n"; + } + if (getNotes().size() > 0) { + // remove last seperator + format = format.substring(0, + format.length() - (NOTE_SEPERATOR_SAVESEQUENCE.length() + 1)); + } + format += NOTE_END_SAVESEQUENCE + "\n"; + + // add returnType + format += RETURNVALUE_START_SAVESEQUENCE + "\n"; + format += getReturnType() + "\n"; + format += RETURNVALUE_END_SAVESEQUENCE; + + return format; + } + + @Override + public boolean recreateFrom(String savedFormat) { + if (!super.recreateFrom(savedFormat) || !isSaveFormat(savedFormat)) { + return false; + } + + // symtax + String syntaxContent = savedFormat.substring( + savedFormat.indexOf(SYNTAX_START_SAVESEQUENCE) + SYNTAX_START_SAVESEQUENCE.length(), + savedFormat.indexOf(SYNTAX_END_SAVESEQUENCE)).trim(); + + for (String currentSyntax : syntaxContent.split(SYNTAX_SEPERATOR_SAVESEQUENCE)) { + // process each syntax + currentSyntax = currentSyntax.trim(); + + if (!currentSyntax.isEmpty()) { + // TODO parse to Syntax + } + } + + // rawSyntax + String rawSyntaxContent = savedFormat.substring( + savedFormat.indexOf(RAWSYNTAX_START_SAVESEQUENCE) + + RAWSYNTAX_START_SAVESEQUENCE.length(), + savedFormat.indexOf(RAWSYNTAX_END_SAVESEQUENCE)).trim(); + + for (String currentRawSyntax : rawSyntaxContent.split(RAWSYNTAX_SEPERATOR_SAVESEQUENCE)) { + // process each rawSyntax + currentRawSyntax = currentRawSyntax.trim(); + + if (!currentRawSyntax.isEmpty()) { + addRawSyntax(currentRawSyntax); + } + } + + // examples + String exampleContent = savedFormat.substring( + savedFormat.indexOf(EXAMPLE_START_SAVESEQUENCE) + + EXAMPLE_START_SAVESEQUENCE.length(), + savedFormat.indexOf(EXAMPLE_END_SAVESEQUENCE)).trim(); + + for (String currentExample : exampleContent.split(EXAMPLE_SEPERATOR_SAVESEQUENCE)) { + // process each example + currentExample = currentExample.trim(); + + if (!currentExample.isEmpty()) { + addExample(currentExample); + } + } + + // locality + String localityContent = savedFormat.substring( + savedFormat.indexOf(LOCALITY_START_SAVESEQUENCE) + + LOCALITY_START_SAVESEQUENCE.length(), + savedFormat.indexOf(LOCALITY_END_SAVESEQUENCE)).trim(); + + String argumentLocality = localityContent + .substring(0, localityContent.indexOf(LOCALITY_SEPERATOR_SAVESEQUENCE)).trim(); + String effectsLocality = localityContent + .substring(localityContent.indexOf(LOCALITY_SEPERATOR_SAVESEQUENCE) + + LOCALITY_SEPERATOR_SAVESEQUENCE.length()) + .trim(); + + if (ELocality.resolve(argumentLocality) == null + || ELocality.resolve(effectsLocality) == null) { + return false; + } + setArgumentLocality(ELocality.resolve(argumentLocality)); + setEffectLocality(ELocality.resolve(effectsLocality)); + + // notes + String noteContent = savedFormat.substring( + savedFormat.indexOf(NOTE_START_SAVESEQUENCE) + NOTE_START_SAVESEQUENCE.length(), + savedFormat.indexOf(NOTE_END_SAVESEQUENCE)).trim(); + + for (String currentNote : noteContent.split(NOTE_SEPERATOR_SAVESEQUENCE)) { + // process each note + currentNote = currentNote.trim(); + + if (!currentNote.isEmpty()) { + addNote(currentNote); + } + } + + // return type + String returnType = savedFormat.substring( + savedFormat.indexOf(RETURNVALUE_START_SAVESEQUENCE) + + RETURNVALUE_START_SAVESEQUENCE.length(), + savedFormat.indexOf(RETURNVALUE_END_SAVESEQUENCE)).trim(); + + if (returnType.isEmpty()) { + return false; + } else { + setReturnType(returnType); + } + + return true; + } + + @Override + public boolean isSaveFormat(String format) { + if (!super.isSaveFormat(format)) { + return false; + } + + if (!format.contains(SYNTAX_START_SAVESEQUENCE) || !format.contains(SYNTAX_END_SAVESEQUENCE) + || !format.contains(RAWSYNTAX_START_SAVESEQUENCE) + || !format.contains(RAWSYNTAX_END_SAVESEQUENCE) + || !format.contains(EXAMPLE_START_SAVESEQUENCE) + || !format.contains(EXAMPLE_END_SAVESEQUENCE) + || !format.contains(LOCALITY_START_SAVESEQUENCE) + || !format.contains(LOCALITY_END_SAVESEQUENCE) + || !format.contains(LOCALITY_SEPERATOR_SAVESEQUENCE) + || !format.contains(NOTE_START_SAVESEQUENCE) + || !format.contains(NOTE_END_SAVESEQUENCE) + || !format.contains(RETURNVALUE_START_SAVESEQUENCE) + || !format.contains(RETURNVALUE_END_SAVESEQUENCE)) { + // an info is not properly given + return false; + } + + int syntaxStart = format.indexOf(SYNTAX_START_SAVESEQUENCE); + int syntaxEnd = format.indexOf(SYNTAX_END_SAVESEQUENCE); + int rawSyntaxStart = format.indexOf(RAWSYNTAX_START_SAVESEQUENCE); + int rawSyntaxEnd = format.indexOf(RAWSYNTAX_END_SAVESEQUENCE); + int exampleStart = format.indexOf(EXAMPLE_START_SAVESEQUENCE); + int exampleEnd = format.indexOf(EXAMPLE_END_SAVESEQUENCE); + int localityStart = format.indexOf(LOCALITY_START_SAVESEQUENCE); + int localityEnd = format.indexOf(LOCALITY_END_SAVESEQUENCE); + int noteStart = format.indexOf(NOTE_START_SAVESEQUENCE); + int noteEnd = format.indexOf(NOTE_END_SAVESEQUENCE); + int returnStart = format.indexOf(RETURNVALUE_START_SAVESEQUENCE); + int returnEnd = format.indexOf(RETURNVALUE_END_SAVESEQUENCE); + + if (syntaxEnd < syntaxStart || rawSyntaxEnd < rawSyntaxStart || exampleEnd < exampleStart + || localityEnd < localityStart || noteEnd < noteStart || returnEnd < returnStart) { + return false; + } + + return true; + } } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFControlStructure.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFControlStructure.java new file mode 100644 index 00000000..cf24c707 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFControlStructure.java @@ -0,0 +1,21 @@ +package raven.sqdev.infoCollection.base; + +/** + * A SQFElement representing a control structure + * + * @author Raven + * + */ +public class SQFControlStructure extends SQFElement { + + /** + * Creates an instance of this SQFControlStructure + * + * @param keyword + * The keyword for this control structure + */ + public SQFControlStructure(String keyword) { + super(keyword); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFElement.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFElement.java new file mode 100644 index 00000000..d93fb48b --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFElement.java @@ -0,0 +1,148 @@ +package raven.sqdev.infoCollection.base; + +import java.net.MalformedURLException; +import java.net.URL; + +import org.eclipse.core.runtime.Assert; + +import raven.sqdev.exceptions.SQDevException; + +/** + * A Keyword representing an SQF Element. + * + * @author Raven + * + */ +public class SQFElement extends Keyword { + + /** + * The sequence indicating the start of the wikiPage attribute in the + * saveable String format of this class + */ + public static final String WIKI_START_SAVESEQUENCE = "WikiPageStart:"; + /** + * The sequence indicating the end of the wikiPage attribute in the saveable + * String format of this class + */ + public static final String WIKI_END_SAVESEQUENCE = "//WikiPageEnd//"; + + /** + * The url to the wiki page of this command + */ + private URL wikiPage; + + /** + * Creates an instance of this SQFElement + */ + public SQFElement() { + this("", null); + } + + /** + * Creates an instance of this SQFElement + * + * @param name + * The name of this element + */ + public SQFElement(String name) { + this(name, ""); + } + + /** + * Creates an instance of this SQFElement + * + * @param name + * The name of this element + * @param description + * The description of this element + */ + public SQFElement(String name, String description) { + super(name, description); + } + + /** + * Gets the URL of this command's wiki page + */ + public URL getWikiPage() { + return wikiPage; + } + + /** + * Sets the URL to this command's wiki page + * + * @param wikiPage + * The wiki page URL + */ + public void setWikiPage(URL wikiPage) { + Assert.isNotNull(wikiPage); + + this.wikiPage = wikiPage; + } + + /** + * Checks whether the wiki page of this command has been set + */ + public boolean isWikiPageGiven() { + return getWikiPage() != null; + } + + @Override + public String getSaveableFormat() { + String format = super.getSaveableFormat(); + + // append own attributes + format += "\n" + WIKI_START_SAVESEQUENCE + "\n" + getWikiPage().toString() + "\n" + + WIKI_END_SAVESEQUENCE; + + return format; + } + + @Override + public boolean recreateFrom(String savedFormat) { + if (!super.recreateFrom(savedFormat) || !isSaveFormat(savedFormat)) { + return false; + } + + // get wikiPage + String wiki = savedFormat.substring( + savedFormat.indexOf(WIKI_START_SAVESEQUENCE) + WIKI_START_SAVESEQUENCE.length(), + savedFormat.indexOf(WIKI_END_SAVESEQUENCE)).trim(); + + try { + // store wikiPage + setWikiPage(new URL(wiki)); + } catch (MalformedURLException e) { + try { + throw new SQDevException("The URL for the wiki page for the command " + getKeyword() + + " is not in the proper format!", e); + } catch (SQDevException e1) { + e1.printStackTrace(); + + // state that something went wrong + return false; + } + } + + return true; + } + + @Override + public boolean isSaveFormat(String format) { + if (!super.isSaveFormat(format)) { + return false; + } + + if (!format.contains(WIKI_START_SAVESEQUENCE) || !format.contains(WIKI_END_SAVESEQUENCE)) { + return false; + } + + int wikiStart = format.indexOf(WIKI_START_SAVESEQUENCE); + int wikiEnd = format.indexOf(WIKI_END_SAVESEQUENCE); + + if (wikiStart > wikiEnd) { + return false; + } + + return true; + } +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IEditorKeyHandler.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IEditorKeyHandler.java new file mode 100644 index 00000000..442b8024 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IEditorKeyHandler.java @@ -0,0 +1,51 @@ +package raven.sqdev.interfaces; + +import org.eclipse.swt.events.VerifyEvent; + +/** + * Interface for an EditorKeyHandler that provides a method to check if the + * respective handler will handle the given event and a method to actually do so + * + * @author Raven + * + */ +public interface IEditorKeyHandler { + + /** + * Checks if the respective class will handle the respective KeyEvent + * + * @param event + * The fired KeyEvent + * @return + */ + public boolean willHandle(VerifyEvent event); + + + /** + * Handles the given KeyEvent (not if it's a deletion) + * + * @param event + */ + public void handleAddition(VerifyEvent event); + + /** + * Handles the given deletion + * + * @param event + */ + public void handleDeletion(VerifyEvent event); + + /** + * Checks if the typed character will trigger a deletion + * @param c The typed character + * @return + */ + public static boolean isDeletion(char c) { + if (c == '\b') { + return true; + }else { + return false; + } + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IKeywordProvider.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IKeywordProvider.java new file mode 100644 index 00000000..48cead3d --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IKeywordProvider.java @@ -0,0 +1,26 @@ +package raven.sqdev.interfaces; + +import raven.sqdev.infoCollection.base.KeywordList; + +/** + * An interface for an keyword provider that has to declare a method for + * providing an array of Strings + * + * @author Raven + * + */ +public interface IKeywordProvider { + /** + * Gets the keywords as an String array + * + */ + public KeywordList getKeywordList(); + + /** + * Sets the keywords for this provider + * + * @param keywords + * The array of keywords + */ + public void setKeywordList(KeywordList keywords); +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/ISaveable.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/ISaveable.java new file mode 100644 index 00000000..d429b356 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/ISaveable.java @@ -0,0 +1,43 @@ +package raven.sqdev.interfaces; + +/** + * An interface for classes that are saveable in a (human) readable textFile + * + * @author Raven + * + */ +public interface ISaveable { + + /** + * Gets the class's String representation that should be used in order to + * save this object's values in a file that can later on be used to reload + * the object + * + * @return The saveable String representation of this object + */ + public String getSaveableFormat(); + + /** + * Will recreate this object according to the savedFormat given. + * + * @param savedFormat + * The String representation this object should adapt to. Has to + * be return true with + * isSaveFormat(String format) + * @return True if the recreation was successful. + * False otherwise + */ + public boolean recreateFrom(String savedFormat); + + /** + * Checks if the given String is in the proper format to use + * recreateFrom(String savedFormat) with + * + * @param format + * The String to test + * @return True if the given String is in the proper format, + * False otherwise. + */ + public boolean isSaveFormat(String format); + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java new file mode 100644 index 00000000..72c824f7 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java @@ -0,0 +1,136 @@ +package raven.sqdev.pluginManagement; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.MessageBox; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchListener; +import org.eclipse.ui.PlatformUI; + +/** + * A manager for general eclipse events where certain behaviour patterns can be + * registered for a certain event + * + * @author Raven + * + */ +public class SQDevEclipseEventManager { + /** + * The manager instance + */ + private static SQDevEclipseEventManager manager; + + private List jobs; + + private SQDevEclipseEventManager() { + jobs = new ArrayList(0); + + PlatformUI.getWorkbench().addWorkbenchListener(new IWorkbenchListener() { + + @Override + public boolean preShutdown(IWorkbench workbench, boolean forced) { + AtomicBoolean shutDown = new AtomicBoolean(true); + + for (Job currentJob : jobs) { + if (currentJob != null && currentJob.getState() == Job.RUNNING) { + // inform about currently running jobs and + // offers to terminate them + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + @Override + public void run() { + MessageBox box = new MessageBox(PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getShell(), + SWT.ICON_WARNING | SWT.YES | SWT.NO); + + box.setText("Running Job"); + box.setMessage("The Job \"" + currentJob.getName() + + "\" is still running!\n\n" + + " Do you want to cancel this job now?"); + + int result = box.open(); + + switch (result) { + case SWT.YES: + boolean running = false; + + for (Job current : jobs) { + running = !current.cancel(); + } + + // if one job is running then + // kill all after 3 secs + + if (running) { + try { + currentJob.getThread().join(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // kill Thread after max. 3 + // secs + for (Job current : jobs) { + current.getThread().interrupt(); + } + } + + break; + + default: + // don't close + shutDown.set(false); + } + } + }); + + break; + } + } + + return shutDown.get(); + } + + @Override + public void postShutdown(IWorkbench workbench) { + } + }); + } + + /** + * Gets the SQDevManager for eclipse events + * + * @return The + */ + public static SQDevEclipseEventManager getManager() { + if (manager == null) { + manager = new SQDevEclipseEventManager(); + } + + return manager; + } + + /** + * Adds a job to the list of jobs being checked when eclipse is closed.
    + * If any running jobs are registered while closing eclipse a popup will + * appear asking if these jobs should be terminated. If so a cancel request + * will be send to them and then the jobs have 3secs to terminate themselve. + * After this time their Thread will be interrupted + * + * @param job + * The job to register + */ + public void registerCloseSuspendingJob(Job job) { + // add the job + jobs.add(job); + + // check for null jobs and remove them + while (jobs.contains(null)) { + jobs.remove(null); + } + } +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevPluginManager.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevPluginManager.java new file mode 100644 index 00000000..2bf4c43c --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManagement/SQDevPluginManager.java @@ -0,0 +1,151 @@ +package raven.sqdev.pluginManagement; + +import java.util.ArrayList; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.Platform; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleException; + +import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.exceptions.SQDevException; + +/** + * An manager for all running SQDev plugins + * + * @author Raven + * + */ +public class SQDevPluginManager { + + /** + * The manager instance + */ + protected static SQDevPluginManager manager; + + /** + * The list of all registered plugins + */ + protected ArrayList pluginList; + + /** + * Creates an SQDevPluginManager instance. It's not meant to be + * done manually + */ + private SQDevPluginManager() { + pluginList = new ArrayList(); + } + + /** + * Gets the PluginManager holding all the references to running SQDevPlugins + * + * @return The SQDevPLuginManager + */ + public static SQDevPluginManager getManager() { + if (manager == null) { + manager = new SQDevPluginManager(); + } + + return manager; + } + + /** + * Checks if the given plugin is currently registered in this manager + * + * @param plugin + * The plugin to lok for + * @return + */ + public boolean contains(AbstractUIPlugin plugin) { + return pluginList.contains(plugin); + } + + /** + * Checks if the given plugin is currently registered in this manager + * + * @param pluginName + * The name (ID) of the plugin to searchs + * @return + */ + public boolean contains(String pluginName) { + for (AbstractUIPlugin currentPlugin : pluginList) { + if (currentPlugin.getBundle().getSymbolicName().toLowerCase() + .equals(pluginName.toLowerCase())) { + return true; + } + } + + return false; + } + + /** + * Gets the plugin with the given name (ID). If no plugin is registered and + * the name starts with "raven.sqdev" it will try to find and strat this + * plugin + * + * @param pluginName + * The name (ID) of the plugin to searchs + * @return The desired plugin or null if none is found + */ + public AbstractUIPlugin get(String pluginName) { + // search by name + for (AbstractUIPlugin currentPlugin : pluginList) { + if (currentPlugin.getBundle().getSymbolicName().toLowerCase() + .equals(pluginName.toLowerCase())) { + return currentPlugin; + } + } + + if (pluginName.toLowerCase().startsWith("raven.sqdev")) { + Bundle bundle = Platform.getBundle(pluginName); + + if (bundle != null) { + try { + int prevCount = pluginList.size(); + + // try to start the bundle + bundle.start(); + + if (pluginList.size() > prevCount) { + // if the count of registered plugins changed try to + // fins it again + return get(pluginName); + } else { + throw new SQDevException("The started plugin \"" + pluginName + + "\" has not registered to the SQDevPluginManage!"); + } + } catch (BundleException | SQDevException e) { + e.printStackTrace(); + + throw new SQDevCoreException(e); + } + } + } + + return null; + } + + /** + * Registers the given plugin if it's not already registered + * + * @param plugin + */ + public void register(AbstractUIPlugin plugin) { + Assert.isNotNull(plugin); + + if (!pluginList.contains(plugin)) { + pluginList.add(plugin); + } + } + + /** + * Unregisters the given plugin from this manager + * + * @param plugin + * The plugin to unregister + */ + public void unregister(AbstractUIPlugin plugin) { + pluginList.remove(plugin); + } +} diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/activator/Activator.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/activator/Activator.class index d8d1e68a84b03eb8245bd1ea42b14af6a4bb5134..5210dd453550d424cd74147bf0820b717eb3da07 100644 GIT binary patch delta 38 rcmbQrHJfWg4n delta 32 ocmbQuHI-{a40~utsx;6BGlCIWTxGrj4rcvXDINqc%g|T zzMA+K{4eU+0-;NVH0e9fDo^|@5iykLl>(nW@NF7Skn7}^uKgH{W7 z8Jy;9`$qcime9d|SQhJC@rnp-*l2GGEi=bYvG;`mzSCf_n_Sd!$1Oq z7-Hzu!Zg`wv#I=l!x5s8hZ+Ze_~ zgpR||ciZ}kk;ha5_wj%Lr9!HK?pm~y3Bo8ZmDt$dD~a$ur;>zBJ}7g)$U_;u&y{hr zD>cK?l`Z`X1G5a)-Wf3%rmlqFMjmqS&_r_Y9385eyh#8WBto2F;%35T1SnhFC;S=a zuQ>jNE>RN&!^@x7d9^XWg=L2B>(peh3k?ib31Q;aCEG8)-$E3ENg`g1elh4~(LbWo zqSsH-#_4{QsiW-__I4eK{A{x01YPTM-!Yy!MGxuvPSAgf;qByT9pfAGCz$+j99ib- znBK_HyZ@My#4tnW3OeZQrL=uWpr0Tf!~ljcg%PrkB1QKc#_7aPF9W^mN6rpAVO#j;0=M@38(tXt07TMrr7T;(qRZYbhM#eK%X|P zT+NF>JeKw{$Q#y7V#0MyYbF`5h)g??vI-@aQfbU5HS84FzFs*9fryS>*e$T7DBW6E zfsWXnOGjf!ma?YpDSI)1w*`8~3^OltQNxXzR?#&q*EC#q z#EVy9MYQ191?l9M81?{SDr{V!dy}wr#jn+pj87`F9v!{tBO&O@^4O75MI>|_MvK6< z0%2g=jqKbF$H+80DGia2uaznuyp#uUTE`iX$pLa9mo_aa&=#u_rJg%Mbl{wh^Ger8I?V?#A|Rql zKB{93@6t!swp@c9Ca(338@X#Z6Y^e3T3MNl-`0>4I9rd}#u=^SPAZ?5Ge&-x+03mq zJb+6A`_I?N5}hv;3@(@Er=)Ykn9385aN5oq`ANeu)wwG4xpz&r`AGWz+qiMnB{|O32~#VH z8CLk*xT&b6%~v)N+uRUjvu#E7CXr1Y{Pg{ zu|+XgI-G;G_0~8_%30oHcDQbKt2=Qm=|*U26R0gBLbb`pV^t=9q;f|iKud)hNLAz; zTYGwA4rduHFo;nRA8yx!It2w8B#`&5i^rwQ!bh;hGK8`#GU-psEecqgCH z!m9=}rM+k1W%mjKWdt)T(9>mvc;7bO8{WQ*@a4W2NOU*rwB38J?%8Q{Tv+= zU-<=()cAh&pKfK?`4bC1#33Hw(!GR7_zoXc?-$|2Cv3$-?B#VgPhHUQCO@4~p7v9E zkd`r8#<^L$aSA<1@_vpBeGL8dGRUz$hAd8C8YeN2A>60Nm)xFTQ|lYbzr_e+j^Z&b zen1LOk;cy$$8+BQ#8v!-YcLqSfGxbf#1y@OS-e0FlHj!A8GX;7i5dNZyD(YJAUZLN zIp%wgR(ZztGmkT{U{jXGaeBK)*<=1@;ZXLJbrj+9=|}8A2@8C4-;2Zl2wtp3##*9e z1g)zq*r!2g2x keywordList = new ArrayList(); - ResourceManager manager = new ResourceManager(); + String savedKeywords = manager.getResourceContent("SQFKeywords.txt"); - InputStream in = manager.findResource("/resources/sqf/Keywords.txt"); - - if (in == null) { - // something went wrong in the process of finding the respective - // resource - setKeywords(new String[0]); - - try { - throw new SQDevEditorException("Couldn't find SQF keywords!"); - } catch (SQDevEditorException e) { - SQDevInfobox info = new SQDevInfobox("Failed at instantiating SQF editor properly!", - e); - info.open(); - - e.printStackTrace(); - } - } - - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - - String line = reader.readLine(); - - while (line != null) { - line = line.trim(); - - if (line.contains(" ")) { - throw new IllegalBlankException("A keyword mustn't contain a blank!"); - } else { - keywordList.add(line); - } - - line = reader.readLine(); - } + if (savedKeywords == null) { + setKeywordList(new KeywordList()); - reader.close(); + SQDevInfobox info = new SQDevInfobox( + "Failed at instantiating SQF editor properly!\n\nReason:" + + "\nProblems with reading respective resource"); + info.open(); - } catch (IOException | IllegalBlankException e) { - e.printStackTrace(); + return; } - String[] keywords = new String[keywordList.size()]; - - // pack in array - for (int i = 0; i < keywordList.size(); i++) { - keywords[i] = keywordList.get(i); - } + KeywordList list = new KeywordList(savedKeywords); - setKeywords(keywords); + setKeywordList(list); } } diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/activator/Activator.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/activator/Activator.class index eea82765022de32f525cc744dbb7467cfce7aceb..3ec68bffeee72bdd8fa5c552eb040529fdc49f8c 100644 GIT binary patch delta 79 zcmey){+E5j5=L45qQtV)JpJOrl+-f)f}GOy%sk)3yu|d>+|<01$@>`96^u1BeefyT J%*6DS5dg;R9t;2g delta 36 pcmey%{+)fp5=KUy$!{1X7>gz!WK?G~nEaAa8q5~nEY0+Y5dij(3}XNQ diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAnnotation$1.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAnnotation$1.class index 10894a7c41096e21b72dde33ddd9632829d2b3a5..38d133056761aab9451c24080153dd474dfc1189 100644 GIT binary patch delta 197 zcmaFG@}8CJ)W2Q(7#J8#7^F6GWiop3rKgs-q!uR^WfqiV=I3!Rh%z!5yQHRN=A{-Z zBr2q3=At8E2LHwff$?3=9k=3{o4pvKeFf(o;)ZQj3#|G7CyF^Yb_uL>U=8TvF3A^HPfy z5*5-ib5a#bG7?J^iZk*{b5a!Y@=FweS`<=Jb5cuEQxsB4i!$@lfl5*pl5d_jP)6p-CmD4aWhZ}Uv=dig-~rmr!@vk6nHhK)_<%GcgYaZQCSebe r4L}YP12>Rl11nI)qL`UM46I6=K>|p#01aVakOX2bpbn6s3=RwcBr`85 delta 75 zcmZo;d&9zY>ff$?3=9k=4B{KPvKc2|VGL$unykU3%P289jLD8sdh!J(QAJ^(3MK{- X22mi*!oUn9#ekTLfe{FSz<~h(vSJK@ diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAnnotation.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAnnotation.class index 71ce18db221112eb5d4e5f598984c22cbba40d18..f17458ec05511ba54e355d5699c9d0ec38630401 100644 GIT binary patch delta 322 zcmXYsze_@46o#Mg=Jo2Ai8vUR4HXey4N1Z3vaZHpG zrl}~uTnP9Cb!|tbWYRcIs|OiR5Y!>M=%D&D8$%PwsIXt@se3tF=>KbrjN#LoWv3D^ eT#Pgt%<1m;EaS|38}!+wM+2lcueesZo0 zu`qNRKfs?cA>OFXS$m)C?Cf6j7-c_4uW!H-_XbaqNM9xWT2rSj$DA5Yq^EO!i?$5( zQ|cl^hfCQ=eXF{xnW_q;YYugem?`-(AH@=y1twS|ONBgD=PHz4f1PEvSYg}g18VY~ zeo(8@2%3763=Me>+T%MIb_v;IhJA_coUGfTI+B*1Ep#|TxmHNFr tL#yMf|HwQ(V=iKnQei+>MkXqI&ih=u>v4nq)pGmp$*@9}u|eR*wJo97~v}%CVu$ Tu&GyIpc>fL8L8_pgCqO`4R$=K delta 74 zcmaFQwue>V)W2Q(7#J8#7^K)4m>3zfCpv0wv3zfCpv0wwDe&N=1Wg4aY-#sF3Kz@$;{8=U=U+u zunWmZRY)u;DauSLElE{KNlnYl%gjqxD9=bON>wNUN){C5XQd{WC=_Spm*%7>B&8~( zRutqHm87O9l;lrtW(;9unS6s$mr-dl83zfCpv0wwDe(|e2X!Nk$JK%lP;so4M)}FJ tm@FsHWa80gV&G-q18QMr5CM`*45AETK$-=}XJ8NqVlDx`$2R)W2Q(7#J8#7^K-5m>3zfCpv0wv~*z%;!960aY-#sF3Kz@$;{8=U=U+u zunoybRY)u;DauSLElE{KNlnYl%gjqxC;q_vMrNkkv#(s(0(2UMj*+=z{|h~q!}4R7zBVM zJCLmlq(O4bLZTbMO1Oa}8(7E%Nh>o{D>H*QSd|2WB#>rdUK+FX-hQWaW09++5 Ak^lez delta 106 zcmdnPww6`k)W2Q(7#J8#7$n#km>3zfCpv0wv~*#de33DTk$JKTlP;t7a_@Gz*Z=z#tC9TtHPIbqo#+0A_d&KL7v# diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAttribute$4.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAttribute$4.class index d04f652e3b408ca24f334b4b2c73f0595a833e5d..fa12e83dc9656d6d4ebe353c3a7873bdd6a86951 100644 GIT binary patch delta 271 zcmZ3>dYMh&)W2Q(7#J8#7^K-5m>3zfCpv0wv~*$2 z)CUS?r6!js6ldg@=A3zfCpv0wv~*#d{DLuvk$JK;lP;s>a_@Gz*Z=z#tC9TtHPIbqo#+0FtK;-2eap diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAttribute.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/sqdevFile/ESQDevFileAttribute.class index d4d02a19ca041c73aa161478824bbbc97dab3f85..06e6d37a85f509a6ef74b25e89f98cf33d4cb42e 100644 GIT binary patch delta 349 zcmXYrUn_%Q7{-6^YPnSPqqP>RF1UC?}3A z2b1Ij_z09kU%p!_O3L(Z)#_1)o8{pKOunURY6U7D6WHz(SkNq%95em6c-y461 z<$_$el>8xX`~ynKN$XrZ=Q+=L&Ur4nK0DRN@5?JNL9L-4%w9!?9h?vy%i#6>y%SK*rIF0d|@VdB8WdD=_&X^QTa?UK5%yGpE*KBgjmh=Vr zH{;Ihdw0aQJ*t1)h=(iD3e7Yze9}ph4kPwVQGdIA;e)0Yr3F(oI~MnzIMidxYcC1+ OQKs^bRgUz!8u|l}!8vXK diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/FileUtil.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/FileUtil.class index c0b48fc95640800e26f5e54dc107db2d4ae35f44..c2c9cd4c259b2983a5a2cfe80891af736f414f63 100644 GIT binary patch delta 1367 zcmaKsYiyHc6vuy0cX_+60;y5JMbk0BwN5*u#+U|W0~SYyN;c6-43_m}bd;8@@5ZLl zMu`YURI-G4nYsiM6Tb*9S#gEU8w^2oUh#qgBE~O%^NWcZ|Lra`A@R%mJkL4*bI$La z=gIqQ)tfc*PW(GM2HeVT7B0iWy?YlP3~X^{I&5b}D(Tos$FQijr8C+a4aHNTrg*{* z2d0jRXtE>J>U77G9btoKRbRWk&55UyX^X>#CEd|pI~huM#q8dYJ?jg#u3c&O&T8F^ z8ETrMN*nV>9ly#t%ID9tPZjs4Hu*Qn>0e~=zTw(pj(bv0Q>rH!D@yjEp}K9e?eDg` zdhE2LoQ2?6%1--}DaUX3#nX<5aqjexcd|w|bahgNON?^pfUNLrHC5wFkpzUOs2iU`Z8gNF*-R)J%&Kgqx>l zn<-)md-#&CExs~bIa9bO#>+RXGgRn?;)y(EUVhrkcYJRs%@;J3)vj+0G<)da$9&Ic zrY#C{#gm4sX76_h#QUVr(!7T`JxrKgi<4JC3 z2g}$caxo#NUeu7tR@iYqCuE^(#B<)~VZxO&C4U0i+g_Q=~WkE7FLJi+7aBqOe; z*u&G}*~!~H!>BAr*v%=~PP1p=ckj!Y3J&oeF8NSRqjzX&H%Yl{&>kFN=_}Ob$VGD8 z5%C?#vP`z+BdqZ4)@Ot@ImRQt53+oe<>T=j6Omw+Poz1q>ky|7wESP_4cUxhRJC5y zYtSr9@Th9A@O@PzgH-YwHN37H8IXj^Sq!_Bh}Ksp{zqX z=|56`pQY3l`8QwG=#E08ndelqM7rv#L9P(>7l++z-omQV6095H+Xr%VMC!8qa6qCd zylXTZII3|SQ~3$z=%Rg`WPt{o#|g@#g#5(MTJyWJ>=RC<;?Hqj3_j*g?;aVFpaR#N szbUc!r9gS%GRk^cjD+PuSAM42xe6mHFIdkMs(Pms(^U<>7E~Ai1HbrPRR910 delta 312 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 Cgp&^d literal 2830 zcmai0TUQfT6#h=YObA24ASj|XTCF6AQPj2?w4!*44Wgh}w6+dmNCt-qP9{{Xz1f?+ z*IIk=5Ae_zU8^Q*)wSC9{-3^dtzNz}Gl3++>PzNa_SyT}-~P@%`Qx8oe*>@=KPdf`nb)Rt zTVQQ^Y4fP56$)v0BPq~q<};dOb6td4h|TW;T#fZ=!uOB zG#<@Q>0vaWRYfyYIa;kEf_8yWR(IUU0_{DqdN|22I36GJ^*m;Kxl9r+TtY%mOTPooS zdZuU_&W%L94Rd%7+Z1dS*yQH0qNR%Gv0b1=rbNQV+)@f`cq+uwE}h5Fs~|40uGaaI zjfx%UV@2sU?H84*s5q_ERI-y$u?xFNs>@DQ{a5=GRg7cf3ib%7Zb)x2B^~Tj@q&yc zt5S(Y!G!S=4k*}Pdm^nOi2+K$$&WdO|lb6=@9DlgA^q2bu-@iI-SW}gbBM@7T8PBDWPo%85B9pLnZI%VSED%oEezPjbg1({R3N$Vk9L;tL z7Yrx20@)W8WSEspoGX)*Y3f19L`3r$b?K)wwM@Hu~Cl}3Wg{YH{+WNF^ zOASPwoX(loGW(|UCVS%MFeY(Q)-$KVz)ZcCS(Vfz+0v${Vjgd@XHuD($&DI`c`Z8`yBNX^HqvRsq+@}% zRNRv7PloflRT%H!Jq7Rb{1P=)Jzd57xa4)QO3elfUO^Omz%JvSa$gYwOPtc|s*;6q z8z0FV@G<+0U+21_N>$&Hs{WKgTwl^)WU(3qFN+|xx`fZaKmq~TOFNcTOU?R{zode1 zsv|AwtBL%4t6~*`a`c@F1tB^5UPTkal$h68kCRGvoC+EKletrZ!)BT{@TF})K>Fb* zAicO>`rtQ23qEE1ZQ<-OZ36tBh?nt9JYGUu32Vw&?+-VXu%(2aGIqwFpnrn*vDC5)uTGG8GoQ?}l9?@+S`!T>i(SR{J-r@#tLnBtBl`m(M57T~h;vm*y z5M4NqZk(fCrw0S)G0xdRCVT;}(%S@QZ3z5JmqOv3KO>Tpi@3yJrXW=MUPY^0y^+^S zc>Mudo?vn!GF8U(?_!vcvn5=eI9-DEGp*oy3_v{S=C~V)KX387y)R;y;5@*l1?=mK zTzAL81;j|pO=kD@@B%hI!R?94yo?XI6h6?{)mXwOJ023t72cQvmE`3ecgfz$Jhq`7 zJk@?4&1#|H8m!r?{IlXoui!bmc*(oy13;2q5l9Ns- z?SG?3!Pg3oG&eVoD!B8PTTEUrj~OKR6|`Ly{{?p+au9G!5_A^_+^|vyH1NX)*%^c@oGEE{i|@2hn$k>;M1& diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevInfobox$1.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevInfobox$1.class index 43c1e7e100e8a770da44ff7c97e73577092727b5..830e69dd188a83f257eb1a6b62f27983e0782e3d 100644 GIT binary patch delta 110 zcmeC>o5r_*m6pu`FPao}9^MXXC;U z%Mi{G&k)U!$RGw(r2tXOAkH8G8!63suHYU~aGKnw*7 delta 20 bcmaFH_l$3Y0u!UcW<@3zR>qXcYU~aGK@SBW diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevPreferenceUtil.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevPreferenceUtil.class index fbdd784c142bbcb56b6e6857e8222e23cc65c61a..f3ef698a0a7ef85df292009152efdfda9892a25d 100644 GIT binary patch delta 287 zcmeyT`B9te)W2Q(7#J8#7%pz)Qea`!pPbJk!IGPrS2Ed!MV--jat@0$n7g@yWfNyT ze|l<(TV_#liF1B#Zem^v2g7Mb2IZo}veZ1i;=+{FGQH&doSf9;lFWRdKuKZ|Od%r! zA5g1LB9hK?j0}o6bf)H|KrLWo;0n$!ElN&x%gjk-ob1M@$|$xuhp&^3nUmq<A7Gs-h?0cmcq34k oqRwbAIiE$Ev1oH2%O=jroB0eGMK(X>>ty3(WH<>lgo)u402yc-(EtDd diff --git a/plugin/Raven.SQDev.Util/resources/sqf/SQFKeywords.txt b/plugin/Raven.SQDev.Util/resources/sqf/SQFKeywords.txt new file mode 100644 index 00000000..f65d0c76 --- /dev/null +++ b/plugin/Raven.SQDev.Util/resources/sqf/SQFKeywords.txt @@ -0,0 +1,60790 @@ +KeywordList: + + +KeywordStart: +abs +//KeywordEnd// +DescriptionStart: +Absolute value of a real number +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/abs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +abs n +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +accTime +//KeywordEnd// +DescriptionStart: +Returns the current time acceleration factor +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/accTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +accTime +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 2, 2006) +Use setAccTime to change the time acceleration factor. Not to be confused with skipTime. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +acos +//KeywordEnd// +DescriptionStart: +ArcCosine of a number, result in Degrees +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/acos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +acos x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +action +//KeywordEnd// +DescriptionStart: +Make a unit to perform an action. Use the List of Actions for reference about the available actions and their syntax. +NOTE: While this command should be executed where unit is local, it is not always the case. Actions such as "Eject", "GetOut", "GetInXXXX", "MoveToXXXX", etc can be executed on remote units. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/action +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit action actionArray +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(28 Aug, 2009) +In ArmA 2, you can place a unique unit (for example a boat, far of all combats) and use it for all command lines with action. +%NextNote% +(March 27, 2015) +This command has no effect when a dead unit is used as input. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +actionKeys +//KeywordEnd// +DescriptionStart: +Returns a list of dikCodes of buttons assigned to the given user action. You can find the action names in config class ControllerSchemes or user action names. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/actionKeys +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +actionKeys userAction +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +actionKeysImages +//KeywordEnd// +DescriptionStart: +Returns a list of button images or names assigned to the given user action. A maximum of maxKeys keys is listed. You can find the action names in config class ControllerSchemes or user action names. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/actionKeysImages +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +actionKeysImages userAction +%NextRawSyntax% +actionKeysImages [userAction, maxKeys] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +actionKeysNames +//KeywordEnd// +DescriptionStart: +Returns a list of button names assigned to the given user action. You can find the action names in config class ControllerSchemes or user action names. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/actionKeysNames +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +actionKeysNames userAction +%NextRawSyntax% +actionKeysNames [userAction, maxKeys] +%NextRawSyntax% +actionKeysNames [userAction, maxKeys, inputDevicePriority] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(20:14, 20 January 2010 (CET)) +The return type is a stacked string. A string inside a string. To compare use first single and inside double quotes: +if ((actionKeysNames "User1") == '"W"') then... +%NextNote% +(October 26, 2014) +inputDevicePriority 'Controler' is not a spelling mistake in description. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +actionKeysNamesArray +//KeywordEnd// +DescriptionStart: +Returns a list of button names assigned to the given user action. You can find the action names in config class ControllerSchemes or user action names. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/actionKeysNamesArray +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +actionKeysNamesArray userAction +%NextRawSyntax% +actionKeysNamesArray [userAction, maxKeys] +%NextRawSyntax% +actionKeysNamesArray [userAction, maxKeys, inputDevicePriority] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 26, 2014) +inputDevicePriority 'Controler' is not a spelling mistake in description. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +actionName +//KeywordEnd// +DescriptionStart: +Returns localized name of action. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/actionName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +actionName action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +activateAddons +//KeywordEnd// +DescriptionStart: +Activates the listed addons. The list of active addons is initialized during this function. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/activateAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +activateAddons [addon1,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Jan 21, 2009) +Be aware that "Addon1" is the cfgPatches class of the desired addon to preload. +%NextNote% +(May 10, 2009) +This command will activate addons that are referenced via scripts but not included in a missions required addons section. If executed from a configs init event with the call command, it will effectively override a missions required addons, preventing them from being activated (Appears to only happen in multi player). +To activate the passed addons along with those defined in the mission.sqm, execute the command from a configs init event using spawn or execVM. UNN +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +activatedAddons +//KeywordEnd// +DescriptionStart: +Returns a list of all activated addons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/activatedAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +activatedAddons +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 28, 2014) +This command can return a large array, often too large to be diag_log'd or hinted. At the time of writing, my game returned an array with 389 elements. The code below will ignore all the BI addons (they start with a3_) and writes the rest (ie, all your custom addons) to the RPT. +$Code${ if (! (["a3_", _x] call BIS_fnc_inString )) then { diag_log _x;} } forEach activatedAddons ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +activateKey +//KeywordEnd// +DescriptionStart: +Activates the given keyname for the current user profile. The keys are used to unlock missions or campaigns. +See keys, keysLimit and doneKeys in the description.ext file of the missions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/activateKey +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +activateKey keyname +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +add3DENConnection +//KeywordEnd// +DescriptionStart: +Connect entities together. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/add3DENConnection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +add3DENConnection [type, from, to] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +add3DENEventHandler +//KeywordEnd// +DescriptionStart: +Add code to be run when a Eden Editor event is triggered. +See the list of all Eden Editor Event Handlers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/add3DENEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +add3DENEventHandler [type,code] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +add3DENLayer +//KeywordEnd// +DescriptionStart: +Add an editing layer in Eden Editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/add3DENLayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +parentLayerID add3DENLayer name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addAction +//KeywordEnd// +DescriptionStart: +Adds an entry to the action menu of an object (scroll wheel menu). The action can only be activated when in proximity to the object (eg: building). Adding an action to the player obviously makes that action available to the player at all times. +This command has local effect. Created action is only available on the computer where command was executed. To make action available to all players, command must be executed on all connected clients. +Note: addAction will be ignored on dedicated server, probably because no UI. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addAction [title, script, arguments, priority, showWindow, hideOnUse, shortcut, condition, positionInModel, radius, radiusView, showIn3D, available, textDefault, textToolTip] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(August 2, 2006) +An easy way to keep track of and remove actions is to store the IDs of the actions in variables. +This can be accomplished by doing the following: +$Code$_myaction = player addAction ["Hello", "hello.sqs"];$/Code$ +This stores the action's ID in the local variable "_myaction" and assists in keeping track of the action ID. +To remove the above action, you would use the following line: +$Code$ player removeAction _myaction;$/Code$ +%NextNote% +(17:35, 24 August 2013 (CEST)) +In Arma 3 addAction does not work on animals. This is intended behavior. +%NextNote% +(June 19, 2014) +If executing actual script code like this: +$Code$_unit addAction [ "yourAction", { hint "A line of code" } ];$/Code$ +you can have a user action that uses and/or affects variables used elsewhere in the script that adds the action. +But beware! +The variable(s) must be global otherwise it won't work! i.e. +Fail +$Code$_variable = false ; _unit addAction [ "action", { _variable = true } ];$/Code$ +Succeed +$Code$variable = false ; _unit addAction [ "action", { variable = true } ];$/Code$ +%NextNote% +(August 15, 2014) +Be aware that function names are essentially just global variables for code, so you can use function names as the script parameter. +%NextNote% +(March 10, 2015) +Function to remove user actions with unknown ids: +$Code$KK_fnc_removeUnknownUserActions = { +for "_i" from 0 to ( player addAction ["",""]) do { +if !(_i in _this ) then { +player removeAction _i; +}; +}; +};$/Code$ +To test: +$Code$ for "_i" from 0 to 9 do { +player addAction ["Action #" + str _i, { +[0,5,6] call KK_fnc_removeUnknownUserActions; +}]; +}; +$/Code$ +Removes all user actions but 0, 5 and 6. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addBackpack +//KeywordEnd// +DescriptionStart: +Adds a backpack for a unit. If a unit already has a backpack, the old backpack will be placed on the ground under the unit. +Classname list of available backpacks : +Arma 2 OA backpacks +Arma 3 backpacks - objects starting with "B_", starts with " B_AssaultPack_khk " +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addBackpack packClassName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addBackpackCargo +//KeywordEnd// +DescriptionStart: +Add backpack(s) to the cargo space of vehicle. Classname list of available backpacks is here. +In Arma 3, arguments for this command must be local ( ). For global variant see addBackpackCargoGlobal +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addBackpackCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle addBackpackCargo [packClassName,count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addBackpackCargoGlobal +//KeywordEnd// +DescriptionStart: +Add backpack(s) to the cargo space of vehicle. MP synchronized. Classname list of available backpacks is here +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addBackpackCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle addBackpackCargoGlobal [packClassName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addBackpackGlobal +//KeywordEnd// +DescriptionStart: +Adds a backpack to a unit +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addBackpackGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addBackpackGlobal backpack +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addCamShake +//KeywordEnd// +DescriptionStart: +Creates the camera shaking effect, like when you are near an explosion +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addCamShake +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addCamShake [power, duration, frequency] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addCuratorAddons +//KeywordEnd// +DescriptionStart: +Allow curator use of given addon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addCuratorAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj addCuratorAddons addons +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addCuratorCameraArea +//KeywordEnd// +DescriptionStart: +Adds or changes curator camera area (depends on if ID is already used). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addCuratorCameraArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj addCuratorCameraArea [cameraAreaID,position,radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addCuratorEditableObjects +//KeywordEnd// +DescriptionStart: +Register objects which can be edited by a curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addCuratorEditableObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj addCuratorEditableObjects [objects,addCrew] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addCuratorEditingArea +//KeywordEnd// +DescriptionStart: +Adds or changes curator edit area (depends on if ID is already used). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addCuratorEditingArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj addCuratorEditingArea [editAreaID,position,radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addCuratorPoints +//KeywordEnd// +DescriptionStart: +Adds or removes curator points. Points can be only in range from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addCuratorPoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj addCuratorPoints points +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addEditorObject +//KeywordEnd// +DescriptionStart: +Add an object to the editor and assign arguments. Create script is,called with _new equal to true. Returns the ID of the new EditorObject.,Subtype class is optional. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addEditorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map addEditorObject [type,[name1,value1,...],subtype class] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addEventHandler +//KeywordEnd// +DescriptionStart: +Adds an event handler to a given unit. For more information about event handlers and their types check the scripting topic Event handlers in this reference. You may add as many event handlers of any type as you like to every unit. For instance, if you add an event handler of type "killed" and one already exists, the old one doesn't get overwritten. Use removeEventHandler to delete event handlers. +Every event will create an array named _this, which contains specific information about the particular event. (e.g. the "killed" EH will return an array with 2 elements: the killed unit, and the killer.) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object addEventHandler [type, command] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(July 7, 2015) +When using overridable EH, such as "InventoryOpened" and similar, where returning true allows to override default action, exitWith cannot be used to return value. So: +$Code$ if (whatever) exitWith { true }; false ;$/Code$ +Forget about it, will not work. Instead use: +$Code$ if (whatever) then { true } else { false };$/Code$ +100% satisfaction guaranteed! +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addGoggles +//KeywordEnd// +DescriptionStart: +Create a new item and try to link it into goggles slot. This command doesn't add NVGoggles. Use addItem and assignItem or just linkItem for latter. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addGoggles +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addGoggles type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addGroupIcon +//KeywordEnd// +DescriptionStart: +Add icon to a group. Returns icon ID +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addGroupIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group addGroupIcon properties +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addHandgunItem +//KeywordEnd// +DescriptionStart: +Adds weapon item to the weapon cargo space. This is used for infantry weapons. +As of Arma 3 DEV 1.37, this command also supports weapon magazines. +Note: +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addHandgunItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addHandgunItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addHeadgear +//KeywordEnd// +DescriptionStart: +Creates a headgear item and tries to link it to headgear slot. If slot is occupied with another item, the item in the slot will be replaced. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addHeadgear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addHeadgear item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItem +//KeywordEnd// +DescriptionStart: +Creates new item and tries to add it into inventory. Inventory must have enough space to accomodate new item or command will fail. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItemCargo +//KeywordEnd// +DescriptionStart: +Create new items and put them in the local weapon holder. For global variant see addItemCargoGlobal +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItemCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addItemCargo [item, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItemCargoGlobal +//KeywordEnd// +DescriptionStart: +Create new items and store them to the weapon holder. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItemCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addItemCargoGlobal [item, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItemPool +//KeywordEnd// +DescriptionStart: +Adds count items of type name into the weapon pool (used in the campaign to transfer items to the next mission) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItemPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addItemPool ["itemName", count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItemToBackpack +//KeywordEnd// +DescriptionStart: +Create new item and store it to soldier's backpack. The item can also be a a weapon or a magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItemToBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addItemToBackpack item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItemToUniform +//KeywordEnd// +DescriptionStart: +Create new item and store it to soldier's uniform. The item can also be a a weapon or a magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItemToUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addItemToUniform item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addItemToVest +//KeywordEnd// +DescriptionStart: +Create new item and store it to soldier's vest. The item can also be a weapon or a magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addItemToVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addItemToVest item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addLiveStats +//KeywordEnd// +DescriptionStart: +Adds score to the Xbox Live Statistics score for the given unit (or the commander unit of the given vehicle). (Also available in OFPE VBS2) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addLiveStats +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addLiveStats score +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazine +//KeywordEnd// +DescriptionStart: +Add a magazine to a person. Infantry units can only carry a specific number of magazines, once the magazine slots are filled, any further addMagazine commands are ignored. +Note: When you add a new weapon via scripting commands as well as the magazines for it, the addMagazine command has to be given before the addWeapon command, otherwise the weapon won't be loaded. +In Arma 3, the alternative variant of this command (addMagazine ARRAY) accepts global arguments, i.e. you can use it on the server to give remote unit a magazine with limited ammo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName addMagazine magazineName +%NextRawSyntax% +unitName addMagazine [magazineName, ammoCount] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 2, 2006) +If the unit has magazines already, you may need to use the commands removeMagazine or removeMagazines to make space for the mags you want to add. +%NextNote% +(February 21, 2010) +In turreted vehicles the magazine is added to the first turret with primaryGunner = 1; set in the Vehicles turret config part (and the magazine is ONLY added to the very first turret if more than one is configged with primaryGunner = 1; ). +%NextNote% +(May 12, 2010) +When wanting to add many magazines to an object's init-line it can be easier to use loops than to just repeat the addMagazine command. +If you want to add N magazines to an object either of the two below ways are handy, the first for fewer magazines, and the latter when you want to add many since it then is the easiest of the two to read. +$Code${this addMagazine "magazineClassName"} forEach [1,2,3,...,N]; +for "_i" from 0 to (N - 1) do {this addMagazine "magazineClassName"};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazineAmmoCargo +//KeywordEnd// +DescriptionStart: +Adds magazines with specified ammo count to the cargo space of a vehicle or a container. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazineAmmoCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cargospace addMagazineAmmoCargo [magazine, quantity, ammocount] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazineCargo +//KeywordEnd// +DescriptionStart: +Add magazines to the cargo space of vehicles, which can be taken out by infantry units. Once the magazine cargo space is filled up, any further addMagazineCargo commands are ignored. +In Arma 3, arguments for this command must be local ( ). For global variant see addMagazineCargoGlobal +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazineCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName addMagazineCargo [magazineName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(October 24, 2009) +Only works on clients. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazineCargoGlobal +//KeywordEnd// +DescriptionStart: +Add magazines to the cargo space of vehicles, which can be taken out by infantry units. +MP Synchronized +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazineCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName addMagazineCargoGlobal [magazineName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(November 7, 2011) +Synchronized to JIP as well. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazineGlobal +//KeywordEnd// +DescriptionStart: +Adds a magazine to the unit. +Note: You may create invalid combinations by adding more magazines than the free space in unit's inventory allows. When doing so, application behaviour is undefined. +This command is broken in MP as it dupes inventory items. Use addMagazine array for now, it takes global argument and has global effect too. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazineGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addMagazineGlobal magazineName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazinePool +//KeywordEnd// +DescriptionStart: +Add magazines to the magazine pool, of which the player may choose in the following mission. Available in campaigns only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazinePool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addMagazinePool [magazineName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazines +//KeywordEnd// +DescriptionStart: +Adds multiple magazines to the unit. For cargo containers use addMagazineCargoGlobal command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addMagazines [magazineName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMagazineTurret +//KeywordEnd// +DescriptionStart: +Adds a magazine to the turret. Use turret path [-1] for driver's turret. +Note: you may create invalid combinations by using this function, for example by adding 20 grenades. When doing so, application behaviour is undefined. Since Arma 3 v1.55.133817 it is possible to set custom ammo count in added magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMagazineTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle addMagazineTurret [magazineName, turretPath, ammoCount] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMenu +//KeywordEnd// +DescriptionStart: +Adds a new menu button. Priority is optional. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMenu +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map addMenu [text,priority] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMenuItem +//KeywordEnd// +DescriptionStart: +Creates a new menu item. Menu can be "file" or "view",index is index,as returned from addMenu command. priority is optional and determines,where in the menu the item will reside (higher priority items first). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMenuItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map addMenuItem [menu or index,text,command,priority] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMissionEventHandler +//KeywordEnd// +DescriptionStart: +Adds mission event handler. Every event will create an array named _this, which contains specific information about the particular event. Available mission event handlers: +"Loaded" +"EntityRespawned" +"EntityKilled" +"Ended" - Triggered when the mission is successfully ended. The variable _this, stores the type of the ending ("END1","END2", "LOSER", etc.). +"Draw3D" - It seems "Draw3D" mission EH is connected to your primary display. It will stop firing as soon as you Alt+Tab from the game and resume when you come back (unless Arma 3 client is launched with -window -nopause params). "Draw3D" does not fire at all on a dedicated server. +"HandleDisconnect" - Triggered when player disconnects from the game. Similar to onPlayerDisconnected event but can be stacked and contains the unit occupied by player before disconnect. Must be added on the server and triggers only on the server. For more info: HandleDisconnect +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMissionEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addMissionEventHandler [type, command] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMPEventHandler +//KeywordEnd// +DescriptionStart: +The format of handler is [type,command]. Check scripting topic Event handlers for more information. The index of the current handler is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMPEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName addMPEventHandler [type, command] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(May 8, 2015) +MP EHs are added on every PC and execute on every PC, apart from MPRespawn, that only executes at the locality where unit respawns. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addMusicEventHandler +//KeywordEnd// +DescriptionStart: +Add music track event handler. Returns id of the handler or -1 when failed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addMusicEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addMusicEventHandler [type, function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 4, 2013) +There are these two types at this time: +MusicStart - It is triggered when the music is started (command playMusic ). In variable _this is stored class name from CfgMusic. +MusicStop - It is triggered when the music is ended (command playMusic ). In variable _this is stored class name from CfgMusic. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addPrimaryWeaponItem +//KeywordEnd// +DescriptionStart: +Adds weapon item to the weapon cargo space. This is used for infantry weapons. +As of Arma 3 DEV 1.37, this command also supports weapon magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addPrimaryWeaponItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addPrimaryWeaponItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(June 22, 2014) +If the item being added is not supported by the unit's weapon then the command will simply fail silently. The item is also not added to the unit's inventory in such a case. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addPublicVariableEventHandler +//KeywordEnd// +DescriptionStart: +This event handler will detect if a missionNamespace variable (it is attached to) has been broadcast over network with publicVariable, publicVariableClient or publicVariableServer commands and will execute EH code upon detection. Arguments passed to the code in _this array are: +_this select 0: String - broadcast variable name (same variable name EH is attached to) +_this select 1: Anything - broadcast variable value +Please note: +* EH works only in Multiplayer environment. +* EH will not fire on the machine that executed broadcast command, only on the machines that receive the broadcast. +* The value of broadcast variable can be exactly the same, it is the actual broadcast that triggers EH not the change in variable. +Alt syntax of this command doesn't work as intended +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addPublicVariableEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +varName addPublicVariableEventHandler code +%NextRawSyntax% +varName addPublicVariableEventHandler [target, code] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(22 Dec, 2007) +Please note that varName indicates which variable you want to monitor with this eventhandler. +As a result, the example eventhandler on this page will only fire when the variable publicThis has been changed, +but not if any other variable was changed by any other client via the publicVariable command. +%NextNote% +(27 Feb, 2014 00:57) +Note on using addPublicVariableEventHandler during initialization: If you need a function to call addPublicVariableEventHandler during initialization, you must use postInit. addPublicVariableEventHandler does not work during preInit. +%NextNote% +(27 Feb, 2014 08:40) +MulleDK13 note above needs some clarification. You don't "must" use postInit and you absolutely can use preInit function to initialise addPublicVariableEventHandler if you start scheduled script from it. +$Code$//script with preInit = 1; in CfgFunctions +0 = 0 spawn { +"someVar" addPublicVariableEventHandler { +//yourcode +}; +};$/Code$ +%NextNote% +(November 23, 2015) +While it is true that the event handler will only fire on the machine receiving the broadcast value. Please note that this machine can actually be the same machine broadcasting it in the cases of publicVariableClient and publicVariableServer. +Examples: $Code$if ( isServer ) then { +"OnServer" addPublicVariableEventHandler { hint "This event handler still fired!"; }; +publicVariableServer "OnServer"; +};$/Code$ +$Code$// This example assumes the client knows their own client ID +// It does also work on the server (when the server ID is used) irrespective of the command name +"OnClient" addPublicVariableEventHandler { hint "This event handler still fired!"; }; +client ID publicVariableClient "OnClient"; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addRating +//KeywordEnd// +DescriptionStart: +Add a number to the rating of a unit - negative values can be used to reduce the rating. +This command is usually used to reward for completed mission objectives. The rating is given at the end of the mission and is automatically adjusted when killing enemies or friendlies. +When the rating gets below -2000, the unit's side switches to "ENEMY" ( sideEnemy ) and the unit is attacked by everyone.(see Rating Values ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addRating +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName addRating rating +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(November 16, 2014) +Since there is no setRating command, its expected behaviour can scripted as such: +$Code$BNRG_fnc_setRating = { +_setRating = _this select 0; +_unit = _this select 1; +_getRating = rating _unit; +_addVal = _setRating - _getRating; +_unit addRating _addVal; +}; +[1000,player] call BNRG_fnc_setRating//set player rating 1000$/Code$ +Using this example, no matter what the units rating was before, it will always set its rating to 1000. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addResources +//KeywordEnd// +DescriptionStart: +Adds resources to a team member. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addResources +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember addResources [resource1, resource2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addScore +//KeywordEnd// +DescriptionStart: +Add a number to the score of a unit. This score is shown in multiplayer in the "I" ("P" in Arma 3) screen. Negative values will remove from the score. Server execution only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addScore +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addScore score +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addScoreSide +//KeywordEnd// +DescriptionStart: +Adds side score. This is shown in the MP score tab as the total score. MP Only. Server execution only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addScoreSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +side addScoreSide value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addSecondaryWeaponItem +//KeywordEnd// +DescriptionStart: +Adds weapon item to the weapon cargo space. This is used for infantry weapons. +As of Arma 3 DEV 1.37, this command also supports weapon magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addSecondaryWeaponItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addSecondaryWeaponItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addSwitchableUnit +//KeywordEnd// +DescriptionStart: +Add a unit into the list of units available for Team Switch. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addSwitchableUnit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addSwitchableUnit unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Using this command and then attempting to use Team Switch in a multiplayer game will crash the instance of ArmA that is trying to team switch. (5143 beta) +%NextNote% +This command does not work as well as setPlayable : http://dev-heaven.net/issues/show/4461 (ArmA 2 OA v1.59) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addTeamMember +//KeywordEnd// +DescriptionStart: +Add given member to given team. Effect is local, unless both member and team are local to PC on which command is executed, then effect is global. +The same Team Member can be member of several different teams at the same time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addTeamMember +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +team addTeamMember member +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addToRemainsCollector +//KeywordEnd// +DescriptionStart: +Adds an array of vehicles/units to disposal manager for automatic wreck/body removal. The disposal manager follows wreck/body removal values set in description.ext +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addToRemainsCollector +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addToRemainsCollector remains +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addUniform +//KeywordEnd// +DescriptionStart: +Create a new uniform and try to link it into uniform slot (given uniform has to be supported by allowedUniforms list of target soldier). To check if uniform is allowed use isUniformAllowed and to force add incompatible uniform use forceAddUniform +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addUniform type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addVehicle +//KeywordEnd// +DescriptionStart: +Adds a specified vehicle for use by a specified AI led group taking into account vehicle's cost. The vehicle will be considered as an available vehicle for use by this group. +When vehicle is added in this way, it can appear as a target for the enemy even if the vehicle is currently free of the crew. Vehicles with crew, which are placed in the editor, get automatically added to the group. To remove vehicle from a group, use leaveVehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName addVehicle vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +(22 Nov, 2008 00:40) +This command works best when used on empty vehicles. If used on a vehicle already driven by a member of another group, the driver will continue under his own group's orders, which may not benefit the addVehicle group. +More than one vehicle can be added to a group, and more than one group can be added to a vehicle. +When deciding whether to board a vehicle, AI leaders seem to only consider the transport benefit of a vehicle, ignoring any combat benefits the vehicle may provide. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addVest +//KeywordEnd// +DescriptionStart: +Create a new vest and try to link it into vest slot. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addVest type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWaypoint +//KeywordEnd// +DescriptionStart: +Adds (or inserts when index is given) a new waypoint to a group. +The waypoint is placed randomly within a circle with the given center and radius. +The function returns a waypoint with format [group, index]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWaypoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName addWaypoint [center, radius, index, name] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(November 26, 2009) +In game versions prior to Arma 3 v1.22: +If you add a waypoint to your group and then want them to start moving to that waypoint, make sure to call setWaypointType "MOVE" on your waypoint. +%NextNote% +(18:23, 28 April 2011 (CEST)) +In VBS2 1.30, the randomization of addWaypoint doesn't seem to work correctly all of the time. +The alternative syntax of addWaypoint with a specified index doesn't seem to work correctly. +%NextNote% +(June 21, 2014) +if you want to create a waypoint of type "MOVE" and set it as actual waypoint, you can use the move command that does everything for you with only one line of code ! Be aware that move command intercepts multiple waypoints and it will not line up in waypoints queue. In other word it is a quick solution if you want your group to get only one waypoint, but for several waypoints you'll have to use addwaypoint and all setwaypointXXXXXX commands around. see move command. +%NextNote% +(August 4, 2014) +The waypoint may not be created exactly at the center position even if radius is zero. The position will be moved away if there are e.g. rocks at the center position or if it is placed at the edge of water on a shore. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeapon +//KeywordEnd// +DescriptionStart: +Add a weapon to a unit. The unit must be local to the computer where command is executed. For a global version of this command see addWeaponGlobal. +Infantry units can only carry a specific number of weapons, once the weapon slots are filled, any further addWeapon commands are ignored. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addWeapon weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 2, 2006) +Notes from before the conversion: +To ensure that the weapon is loaded at the start of the mission, add at least one magazine ( addMagazine ) before adding the weapon. To remove weapons use the removeAllWeapons or the removeWeapon commands. +%NextNote% +When adding a weapon in-game, a bug means that sometimes the weapon can't be fired. Swap to a different weapon and swap back again to enable the newly added weapon to fire; or drop and pick up the weapon again. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeaponCargo +//KeywordEnd// +DescriptionStart: +Add weapons to the cargo space of vehicles, which can be taken out by infantry units. Ignores available cargo space. +In Arma 3, arguments for this command must be local ( ). For global variant see addWeaponCargoGlobal +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeaponCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName addWeaponCargo [weaponName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(October 24, 2009) +Only works on clients. +%NextNote% +(July 10, 2010) +When players add/remove gear directly via the gear menu that gear is synchronized across the network. Since this command is local only, using it during a mission can cause all sorts of weird issues. To get proper synchronization use this command in the object's init line or in a script called from its init line with a call compile preprocessFile command (and not execVM ). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeaponCargoGlobal +//KeywordEnd// +DescriptionStart: +Add weapons to the cargo space of vehicles, which can be taken out by infantry units. +MP Synchronized +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeaponCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName addWeaponCargoGlobal [weaponName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(November 7, 2011) +Synchronized to JIP as well. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeaponGlobal +//KeywordEnd// +DescriptionStart: +Add a weapon to a unit. Infantry units can only carry weapons in their respective slots (primary, secondary and handgun), the addWeaponGlobal command will replace the weapon currently in a slot with the added weapon if it shares the same slot. +To make sure the added weapon is loaded and ready, add the magazine first. +This command is broken when used on dedicated server +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeaponGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addWeaponGlobal weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(July 7, 2015) +If you do not remove weapon first, using this command from dedicated server will duplicate weapon. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeaponItem +//KeywordEnd// +DescriptionStart: +Adds a weapon item to the specified weapon. The item can be weapon magazine, in which case the amount of ammo and target muzzle could also be specified. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeaponItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit addWeaponItem [weaponName, itemName] +%NextRawSyntax% +unit addWeaponItem [weaponName, [itemName, ammoCount, muzzleName]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeaponPool +//KeywordEnd// +DescriptionStart: +Add weapons to the weapon pool, of which the player may choose in the following mission. Available in campaigns only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeaponPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +addWeaponPool [weaponName, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +addWeaponTurret +//KeywordEnd// +DescriptionStart: +Adds a weapon to the turret. Use turret path [-1] for driver's turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/addWeaponTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle addWeaponTurret [weaponName, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +agent +//KeywordEnd// +DescriptionStart: +Return a person for a given agent. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/agent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +agent teamMember +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +agents +//KeywordEnd// +DescriptionStart: +Return a list of agents in the current mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/agents +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +agents +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 4, 2012) +Note that agents returns a reference to the agent itself, not the object. For example: {alive _x} count agents; would return an error. But you can assign the agent a reference using setVariable, and then reference it, for example: {alive (_x getVariable ["agentObject",objNull]) count agents; would return the number of agents still alive - BUT you would need to define "agentObject" after you create the agent, for example: +_agent = createAgent [_type, _position, [], _radius, "NONE"];_agent setVariable["agentObject",_agent,true]; +%NextNote% +(August 1, 2013) +Alternatively, to get object from agent reference use agent command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +AGLToASL +//KeywordEnd// +DescriptionStart: +Converts position from PositionAGL to PositionASL +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/AGLToASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +AGLToASL posAGL +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +aimedAtTarget +//KeywordEnd// +DescriptionStart: +Returns how good the weapon of the vehicle is aimed at the target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/aimedAtTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle aimedAtTarget [target, weapon] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 19, 2013) +The command doesn't work with soldier weapons, only vehicle weapons (in Arma 3 at least). The return value is either 1 or 0, very rarely the value falls in between. 1 doesn't mean you are going to hit the target, while 0 means you're definitely off. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +aimPos +//KeywordEnd// +DescriptionStart: +Returns the position of the object other units can aim to. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/aimPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +aimPos object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(July 7, 2015) +Generally returns the center position of the object (middle of the geometry, not the model's [0,0,0]). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +airDensityRTD +//KeywordEnd// +DescriptionStart: +Returns air density in given altitude +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/airDensityRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +airDensityRTD altitude +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +airportSide +//KeywordEnd// +DescriptionStart: +Checks a side of the airport. ID is the number to identify which airport on the island you want to check. +Possible values for sara are: +0 - Paraiso +1 - Rahmadi +2 - Pita +3 - Antigua +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/airportSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +airportSide id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +AISFinishHeal +//KeywordEnd// +DescriptionStart: +Alternative Injury Simulation (AIS) end state. Used to tell engine that script side healing is done when using "HandleHeal" event handler. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/AISFinishHeal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +AISFinishHeal [unit, healer, healercanheal] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +alive +//KeywordEnd// +DescriptionStart: +Check if given vehicle/person/building is alive (i.e. not dead or destroyed). alive objNull returns false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/alive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +alive object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(October 19, 2015) +Alive or not could be the question! in multi-player, missions come with respawn module(s). When a player is dead shot, (alive player) will return false, then almost immediately true if the "revive" respawn template is enabled, then could turn on false if time for assistance is elapsed or if the player activates the respawn menu before; and finally true after player respawns. Just be aware that in that case (respawn + revive enabled), the status of the player is toggling: true false true false true. Then, alive status while player is waiting for being rescued could lead to some error scripts as player is supposed to be alive but in limbo and the dead entity "player" passed to server. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +all3DENEntities +//KeywordEnd// +DescriptionStart: +Returns an array of all currently placed Eden Editor entities, including groups, waypoints, and markers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/all3DENEntities +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +all3DENEntities +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allControls +//KeywordEnd// +DescriptionStart: +Returns a list of all controls for desired existing display. Returned controls also include controls from control groups +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allControls +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allControls display +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allCurators +//KeywordEnd// +DescriptionStart: +Returns list of all curators. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allCurators +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allCurators +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 20, 2015) +This returns all curator logic units, not the units assigned to the logic. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allCutLayers +//KeywordEnd// +DescriptionStart: +Returns all named layers used by cutRsc, cutText, cutObj or cutFadeOut. The layer normally would be added on the first use of any of the aforementioned commands, however if a layer needs to be reserved it could be done like so: _layerNum = "myLayerName" cutFadeOut 0;. The index of the layer name in the array corresponds to the layer number the cut effect will be displayed on. If no layers were defined, the return is [""], because 0 layer is reserved for usage in cut commands without layer param or when name of the layer given is empty "". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allCutLayers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allCutLayers +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allDead +//KeywordEnd// +DescriptionStart: +Return a list of all dead units including agents and destroyed vehicles. Dead units may be in vehicles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allDead +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allDead +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allDeadMen +//KeywordEnd// +DescriptionStart: +Return a list of dead units including agents. Dead unit might be inside vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allDeadMen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allDeadMen +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(17 Oct, 2009) +As dead men are civilian side, don't try to count them with {side _x isEqualTo EAST} count allDeadMen; result will always be 0. +Use the configfile "side" instead: +0 = [] spawn {while {true} do {sleep 0.1; _westScore = {getNumber (configfile "CfgVehicles" typeOf _x "side") == 0} count allDeadMen; hintSilent format ["East killed: %1",_westScore]};}; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allDisplays +//KeywordEnd// +DescriptionStart: +Returns a list of all opened displays (excluding InGameUI displays for now) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allDisplays +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allDisplays +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allGroups +//KeywordEnd// +DescriptionStart: +Return a list of all groups created on the following sides east, west, resistance / independent and civilian only. Does not contain groups of sideLogic. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allGroups +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allGroups +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allMapMarkers +//KeywordEnd// +DescriptionStart: +Return all markers in map including user placed markers (_USER_DEFINED #). +Since Arma 3 v1.57.134377 User defined markers have the following name format: _USER_DEFINED # PlayerID / MarkerID / ChannelID where: +PlayerID - unique network id of the player (same as _id in onPlayerConnected ) +MarkerID - a marker counter id +ChannelID - id of the chat channel on which marker was placed (see currentChannel ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allMapMarkers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allMapMarkers +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 17, 2014) +A3 1.12 : Markers placed in editor will be in the array as a string of their name. Markers placed by the player will begin with "_USER_DEFINED #." +%NextNote% +(March 17, 2014) +To expand on the comment above. In Multiplayer, user created marker will appear in allMapMarkers as _USER_DEFINED #ID/Number, where ID is unique id related to _id param from onPlayerConnected and Number is sequential integer incremented by 1 with each marker placement by the IDed user. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allMines +//KeywordEnd// +DescriptionStart: +Returns an array of all mines in the mission +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allMines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allMines +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allMissionObjects +//KeywordEnd// +DescriptionStart: +Returns all mission objects (created by or during a mission) with given type (or its subtype). In some cases allMissionObjects could be substituted with entities, which would be much much faster alternative. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allMissionObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allMissionObjects type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 22, 2012) +Be VERY careful with the use of this command. It is very demanding as it must iterate through all mission created objects. Particular care should be taken exercising this often on dedicated servers. +%NextNote% +(Decembere 15, 2013) +For some reason in Arma 3 this command is up to 5 times faster on the dedicated server than on a connected client. In my experiments it took on average 5 ms for the command to complete on a client while under 1 ms on the server. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allow3DMode +//KeywordEnd// +DescriptionStart: +Allow/dissallow 3D mode., +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allow3DMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map allow3DMode bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowCrewInImmobile +//KeywordEnd// +DescriptionStart: +If true, units can be in a vehicle with broken tracks/wheels. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowCrewInImmobile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle allowCrewInImmobile bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 27, 2015) +This will stop AI disembarking when immobile +$Code$KK_fnc_allowCrewInImmobile = { +_this allowCrewInImmobile true; +{ +_x disableAI "FSM"; +_x setBehaviour "CARELESS"; +} forEach crew _this; +}; +//example +car call KK_fnc_allowCrewInImmobile;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowCuratorLogicIgnoreAreas +//KeywordEnd// +DescriptionStart: +Allows curator placing and working with modules outside of edit areas. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowCuratorLogicIgnoreAreas +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj allowCuratorLogicIgnoreAreas allow +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowDamage +//KeywordEnd// +DescriptionStart: +Allow or prevent an object being damaged (or injured, or killed). +The command does not prevent object from taking scripted damage such as setDamage or setHit. +! +Command has to be executed where object is local and as long as object does not change locality the effect of this command will be global. +If object changes locality, the command needs to be executed again on the new owner 's machine to maintain the effect. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowDamage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object allowDamage allow +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(September 2, 2013) +$Code$_object allowDamage false$/Code$ +has the same effect as +$Code$_object addEventHandler ["HandleDamage", {0}]$/Code$ +(except for buildings that are native to the map; for those, the effects of HandleDamage will not sync properly across all clients, even if added to the building on every client and the server) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowDammage +//KeywordEnd// +DescriptionStart: +Allow or prevent an object being damaged (or injured, or killed). Alias of allowDamage. +The command does not prevent object from taking scripted damage such as setDamage or setHit. +! +Command has to be executed where object is local and as long as object does not change locality the effect of this command will be global. +If object changes locality, the command needs to be executed again on the new owner 's machine to maintain the effect. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowDammage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object allowDammage allow +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 24, 2014) +This command is still working in A3 1.32.127785, at least in single player. I didn't test multiplayer. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowFileOperations +//KeywordEnd// +DescriptionStart: +Allow/dissallow file ops (load/save etc). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowFileOperations +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map allowFileOperations bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowFleeing +//KeywordEnd// +DescriptionStart: +Sets the cowardice level (the lack of courage or bravery) of a group or unit. +The more cowardice a Group or Object has, the sooner it will start fleeing. +0 means maximum courage, while 1 means always fleeing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowFleeing +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +name allowFleeing cowardice +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowGetIn +//KeywordEnd// +DescriptionStart: +Set if the units given in the list are allowed to enter vehicles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowGetIn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitArray allowGetIn allow +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(8 May, 2014) +(ArmA3 ver 1.18), here's a quick reference to unit's embarkation and disembarkation. +Command +Remote Control +Behavior +Role Unassigning +orderGetIn +false +orderGetIn won't take effect on player controlled AI units, and which needs to be used together with assaignAs command family. Generally speaking, orderGetIn is a Role Excuator. +When orderGetIn was disabled it won't automatically unassign unit's vehicle role but will force the unit get out of the vehicle and stop him re-entering until it was enabled again. orderGetIn false won't stop a unit when he is embarking a vehicle in the half way but unassignVehicle will do. orderGetIn false will wait to fire until the unit enter a vehicle. +allowGetIn +false +allowGetIn won't take effect on player controlled AI units. Different from orderGetIn, this command is a Role Holder, it can control the unit's movement in the half way set by orderGetIn but not by setWaypointType, unit will be forced to get out from a vehicle by allowGetIn false and won't automatically re-enter the vehicle until allowGetIn true +allowGetIn won't do anything with unit's vehicle role +doGetOut +true +Works on player controlled ai silently, unit will automatically get back to the vehicle after disembarkation. (Unit won't get out until vehicle is stopped or landed) +false +commandGetOut +true +Same as doGetOut with radio message. (Unit won't get out until vehicle is stopped or landed) +false +leaveVehicle +false +leaveVehicle can't force a player controlled AI disembark +true +action ["GetOut",_veh] +true +Eject immediately without parachute +false +action ["Eject",_veh] +true +Eject immediately with parachute if needed +false +setWaypointType "GETIN" +false +Waypoint won't be affected by orderGetIn false or allowGetIn false until the unit is on the vehicle. +N/A +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allowSprint +//KeywordEnd// +DescriptionStart: +Force player to run/jog if set to false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allowSprint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit allowSprint state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allPlayers +//KeywordEnd// +DescriptionStart: +Returns a list of all human players including dead players. The command also returns all connected headless clients. To filter headless clients out: +$Code$_justPlayers = allPlayers - entities "HeadlessClient_F";$/Code$ +NOTE: In player hosted game, the complete array of allPlayers may get delayed at the start. Use BIS_fnc_listPlayers if you need it earlier +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allPlayers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allPlayers +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allSites +//KeywordEnd// +DescriptionStart: +Return all sites in map. +This command is considered deprecated and is no longer supported +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allSites +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allSites +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allTurrets +//KeywordEnd// +DescriptionStart: +Returns array of available turret paths. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allTurrets +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allTurrets vehicle +%NextRawSyntax% +allTurrets [vehicle, personTurrets] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allUnits +//KeywordEnd// +DescriptionStart: +Return a list of all units (all persons except agents) created on the following sides east, west, resistance / independent and civilian only. Does not contain units of sideLogic. Dead units and units awaiting for respawn are also excluded. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allUnits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allUnits +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 15, 2011) +It returns infantry outside and inside vehicles. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allUnitsUAV +//KeywordEnd// +DescriptionStart: +Return a list of all UAV vehicles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allUnitsUAV +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allUnitsUAV +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 10, 2014) +This command returns a list of all unmanned vehicles, not the UAV AI units inside them, as the name might otherwise suggest. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +allVariables +//KeywordEnd// +DescriptionStart: +Returns a list of all variables from desired namespace. Namespaces supported: +CONTROL +TEAM_MEMBER +NAMESPACE +OBJECT +GROUP +TASK +LOCATION +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/allVariables +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +allVariables namespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ammo +//KeywordEnd// +DescriptionStart: +Check how many rounds are left in the currently loaded magazine in the given muzzle. Since Arma v1.55.133505 the command also returns ammo for units in vehicles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ammo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit ammo muzzle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(February 17, 2012) +OA 1.60 : The command works (now?) also for units in vehicles. However only for the vehicle's gunners' weapons - aka those returned by "weapons vehicle". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +and +//KeywordEnd// +DescriptionStart: +Returns true only if both conditions are true. In case of the alternative syntax, lazy evaluation is used (if left operand is false, evaluation of the right side is skipped completely). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/and +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +a and b +%NextRawSyntax% +a and b +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 12, 2015) +Just like the "or" command, the "and" command allows several conditions to be checked. Example: +$Code$if(alive player and speed player 0 and _someOtherVar) then { hint"All three condtions are true" };$/Code$ +The example above will check if the player is alive and if the player is moving and checks if _someOtherVar is true. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animate +//KeywordEnd// +DescriptionStart: +Activates given object animation. Animation is defined in CfgModels Animations class of model.cfg or another model config. To animate door of the house from example below: house animate ["Door_1_rot", 1]; +class Animations + +class Door_1_rot + +type = rotation ; +source = Door_1_source ; +selection = Door_1 ; +axis = Door_1_axis ; +memory = 1 ; +minValue = 0.1 ; +maxValue = 1 ; +angle0 = 0 ; +angle1 = rad 110 ; +; +class Door_Handle_1_rot_1 + +type = rotation ; +source = Door_1_handle_source ; +selection = Door_Handle_1 ; +axis = Door_Handle_1_axis ; +memory = 1 ; +minValue = 0 ; +maxValue = 0.1 ; +angle0 = 0 ; +angle1 = rad - 50 ; +; +; +Since model.cfg is not always available for reference, most animation names could also be obtained from animationNames command. Class names listed in CfgVehicles AnimationSources bound to "Proxy" controller can also be animated with animate command (see createVehicle/vehicles ): offroad animate ["HideBackpacks", 0]; +It is recommended that animateSource command is used instead of animate whenever is possible, as it is more efficient and optimised for MP +Mixing animateSource command with animate command to animate the same part may produce some undefined behaviour +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName animate [animationName, phase, instant] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(Aug 2007) +Animations can be used on existing game models such as houses that have doors eg. The general syntax is house animate ["dvere1",1] to 'open' the door and house animate ["dvere1",0] to 'close it'. Whether used on Oem addons, or official ones, an internal working knowledge (via config.cpp) of the model's animated name(s) is required. +'open' and 'close' are visual perceptions of the state of the model, and are a design decision of the p3d. Open does not, necessarily mean, 1, and close does not mean 0. +'0' and '1' are better seen as FULLY_OFF and FULLY_ON +If a door is initially closed in the model, FULLY_ON, will open it. If it is initialy OPEN visually, in the model, FULLY_ON will close it. +initphase=1; (in config cpp) does not alter open and close meanings, all it does, is, set the model to the 'on' (rather than 'off') state to begin with. Whether on means open or close visually, is a p3d design decision. +%NextNote% +(June 2011) +Also, to animate the object called "Bar Gate" in ArmA, use the following: $Code$myGate animate ["Bargate",1]$/Code$ to close it, and $Code$myGate animate ["Bargate", 0]$/Code$ to open it. +%NextNote% +(June 21, 2015) +With this command you can switch the offroad police lights on like this : +$Code$_vehicle animate ["BeaconsStart",1];$/Code$ +And switch it off : +$Code$_vehicle animate ["BeaconsStart",0];$/Code$ +%NextNote% +(February 16, 2016) +Aparently "Bargate" was exchainged with "Door_1_rot" +Doesen't work: +$Code$object animate ["Bargate", 0];$/Code$ +Works: +$Code$object animate ["Door_1_rot", 0];$/Code$ +%NextNote% +(March 14, 2016) +To animate bargate use animateSource : +$Code$bargate animateSource ["Door_1_source", 1];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animateDoor +//KeywordEnd// +DescriptionStart: +Animates a door on a vehicle. Animation is defined in config file in CfgVehicles - AnimationSources. Wanted animation phase is set with phase param. This command works only on animation sources with "door" controller. Door_L in the example below can be animated with animateDoor but not CargoRamp_Open: heli animateDoor ["Door_L", 1]; +class AnimationSources + +class CargoRamp_Open + +source = user ; +animPeriod = 5 ; +initPhase = 0 ; +; +class Door_L + +source = door ; +animPeriod = 1.6 ; +; +; +To animate doors or other sources that have "user" controller, use animate command, or even better, animateSource (recommended). Sources with "hit" controller can be animated with setHitPointDamage command applied to the name contained in hitpoint property. For availability of animation sources and their controller types see: createVehicle/vehicles +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animateDoor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object animateDoor [doorname, phase, instant] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animateSource +//KeywordEnd// +DescriptionStart: +Process an animation of the object. If animate uses class name from CfgModels Animations, animateSource uses name defined by source property. This allows to use just one command on a bunch of animations related to the same source simultaneously. +A class with the same source name should also be present in main config in CfgVehicles AnimationSources and have to be bound to the "user" controller for the command to work. If in order to animate door in example below using animate command it would require 2 calls: +house animate ["Door_1_rot", 1]; +house animate ["Door_Handle_1_rot", 1]; +With animateSource this would require only 1 (provided everything is configured correctly): +house animateSource ["Door_1_source", 1]; +// model.cfg +.... +class Animations + +class Door_1_rot + +type = rotation ; +source = Door_1_source ; +selection = Door_1 ; +axis = Door_1_axis ; +memory = 1 ; +minValue = 0.1 ; +maxValue = 1 ; +angle0 = 0 ; +angle1 = rad 110 ; +; +class Door_Handle_1_rot + +type = rotation ; +source = Door_1_source ; +selection = Door_Handle_1 ; +axis = Door_Handle_1_axis ; +memory = 1 ; +minValue = 0 ; +maxValue = 0.1 ; +angle0 = 0 ; +angle1 = rad - 50 ; +; +; +... + +// config.cpp +... +class AnimationSources + +class Door_1_source + +source = user ; +animPeriod = 2 ; +initPhase = 0 ; +; +; +... +If you don't know much about model config you can use this page createVehicle/vehicles for reference. Some of the AnimationSources are listed with the class names of the available assets in Arma 3. If it says "user", the chances are it could work with animateSource (see example 2). +It is recommended that animateSource command is used instead of animate whenever is possible, as it is more efficient and optimized for MP +Mixing animateSource command with animate command to animate the same part can lead to unexpected behavior +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animateSource +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object animateSource [source, phase, instant] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animationNames +//KeywordEnd// +DescriptionStart: +Returns Array of Strings where elements are the names of model animations, which should theoretically be available for use with animate command. However in practice this depends on whether animation is also made available for use in scripts via config. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animationNames +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +animationNames object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animationPhase +//KeywordEnd// +DescriptionStart: +Return the phase of the given animation on the given object, which is set by the animate command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animationPhase +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object animationPhase animationName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animationSourcePhase +//KeywordEnd// +DescriptionStart: +Returns current animation phase of given source. Similar to animationPhase or doorPhase but designed to complement animateSource. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animationSourcePhase +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object animationSourcePhase source +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +animationState +//KeywordEnd// +DescriptionStart: +Returns the name of a unit's current primary animation. Seems to be forced to lower case in Arma 3. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/animationState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +animationState unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 22, 2014) +(A3 1.26) To sort animation state by keyword, use BIS_fnc_ambientAnimGetParams +$Code$ ("KNEEL" call BIS_fnc_ambientAnimGetParams ) select 0; +//return: ["amovpknlmstpslowwrfldnon"…]$/Code$ +Useful keywords are: "STAND", "WATCH", "GUARD", "LISTEN_BRIEFING", "LEAN_ON_TABLE", "LEAN", "SIT_AT_TABLE", "KNEEL", "PRONE_INJURED", "BRIEFING" ect. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +append +//KeywordEnd// +DescriptionStart: +Appends array2 to the back of array1 modifying array1. +NOTE: append does not return array, it modifies existing array. If you need to return a copy, use "+": +$Code$array3 = array1 + array2;$/Code$ +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/append +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array1 append array2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 9, 2015) +$Code$_array1 append _array2$/Code$ is roughly 1.2x faster (depending on array size) than $Code$_array1 = _array1 + _array2$/Code$ (Averaged over 10.000 iterations with two identical arrays containing the numbers 0 through 9) +The larger the arrays to append, the faster append is as it does not create a new array, which happens with array addition. +%NextNote% +(May 21, 2015) +Array "unshift" implementation using append, a faster alternative to BIS_fnc_arrayUnShift : +$Code$KK_fnc_unshift = { +private ["_arr", "_tmp"]; +_arr = _this select 0; +_tmp = [_this select 1]; +_tmp append _arr; +_arr resize 0; +_arr append _tmp; +_arr +}; +// Example +arr = [1,2,3]; +[arr, 0] call KK_fnc_unshift; //both arr and return of function are [0,1,2,3] +$/Code$ +%NextNote% +(May 21, 2015) +Array "insert" implementation using append, much faster alternative to BIS_fnc_arrayInsert : +$Code$KK_fnc_insert = { +private ["_arr", "_i", "_res"]; +_arr = _this select 0; +_i = _this select 2; +_res = []; +_res append (_arr select [0, _i]); +_res append (_this select 1); +_res append (_arr select [_i, count _arr - _i]); +_res +}; +// Example +arr = [1,2,3,4]; +[arr, ["a","b"], 2] call KK_fnc_insert; //[1,2,"a","b",3,4]$/Code$ +%NextNote% +(May 21, 2015) +A faster alternative to BIS_fnc_arrayPushStack using append : +$Code$KK_fnc_pushStack = { +_this select 0 append (_this select 1); +_this select 0 +}; +// Example +arr = [1,2,3]; +[arr,[4,5,6]] call KK_fnc_pushStack; //both arr and function return are [1,2,3,4,5,6]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +apply +//KeywordEnd// +DescriptionStart: +Applies given code to each element of the array and returns resulting array. The value of the current array element, to which the code will be applied, is stored in variable _x. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/apply +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array apply code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 18, 2016) +(to anyone else wondering, I took a minute to get it): This is Array.map() is JavaScript +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +armoryPoints +//KeywordEnd// +DescriptionStart: +Returns, stored in [USERNAME].ArmaXProfile, value of armoryPoints entry. If the entry doesn't exist, it returns 0. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/armoryPoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +armoryPoints +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +arrayIntersect +//KeywordEnd// +DescriptionStart: +Intersects array1 with array2 returning array of unique common elements. Additionally, using the same array for array1 and array2 will simply return array of unique elements. Intersects only 1st dimension of an array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/arrayIntersect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array1 arrayIntersect array2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +asin +//KeywordEnd// +DescriptionStart: +Arcsine of a number, result in Degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/asin +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +asin x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ASLToAGL +//KeywordEnd// +DescriptionStart: +Converts position from PositionASL to PositionAGL +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ASLToAGL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ASLToAGL posASL +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ASLToATL +//KeywordEnd// +DescriptionStart: +Converts a position from PositionASL to PositionATL +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ASLToATL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ASLToATL pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assert +//KeywordEnd// +DescriptionStart: +Tests a condition and if the condition is false, displays error on screen (if -showscripterrors enabled) and logs error into.rpt file. It does not interrupt the script execution. +If script was pre-processed with preprocessFileLineNumbers, it will also show/log the error line number and the file name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assert +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assert condition +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(May 15, 2010) +Returns false, if condition is false, and returns true, if condition is true. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignAsCargo +//KeywordEnd// +DescriptionStart: +Assign a unit as cargo of a vehicle. Used together with orderGetIn to order a unit to get in as cargo into a specific vehicle. Before usage of this command a subordinate unit hasn't got the option to get into the cargo space of the vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignAsCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName assignAsCargo vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignAsCargoIndex +//KeywordEnd// +DescriptionStart: +Assigns the character to a specific cargo / passenger index of the given vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignAsCargoIndex +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +character assignAsCargoIndex [vehicle, index] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignAsCommander +//KeywordEnd// +DescriptionStart: +Assign a unit as commander of a vehicle. Used together with orderGetIn to order subordinate units to get in as commander of a specific vehicle. Before usage of this command a subordinate unit hasn't got the option to get into the commander place of the vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignAsCommander +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName assignAsCommander vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignAsDriver +//KeywordEnd// +DescriptionStart: +Assign a unit as driver of a vehicle. Used together with orderGetIn to order subordinate units to get in as driver of a specific vehicle. Before usage of this command a subordinate unit hasn't got the option to get into the driver place of the vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignAsDriver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName assignAsDriver vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignAsGunner +//KeywordEnd// +DescriptionStart: +Assign a unit as gunner of a vehicle. Used together with orderGetIn to order subordinate units to get in as gunner of a specific vehicle. Before usage of this command a subordinate unit hasn't got the option to get into the gunner place of the vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignAsGunner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName assignAsGunner vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignAsTurret +//KeywordEnd// +DescriptionStart: +Assigns the soldier to turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignAsTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit assignAsTurret [vehicle, [turretPath]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignCurator +//KeywordEnd// +DescriptionStart: +Assign player as curator. Two players cannot act as one curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignCurator +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +player assignCurator curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedCargo +//KeywordEnd// +DescriptionStart: +Returns the list of soldiers assigned to the given vehicle as a cargo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedCargo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedCommander +//KeywordEnd// +DescriptionStart: +Returns the soldier assigned to the given vehicle as a commander. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedCommander +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedCommander vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedDriver +//KeywordEnd// +DescriptionStart: +Returns the soldier assigned to the given vehicle as a driver. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedDriver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedDriver vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedGunner +//KeywordEnd// +DescriptionStart: +Returns the soldier assigned to the given vehicle as a gunner. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedGunner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedGunner vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedItems +//KeywordEnd// +DescriptionStart: +Get array with all assigned items. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 18, 2013) +Arma 3, version 0.70 - headgear and goggles are not present in returned array now. +%NextNote% +(August 22, 2013) +For head gear use headgear, addHeadgear and removeHeadgear. For goggles use goggles, addGoggles and removeGoggles +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedTarget +//KeywordEnd// +DescriptionStart: +Returns the target assigned to the vehicle/unit. To unassign the target use doWatch objNull or commandWatch objNull. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedTarget vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedTeam +//KeywordEnd// +DescriptionStart: +Returns the team the unit belongs to. Possible values: +MAIN (default and white) +RED +GREEN +BLUE +YELLOW +This command will return nil if given unit is objNull or remoteControling another unit +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedTeam unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 13, 2014) +As of Arma 3 version 1.36. assignedTeam might return nil instead of any of the STRINGs above if the player is currently remote controlling a unit. +$Code$ +assignedTeam player +- +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedVehicle +//KeywordEnd// +DescriptionStart: +Returns the vehicle a unit is assigned to. If no vehicle is assigned objNull is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedVehicle unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignedVehicleRole +//KeywordEnd// +DescriptionStart: +Return the role a unit is assigned to within its assigned vehicle. +The array which is returned contains: +[] - Not assigned to any vehicle +["Driver"] - Assigned as driver +["Cargo"] (or ["Cargo", [turret path]] since Arma 3 1.31.127272) - Assigned as cargo +["Turret", [turret path]] - Assigned to a turret +If no vehicle role is assigned, an empty array is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignedVehicleRole +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +assignedVehicleRole unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 31, 2013) +When unit with unassigned vehicle role enters a vehicle, it gets assigned vehicle role automatically. The unit then will hold on to its assigned role after exiting the vehicle. To add, when player is in the group of AIs and is not the leader, assignedVehicleRole of the player could be unpredictable and absolutely not related to the position player occupies. In short, forget about this command, it is unreliable and has been broken too many times in the past. +%NextNote% +(November 15, 2014) +In multiplayer (tested in v1.34), this only works reliably on the server. +Behaviour is as follows: +On a client, the command will return empty arrays for every unit that is not local. +On the server, the command correctly returns the position, regardless of the units locality. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignItem +//KeywordEnd// +DescriptionStart: +Assigns existing item from inventory (uniform, vest, backpack) to a correct slot. If the slot is occupied by another item, it gets replaced. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit assignItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignTeam +//KeywordEnd// +DescriptionStart: +Assigns the unit (in case of a vehicle, its commander) to the given team. Team is an option in group control (unit management) menu that allows to split player group in teams and then give bulk order to separate teams. In order to operate properly, the command requires specific conditions: +The command requires player to be fully initialised +The unit getting assigned must be either player himself or a unit in player's group +Units in player's group as well as player himself can all have different teams assigned +The colour of the assigned team for a unit is seen on the group management UI +The possible team values (colours) are: +"MAIN" - (white) +"RED" - (red) +"GREEN" - (green) +"BLUE" - (blue) +"YELLOW" - (yellow) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit assignTeam team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +assignToAirport +//KeywordEnd// +DescriptionStart: +Not correctly implemented yet, currently it does the same as landAt. As the implementation may get fixed sometime, please do not use this command until then. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/assignToAirport +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +plane assignToAirport id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +atan +//KeywordEnd// +DescriptionStart: +ArcTangent of a number, result in Degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/atan +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +atan x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +atan2 +//KeywordEnd// +DescriptionStart: +ArcTangent of x/y. Used to determine the angle of a vector [x,y]. Result in Degrees between -180 and 180. +Note that this command can handle y being 0, unlike when using atan, and will return 90 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/atan2 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +x atan2 y +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(08:00, 18 November 2009) +To get the direction of an object from the player: +$Code$ +_dir = (( getPos _obj select 0) - ( getPos player select 0)) atan2 (( getPos _obj select 1) - ( getPos player select 1)); +//_dir will be from -180 to 180. +$/Code$ +If positive values are needed then use: +$Code$ +if (_dir 0) then {_dir = _dir + 360}; +$/Code$ +Or just use BIS_fnc_dirTo directly. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +atg +//KeywordEnd// +DescriptionStart: +Equivalent to atan +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/atg +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +atg x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ATLToASL +//KeywordEnd// +DescriptionStart: +Converts a position from PositionATL to PositionASL +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ATLToASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ATLToASL pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +attachedObject +//KeywordEnd// +DescriptionStart: +Returns the object a location is attached to. If the location is unattached, then objNull is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/attachedObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +attachedObject location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +attachedObjects +//KeywordEnd// +DescriptionStart: +Returns a list of attached objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/attachedObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +attachedObjects obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +attachedTo +//KeywordEnd// +DescriptionStart: +Returns the object it is attached to. +Returns objNull if not attached to anything. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/attachedTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +attachedTo object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +attachObject +//KeywordEnd// +DescriptionStart: +Attaches a location to the specified object. To detach a location, attach it to objNull. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/attachObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location attachObject object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +attachTo +//KeywordEnd// +DescriptionStart: +Attaches an object to another object. The offset is applied to the object center unless a memory point is provided. If no offset is specified, the offset used will be the current relative positioning of objects against each other. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/attachTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object1 attachTo [object2, offset, memPoint] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(June 6, 2009) +You can use setDir to change the direction of the attached object. The direction is relative to the object you attach it to, so setDir 180 won't point to the south but to the rear of the object you attach it to. +Use setPos to synchronize the direction of the object in a network game. +Example code: +$Code$ +_obj setDir 180; +_obj setPos getPos _obj;$/Code$ +%NextNote% +(September 17, 2011) +Some objects you cannot attach anything to. To be more precise, you can attach objects to them, but the behaviour is unexpected. For instance: $Code$ +SuitcaseObject attachTo [FoldingTableObject, [0,0,0]];$/Code$ +You would expect the suitcase to jump to the pivot point of the table, and stick to it. +Instead, the suitcase will freeze in it's original position. Even if the table is moved, the suitcase will be unaffected: it will not follow the table, it will not even respond to actions it reacted to prior to being attached: pushing, being shot at, etc.. It's just an object frozen in space. In MP it's even weirder, the suitcase would turn invisible. +Dodgy objects when it comes to attaching things to them: most in Objects(small), Objects(signs), all of Objects(helpers) categories, etc.. +%NextNote% +(March 28, 2014) +If you attach an explosive charge to an object (e.g. ammobox), the charge will not detonate when you simply set the damage to 1. You must detach it before. +$Code$ private ["_target"]; +_target = your_ammobox ; +// create and attach charge +private ["_charge"]; +_charge = "DemoCharge_Remote_Ammo_Scripted" createVehicle position player ; +_charge attachTo [_target, [0,0,0.2]]; +_charge setVectorDirAndUp [[0.5,0.5,0],[-0.5,0.5,0]]; +// now detonate charge +detach _charge; //Important! +_charge setDamage 1; +$/Code$ +%NextNote% +(1 Jun, 2014) +(ArmA3 ver 1.20) attachTo overwrites setVectorDirAndUp if attached obj was changed to attach another one. +$Code$ +_obj attachTo [_logic,[0,0,0]]; +_obj setVectorDirAndUp [[0,1,0],[0,0,-1]]; +_obj attachTo [_logic,[0,0,2]]; //vector no changes +_obj attachTo [_anotherOne,[0,0,0]]; //vector changes to default +$/Code$ +%NextNote% +(September 25, 2014) +Attaching an object does not update the accessibility of a place for the AI. The command shouldn't be used for positioning large static objects - the AI will simply walk thru such objects. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +attackEnabled +//KeywordEnd// +DescriptionStart: +Return whether a group's leader can issue attack commands to soldiers under his command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/attackEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +attackEnabled name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +backpack +//KeywordEnd// +DescriptionStart: +Returns a class of a backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/backpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +backpack unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +backpackCargo +//KeywordEnd// +DescriptionStart: +Get array with backpacks from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/backpackCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +backpackCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +backpackContainer +//KeywordEnd// +DescriptionStart: +Returns a cargo container of a unit's backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/backpackContainer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +backpackContainer unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Apr 29, 2014) +In ArmA3 ver 1.16, we can use either backpackContainer or unitBackpack at present since both of them enjoy same operand type and return value. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +backpackItems +//KeywordEnd// +DescriptionStart: +Get array with all items (of any kind, even weapons) in backpack of the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/backpackItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +backpackItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +backpackMagazines +//KeywordEnd// +DescriptionStart: +Get array with all magazines from backpack of the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/backpackMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +backpackMagazines unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +backpackSpaceFor +//KeywordEnd// +DescriptionStart: +Returns how much space is in backpack for given weapon or magazine +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/backpackSpaceFor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +backpack backpackSpaceFor weaponName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +behaviour +//KeywordEnd// +DescriptionStart: +Return the behaviour of a unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/behaviour +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +behaviour unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(14 Feb 2010) +Although behaviour is called on an individual unit, what you are really getting back is the behaviour of that unit's group. Behaviour is a group setting. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +benchmark +//KeywordEnd// +DescriptionStart: +Returns the value of "3D Performance" in OFP Preferences (flashpoint.cfg). This can be used to estimate the computer performance to adapt CPU and GPU demanding settings like view distance dynamically in missions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/benchmark +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +benchmark +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(14 March 2014) +The command is obsolete, it was used in OFP to measure PC performance. In A3 it returns 2000. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +binocular +//KeywordEnd// +DescriptionStart: +Returns class name of currently used binocular weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/binocular +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +binocular unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +blufor +//KeywordEnd// +DescriptionStart: +Pre-defined variable for the blufor side. +Alias for west. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/blufor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +blufor +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +boundingBox +//KeywordEnd// +DescriptionStart: +Returns a bounding box of given object in model coordinate space. This command is rather generous on the size estimation, for more precise coordinates use boundingBoxReal +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/boundingBox +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +boundingBox model +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +boundingBoxReal +//KeywordEnd// +DescriptionStart: +Returns a bounding box of given object in model coordinates space. This command is similar to boundingBox but gives more precise measurements. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/boundingBoxReal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +boundingBoxReal obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +boundingCenter +//KeywordEnd// +DescriptionStart: +Returns the position of original (loaded) center of object in model coordinates. The result is in format [x,z,y] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/boundingCenter +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +boundingCenter object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +breakOut +//KeywordEnd// +DescriptionStart: +Breaks the code execution out of scope {} named name. nil is returned. Scope name can be assigned using scopeName command. +Since Arma 3 v1.47, breakOut can be used to return a value. It is the closest SQF comes to having "return" like operation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/breakOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +breakOut name +%NextRawSyntax% +value breakOut name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(19 Aug, 2008) +When "name" is nil, the command is ignored. +When "name" is an undefined scope name or "", the script quits current scope. +$Code$if (true) then { +hint "1"; +breakOut nil; +hint "2"; +}; //result "2" +if (true) then { +hint "1"; +breakOut ""; +hint "2"; +}; //result "1" +if (true) then { +hint "1"; +breakOut "dskfhdsklfh"; +hint "2"; +}; //result "1" +$/Code$ +%NextNote% +(August 27, 2015) +breakOut can still be used if multiple scopes share identical names. It will simply break out of the nearest scope that matches the name parameter you've used. For example: +$Code$call { +scopeName "Main"; //Parent Main +call { +scopeName "Main"; //Child Main +"String" breakOut "Main"; //Will break out of child main and return "String" to parent main +}; +}; +$/Code$ +Therefore you are able to consistently reuse scope names such as "Main", "Child", "Primary", "Secondary", etc throughout functions without worrying about having to ensure you create unique names for each scope. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +breakTo +//KeywordEnd// +DescriptionStart: +Breaks block to scope named name. Nil is returned. +Scope name can be assigned using scopeName command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/breakTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +breakTo name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +briefingName +//KeywordEnd// +DescriptionStart: +Returns the name of the current briefing/scenario name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/briefingName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +briefingName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +buildingExit +//KeywordEnd// +DescriptionStart: +Returns the given indexed exit in a building. The returned value is in format Position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/buildingExit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +building buildingExit index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +buildingPos +//KeywordEnd// +DescriptionStart: +Returns PositionAGL of a given indexed position in a building. The index is 0-based (i.e. the first possible position would be 0. So if a building has 5 positions listed in the editor, 4 would be the highest position index usable with this command). Command will return [0,0,0] if buildingPos with given index is non-existent. +Since Arma 3 v.155.133934 if index -1 is supplied, the command will return array with all available positions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/buildingPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +building buildingPos index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 2, 2006) +Notes from before the conversion: +These examples will move a unit to the 1st position specified in a buildings model, in the second example - bunker1. +$Code$this move (building buildingPos 1); +this move (bunker1 buildingPos 1);$/Code$ +In the default game buildings, the buildingPos is usually right behind a window. This can make it easy to place units in the windows of buildings, by putting the unit near a building and putting this in its init field: +$Code$this setPosATL (( nearestBuilding this) buildingPos 1);$/Code$ +The location returned by buildingPos is not reliable after the player has exited and then resumed the mission. For code that is executed immediately after the mission starts there is no problem. +If buildingPos locations are to be accessed during the mission when the player may have exited and then resumed, save the locations you require at the start of the mission and use these saved locations in your subsequent scripts. +%NextNote% +(January 26, 2007) +The highest index is not necessarily the highest position in a building! Check the z-value to find out the absolute height of a position. +%NextNote% +(February 16, 2007) +(building buildingPos 1) will return [0,0,0] if buildingPos with this index does not exist. +%NextNote% +(January 08, 2011) +Almost all buildings loose their building positions when they get (visually) damaged or destroyed. Some debris do still have building positions though. So it is no technical limitation. Just most damaged/destructed buildings models do not (yet?) have building positions. Keep in mind that a damaged or destroyed building is a different object instance (and model). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +buttonAction +//KeywordEnd// +DescriptionStart: +Return the action assigned to a control of the currently active user dialog. Can be used for buttons and active texts. Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/buttonAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +buttonAction idc +%NextRawSyntax% +buttonAction control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +buttonSetAction +//KeywordEnd// +DescriptionStart: +Set the action of a control of the currently active user dialog. Can be used for buttons and active texts. See Dialog Control for more information about user dialogs. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/buttonSetAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +buttonSetAction [idc, action] +%NextRawSyntax% +control buttonSetAction action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(October 5, 2009) +When using buttonSetAction for an ActiveText control from a script, you cannot use any variables local to the script in it. +/* This will print 'any bar' in the hint box, +since _foo has no value according to buttonSetAction */ +_foo = foo ; +buttonSetAction [100, hint format[ %1 bar, _foo]; ]; +%NextNote% +(February 15, 2016) +This command does not overwride the buttonaction which was set via "action" in the hpp of the dialog +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cadetMode +//KeywordEnd// +DescriptionStart: +Returns if the player is currently playing in cadet or veteran mode. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cadetMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cadetMode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 1, 2009) +In ArmA II, this command will return true if the difficulty level is set to "Recruit" or "Regular". It returns false for the "Veteran" and "Expert" difficulty levels. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +call +//KeywordEnd// +DescriptionStart: +Executes the function string. +The argument(s) (if any) are passed as _this. ( argument(s) are passed in an array). +To execute a sleep function in the called code, execute it with spawn instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/call +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +argument call body +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 5, 2014) +A called function may only use suspension ( sleep, uiSleep, waitUntil ) if it originates in a scheduled environment. If the called function originates in a non-scheduled environment it will return a generic error. +$Code$// *** non-scheduled origin *** +[] spawn { +// *** scheduled scope *** +[] call { +// *** scheduled scope *** +sleep 3; // - OK +hintSilent "Hello World!"; +}; +}; +$/Code$ +$Code$// *** non-scheduled origin *** +[] call { +// *** non-scheduled scope*** +[] call { +// *** non-scheduled scope *** +sleep 3; // - NOT OK +hintSilent "Hello World!"; +}; +}; +$/Code$ +$Code$// *** scheduled origin *** +[] spawn { +// *** scheduled scope *** +[] call { +// *** scheduled scope *** +sleep 3; // - OK +hintSilent "Hello World!"; +}; +}; +$/Code$ +$Code$// *** scheduled origin *** +[] call { +// *** scheduled scope*** +[] call { +// *** scheduled scope *** +sleep 3; // - OK +hintSilent "Hello World!"; +}; +}; +$/Code$ +%NextNote% +(February 17, 2015) +If the code is in non-scheduled scope and contains while-do statement, the code runs only 10000 times at the maximum, even if the statement makes infinite loop. (ARMA3 Ver. 1.38.128937) +$Code$// *** non-scheduled origin *** +[] call { +// *** non-scheduled scope*** +[] call { +// *** non-scheduled scope *** +_a=0; +while{_a 15000} do{ +_a=_a+1; +}; +hint str(_a);//10000 +}; +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +callExtension +//KeywordEnd// +DescriptionStart: +Execute an extension function. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/callExtension +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +extension callExtension functionWithArguments +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camCommand +//KeywordEnd// +DescriptionStart: +Executes a command on the given camera / actor object. Known commands for: +All camera types - "manual on", "manual off" +"camera" - "inertia on", "inertia off" +"seagull" - "landed", "airborne" +When you execute camCommand "landed" on a flying seagull, it will land and sit on the floor until you call camCommand "airborne". The camCommand changes are conducted immediately, the command doesn't wait for camCommit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camCommand +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camCommand command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camCommit +//KeywordEnd// +DescriptionStart: +Smoothly conduct the changes that were assigned to a camera within the given time. If the time is set to zero, the changes are done immediately. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camCommit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camCommit time +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camCommitPrepared +//KeywordEnd// +DescriptionStart: +Smoothly conduct the changes that were assigned to a camera within the given time. If the time is set to zero, the changes are done immediately. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camCommitPrepared +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camCommitPrepared time +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camCommitted +//KeywordEnd// +DescriptionStart: +Checks if the conduction of the last camCommit call already finished. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camCommitted +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camCommitted camera +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camConstuctionSetParams +//KeywordEnd// +DescriptionStart: +Sets construction camera parameters. To work with "camconstruct" object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camConstuctionSetParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camConstuctionSetParams [[x,y,z], radius, maxAboveLand] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camCreate +//KeywordEnd// +DescriptionStart: +Create a camera or a seagull object on the given position. Also other objects can be created this way, but vehicles created with camCreate cannot be entered. Any units created with camCreate will remain static. Differently to createVehicle, objects are created without consideration of the collision detection with surrounding objects, thus the objects are spawned exactly at the given position. camCreate is conducted immediately, the command doesn't wait for camCommit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camCreate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type camCreate position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +(CWR 1.91) createVehicle is a valid replacement (with special consideration to locality). +You can also use camCreate to create objects. +$Code$flare1 = "flare" camCreate getPos gameLogic_1$/Code$ +However, soldier units created in this way have little or no AI. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camDestroy +//KeywordEnd// +DescriptionStart: +Destroy an object created with camCreate. camDestroy is conducted immediately, the command doesn't wait for camCommit. +NOTE: Destroying camera object does not terminate camera effect automatically. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camDestroy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camDestroy object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cameraEffect +//KeywordEnd// +DescriptionStart: +Switch to the given camera or object with the given effect. If you want to switch the screen directly to the first-person, aiming, third-person or group view of an object, use switchCamera instead. The effect type "Terminate" is used to exit the current camera view and switch back to the player's view. Does not need camCommit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cameraEffect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera cameraEffect [name, position, rtt] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cameraEffectEnableHUD +//KeywordEnd// +DescriptionStart: +Enable / disable showing of in-game UI during currently active camera effect. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cameraEffectEnableHUD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cameraEffectEnableHUD enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 3, 2015) +Must be executed after camCommit. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cameraInterest +//KeywordEnd// +DescriptionStart: +Return camera interest for given entity, as set by setCameraInterest, or as autodetected. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cameraInterest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cameraInterest entity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cameraOn +//KeywordEnd// +DescriptionStart: +Returns the vehicle to which the camera is attached. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cameraOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cameraOn +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 2, 2015) +$Code$ _MyScreenPos = getPos cameraOn; code +This would getPos for the current player or vehicle that the client's camera is attached to. +code _CameraOnSetPos = cameraOn setPos _pos; code +This would do setPos for the current player or vehicle that the client's camera is attached to. +/dd +/dl +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cameraView +//KeywordEnd// +DescriptionStart: +Returns mode of active camera view. Mode is one of: +"INTERNAL" (1st person) +"EXTERNAL" (3rd person) +"GUNNER" (optics / sights) +"GROUP" (commander view) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cameraView +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cameraView +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +campaignConfigFile +//KeywordEnd// +DescriptionStart: +Return root of campaign description.ext entries hierarchy. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/campaignConfigFile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +campaignConfigFile +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPreload +//KeywordEnd// +DescriptionStart: +Preload the scene for the prepared camera. Time gives timeout, zero means no (infinite) timeout. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPreload +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPreload time +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPreloaded +//KeywordEnd// +DescriptionStart: +Checks whether the camera has finished preloading. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPreloaded +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camPreloaded camera +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareBank +//KeywordEnd// +DescriptionStart: +Prepares the camera bank angle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareBank +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareBank bank +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareDir +//KeywordEnd// +DescriptionStart: +Prepares the camera heading. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareDir direction +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareDive +//KeywordEnd// +DescriptionStart: +Prepares the camera dive angle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareDive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareDive dive +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareFocus +//KeywordEnd// +DescriptionStart: +focusRange is in format [distance,blur]. Prepares the camera focus blur. +[-1,1] will reset default values (auto focusing), [-1,-1] will disable postprocessing (all is focused). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareFocus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareFocus focusRange +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareFov +//KeywordEnd// +DescriptionStart: +Prepares the camera field of view (zoom). The default zoom level is 0.7, 0.01 is the nearest and 2 the furthest zoom value. The angle of the field of view is atan(FOV)*2 radians when in 4:3 aspect ratio. Needs the call of camCommitPrepared to be conducted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareFov +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareFov fieldOfView +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareFovRange +//KeywordEnd// +DescriptionStart: +Prepares the camera field of view range for auto zooming. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareFovRange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareFovRange fovRange +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPreparePos +//KeywordEnd// +DescriptionStart: +Prepares the camera position (format Position ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPreparePos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPreparePos position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareRelPos +//KeywordEnd// +DescriptionStart: +Prepares the camera position relative to the current position of the currect target (see camPrepareTarget ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareRelPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareRelPos position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camPrepareTarget +//KeywordEnd// +DescriptionStart: +Prepares the camera target to a position or to a target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camPrepareTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camPrepareTarget position +%NextRawSyntax% +camera camPrepareTarget target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetBank +//KeywordEnd// +DescriptionStart: +Set camera bank angle. +Does not commit changes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetBank +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetBank bank +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Apr 15, 2010) +Command is non-functional. Instead, use fn vbs setPitchBank in VBS2, or setVectorUp or this user function in Arma. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetDir +//KeywordEnd// +DescriptionStart: +Set the direction of the given camera. Needs the call of camCommit to be conducted. +This command is completely broken +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetDir direction +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(June 11, 2007) +This command does NOT work on cameras (in ArmA 1.05 at least), use SetDir instead. +%NextNote% +(June 11, 2013) +This command (with new syntax) is also broken in the Arma 3 Alpha, see this feedback tracker report +%NextNote% +(March 1, 2016) +Yep, still broken. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetDive +//KeywordEnd// +DescriptionStart: +Set camera dive angle. +Does not commit changes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetDive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetDive dive +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Apr 15, 2010) +Command is non-functional. Instead, use fn vbs setPitchBank in VBS2, or setVectorUp or this user function in Arma. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetFocus +//KeywordEnd// +DescriptionStart: +focusRange is in format [distance,blur]. Sets the camera focus blur. It does not automatically commit changes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetFocus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetFocus focusRange +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetFov +//KeywordEnd// +DescriptionStart: +Set the zoom level ( F ield O f V iew) of the given camera. +The zoom level is from 0.01 for the nearest and 2 for the furthest zoom value, with a default zoom level of 0.7 +The angle of the field of view is atan(FOV)*2 radians when in 4:3 aspect ratio. +Needs the call of camCommit to be conducted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetFov +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetFov level +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(October 11, 2010) +This command requires the camera to have a target (see camSetTarget ). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetFovRange +//KeywordEnd// +DescriptionStart: +Set the zoom level ( F ield O f V iew) start and end values for automatical zooming. +The default zoom level is 0.7 where 0 is the nearest and 1 is the most far zoom value. +Needs the call of camCommit to be conducted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetFovRange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetFovRange fovRange +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetPos +//KeywordEnd// +DescriptionStart: +Set the position of the given camera or seagull.Needs the call of camCommit to be conducted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetPos position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetRelPos +//KeywordEnd// +DescriptionStart: +Set the position of the given camera relative to its target set with camSetTarget.Needs the call of camCommit to be conducted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetRelPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetRelPos position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +The location of the camera will depend on the direction the target object is facing. +The camera does not bank with the target (bug?). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camSetTarget +//KeywordEnd// +DescriptionStart: +Set the target object or position where the given camera should point at. Needs the call of camCommit to be conducted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camSetTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camera camSetTarget target +%NextRawSyntax% +camera camSetTarget position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camTarget +//KeywordEnd// +DescriptionStart: +Returns camera's target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camTarget camera +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +camUseNVG +//KeywordEnd// +DescriptionStart: +Set / clear using of night vision during cutscenes. This command only works with camCreate created camera that is currently the main camera for the player (see example). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/camUseNVG +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +camUseNVG set +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canAdd +//KeywordEnd// +DescriptionStart: +Checks if given object can be stored in inventory of given object or any inventory container ( uniform, vest, backpack ) of given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object canAdd item +%NextRawSyntax% +object canAdd [item, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 29, 2015) +Can also be used on any object that has inventory, not only player inventory containers. +Where _box is B_supplyCrate_F : +$Code$// Empty +_box canAdd "FirstAidKit"; +- true +// Full +_box canAdd "FirstAidKit"; +- false +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canAddItemToBackpack +//KeywordEnd// +DescriptionStart: +Checks if given object can be stored into soldier's backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canAddItemToBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit canAddItemToBackpack item +%NextRawSyntax% +unit canAddItemToBackpack [item, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canAddItemToUniform +//KeywordEnd// +DescriptionStart: +Checks if given object can be stored into soldier's uniform. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canAddItemToUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit canAddItemToUniform item +%NextRawSyntax% +unit canAddItemToUniform [item, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canAddItemToVest +//KeywordEnd// +DescriptionStart: +Checks if given object can be stored into soldier's vest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canAddItemToVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit canAddItemToVest item +%NextRawSyntax% +unit canAddItemToVest [item, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cancelSimpleTaskDestination +//KeywordEnd// +DescriptionStart: +Cancels a simple task destination. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cancelSimpleTaskDestination +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cancelSimpleTaskDestination task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canFire +//KeywordEnd// +DescriptionStart: +Returns true if the given vehicle is still able to fire. For the command to return true, vehicle must be alive, have weapon operator and the weapon cannot be damaged = 0.9 but can be empty due to running out of ammo. If mission starts with vehicle having no ammo or setVehicleAmmo 0 command is executed on the vehicle, then canFire will always report false for it. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +canFire unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(07:16, 20 January 2007 (CEST)) +true even if unit is out of ammo. Only false if gun is damaged. +%NextNote% +(05:20, 24 August 2008 (CEST)) +False if there is no gunner in the vehicle, regardless of damage level. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canMove +//KeywordEnd// +DescriptionStart: +Returns if the given vehicle is still able to move. This command checks only the damage value, not the amount of fuel! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canMove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +canMove unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canSlingLoad +//KeywordEnd// +DescriptionStart: +Returns true if it is possible to sling load cargo +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canSlingLoad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle canSlingLoad cargo +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canStand +//KeywordEnd// +DescriptionStart: +Returns if the given soldier is able to stand up. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canStand +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +canStand unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +The command may return true for dead units. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canSuspend +//KeywordEnd// +DescriptionStart: +Returns true if sleep, uiSleep or waitUntil commands can be used in current scope. Usually when suspension is not allowed but used, for example when code is executed in unscheduled environment, the script engine would ignore any suspension command and throw error: "Suspending not allowed in this context". Using canSuspend command allows to detect the correct environment for the code. +Note : The definition of scheduled and unscheduled environment is not the same as whether or not the script execution can or cannot be suspended. For example while. sqs and. fsm scripts are scheduled (i.e. added to the scheduler: diag_activeSQSScripts, diag_activeMissionFSMs ), they cannot use sleep or be suspended like execVM or spawn scripts can, therefore canSuspend for these types of scripts will return false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canSuspend +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +canSuspend +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +canUnloadInCombat +//KeywordEnd// +DescriptionStart: +Check if cargo of this vehicle want to get out when in combat. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/canUnloadInCombat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +canUnloadInCombat vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +captive +//KeywordEnd// +DescriptionStart: +Returns if the given unit is captive. "captive" means that enemies will not shoot at the unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/captive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +captive object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +Use setCaptive to make a unit captive. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +captiveNum +//KeywordEnd// +DescriptionStart: +Checks whether the unit is a captive. If the unit is a vehicle, its commander is checked instead. +If a unit's captivity level was set as a Boolean, then the returned number is either 0 (for false ) or 1 (for true ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/captiveNum +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +captiveNum unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +case +//KeywordEnd// +DescriptionStart: +Description: +See switch do +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/case +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +catch +//KeywordEnd// +DescriptionStart: +Processes code when an exception is thrown in a try block. The exception caught can be found in the _exception variable. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/catch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +try-block catch code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cbChecked +//KeywordEnd// +DescriptionStart: +Returns the current state of a checkbox (CT_CHECKBOX type 77 of Dialog Control ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cbChecked +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cbChecked control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cbSetChecked +//KeywordEnd// +DescriptionStart: +Sets the current state of a checkbox (CT_CHECKBOX type 77 of Dialog Control ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cbSetChecked +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control cbSetChecked state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ceil +//KeywordEnd// +DescriptionStart: +The ceil value of x. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ceil +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ceil x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +channelEnabled +//KeywordEnd// +DescriptionStart: +Returns true or false depending on whether the given channel is enabled or disabled. For more information about enabling/disabling of chat channels see enableChannel. Channel / Number correspondence: +0 = Global +1 = Side +2 = Command +3 = Group +4 = Vehicle +5 = Direct +6-15 = Custom Radio (Is not supported by channelEnabled ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/channelEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +channelEnabled channel +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cheatsEnabled +//KeywordEnd// +DescriptionStart: +Checks whether cheats are enabled (whether the designers' version is running). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cheatsEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cheatsEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +checkAIFeature +//KeywordEnd// +DescriptionStart: +Check if given AI feature is currently enabled. Feature may be one of: +"AwareFormationSoft", "CombatFormationSoft". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/checkAIFeature +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +checkAIFeature feature +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +checkVisibility +//KeywordEnd// +DescriptionStart: +WIP +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/checkVisibility +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +[ignored object, lod name] checkVisibility [begin, end] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +civilian +//KeywordEnd// +DescriptionStart: +Pre-defined variable for the civilian side. +When used in a format statement ( hint format ["%1",civilian] ), the string returned is "CIV". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/civilian +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +civilian +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +In OFP v1.96, empty vehicles, objects and dead soldiers are on side civilian. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +className +//KeywordEnd// +DescriptionStart: +Returns short name of location. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/className +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +className loc +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearAllItemsFromBackpack +//KeywordEnd// +DescriptionStart: +Removes all items from the backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearAllItemsFromBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearAllItemsFromBackpack unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearBackpackCargo +//KeywordEnd// +DescriptionStart: +Removes all backpacks from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearBackpackCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearBackpackCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearBackpackCargoGlobal +//KeywordEnd// +DescriptionStart: +Removes all backpacks from the vehicle cargo space. MP synchronized. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearBackpackCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearBackpackCargoGlobal unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearGroupIcons +//KeywordEnd// +DescriptionStart: +Removes all icon from group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearGroupIcons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearGroupIcons group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearItemCargo +//KeywordEnd// +DescriptionStart: +Removes all items from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearItemCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearItemCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearItemCargoGlobal +//KeywordEnd// +DescriptionStart: +Removes all items from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearItemCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearItemCargoGlobal box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearItemPool +//KeywordEnd// +DescriptionStart: +Removes all items from ammo box (or any general weapon holder container) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearItemPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearItemPool box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearMagazineCargo +//KeywordEnd// +DescriptionStart: +Remove all magazines from the given vehicle's magazine cargo space. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearMagazineCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearMagazineCargo vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(11:02, 24 October 2009 (CEST)) +Effect is local, run on each client for global effect. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearMagazineCargoGlobal +//KeywordEnd// +DescriptionStart: +Removes all magazines from the vehicle cargo space. MP synchronized. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearMagazineCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearMagazineCargoGlobal unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearMagazinePool +//KeywordEnd// +DescriptionStart: +Remove all magazines from the magazine pool, of which the player may choose in the following missions. Available in campaigns only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearMagazinePool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearMagazinePool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearOverlay +//KeywordEnd// +DescriptionStart: +Clear the current overlay. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearOverlay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearOverlay map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearRadio +//KeywordEnd// +DescriptionStart: +Clean up the content of radio protocol history. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearRadio +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +Use $Code$ enableRadio false;$/Code$ to disable the chat. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearWeaponCargo +//KeywordEnd// +DescriptionStart: +Remove all weapons from the given vehicle's weapon cargo space. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearWeaponCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearWeaponCargo vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(October 24, 2009) +Only works on clients. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearWeaponCargoGlobal +//KeywordEnd// +DescriptionStart: +Removes all weapons from the vehicle cargo space. MP synchronized. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearWeaponCargoGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearWeaponCargoGlobal unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clearWeaponPool +//KeywordEnd// +DescriptionStart: +Remove all weapons from the weapon pool, of which the player may choose in the following missions. Available in campaigns only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clearWeaponPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clearWeaponPool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +clientOwner +//KeywordEnd// +DescriptionStart: +Returns the client's owner id +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/clientOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clientOwner +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 17, 2016) +On hosted server there could be some inconsistency between clientOwner, owner and object creator id, especially in missions started from save. On the dedicated server this command however works reliably. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +closeDialog +//KeywordEnd// +DescriptionStart: +Close the currently active user dialog with exit code. Most common exit codes are: +$Code$#define IDC_OK 1 //emulate "Ok" button$/Code$ +$Code$#define IDC_CANCEL 2 //emulate "Cancel" button$/Code$ +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/closeDialog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +closeDialog idc +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +closeDisplay +//KeywordEnd// +DescriptionStart: +Close given display with exit code. Most common exit codes are: +$Code$#define IDC_OK 1 //emulate "Ok" button$/Code$ +$Code$#define IDC_CANCEL 2 //emulate "Cancel" button$/Code$ +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/closeDisplay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display closeDisplay exitcode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 18, 2015) +closeDisplay does not instantly close the display but does it on next display simulation cycle (when display becomes active) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +closeOverlay +//KeywordEnd// +DescriptionStart: +Closes the current overlay without committing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/closeOverlay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +closeOverlay map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +collapseObjectTree +//KeywordEnd// +DescriptionStart: +Collapse the object tree. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/collapseObjectTree +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +collapseObjectTree map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +collect3DENHistory +//KeywordEnd// +DescriptionStart: +Execute a block of code in which all Eden Editor operations will be recorded as one history step. For example creating an entity, setting its attributes and then connections would normally be recorded as three different steps. Calling them all within single collect3DENHistory block will group them together and the user will need to undo only once to revert the changes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/collect3DENHistory +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +collect3DENHistory code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +combatMode +//KeywordEnd// +DescriptionStart: +Returns the combat mode of the given unit. See setCombatMode for more information about combat modes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/combatMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +combatMode grp +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +Use setCombatMode to set the combat mode. The definitions of the colours are given under that command. +%NextNote% +In OFP v1.96, combatMode return value does not change when unit's combat mode is set with radio commands, ie troops under the player's command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandArtilleryFire +//KeywordEnd// +DescriptionStart: +Orders a unit to reload defined magazine commence fire burst on the given position (via the radio). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandArtilleryFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit commandArtilleryFire [position, type, rounds] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandChat +//KeywordEnd// +DescriptionStart: +Types text to the command radio channel. Note: This function only types text to the list, it does not broadcast the message. If you want the message to show on all computers, you have to execute it on all of them. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit commandChat chatText +%NextRawSyntax% +[side, string] commandChat chatText +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commander +//KeywordEnd// +DescriptionStart: +In OFP it returns the commander of a vehicle. Since ArmA and VBS2 it returns the primary observer. The commander of a vehicle can be found with effectiveCommander. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commander +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +commander vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +It is also possible to find the commander of a vehicle by placing a C after the name of the vehicle so Tank1C and commander Tank1 both refer to the same unit, providing the original commander has not got out of the tank. +The difference between the two is Tank1C is always the unit that was commander of the tank when the mission started, whilst commander Tank1 is the commander which is now there. +%NextNote% +(August 3, 2006) +WARNING about Hardrock note: +Take very care about this : if you give a vehiculeVarName to one crew, so his referent will not be Tank1x anymore ! Also, if in the mission editor, you put something in the name field, when this soldier will getin a vehicle, it will not be a Tank1x too. So do not take consideration about Hardrock note, if you don't want to have bad surprise. It Is better to force names by using setVehicleVarName command. +((crew tank)select 0) SetVehicleVarName Tankcrew0 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandFire +//KeywordEnd// +DescriptionStart: +Order the given unit to fire on the given target (via the radio). +If the target is objNull, the unit is ordered to fire on its current target (set with doTarget or commandTarget ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName commandFire target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandFollow +//KeywordEnd// +DescriptionStart: +Order the given unit to follow the given other unit (via the radio). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandFollow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName commandFollow followedunit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandFSM +//KeywordEnd// +DescriptionStart: +Orders a unit to process command defined by FSM file (via the radio). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandFSM +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName commandFSM [fsm name, position, target] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandGetOut +//KeywordEnd// +DescriptionStart: +Orders the unit to get out from the vehicle (via the radio). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandGetOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +commandGetOut unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandingMenu +//KeywordEnd// +DescriptionStart: +Return the name of the player actual topmost commanding menu. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandingMenu +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +commandingMenu +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 15, 2009) +Possible values are : +"" - means menu is closed +"RscMainMenu" - Main menu, by pressing backspace +"RscMoveHigh" - Move menu (1) +"#WATCH" - Watch menu (2) +"#WATCH0" - Watch menu - next page (2-0) +"RscWatchDir" - Engage menu (3) +"RscWatchMoreDir" - Engage menu - watch a direction (3-8) +"#GET_IN" - Mount menu (4) +"RscStatus" - Status menu (5) +"RscCallSupport" - Mount menu - call support (5-1) +"#ACTION" - Action menu (6) +"RscCombatMode" - Combat mode menu (7) +"RscFormations" - Formation menu(8) +"RscTeam" - Team menu (9) +"RscSelectTeam" - Team menu - select team (0-5) +"RscReply" - Reply menu (0) +"#User:BIS_Menu_GroupCommunication" - Communication menu (0-8) +"#CUSTOM_RADIO" - Custom sounds menu (0-9) +"RscRadio" - Radio menu (0-0) +"RscGroupRootMenu" - "simplified" menu +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandMove +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to move to the given location (via the radio). Exactly the same as doMove, except this command displays a radio message. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandMove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName commandMove position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandRadio +//KeywordEnd// +DescriptionStart: +Sends the message to the command radio channel. The message is defined in the description.ext file or radio protocol. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit commandRadio radioName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 24, 2010) +example: $Code$ _unit commandRadio "SentCmdHide";$/Code$ +radio command from CA_Dubbing config should work +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandStop +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to stop (via the radio). A stop command will never finish, the unit will never be ready. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandStop +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +commandStop unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +In ArmA 1.14, this command will not stop a unit that has been given a move order by means of selecting the unit, then clicking on the in game map (or ground). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandTarget +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to target the given target (via the radio). Command given to the player, puts a red square with words Target and Distance on player's HUD at target location. If player in vehicle and has radar facilities, it also adds target marker to the radar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName commandTarget target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commandWatch +//KeywordEnd// +DescriptionStart: +Orders the unit(s) to watch the given position or target (via the radio). Use objNull as the target to order a unit to stop watching a position/target +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commandWatch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName commandWatch position +%NextRawSyntax% +unitName commandWatch target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +comment +//KeywordEnd// +DescriptionStart: +Define a comment. +Mainly used in SQF Syntax, as you're able to introduce comment lines with semicolons in a SQS script. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/comment +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +comment commentMsg +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 12, 2009) +Like ArmA, you can't use brackets to make a multi-lines comment. But, in a sqf file, you can make a comment as follow : +$Code$ comment " +first line +seconde line";$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +commitOverlay +//KeywordEnd// +DescriptionStart: +Commit the current overlay. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/commitOverlay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +commitOverlay map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +compile +//KeywordEnd// +DescriptionStart: +Compile expression. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/compile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +compile expression +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +compileFinal +//KeywordEnd// +DescriptionStart: +Compile expression and makes it final, preventing it from: +repeated compile or compileFinal +removal by nil +remote rewrite using publicVariable, publicVariableClient and publicVariableServer +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/compileFinal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +compileFinal expression +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(August 14, 2013) +When broadcasting a compileFinal'ed variable using publicVariable or its variants, the variable also becomes final on the other client(s) and/or the server. +Also, compileFinal does not prevent event handlers from being removed or overwritten. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +completedFSM +//KeywordEnd// +DescriptionStart: +Check whether the given FSM completes. +The FSM handle is the number returned by the execFSM command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/completedFSM +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +completedFSM fsmHandle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +composeText +//KeywordEnd// +DescriptionStart: +Creates a structured text by joining the given structured or plain texts. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/composeText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +composeText [text1, text2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configClasses +//KeywordEnd// +DescriptionStart: +Returns an array of config entries which meet criteria in condition code. Command iterates through all available config sub classes of the given config class. Current looked at config is stored in _x variable (similar to alternative count command implementation). Condition has to return true in order for the looked at config to be added to the resulting array. +The condition code passed to configClasses should only be used for simple filter expressions and nothing more +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configClasses +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +condition configClasses config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Jul 19, 2014) +(ArmA3 1.24) It is recommended to use configClasses instead of BIS_fnc_getCfgSubClasses and BIS_fnc_uniqueClasses on subclasses collection or conditional selection. +$Code$ +_faces = " true " configClasses ( configFile "Cfgfaces"); +//same as: _faces = (configfile "CfgFaces") call BIS_fnc_getCfgSubClasses ; +$/Code$ +$Code$ +//Extract all animals: +animals = "(( configName _x) isKindOf 'animal')" configClasses ( configFile "CfgVehicles"); +/*same as: +aniamls = []; +[( configFile "CfgVehicles"),{ +if (( configName _this) isKindOf “animal�) then { +animals set [ count animals, _this] +} +} +] call BIS_fnc_uniqueClasses ;*/ +$/Code$ +Return nested subclasses, currently still BIS_fnc_returnChildren +$Code$ +//Return all nested config classes. +[( configFile "CfgFaces"),1, true, true ] call BIS_fnc_returnChildren ; +$/Code$ +%NextNote% +(oct 19, 2014) +A fantastic way to filter stuff. eg; Create an array of west vehicles and spawn then in front of the player in rows of 5 +$Code$ +private ["_cfgArray","_xPos","_yPos","_veh"]; +_cfgArray = "( +(getNumber (_x 'scope') = 2) +{getNumber (_x 'side') == 1 +{getText (_x 'vehicleClass') in ['Armored', 'Car', 'Air'] +} +} +)" configClasses (configFile "CfgVehicles"); +_xPos = 0; +_yPos = 0; +{ +_yPos = _yPos + 20; +_veh = createVehicle [ ( configName _x ), player modelToWorld [_xPos, _yPos, 0], [], 0, "None"]; +if (_yPos = 100) then { +_yPos = 0; +_xPos = _xPos + 20; +}; +} forEach _cfgArray; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configFile +//KeywordEnd// +DescriptionStart: +Return root of config entries hierarchy. +See AllInOne Config for a full config extract as example. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configFile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configFile +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Jul 19, 2014) +(ArmA3 1.24) It is recommended to use configClasses instead of BIS_fnc_getCfgSubClasses and BIS_fnc_uniqueClasses on subclasses collection or conditional selection. +$Code$ +_faces = " true " configClasses ( configFile "Cfgfaces"); +//same as: _faces = (configfile "CfgFaces") call BIS_fnc_getCfgSubClasses ; +$/Code$ +$Code$ +//Extract all animals: +animals = "(( configName _x) isKindOf 'animal')" configClasses ( configFile "CfgVehicles"); +/*same as: +aniamls = []; +[( configFile "CfgVehicles"),{ +if (( configName _this) isKindOf “animal�) then { +animals set [ count animals, _this] +} +} +] call BIS_fnc_uniqueClasses ;*/ +$/Code$ +Return nested subclasses, currently still BIS_fnc_returnChildren +$Code$ +//Return all nested config classes. +[( configFile "CfgFaces"),1, true, true ] call BIS_fnc_returnChildren ; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configHierarchy +//KeywordEnd// +DescriptionStart: +Returns hierarchy of the given config class. Just like with inheritsFrom, only complete config classes are supported +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configHierarchy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configHierarchy configClass +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configName +//KeywordEnd// +DescriptionStart: +Returns name of config entry. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configName config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configNull +//KeywordEnd// +DescriptionStart: +A non-existing Config. +configNull == configNull ; // true +isNull configNull ; // true +configNull isEqualTo configNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configProperties +//KeywordEnd// +DescriptionStart: +Returns an array of config entries which meet criteria in condition code. Command iterates through available classes and config properties for given config entry. If 3rd param is true the search also includes inherited properties. Current looked at config is stored in _x variable (similar to alternative count command implementation). Condition has to return true in order for the looked at property to be added to the resulting array. +The condition code passed to configProperties should only be used for simple filter expressions and nothing more +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configProperties +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configProperties [config, condition, inherit] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configSourceMod +//KeywordEnd// +DescriptionStart: +Returns modDir of the mod that given config class was loaded from. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configSourceMod +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configSourceMod config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +configSourceModList +//KeywordEnd// +DescriptionStart: +Returns an array of mods which modified the given config class. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/configSourceModList +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +configSourceModList config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +connectTerminalToUAV +//KeywordEnd// +DescriptionStart: +Connect person with UAV terminal to UAV unit. UAV Terminal item needs to be assigned to GPS slot. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/connectTerminalToUAV +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person connectTerminalToUAV uav +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +controlNull +//KeywordEnd// +DescriptionStart: +A non-existing Control. To compare non-existent objects use isNull or isEqualTo : +controlNull == controlNull ; // false +isNull controlNull ; // true +controlNull isEqualTo controlNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/controlNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +controlsGroupCtrl +//KeywordEnd// +DescriptionStart: +Returns a child control with specified idc from a controls group +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/controlsGroupCtrl +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlgrp controlsGroupCtrl idc +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +copyFromClipboard +//KeywordEnd// +DescriptionStart: +Return the content of the (text) clipboard. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/copyFromClipboard +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +copyFromClipboard +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +copyToClipboard +//KeywordEnd// +DescriptionStart: +Copy the text to the clipboard. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/copyToClipboard +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +copyToClipboard text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 12, 2014) +To add a line break in output text do this: +$Code$_br = toString [13,10];//(carriage return line feed) +_string = "Line 1" + _br + "Line 2"; +copyToClipboard _string; +$/Code$ +Paste into text editor of choice, you get: +$Code$Line 1 +Line 2$/Code$ +(A3 1.30 Stable executed inside.sqf via execVM ) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +copyWaypoints +//KeywordEnd// +DescriptionStart: +Copy the chain of waypoints from source to target group. The target group will start to process waypoints from the first one. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/copyWaypoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupTo copyWaypoints groupFrom +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cos +//KeywordEnd// +DescriptionStart: +Cosine of a number, argument in degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cos x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 8, 2006) +Be aware that there might be rounding errors in the results of this command. +cos 90 +for example doesn't return the expected '0', but '-4.37114e-008'. So, if you want to compare results of Cosinus, don't use the compare operator +(cos 90)==0 +but rather use less than. +(cos 90) 0.00001 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +count +//KeywordEnd// +DescriptionStart: +Can be used to count: +the number of elements in array +the number of elements in array with condition +the number of sub-entries in a config object +the number of characters in a string (since ["Arma 3","Arma3",127,126674,"Development"]) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/count +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +count array +%NextRawSyntax% +condition count array +%NextRawSyntax% +count configname +%NextRawSyntax% +count string +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +(April 28, 2007) +This conditional count command only works if all the elements in the tested array are of the same type as the tested element. +For example, the following code will created an error, since the elements are of different types (object, number, string): +$Code$_arr = [ player,100,"one"]; {_x == "one"} count _arr;$/Code$ +Alternatively, to avoid the error use isEqualTo instead of ==. --KK +This one, on the other hand, where all elements are strings, just like the tested element, will return the correct result of 1: +$Code$_arr = ["one","two","three"]; {_x == "one"} count _arr;$/Code$ +%NextNote% +(August 3, 2006) +Notes from before the conversion: +Use this to calculate how many "M16" mags a soldier has left. +$Code${_x == "M16"} count magazines soldier1;$/Code$ +Take care when using count to determine how many units are left alive in a group: count units group player or count units groupname Will return the number of units the leader of the group thinks are alive. If some units have been killed out of sight of other members of the group then it may take sometime for this to be the actual numbers in the group. To determine exactly how many units are really alive in a group use: +$Code${ alive _x} count units group player ;$/Code$ +or +$Code${ alive _x} count units groupname;$/Code$ +%NextNote% +(December 15, 2014) +count can be (ab)used for a very fast and simple check if at least one element in an array fulfills a certain condition: +$Code$if({if( _x fulfills condition ) exitWith {1}; false} count _array isEqualTo 1) then +{ +//do whatever here +};$/Code$ +This code will exit the count loop as soon as it finds an element fulfilling the condition, leaving the count with the value of 1, hence make the larger if-condition be true. +If no array element fulfills the condition, the count will be 0 and the if-condition will be false. +%NextNote% +(December 29, 2014) +Quit loop at first fulfilled condition (same as above but faster): +$Code$0 = { if (_x == 4) exitWith { +//do something when we reach 4 +}} count [1,2,3,4,5,6];$/Code$ +%NextNote% +(January 2, 2015) +Using exitWith inside a count loop will overwrite the default functionality and make count return whatever the exitWith returns: +$Code$_result = { +if(_x isEqualTo 3) exitWith {"Hello"} +} count [1,2,3,4,5]; +//_result = "Hello"$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +countEnemy +//KeywordEnd// +DescriptionStart: +Count how many units in the array are considered enemy to the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/countEnemy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName countEnemy arrayName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +The countEnemy command seem to count the number of units from the array that are considered to be of the given type by the whole side, not just the specified unit. +%NextNote% +(December 15, 2006) +The unit that's checking (left side of the command) needs a certain level of knowledge about the target (about.1) before the enemy units are actually counted. (OFP ArmA) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +countFriendly +//KeywordEnd// +DescriptionStart: +Count how many units in the array are considered friendly to the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/countFriendly +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName countFriendly arrayName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +The countFriendly command seem to count the number of units from the array that are considered to be of the given type by the whole side, not just the specified unit. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +countSide +//KeywordEnd// +DescriptionStart: +Count how many units in the array belong to given side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/countSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +side countSide arrayName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(July 4, 2014) +The countSide command will also accept an array of groups. Tested in ARMA 3 v1.22 +%NextNote% +(October 19, 2014) +This command considers captive units as civilians, regardless of their group's side. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +countType +//KeywordEnd// +DescriptionStart: +Count how many units in the array are of given type. Other than typeOf this command also works with parent classes like "Air", "Tank" and "Car". For a full class reference see Classes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/countType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type countType arrayName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(April 23, 2007) +This command can be used on the whole hierarchical class tree (i.e. when checking a HMMWV, one could test for "HMMWV50", "Car", "LandVehicle", etc.) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +countUnknown +//KeywordEnd// +DescriptionStart: +Count how many units in the array are unknown to the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/countUnknown +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName countUnknown arrayName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +create3DENComposition +//KeywordEnd// +DescriptionStart: +Create new Composition. To create individual entities, use create3DENEntity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/create3DENComposition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +create3DENComposition [configPath, position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +create3DENEntity +//KeywordEnd// +DescriptionStart: +Create new Eden Entity. Used for creating individual entities; to create a composition (e.g., infantry squad), use create3DENComposition. +This is the only way how to add new editable entities to Eden Editor scenario. Other 'create' commands like createVehicle or createUnit will still work, but the resulting entity won't be editable. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/create3DENEntity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +create3DENEntity [mode, class, position, ] +%NextRawSyntax% +group create3DENEntity [mode, class, position, ] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 29, 2016) +The classnames for triggers can be found in the config class CfgNonAIVehicles +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createAgent +//KeywordEnd// +DescriptionStart: +Creates an (independent) agent (person) of the given type (type is a name of a subclass of CfgVehicles ). An agent does not have a group or leader or the standard soldier FSM associated with it -- for instance, an enemy soldier spawned as an agent has limited AI and will stand stupidly when fired upon -- which can be useful to limit the amount of AI processing being done in a mission with very large numbers of "AI". If the markers array contains several marker names, the position of a random one is used, otherwise, the given position is used. The unit is placed inside a circle with this position as its center and placement as its radius. +Players assigned to an agent using setPlayable will be able to control the agent, operate weapons and other actions, but will not be able to access their inventory using the gear screen. +Special properties can be: "NONE", "CAN_COLLIDE" and "FORM". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createAgent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createAgent [type, position, markers, placement, special] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 29, 2014) +In Arma 3, default FSM is calling BIS_fnc_animalBehaviour script upon agent creation, which takes on some animal behavioural logic. The problem here is that it is almost impossible to make animal do what is told. Until now. Since Arma 3 v1.31.127383 you can set BIS_fnc_animalBehaviour_disable variable on the agent at the moment of agent creation, to override the function. +$Code$tr = createTrigger ["EmptyDetector", player modelToWorld [0, 10, 0]]; +tr setTriggerArea [5, 5, 0, true ]; +tr setTriggerActivation ["CIV", "PRESENT", true]; +rabbits = []; +private "_r"; +for "_i" from 1 to 10 do { +_r = createAgent ["Rabbit_F", position tr, [], 0, "NONE"]; +_r setVariable ["BIS_fnc_animalBehaviour_disable", true ]; +rabbits pushBack _r; +}; +tr setTriggerStatements [ +" if (rabbits isEqualTo thisList) exitWith { +_r = thisList select floor random count thisList; +_r moveTo (_r modelToWorld [2.5 - random 5, 2.5 - random 5, 0]); +}; +_esc = rabbits - thisList; +doStop _esc; +{_x moveTo position thisTrigger} forEach _esc; +systemChat str [ time, _esc]; +false ", +"", +"" +];$/Code$ +%NextNote% +(April 18, 2015) +Agents seem to use the same collision model that the player uses, unlike normal AI. Normal AI don't collide with objects, but agents are physically stopped by obstacles the same way players are. This also probably means agents cost more resources than normal AI. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createCenter +//KeywordEnd// +DescriptionStart: +In a nutshell, this command creates game Side. Without side it is not possible to create Groups. So if center for particular side is undefined, no groups can be created for this side. A Unit needs a group to be able to spawn in. So if no center for particular side exists, no groups for this side can be created and therefore no units for this side can be spawned. In Arma 3, the centers for all sides are created for you. An attempt to create center for existing side is ignored. Center can only be created for: east, west, resistance, civilian and sideLogic. These are the only sides groups can be created for. +Old description : Creates a new AI HQ for the given side. An 'HQ ' is something each side needs to have to be able to communicate. By default, all centers for units which are present in the mission are created before the mission is started. This command can be used to initialize a side which has no units present in the Mission.sqm, so that you can spawn groups and units for it. +For the available sides see Side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createCenter +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createCenter side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(17:15, 22 June 2007 (CEST)) +You need to set the new sides friendly status using the setFriend command, once you have created your Center. Otherwise the newly created AI will not engage you, if you're on the opposing side. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createDialog +//KeywordEnd// +DescriptionStart: +Create a dialog which is defined either in the mission's description.ext, in the campaign's description.ext or in the global resource.cpp. The given name has to be the class name used in one of these files. If another dialog is already opened, the desired dialog is created as a child dialog of the one already opened. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createDialog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createDialog dialogName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createDiaryLink +//KeywordEnd// +DescriptionStart: +Create a link to the section of diary given by subject. Record is selected based on given object (diary record,task or unit). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createDiaryLink +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createDiaryLink [subject,object,text] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createDiaryRecord +//KeywordEnd// +DescriptionStart: +creates a diary entry. +Supported tags and their parameters: +All +image : String - path to image. When present, any element with it will be displayed as image. +width : Number - image width in pixels. +height : Number - image height in pixels. +font +color : String - HTML color in format #aarrggbb or #rrggbb +size : Number - font height in pixels. +face : String - font type (class from CfgFontFamilies) +br +marker +name : String - marker name +execute +expression : String - executed code +executeClose +expression : String - executed code, diary is closed afterwards +log +subject : String - subject name. +record : String - record name (e.g. "Record6" or "Unit1059524") +gear +unit : Number - unit ID +teamSwitch +unit : Number - unit ID +kick +id : Number - player ID +ban +id : Number - player ID +mute +id : Number - player ID +currentTask +id : Number - task ID +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createDiaryRecord +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName createDiaryRecord [subject, text, task, state] +%NextRawSyntax% +unitName createDiaryRecord [subject, [title, text], task, state] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(14:54, 15 January 2011‎) +To insert a link into a diary record that executes code instead of jumping to a marker, use the tag +execute expression=" Code to execute " Text /execute +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createDiarySubject +//KeywordEnd// +DescriptionStart: +Create a new subject page in a log. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createDiarySubject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person createDiarySubject [subject, displayName, picture] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createDisplay +//KeywordEnd// +DescriptionStart: +Create child display of given display and load from "resourceName". The notable difference between createDisplay and createDialog is that if child display class has movingEnable = 1; param, the player would be able to move whilst having control of the mouse pointer. +Since Arma 3 v1.49.131653 createDisplay returns Display and will first look in description.ext for resourceName config, if not found, it will then look in main config. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createDisplay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +parent createDisplay resourceName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 23, 2014) +Do not simply createDisplay form Arma 3's debug console, as it will crash the game. Instead use spawn scope: +$Code$[] spawn { findDisplay 46 createDisplay "RscCredits"};$/Code$ +%NextNote% +(November 15, 2014) +Arma3 v1.34 +When using CreateDisplay instead of CreateDialog, all the commands for working with the controls of the display only work with the control version, not the IDC version. +EXAMPLE: +$Code$LbAdd [1234, "item"]; // does not work on displays, and won't error either +_ctrl LbAdd "item"; // does work with displays$/Code$ +So you have to use the control(DisplayCtrl) and not the IDC. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createGearDialog +//KeywordEnd// +DescriptionStart: +Opens gear dialog for given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createGearDialog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +CreateGearDialog [unit,resource] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 12, 2015) +Arma 3 v. 1.42 crashes when executing examples above in debug panel. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createGroup +//KeywordEnd// +DescriptionStart: +Creates a new AI group for the given Side. An HQ (center) for that side must already be in the Mission.sqm or have been initialized with createCenter. +For the available sides see Side. +In Arma 3 when last unit leaves a group, the group gets auto deleted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createGroup +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createGroup side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(December 15, 2006) +The group limit is 144 groups groups per side. If you attempt to create a group, and there is no room for another, it simply doesn't create, and it doesn't error. +%NextNote% +(July 10,2007) +In Armed Assault, empty groups are not automatically deleted - if you created 144 groups, you will not be able to create new group even if all units in all those groups died, because all the 144 groups still exists - you will have to delete some groups manually. +%NextNote% +(January 04, 2011) +A group created with createGroup will get a waypoint at [0,0,0]. When you use createUnit to fill it with units, it will get an additional waypoint at the position the first unit is created. This new waypoint will also be set as currentWaypoint. However keep these two waypoints in mind when you do some scripting involving this groups' waypoints. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createGuardedPoint +//KeywordEnd// +DescriptionStart: +Adds a point guarded by the given side. The actual item or position guarded is determined by the following priority. +If idStatic is not negative, the position of a static object with the given id is guarded. +If the given vehicle is valid, the starting position of the vehicle is guarded. +otherwise the given position is guarded. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createGuardedPoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createGuardedPoint [side, position, idStatic, vehicle] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createLocation +//KeywordEnd// +DescriptionStart: +Creates a location of the specified class and dimensions at the specified position. Classes are defined in CfgLocationTypes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createLocation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createLocation [className, position, sizeX, sizeY] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(12:25, 12 February 2010) +Possible location types, see: Location Types +For the actual name text of the location, use setText. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createMarker +//KeywordEnd// +DescriptionStart: +Creates a new marker at the given position. The marker name has to be unique. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createMarker +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createMarker [name, position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +$Code$_markerstr = createMarker ["markername",[_Xpos,_Ypos]]; +_markerstr setMarkerShape "ICON"; +_markerstr setMarkerType "hd_dot";$/Code$ +%NextNote% +(September 19, 2015) +createMarker accepts an object as position parameter as well (A3 - 1.50.131969). You could try this with the following code (both SP/MP) +$Code$_markerstr = createMarker ["markername", player]; +_markerstr setMarkerShape "RECTANGLE"; +_markerstr setMarkerSize [100,100];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createMarkerLocal +//KeywordEnd// +DescriptionStart: +Creates a local marker at the given position. Marker exists only on PC that created it. The marker name has to be unique. +NOTE: Local markers have own set of local commands "XXXXLocal" to work with. If you use global marker command on a local marker, the local marker will become global marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createMarkerLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createMarkerLocal [name, position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +To create a marker which is visible on the map you need to define at least the following three settings: +$Code$_markerstr = createMarkerLocal ["markername",[_Xpos,_Ypos]]; +_markerstr setMarkerShapeLocal "ICON"; +_markerstr setMarkerTypeLocal "DOT";$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createMenu +//KeywordEnd// +DescriptionStart: +Creates a previously added menu. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createMenu +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map createMenu index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createMine +//KeywordEnd// +DescriptionStart: +Creates a mine of the given type (type is the name of the subclass of CfgVehicles). If the markers array contains several marker names, the position of a random one is used, otherwise, the given position is used. The mine is placed inside a circle with this position as its center and placement as its radius. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createMine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createMine [type, position, markers, placement] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createMissionDisplay +//KeywordEnd// +DescriptionStart: +Create single missions display as a child of given display. The mission dialog will be set to the directory given as an argument "root". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createMissionDisplay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display createMissionDisplay string +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createSimpleTask +//KeywordEnd// +DescriptionStart: +Creates a new Task. The task effect is local, it will only exist on PC it was added. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createSimpleTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person createSimpleTask [name, parentTask ] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(July 02, 2011) +Creating child will position the new task just under the parent task. +Creating another "normal" (parent) task will create a new line above the others. Think of it if you want ordered objectives. +Succeeding parent task will automatically succeed childs, whatever their taskState was set to. (I.E. If a task is set as a child to another, it will be completed when its parent is complete.. no matter if the child task really was or not). +This command has to be executed again for it to be applied for JIP players - no server sync +Full step by step code from beginning to end: +Step 1: create a new simpleTask +$Code$ +A_SIMPLE_TASK = player createSimpleTask [( localize "STR_aSimpleTask")]; +$/Code$ +You may create a task at any given point in time. You just need to be aware of the fact, that you've created the task for a single unit (the player). So if you make use of teamSwitch, respawn or similiar, you need to think about how to manage this, so all of these units will have up to date tasks assigned to them. +Second, it's a good practice to use a stringtable, even if you do not plan (yet) to offer translations. +Step 2: task destination +$Code$ +A_SIMPLE_TASK setSimpleTaskDestination _destination; +$/Code$ +variable/pointer-to-your-task setSimpleTaskDestination some-position. That's it. +Step 3: task description +$Code$ +A_SIMPLE_TASK setSimpleTaskDescription [ +( localize "STR_aSimpleTaskLongText"), +( localize "STR_aSimpleTask"), +( localize "STR_aSimpleTaskWaypointLabel") +]; +$/Code$ +Again, no magic involved here. You take your task, the command setSimpleTaskDescription an pass an array with three strings in it. The first string is the long description text, the second is the name/title of the task and the last one will show up on-screen on the waypoint in cadet mode. +Step 4: set and update task states +$Code$ +A_SIMPLE_TASK setTaskState "CREATED"; +$/Code$ +And that's it. Here a minimal working example: +$Code$ +A_SIMPLE_TASK = player createSimpleTask ["simple task title"]; +A_SIMPLE_TASK setSimpleTaskDestination ( position player ); +A_SIMPLE_TASK setSimpleTaskDescription [ +"simple task long description", +"simple task title", +"simple task waypoint label" +]; +A_SIMPLE_TASK setTaskState "CREATED"; +$/Code$ +And then later in the mission: +$Code$ +A_SIMPLE_TASK setTaskState "SUCCEEDED"; +$/Code$ +If you want to keep the player in the loop about the status of tasks, you may always do this: +$Code$ +[ objNull, objNull, A_SIMPLE_TASK, "SUCCEEDED"] execVM "CA\Modules\MP\data\scriptCommands\taskHint.sqf"; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createSite +//KeywordEnd// +DescriptionStart: +Create a new site. +This command is considered deprecated and is no longer supported +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createSite +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type createSite pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 18, 2014) +"CreateSite is an obsolete command from the time in development when Sites were handled separately from other modules. Now they use the modules framework. +If you want a specific Site to be activated during the mission, place it in the editor and use the Condition line in its parameters (the last one)." - Jezuro [1] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createSoundSource +//KeywordEnd// +DescriptionStart: +Creates a sound source of the given type (type is the name of the subclass of CfgVehicles which is pointing to the sound defined in CfgSFX). If the markers array contains several marker names, the position of a random one is used, otherwise, the given position is used. The sound source is placed inside a circle with this position as its center and placement as its radius. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createSoundSource +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createSoundSource [type, position, markers, placement] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createTask +//KeywordEnd// +DescriptionStart: +Create a new AI task (subtask of parentTask). Type is name of registered task type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember createTask [[type, parentTask], priority, name1, value1...nameN, valueN] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createTeam +//KeywordEnd// +DescriptionStart: +Create a team and name it. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createTeam [type, name] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createTrigger +//KeywordEnd// +DescriptionStart: +Creates a sensor ( trigger ) of the given type and at the given position. The type must be a class name in CfgNonAIVehicles or CfgVehicles with simulation = detector. An array containing all units that have activated the trigger is available via list triggerobj. Created triggers can be deleted using deleteVehicle. +NOTE1: Since Arma 3 v1.43.129935 triggers can be created locally on clients using the alternative syntax. +NOTE2: Since Arma 3 v1.53.132440 triggers can be disabled/enabled using enableSimulation command. +Triggers are created with default params, which are: +a - 50.0 +b - 50.0 +angle - 0 +rectangular - false +activationBy - None +activationType - Present +repeating - false +timeoutMin - 0 +timeoutMid - 0 +timeoutMax - 0 +interruptable - true +type - None +text - "" +name - "" +expCond - "this" +expActiv - "" +expDesactiv - "" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createTrigger +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createTrigger [type, position, makeGlobal ] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(March 6, 2013) +Calling list immediately after creating a trigger this way (and setting up activation, area, statements, timeout, etc..), will return null instead of an array. It seems the trigger needs about 1 second to initialise, after which it will behave as expected: returning an array of all the objects inside the trigger (the ones matching the criteria), or an empty array. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createUnit +//KeywordEnd// +DescriptionStart: +Create unit of a class that's defined in CfgVehicles. +The Group parameter MUST be an existing group or the unit won't be created. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createUnit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type createUnit [ position, group, init, skill, rank] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(August 13, 2006) +To give a newly created unit a name, put "newUnit = this" in the init field. +%NextNote% +(18:41, 5 April 2007 (CEST)) +The eventhandlers added with addEventHandler in the init parameter will only fire locally on the machine where this creation command is called from. +%NextNote% +(December 24, 2007) +If you do not wish it to be in a group, you can create a gamelogic and group it to that. Note: The unit will deny to move away from the gamelogic. +%NextNote% +(August 27, 2015) +In order to solve the above problem you can simply group it to the game logic as stated, then group it to grpNull +e.g +$Code$myUnit join myGroupLogic; +myUnit join grpNull +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createVehicle +//KeywordEnd// +DescriptionStart: +Creates an empty object of given classname type (See Arma 3 Assets or createVehicle/vehicles ) +For a class reference from older games see Classes. +Randomization: +In Arma 3 many vehicles will get randomized in appearance by default in order to add some variety to the game. It is possible to override this default behavior by setting BIS_enableRandomization variable to false in the vehicle namespace: +$Code$_veh = "C_Offroad_01_F" createVehicle position player ; +_veh setVariable ["BIS_enableRandomization", false ];$/Code$ +or +$Code$this setVariable ["BIS_enableRandomization", false ];$/Code$ +if done in mission editor init field. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type createVehicle position +%NextRawSyntax% +createVehicle [type, position, markers, placement, special] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(August 13, 2006) +Using main syntax of this command sets the created vehicle not exactly at the given position, you have to setPos it there, if accuracy counts. +%NextNote% +(Jan 20, 2006) +Using main syntax of this command sets the created vehicle in the nearest possible position. You can create a dozen of tanks with it - they will appear side by side. +%NextNote% +(December 13, 2006) +Observe that buildings with the default destrType will not work correctly in multiplayer in Armed Assault when created with this command. The Destruction effect will only be displayed where the building is local. +%NextNote% +(Oct 18, 2009) +As of Arma2, this command cannot be used to create game logics (source). Use createUnit instead. +%NextNote% +(January 14, 2011) +In multiplayer, only run this command on one machine. It will create a the vehicle on all machines every time it is called on any machine. +%NextNote% +(January 26 2014) +Using getPosATL should work, if otherwise you are struggling to get a the proper position coordinates. +%NextNote% +(September 12, 2014) +"vehclass" createVehicle pos is the same if not faster than createVehicle ["vehclass", pos, [], 0, "NONE"] +%NextNote% +(August 22, 2015) +GroundWeaponHolder class is automatically deleted when empty after 0.5 to 1 seconds in A3 1.48. The exact delay is random but never lower than 0.50 secs after creation. You can stop deletion by adding something (cargo) to it within 0.5 seconds. +%NextNote% +(December 1, 2015) +The short syntax creates vehicles at ground level ignoring the Z in pos +$Code$"vehclass" createVehicle pos$/Code$ This is equivalent to $Code$createVehicle ["vehclass", [pos select 0, pos select 1, 0], [], 0, "NONE"]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createVehicleCrew +//KeywordEnd// +DescriptionStart: +Creates crew to given empty vehicle. Crew members are default crew defined in config. Crew side will also correspond to vehicle's faction. This command does not addVehicle to the created crew in the same way this normally happens when crewed vehicle created in the editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createVehicleCrew +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +createVehicleCrew vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 20, 2014) +As of ARMA 3 v1.26 the command will work on non-empty vehicles. If any of the crew defined in config are missing they will be added. +%NextNote% +(November 8, 2014) +This command creates drivers/copilots, commanders and gunners where appropriate, but it never creates cargo crew. +So a gunship Huron will get a pilot and copilot plus 2 door gunners, but nobody in the back. +%NextNote% +(December 22, 2015) +createVehicleCrew does not work with Transport Unload waypoints for helicopters. You need to spawn the pilots separately and then get them into the helicopter in order to get Transport Unload waypoints to work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +createVehicleLocal +//KeywordEnd// +DescriptionStart: +Creates an object of the given type. Created object is not transferred through network in MP games. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/createVehicleLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type createVehicleLocal position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(07:18, 5 June 2008 (CEST)) +If the object that is created is of the type ammo, then it will created on all clients ( tested only on VBS2 ). +%NextNote% +(18:04, 5 September 2013 (CEST)) +Indeed the type of Ammo is transfered to ALL clients, but apparently also the muzzle effects (firing sound, light, etc.); this includes muzzles from Horns (Truck or Car Horn, Bicycle bells, etc.) as well as any other weapon. Tested on Arma 1 - Arma 2 OA (latest patch). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +crew +//KeywordEnd// +DescriptionStart: +Returns the crew (both dead and alive) of the given vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/crew +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +crew vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(3 February, 2010) +The crew command will return crew in order [driver,gunner,commander,turrets,cargo] +%NextNote% +(1 June, 2014) +The crew command will return an empty array if the object has no crew - this includes objects that can't hold crew. If used on a unit (man, module, etc.) it will return an array containing that unit. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlActivate +//KeywordEnd// +DescriptionStart: +Launch actions attached to given (button based) control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlActivate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlActivate controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlAddEventHandler +//KeywordEnd// +DescriptionStart: +Add an event handler ( User Interface Event Handlers ) to the given control. Returns id of the handler or -1 when failed. +NOTE: Control EHs are processed in reversed order, i.e. last added: first, first added: last. So if you have an override it should be set up in the 1st added EH. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlAddEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlAddEventHandler [handler,function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 30, 2013) +As of Arma 3 v1.05.111658 ctrlAddEventHandler and displayAddEventHandler support script Code in addition to String [1] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlAngle +//KeywordEnd// +DescriptionStart: +WIP +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlAngle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlAngle control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlAutoScrollDelay +//KeywordEnd// +DescriptionStart: +Returns number of seconds until auto-scroll starts. -2 if scrollbar not present. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlAutoScrollDelay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlAutoScrollDelay control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlAutoScrollRewind +//KeywordEnd// +DescriptionStart: +True if auto-scroll should move back to start after it reach end. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlAutoScrollRewind +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlAutoScrollRewind control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlAutoScrollSpeed +//KeywordEnd// +DescriptionStart: +Returns number of seconds to auto-scroll one line. -1 if auto-scroll is disabled. -2 if scrollbar not present. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlAutoScrollSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlAutoScrollSpeed control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlChecked +//KeywordEnd// +DescriptionStart: +Returns the current state of checkbox (CT_CHECKBOXES, Type 7). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlChecked +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlChecked control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlClassName +//KeywordEnd// +DescriptionStart: +Returns the class name of a control as it defined in config. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlClassName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlClassName control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlCommit +//KeywordEnd// +DescriptionStart: +Commit control animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlCommit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlCommit time +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 11, 2015) +Use this command if you want to for example change the position or size of a control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlCommitted +//KeywordEnd// +DescriptionStart: +Check if the control animation is finished. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlCommitted +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlCommitted controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlCreate +//KeywordEnd// +DescriptionStart: +Creates new control in given display. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlCreate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlCreate [class, idc, controlsGroup] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 30, 2015) +"RscListBox" created via ctrlCreate is buggy, you can only select the first seven items. +%NextNote% +(February 6, 2016) +Although you can only dynamically create controls using BIS's configs, there are many commands to change certain aspects of each created control. See GUI Control +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlDelete +//KeywordEnd// +DescriptionStart: +Deletes given control. +Returns whether the deletion was successful. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlDelete +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlDelete control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 18, 2015) +ctrlDelete can only delete controls created with ctrlCreate. Use ctrlShow false and ctrlEnable false to disable existing controls. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlEnable +//KeywordEnd// +DescriptionStart: +Enable or disable a control of the currently active user dialog. Disabled controls cannot be clicked onto. +Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlEnable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlEnable [idc, enable] +%NextRawSyntax% +controlName ctrlEnable enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlEnabled +//KeywordEnd// +DescriptionStart: +Returns if a control on the currently active user dialog is enabled. Disabled controls cannot be focused. +Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlEnabled idc +%NextRawSyntax% +ctrlEnabled controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlFade +//KeywordEnd// +DescriptionStart: +Returns the current fade factor of control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlFade +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlFade controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlHTMLLoaded +//KeywordEnd// +DescriptionStart: +Returns true when HTML content was successfully loaded. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlHTMLLoaded +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlHTMLLoaded control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlIDC +//KeywordEnd// +DescriptionStart: +Returns control IDC. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlIDC +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlIDC control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlIDD +//KeywordEnd// +DescriptionStart: +Returns display IDD. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlIDD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlIDD display +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapAnimAdd +//KeywordEnd// +DescriptionStart: +Adds the next frame to the map animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapAnimAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map ctrlMapAnimAdd [time, zoom, position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(17:11, 9 March 2010) +Besides Position2D, both Objects and Position3D work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapAnimClear +//KeywordEnd// +DescriptionStart: +Clears the map animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapAnimClear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlMapAnimClear controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapAnimCommit +//KeywordEnd// +DescriptionStart: +Plays the map animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapAnimCommit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlMapAnimCommit controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapAnimDone +//KeywordEnd// +DescriptionStart: +Checks whether the map animation has finished. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapAnimDone +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlMapAnimDone controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapCursor +//KeywordEnd// +DescriptionStart: +Changes the default cursor that appears when interacting with a map control to a custom one. Use an empty string to restore the default cursor. If the specified cursor does not exist, the default is used and no error is produced. The cursor is the name of a config entry from CfgWrapperUI / Cursors. This command has the following specifics: +When used on Main Map ( findDisplay 12 displayCtrl 51) it is possible to override multiple default cursors. For example, while leaving default "Arrow" intact, it is possible to just override "Scroll" with lets say "Wait" (Example 3) +When used on a custom map, for example user made Mini Map, there is only one single cursor "" for everything, therefore only this cursor can be overridden (see Example 4 on how to override it) +Some possible class names (for the whole list see ctrlMapCursor/cursors ): +Arrow +Track +Move +Scroll +Rotate +Track3D +Move3D +Rotate3D +Raise3D +Wait +HC_move +HC_overFriendly +HC_overEnemy +HC_overMission +HC_unsel +NOTE1 : Cursor names are case sensitive. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapCursor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlMapCursor [defaultCursor, newCursor] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 8, 2016) +When using this command, the cursor will change for the whole display, resulting in visual glitches. Adding the onMouseMoving event handler can help solve this problem: +$Code$ +_control ctrlAddEventHandler ["MouseMoving",{ +_this params [ +["_mapCtrl", controlNull,[[[controlNull]]]], +["_xPos",-1,[0]], +["_yPos",-1,[0]], +["_mouseIn", false,[[[true]]]] +]; +if (_mouseIn) then { +// Mouse is in control area +_mapCtrl ctrlMapCursor ["","Track"]; +} else { +// Mouse is out of control area, goes back to arrow +_mapCtrl ctrlMapCursor ["","Arrow"]; +}; +}]; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapMouseOver +//KeywordEnd// +DescriptionStart: +Returns description of map sign mouse cursor is over. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapMouseOver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlMapMouseOver control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapScale +//KeywordEnd// +DescriptionStart: +Returns the current scale of given map control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapScale +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlMapScale ctrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapScreenToWorld +//KeywordEnd// +DescriptionStart: +Convert screen coordinates in map to world coordinates. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapScreenToWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map ctrlMapScreenToWorld [x, y] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 6, 2007) +Notes: +You can get the screen coordinates by the UI Event Handlers onMouseButtonDown, onMouseButtonUp, onMouseButtonClick, onMouseButtonDblClick. +The return Array is in 2-D, you can use it with all set-position commands. +_x = returnArray select 0; +_y = returnArray select 1; +%NextNote% +(December 2, 2009) +Notes: +In VBS2 1.23 this command does not seem to work properly. Therefore when defining UI Event Handlers onMouseButtonClick and onMouseButtonDblClick the functions onMapSingleClick and onDoubleClick (VBS2) can be used instead, these already provide access to the world coordinates of the click event. +%NextNote% +The command parameters are screen position coordinates, which may not equate to to the map control's coordinates. A map control's screen coordinates and size can be found use the ctrlPosition command. This is an issue when using the Arma 3 in-game map, which is not fullscreen (all previous titles used full screen map controls, so map control coords did equate to screen coords). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlMapWorldToScreen +//KeywordEnd// +DescriptionStart: +Transfers a map control world position to screen coordinates. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlMapWorldToScreen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlMapWorldToScreen position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 16, 2010) +Notes: +It returns a 2d array with the position on the active map display. Say the return [0.5.0.5] would mean that your input 3d world position, like [500,1000], is currently at the center of the active map display. +In other words you can make the actual world position (of an object for example), relative to your active map display. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlModel +//KeywordEnd// +DescriptionStart: +Returns model used in 3D Dialog Control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlModel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlModel control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlModelDirAndUp +//KeywordEnd// +DescriptionStart: +Returns vectorDir and vectorUp of the model used in 3D Dialog Control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlModelDirAndUp +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlModelDirAndUp control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlModelScale +//KeywordEnd// +DescriptionStart: +Returns 3D control model scale +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlModelScale +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlModelScale control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlParent +//KeywordEnd// +DescriptionStart: +Returns container of the given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlParent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlParent controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlPosition +//KeywordEnd// +DescriptionStart: +Returns the current position of 2D control as [x, y, w, h] array. For 3D control it returns relative [x,y,z]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlPosition controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlRemoveAllEventHandlers +//KeywordEnd// +DescriptionStart: +Remove all event handlers from the given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlRemoveAllEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlRemoveAllEventHandlers handlerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlRemoveEventHandler +//KeywordEnd// +DescriptionStart: +Remove a given event handler from the given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlRemoveEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlRemoveEventHandler [handler name,id] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlScale +//KeywordEnd// +DescriptionStart: +Returns the current scale of the control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlScale +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlScale controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetActiveColor +//KeywordEnd// +DescriptionStart: +Sets text color of given control when control is selected. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetActiveColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlSetActiveColor color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetAutoScrollDelay +//KeywordEnd// +DescriptionStart: +Sets number of second before auto-scroll starts. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetAutoScrollDelay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetAutoScrollDelay delay +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetAutoScrollRewind +//KeywordEnd// +DescriptionStart: +Defines if scroll should rewind when auto-scroll reach end. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetAutoScrollRewind +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetAutoScrollRewind delay +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetAutoScrollSpeed +//KeywordEnd// +DescriptionStart: +Sets number of second required to scroll to next line. If speed smaller than 0,auto-scroll is disabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetAutoScrollSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetAutoScrollSpeed speed +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetBackgroundColor +//KeywordEnd// +DescriptionStart: +Sets background color of given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetBackgroundColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlSetBackgroundColor color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetChecked +//KeywordEnd// +DescriptionStart: +Sets checked state of checkbox (CT_CHECKBOXES, Type 7). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetChecked +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetChecked bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetEventHandler +//KeywordEnd// +DescriptionStart: +Sets given event handler of given control. +The provided function should return true/false indicating that the event has handled this event fully or not and whether the engine should execute it's default code or not afterwards. +See User Interface Event Handlers for the full list of handler names. +If applicable, see DIK_KeyCodes for a list of key code constants, which are relevant to key related user interface events like: KeyDown KeyUp. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetEventHandler [handlerName, function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +The article User Interface Event Handlers contains a list of event handler names. +Be aware though, that the preceding "on" in the listed names must be eliminated when used with the ctrlSetEventHandler command. +e.g. instead of $Code$ _control ctrlSetEventHandler [" OnLBSelChanged ", ""]; // WRONG $/Code$ +use +$Code$ _control ctrlSetEventHandler [" LBSelChanged ", ""]; // RIGHT $/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFade +//KeywordEnd// +DescriptionStart: +Sets wanted transparency for control animation. Requires ctrlCommit to commit changes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFade +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFade fade +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 10, 2015) +This command sets the amount of fade. For example: +$Code$ +_ctrl ctrlSetFade 1; // hides the control +_ctrl ctrlSetFade 0.5; // control is 50% visible +_ctrl ctrlSetFade 0; // control is fully visible +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFocus +//KeywordEnd// +DescriptionStart: +Set the input focus on given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFocus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlSetFocus controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFont +//KeywordEnd// +DescriptionStart: +Sets the font of given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFont +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFont fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH1 +//KeywordEnd// +DescriptionStart: +Sets H1 font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH1 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH1 fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH1B +//KeywordEnd// +DescriptionStart: +Sets H1 bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH1B +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH1B fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH2 +//KeywordEnd// +DescriptionStart: +Sets H2 font of given HTML control +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH2 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH2 fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH2B +//KeywordEnd// +DescriptionStart: +Sets H2 bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH2B +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH2B fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH3 +//KeywordEnd// +DescriptionStart: +Sets H3 font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH3 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH3 fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH3B +//KeywordEnd// +DescriptionStart: +Sets H3 bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH3B +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH3B fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH4 +//KeywordEnd// +DescriptionStart: +Sets H4 font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH4 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH4 fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH4B +//KeywordEnd// +DescriptionStart: +Sets H4 bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH4B +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH4B fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH5 +//KeywordEnd// +DescriptionStart: +Sets H5 font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH5 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH5 fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH5B +//KeywordEnd// +DescriptionStart: +Sets H5 bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH5B +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH5B fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH6 +//KeywordEnd// +DescriptionStart: +Sets H6 font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH6 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH6 fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontH6B +//KeywordEnd// +DescriptionStart: +Sets H6 bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontH6B +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontH6B fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeight +//KeywordEnd// +DescriptionStart: +Sets the font size of given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeight height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeightH1 +//KeywordEnd// +DescriptionStart: +Sets H1 font size of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeightH1 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeightH1 height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeightH2 +//KeywordEnd// +DescriptionStart: +Sets H2 font size of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeightH2 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeightH2 height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeightH3 +//KeywordEnd// +DescriptionStart: +Sets H3 font size of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeightH3 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeightH3 height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeightH4 +//KeywordEnd// +DescriptionStart: +Sets H3 font size of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeightH4 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeightH4 height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeightH5 +//KeywordEnd// +DescriptionStart: +Sets H5 font size of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeightH5 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeightH5 height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontHeightH6 +//KeywordEnd// +DescriptionStart: +Sets H6 font size of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontHeightH6 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontHeightH6 height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontP +//KeywordEnd// +DescriptionStart: +Sets P font of given HTML control or its size. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontP +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetFontP fontOrSize +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetFontPB +//KeywordEnd// +DescriptionStart: +Sets P bold font of given HTML control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetFontPB +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetFontPB fontName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetForegroundColor +//KeywordEnd// +DescriptionStart: +Sets foreground color of given control. Color is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetForegroundColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetForegroundColor color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetModel +//KeywordEnd// +DescriptionStart: +Sets model for 3D Dialog Control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetModel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetModel model +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetModelDirAndUp +//KeywordEnd// +DescriptionStart: +Sets orientation of 3D control model. It is similar to setVectorDirAndUp command for an object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetModelDirAndUp +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetModelDirAndUp [dir, up] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetModelScale +//KeywordEnd// +DescriptionStart: +Sets 3D control model scale +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetModelScale +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetModelScale scale +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetPosition +//KeywordEnd// +DescriptionStart: +Sets wanted position and size for 2D control animation. Width and height are optional. ctrlCommit is required to complete the operation. For 3D control, param is relative [x,y,z] and no ctrlCommit is required as it cannot be animated. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +controlName ctrlSetPosition [x, y] +%NextRawSyntax% +controlName ctrlSetPosition [x, y, w, h] +%NextRawSyntax% +controlName ctrlSetPosition [x, y, z] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 27, 2007) +IMPORTANT +You have to use ctrlCommit command to apply this effect(Arma v1.02.5103GER) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetScale +//KeywordEnd// +DescriptionStart: +Sets wanted scale for control animation. Top left corner remains same. This command requires ctrlCommit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetScale +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetScale scale +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetStructuredText +//KeywordEnd// +DescriptionStart: +Set the structured text which will be displayed in structured text control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetStructuredText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetStructuredText structuredText +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetText +//KeywordEnd// +DescriptionStart: +Set the text of a control of the currently active user dialog or display. This command can be used for: static texts, buttons, edit lines and active texts as well as for images, where you can use it to set the image path. +Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlSetText [idc, text] +%NextRawSyntax% +controlName ctrlSetText text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(16 Nov, 2011) +For ArmA2 textured "shortcut" buttons (type = 16), you must use the alternative syntax. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetTextColor +//KeywordEnd// +DescriptionStart: +Sets text color of given control. Color is in format Color. As of Arma 3 v1.40 this command could also be used to change fill colour or the DialogControls-ProgressBar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetTextColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlSetTextColor color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 10, 2015) +When used on a RscProgress control, remove the configured "texture" first. The two will affect each other. - Arma 3 v1.42 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetTooltip +//KeywordEnd// +DescriptionStart: +Sets tooltip text of given control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetTooltip +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control ctrlSetTooltip text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetTooltipColorBox +//KeywordEnd// +DescriptionStart: +Sets tooltip border color of given control. Color is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetTooltipColorBox +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlSetTooltipColorBox color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetTooltipColorShade +//KeywordEnd// +DescriptionStart: +Sets tooltip background color of given control. Color is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetTooltipColorShade +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlSetTooltipColorShade color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlSetTooltipColorText +//KeywordEnd// +DescriptionStart: +Sets tooltip text color of given control. Color is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlSetTooltipColorText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display ctrlSetTooltipColorText color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlShow +//KeywordEnd// +DescriptionStart: +Set if a control of the currently active user dialog is shown or not. +Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlShow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlShow [idc, show] +%NextRawSyntax% +controlName ctrlShow show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlShown +//KeywordEnd// +DescriptionStart: +Returns whether given control is shown. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlShown +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlShown controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlText +//KeywordEnd// +DescriptionStart: +Returns the text of a control of the currently active user dialog. This command can be used on static texts, buttons, edit lines and active texts as well as for images, where it returns the image path. +Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlText idc +%NextRawSyntax% +ctrlText controlName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlTextHeight +//KeywordEnd// +DescriptionStart: +Returns the control text height. Supported control types are: +CT_STATIC 0 +CT_EDIT 2 ( Since Arma 3 v1.57.135040 ) +CT_STRUCTURED_TEXT 13 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlTextHeight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlTextHeight control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlType +//KeywordEnd// +DescriptionStart: +Returns number representing the type of control, which is also defined by type property in config. For more information see Dialog Control +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlType control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ctrlVisible +//KeywordEnd// +DescriptionStart: +Returns if a control of the currently active user dialog is shown or not. Read Dialog Control for more information about user dialogs and controls. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ctrlVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ctrlVisible idc +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorAddons +//KeywordEnd// +DescriptionStart: +Returns list of addons allowed to given curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorAddons curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorCamera +//KeywordEnd// +DescriptionStart: +Returns curator camera object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorCamera +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorCameraArea +//KeywordEnd// +DescriptionStart: +Returns all curator camera areas. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorCameraArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorCameraArea curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorCameraAreaCeiling +//KeywordEnd// +DescriptionStart: +Returns ceiling height for curator camera. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorCameraAreaCeiling +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorCameraAreaCeiling curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorCoef +//KeywordEnd// +DescriptionStart: +Returns current coeficient setting. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorCoef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj curatorCoef action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorEditableObjects +//KeywordEnd// +DescriptionStart: +Returns all editable objects which belong to a curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorEditableObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorEditableObjects curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorEditingArea +//KeywordEnd// +DescriptionStart: +Returns all curator editing areas. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorEditingArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorEditingArea curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorEditingAreaType +//KeywordEnd// +DescriptionStart: +Returns type of edit areas assigned to curator (blacklist/whitelist). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorEditingAreaType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorEditingAreaType obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorMouseOver +//KeywordEnd// +DescriptionStart: +Returns Curator Editable Object under curator mouse pointer in form of array: +[] - when not in curator mode +[""] - if no curator editable object under the pointer in curator mode +[ typeName, Curator Editable Object ] - if there is curator editable object under the pointer in curator mode +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorMouseOver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorMouseOver +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorPoints +//KeywordEnd// +DescriptionStart: +Returns number of points that curator have. Points can be only in range from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorPoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorPoints curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorRegisteredObjects +//KeywordEnd// +DescriptionStart: +Returns array with all objects that has curator registered and their settings. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorRegisteredObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorRegisteredObjects curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorSelected +//KeywordEnd// +DescriptionStart: +Returns list of all curator selected items. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorSelected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorSelected +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +curatorWaypointCost +//KeywordEnd// +DescriptionStart: +Return current price for placing waypoints (curator specific). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/curatorWaypointCost +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorWaypointCost curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +current3DENOperation +//KeywordEnd// +DescriptionStart: +Returns the currently performed editing operation in Eden Editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/current3DENOperation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +current3DENOperation +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentChannel +//KeywordEnd// +DescriptionStart: +Returns currently selected user chat channel on the UI (selected with and in MP). Correspondence between channel and number: +0 = Global +1 = Side +2 = Command +3 = Group +4 = Vehicle +5 = Direct +6-15 = Custom Radio (see radioChannelCreate ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentChannel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentChannel +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentCommand +//KeywordEnd// +DescriptionStart: +Return the current command type (empty string when no command) for the commander of given vehicle (or for a given soldier). Value returned can be one of: +"WAIT", "ATTACK", "HIDE", "MOVE", "HEAL", "REPAIR", "REFUEL", "REARM", "SUPPORT", "JOIN", "GET IN", "FIRE", "GET OUT", "STOP", "EXPECT", "ACTION", "ATTACKFIRE", +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentCommand +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentCommand vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentMagazine +//KeywordEnd// +DescriptionStart: +Returns class name of currently loaded vehicle's magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentMagazine vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 4, 2010) +See notes of currentWeapon. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentMagazineDetail +//KeywordEnd// +DescriptionStart: +Returns description of vehicle's currently loaded magazine, its ammo count (current/default) and its id. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentMagazineDetail +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentMagazineDetail vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentMagazineDetailTurret +//KeywordEnd// +DescriptionStart: +Returns the class name of currently used magazine on specified turret. Use turret path [-1] for driver's turret. Note that a turret is not loaded until unit enters it, so this command will return "". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentMagazineDetailTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle currentMagazineDetailTurret [turret path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentMagazineTurret +//KeywordEnd// +DescriptionStart: +Returns the name of the type of the currently using magazine on specified turret. Use turret path [-1] for driver's turret. Note that a turret is not loaded until unit enters it, so this command will return "". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentMagazineTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle currentMagazineTurret [turret path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentMuzzle +//KeywordEnd// +DescriptionStart: +Returns current muzzle of unit's weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentMuzzle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentMuzzle gunner +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 13, 2014) +The return value is not always STRING. As of Arma 3 v1.36, this command returns 0 (NUMBER) for vehicles. +E.g. when inside a vehicle: +currentMuzzle vehicle player +- 0 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentNamespace +//KeywordEnd// +DescriptionStart: +Returns current global namespace the script runs in. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentNamespace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentNamespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentTask +//KeywordEnd// +DescriptionStart: +Return current task of given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentTask person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentTasks +//KeywordEnd// +DescriptionStart: +List all uncompleted tasks. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentTasks +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentTasks member +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentThrowable +//KeywordEnd// +DescriptionStart: +Returns currently selected throwable, which will be launched if user presses "G". +Please note: The weapon/magazine id system is W.I.P. and may change without notice. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentThrowable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentThrowable player +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentVisionMode +//KeywordEnd// +DescriptionStart: +Returns current vision mode of unit's weapon. +0 - daytime +1 - night vision +2 - FLIR +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentVisionMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentVisionMode unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentWaypoint +//KeywordEnd// +DescriptionStart: +Return the index of the current waypoint. +To determine the validity of the index, compare it to the waypoints count. +If all waypoints are 'completed', then the index is 1 greater than the last valid index. +If there are no waypoints, then the index is 0. +By default, a group has 1 waypoint at their starting position, which is considered completed and so the currentWaypoint is 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentWaypoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentWaypoint groupName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentWeapon +//KeywordEnd// +DescriptionStart: +Return the name of the currently selected weapon (on the primary turret for vehicles). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentWeapon vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 15, 2009) +You have to make a little delay (sleep 0.001; (not less)) to use this command, else you will be returned an empty string. +%NextNote% +(July 15, 2009) +It seems it's not working in 1.02 for other unit than player. +%NextNote% +(May 4, 2010) +This works for vehicles providing there is a gunner +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentWeaponMode +//KeywordEnd// +DescriptionStart: +Returns current weapon mode of unit's weapon. Result can be: "Single", "Burst", "FullAuto", "manual", "player" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentWeaponMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentWeaponMode gunner +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 27, 2014) +- Be careful using this in script. This function returns these strings but also: +- 0 if unit is in a vehicle (pax), +- absolutely nothing if AH-99 helo driver or all weapons removed, +- "truckhorn2" if Hunter driver... +Absolutely nothing means: if you use a hint to display the returned value, you obtain absolutely no text,no black box, no error! Hint isn't displayed and there is no error in rpt file with compile preprocessFileLineNumbers. +On the other hand, returned value 0 when unit is pax of a vehicle, could lead to a variable error type if your script is waiting for a string. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentWeaponTurret +//KeywordEnd// +DescriptionStart: +Returns the name of the currently selected weapon on specified turret. Use turret path [-1] for driver's turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentWeaponTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle currentWeaponTurret [turret path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +currentZeroing +//KeywordEnd// +DescriptionStart: +Returns zeroing of unit's weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/currentZeroing +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +currentZeroing gunner +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cursorObject +//KeywordEnd// +DescriptionStart: +Returns the object under cursor. This command is quite different from cursorTarget as it is more precise in determining the boundaries of the pointed at object and can detect a larger variety of objects including map objects and trees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cursorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cursorObject +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cursorTarget +//KeywordEnd// +DescriptionStart: +Returns the target pointed at by the player (usually with cross-hairs). The target has to be known to the player to some degree ( knowsAbout 0). If target is completely unknown, command returns objNull. +A valid target could belong to an enemy or a friendly side. Buildings are normally known to player and so are valid targets. Try nearTargets to see what else is considered a target. While friendly targets are usually known to the player, enemy targets can be totally unknown, especially if "auto-spotting" (or sometimes called "auto-reporting") is switched off. To check if auto-spotting is enabled: difficultyEnabled "autospot" +cursorTarget also returns locked target for the duration of the lock even if there is another target under the cursor. As soon as missile is fired, cursorTarget switches to current known target under cursor or objNull. Targeting (currently "T" in Arma 3) works regardless of the state of "auto-spotting". +Adding a target to the known list could be done with reveal command. When auto-spotting is enabled, zooming on the enemy target with cross-hairs usually reveals the target. As friendly targets are always known, zooming on friendly target could improve knowsAbout value. +Side relations can also influence target knowledge. For example east target is unknown target for civilian, but making them friends with setFriend instantly improves civilian knowledge of the east. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cursorTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cursorTarget +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(01:25, 18 February 2011 (CET)) +If the player is in a vehicle and a lockable weapon is selected and a target is locked, the locked target will be returned, regardless if it's in sight or not. +%NextNote% +(11 March 2011) +Addition to Myke's note: +It also works for infantry with launchers that canLock, like Javelin or AA. +Only the lock cursor must be visible on the target - not a full lock necessarily. +%NextNote% +(13:09, 11 July 2009 (CEST)) +Player must knows about what he is pointing to for this command to return something other than NULL-OBJECT +This command doesn't work through building windows +This recognition doesn't work with every object : soldiers, vehicles, big houses are ok, but not trees, plants, road signs or others little things +%NextNote% +(22:11, 23 August 2013 (CEST)) +To add to Lou Montana's note, use reveal command on the object you want to be detected with cursorTarget when pointing at it. Without it, distant units are most likely to return objNull even if you shoot and hit them. Units that have been previously subjected to enableSimulation false; or enableSimulationGlobal false; may stay unrecognised for a long time even after simulation was re-enabled, returning objNull as cursorTarget. Force revealing units with reveal command usually solves the problem. For example: $Code${ player reveal _x} forEach allUnits ;$/Code$ +%NextNote% +(December 3, 2014) +cursorTarget seems to change when your cursor enters an object's boundingBox. Because of this, if the player is inside the boundingBox, the object will always be the current cursorTarget if the player is not looking at another object, although sometimes the object will remain the cursorTarget even if the player does. +%NextNote% +(April 21, 2015) +Cursortarget will not return enemy units, even very close, if "autoreport" is disabled in game difficulty settings, and if player is alone. +However, when enemy units open fire on player, the cursortarget becomes functional on these units. If player is in a group, cursortarget is also functional (report by other units). +%NextNote% +(February 5, 2016) +CursorTarget will return a Null_Object for all of thus which have a disabled simulation (_object enableSimulation false). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +customChat +//KeywordEnd// +DescriptionStart: +Sends the chat message to the custom radio channel. The radio channel needs to be created on the server before hand, with radioChannelCreate command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/customChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit customChat [channel, message] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +customRadio +//KeywordEnd// +DescriptionStart: +Sends the message to the custom radio channel. The message is defined in the description.ext file or radio protocol. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/customRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit customRadio [channel, message] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cutFadeOut +//KeywordEnd// +DescriptionStart: +Terminates the effect in the given layer by fading it out according to the given duration. If maned layer used and it doesn't exist, it will be allocated. +For greater efficiency and ease of modability it is recommended to use named layers available with alternative syntax since Arma 3 v1.57.134673 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cutFadeOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +layer cutFadeOut duration +%NextRawSyntax% +layerName cutFadeOut duration +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cutObj +//KeywordEnd// +DescriptionStart: +Displays an object defined in the global config in CfgTitles. +For greater efficiency and ease of modability it is recommended to use named layers available with alternative syntax since Arma 3 v1.57.134673 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cutObj +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cutObj [class, type, speed, showOnMap] +%NextRawSyntax% +layer cutObj [class, type, speed, showOnMap] +%NextRawSyntax% +layerName cutObj [class, type, speed, showOnMap] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cutRsc +//KeywordEnd// +DescriptionStart: +Display a resource defined in RscTitles of the mission's Description.ext, the campaign's description.ext or the global config. +For greater efficiency and ease of modability it is recommended to use named layers available with alternative syntax since Arma 3 v1.57.134673 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cutRsc +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cutRsc [class, type, speed, showOnMap] +%NextRawSyntax% +layer cutRsc [class, type, speed, showOnMap] +%NextRawSyntax% +layerName cutRsc [class, type, speed, showOnMap] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(30 Jun, 2008) +Using cutRsc (instead of titleRsc ) for a HUD has the benefits of: +having the HUD automatically hide itself when you access the map and redisplay itself after closing the map. +using the 'Direct communication' chat channel messages will not interfere with the HUD by hiding it. +%NextNote% +(17 Oct, 2013) +Regarding removing current resource with cutRsc ["Default", "PLAIN"]. If it does't work and it gives you error message that "Default" is not found, add it by yourself to RscTitles in description.ext so it looks like this: +class RscTitles + +class Default + +idd = - 1 ; +fadein = 0 ; +fadeout = 0 ; +duration = 0 ; +; +; +Alternatively, you can use cutText, yes cutText command to cancel your resources. As Karel Moricky explains: "All 'cut' commands are in the same layer, the same as all 'title' commands are in another one." So to remove cutRsc resource execute cutText on the same layer: +$Code$ cutRsc ["myRsc", "PLAIN"]; //show +cutText ["", "PLAIN"]; //remove$/Code$ +$Code$10 cutRsc ["myRsc", "PLAIN"]; //show +10 cutText ["", "PLAIN"]; //remove$/Code$ +Also if you use layers would be a good idea to register them with BIS_fnc_rscLayer to avoid possible clashes with other layers: +$Code$("myLayerName" call BIS_fnc_rscLayer ) cutRsc ["myRsc","PLAIN"]; //show +("myLayerName" call BIS_fnc_rscLayer ) cutText ["","PLAIN"]; //remove$/Code$ +You can also immediately remove resource with cutFadeOut command: $Code$123 cutFadeOut 0;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +cutText +//KeywordEnd// +DescriptionStart: +Displays a text message in the center of the screen. The text can be displayed on multiple lines by using "\n" new line characters: cutText ["line1\nline2\nline3", "PLAIN"]; +For greater efficiency and ease of modability it is recommended to use named layers available with alternative syntax since Arma 3 v1.57.134673 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/cutText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +cutText [text, type, speed, showOnMap] +%NextRawSyntax% +layer cutText [text, type, speed, showOnMap] +%NextRawSyntax% +layerName cutText [text, type, speed, showOnMap] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(September 20, 2013) +In Arma 3 "PLAIN" param will display your text where the crosshair is, "PLAIN DOWN" will push the text further down, closer to the bottom of the screen. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +damage +//KeywordEnd// +DescriptionStart: +Return the damage value of an object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/damage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +damage object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(February 13, 2015) +The returned value depends on the couple target/ammo fired. This value has no correlation with the sum of all hitpoints damage status and the effective status of the object. Firing bullets on cars often lead to weird results. For example: damage returns zero while a Hunter is fired at will with an.50 HMG! Hunter can be almost destroyed with zero damage for this function. If you script, use instead the getHitPointDamage function. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +date +//KeywordEnd// +DescriptionStart: +Return the actual mission date and time as an array [ year, month, day, hour, minute ]$/Code$. Month is a full number between 1 and 12, day is between 1 and 31, hour is between 0 and 23 and minute is between 0 and 59. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/date +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +date +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +dateToNumber +//KeywordEnd// +DescriptionStart: +Convert a date to a float number, based on Jan 1st 00:00:00 = 0 and Dec 31st 23:59:59 = 1. The same day and time in leap year will be different after 28th of February and 23:59 on 31st of December will be 1.00274 +This is how this command works. The 365 days of the year are presented in range 0...1. So each day will be: +1 / 365 = 0.00273973 +In a leap year there are 366 days, so the range will increase by 1 day: +1 / 365 * 366 = 1.00274 +In short, in a normal year the command returns in range 0...1 in a leap year it will return in range 0...1.00274 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/dateToNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +dateToNumber date +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +daytime +//KeywordEnd// +DescriptionStart: +Returns the current ingame time in hours. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/daytime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +daytime +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 23, 2014) +To change daytime To 24 hour format with hours, minutes, and seconds use this: +$Code$// daytime = 1.66046 +_hour = floor daytime ; +_minute = floor (( daytime - _hour) * 60); +_second = floor ((((( daytime ) - (_hour))*60) - _minute)*60); +_time24 = text format ["%1:%2:%3",_hour,_minute,_second]; +//_time24 = 1:39:37$/Code$ +Note: Not perfect method, "12:03:06" will display as "12:3:6", more script needed to remove this. Other methods might exist for basic functionality. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deActivateKey +//KeywordEnd// +DescriptionStart: +Deactivates the given keyname for the current user profile. The keys are used to unlock missions or campaigns. +See keys, keysLimit and doneKeys in the description.ext file of the missions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deActivateKey +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deActivateKey keyname +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +debriefingText +//KeywordEnd// +DescriptionStart: +Returns debriefing text. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/debriefingText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +debriefingText end +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +debugFSM +//KeywordEnd// +DescriptionStart: +Dump (something about FSM) to debugging output. This command is (assumed to be) non-functional in the retail version. +Non functional in retail +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/debugFSM +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +FSMhandle debugFSM true +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +debugLog +//KeywordEnd// +DescriptionStart: +Dump argument type and value to debugging output. +This command is non-functional in the retail version +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/debugLog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +debugLog anything +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +default +//KeywordEnd// +DescriptionStart: +Description: +See switch do. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/default +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +deg +//KeywordEnd// +DescriptionStart: +Convert a number from Radians to Degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deg +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deg x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +delete3DENEntities +//KeywordEnd// +DescriptionStart: +Delete given entities in Eden Editor, including anything that can be placed in editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/delete3DENEntities +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +delete3DENEntities entities +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteAt +//KeywordEnd// +DescriptionStart: +Removes array element at the given index and returns removed element (modifies the original array, just like resize or set ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteAt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array deleteAt index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 15, 2014) +$Code$_array deleteAt 0$/Code$ is almost 60x faster than $Code$_array = _array - [_array select 0]$/Code$ (Tested with an array of 10.000 strings, iterating through it using a for-from-to-do loop) +%NextNote% +(May 21, 2015) +Array "shift" implementation using deleteAt, alternative to BIS_fnc_arrayShift +$Code$KK_fnc_shift = { +_this deleteAt 0 +}; +// Example +arr = [1,2,3]; +arr call KK_fnc_shift; //return of function is 1, arr now is [2,3]$/Code$ +%NextNote% +(May 21, 2015) +Array "pop" implementation using deleteAt, alternative to BIS_fnc_arrayPop +$Code$KK_fnc_pop = { +_this deleteAt ( count _this - 1) +}; +// Example +arr = [1,2,3]; +arr call KK_fnc_pop; //return of function is 3, arr now is [1,2]$/Code$ +%NextNote% +(March 4, 2016) +Deleting from an array with foreach and _foreachIndex variable is tricky. The array is being altered, the _foreachIndex won't keep up and other elements in the array will be skipped and in worst case not being deleted. +If you delete elements from an array in descending order (using while or for) it will work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteCenter +//KeywordEnd// +DescriptionStart: +In a nutshell, this command removes gaming Side (see createCenter ). If a side has 0 Groups it cannot be deleted. Center can only be created for: east, west, resistance, civilian and sideLogic, therefore only centers from the mentioned sides can be deleted. +Old description: Destroys the AI center of the given side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteCenter +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteCenter side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteCollection +//KeywordEnd// +DescriptionStart: +Delete a collection. As example, used with a soldier, it'll hide the ingame model. +When targetting ArmA 2 1.06 or newer, use hideObject instead. This function is a relic from dynamic building destruction development. It is left only for compatibility with scripts created before ArmA 2 1.06, and its functionality may be changed or removed in the future. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteCollection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteCollection object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 20, 2014) +In Arma 3 deleteCollection is alias for hideObject +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteEditorObject +//KeywordEnd// +DescriptionStart: +Delete the editor object. Requires all editor object links to be removed prior. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteEditorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map deleteEditorObject object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteGroup +//KeywordEnd// +DescriptionStart: +Destroys the given group. Group must be empty and local to the machine executing command. +NOTE: In Arma 3 you can find out locality of the group with local command, unlike with previous games. However owner and setOwner dont work with groups anywhere. The group will always be local to the client that created it, until the client disconnects, then the group becomes local to the server. +In Arma 3 when last unit leaves a group, the group gets auto deleted. Manually deleting all units from a group however, does not auto delete the empty group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteGroup +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteGroup group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(December 17, 2006) +The deleteGroup Command does not work when there are living members of in the group. It doesn't error, it simply doesn't do anything. +%NextNote% +(07:50, 10 July 2007 (CEST)) +Living or not doesn't matter - you can't delete the group while it contains any units - even dead ones. It takes few seconds until a dead unit is automatically removed from its group. +%NextNote% +(September 12, 2013) +deleteGroup will only delete local groups even if called by server. Say we have a situation where client creates a group and puts a unit there and later unit dies\gets deleted, server will not be able to delete that empty group until client leaves the game and group ownership switches to server +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteIdentity +//KeywordEnd// +DescriptionStart: +Delete an identity (created with saveIdentity ) from the campaign's progress file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteIdentity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteIdentity identityName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteLocation +//KeywordEnd// +DescriptionStart: +Delete a location. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteLocation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteLocation location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteMarker +//KeywordEnd// +DescriptionStart: +Destroys the given marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteMarker +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteMarker name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteMarkerLocal +//KeywordEnd// +DescriptionStart: +Destroys the given marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteMarkerLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteMarkerLocal markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(7 January, 2012) +Unproven: I believe that if you use this command on a globally-created marker, and subsequently another machine executes a global command on the same marker (e.g. setMarkerPos), then the marker will be re-created on the machine it was previously deleted on. Can result in confusing marker behaviour. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteRange +//KeywordEnd// +DescriptionStart: +Removes a range of array elements from the given array (modifies the original array, just like resize or set ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteRange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array deleteRange [from, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteResources +//KeywordEnd// +DescriptionStart: +Delete (unregister) resources of the team member. Resources are deleted in the order they were added. Case insensitive. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteResources +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember deleteResources [resource1, resource2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteSite +//KeywordEnd// +DescriptionStart: +Removes the site. +This command is considered deprecated and is no longer supported +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteSite +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteSite site +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteStatus +//KeywordEnd// +DescriptionStart: +Delete a status (created with saveStatus ) from the campaign's progress file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteStatus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteStatus statusName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteTeam +//KeywordEnd// +DescriptionStart: +Destroy given team. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteTeam team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteVehicle +//KeywordEnd// +DescriptionStart: +Deletes an object. +Only units inserted in the mission editor and units created during the game's progress can be deleted by this command. Island objects and player units cannot be removed. +Deleting a vehicle, which is still being accessed by a running script, can result in a CTD. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteVehicle object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteVehicleCrew +//KeywordEnd// +DescriptionStart: +Deletes a member of the crew of a vehicle. Human players cannot be deleted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteVehicleCrew +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle deleteVehicleCrew unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(August 31, 2014) +Not quite sure of the exact use of this command. You can delete AI pilot for example with $Code$ deleteVehicle driver heli;$/Code$ but co-pilot will then jump out. If you use $Code$heli deleteVehicleCrew driver heli;$/Code$ co-pilot stays. +%NextNote% +(April 10, 2015) +Using the following code will remove ALL crew from the given vehicle. +$Code${_myvehicle deleteVehicleCrew _x} forEach crew _myvehicle;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +deleteWaypoint +//KeywordEnd// +DescriptionStart: +Removes the specified waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/deleteWaypoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +deleteWaypoint [group, index] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(1 Feb, 2008) +In order to change the behavior of a unit currently following a string of waypoints, it is not enough to use deleteWaypoint. The path of the unit is calculated by the waypoints present at start, and the unit will continue according to the original waypoints even if you delete them by using this command. +To achieve the wanted effect, you should rather use setWPPos to the units current position (thereby stopping the unit), and (after a small delay) use deleteWaypoint to remove the waypoints. +%NextNote% +(15 Nov, 2008) +Another (more foolproof) method to avoid the problem of non-deleteable waypoints is to introduce another group (createGroup) and join all units of the present group. A new group will start without any preset waypoints so you can start setting new WPs all over again. +Old group is "_combatGroup", new group is "_combatGroup2" +$Code$_combatGroup2 = createGroup EAST; +{[_x] joinSilent _combatGroup2} forEach ( units _combatGroup); +_combatGroup2 addWaypoint [ getPos player, 25];$/Code$ +%NextNote% +(January 04, 2011) +When you want to remove all waypoints, do NOT iterate over waypoints _group while trying to delete them (an array is by reference!). Instead use an approach like this: +$Code$ +while {( count ( waypoints _group)) 0} do +{ +deleteWaypoint (( waypoints _group) select 0); +};$/Code$ +%NextNote% +(13 Mar, 2012) +You can also remove all waypoints with +$Code$ deleteWaypoint [_group, all];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +detach +//KeywordEnd// +DescriptionStart: +Detaches previously attached with attachTo object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/detach +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +detach object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +detectedMines +//KeywordEnd// +DescriptionStart: +Returns an array of all mines detected by a given side +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/detectedMines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +detectedMines side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_activeMissionFSMs +//KeywordEnd// +DescriptionStart: +Returns array with active Mission FSMs. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_activeMissionFSMs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_activeMissionFSMs +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_activeSQFScripts +//KeywordEnd// +DescriptionStart: +Returns an array with active SQFs. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_activeSQFScripts +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_activeSQFScripts +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_activeSQSScripts +//KeywordEnd// +DescriptionStart: +Returns array with active SQSs. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_activeSQSScripts +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_activeSQSScripts +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_captureFrame +//KeywordEnd// +DescriptionStart: +This command starts counting frames from the moment it is executed and when the count reaches the number passed as param, the current frame is captured and captured data UI dialog appears, similar to diag_captureSlowFrame. +Note : Only available in specific builds. See Performance Profiling for details. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_captureFrame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_captureFrame frame +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_captureSlowFrame +//KeywordEnd// +DescriptionStart: +Opens "capture frame" dialog if current frame exceeds set threshold in seconds. One can indicate to either capture duration of a specific profiling selection or the total duration of the frame. The selection names can be obtained by expanding the profiling tree. Clicking on a tree item will highlight the item on the graph and vice versa. The GUI also provides method of copying of the displayed data to clipboard. Some of the selections: +Render +- bgD3D +Main Thread +- total +- memAl +Visualize +- visul +Mjob +- Mjob +Note : Only available in specific builds. See Performance Profiling for details. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_captureSlowFrame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_captureSlowFrame [section, threshold] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_codePerformance +//KeywordEnd// +DescriptionStart: +Attempts to run given code with given arguments given number of cycles in unscheduled environment and returns average time it took to run the code as well as actual number of executions performed. The command will return as soon as possible if the tested code is slow and the duration of the command exceeds 1 second. Engine alternative to BIS_fnc_codePerformance +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_codePerformance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_codePerformance [code, arguments, cycles] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_fps +//KeywordEnd// +DescriptionStart: +Returns average framerate calculated over last 16 frames. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_fps +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_fps +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 19, 2014) +The engine will always calculate the last 16 frames without caring if they are frames in which the loading screen was drawn, or actual mission frames. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_fpsMin +//KeywordEnd// +DescriptionStart: +Returns minimal framerate. Calculated from the longest frame over last 16 frames. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_fpsMin +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_fpsMin +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_frameNo +//KeywordEnd// +DescriptionStart: +Returns number of frame currently displayed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_frameNo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_frameNo +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 19, 2014) +Avoid using hard-coded frame-specific events, the total amount of drawn frames is persistent across all missions. It does not get reset until the game is closed. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_log +//KeywordEnd// +DescriptionStart: +Dumps the argument's value to the report file. Each call creates a new line in the file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_log +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_log anything +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +ARMA2 crashes when diag_log is fed more than 1019 characters. diag_log might also crash ARMA2 when fed with less characters in some cases. +Note: This issue has been fixed in patch 1.04 +%NextNote% +To dump a string without "" use text. +%NextNote% +in patch 1.59 there is a limit of 1044 characters to be printed, no error or crash but diag_log line will simply end at character number 1044. +%NextNote% +For convenience and easy debugging use my free debug_console extension which will automatically launch a console window with your output. It can also write to file. To install drop debug_console.dll into main Arma directory. +Examples: +$Code$"debug_console" callExtension "Default grey"; //default output +"debug_console" callExtension "Red line without timestamp #1000"; //red with timestamp +"debug_console" callExtension "Yellow line with timestamp #1101"; //yellow without timestamp +"debug_console" callExtension "Writing to file ~0001"; //output to file +"debug_console" callExtension ""; //empty line +"debug_console" callExtension "A"; //beep sound +"debug_console" callExtension "C"; //clear console +"debug_console" callExtension "X"; //close console$/Code$ +Direct Download: http://killzonekid.com/pub/debug_console_v3.0.zip +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_logSlowFrame +//KeywordEnd// +DescriptionStart: +Log all frames, where section takes longer than the threshold (in seconds). +Note : Only available in specific builds. See Performance Profiling for details. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_logSlowFrame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_logSlowFrame [section, threshold] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diag_tickTime +//KeywordEnd// +DescriptionStart: +Real time spent from the start of the game. Expressed in fractions of second. Resolution of 1 tick is 1 ms. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diag_tickTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +diag_tickTime +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(8 Sept, 2010) +In Arma 2 Operation Arrowhead 1.54.0.72888 this returns the time in seconds since the game was started. +%NextNote% +(25 Jan, 2014) +This command will return time since last client restart as float. However because of Number format used in Arma, the more time has past since restart the less precise the returned value will be. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +dialog +//KeywordEnd// +DescriptionStart: +Tests whether any user dialog is open. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/dialog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +dialog +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +diarySubjectExists +//KeywordEnd// +DescriptionStart: +Checks whether given subject is present in the diary of given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/diarySubjectExists +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person diarySubjectExists name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +didJIP +//KeywordEnd// +DescriptionStart: +Checks if the current client Joined In Progress. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/didJIP +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +didJIP +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 23, 2016) +reports false in CfgFunctions with preInit = 1; even when the client joined in progress. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +didJIPOwner +//KeywordEnd// +DescriptionStart: +Checks if the current owner of supplied Object Joined In Progress. Server execution only. On clients returns false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/didJIPOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +didJIPOwner object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +difficulty +//KeywordEnd// +DescriptionStart: +Returns high-level selected difficulty mode. +Returned value will be: 0 (Recruit), 1 (Regular), 2 (Veteran) or 3 (Elite) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/difficulty +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +difficulty +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +difficultyEnabled +//KeywordEnd// +DescriptionStart: +This command is deprecated since Arma 3 1.58. Since this version it always returns false. Use difficultyOption instead. See Arma 3 Difficulty Overhaul for further details. +Former functionality: +Checks specific difficulty settings of the current user. Difficulty flag names can be found in the ArmA profile file under class Difficulties/xxx/Flags (xxx being regular or veteran). +Note: stress damage for some reason is a separate difficulty so difficultyEnabled "stressDamageEnabled" might not return correct set value. There are however 2 dedicated commands for it: +enableStressDamage +isStressDamageEnabled +Note: auto trim is also for some reason a separate difficulty so difficultyEnabled "autoTrimEnabled" might not return correct set value. There are also 2 dedicated commands for it: +enableAutoTrimRTD +isAutoTrimOnRTD +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/difficultyEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +difficultyEnabled flagName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 29, 2015) +Arma 3 Flags: +3rdPersonView +armor +autoAim +autoGuideAT +autoSpot +autoTrimEnabled +cameraShake +clockIndicator +deathMessages +enemyTag +extendetInfoType +friendlyTag +hud +hudGroupInfo +hudPerm +hudWp +hudWpPerm +map +mineTag +netStats +roughLanding +stanceIndicator +stressDamageEnabled +unlimitedSaves +vonID +weaponCursor +windEnabled +%NextNote% +Possible Values for Arma 2: +3rdPersonView +armor +autoSpot +autoGuideAT +autoAim +allowSeagull +clockIndicator +deathMessages +enemyTag +friendlyTag +hud +hudPerm +hudWp +hudWpPerm +map +netStats +suppressPlayer +tracers +realisticFatigue +ultraAI +unlimitedSaves +weaponCursor +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +difficultyEnabledRTD +//KeywordEnd// +DescriptionStart: +Returns true if rotorlib simulation is enabled. Forcing by mission is included +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/difficultyEnabledRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +difficultyEnabledRTD +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +difficultyOption +//KeywordEnd// +DescriptionStart: +Checks specific difficulty settings of the current user. Difficulty flag names can be found in the CfgDifficultyPresets config class or in +ArmA profile file under class DifficultyPresets/xxx/Options (xxx being Recruit, Regular or Veteran). +This command replaces difficultyEnabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/difficultyOption +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +difficultyOption optionName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 23, 2016) +Arma 3 options: +reducedDamage +groupIndicators +friendlyTags +enemyTags +detectedMines +commands +waypoints +weaponInfo +stanceIndicator +staminaBar +weaponCrosshair +visionAid +thirdPersonView +cameraShake +scoreTable +deathMessages +vonID +mapContent +autoReport +multipleSaves +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +direction +//KeywordEnd// +DescriptionStart: +Returns the direction an object or a location is facing (differs from getDir in that this also works with locations). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/direction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +direction object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +directSay +//KeywordEnd// +DescriptionStart: +Sends the message to the direct channel. The message is defined in the description.ext file, radio protocol, or a kbAddTopic. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/directSay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit directSay radioName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableAI +//KeywordEnd// +DescriptionStart: +Disable parts of the AI behaviour to get a better control over the actions of a unit. Must be executed where AI unit is local. If unit changes locality, it might need to be executed again at the new locality to maintain effect. +Possible values are: +"TARGET" - stop the unit to watch the assigned target / group commander may not assign targets +"AUTOTARGET" - prevent the unit from assigning a target independently and watching unknown objects / no automatic target selection +"MOVE" - disable the AI's movement / do not move +"ANIM" - disable ability of AI to change animation. Available only since ArmA: Cold War Assault (OFP 1.99). +"TEAMSWITCH" - AI disabled because of Team Switch +"FSM" - disable the execution of AI behavior scripts. Available only since Operation Arrowhead v1.60. +"AIMINGERROR" - prevents AI's aiming from being distracted by its shooting, moving, turning, reloading, hit, injury, fatigue, suppression or concealed/lost target Available only since Arma 3 v1.42. +"SUPPRESSION" - prevents AI from being suppressed Available only since Arma 3 v1.42. +"CHECKVISIBLE" - disables visibility raycasts Available only since Arma 3 v1.54. +"COVER" - disables usage of cover positions by the AI Available only since Arma 3 v1.56. +"AUTOCOMBAT" - disables autonomous switching to COMBAT when in danger Available only since Arma 3 v1.56. +Note: All effects of disableAI command are cancelled after mission save or load. +Note: In OFP is no way to undo this command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableAI +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName disableAI section +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(26.9.2013) +After substantial testing in ArmA3 1.01, the AI sections are as follows: +MOVE: disabling this will stop units from turning and moving. Units will still change stance and fire at the enemy if the enemy happens to walk right in front of the barrel. Unit will watch enemies that are in their line of sight, but won't turn their bodies to face the enemy, only their head. Works for grouped units as well. Good for staging units and holding them completely still. Movement can't be controlled by a script either, you have to re-enable movement for that. Unit will still be able to aim within his cone of fire. +AUTOTARGET: Essentially makes single units without a group, "deaf". The unit still goes prone and combat ready if he hears gunfire. They won't turn around when gunfire comes from the behind, but if an enemy walks in front they will target the enemy and fire as normal. WON'T WORK FOR GROUPED UNITS WITH A LEADER, the leader will assign targets to the units and effectively enables the AI back on. +TARGET: Will prevent units from engaging the target. Units still move around for cover etc...but won't hunt down the player. Works in groups as well. Excellent for keeping units inside bases or other areas without having them flank or engage anyone. They will still seek good cover if something is close by. +ANIM: completely freezes the unit, including breathing. Won't even blink. No move command works until the unit is unfrozen. +FSM: Essentially makes the enemy "dumber". Enemies react slower to enemy fire and the enemy stops using hand signals. Disabling FSM, can give the impression of untrained units as they react slower and are more disorganized than when FSM is enabled. Good for rebel fighters and when enabled better for professional armies. +%NextNote% +(August 3, 2006) +Notes from before the conversion: +The "TARGET" section of the AI is likely different than what you would think. Normally, when an AI group is standing still and sees an enemy, the group will break formation and start moving towards the enemy. If you disable the "TARGET" AI, then the AI units will stay where they are at. Even if you disable the "MOVE" AI, the units will still move out to attack the enemy, unless you disable the "TARGET" AI. Disabling both these AI sections is useful when placing units in defensive positions. This way, you can have them stay behind their cover, and not run out into the open. +This command has also a bug: after mission save or load the effect will be no longer active and you must set it again. It's also good way to detect number of saves and loads (loads can be recognized using time command). +%NextNote% +(Feb 7, 2009) +Multiplayer Use as of ArmA v1.14: +Contrary to the post above, using this command WILL disable A.I. movement ability if used with the "MOVE" parameter. Works even when the A.I. is grouped with other units. I use this command to set up stationary targets at objectives all the time. Works on a dedicated server. +%NextNote% +(September 19, 2015) +Beware that disabling "TARGET" AI to units in the player's group will disable the ability to execute engage orders issued by the player. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableCollisionWith +//KeywordEnd// +DescriptionStart: +Disable collision between vehicles. This commmand doesn't disable collision between PhysX objects. +! +Command has to be executed where objects are local, and as long as they don't change locality, the effect of this command will be global. +If the 2 objects are not local to the same computer, then it has to be executed on both computers to achieve the desired effect. +If one or both objects change locality, the command needs to be executed again on the new owner 's machine(s) to maintain the effect. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableCollisionWith +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle disableCollisionWith vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(April 4, 2015) +disableCollisionWith is basically a script that when you apply it to an object, and your unit can go through it like a ghost. However, if you wish the object to be solid again, you may wish to use the enableCollisionWith. +An example for this is: +$Code$//name of unit in editor such as player1 +//name of object in editor such as barrel1 +barrel1 disableCollisionWith player1; +//to make the barrel solid again, do this as vice versa if you know what your doing! +barrel1 enableCollisionWith player1 $/Code$ +On a side note: this can come in handy a lot if you want a unit to sit on the back of a car or on top of a container +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableConversation +//KeywordEnd// +DescriptionStart: +Disable the ability to talk to other people. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableConversation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName disableConversation disable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 10, 2009) +Note that this will also prevent you from using group radio. +If you just want player unable to speak to others (or one particular soldier), +use $Code$player setVariable ["BIS_noCoreConversations", true];$/Code$ +or, for the other soldier, +$Code$unitName setVariable ["BIS_noCoreConversations", true];$/Code$ +%NextNote% +(August 18, 2010) +My previous note is incorrect now, you can use disableConversation and still use the group radio, at least in A2:OA ! +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableDebriefingStats +//KeywordEnd// +DescriptionStart: +Disable debrifing score table. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableDebriefingStats +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +disableDebriefingStats +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableNVGEquipment +//KeywordEnd// +DescriptionStart: +Enables or disables transport NV (Night Vision). To disable TI (Thermal Imaging) use disableTIEquipment. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableNVGEquipment +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle disableNVGEquipment state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableRemoteSensors +//KeywordEnd// +DescriptionStart: +This command will halt raycasting calculations (on the local machine only) for all groups which don't contain any local entities. If a group contains a single local entity then calculations will still be performed for the entire group. +These raycasts are used to determine what other entities an entity can see, and they take a lot of CPU time. This is of course a bit of a trick, because rather than a true optimization, it disables part of the simulation. However, there are certainly types of scenarios where these raycasts are not needed. An example is a fully Player-versus-Player scenario, where the visibility between every combination of player entity is not needed. So why not disable this by default? There are cases where you do require these raycasts, for example in stealth scenarios. Without them, commands like knowsAbout, nearTargets and targetKnowledge will only function for local units! The commands themselves are local, can be used on servers and clients, and the state is reset when the scenario ends. So, carefully consider whether your scenario can benefit from this method. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableRemoteSensors +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +disableRemoteSensors state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableSerialization +//KeywordEnd// +DescriptionStart: +Disable saving of script containing this command. After this script can work with the data types which do not support serialization (UI types). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableSerialization +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +disableSerialization +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(19 June, 2010) +Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside. +_loaded = [] spawn { disableSerialization ; waitUntil { false };}; +waitUntil { scriptDone _loaded;}; +hint "Game was loaded!" +Works for all possible load types - loading user save, loading autosave and resuming mission from main menu. +Use with caution, as it handles two threads in memory, having impact at overall scripting time. +%NextNote% +(23 October, 2013) +If you do not store UI elements ( Display, Control ) in variables, you do not need disableSerialization ; UI elements are usually returned by scripting commands such as findDisplay or passed as params in UI event handler scripts ( displayAddEventHandler, ctrlAddEventHandler ). +This code will require disableSerialization : $Code$ disableSerialization ; +_display = findDisplay 123; +_ctrl = _display displayCtrl -1; +_ctrl ctrlSetText "LOL";$/Code$ +This code will not: $Code$ findDisplay 123 displayCtrl -1 ctrlSetText "LOL";$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableTIEquipment +//KeywordEnd// +DescriptionStart: +Disables TI (Thermal Imaging) equipment for given vehicle. In older versions of Arma this command would also disable NV (Night Vision), but since Arma 3 v1.52.132676 this command disables only TI. Use disableNVGEquipment to disable NV. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableTIEquipment +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle disableTIEquipment state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableUAVConnectability +//KeywordEnd// +DescriptionStart: +Disables unit's AV terminal(s) connecting to UAV. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableUAVConnectability +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object disableUAVConnectability [uav, checkAllItems] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +disableUserInput +//KeywordEnd// +DescriptionStart: +Disable and enable the keyboard and mouse input, usually used during cutscenes. +Be careful with the usage of this command, always remember to enable the user input again, as once the user input is disabled, you can only shut down OFP but not exit the mission with escape. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/disableUserInput +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +disableUserInput state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(14 March 2014) +Sometimes, when disableUserInput true command is invoked while the user is holding a button, when disableUserInput false is called and the user is no longer holding the button, the input will resume as if the user is still holding the button. To reset this behaviour, disable and enable user input again in the same frame: +$Code$ disableUserInput true ; +//do something +disableUserInput false ; +disableUserInput true ; +disableUserInput false ;$/Code$ +Unfortunately, if the user is moving mouse when disableUserInput true command is invoked, the mouse input will get stuck for the whole duration of disabled user input but will reset as soon as disableUserInput false is called. I was unable to find workaround for this one. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displayAddEventHandler +//KeywordEnd// +DescriptionStart: +Adds an event handler to the given display. Returns the ID of the event handler, or -1 when failed. +Returning true in EH code will override default engine handling for keyboard events. +See User Interface Event Handlers for the full list of event names. +If applicable, see DIK_KeyCodes for a list of key code constants, which are relevant to key related user interface events like: KeyDown KeyUp. +NOTE: Display EHs are processed in reversed order, i.e. last added: first, first added: last. So if you have an override it should be set up in the 1st added EH. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displayAddEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display displayAddEventHandler [eventName, code] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 30, 2013) +As of Arma 3 v1.05.111658 ctrlAddEventHandler and displayAddEventHandler support script Code in addition to String [1] +%NextNote% +(March 10, 2014) +From within an Addon, you must assign the events from a spawned script. eg $Code$[] spawn { (findDisplay 46) displayAddEventHandler["KeyDown","_this call my_KeyDownFunctionhandler"]; };$/Code$ +%NextNote% +(April 20, 2015) +If you have a file in which there are variables defined that provide the key that triggers the eventHandler or variables that need to be passed onto the function called by the eventHandler if the if condition inside returns true, use this: +$Code$_myCuteLittleEvent = (findDisplay 46) displayAddEventHandler ["KeyDown", " +_keyDown = _this select 1; +if (_keyDown == " + str (_key) + ") then { [" + str _arguments + "] call fnc_myFunction }; +false; +"];$/Code$ +where _key is a var containing the DIK keycode for the key you want to use and where _arguments is a variable that contains stuff that needs to be passed onto fnc_myFunction. +%NextNote% +(January 22, 2016) +Be sure to wait until the main display is initialized before using this command by using: $Code$waituntil {!isnull (finddisplay 46)};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displayCtrl +//KeywordEnd// +DescriptionStart: +Return child control with specified idc. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displayCtrl +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display displayCtrl idc +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displayNull +//KeywordEnd// +DescriptionStart: +A non-existing Display. To compare non-existent displays use isNull or isEqualTo : +displayNull == displayNull ; // false +isNull displayNull ; // true +displayNull isEqualTo displayNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displayNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +displayNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displayParent +//KeywordEnd// +DescriptionStart: +Returns parent display of the given display. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displayParent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +displayParent display +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displayRemoveAllEventHandlers +//KeywordEnd// +DescriptionStart: +Remove all even handlers from the given display. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displayRemoveAllEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display displayRemoveAllEventHandlers handlerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displayRemoveEventHandler +//KeywordEnd// +DescriptionStart: +Remove a given event handler from the given display. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displayRemoveEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display displayRemoveEventHandler [handler name,id] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 19, 2015) +If you for example used this code to add the eventHandler: +$Code$_myEH = (findDisplay 46) displayAddEventHandler ["KeyDown", "hint str _this"];$/Code$ +Then this would be the correct code to remove that eventHandler again: +$Code$(findDisplay 46) displayRemoveEventHandler ["KeyDown", _myEH];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +displaySetEventHandler +//KeywordEnd// +DescriptionStart: +Sets given event handler of given display. +The return code of the provided function should indicate whether this event was handled correctly. This implies telling the engine whether it's default code should be executed. +See User Interface Event Handlers for the full list of handler names. +If applicable, see DIK_KeyCodes for a list of key code constants, which are relevant to key related user interface events like: KeyDown KeyUp. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/displaySetEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +display displaySetEventHandler [handlerName, function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Nov 25, 2009) +Always use displayAddEventHandler instead, as DSetEH overwrites other (peoples') DEH. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +dissolveTeam +//KeywordEnd// +DescriptionStart: +Dissolves the given team. All members become members of the main team. Possible team values are: "RED", "GREEN", "BLUE" or "YELLOW". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/dissolveTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +dissolveTeam teamColor +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +distance +//KeywordEnd// +DescriptionStart: +Returns a distance in meters between Objects, Positions or Locations. +NOTE: If positions are supplied as arguments, the coordinates are treated as PositionATL if over the land and as PositionASLW if over the sea. If 2D position is supplied, z is assumed 0. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/distance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +param1 distance param2 +%NextRawSyntax% +location1 distance location2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(Feb 14, 2007) +distance to position3D (array) doesnt work with OFP, only objects +Armed Assault: +position3D (array) and object works +%NextNote% +(Mar 10, 2010) +This returns the map distance, not the vector distance, [0,0,0] distance [0,0,1] can be 1 or 1, not exactly 1; unlike the vector math. +%NextNote% +(Aug 03, 2012) +If a position in format [x, y, z] is provided for both arguments, distance also checks the z dimension as well. Ie: +player distance [0,0,200] +will return 200, if the player is at this position at ground/sea level. +%NextNote% +(March 22, 2014) +When objects are supplied as arguments, distance is calculated from their model center (object modelToWorld [0,0,0]), and not the position returned by getPos/ATL/ASL. +However, this is not relevant for units, as their model center matches their world position. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +distance2D +//KeywordEnd// +DescriptionStart: +Returns a 2D distance ( distance projected to X,Y plane) in meters between two Objects or two Positions or Object and Position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/distance2D +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +param1 distance2D param2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +distanceSqr +//KeywordEnd// +DescriptionStart: +Computes the squared distance between two objects or positions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/distanceSqr +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +var1 distanceSqr var2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +distributionRegion +//KeywordEnd// +DescriptionStart: +Returns the numerical index for the distribution region of this copy of ArmA. +1 - US +2 - Rest of the world +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/distributionRegion +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +distributionRegion +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +do +//KeywordEnd// +DescriptionStart: +Description: +Executes code. Used as part of construct, such as while, with, for and switch. The code is always executed in missionNamespace. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/do +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +do3DENAction +//KeywordEnd// +DescriptionStart: +Performs given Eden Editor action. +See the list of all actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/do3DENAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +do3DENAction action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doArtilleryFire +//KeywordEnd// +DescriptionStart: +Orders a unit to reload defined magazine commence fire burst on the given position (silently). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doArtilleryFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit doArtilleryFire [position, type, rounds] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doFire +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to fire on the given target (without radio messages). +The target is set with doTarget or commandTarget. +The target can be a unit or a vehicle, but not an object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName doFire target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +It is often helpful to use doTarget first. +%NextNote% +(March 25, 2007) +A unit will not execute this command when his behaviour is set to "careless". +%NextNote% +(Feb 18, 2012) +Board dofire not working in arma2 1.11. an entity he throws he shoots not only. +%NextNote% +(June 7, 2012) +Unitname dofire objnull does not work like it does in commandfire. Target var has to be real (Arma2 AO) might be different in other versions. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doFollow +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to follow the given other unit or vehicle eg (without radio messages). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doFollow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName doFollow unitName2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +These commands ( doFollow or commandFollow ) work only if the two units are in the same group. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doFSM +//KeywordEnd// +DescriptionStart: +Orders a unit to process command defined by FSM file (silently). +Unlike with execFSM where _this is passed to the FSM, the following parameters are passed when using doFSM/commandFSM: +_leader +leader of subgroup with this command +_destination +command destination/position +_target +command target +_units +list of all persons in subgroup +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doFSM +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit doFSM [fsmName, position, target] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2010) +Do not doStop a unit in a FSM called with doFSM or commandFSM. Doing so nevertheless will halt your FSM, since no links are followed anymore (doing so in an end state should be fine though). Also this may crash your game in certain mysterious circumstances. +You may design your FSM so that they may be called with doFSM/commandFSM and execFSM likewise by checking if _units or _this is nil and then init the variables accordingly. Just remember that you should use the low level moveTo (together with moveToCompleted, moveToFailed ) if do-/commandFSM'd, and doMove or commandMove (together with unitReady ) if execFSM'd. A moveTo in an FSM started with execFSM won't do anything, likewise doMove in a FSM started with doFSM or commandFSM wont work either. Think about it for a minute and you will see why. (hint: a unit running a FSM called with doFSM or commandFSM will _never_ return true for (unitReady _unit) ) +Anyway, if you want to be able to call your FSM either way, a "ready" condition might look light this: (moveToCompleted _unit) || (moveToFailed _unit) || (unitReady _unit), assuming you have a moveTo or a doMove (depending on how the fsm is called) in the prior state. +%NextNote% +(February 14, 2015) +Adding to Rübe's note, doFSM can be checked if it has finished by unitReady as of 2015 and it will return true when your FSM has completed. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doGetOut +//KeywordEnd// +DescriptionStart: +Orders a unit or units to get out from the vehicle (silently). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doGetOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +doGetOut unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doMove +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to move to the given position (without radio messages). After reaching his destination, the unit will immediately return to formation (if in a group); or order his group to form around his new position (if a group leader). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doMove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit doMove position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(February 9, 2008) +If doMove is to be used in conjunction with waypoint behavior commands (e.g. setSpeedMode ), then those have to be issued after the move command to have an effect. Otherwise the move will be done with the default settings. +%NextNote% +(February 3, 2009) +If a unit is part of a group, and is not the leader, the unit will fall back into formation soon after the domove is completed. This does not happen for units that are in a group alone (because they are their own leader). +There is no single command to get a unit to move to a position and stay there. The best way to do this is to issue a domove, then wait for the unit to reach his destination, then disable his movement AI. VBS2 users can use the fn_vbs_doMoveEx function. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doorPhase +//KeywordEnd// +DescriptionStart: +Return animation phase of door on vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doorPhase +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object doorPhase door +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doStop +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to stop (without radio messages). DoStop'ed units leave the groups formation. It will prevent the unit from moving around with their group (or formation leader), while still beeing able to turn around and even move to a new position if they see fit. They will still respond to orders from their group leader (like engage, rearm, board a vehicle), but all of their actions will be separate from the group formation +. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doStop +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +doStop unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +This command will make the unit stop where he is until the unit's group engages the enemy. At that time, the unit will move and fight the enemy. One good use for this is to place a bunch of units in the same group around a campfire or in some other place "for looks", and make them sit down or have their weapon on their back. When the enemy is spotted, they will get up and attack. Note that you cannot do something like place somebody behind sandbags and keep him there during a fight with this command. For that you will need disableAI "move". +%NextNote% +In ArmA 1.14, this command will not stop a unit that has been given a move order by selecting the unit, then clicking on the in game map (or ground). +%NextNote% +doStop'ed units WILL return to formation if their leader's behaviour isn't set to "COMBAT". The squad leader will also order everyone to return to formation if there are no enemies nearby in a set period of time, overwriting the doStop command. doStop can be best used to simply stop the unit from doing whatever he is currently doing without radio messages. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doTarget +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to target the given target (without radio messages). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit doTarget target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +It appears doTarget objNull can not be used to stop a unit targeting a previously assigned target. Using doWatch objNull will achieve the desired result. (ArmA v1.12Beta) +%NextNote% +(July 2, 2015) +To expand on ceeeb's note, commandWatch objNull will also unassign target; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +doWatch +//KeywordEnd// +DescriptionStart: +Order the given unit(s) to watch the given position or target (without radio messages). Use objNull as the target to order a unit to stop watching a position/target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/doWatch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit doWatch position +%NextRawSyntax% +unit doWatch target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(April 18, 2015) +Also controls where a vehicle gunner aims. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawArrow +//KeywordEnd// +DescriptionStart: +Draws a single line arrow on the map. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawArrow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawArrow [from, to, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 7, 2015) +Be careful when using this command. Unlike map markers, the draw commands can decrease your framerate. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawEllipse +//KeywordEnd// +DescriptionStart: +Draws an ellipse on the map. Just like with marker or trigger area, negative a and b will result in hexagon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawEllipse +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawEllipse [c, a, b, angle, color, fill] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 7, 2015) +Be careful when using this command. Unlike map markers, the draw commands can decrease your framerate. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawIcon +//KeywordEnd// +DescriptionStart: +Draw an icon on the map. The command needs to be called every frame, preferably with "Draw" control event handler ctrlAddEventHandler. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawIcon [texture, color, position, width, height, angle, text, shadow, textSize, font, align] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 03, 2013) +Support of paremeters textSize, font and align is in the game since Arma 3 version 0.72. +%NextNote% +(March 22, 2014) +icon will always remain the same width and height, if you want an icon scaled to the map, use: $Code$( sizeInMeters * 0.15) * 10^(abs log (ctrlMapScale _ctrl))$/Code$ for width and height (guessimated). +%NextNote% +(July 20, 2014) +If you want only text with no icon, you can use "#(argb,8,8,3)color(0,0,0,0)" as texture. +%NextNote% +(July 7, 2015) +Be careful when using this command. Unlike map markers, the draw commands can decrease your framerate. +%NextNote% +(January 4, 2016) +Arma 3 1.54 +This command doesn't seem to play nice with onEachFrame. It seems to draw on the main screen while maintaing position relative to the map position +Example: +$Code$ onEachFrame { +findDisplay 12 displayCtrl 51 drawIcon ['iconStaticMG',[1,0,0,1], getPos player,24,24, getDir player,'Player Vehicle',1,0.03,'TahomaB','right']; +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawIcon3D +//KeywordEnd// +DescriptionStart: +Draws an ingame icon at a given position. Command has to be executed each frame. Use onEachFrame or addMissionEventHandler "Draw3D" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawIcon3D +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +drawIcon3D [texture, color, pos, width, height, angle, text, shadow, textSize, font, textAlign, drawSideArrows] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 31, 2013) +As command syntax indicates, this command expects icon position in format PositionAGL meaning that over the land it expects PositionATL and over the sea PositionASLW. Use additional ASLToAGL if needed. +To draw smooth moving icon for a moving object use visiblePosition and visiblePositionASL accordingly. +%NextNote% +(September 23, 2013) +This command works well with addon textures, however getting it to display mission textures is a bit tricky. Follow this guide : +%NextNote% +(April 19, 2014) +Just a little precision to KK's first comment, this command expects PositionASLW over the sea, not regular ASL. Luckily, modelToWorld returns ATL over land and ASLW over sea, so if you want the icon to stay the the same place, you should use this snippet to find the correct position: +$Code$_pos = visiblePositionASL _object; +_pos set [2, (_object modelToWorld [0,0,0]) select 2];$/Code$ +%NextNote% +(October 23, 2014) +drawIcon3D and BIS_fnc_addStackedEventHandler work well together. +Using formatting commands with drawIcon3D will not work, instead, they will be added to the string. +$Code$["uniqueID", "onEachFrame", +{ +drawIcon3D["myIcon.jpg", [1,1,1,0.5], getPos player, 1, 1, 0, format["%1\n%2", "Dreaded", "Entity"]]; +}] call BIS_fnc_addStackedEventHandler;$/Code$ +Shown text will be Dreaded\nEntity. (A3 1.32.127785) +The "text" parameter must be a string. You cannot use Structured_Text. +$Code$["uniqueID", "onEachFrame", +{ +drawIcon3D +[ +"myIcon.jpg", +[1,1,1,0.5], +getPos player, +1, +1, +0, +parseText format[" t size='1.25' font='PuristaLight' color='#ff0000' %1%2 /t ", Dreaded, Entity] +]; +}] call BIS_fnc_addStackedEventHandler;$/Code$ +(A3 1.32.127785) +%NextNote% +(November 13 (2014)) +Here's a practical example combining both drawLine3D and drawIcon3D. Note: You may want to use visiblePosition instead of getPos for moving objects. +$Code$DEADPILOTS = []; +{ +if (getText (configfile "CfgVehicles" typeOf _x "textSingular") == "pilot") then { +DEADPILOTS pushBack _x; +}; +} forEach allDeadMen; +addMissionEventHandler ["Draw3D", { +if ( +{ +player distance _x = 15 +} count DEADPILOTS 0 +) then { +{ +_corpsePos = getPos _x; +if (player distance _corpsePos = 15) then { +_line1_start = _corpsePos; +_line1_end = [(_line1_start select 0), (_line1_start select 1), 0.5]; +_line2_start = [(_line1_end select 0), (_line1_end select 1) + 0.5, (_line1_end select 2)]; +drawLine3D [_line1_start, _line1_end, [0,0,0,0.5]]; +drawLine3D [_line1_end, _line2_start, [0,0,0,0.5]]; +drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\BasicLook_ca.paa", [0,0,0,0.5], _line2_start, 0.75, 0.75, 0]; +}; +} forEach DEADPILOTS; +}; +}]; +$/Code$ +%NextNote% +(April 11, 2015) +Doesn't work when showHUD false, textAlign is broken, drawSideArrows will turn if angle is not 0 [1] +%NextNote% +(February 11, 2016) +You can also use getPosWorld, which works splendid in script performance. Here is an example: +$Code$addMissionEventHandler ["Draw3D", { _pos = getPosWorld player; drawIcon3D ["a3\ui_f\data\gui\Rsc\RscDisplayArsenal\radio_ca.paa", [1,1,1,1], [(_pos select 0),(_pos select 1), 1], 0.8, 0.8, 0, (name player), 1, 0.0315, "EtelkaMonospacePro"]; }];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawLine +//KeywordEnd// +DescriptionStart: +Draw a line on the map. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawLine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawLine [position1, position2, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 22, 2014) +Map example: $Code$( findDisplay 12 displayCtrl 51) ctrlAddEventHandler ["Draw"," +( _this select 0) drawLine [ +getPos player, +[0,0,0], +[0,0,1,1] +]; +"];$/Code$ +Be careful when using this command. Unlike map markers, the draw commands can decrease your framerate. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawLine3D +//KeywordEnd// +DescriptionStart: +Draws a line of a given color between two 3D positions. Command has to be executed each frame. Use onEachFrame or addMissionEventHandler "Draw3D". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawLine3D +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +drawLine3D [start, end, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 31, 2013) +As command syntax indicates, this command expects starting and ending position in format PositionAGL meaning that over the land it expects PositionATL and over the sea PositionASLW. Use additional ASLToAGL and AGLToASL commands wherever is necessary. +$Code$ addMissionEventHandler ["Draw3D", { +drawLine3D [ ASLToAGL eyePos soldier1, ASLToAGL eyePos soldier2, [1,0,0,1]]; +}];$/Code$ +%NextNote% +(February 18, 2015) +Visible through fog and past draw distance. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawLink +//KeywordEnd// +DescriptionStart: +The editor will draw a line between the two specified editor objects. Line type can be LINE or ARROW. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawLink +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawLink [from,to,param type,line type,color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawLocation +//KeywordEnd// +DescriptionStart: +Unknown effect. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawLocation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control drawLocation location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawPolygon +//KeywordEnd// +DescriptionStart: +Draws given polygon on the given map control with given color. The polygon must consist of at least 3 points. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawPolygon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawPolygon [polygon, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drawRectangle +//KeywordEnd// +DescriptionStart: +Draws a rectangle on the map. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drawRectangle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map drawRectangle [c, a, b, angle, color, fill] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 22, 2014) +Map example: $Code$( findDisplay 12 displayCtrl 51) ctrlAddEventHandler ["Draw",{ +(_this select 0) drawRectangle [ +getPos player, +20, +20, +getDir player, +[0,0,1,1], +"" +]; +}];$/Code$ +Be careful when using this command. Unlike map markers, the draw commands can decrease your framerate. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +driver +//KeywordEnd// +DescriptionStart: +Returns the driver of a vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/driver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +driver vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 3, 2006) +Notes from before the conversion: +It is also possible to find the driver of a vehicle by placing a D after the name of the vehicle so Tank1D and driver Tank1 both refer to the same unit, providing the original driver has not got out of the tank. +The difference between the two is Tank1D is always the unit that was driver of the tank when the mission started, whilst driver Tank1 is the driver which is now there. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +drop +//KeywordEnd// +DescriptionStart: +Creates a particle effect. +This command is used to create smoke, fire and similar effects. +The particles are single polygons with single textures that always face the player. +They can be set to dynamically change their position, size, direction, can be set to different weights and more or less dependant on the wind. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/drop +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +drop array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +east +//KeywordEnd// +DescriptionStart: +Pre-defined variable for the eastern side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/east +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +east +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 17, 2007) +In ArmA terms OPFOR, BLUFOR, Independents and Civilians are used in the front end UI. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +echo +//KeywordEnd// +DescriptionStart: +Sends any text into the debugger console or the logfile. Present in internal version only, not working in the retail version. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/echo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +echo text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +edit3DENMissionAttributes +//KeywordEnd// +DescriptionStart: +Open a window with scenario attribute in given section. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/edit3DENMissionAttributes +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +edit3DENMissionAttributes section +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +editObject +//KeywordEnd// +DescriptionStart: +Show the edit object dialog for the given object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/editObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map editObject object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +editorSetEventHandler +//KeywordEnd// +DescriptionStart: +Sets given event handler of given editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/editorSetEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map editorSetEventHandler [handler name,function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +effectiveCommander +//KeywordEnd// +DescriptionStart: +Returns the effective commander of the vehicle. Effective commander is the player whom driver AI will listen to. So if in a tank there is a gunner and a commander and AI driver, if the effectiveCommander is gunner, then gunner pressing WASD will give AI orders to move. If gunner jumps out and then enters tank again, the effectiveCommander role most likely has changed to commander that remained in tank. Also the assignment seems to work on first come first served basis. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/effectiveCommander +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +effectiveCommander vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +else +//KeywordEnd// +DescriptionStart: +Description: +Executes else code when if condition returns false +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/else +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +emptyPositions +//KeywordEnd// +DescriptionStart: +Returns the number of given positions in the vehicle. +Positions can be "Commander", "Driver", "Gunner" or "Cargo" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/emptyPositions +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle emptyPositions position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableAI +//KeywordEnd// +DescriptionStart: +Enables parts of the AI behavior that was disabled by disableAI. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableAI +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit enableAI skilltype +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableAIFeature +//KeywordEnd// +DescriptionStart: +Enable/disable given AI feature. Feature may be one of: +"AwareFormationSoft", "CombatFormationSoft". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableAIFeature +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +feature enableAIFeature enabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableAttack +//KeywordEnd// +DescriptionStart: +Set if leader can issue attack commands to the soldiers in his group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableAttack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group enableAttack enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableCamShake +//KeywordEnd// +DescriptionStart: +Allows camera shake effects via addCamShake. If set to false, then a currently active shake effect will stop immediately. +By default, shake effects are enabled, but once they have been disabled by this command, they will have to be enabled first, in order to be visible. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableCamShake +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableCamShake value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableCaustics +//KeywordEnd// +DescriptionStart: +Enable/disable caustics drawing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableCaustics +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableCaustics bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableChannel +//KeywordEnd// +DescriptionStart: +Enables/disables UI functionality which is responsible for sending text or voice chat to the given chat channel. If the channel was disabled in description.ext, it can be enabled with this command, however the UI functionality changes will be local to the PC executing this command. What this command cannot do: +It cannot disable incoming text or voice +It cannot interrupt own client's transmission in progress +It cannot affect any Custom Radio channels, only channels 0-5 +It cannot persist, so if user is logged out, the changes are reset +It has no effect on chat related scripting commands, such as vehicleChat, globalChat, globalRadio, sideRadio, etc. +So in short, just like with getPlayerChannel, this command provides a nice ability to hack into chat UI with some limitations. And the reason why it is possible to disable entire channels (except Group) in description.ext, is because no one can talk or text, therefore no transmission is happening. NOTE: Group channel cannot be disabled, neither with enableChannel, nor with description.ext param. Channel / Number correspondence: +0 = Global +1 = Side +2 = Command +3 = Group +4 = Vehicle +5 = Direct +6-15 = Custom Radio (Is not supported by enableChannel ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableChannel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +channel enableChannel enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableCollisionWith +//KeywordEnd// +DescriptionStart: +Enable collision between vehicles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableCollisionWith +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle enableCollisionWith vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(April 5, 2015) +enableCollisionWith is a script that when you apply it to an object, it will be solid and the player will not be able to go through it. However, if you want your unit to go through it, you may want to use the disableCollisionWith command. An example for this is: +$Code$//name of unit in editor such as player1 +//name of object in editor such as car1 +car1 enableCollisionWith player1; +//to make your unit go through the car, use the below and make sure you know what your doing! +car1 disableCollisionWith player1; +$/Code$ +Both commands enableCollisionWith and disableCollisionWith, are very handy codes and could be used for example: map testing, mission editing and even animation cutscenes. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableCopilot +//KeywordEnd// +DescriptionStart: +Enables copilot actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableCopilot +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle enableCopilot enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(February 17, 2014) +Only enables the user actions, not who is in control - pilot can lock or unlock co-pilot controls in multiplayer while still true. +Actions: LockVehicleControl, UnlockVehicleControl, SuspendVehicleControl and TakeVehicleControl +You can use the Arma 3 Event Handler - ControlsShifted to detect Take and Release actions +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableDebriefingStats +//KeywordEnd// +DescriptionStart: +enable debrifing score table. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableDebriefingStats +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableDebriefingStats [left, top, width, height] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableDiagLegend +//KeywordEnd// +DescriptionStart: +Enable or disable the legend for diagnotic. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableDiagLegend +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableDiagLegend Bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableEndDialog +//KeywordEnd// +DescriptionStart: +Enables the execution of a custom camera sequence after the players death, coded in the script onPlayerKilled.sqs. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableEndDialog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableEndDialog +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableEngineArtillery +//KeywordEnd// +DescriptionStart: +Enable/disable the artillery engine. This allows the user to use the artillery computer on mortar/artillery, and for AI to use it for indirect fire. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableEngineArtillery +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableEngineArtillery enabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableEnvironment +//KeywordEnd// +DescriptionStart: +Enable/disable environmental effects (ambient life + sound). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableEnvironment +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableEnvironment enabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 October, 2013) +This command has to be executed after mission start to have an effect. So if you add this command in init.sqf make sure you wait until mission is running: +$Code$//init.sqf +waitUntil { time 0}; +enableEnvironment false ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableFatigue +//KeywordEnd// +DescriptionStart: +Enables/Disables the person's fatigue. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableFatigue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit enableFatigue enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(March 24, 2015) +When the player dies enableFatigue is set to true after the respawn +%NextNote% +(January 27, 2016) +To precise the note of Harmdhast, this command is not persistent (after respawn). So, in MP, you'll have to enableFatigue false, also in onPlayerRespawn.sqf or through the MP eventHandler MPRespawn. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableGunLights +//KeywordEnd// +DescriptionStart: +Force the AI to use gun lights +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableGunLights +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +thing enableGunLights value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(27 July, 2011) +This command can be used to force lights on, but not to force lights off. ( Source ) +%NextNote% +(17 April, 2013) +In order for this command to work in ARMA 3 you should use groupname enableGunLights "AUTO" or soldierOne enableGunLights "AUTO". Other options are "forceOn" or "forceOff". ( Source ) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableIRLasers +//KeywordEnd// +DescriptionStart: +Allows the AI to use IR lasers +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableIRLasers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +thing enableIRLasers value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableMimics +//KeywordEnd// +DescriptionStart: +Enables/disables mimics on a given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableMimics +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit enableMimics enabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enablePersonTurret +//KeywordEnd// +DescriptionStart: +Enables or disables firing from a vehicle cargo position. To get the turret path use assignedVehicleRole or getCargoIndex command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enablePersonTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle enablePersonTurret [turretPath, enable] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableRadio +//KeywordEnd// +DescriptionStart: +Enable and disable radio messages to be heard and shown in the left lower corner of the screen. This command can be helpful during cutscenes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableRadio state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(7 August, 2008) +This command doesn't disable text-chat in multiplayer. +%NextNote% +(11 September, 2008) +Does not affect VON. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableReload +//KeywordEnd// +DescriptionStart: +Enable / disable reload when magazine is empty. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableReload +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object enableReload enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableRopeAttach +//KeywordEnd// +DescriptionStart: +Enable/disable ability to attach or be attached to ropes for given vehicle +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableRopeAttach +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle enableRopeAttach enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(05 April, 2014) +Attachable nearby vehicles may not update on Sling Load Assistant until re-opened. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableSatNormalOnDetail +//KeywordEnd// +DescriptionStart: +Enables/Disables satellite normal map od detail maps. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableSatNormalOnDetail +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableSatNormalOnDetail state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableSaving +//KeywordEnd// +DescriptionStart: +Enable / disable saving of the game. +When disabled, the autosave is created (if not forbidden by save == false). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableSaving +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableSaving enable +%NextRawSyntax% +enableSaving [enable, save] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableSentences +//KeywordEnd// +DescriptionStart: +Enables radio transmissions to be heard and seen on screen. It does not affect KBTell conversations. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableSentences +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableSentences enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableSimulation +//KeywordEnd// +DescriptionStart: +Enable / disable simulation for given entity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableSimulation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entity enableSimulation state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(15 July, 2009) +enableSimulation will "freeze" the unit, including animations, eye blinking, etc ; you cannot switchMove or playMove. +the unit can still take damages and report status and enemies by radio. +%NextNote% +(19 July, 2011) +Nou/Jaynus have discovered something quite important about the Arma2 engine: +Orient yourself to the enableSimulation command in ARMA 2: +If simulation is disabled on objects (this enablesimulation false), they do not send updates across the network, drastically reducing traffic across the network by an order of magnitude. What this means in practicality is that it is possible to have huge mission maker created cities with no or negligible impact on mission performance. Mission placed objects is the most common cause of performance woes - so this is huge news, and was previously undocumented, both on the BIS wiki and elsewhere. +There are some quirks. +While an object which has enableSimulation false set on it will take damage, it will not display any animations or damage states until enableSimulation is enabled back onto it. If you want to disable simulation on a unit and then show it as dieing once it is hit or damaged, add an eventhandler onto it which enables simulation on the object when it is hit or killed. Hit handler for best visual, killed handler for best performance. +This discovery will be the basis of a new unit caching script by Jaynus. +This also has importance in a technical sense: bandwith is the most significant factor in mission performance. The lower the server bandwith, the better the performance. +%NextNote% +(9 Sept, 2011) +Objects with disabled simulation are not calculated for lightsources beyond the global light (moon/sun), so any light sources you create will not light them. +%NextNote% +(12 Nov, 2011) +Contrary to Krause's suggestions above, using "this enableSimulation False" on static objects has no effect on a dedicated server's bandwidth usage or FPS (as per current 1.59 Release version). +%NextNote% +(8 May, 2012) +re: Homer. +Yep. That's because this functionality is now part of the basic arma netcode. Pretty nice :) +%NextNote% +(October 3, 2014) +Units with disabled simulation will not be affected by gravity. +%NextNote% +(October 21, 2014) +Units that have been previously subjected to enableSimulation false; or enableSimulationGlobal false; may stay unrecognised for a long time even after simulation was re-enabled, returning objNull as cursorTarget. Force revealing units with reveal command usually solves the problem. For example: $Code${ player reveal _x} forEach allUnits ;$/Code$ +%NextNote% +(May 23, 2015) +After using enableSimulation false or enableSimulationGlobal false on an object, setPos will still update its position across the network in MP. +%NextNote% +(December 2, 2015) +After using enableSimulation false or enableSimulationGlobal false on a vehicle (car, helo), don't forget to re-enable simulation on this vehicle before a player jumps into it. Otherwise, he will be stick in it, with a black screen and no way to escape! +%NextNote% +(February 5, 2016) +cursorTarget returns a null_object for objects with disabled simulation. But you can find them with other commands such nearEntities. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableSimulationGlobal +//KeywordEnd// +DescriptionStart: +MP command. Enable or disable simulation for given entity, globally. Call this only from the server. In SP use enableSimulation +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableSimulationGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entity enableSimulationGlobal enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(October 21, 2014) +Units that have been previously subjected to enableSimulation false; or enableSimulationGlobal false; may stay unrecognised for a long time even after simulation was re-enabled, returning objNull as cursorTarget. Force revealing units with reveal command usually solves the problem. For example: $Code${ player reveal _x} forEach allUnits ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableStamina +//KeywordEnd// +DescriptionStart: +Enable/disable stamina system +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableStamina +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit enableStamina enabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableTeamSwitch +//KeywordEnd// +DescriptionStart: +Enable / disable Team Switch. The default setting is enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableTeamSwitch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enableTeamSwitch enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableUAVConnectability +//KeywordEnd// +DescriptionStart: +Enables unit's AV terminal(s) connecting to UAV. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableUAVConnectability +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object enableUAVConnectability [uav, checkAllItems] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enableUAVWaypoints +//KeywordEnd// +DescriptionStart: +Enables/disables the option for player to set waypoints for UAV in AV terminal. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enableUAVWaypoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uav enableUAVWaypoints enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +endLoadingScreen +//KeywordEnd// +DescriptionStart: +Finishes loading screen started by startLoadingScreen. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/endLoadingScreen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +endLoadingScreen +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +endMission +//KeywordEnd// +DescriptionStart: +Finish the mission. +The end type can be: +"CONTINUE" +"KILLED" +"LOSER" +"END1" +"END2" +"END3" +"END4" +"END5" +"END6" +Mission saves are deleted. Use failMission if they should not. +To maintain Arma 3 visual style, it's recommended to use BIS_fnc_endMission instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/endMission +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +endMission endType +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +engineOn +//KeywordEnd// +DescriptionStart: +Activates and deactivates the engine of a vehicle. This command has to be executed where vehicle is local. +NOTE: Executed on a remote vehicle this command may turn the engine on but then it will get turned off by itself after a short while. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/engineOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle engineOn state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 25, 2014) +To switch engine off can also use setFuel and fuel : +$Code$ private "_gas"; +_gas = fuel heli; +heli setFuel 0; +sleep 0.01; +heli setFuel _gas;$/Code$ +Also sets helicopter fuel back to original quantity. Works on every other vehicle. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enginesIsOnRTD +//KeywordEnd// +DescriptionStart: +Returns which engines are producing some work. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enginesIsOnRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enginesIsOnRTD RTD_helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enginesRpmRTD +//KeywordEnd// +DescriptionStart: +Returns all engines RPM +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enginesRpmRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enginesRpmRTD RTD_helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +enginesTorqueRTD +//KeywordEnd// +DescriptionStart: +Torque produced by engines in N·m (Newton*meter) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/enginesTorqueRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enginesTorqueRTD RTD_helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +entities +//KeywordEnd// +DescriptionStart: +Returns a list of all dead or alive entities with given type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/entities +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entities type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Mar 27, 2014) +In ArmA3 ver 1.14 type (string) can be any children class under configfile "CfgVehicles". e.g. $Code$ entities "All"; //or entities "CAManBase"; etc.$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +estimatedEndServerTime +//KeywordEnd// +DescriptionStart: +Estimated end of MP game in seconds converted to serverTime. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/estimatedEndServerTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +estimatedEndServerTime +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +estimatedTimeLeft +//KeywordEnd// +DescriptionStart: +Sets the estimated time left in the game. Using this function the designer can provide a "time left" estimate that is shown in the "Game in progress" screen or in the master browser. This command works in MP only and must be executed on the server only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/estimatedTimeLeft +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +estimatedTimeLeft seconds +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +evalObjectArgument +//KeywordEnd// +DescriptionStart: +Return argument in mission editor of a given object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/evalObjectArgument +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map evalObjectArgument [object, argument] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +everyBackpack +//KeywordEnd// +DescriptionStart: +Returns array of backpacks stored in given crate or vehicle. Used for accessing backpack content of a backpack on ground. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/everyBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +everyBackpack box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Apr 29, 2014) +(ArmA3 ver 1.16), here's a quick reference to backpack command family. +Command +Operand type +Return +Example +firstBackpack +Object (WeaponHolder, AmmoCrate, VehicleCrate) +Object (eg 2bba9d00# 163957: backpack_compact.p3d) +firstBackpack ( getPos player nearestObject "weaponholder") +backpackContainer +Unit( Object ) +Object (eg 2bba9d00# 163957: backpack_compact.p3d) +backpackContainer player //Currently same as unitBackpack +unitBackpack +Unit( Object ) +Object (eg 2bba9d00# 163957: backpack_compact.p3d) +unitBackpack player //Currently same as backpackContainer +backpack +Unit( Object ) +String (eg 2bba9d00# 163957: backpack_compact.p3d) +backpack player //See also ( typeOf backpackContainer player ) or ( typeOf unitBackpack player ) +backpackCargo +Object (WeaponHolder, AmmoCrate, VehicleCrate) +Array of String (eg ["Backpack0","Backpack1"]) +backpackCargo _AmmoCrate +getBackpackCargo +Object (WeaponHolder, AmmoCrate, VehicleCrate) +Array of Array (eg [["Backpack0","Backpack1"],[1,1]]) +getBackpackCargo _AmmoCrate +everyBackpack +Object (WeaponHolder, AmmoCrate, VehicleCrate) +Array of Object (eg [22504f00# 163960: backpack_fast.p3d...]) +everyBackpack _AmmoCrate +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +everyContainer +//KeywordEnd// +DescriptionStart: +Returns array of all containers (uniforms, vests, backpacks) stored in given crate or vehicle. Used for accessing containers content stored in ammo box or ground holder. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/everyContainer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +everyContainer box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +exec +//KeywordEnd// +DescriptionStart: +Execute a script using (the deprecated but still available).sqs syntax. The argument is passed to the script in the "_this" variable, and magic variable "_time" within the script contains the time in seconds that the script has been running. +Alternatively use execVM command in combination with.sqf syntax. +Learn more about scripts under Scripts. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/exec +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +argument exec script +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +execEditorScript +//KeywordEnd// +DescriptionStart: +Execute an editor script for the specified object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/execEditorScript +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map execEditorScript [object,script] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +execFSM +//KeywordEnd// +DescriptionStart: +Execute the scripted FSM. The FSM file is first searched in the mission folder, then in the campaign scripts folder and finally in the global scripts folder. +Argument(s) (if any) is/are passed as _this to the FSM. +Returns the FSM handle or 0 when failed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/execFSM +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +argument execFSM filename +%NextRawSyntax% +execFSM filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +execVM +//KeywordEnd// +DescriptionStart: +Compiles and adds SQF Script to the scheduler queue and returns script handle. The script is first searched for in the mission folder, then in the campaign scripts folder and finally in the global scripts folder. The script does not execute immediately upon running execVM command, but with some delay. How much delay is unknown as it largely depends on how many other scripts there are in the queue and how busy is VM. The optional argument is passed to the script in private variable _this. In Arma 3 the script handle is also passed to the script in _thisScript variable. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/execVM +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +argument execVM filename +%NextRawSyntax% +execVM filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 23, 2010) +Passing variables to the script file +To pass multiple variables to the script file, use an array e.g: +null = [myunit,1234] execVM "test.sqf"; +Now within test.sqf to access the elements, use the following: +_myunit = _this select 0; +_myvar = _this select 1; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +exit +//KeywordEnd// +DescriptionStart: +Stops the execution of a SQS script. +It's ignored in SQF Scripts. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/exit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +exit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +exitWith +//KeywordEnd// +DescriptionStart: +Exits current scope {...} it is executed from, creates new scope {...code...} and executes the given code in it. Often used for exiting do, for, count or forEach. Simply exiting waitUntil or onEachFrame scopes with exitWith will have no effect as these scopes are called repeatedly by the engine and require different handling to terminate (see Example 3). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/exitWith +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +if exitWith code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(May 28, 2010) +Since ArmA2 uses Blocks in FSM as any ordinary Handle like while, for etc. in Scripts, ExitWith also only closes the Block in the FSM. +%NextNote% +(August 04, 2013) +The command will exit the current scope - no ifs no buts. If the current scope is a loop, it will exit the loop. If the current scope is the main body of a script, it will exit the script. For more understanding of scopes and exitWith have a look at this resource. +%NextNote% +(January 06, 2014) +To further explain Killzone_Kid 's above statement, exitWith does not work as described within any subsequent inner scopes of a loop - it will only simply exit the current scope. For example, this code will not exit the while loop: +$Code$ while { true } do { // 'while' scope +if ( player == ( leader player )) then { // 'if-then' scope +if ( time (5 * 60)) exitWith {}; // This will only exit the 'if-then' scope +}; +sleep 1; +}; +hint "Mission Started"; // This code will never execute$/Code$ +%NextNote% +(March 10, 2016) +exitWith cannot be used in event handlers with override ability to simply exit with override value. The following is incorrect: +$Code$// INCORRECT USAGE +onMapSingleClick { if (! isServer ) exitWith { true }};$/Code$ +The override value must be returned in the main scope of EH, but since it is exited with exitWith, it never happens. The correct way in this case would be: +$Code$// CORRECT USAGE +onMapSingleClick { call { if (! isServer ) exitWith { true }}};$/Code$ +exitWith will exit current call scope only and override value therefore will appear in the main scope of the EH, right where we want it. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +exp +//KeywordEnd// +DescriptionStart: +Let x be a number, then exp (x) is equal to e to the power of x (or e^x) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/exp +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +exp x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Note that you cannot exponent a value greater than 88.72283554077147726999 (999 repeating), as this is beyond what the game can calculate. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +expectedDestination +//KeywordEnd// +DescriptionStart: +Return expected destination of unit as an array with format: [ Position, planningMode, forceReplan]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/expectedDestination +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +expectedDestination person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +(16:24, 3 March 2007 (CET)) +For AI units I have found the following values: planningMode is "LEADER PLANNED" when the unit is ordered by the group leader to go somewhere or if the unit is the group leader and it follows a waypoint. Otherwise planningMode it is "DoNotPlan". Units moving in formation have "DoNotPlan" as long as they don't receive orders by the group leader. Units also have "DoNotPlan" when they don't move. Units executing special formation tasks like engaging or return to formation have "FORMATION PLANNED" as long they haven't fulfilled the task. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +exportJIPMessages +//KeywordEnd// +DescriptionStart: +Export list of JIP to a file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/exportJIPMessages +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +exportJIPMessages fileName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +eyeDirection +//KeywordEnd// +DescriptionStart: +Returns the direction object is watching (eyes, or a vehicle primary observer). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/eyeDirection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +eyeDirection unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(May 26, 2014) +This command should have really been named headDirection instead of eyeDirection as one could mistakenly think that eyes direction of your avatar correspond to the direction of the centre of your screen. In fact the direction returned by eyeDirection is avatar's head direction relative to the torso (minus ambient head animation factor). Play with the script in example 1 to find out limitations. If you need centre of screen direction, use positionCameraToWorld instead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +eyePos +//KeywordEnd// +DescriptionStart: +Returns the object's eyes / main turret position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/eyePos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +eyePos object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +face +//KeywordEnd// +DescriptionStart: +Returns the face of a person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/face +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +face person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +faction +//KeywordEnd// +DescriptionStart: +Gets unit faction. Factions are defined under CfgFactionClasses. If the given faction is not defined, the command returns empty string. Standard Factions include: +Arma 2 : +West: "USMC", "CDF" +East: "RU", "INS" +Guer: "GUE" +Civ: "CIV", "CIV_RU" +Arma 2: Operation Arrowhead : +West: "BIS_US", "BIS_CZ", "BIS_GER" +East: "BIS_TK", "BIS_TK_INS" +Guer: "BIS_TK_GUE", "BIS_UN" +Civ: "BIS_TK_CIV", "BIS_CIV_special" +DLC Factions +Arma 2: British Armed Forces : +West: "BIS_BAF" +Arma 2: Private Military Company : +Guer: "PMC_BAF" +Arma 3 : +West: "BLU_F" (NATO), "BLU_G_F" (FIA) +East: "OPF_F" (CSAT), "OPF_G_F" (FIA) +Guer: "IND_F" (AAF), "IND_G_F" (FIA) +Civ: "CIV_F" (Civilians) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/faction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +faction unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +Faction behaves slightly differently to side. Side can refer to the pilot or commander of a vehicle, but faction never changes. It always returns the 'country of manufacture'. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fadeMusic +//KeywordEnd// +DescriptionStart: +Changes the music volume smoothly within the given time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fadeMusic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time fadeMusic volume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fadeRadio +//KeywordEnd// +DescriptionStart: +Causes a smooth change in the radio volume. The change duration is given by time, the target volume by volume. The default radio volume is 1.0. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fadeRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time fadeRadio volume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(September 11, 2008) +Does not affect VON +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fadeSound +//KeywordEnd// +DescriptionStart: +Changes the sound volume smoothly within the given time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fadeSound +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time fadeSound volume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(January 19, 2010) +This command doesn't work, in Arma 2 1.05. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fadeSpeech +//KeywordEnd// +DescriptionStart: +Cause a smooth change in the master speech volume. The change duration is given by time, the target volume by volume. The default master is 1.0. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fadeSpeech +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time fadeSpeech volume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +failMission +//KeywordEnd// +DescriptionStart: +Finish the mission. If the server is set to run persistent mission, failMission will not end the mission when last player gets kicked to the lobby. Use endMission to end the mission. +The end type can be: +"CONTINUE" +"KILLED" +"LOSER" +"END1" +"END2" +"END3" +"END4" +"END5" +"END6" +Mission saves won't be deleted. +To maintain Arma 3 visual style, it's recommended to use BIS_fnc_endMission instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/failMission +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +failMission endtype +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +false +//KeywordEnd// +DescriptionStart: +Always false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/false +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +false +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fillWeaponsFromPool +//KeywordEnd// +DescriptionStart: +Adds magazines from the campaign pool to the given unit, depending on his weapons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fillWeaponsFromPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fillWeaponsFromPool unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +find +//KeywordEnd// +DescriptionStart: +Searches for an array element within array or a string within a string. Returns the 0 based index on success or -1 if not found. Test is cASe-seNsItiVE +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/find +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array find x +%NextRawSyntax% +string find x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 4, 2015) +Using nil on either side of find will make the whole statement return Nothing : +$Code$_array = [1,2, nil,4,5]; +_result = _array find nil; +hintSilent str ( isNil "_result"); //true +_result = nil find 1; +hintSilent str ( isNil "_result"); //true$/Code$ +%NextNote% +(April 10, 2015) +Find doesn't work with multidimensional arrays in OFP/CWA. It will always returns -1. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +findCover +//KeywordEnd// +DescriptionStart: +Returns the object around where the unit finds cover. The minDist, visibilityPosition and ignoreObject parameters are optional. Command is not functional since Arma 2. +This command is not implemented +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/findCover +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object findCover [position, hidePosition, maxDist, minDist, visibilityPosition, ignoreObject] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(17 Oct, 2009) +Arma 2: v1.04: Usage creates report log message: " MicroAI: Command findCover not implemented ( unit id ) " +%NextNote% +(07 Jan, 2011) +OA: v1.57: Still non functional. +%NextNote% +(12 July, 2011) +CO: v1.59: Still non functional. +%NextNote% +(13 February, 2014) +Arma 3: Still non functional. +%NextNote% +(July 4, 2015) +An alternative function in ArmA 3 might be BIS_fnc_findSafePos +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +findDisplay +//KeywordEnd// +DescriptionStart: +Find display by its IDD (which is defined in the description.ext or config). +If the specified display can't be found displayNull ("No display") is returned, (which can be tested with the isNull command.) +The primary display uses IDD 46. (eg: findDisplay 46). This will return displayNull on a dedicated server (so be sure to check isDedicated if using this in a waitUntil condition). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/findDisplay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +findDisplay idd +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(15 June 2008) +findDisplay does not find displays defined under RscTitles (even when they are visible). +To access those types of displays, either assign the resource to a global variable, or pass its this value to a script, during the onLoad event: +e.g. class RscTitles { +class MyRsc { +onLoad = myDisplay = (_this select 0) ; // or +// onLoad = _this execVM 'myDialog.sqf' ; +... +You can then use the stored value as you would for regular dialogs: +$Code$(myDisplay displayCtrl 1111) ctrlSetText "hello there");$/Code$ +%NextNote% +(17 March 2010) +I posted a tutorial on finding and using displays here. +%NextNote% +(07 March 2014) +The Zeus Display uses IDD 312 +%NextNote% +(March 25, 2015) +Display 12 is map +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +findEditorObject +//KeywordEnd// +DescriptionStart: +Return object that matches the provided reference. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/findEditorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map findEditorObject value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +findEmptyPosition +//KeywordEnd// +DescriptionStart: +Searches for an empty position around specified position. The search starts looking for an empty position at a minimum distance of [minDistance] from the [center] and looks as far away as [maxDistance]. If a [vehicleType] parameter is specified, then the search will look for an empty positions that is big enough to hold that vehicle type. If an empty position isn't found, an empty array is returned. +This command ignores moving objects present within search area. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/findEmptyPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +center findEmptyPosition [minDistance, maxDistance, vehicleType] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 6, 2013) +Keep search radius short and sweet, under 50 metres maybe. Searching big area takes long time and will result in your game stop responding until the search is over. isFlatEmpty is probably more suitable for a larger area search. +%NextNote% +(March 6, 2012) +I think the radius parameter should be treated as a 'minimum distance' from the centre position. I found that the parameter name radius wasn't very clear. Also, if radius is greater than max distance then the function will always return an empty array. +Here is an snippet of code I use to find a safe landing zone for an extraction helicopter. It may be useful for someone. +$Code$_centre = [ getMarkerPos "marker", random 150, random 360 ] call BIS_fnc_relPos; +_extraction_point = []; +_max_distance = 100; +while{ count _extraction_point 1 } do +{ +_extraction_point = _centre findEmptyPosition[ 30, _max_distance, "UH60M_EP1" ]; +_max_distance = _max_distance + 50; +}; +$/Code$ +In the above example, make sure that "_max_distance" is greater than 30, otherwise the while loop will go forever. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +findEmptyPositionReady +//KeywordEnd// +DescriptionStart: +Check if findEmptyPosition can be called without waiting for files. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/findEmptyPositionReady +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +center findEmptyPositionReady [radius,maxDistance] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +findNearestEnemy +//KeywordEnd// +DescriptionStart: +Finds the nearest enemy to the specified position. Returns a null object if the object's group does not know about any enemies. This command will return nearest object that is known to the unit and is considered enemy. An empty vehicle that is part of enemy group assets (see addVehicle ) can be returned as valid nearest target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/findNearestEnemy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object findNearestEnemy position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +finishMissionInit +//KeywordEnd// +DescriptionStart: +Finish world initialization before mission is launched. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/finishMissionInit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +finishMissionInit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +finite +//KeywordEnd// +DescriptionStart: +True, if number is finite (not infinite and a valid number) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/finite +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +finite x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(27 Sep, 2013) +Don't get high hopes with this command thinking what a great way of catching divisions by zero, the command is pretty useless in this respect: +$Code$//ArmA 2 +hint str finite (10/0); //true... O_o Huh???? +hint str (10/0); //0... Weird, but that explains it. +//ArmA 3 +hint str finite (10/0); // Error Zero Divisor +hint str finite 10; //true +hint str finite 1000000000000000000000000000000000000000; //false$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fire +//KeywordEnd// +DescriptionStart: +Forces a unit to fire the given weapon. +NOTE: Just like with forceWeaponFire it is possible to pass remote unit as argument, but this could be unreliable. Considering this command might need to be used in combination with selectWeapon, which takes only local arguments, it would make sense to execute fire command where unit is also local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit fire weaponName +%NextRawSyntax% +unit fire [muzzle, mode, magazine] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 17, 2006) +Sometimes AI won't shoot when you use this command. It can be fixed by placing selectWeapon command before it. +%NextNote% +(February 2, 2007) +In OFP v1.96, when a man class unit is given this command, he will aim up in the air before firing his weapon. This makes it rather useless if you want to make him shoot a target. It does work with vehicles, when the vehicle is first given a doWatch or doTarget command. +%NextNote% +(January 20, 2007) +In ArmA v1.02, this command is not working with weapons in the secondary turrets (like "DSHKM" in t72) +%NextNote% +(Jan 15, 2008) +To place a satchel (pipebomb) the syntax is: +OFP : unitname Fire ["put", "pipebomb"] +ArmA : unitname Fire ["pipebombmuzzle", "pipebombmuzzle", "pipebomb"]; +The triggering is done via a " TOUCHOFF " action. +%NextNote% +(March 18, 2010) +In Arma2 AI will automatically shoot straight up. Command seems to be broken. +%NextNote% +(November 24, 2010) +Command is broken - confirmed. Use action "USEWEAPON" instead. +Place a game logic in the editor. Name it MyGameLogic. +Use this code to make unit1 fire his primaryweapon: +MyGameLogic action ["useWeapon",primaryWeapon unit1,unit1,0]; +%NextNote% +(Feburary 25, 2011) +Command works just fine in A2/OA. Make sure to execute it on local AI. +%NextNote% +(April 06, 2012) +If it did work at one time, it does no longer. The AI (or player) is forced to look upwards or reacts to a massive recoil force before getting his shot off. +%NextNote% +(Feburary 16, 2013) +Command did not work with ACR 1.62. Used fireAtTarget instead. +%NextNote% +(June 4, 2014) +In Arma 3 in order for AI to place Claymore, for example, it is necessary to execute 3 statements - an animation, weapon select and the actual fire command. Animation is most likely for forcing unit to leave rest state, weapon select and fire kinda both go together anyway: $Code$_unit playActionNow "PutDown"; +_unit selectWeapon "DirectionalMineRemoteMuzzle"; +_unit fire [ +"DirectionalMineRemoteMuzzle", +"DirectionalMineRemoteMuzzle", +"ClaymoreDirectionalMine_Remote_Mag" +];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fireAtTarget +//KeywordEnd// +DescriptionStart: +Remotely forces a unit to fire the given weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fireAtTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sourceVehicle fireAtTarget [targetVehicle, weaponMuzzleName] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 16, 2010) +Most likely only for missiles and for interaction with player only. +%NextNote% +(Apr 8, 2014) +(A3 1.14) Source vehicle is only limited to manned vehicle while any other types won’t be able to active fireAtTarget handle, e.g. +$Code$ +_handle = _InfantryUnit fireAtTarget [_Infnatrytarget,( weapons _Infantryunit select 0)]; +//false no bullet shoot +$/Code$ +Target has no limitation and can be any object: +$Code$ +_handle = ( vehicle _veh) fireAtTarget [ObjNull,( weapons ( vehicle _veh) select 0)]; +//true a bullet shoot +$/Code$ +Handle returns false if weapon class name is inaccurate, e.g. +$Code$ +_Handle = ( vehicle _veh) fireAtTarget [ObjNull,�UnknownWeapon�]; +//false no bullet shoot. +$/Code$ +Handle still returns true even though the vehicle is unavailable to shoot any bullet: +$Code$ +_weapon = weapons ( vehicle _veh) select 0; +( vehicle _veh) setAmmo [_weapon,0]; +_Handle = ( vehicle _veh) fireAtTarget [ObjNull,_weapon]; +//true no bullet shoot +$/Code$ +difference +command +Source +Target +Behavior +Workaround templets +fire +Either Unit or manned vehicle +N/A +Fired aiming at air for infantry rifle +Together with selectWeapon, +suggested to work with "throw","put" weapon type +for infantry, or vehicle entity indeed. +fireAtTarget +Manned vehicle only +Any object +Normal shoot, won’t aim at target automatically +_veh doWatch _target; +waitUntil {_veh aimedAtTarget [_target] 0}; +_veh fireAtTarget [_target]; +forceWeaponFire +Either Unit or manned aircraft (weapon operator) +N/A +Normal shoot, can change fire mode +//E.g. unit won't shoot until he is facing the target. +_unit doWatch _tar; +waitUntil { +_dir = direction _unit; +_relative = [_unit,_tar] call BIS_fnc_relativeDirTo ; +if (_dir == _relative) exitWith { +_unit forceWeaponFire [ currentWeapon _unit,"single"]; +}; +false +}; +doFire +Unit only +Either unit or vehicle +automatic aiming and shooting +No special example. +commandFire +Unit only +Either unit or vehicle +automatic aiming and shooting +No special example. +action ["UseWeapon"] +Either unit or manned vehicle +N/A +unexpected behavior +N/A +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +firstBackpack +//KeywordEnd// +DescriptionStart: +Returns the first stored backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/firstBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +firstBackpack box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +flag +//KeywordEnd// +DescriptionStart: +Returns the original flag pole of the flag the unit is carrying. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/flag +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flag unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +flagOwner +//KeywordEnd// +DescriptionStart: +Returns the global owner of a flag. A getter for setFlagOwner. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/flagOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flagOwner flag +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +flagSide +//KeywordEnd// +DescriptionStart: +Returns Side of the local instance of the flag. A getter for setFlagSide. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/flagSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flagSide flag +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +flagTexture +//KeywordEnd// +DescriptionStart: +Returns texture of the local instance of the flag. A getter for setFlagTexture. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/flagTexture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flagTexture flagCarrier +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fleeing +//KeywordEnd// +DescriptionStart: +Checks if a unit is fleeing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fleeing +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fleeing unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +floor +//KeywordEnd// +DescriptionStart: +Returns the next lowest integer in relation to x. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/floor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +floor x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +flyInHeight +//KeywordEnd// +DescriptionStart: +Sets the flying altitude for aircraft relatively to the ground surface. Avoid too low altitudes, as helicopters and planes won't evade trees and obstacles on the ground. The default flying altitude is 100 meters. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/flyInHeight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +aircraft flyInHeight altitude +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +From version 1.80+ - flyInHeight now affects not only helicopters, but also planes. +%NextNote% +(August 4, 2006) +A planes flyInHeight, is restricted to a minimum of 20 meters. +%NextNote% +(December 15, 2008) +A flyInHeight of 0 will keep the chopper pinned to the ground, even when the engines have been started. +%NextNote% +(00:53, 11 April 2009 (CEST)) +If a helo has no waypoints, it will assume a low hover without regard to this setting. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fog +//KeywordEnd// +DescriptionStart: +Return the current value of the fog in range 0...1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fog +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fogForecast +//KeywordEnd// +DescriptionStart: +Returns the forecast fog value. A value of 0 means no fog, 1 means maximum fog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fogForecast +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fogForecast +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fogParams +//KeywordEnd// +DescriptionStart: +Returns extended params for the fog +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fogParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fogParams +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +for +//KeywordEnd// +DescriptionStart: +Description: +Creates cycle, using C like style. See example. +In Arma 3 use private keyword when defining any variables for the scope, see example 4. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/for_forspec +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +forceAddUniform +//KeywordEnd// +DescriptionStart: +Create a new uniform and hard link it into slot (without any restrictions). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceAddUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit forceAddUniform type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceEnd +//KeywordEnd// +DescriptionStart: +Enforces mission termination. Can be used in an "END" trigger to force end conditions in the editor. +Does precisely nothing, zero, zip, nada, zilch +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceEnd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +forceEnd +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceMap +//KeywordEnd// +DescriptionStart: +Displays the map on the screen during a mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceMap +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +forceMap show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +In OFP v1.96, the mapAnim series of commands, together with forceMap can only be used in the intro and mission, as it is not possible to access the map from the outro. (not checked, sourced from an old copy of the OFPEC comref) +%NextNote% +Manually opening the map afterwards won't close the map. Actually it will open the "real" map on top of the forced map, and closing the (top) map with the m -key again will still show the forcefully opened map. (ArmA 1.05) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceRespawn +//KeywordEnd// +DescriptionStart: +Forces unit to respawn. The effect as if the player pressed RESPAWN button in the game pause menu, the unit is killed only there is no "so and so was killed" message and no score adjustment. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceRespawn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +forceRespawn unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceSpeed +//KeywordEnd// +DescriptionStart: +Force the speed limit on given object (object will never attempt to move faster than given by forceSpeed). Use negative value to return to default behaviour. Used unit is m/s. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object forceSpeed speed +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(17:02, 2 March 2007 (CET)) +%NextNote% +(9 February 2008) +Does not seem to do anything at the current time (V1.08.5163) +%NextNote% +(14 December 2011) +If a unit (man) has forceSpeed set to anything under jogging (walking only) the unit will refuse to get into vehicles. He will automatically be unassigned from a vehicle everytime he is ordered to get in (via scripts or direct action) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceWalk +//KeywordEnd// +DescriptionStart: +Forces unit to walk even if run or sprint is selected. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceWalk +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit forceWalk value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceWeaponFire +//KeywordEnd// +DescriptionStart: +The unit will be forced to fire from the given weapon. The weapon will not fire if firemode passed as parameter is not supported by the weapon. Command must be executed where unit is local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceWeaponFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit forceWeaponFire [weapon, firemode] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 25, 2013) +Here is a neat workaround trick for firemode change from a script: +$Code$_weapon = currentWeapon player ; +_ammo = player ammo _weapon; +player setAmmo [_weapon, 0]; +player forceWeaponFire [_weapon, "FullAuto"]; +player setAmmo [_weapon, _ammo];$/Code$ +%NextNote% +(April 14, 2014) +(A3 1.16) forceWeaponFire is no longer only limited to units, but can remote aircrafts weapon firing as well. Passed source unit should be the correct one who controls the weapon, if passed mode is "this", use the weapon name instead: +$Code$ +_weapon = ( weapons _veh) select 3; +_mode = ( getArray ( configFile "cfgweapons" _weapon "modes")) select 0; +if (_mode == "this") then {_mode = _weapon;}; +( driver _veh) forceWeaponFire [_weapon, _mode]; +//Force a CAS fire a rocket. +$/Code$ +Currently this command is not available for land vehicle remote fire. +%NextNote% +(September 02, 2014) +Similar to Killzone Kid's note, This fires the units current weapon in its current firemode. +$Code$_unit forceWeaponFire [ weaponState _unit select 1, weaponState _unit select 2];$/Code$ +%NextNote% +(January 3, 2015) +fireAtTarget command can be used to force fire gunner weapon in vehicles. A gunner must be present. $Code$_veh fireAtTarget [ objNull ];$/Code$ Will fire one shot even if player is gunner. +fire command can also be used to fire vehicle weapon, like smoke launcher for example: $Code$ vehicle player fire "SmokeLauncher";$/Code$ And if this doesn't work, it is possible to force fire via action $Code$tank action ["UseWeapon", tank, commander tank, 0];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forceWeatherChange +//KeywordEnd// +DescriptionStart: +Forces saved wanted settings for weather to be actual (BEWARE: Will cause lag). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forceWeatherChange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +forceWeatherChange +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forEach +//KeywordEnd// +DescriptionStart: +Executes the given command(s) on every item of an array. +The array items are represented by the magic variable _x. The array indices are represented by _forEachIndex. +In ArmA2 VBS2, the variable _x is always local to the forEach block so it is safe to nest them. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forEach +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +script forEach array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 20, 2010) +If arrays are used in forEach loops, _x uses them by reference, so any changes to _x will be applied to the original: +$Code$_arr1 = [1,2,3]; +_arr2 = [6,7,8]; +{_x set [1,"x"]} forEach [_arr1,_arr2];$/Code$ +will change _arr1 to [1,"x",3], and _arr2 to [6,"x",8]. +%NextNote% +(August 29, 2014) +forEach returns any (the last passed value will be the return value or just Nothing, depends on the function called). +$Code$ +_var = {_x} forEach [ nil,"s", objNull, configFile ]; // return bin\config.bin +_var = {_x setCaptive true } forEach allUnits ; // return nothing +$/Code$ +%NextNote% +(September 20, 2014) +Using the foreach loop, since there are no variable for the index like say the for-do loop, there is a variable that you can use to check the index of the foreach loop. +$Code${ +if ( _forEachIndex == 1) then { +// Copilot +_x addUniform "U_B_Soldier_VR"; +} else { +// Adams +[_x, "B_Soldier_TL_F"] call BIS_fnc_loadInventory ; +_x addUniform "U_B_Soldier_VR"; +_x setIdentity "Bootcamp_B_Adams"; +}; +} forEach _crew; +$/Code$ +So when the array is past from _crew to the loop, index 1 (which is the second element) is the copilot of the "B_Heli_Light_01_F" and he will get "U_B_Soldier_VR" as a uniform. While the pilot which is index 0 (first element), will get the same uniform but will get the loadout of "B_Soldier_TL_F" and the identity of "Bootcamp_B_Adams". +%NextNote% +(January 2, 2015) +Using exitWith inside a forEach loop will make forEach actually return something, namely whatever the exitWith returns: +$Code$_result = { +if(_x isEqualTo 3) exitWith {"Hello"} +} forEach [1,2,3,4,5]; +//_result = "Hello"$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forEachMember +//KeywordEnd// +DescriptionStart: +Executes the given command recursively for both teams and agents that are members of the given team. For teams only use forEachMemberTeam. For agents only use forEachMemberAgent. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forEachMember +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +command forEachMember team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forEachMemberAgent +//KeywordEnd// +DescriptionStart: +Executes the given command recursively for each agent that is a member of the given team. For just teams use forEachMemberTeam. For both teams and agents use forEachMember. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forEachMemberAgent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +command forEachMemberAgent team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +forEachMemberTeam +//KeywordEnd// +DescriptionStart: +Executes the given command recursively for each team that is a member of the given team. For just agents use forEachMemberAgent. For both teams and agents use forEachMember. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/forEachMemberTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +command forEachMemberTeam team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +format +//KeywordEnd// +DescriptionStart: +Composes a string containing other variables or other variable types. +Converts any variable type to a string. +If you want to convert a string back to a number, use parseNumber. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/format +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +format [formatString, var1, var2...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +The format command is very strong in combination with call. Dynamic code can be created using format and then executed with call. +%NextNote% +The maximum number of characters returned by the format command seems to depend on the total byte count. For plain ASCII strings the limit is 2048 characters. +%NextNote% +In Arma 3 the max length of String returned by format command seems to be 8191 characters. formatText doesn't seem to have this limitation. +%NextNote% +(March 28, 2015) +In addition to the note above, formatTexted strings are Structured Text, hence cannot be used like formatted strings (with most scripting commands). A workaround to get strings of type String with more than 8191 characters is: $Code$ str formatText ["%1", _string]$/Code$ +%NextNote% +(January 2, 2016) +In addition to the note above, you may consider using joinString instead of format or formatText workaround. joinString is a fraction faster than format and it has no limit on the length of the string (apart from global String limit obviously) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formation +//KeywordEnd// +DescriptionStart: +Returns the current formation of a group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formation grp +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(January 9, 2007) +Additional ARMA Formations: "File" - Column Compact. "DIAMOND" - Delta. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formationDirection +//KeywordEnd// +DescriptionStart: +Return the direction in degrees of the 'unit' watching in formation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formationDirection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formationDirection unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formationLeader +//KeywordEnd// +DescriptionStart: +Return leader of the formation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formationLeader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formationLeader unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 2, 2006) +Return value is NULL-OBJECT if no group members exist. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formationMembers +//KeywordEnd// +DescriptionStart: +Return list of units (drivers) in the formation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formationMembers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formationMembers person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formationPosition +//KeywordEnd// +DescriptionStart: +Return position of unit in the formation +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formationPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formationPosition person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formationTask +//KeywordEnd// +DescriptionStart: +Return the current task of the unit in the formation. +You can't use it in ArmA 2, it will always returns "NOTHING" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formationTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formationTask person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formatText +//KeywordEnd// +DescriptionStart: +Creates a structured text by replacing %1, %2, etc. in format with plain or structured texts given as arguments. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formatText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formatText [format, arg1, arg2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +formLeader +//KeywordEnd// +DescriptionStart: +Returns the formation leader of a given unit. This is often the same as the group leader, but not always, for example in cases when a unit is ordered to follow another unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/formLeader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +formLeader unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +freeLook +//KeywordEnd// +DescriptionStart: +Returns true if freelook is active. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/freeLook +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +freeLook +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +from +//KeywordEnd// +DescriptionStart: +Description: +Continue sequence of for var command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/from +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +fromEditor +//KeywordEnd// +DescriptionStart: +Return if given team was inserted directly from mission editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fromEditor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fromEditor teamMember +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fuel +//KeywordEnd// +DescriptionStart: +Checks how much fuel is left in the gas tank of a vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fuel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fuel vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +Vehicles refuelled in game with the Fuel trucks e.t.c never get completely refuelled. After refuelling, rather than returning a value of 1 when the fuel command is called. They return a value greater than 0.98 and less than 1. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +fullCrew +//KeywordEnd// +DescriptionStart: +Returns array with all crew inside given vehicle. Since Arma 3 v1.55.133810 it is possible to return empty seats as well. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/fullCrew +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fullCrew vehicle +%NextRawSyntax% +fullCrew [vehicle, type, includeEmpty] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 13, 2014) +Be aware that the returned role may or may not be in lowercase. E.g. it's "driver" for the driver, but "Turret" for turret units. +As of Arma 3 version 1.36, the alternative syntax of this command returns all crew members if the filter is anything except "driver", "commander", "gunner", "turret" or "cargo" +The filter is not case sensitive. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +gearSlotAmmoCount +//KeywordEnd// +DescriptionStart: +Returns ammo count of assigned magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/gearSlotAmmoCount +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +gearSlotAmmoCount control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +gearSlotData +//KeywordEnd// +DescriptionStart: +Returns gear slot item name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/gearSlotData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +gearSlotData control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENActionState +//KeywordEnd// +DescriptionStart: +Returns state of given action in the Eden Editor. +See the list of all actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENActionState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENActionState action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENAttribute +//KeywordEnd// +DescriptionStart: +Returns value of a given entity's attribute in Eden Editor. +An attribute is identified by its property ( data when it's engine-drive attribute) value in config. For the list of all attributes with their properties, see Setting Attributes. +! +Attributes are available only within the Eden Editor workspace. You cannot access them in scenario preview or exported scenario! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENAttribute +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entity get3DENAttribute attribute +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENCamera +//KeywordEnd// +DescriptionStart: +Returns the camera Object used by the Eden Editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENCamera +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENConnections +//KeywordEnd// +DescriptionStart: +Return all connections currently present on an entity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENConnections +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENConnections entity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENEntity +//KeywordEnd// +DescriptionStart: +Returns Eden Entity based on its unique ID. If the ID points to a layer, the ID will be returned instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENEntity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENEntity id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENEntityID +//KeywordEnd// +DescriptionStart: +Returns unique index of an Eden Entity. This number remains the same even after saving and loading the scenario. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENEntityID +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENEntityID entity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENGrid +//KeywordEnd// +DescriptionStart: +Returns the grid increment for the given transformation type. +Transformation types: +Rotation - "r" +Translation - "t" +Scale - "s" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENGrid +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENGrid type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENIconsVisible +//KeywordEnd// +DescriptionStart: +Get visibility state of Eden Editor icons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENIconsVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENIconsVisible +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENLayerEntities +//KeywordEnd// +DescriptionStart: +Return all entities and sub-layer in Eden Entity layer. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENLayerEntities +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENLayerEntities layerID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENLinesVisible +//KeywordEnd// +DescriptionStart: +Get visibility state of Eden Editor lines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENLinesVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENLinesVisible +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENMissionAttribute +//KeywordEnd// +DescriptionStart: +Return value of scenario attribute. +! +Attributes are available only within the Eden Editor workspace. You cannot access them in scenario preview or exported scenario! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENMissionAttribute +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +section get3DENMissionAttribute class +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 26, 2016) +The class names of the vanilla sections are: +General +Scenario +Environment +Intel +Multiplayer +Multiplayer +Garbage Collection +GarbageCollection +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENMouseOver +//KeywordEnd// +DescriptionStart: +Returns the Eden Entity the mouse is hovering over in Eden Editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENMouseOver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENMouseOver +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +get3DENSelected +//KeywordEnd// +DescriptionStart: +Returns an array of all selected Eden Editor Entities, including groups, waypoints, and markers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/get3DENSelected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +get3DENSelected type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getAllHitPointsDamage +//KeywordEnd// +DescriptionStart: +Returns 3 arrays for easy cross reference: 1st - array of hit point names, 2nd - array of hit selection names, 3rd - array of damage values. All values in all arrays are ordered accordingly to hit part index for convenience and for use in setHitIndex and getHitIndex. Levels of damage are: +0: no damage +1: full damage +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getAllHitPointsDamage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getAllHitPointsDamage vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(September 27, 2015) +Will only return [] instead of [[],[],[]] if object has no hitpoints +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getAmmoCargo +//KeywordEnd// +DescriptionStart: +Returns the amount of ammo resources in the cargo space of a rearm vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getAmmoCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getAmmoCargo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 22, 2014) +If the vehicle is not alive, it always returns Nothing, which you should check for using isNil. +If the vehicle is unable to carry that type of cargo, it returns -1.#IND, which you should check for using finite. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getAnimAimPrecision +//KeywordEnd// +DescriptionStart: +Returns aim precision for current animation +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getAnimAimPrecision +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getAnimAimPrecision unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getAnimSpeedCoef +//KeywordEnd// +DescriptionStart: +Get coefficient for animation speed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getAnimSpeedCoef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getAnimSpeedCoef unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getArray +//KeywordEnd// +DescriptionStart: +Extract array from config entry. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getArray +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getArray config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Mar 28, 2014) +(ArmA3 1.14) It's recommended to use BIS_fnc_GetCfgData or BIS_fnc_returnConfigEntry to get variable cfg data rather than conditioning via isNumber, isText, isArray, getNumber, getText and getArray combination. +Traditional workaround: +$Code$ +_cfg = configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type" +switch ( true ) do +{ +case ( isNumber _cfg): { getNumber _cfg}; +case ( isText _cfg): { getText _cfg}; +case ( isArray _cfg): { getArray _cfg;}; +default { nil }; +}; +$/Code$ +Recommended workaround: +$Code$ +( configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type") call BIS_fnc_GetCfgData ; +$/Code$ +To return default value once entry was not found, we can use BIS_fnc_returnConfigEntry instead of BIS_fnc_GetCfgData. +$Code$ +[( configFile "CannonFire" "LightExp"),"lifeTime",0] call BIS_fnc_returnConfigEntry ;//0.5 +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getArtilleryAmmo +//KeywordEnd// +DescriptionStart: +Get list of all available magazines of artillery units on the list. Command returns only unique magazine types and doesn't contain any information about which unit has which magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getArtilleryAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getArtilleryAmmo [unit1, unit2, unit3....] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getArtilleryComputerSettings +//KeywordEnd// +DescriptionStart: +Returns settings from artillery computer currently opened by player. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getArtilleryComputerSettings +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getArtilleryComputerSettings +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getArtilleryETA +//KeywordEnd// +DescriptionStart: +Returns ETA to the target in seconds for given artillery unit based on target position and used magazine, -1 if target can't be hit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getArtilleryETA +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit getArtilleryETA [targetPosition, magazineType] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 26, 2013) +To avoid wrong ETA readings, position of the target should only be obtained via position or getPos +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getAssignedCuratorLogic +//KeywordEnd// +DescriptionStart: +Returns curator logic to which given player has access. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getAssignedCuratorLogic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getAssignedCuratorLogic player +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 17, 2014) +This command will return objNull if used immediately after the curator logic is assigned to the unit in question (this includes at mission time 0). To avoid problems use the following beforehand: $Code$ waitUntil {! isNull ( getAssignedCuratorLogic unit)};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getAssignedCuratorUnit +//KeywordEnd// +DescriptionStart: +Returns unit assigned to curator logic. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getAssignedCuratorUnit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getAssignedCuratorUnit curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 17, 2014) +This command will return objNull if used immediately after the curator unit is assigned to the logic in question (this includes at mission time 0). To avoid problems use the following beforehand: $Code$ waitUntil {! isNull ( getAssignedCuratorUnit logic)};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getBackpackCargo +//KeywordEnd// +DescriptionStart: +Returns all backpack types and count from the cargo space +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getBackpackCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getBackpackCargo object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getBleedingRemaining +//KeywordEnd// +DescriptionStart: +Returns how many seconds injured unit will continue leaving blood trail. If unit damage is 0.1, the return value is 0 and unit doesn't leave any blood trail. Use setBleedingRemaining to set different remaining time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getBleedingRemaining +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getBleedingRemaining unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getBurningValue +//KeywordEnd// +DescriptionStart: +Returns amount of damage from fire. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getBurningValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getBurningValue unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getCameraViewDirection +//KeywordEnd// +DescriptionStart: +Returns the direction unit is looking in render time scope. While for AI the origin for the view direction vector can be taken from eyePos unit, for human player the origin should be taken from player camera position positionCameraToWorld [0,0,0] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getCameraViewDirection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getCameraViewDirection unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getCargoIndex +//KeywordEnd// +DescriptionStart: +Returns index of the unit in cargo. 0,1,2... or -1 if not in cargo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getCargoIndex +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle getCargoIndex unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getCenterOfMass +//KeywordEnd// +DescriptionStart: +Returns center of mass of a PhysX object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getCenterOfMass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getCenterOfMass object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getClientState +//KeywordEnd// +DescriptionStart: +Returns client state in network game. Works on both, client and dedicated server. The following states are possible: +getClientStateNumber +getClientState +0 +"NONE" +No client (or singleplayer) +1 +"CREATED" +Client is created +2 +"CONNECTED" +Client is connected to server, message formats are registered +3 +"LOGGED IN" +Identity is created +4 +"MISSION SELECTED" +Mission is selected +5 +"MISSION ASKED" +Server was asked to send / not send mission +6 +"ROLE ASSIGNED" +Role was assigned (and confirmed) +7 +"MISSION RECEIVED" +Mission received +8 +"GAME LOADED" +Island loaded, vehicles received +9 +"BRIEFING SHOWN" +Briefing was displayed +10 +"BRIEFING READ" +Ready to play mission +11 +"GAME FINISHED" +Game was finished +12 +"DEBRIEFING READ" +Debriefing read, ready to continue with next mission +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getClientState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getClientState +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getClientStateNumber +//KeywordEnd// +DescriptionStart: +Returns client state in network game. Works on both, client and dedicated server. The following states are possible: +getClientStateNumber +getClientState +0 +"NONE" +No client (or singleplayer) +1 +"CREATED" +Client is created +2 +"CONNECTED" +Client is connected to server, message formats are registered +3 +"LOGGED IN" +Identity is created +4 +"MISSION SELECTED" +Mission is selected +5 +"MISSION ASKED" +Server was asked to send / not send mission +6 +"ROLE ASSIGNED" +Role was assigned (and confirmed) +7 +"MISSION RECEIVED" +Mission received +8 +"GAME LOADED" +Island loaded, vehicles received +9 +"BRIEFING SHOWN" +Briefing was displayed +10 +"BRIEFING READ" +Ready to play mission +11 +"GAME FINISHED" +Game was finished +12 +"DEBRIEFING READ" +Debriefing read, ready to continue with next mission +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getClientStateNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getClientStateNumber +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getConnectedUAV +//KeywordEnd// +DescriptionStart: +Returns UAV if unit has connection to some UAV. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getConnectedUAV +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getConnectedUAV unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getDammage +//KeywordEnd// +DescriptionStart: +Returns the object damage in the range from 0 to 1. Alias of damage. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getDammage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getDammage object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(, May 9, 2011) +getDammage and damage works fine when used on damaged vehicles after a repair from a repairtruck when used in A2 CO patch 1.59. +%NextNote% +Vehicles repaired in game with the Repair trucks e.t.c never get completely repaired. After being repaired, rather than returning 0 when the damage command is called. They return a value equal to or less than 0.09. +Consequently any vehicle flagged as immobile (as indicated by the canMove command), remains so. At least as far as the AI are concerned. The AI will refuse to board an immobile vehicle or eject straight after boarding. Players remain unaffected and can drive the vehicle as normal. To circumvent this, use setDamage 0 on the vehicle in question, to allow the AI to board. +%NextNote% +In OFP 1.96, it is possible for a unit to be dead and still return a getDammage value well below 1. Use ! alive to check if a unit is dead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getDescription +//KeywordEnd// +DescriptionStart: +Returns the string representation of unit as an four slots array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getDescription +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getDescription unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Return value fixed in revision 0.51.103185. +%NextNote% +(September 21, 2014) +Pretty useless command tbh, return is something like this: +["B_Soldier_F","Combat Fatigues (MTP)","Carrier Lite (Green)",""] or ["ERROR","ERROR","ERROR","ERROR"] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getDir +//KeywordEnd// +DescriptionStart: +Returns the object heading in the range from 0 to 360. +Since Arma 3 v1.55.133361, an alternative syntax is added that allows to get heading from one object or position to another object or position, the equivalent of BIS_fnc_dirTo +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getDir object +%NextRawSyntax% +pos1 getDir pos2 Since Arma 3 v1.55.133361 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(October 23, 2013) +Be careful when using this command in conjunction with BIS_fnc_rotateVector2D ; the latter rotates vectors counterclockwise (mathematically correct), while getDir returns a clockwise angle. +To counter this, simply negate the output of getDir: +$Code$[[0,1,0], -( getDir _object ) ] call BIS_fnc_rotateVector2D ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getDirVisual +//KeywordEnd// +DescriptionStart: +Returns object's heading in the range from 0 to 360 in render time scope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getDirVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getDirVisual object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getDLCs +//KeywordEnd// +DescriptionStart: +Returns array of appIDs of DLCs. Use filter param to get specific type of DLCs: +0 - all +1 - owned +2 - not owned +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getDLCs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getDLCs filter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(May 30, 2014) +Current list of IDs that correspond to the available DLCs: +275700 - Arma 3 Zeus +249860 - Arma 3 Soundtrack +304400 - Arma 3 DLC Bundle +249861 - Arma 3 Maps +249862 - Arma 3 Tactical Guide +288520 - Arma 3 Karts +304380 - Arma 3 Helicopters +332350 - Arma 3 Marksmen +%NextNote% +(April 7, 2015) +To add to the note above, app ID can be found in CfgMods. Here is an example path from zeus using the Splendid Config Viewer: +$Code$configfile "CfgMods" "Curator" "appId"$/Code$ +This method can be used to find app IDs without having to find a list like the one above. +I am also pretty sure you are able to define your own app ID for your own mods using this method. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getEditorCamera +//KeywordEnd// +DescriptionStart: +Fetches a reference to the mission editor camera. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getEditorCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getEditorCamera map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getEditorMode +//KeywordEnd// +DescriptionStart: +Returns the current mode of the editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getEditorMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getEditorMode map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getEditorObjectScope +//KeywordEnd// +DescriptionStart: +Returns the editor object scope of the specified editor object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getEditorObjectScope +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map getEditorObjectScope object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getElevationOffset +//KeywordEnd// +DescriptionStart: +Returns the map elevation offset from [map]/config.cpp. +Returns 0 if there's no elevationOffset defined in the config of the current world. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getElevationOffset +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getElevationOffset +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getFatigue +//KeywordEnd// +DescriptionStart: +Returns fatigue of given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getFatigue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getFatigue unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +getFatigue can be applied to remote unit however it will not read the changes made to unit's fatigue with setFatigue command. Only natural changes resulting from unit moving will be counted. When applied to local unit, it will read resulting value of natural fatigue combined with artificial changes added locally by setFatigue. In short, the server wouldn't know the correct value of remote unit's fatigue if you used setFatigue on the unit prior. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getFriend +//KeywordEnd// +DescriptionStart: +Returns if sides are friendly or hostile. For a value smaller than 0.6 it results in being enemy, otherwise it's friendly. See also Side relations. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getFriend +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +side1 getFriend side2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getFSMVariable +//KeywordEnd// +DescriptionStart: +Return the value of variable in the variable space of given FSM. The FSM handle is the number returned by the execFSM command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getFSMVariable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +FSMhandle getFSMVariable name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getFuelCargo +//KeywordEnd// +DescriptionStart: +Returns the fuel amount (between 0 and 1) in the cargo space of a refuelling vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getFuelCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getFuelCargo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 22, 2014) +If the vehicle is not alive, it always returns Nothing, which you should check for using isNil. +If the vehicle is unable to carry that type of cargo, it returns -1.#IND, which you should check for using finite. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getGroupIcon +//KeywordEnd// +DescriptionStart: +Get group icon properties. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getGroupIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group getGroupIcon ID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getGroupIconParams +//KeywordEnd// +DescriptionStart: +Returns group icons params. [color,text,scale,visible] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getGroupIconParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getGroupIconParams group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getGroupIcons +//KeywordEnd// +DescriptionStart: +Returns all group icons. [id,icon,[offsetx,offsety],[..],..] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getGroupIcons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getGroupIcons group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getHideFrom +//KeywordEnd// +DescriptionStart: +Returns the Position where object believes the enemy to be. If there is no direct line of sight between the object and the enemy, this position is extrapolated based on the last known position and speed of the enemy. A returned position of [0,0,0] implies that object does not knowAbout enemy. If enemy is null it is some position in front of the object or enemy position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getHideFrom +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object getHideFrom enemy +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 25, 2015) +This command is definatlely not broken, at least not in A3 1.42. It functions exactly as the description says it does. The reason why the Z value is elevated is because it represents the units torso. When the unit is prone and spotted, the Z value is much less. Here you can see a perfectly working example of this command Talk:getHideFrom#Operation Script Sample +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getHit +//KeywordEnd// +DescriptionStart: +Returns selection damage. Same as getHitPointDamage only argument is selection part instead of hit point. Note: Some part names are in Czech; see translation table. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getHit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle getHit selection +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getHitIndex +//KeywordEnd// +DescriptionStart: +Return current level of damage for a specific Hit Point (specified by its hit part index). All hit points can be obtained with getAllHitPointsDamage command. +0: no damage +1: full damage +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getHitIndex +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle getHitIndex hitPartIndex +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getHitPointDamage +//KeywordEnd// +DescriptionStart: +Return current level of damage for a specific Hit Point (specified by its config class). If you need to get damage of a selection instead of hit point, use getHit. +0: no damage +1: full damage +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getHitPointDamage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle getHitPointDamage hitPointName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getItemCargo +//KeywordEnd// +DescriptionStart: +Returns all items names and count from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getItemCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getItemCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMagazineCargo +//KeywordEnd// +DescriptionStart: +Returns all magazines types and count from the cargo space +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMagazineCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMagazineCargo object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMarkerColor +//KeywordEnd// +DescriptionStart: +Returns the color of a given map marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMarkerColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMarkerColor markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMarkerPos +//KeywordEnd// +DescriptionStart: +Returns the position of a given marker. [x,y,z] +Argument 3 (height above ground) is always zero. +If a non-existing marker is referenced the values returned are [0,0,0]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMarkerPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMarkerPos markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMarkerSize +//KeywordEnd// +DescriptionStart: +Returns the size of a given marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMarkerSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMarkerSize markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMarkerType +//KeywordEnd// +DescriptionStart: +Returns the type of a given marker. See cfgMarkers for a list of standard markers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMarkerType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMarkerType markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMass +//KeywordEnd// +DescriptionStart: +Returns mass of a PhysX object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMass object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(April 15, 2015) +This function will return 0 for infantry AI units. That means a manned Blufor Hunter has the same mass than an empty one (8306.63). +Crates return their initial mass, but if you empty them or load items, magazines and weapons, the mass remains the same. In fact, none of these (non-physx) objects has a mass. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMissionConfig +//KeywordEnd// +DescriptionStart: +Returns Config class of a scenario attribute from the 1st tier. The attribute can be defined on multiple places, the commands checks them in the following order: +External Description.ext file +Eden Editor scenario attribute +So if attribute exists in both places, attribute from description.ext is used. Previously, scenario attributes were extracted from Description.ext using missionConfigFile. That still works, but it ignores attributes set directly in the editor and it should not be used anymore. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMissionConfig +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMissionConfig class +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMissionConfigValue +//KeywordEnd// +DescriptionStart: +Returns value of given scenario attribute from the 1st tier. The attribute can be defined on multiple places, the commands checks them in the following order: +External Description.ext file +Eden Editor scenario attribute +So if attribute exists in both places, attribute from description.ext is used. Previously, scenario attributes were extracted from Description.ext using missionConfigFile. That still works, but it ignores attributes set directly in the editor and it should not be used anymore. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMissionConfigValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMissionConfigValue attribute +%NextRawSyntax% +getMissionConfigValue [attribute, defaultValue] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getModelInfo +//KeywordEnd// +DescriptionStart: +Returns object's model info in format [modelName, modelPath]. +Since Arma 3 v1.51.131918, command returns [modelName, modelPath, hasSkeleton]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getModelInfo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getModelInfo object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getMousePosition +//KeywordEnd// +DescriptionStart: +Returns mouse position in UI coordinates. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getMousePosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getMousePosition +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getNumber +//KeywordEnd// +DescriptionStart: +Extract number from config entry. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getNumber config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(04:45, 3 March 2007 (CET)) +Use getNumber to get boolean values from a config file. 1 equals true, 0 equals false and if no value is found (when a valid variable is undefined) 0.67 is returned. +%NextNote% +(13 September 2011) +With an not existing entry, getNumber returns 0. +%NextNote% +(Mar 28, 2014) +(ArmA3 1.14), It's recommended to use BIS_fnc_getCfgData or BIS_fnc_returnConfigEntry to get variable cfg data rather than conditioning via isNumber, isText, isArray, getNumber, getText and getArray combination. +Traditional workaround: +$Code$ +_cfg = configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type" +switch ( true ) do +{ +case ( isNumber _cfg): { getNumber _cfg}; +case ( isText _cfg): { getText _cfg}; +case ( isArray _cfg): { getArray _cfg;}; +default {nil}; +}; +$/Code$ +Recommended workaround: +$Code$ +( configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type") call BIS_fnc_getCfgData ; +$/Code$ +To return default value once entry was not found, we can use BIS_fnc_returnConfigEntry instead of BIS_fnc_getCfgData. +$Code$ +[( configFile "CannonFire" "LightExp"),"lifeTime",0] call BIS_fnc_returnConfigEntry ;//0.5 +$/Code$ +To compose collected Number into Array, use BIS_fnc_getCfgDataArray instead. +$Code$ +( configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type") call BIS_fnc_getCfgDataArray ; +$/Code$ +To retype collected Number into Boolean, use BIS_fnc_getCfgDataBool. Anything bigger than 0 is true, otherwise false. +$Code$ +( configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type") call BIS_fnc_getCfgDataBool ; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectArgument +//KeywordEnd// +DescriptionStart: +Return name of object argument in mission editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectArgument +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map getObjectArgument [object, argument] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectChildren +//KeywordEnd// +DescriptionStart: +Return a list of all the children of the specified object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectChildren +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map getObjectChildren object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectDLC +//KeywordEnd// +DescriptionStart: +Returns appID of the DLC the object belongs to or nil if object is vanilla. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectDLC +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getObjectDLC obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectMaterials +//KeywordEnd// +DescriptionStart: +Gets all custom materials associated with the object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectMaterials +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getObjectMaterials obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectProxy +//KeywordEnd// +DescriptionStart: +Return the proxy object associated with the given editor object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectProxy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map getObjectProxy object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +classWorks in BIS RTE only? +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectTextures +//KeywordEnd// +DescriptionStart: +Gets all custom textures (hiddenSelectionsTextures) associated with the object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectTextures +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getObjectTextures obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectType +//KeywordEnd// +DescriptionStart: +Returns object type as a number: +1 - Primary - Normal object placed in Visitor, part of landscape +2 - Network - Road placed in Visitor, part of landscape +4 - Temporary - Temporary object (like tracks) +8 - TypeVehicle - Some entity added by game +16 - TypeTempVehicle - Temporary entity +32 - LandDecal - Land decal +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getObjectType object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getObjectViewDistance +//KeywordEnd// +DescriptionStart: +Gets the values of rendering distances of objects and shadows. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getObjectViewDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getObjectViewDistance +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getOxygenRemaining +//KeywordEnd// +DescriptionStart: +Returns amount of remaining oxygen. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getOxygenRemaining +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getOxygenRemaining unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 24, 2014) +Unit will die instantly at 0 oxygen unlike some other games that permit a certain amount of time after oxygen is depleted. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPersonUsedDLCs +//KeywordEnd// +DescriptionStart: +Returns a list of all DLCs objects the unit is currently using. For example if a unit is inside a vehicle from DLC, it will return the code of that DLC. +This command is broken and doesnt work on dedicated server +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPersonUsedDLCs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPersonUsedDLCs unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPlayerChannel +//KeywordEnd// +DescriptionStart: +Returns channel number for given player, provided that player is speaking, otherwise -1. Having mic on is not enough, player has to make a sound. There are several limitations to this command: +It does not work on dedicated server, the return is always -1, only client can detect other client talking. +It does not detect when someone talks on direct chat at all anywhere. +The client on which command is executed has to able to receive transmission before the transmission channel can be detected. For example if a player is not in the same group as a speaker and the speaker speaks on Group Channel, the player cannot hear the speaker and therefore cannot detect what channel the speaker is on. +In short, this command mimics the speaking icon from the UI. Correspondence between channel and number: +0 = Global +1 = Side +2 = Command +3 = Group +4 = Vehicle +5 = Direct (Is not detected by getPlayerChannel ) +6-15 = Custom Radio (see radioChannelCreate ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPlayerChannel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPlayerChannel player +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPlayerScores +//KeywordEnd// +DescriptionStart: +In MP: returns the unit's table of scores (infantry kills, soft vehicle kills, armor kills, air kills, deaths, total score). In SP: empty array [] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPlayerScores +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPlayerScores unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPlayerUID +//KeywordEnd// +DescriptionStart: +Return an uniqueID of the given unit as string if it's player and empty value if it's AI. The unique ID may be up to 100 characters long and may contain numbers, uppercase letters and underscores (the value can be used to construct a valid variable name by appending to another valid variable name). +Note: while for ArmA 2 or ArmA 2: Operation Arrowhead until version 1.60 the result always contains a number, it should be always handled as an opaque string. Converting it to a Number can cause precision problems, as Number cannot accurately represent integers above 16777216 (2^24). Moreover, game versions since ArmA 2: Operation Arrowhead 1.61 provide a non-numeric value as a result. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPlayerUID +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPlayerUID unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 17, 2014) +In Arma 3 the returned string is the steamID64 of the player. $Code$ _steamProfileUrl = http://steamcommunity.com/profiles/ + ( getPlayerUID player );$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPos +//KeywordEnd// +DescriptionStart: +Returns the object position in format PositionAGLS. Z value is height over the surface underneath. +Since Arma 3 v1.55.133361, an alternative syntax is added that allows to get position given distance and heading away from original object or position, the equivalent of BIS_fnc_relPos +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPos object +%NextRawSyntax% +origin getPos [distance, heading] Since Arma 3 v1.55.133361 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(16 Feb, 2007) +getPos obj select 2 +might return the vertical position above ground level, but for a stacked object, it returns the vertical position above the object beneath it. The same problem exists for getPosASL. There was a discussion thread in the BIS forums which suggested the use of the command modelToWorld instead to get around this issue where an absolute vertical position is required. ArmA Ver 1.02. +%NextNote% +(14 Dec, 2010) +This command returns a PositionAGL. Apparently, Position and PositionAGL are the same thing. +%NextNote% +(6 Feb, 2011) +The z height returned changes dynamically with the height of waves beneath the object, if the object is located over sea. The z height returned by getPosATL and getPosASL does not change like this. This was tested by continuously retrieving the position of a static object, like the cross in the empty/corpses category, placed over sea or land. +getPos behaves similar to +_obj modelToWorld [0.0, 0.0, 0.0] +but it does not give the same result, therefore +(_obj modelToWorld [0.0, 0.0, 0.0]) is not the same as (getPos _obj). +%NextNote% +(23 Nov, 2011) +You can use getPos and setPos on triggers. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosASL +//KeywordEnd// +DescriptionStart: +Returns the object position height above sea level. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosASL object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(23 Feb, 2007) +$Code$ getPosASL _obj select 2;$/Code$ +might sometimes return the vertical position above sea level, but over land for stacked objects, it returns the vertical position above the object beneath it or at least affected by this offset. The same problem exists for getPos. There was a discussion thread in the BIS forums which suggested the use of the command modelToWorld instead to get around this issue where an absolute vertical position is required. ArmA Ver 1.02. +%NextNote% +(27 Mar, 2014) +According to Code Optimisation, this function is the fastest (2x) and should be used instead of getPos, getPosATL and position. +Conversion keep this speed ratio and is structured like: $Code$ ASLtoATL getPosASL Object ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosASLVisual +//KeywordEnd// +DescriptionStart: +Returns an object's rendered 3D position ASL (z value above sea level) in render time scope. Alias of visiblePositionASL. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosASLVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosASLVisual object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosASLW +//KeywordEnd// +DescriptionStart: +Returns the object position height above sea surface (waves included). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosASLW +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosASLW obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosATL +//KeywordEnd// +DescriptionStart: +Returns the position of an object relative to the terrain. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosATL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosATL object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 18, 2015) +If one desires to retrieve an object from an array of object, be sure to wrap your array information in parenthesis. e.g. getPosATL ( myArray select 0 ) ; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosATLVisual +//KeywordEnd// +DescriptionStart: +Returns an object's rendered 3D position ATL (z value above ground) in render time scope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosATLVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosATLVisual object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosVisual +//KeywordEnd// +DescriptionStart: +Returns an object's rendered 3D position (z value above sea when over sea, or above ground when over land) in render time scope. Alias of visiblePosition. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosVisual object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getPosWorld +//KeywordEnd// +DescriptionStart: +Returns PositionWorld, which is PositionASL of the model centre [0,0,0] of an object, rather than transformed boundingCenter or LandContact vertices. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getPosWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getPosWorld object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getRelDir +//KeywordEnd// +DescriptionStart: +Returns direction, which is relative to object's current direction, from given object to another object or position in the range from 0 to 360, the equivalent of BIS_fnc_relativeDirTo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getRelDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object getRelDir position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getRelPos +//KeywordEnd// +DescriptionStart: +Returns position, which is given distance and relative direction away from original object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getRelPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object getRelPos [distance, direction] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +getPos vs getRelPos: getRelPos operates similarly to getPos except in getRelPos the direction is calculated 'relative' to the current object direction whereas getPos's direction is from North. Thus while getPos can take a position array as it's starting point, getRelPos requires an object with its own azithmus heading. +%NextNote% +(3 March, 2016) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getRemoteSensorsDisabled +//KeywordEnd// +DescriptionStart: +Get status of disabled raycasts for remote entities. See disableRemoteSensors for detailed description. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getRemoteSensorsDisabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getRemoteSensorsDisabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getRepairCargo +//KeywordEnd// +DescriptionStart: +Returns the amount of repair resources from empty (0) to full (1) in the cargo space of a repair vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getRepairCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getRepairCargo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 22, 2014) +If the vehicle is not alive, it always returns Nothing, which you should check for using isNil. +If the vehicle is unable to carry that type of cargo, it returns -1.#IND, which you should check for using finite. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getResolution +//KeywordEnd// +DescriptionStart: +Returns an array containing all information about resolution. +The returned Array is as follow: [width, height, 2D viewport width, 2D viewport height, aspect ratio, UI scale] +Note: aspect ratio and UI scale are returned as coefficients and not 16:9 for example. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getResolution +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getResolution +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(05:38, 20 December 2010) +This command can be usefull to play a video (see this function BIS_fnc_playVideo ) in the given format if you've compiled it for different UI scale. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getShadowDistance +//KeywordEnd// +DescriptionStart: +Gets the shadows rendering distance. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getShadowDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getShadowDistance +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(25 October, 2013) +This command required one parameter of any type ( getShadowDistance anything) until Arma 3 ver. 1.06. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getSlingLoad +//KeywordEnd// +DescriptionStart: +Return object which is sling loaded by vehicle +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getSlingLoad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getSlingLoad vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(05 April, 2014) +Returns objNull when nothing is sling loaded. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getSpeed +//KeywordEnd// +DescriptionStart: +Get the speed for the given speed mode. +SpeedMode can be: +"AUTO" +"SLOW" +"NORMAL" +"FAST" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object getSpeed speedMode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getStamina +//KeywordEnd// +DescriptionStart: +Get current stamina (~ seconds until depletion) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getStamina +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getStamina unit; +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getSuppression +//KeywordEnd// +DescriptionStart: +Gets the suppression value of given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getSuppression +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getSuppression unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getTerrainHeightASL +//KeywordEnd// +DescriptionStart: +Returns the terrain height above the sea for the given position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getTerrainHeightASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getTerrainHeightASL position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getText +//KeywordEnd// +DescriptionStart: +Extract text from config entry. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getText config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Mar 28, 2014) +(ArmA3 1.14) It's recommended to use BIS_fnc_GetCfgData or BIS_fnc_returnConfigEntry to get variable cfg data rather than conditioning via isNumber, isText, isArray, getNumber, getText and getArray combination. +Traditional workaround: +$Code$ +_cfg = configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type" +switch ( true ) do +{ +case ( isNumber _cfg): { getNumber _cfg}; +case ( isText _cfg): { getText _cfg}; +case ( isArray _cfg): { getArray _cfg;}; +default { nil }; +}; +$/Code$ +Recommended workaround: +$Code$ +( configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type") call BIS_fnc_GetCfgData ; +$/Code$ +To return default value once entry was not found, we can use BIS_fnc_returnConfigEntry instead of BIS_fnc_GetCfgData. e.g. +$Code$ +[( configFile "CannonFire" "LightExp"),"lifeTime",0] call BIS_fnc_returnConfigEntry ;//0.5 +$/Code$ +To compose collected String into Array, use BIS_fnc_getCfgDataArray instead. E.g. +$Code$ +( configFile "CfgVehicles" _SomeAddonClassName "DestructionEffects" "Smoke1" "type") call BIS_fnc_getCfgDataArray ; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getVariable +//KeywordEnd// +DescriptionStart: +Return the value of variable in the variable space of given object or location. +All available data types combinations: +Namespace getVariable String +Namespace getVariable Array (since Arma 2 1.60) +Object getVariable String +Object getVariable Array +Group getVariable String +Group getVariable Array +Team_Member getVariable String +Team_Member getVariable Array +Task getVariable String +Location getVariable String +Control getVariable String (since Arma 3 v1.55.133553) +Control getVariable Array (since Arma 3 v1.55.133553) +Display getVariable String (since Arma 3 v1.55.133553) +Display getVariable Array (since Arma 3 v1.55.133553) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getVariable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +varspace getVariable name +%NextRawSyntax% +varspace getVariable [name, defaultValue] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getWeaponCargo +//KeywordEnd// +DescriptionStart: +Returns all weapons types and count from the cargo space +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getWeaponCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getWeaponCargo object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +getWPPos +//KeywordEnd// +DescriptionStart: +Returns the position of a selected waypoint of a given group. Waypoints include only those which were placed in the mission editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/getWPPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +getWPPos [group, index] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +glanceAt +//KeywordEnd// +DescriptionStart: +Control what the unit is glancing at (target or Position ). +How frequently the unit is glancing there depends on behaviour. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/glanceAt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit glanceAt position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +globalChat +//KeywordEnd// +DescriptionStart: +Make a unit send a text message over the global radio channel. Does not need to have assigned "itemRadio" to see or transmit the messages. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/globalChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit globalChat chatText +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +In OFP 1.96, this command can be used by a Game_Logic unit, which will result in the text being displayed on screen without any indication of the side of radio source, or quotation marks. For example : gamelogic1 globalchat "hello world" will create the text hello world in the radio log. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +globalRadio +//KeywordEnd// +DescriptionStart: +Make a unit send a message over the global radio channel. The message is defined in the description.ext of the mission and may contain text and sound. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/globalRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit globalRadio radioName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +goggles +//KeywordEnd// +DescriptionStart: +Returns name of currently used goggles (not NVGoggles). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/goggles +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +goggles unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +goto +//KeywordEnd// +DescriptionStart: +In SQS scripts only: Go to given label. +String argument is used here. +Be sure to use double quotes around label name in goto. Define the label with #. Note that Labels are not case sensitive and that labels are searched for from the top of the script, so multiple occurrences of a label will only result in the top most one ever being found. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/goto +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +goto label +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +This function works only inside of SQS script. +The search for labels always begins at the top of the script so that if there are multiple occurrences of a label the first occurrence will always be the one found. +Because of the searching order, it is faster to place loops which are executed often at the top of a script. +Labels are not case sensitive. +Loops which look something like the example below should be avoided as many of them could cause the mission to slow down: +#wait +if (condition) then { goto "wait"} +It is better to use the @ command to wait for a condition to be true, or put a small delay into the wait loop. +Example +While it is not required to include a delay in a loop, such a loop without a delay can cause the script to slow the game down, as the loop will be executed many times before the game engine interrupts the script. +Unless you really want the loop to execute multiple times during a frame, you should include a small delay. +You would need to have many scripts running for this to be a significant issue. +Deciding whether to use a script with a loop or a trigger or even a @ statement to detect a condition is a complicated matter and should be subject to experimentation. +%NextNote% +(August 4, 2006) +A goto command called within a forEach loop, will only execute a single jump to goto, once the forEach loop has finished: +{ goto "wait"} forEach [0,1,2,3,4] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +group +//KeywordEnd// +DescriptionStart: +Returns the group a unit is assigned to. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/group +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 19, 2006) +Few rules about group in OFP:R. +1) When last man in group die or is moved to other group, group will be destroyed, and it can't be used anymore. +2) 1st man joined to empty group will be group leader. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupChat +//KeywordEnd// +DescriptionStart: +Make a unit send a text message over the group radio channel. Must have assigned "itemRadio" to see or transmit the messages. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit groupChat chatText +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupFromNetId +//KeywordEnd// +DescriptionStart: +Get group with given unique ID. For objects use objectFromNetId. As this command is MP only, you can use BIS_fnc_groupFromNetId, which extends the use to SP as well. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupFromNetId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupFromNetId id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupIconSelectable +//KeywordEnd// +DescriptionStart: +Return if groups icon raises onClick and onOver events. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupIconSelectable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupIconSelectable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupIconsVisible +//KeywordEnd// +DescriptionStart: +Return group icons are visible. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupIconsVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupIconsVisible +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupId +//KeywordEnd// +DescriptionStart: +Returns group name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupId group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupOwner +//KeywordEnd// +DescriptionStart: +Returns ID of client to which the group is local. Can be run only from server. When called from client, it always returns 0 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupOwner group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupRadio +//KeywordEnd// +DescriptionStart: +Make a unit send a message over the group radio channel. The message is defined in the description.ext of the mission and may contain text and sound. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit groupRadio radioName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupSelectedUnits +//KeywordEnd// +DescriptionStart: +Returns selected units in source group for normal commanding mode (individual units). For the High Command equivalent, see hcSelected. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupSelectedUnits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupSelectedUnits unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +groupSelectUnit +//KeywordEnd// +DescriptionStart: +Selects a unit from player's group. If player is the leader, the effect of this command is similar to player pressing F1, F2, F3... buttons to highlight units in his squad, after which the unit command menu is shown. If leader is AI, player will get usual communication menu to interact with the leader. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/groupSelectUnit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +player groupSelectUnit [unit, select] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +grpNull +//KeywordEnd// +DescriptionStart: +A non-existing Group. To compare non-existent groups use isNull or isEqualTo : +grpNull == grpNull ; // false +isNull grpNull ; // true +grpNull isEqualTo grpNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/grpNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +grpNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +gunner +//KeywordEnd// +DescriptionStart: +Returns the gunner of a vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/gunner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +gunner vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(2 January, 2007) +The gunner command will only return a single gunner. If the vehicle has occupied, multiple turrets. See this discussion on the official forums, for an alternative: +Need an array with a vehicle's cargo units +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +gusts +//KeywordEnd// +DescriptionStart: +Return the current gusts value. Scale is 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/gusts +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +gusts +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +halt +//KeywordEnd// +DescriptionStart: +Stops the program into a debugger. In retail version using halt results in error. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/halt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +halt +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +handgunItems +//KeywordEnd// +DescriptionStart: +Returns array with all items assigned to the handgun. This command is used for infantry weapons only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/handgunItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +handgunItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +handgunMagazine +//KeywordEnd// +DescriptionStart: +Returns either single element array, containing class name of currently loaded in the handgun magazine, or an empty array if unit has no handgun or handgun is not loaded. This command is used for infantry weapons only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/handgunMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +handgunMagazine unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +handgunWeapon +//KeywordEnd// +DescriptionStart: +Returns the name of a unit's handgun (an empty string if there is none). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/handgunWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +handgunWeapon unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +handsHit +//KeywordEnd// +DescriptionStart: +Checks if a soldier's hands are hit, which results in inaccurate aiming. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/handsHit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +handsHit unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hasInterface +//KeywordEnd// +DescriptionStart: +Returns true if the computer has an interface (a real player). False for a dedicated server or for a headless client. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hasInterface +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hasInterface +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 21, 2014) +$Code$ if ( isDedicated ) then { +//run on dedicated server only +}; +if ( isServer ) then { +//run on dedicated server or player host +}; +if ( hasInterface ) then { +//run on all player clients incl. player host +}; +if (! isDedicated ) then { +//run on all player clients incl. player host and headless clients +}; +if (! isServer ) then { +//run on all player clients incl. headless clients but not player host +}; +if (! hasInterface ) then { +//run on headless clients and dedicated server +}; +if (! hasInterface ! isDedicated ) then { +//run on headless clients only +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hasWeapon +//KeywordEnd// +DescriptionStart: +Checks if a unit has the given weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hasWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName hasWeapon weaponName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(September 11, 2014) +This command doesn't work for Items in Arma 3, use this instead. +$Code$" ItemGPS " in ( items player + assignedItems player ) OR ' ItemGPS ' in ( items player + assignedItems player ) $/Code$ +Returns true if unit has gps in inventory, assigned or not. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcAllGroups +//KeywordEnd// +DescriptionStart: +Returns selected groups in high command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcAllGroups +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hcAllGroups unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcGroupParams +//KeywordEnd// +DescriptionStart: +Returns parameters describing group in high command bar. +Return value is [string, float[4]] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcGroupParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit hcGroupParams group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcLeader +//KeywordEnd// +DescriptionStart: +Returns group's high command commander. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcLeader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hcLeader group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 2, 2009) +hcLeader returns 'NULL_OBJECT' if you use it on your HC commander's group in a HC setup with subordinates. It seems to work as expected if you don't use subordinates. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcRemoveAllGroups +//KeywordEnd// +DescriptionStart: +Remove all groups from unit's high command bar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcRemoveAllGroups +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hcRemoveAllGroups unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcRemoveGroup +//KeywordEnd// +DescriptionStart: +Removes group from unit's high command bar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcRemoveGroup +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit hcRemoveGroup group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcSelected +//KeywordEnd// +DescriptionStart: +Returns selected groups in high command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcSelected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hcSelected unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcSelectGroup +//KeywordEnd// +DescriptionStart: +Select given group in high command bar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcSelectGroup +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit hcSelectGroup array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcSetGroup +//KeywordEnd// +DescriptionStart: +Add group to unit's high command bar. +Array parameters are group, group-name and team (teammain, teamred, teamgreen, teamblue, teamyellow). +Group is the only necessary parameter. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcSetGroup +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit hcSetGroup array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcShowBar +//KeywordEnd// +DescriptionStart: +Shows or hides high command bar. +There must be some groups under HC command to show HC bar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcShowBar +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hcShowBar bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hcShownBar +//KeywordEnd// +DescriptionStart: +Return true if the high command bar is shown/active. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hcShownBar +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hcShownBar +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +headgear +//KeywordEnd// +DescriptionStart: +Returns headgear of unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/headgear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +headgear unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hideBody +//KeywordEnd// +DescriptionStart: +Hides the body of the given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hideBody +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hideBody person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hideObject +//KeywordEnd// +DescriptionStart: +Hide entity. Can be used on soldiers and vehicles, also on static objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hideObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hideObject object +%NextRawSyntax% +object hideObject hidden +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(July 15, 2010) +This command will hide a unit, but he will still shoot enemies. Unit will be invisible, but weapon muzzle are visible. +%NextNote% +Use MP framework to activate this comand on all players from server or any other maschine +$Code$_nic = [nil, mantohide, "per", rHideObject, true ] call RE; //In A3 use hideObjectGlobal instead.$/Code$ +%NextNote% +you can use code as in example 2, where true = ON and false = OFF, if using it like in example 1, you can only turn it ON +%NextNote% +using this locally causes the player/object disappear only locally; has to be executed serverside if used in MP. Hidden Vehicles still emit smoke/rotor blade dust and (probably) still emit engine sounds. Usefull for creating objects the map-creator doesn't want to be seen, like Units that protect a certain Area (like a safe-zone) against teamkillers or enemy units. +%NextNote% +The above comment is partially incorrect, if the effects of the command are local then it must be executed in every machine so it has global effect. If it is run only on the server machine, it will only be hidden on the server, while clients still see it. +%NextNote% +(March 5, 2014) +As of today this now finally has a Global counterpart, just released on the Stable branch. Added it's link under See also. +%NextNote% +(October 30, 2014) +When used on player, it only has an effect on third person mode. First person LOD is still visible. (A3 Dev 1.33) +%NextNote% +(June 27, 2015) +hideObject and hideObjectGlobal disable object collision in addition to rendering. A3 1.45.131175 +(tested by hiding buildings and running through, driving through, flying through, and shooting through where the building used to be) +%NextNote% +(January 26, 2016) +Sometimes it´s easier to teleport the object about 100m under the ground (also JiP Support): +$Code$_obj setPosATL [getPosATL _obj select 0, getPosATL _obj select 1, (getPosATL _obj select 2)-100];$/Code$ +And to unhide: +$Code$_obj setPosATL [getPosATL _obj select 0, getPosATL _obj select 1, (getPosATL _obj select 2)+100];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hideObjectGlobal +//KeywordEnd// +DescriptionStart: +MP command. Hides object on all connected clients as well as JIP. Call on the server only. Can be used on all objects with class names, i.e. ( typeOf object != ""). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hideObjectGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hideObjectGlobal object +%NextRawSyntax% +object hideObjectGlobal hidden +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(June 27, 2015) +hideObject and hideObjectGlobal disable object collision in addition to rendering. A3 1.45.131175 +(tested by hiding buildings and running through, driving through, flying through, and shooting through where the building used to be) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hint +//KeywordEnd// +DescriptionStart: +Outputs a multi-line hint message in the left upper corner of the screen (in the right upper corner in Arma). This version of hint is supposed to play a sound when hint is shown, but this varies between games and versions. Use hintSilent for soundless hint. +The effect of this command is local, i.e. the hint will only show on the computer command was executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hint text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +Hint can be used with formatting like this: +$Code$ hint format ["Hello %1", player ]$/Code$ +%NextNote% +To remove the hint box from the screen, pass a null string ( "" ) to the command. +$Code$ hint ""$/Code$ +%NextNote% +hint happily accepts structured text : +$Code$_starL = " img image='\ca\ui\data\debr_star.paa' align='left'/ "; +_starL = _starL + _starL + _starL; +_starR = " img image='\ca\ui\data\debr_star.paa' align='right'/ "; +_starR = _starR + _starR + _starR; +_title = " t color='#ff0000' size='1.2' shadow='1' shadowColor='#000000' align='center' TITLE /t "; +_text = "Bla bla bla bla bla..."; +hint parseText (_starL + _starR + _title + _text); +$/Code$ +(Tested with 1.14, 1.15 beta and 1.16 beta) +%NextNote% +(October 20, 2014) +Be careful when using hints to visualize the effects of commands using the Debug Console. Hint can accept an undefined variable and neither the error nor the hint is shown, the command simply fails. Also notice how the hint command should be "hint str _o;" +$Code$for "_i" from 0 to 50 do +{ +hint _o; +};$/Code$ +tested in A3 1.32.127785 In a script, an "undefined variable" error will be shown as expected. +%NextNote% +(October 21, 2014) +Contrary to what's written under "Examples", Arma 3 will happily display hints that far exceed screen space. However, as hints get longer, FPS suffers tremendously. +(tested in Debug Console, A3 1.32.127785, using: +$Code$hint str (( nearestObjects [player, ["BUILDING"], 100]) - [player]); [] spawn { sleep 5; systemChat str diag_fps;}; +hint str (( nearestObjects [player, ["BUILDING"], 1000]) - [player]); [] spawn { sleep 5; systemChat str diag_fps;};$/Code$ +Results were: 59.7015 and 5.17297, respectively. Drawing a hint even longer than this, such as nearestObjects with a radius of 10,000 or 100,000 reduces your FPS so much Arma 3 appears to crash, though it doesn't. +Unrelated: Hints will stay on screen for 30 seconds, then fade away over the course of 5 seconds. Tested with: (A3 1.32.127785) +$Code$hint "a";[] spawn{_counter = 0;while {true} do{sleep 1;_counter = _counter + 1;systemChat str _counter;};};$/Code$ +%NextNote% +(February 17, 2015) +An open dialog will pause the 30-second hint fade timer. +(A3 1.38.128937) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hintC +//KeywordEnd// +DescriptionStart: +Displays attractive hint in the center of the screen. Player control is taken away until user presses "Continue". After user confirmation, the content of the hintC is repeated again in a normal hint. This type of hint can also have a title. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hintC +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hintC content +%NextRawSyntax% +title hintC [content1, content2,...] +%NextRawSyntax% +title hintC content +%NextRawSyntax% +title hintC content +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +This command must be executed after mission start. If you place it into init.sqs or init field of some unit, it will not work. Just add a little delay (~0.001) and the place the command. +%NextNote% +To display multiple messages after another you have to add a small delay in between. Otherwise only the first message will be displayed. hintC "foo"; sleep 0.1; hintC "bar"; Without a sleep statement hintC will not suspend the script it has been called from. +%NextNote% +HintC can be used with formatting like this: HintC format["Hello %1",player]. +%NextNote% +(March 19, 2015) +"Titled" hintC all use display #72 while "untitled" one uses display #57. If you are trying examples in Arma 3 debug console, add little delay like this: $Code$[] spawn {sleep 0.5;....your example code goes here...};$/Code$ or no hintC will be displayed. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hintCadet +//KeywordEnd// +DescriptionStart: +Shows a text hint only when in cadetMode. +The text can contain several lines. \n is used to indicate the end of a line. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hintCadet +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hintCadet text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +hintCadet can be used with formatting like this: +$Code$ hintCadet format ["Hello %1", player ]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hintSilent +//KeywordEnd// +DescriptionStart: +Same as hint, but without a sound. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hintSilent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hintSilent text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hmd +//KeywordEnd// +DescriptionStart: +Returns class name of currently used Head Mounted Display. Returns an empty string if the slot is empty. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hmd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hmd unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +hostMission +//KeywordEnd// +DescriptionStart: +Host the mp mission described by config class. Should be called as reaction to some UI action in some dialog. +For example you can start a MP scenario from a button. It creates a host and takes you to the lobby with the scenario loaded. +You need to provide the display which is active when the hostMission command is called. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/hostMission +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +hostMission [pConfig, pDisplay] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 03, 2011) +The command must be called in the main menu or something similar menu it seems. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +htmlLoad +//KeywordEnd// +DescriptionStart: +Load HTML from file to given control. File path is relative to current mission dir or an absolute path (with drive letter etc.). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/htmlLoad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control htmlLoad filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 7, 2014) +htmlLoad works with URL's as well as html files. +%NextNote% +(September 7, 2014) +While surprisingly htmlLoad does work with URLs as pointed above, the operation is blocking, meaning the whole game will freeze until the operation is complete. Therefore it is not recommended to use this command in such way. +%NextNote% +(April 21, 2015) +Example use of URL can be found in BIS_fnc_GUInewsfeed with the function browser. +%NextNote% +(October 7, 2015) +(Arma 3) In order to use URLs, they must be included in CfgCommands - allowedHTMLLoadURIs. In order to use URIs with params a wildcard * character is supported +Script Example : +$Code$_newsOnline = http://alivemod.com/alive_news.php?map= + _map + mission= + _mission + player= + _player; +_ctrlHTML htmlLoad _newsOnline;$/Code$ +Config Example: +$Code$class CfgCommands { +allowedHTMLLoadURIs[] += { +http://alivemod.com/alive_news.php* +}; +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +HUDMovementLevels +//KeywordEnd// +DescriptionStart: +Returns movement borders for HUD [min speed, max speed, min alt, max alt, min dir, max dir, position[x,y,z] or target] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/HUDMovementLevels +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +HUDMovementLevels +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +humidity +//KeywordEnd// +DescriptionStart: +Returns the current humidity value. 0 is no humidity and 1 is 100% humidity. Humidity value quickly changes from 0 to 1 when rain starts, then slowly changes from 1 to 0 when rain stops. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/humidity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +humidity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +if +//KeywordEnd// +DescriptionStart: +Description: +The standard if, then, else construct available in many languages. This syntax however has alternate forms in the manner of an Array. +if (condition) then { code } else { code } +if (condition) then [ { code }, { code } ] +Result of the Code executed is returned as the result to this command (which may be Nothing }. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/if +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +image +//KeywordEnd// +DescriptionStart: +Creates a structured text containing the given image. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/image +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +image filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 21, 2009) +Although there is a dedicated image command, parseText gives more options: +$Code$_imageText = parseText " img size='5' color='#ff0000' image='fish.paa'/ "$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +importAllGroups +//KeywordEnd// +DescriptionStart: +Imports all groups into the RTE. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/importAllGroups +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +importAllGroups map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +importance +//KeywordEnd// +DescriptionStart: +Returns a location's importance value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/importance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +importance location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +in +//KeywordEnd// +DescriptionStart: +Checks whether value is in array, unit in vehicle or position inside location. In case of value in array check, String values will be compared on CaSEseNsiTIve basis (see Example 2). Note: In Arma 2 you can not test for arrays within arrays using this command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/in +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +value in array +%NextRawSyntax% +unit in vehicle +%NextRawSyntax% +position in location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(15:58, 18 January 2007 (CET)) +For a case- insensitive test use count : +$Code${_x == "lol"} count ["Lol", "LOL", "loL"]; //returns 3.$/Code$ +Checking if an array (for example a position) is in another array doesn't produce an error, but it will always return false. e.g. +$Code$[0,0,0] in [[0,0,0],[1,4,3],[5,3,1]]; //returns: false.$/Code$ +%NextNote% +(August 23, 2014) +As of Arma 3 1.26: +$Code$[0,0,0] in [[0,0,0],[1,4,3],[5,3,1]]; //returns true +[1,2,3] in [[1,2,3],[4,5,6]]; //returns true +$/Code$ +Assuming it is now using comparison as found in isEqualTo +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inArea +//KeywordEnd// +DescriptionStart: +Checks whether given position is inside given area. The area is usually a rectangle or an ellipse defined similar to triggerArea format. Hence argument for this command could be a trigger, a marker, a location or an array in format [center, a, b, angle, isRectangle]. This command also supports hexagon area which can be created from ellipse when both a and b are negative. Hexagon ellipses are also supported by both marker creation and drawEllipse +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position inArea trigger +%NextRawSyntax% +position inArea marker +%NextRawSyntax% +position inArea location +%NextRawSyntax% +position inArea [center, a, b, angle, isRectangle] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +incapacitatedState +//KeywordEnd// +DescriptionStart: +Returns the incapacitated state of the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/incapacitatedState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +incapacitatedState person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +independent +//KeywordEnd// +DescriptionStart: +Pre-defined variable for the independent side. +Alias for resistance. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/independent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +independent +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inflame +//KeywordEnd// +DescriptionStart: +Control fireplace burning. Set inflame to true (on) or false (off). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inflame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +fireplace inflame burn +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inflamed +//KeywordEnd// +DescriptionStart: +Check if fireplace is inflamed (burning) or not. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inflamed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +inflamed fireplace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inGameUISetEventHandler +//KeywordEnd// +DescriptionStart: +Sets given event handler of in-game UI. If EH function returns true, performed action is overridden. Event handlers available are: +"PrevAction" - mouse scroll up +"Action" - action key press +"NextAction" - mouse scroll down +This is "set" type EH, which means it will replace previously set EH of the same type. So to remove EH, set another one with empty string "" for the function. +Since Arma 3 v1.49.131743 this EH returns array of params for selected/activated action in _this variable: +0: Object - target object to which action is attached +1: Object - caller object, basically player +2: Number - index of the action in action menu (0 - top most) +3: String - engine based action name ("User" for user added actions) +4: String - localized action plain text as seen by the caller +5: Number - action priority value +6: Boolean - action showWindow value +7: Boolean - action hideOnUse value +8: String - action shortcut name or "" +9: Boolean - action menu visibility (on first scroll or action press the menu is still invisible, so no action is performed, only menu is shown) +10: String - EH event name +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inGameUISetEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +inGameUISetEventHandler [handlerName, function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inheritsFrom +//KeywordEnd// +DescriptionStart: +Returns base entry of config entry. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inheritsFrom +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +inheritsFrom config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Apr 2, 2014) +(A3 1.14)Use BIS_fnc_returnParents if a parents' collection of the given entry is needed. +$Code$ +[( configFile "CfgVehicles" "Land_Atm_02_F"), true ] call BIS_fnc_returnParents ; +//return: ["Land_Atm_02_F","House_Small_F","House_F","House","HouseBase","NonStrategic","Building","Static","All"] +$/Code$ +Not all entries have parent, and please differ parents from path. +$Code$ +inheritsFrom ( configFile "CfgUIColors" "IGUI" "Presets" "PresetA1" "Variables"); +//return: Nothing +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +initAmbientLife +//KeywordEnd// +DescriptionStart: +Initialize the ambient life. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/initAmbientLife +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +initAmbientLife +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inPolygon +//KeywordEnd// +DescriptionStart: +Checks whether position is inside given polygon +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inPolygon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position inPolygon polygon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inputAction +//KeywordEnd// +DescriptionStart: +Return the state of input devices mapped to given input action. +For Arma 3 inputActions see: inputAction/actions. +For Arma 3 inputActions bindings see: inputAction/actions/bindings. +For earlier Arma editions see Category:Key Actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inputAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +inputAction name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(07:38, 15 October 2010 (CEST)) +This command also returns values other than 0 and 1 (like 0.02 or 1.3). Any value greater than zero usually signals that the key or button is pressed. inputAction does not work reliably when used in RscDisplayMission's onKeyDown event handler (the same is probably true for other input related event handlers). +%NextNote% +(May 8, 2014) +inputAction does not return the actual state of the queried key when a dialog screen is open. Instead, it will always return 0. +%NextNote% +(July 31, 2015) +inputAction is capable of returning the state of analog inputs. This includes mouse, joystick, and even TrackIR. A joystick axis will return a value from 0 to 1, while mouse movement returns the rate of change, which can be 1. +Right mouse click is currently not supported, but right mouse hold is. http://feedback.arma3.com/view.php?id=25015 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +inRangeOfArtillery +//KeywordEnd// +DescriptionStart: +Returns true if all given units are able to fire at given position with given magazineType. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/inRangeOfArtillery +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +pos inRangeOfArtillery [[unit], magazineType] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(July 10, 2015) +Using an empty artillery vehicle will return false. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +insertEditorObject +//KeywordEnd// +DescriptionStart: +Insert an object to the editor and assign arguments. Create script is,not called. Returns the ID of the new EditorObject. Subtype class is,optional. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/insertEditorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map insertEditorObject [type,value,[name1,value1,...],subtype class] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(May 7, 2015) +"This works only in the old 3D editor" - KM +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +intersect +//KeywordEnd// +DescriptionStart: +Finds named selections in object which are in specified LOD, intersected by given section of a line. Return value is in the form of [selection, distance]. Multiple returned arrays are nested within a single array. No intersection returns []. lodName could be one of the following: +"FIRE" +"VIEW" +"GEOM" +"IFIRE" - ("I" stands for Indirect, almost the same as FIRE) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/intersect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +[object, lodName] intersect [begPos, endPos] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(Jul 25, 2007) +The most common LOD is " FIRE ", which identifies the most detailled hitbox used for ammunition. +%NextNote% +(Mar 27, 2014) +Example (In ArmA3 ver 1.14) display returned arrays on cursor entities: +$Code$ +Sto = []; +Fn = { +{ +Sto set [_foreachindex,[cursortarget,_x] intersect [(asltoagl (eyepos player)),(screentoworld [0.5,0.5])]]; +} foreach ["FIRE","VIEW","GEOM","IFIRE"]; +hintsilent format ["FIRE: %1, VIEW: %2, GEOM: %3, IFIRE: %4",Sto select 0,Sto select 1,Sto select 2,Sto select 3]; +}; +["sample_id","onEachFrame","Fn"] call BIS_fnc_addStackedEventHandler; +$/Code$ +Return FIRE: [something], VIEW: [something], GEOM: [something], IFIRE: [something]. +%NextNote% +(August 20, 2015) +intersect will spam.rpt if passed to it object has no skeleton. Use getModelInfo to filter out those objects. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +is3DEN +//KeywordEnd// +DescriptionStart: +Returns true if the Eden Editor is currently being used. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/is3DEN +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +is3DEN +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +is3DENMultiplayer +//KeywordEnd// +DescriptionStart: +Returns true if the Eden Editor is in multiplayer mode. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/is3DENMultiplayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +is3DENMultiplayer +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isAbleToBreathe +//KeywordEnd// +DescriptionStart: +If unit is diving and doesn't have a re-breather, it returns false. Diving means the unit's head is underwater. If unit is underwater and has a re-breather, the command returns true. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isAbleToBreathe +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isAbleToBreathe unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isAgent +//KeywordEnd// +DescriptionStart: +Check if team member is an agent. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isAgent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isAgent teamMember +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isArray +//KeywordEnd// +DescriptionStart: +Check if config entry represents array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isArray +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isArray config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isAutoHoverOn +//KeywordEnd// +DescriptionStart: +Return true if vehicle has enabled auto hover. (always returns false if the vehicle can't set auto hover) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isAutoHoverOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isAutoHoverOn vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isAutonomous +//KeywordEnd// +DescriptionStart: +Returns true if UAV is in autonomous mode. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isAutonomous +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isAutonomous uav +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isAutotest +//KeywordEnd// +DescriptionStart: +Returns true if game was started with autotest parameter +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isAutotest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isAutotest +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isBleeding +//KeywordEnd// +DescriptionStart: +Returns whether the unit is bleeding. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isBleeding +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isBleeding unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isBurning +//KeywordEnd// +DescriptionStart: +Returns whether the unit is burning. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isBurning +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isBurning unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isClass +//KeywordEnd// +DescriptionStart: +Check if config entry represents config class. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isClass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isClass config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 2, 2007) +This command allows you to check for the presence of an addon. +isClass (configFile "cfgVehicles" "MyCustomCar") +will return true if the addon "MyCustomCar" is installed, and false if it is not installed. +You will have to know under which class the addon is categorized (in this case "cfgVehicles") to be able to use the right config path. +%NextNote% +(Mar 31, 2014) +(ArmA3 ver 1.14) According to BI Dev Karel Mořický, BIS_fnc_getCfgIsClass provides a comfortable workaround with custom config under description.ext compared with isClass. (But as a function created specifically for A3 campaign, it is in no way intended as a replacement for isClass. So it is not suggested to use it for configFile classes. But isClass instead.) +E.g. +$Code$["Something1","Something2","Something3"] call bis_fnc_getCfgIsClass //Same as isClass (missionconfigfile "Something1" "Something2" "Something3")$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isCollisionLightOn +//KeywordEnd// +DescriptionStart: +Returns true if vehicle collision lights are on otherwise false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isCollisionLightOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isCollisionLightOn vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(April 6, 2015) +Bind Collision light action to UserAction 2 +$Code$this addAction ["", { +_this select 1 action [ +["CollisionLightOn", "CollisionLightOff"] select isCollisionLightOn (_this select 0), +_this select 0 +]; +}, "", -10, false, true, "User2", "_this == driver _target"];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isCopilotEnabled +//KeywordEnd// +DescriptionStart: +Returns true if copilots actions are enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isCopilotEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isCopilotEnabled vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(February 17, 2014) +Only returns whether or not the actions are enabled and shown to the pilot and co-pilot. This will still return TRUE if the pilot uses the 'Lock Controls' action to disable co-pilot controls. +You can use the Arma 3 Event Handler - Controls Shifted to detect 'Take Controls' or 'Release Controls' actions +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isDedicated +//KeywordEnd// +DescriptionStart: +Return true if the machine (executing the command) is a dedicated multiplayer server. In single player returns false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isDedicated +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isDedicated +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 21, 2014) +$Code$ if ( isDedicated ) then { +//run on dedicated server only +}; +if ( isServer ) then { +//run on dedicated server or player host +}; +if ( hasInterface ) then { +//run on all player clients incl. player host +}; +if (! isDedicated ) then { +//run on all player clients incl. player host and headless clients +}; +if (! isServer ) then { +//run on all player clients incl. headless clients but not player host +}; +if (! hasInterface ) then { +//run on headless clients and dedicated server +}; +if (! hasInterface ! isDedicated ) then { +//run on headless clients only +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isDLCAvailable +//KeywordEnd// +DescriptionStart: +Returns true if the DLC is marked as available. (Steam) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isDLCAvailable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isDLCAvailable appid +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 19, 2014) +appid can be taken from Steam DLC url. +Karts url is http://store.steampowered.com/app/ 288520 / +Zeus url is http://store.steampowered.com/app/ 275700 / +DLC bundle url is http://store.steampowered.com/app/ 304400 / +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEngineOn +//KeywordEnd// +DescriptionStart: +Returns true if engine is on, false if it is off. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEngineOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isEngineOn vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(March 20, 2015) +isEngineOn returns true for static objects without an engine +%NextNote% +(April 6, 2015) +Bind Engine action to User Action 1 +$Code$this addAction ["", { +_this select 1 action [ +["EngineOn", "EngineOff"] select isEngineOn (_this select 0), +_this select 0 +]; +}, "", -10, false, true, "User1", "_this == driver _target"];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEqualTo +//KeywordEnd// +DescriptionStart: +Performs strict comparison between var1 and var2 and returns true if equal, otherwise false. +Some differences between isEqualTo and == : +It performs case sensitive comparison on Strings +It doesn't throw error when comparing different types, i.e. ("eleven" isEqualTo 11) +It can compare Arrays, Scripts and Booleans ( alive player isEqualTo true ) +It can compare non-existent game objects ( grpNull isEqualTo grpNull ) +It can compare Namespaces ( As of Arma 3 v1.47 ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEqualTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +var1 isEqualTo var2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 19, 2014) +The behavior of "var1 isEqualTo var2" is pretty much equivalent to "var1 in [var2]", plus the ability to compare arrays, and slightly better performance. +%NextNote% +(December 3, 2014) +Simply put, "isEqualTo" is a binary comparison. Therefor it is very fast but only accepts 100% identical matches. In some other languages this is known as " " instead of " ". +%NextNote% +(May 21, 2015) +A faster, case-sensitive alternative to BIS_fnc_areEqual using isEqualTo : +$Code$KK_fnc_allEqual = { +private ["_arr", "_first"]; +_arr = []; +_first = _this select 0; +for "_i" from 0 to count _this - 1 do { +_arr pushBack _first; +}; +_arr isEqualTo _this +}; +// Example +[[1,2],[1,2],[1,3]] call KK_fnc_allEqual; //false$/Code$ +%NextNote% +(May 21, 2015) +Array "compare" implementation using isEqualTo, a faster, case-sensitive alternative to BIS_fnc_arrayCompare : +$Code$KK_fnc_compare = { +_this select 0 isEqualTo (_this select 1) +}; +// Example +[[1,2,3],[1,2,3]] call KK_fnc_compare; //true$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEqualType +//KeywordEnd// +DescriptionStart: +Compares 2 values by their type. A much faster alternative to typeName a == typeName b. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEqualType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +val1 isEqualType val2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEqualTypeAll +//KeywordEnd// +DescriptionStart: +Compares types of all elements of an array to the type of a single value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEqualTypeAll +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +arr isEqualTypeAll val +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 25, 2015) +This command will return false if the array on the left side is empty ([]) regardless of the sample value. +$Code$[] isEqualTypeAll "" +- false +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEqualTypeAny +//KeywordEnd// +DescriptionStart: +Compares type of given value to every type in the given array and if match is found, true is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEqualTypeAny +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +val isEqualTypeAny types +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEqualTypeArray +//KeywordEnd// +DescriptionStart: +Compares types of all elements of one array to types of all elements of another array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEqualTypeArray +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +arr1 isEqualTypeArray arr2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isEqualTypeParams +//KeywordEnd// +DescriptionStart: +Compares types of all elements of input array to types of all elements of template array. Similar to isEqualTypeArray however this command is designed for fast validation of functions params, so there are differences: +Input can be anything but will be expected to be an Array, otherwise false is returned +Input array can be longer but not shorter than template array, will return false if shorter +nil could be used in template type array as a wild card to allow any type match +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isEqualTypeParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +input isEqualTypeParams template +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isFilePatchingEnabled +//KeywordEnd// +DescriptionStart: +Returns true if file patching is enabled otherwise false +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isFilePatchingEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isFilePatchingEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isFlashlightOn +//KeywordEnd// +DescriptionStart: +Returns true if there is a linked and enabled flashlight on a given weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isFlashlightOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit isFlashlightOn weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isFlatEmpty +//KeywordEnd// +DescriptionStart: +Checks given position against given filter params. Filter includes checks for: +If there are any objects closer than given distance from given position (in 2D) +If the area around position is flat enough to match given gradient +If the given position is over water or land +If the given position is over shore line +The gradient seems to correlate with general hill steepness: 0.1 (10%) ~6 o, 0.5 (50%) ~27 o, 1.0 (100%) ~45 o, etc.There are also some oddities about this command that need to be noted: +Objects accounted for proximity check seem to be static objects. Nearby vehicles and units do not seem to affect the output +Given position will be magically transferred into given position + getTerrainHeightASL value +The second element must be -1 ( = 0 really) at all times, otherwise command becomes unusable +The command might be a bit heavy on computations so avoid frequent and large area checks +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isFlatEmpty +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position isFlatEmpty [minDistance, -1, maxGradient, maxGradientRadius, overLandOrWater, shoreLine, ignoreObject] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isForcedWalk +//KeywordEnd// +DescriptionStart: +Returns true if player is forced to walk with forceWalk. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isForcedWalk +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isForcedWalk unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isFormationLeader +//KeywordEnd// +DescriptionStart: +Returns true if the specified unit is subgroup leader. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isFormationLeader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isFormationLeader unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isHidden +//KeywordEnd// +DescriptionStart: +Return whether the person is hidden (reached the hiding position). For command that tests general visibility of an object use isObjectHidden +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isHidden +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isHidden person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isInRemainsCollector +//KeywordEnd// +DescriptionStart: +Checks if unit or vehicle is queued for disposal after death. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isInRemainsCollector +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isInRemainsCollector remain +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isInstructorFigureEnabled +//KeywordEnd// +DescriptionStart: +True if instructor figure is enabled in Game Options. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isInstructorFigureEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isInstructorFigureEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isIRLaserOn +//KeywordEnd// +DescriptionStart: +Returns true if there is a linked and enabled IR on the given weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isIRLaserOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit isIRLaserOn weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isKeyActive +//KeywordEnd// +DescriptionStart: +Checks whether the given key is active in the current user profile. +See keys, keysLimit and doneKeys in the description.ext file of the missions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isKeyActive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isKeyActive keyName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isKindOf +//KeywordEnd// +DescriptionStart: +Checks whether the object is (a subtype) of the given type. While main syntax and alt syntax support only CfgVehicles, CfgAmmo and CfgNonAIVehicles, alt syntax 2 allows to specify any config, including mission config. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isKindOf +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object isKindOf typeName +%NextRawSyntax% +typeName1 isKindOf typeName2 +%NextRawSyntax% +typeName1 isKindOf [typeName2, targetConfig] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 23, 2007) +This command can be used on the whole hierarchical class tree (i.e. when checking a HMMWV, one could test for "HMMWV50", "Car", "LandVehicle", etc., all of which would return true.) +%NextNote% +(16 Apr, 2008) +It appears isKindOf is limited to the CfgVehicles branch of the class hierachy. +So CfgWeapons, CfgMagazines, etc will return false for checks like: +("M9" isKindOf "Pistol") returns false +%NextNote% +(8 Nov, 2009) +In a2 isKindOf also works for CfgAmmo in addition to CfgVehicles: ("M_9M311_AA" isKindOf "MissileBase") returns true. NOT for CfgWeapons, CfgMagazines and others.. +%NextNote% +(June 16, 2015) +In case you cannot use isKindOf because of the reasons stated, just use BIS fnc returnParents with class names as return value: +$Code$ _isKindOf = "Rifle" in [( configFile "CfgWeapons" "BWA3_G36K"), true ] call BIS_fnc_returnParents ; // is true$/Code$ +%NextNote% +(September 6, 2015) +In A3 isKindOf works well with CfgWeapons and CfgMagazines using the syntax from example 3. +It should be prefered to James' solution as it performs more than 25x faster. Tested in debug console with the following code snippets: +$Code$bool = "CA_Magazine" in ([( configFile "CfgMagazines" "HandGrenade"),true] call BIS_fnc_returnParents ); -- 0.12111ms$/Code$ +$Code$bool = "HandGrenade" isKindOf ["CA_Magazine", configFile "CfgMagazines"]; -- 0.00439453ms$/Code$ +When checking in CfgVehicles the syntax from example 2 performs a little faster. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isLightOn +//KeywordEnd// +DescriptionStart: +Returns true if vehicle headlights are on otherwise false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isLightOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isLightOn vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isLocalized +//KeywordEnd// +DescriptionStart: +Checks whether given string name is localized. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isLocalized +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isLocalized stringName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isManualFire +//KeywordEnd// +DescriptionStart: +Returns true if manual fire is on. +Always returns false for a soldier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isManualFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isManualFire vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isMarkedForCollection +//KeywordEnd// +DescriptionStart: +Checks whether the object is marked for weapons collection. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isMarkedForCollection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isMarkedForCollection object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isMultiplayer +//KeywordEnd// +DescriptionStart: +Return true if multiPlayer. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isMultiplayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isMultiplayer +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isNil +//KeywordEnd// +DescriptionStart: +Tests whether the variable defined by the String argument is undefined, or whether an expression result passed as Code is undefined. +The command returns true if the variable or the expression result is undefined (i.e. the expression result is Void ), and false in all other cases. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isNil +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isNil variable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +I recently had a strange experience with this command. I forgot to wrap the name of the variable with quotes, and it returned the opposite of the true null status of the variable. Just something to watch out for. +%NextNote% +^ If you don't wrap the name of the variable in quotes, then it will instead read the value of the variable itself. If that variable is a string or code, then the command will use that string or code held by the variable. Example: +_myvar = _hisvar ; +isnil _myvar; +//will return true if _hisvar is null +_myvar = {tank1}; +sleep (random 50); +isnil _myvar; +//will return if tank1 is nil, at the time the isnil command is checked (not at the time _myvar is established) +-- General Barron 10:37, 30 December 2009 (CET) +%NextNote% +isNil is also able to check if an expression is undefined. As such, an alternative way to check variables would be: +isNil {variable} +you can use this method to also check if variables defined using setVariable exist as well: +isNil {player getVariable Something } +As well as testing if a function returns a value +func_ChangeVehicleName = +{ +_this setVehicleVarName newName ; +}; +if (isNil {player call func_ChangeVehicleName}) // returns true, because this function does not return anything +%NextNote% +(September 25, 2014) +While isNil isn't available in OFP/CWA you can easily emulate it with something like this: +_nil = format[ %1,_nilstring]; +?(format[ %1,foo]==_nil): foo = Hello World! +%NextNote% +(October 25, 2014) +You can also use isNil to check if an array element exists or if a setVariable variable exists +$Code$_array = [0,1,2,3]; +if (isNil {_array select 4}) then {hint "Element does not exist";};$/Code$ +$Code$if ( isNil { missionNamespace getVariable "MY_VARIABLE"})$/Code$ +When trying to test array elements, you can only test elements that are 1 element out of range. Testing elements 2 or more elements out of range will result in a script error. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isNull +//KeywordEnd// +DescriptionStart: +Checks whether the tested item is Null. +Which null type the item has to be equal to depends on the type of game entity tested: +Objects - objNull +Controls - controlNull +Displays - displayNull +Groups - grpNull +Locations - locationNull (since ARMA 2) +Tasks - taskNull (since ARMA 2) +Scripts - scriptNull (since Arma 3 1.29.127075) +Configs - configNull (since Arma 3 1.53.133130) +Note: A test via == does not work, because, for example, objNull is not equal to anything, not even to itself. Use isEqualTo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isNull entity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 9, 2015) +isNull does not work with the TEAM_MEMBER type. +Use this instead: +$Code$_tmember isEqualTo teamMemberNull$/Code$ +%NextNote% +(December 9, 2015) +The note in the description does not apply to the CONFIG type, probably due to backwards compatibility. +$Code$configNull == configNull +- true +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isNumber +//KeywordEnd// +DescriptionStart: +Check if config entry represents number. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isNumber config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isObjectHidden +//KeywordEnd// +DescriptionStart: +Checks visibility of a given object on the local machine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isObjectHidden +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isObjectHidden object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isObjectRTD +//KeywordEnd// +DescriptionStart: +Returns true if RTD model is loaded +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isObjectRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isObjectRTD helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isOnRoad +//KeywordEnd// +DescriptionStart: +Checks if given position is on road. Same as roadAt, only return is boolean instead of road object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isOnRoad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isOnRoad position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isPipEnabled +//KeywordEnd// +DescriptionStart: +Returns true if Picture in Picture (Render to Texture) is enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isPipEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isPipEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isPlayer +//KeywordEnd// +DescriptionStart: +Check if given person is a human player. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isPlayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isPlayer person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(1 August, 2006) +This is not the same as testing object == player, because in MP it tests for any player, not only for the local one. If object is a vehicle, the test is done for the vehicle commander. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isRealTime +//KeywordEnd// +DescriptionStart: +Returns true if the mission editor is operating in real time mode. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isRealTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isRealTime map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isServer +//KeywordEnd// +DescriptionStart: +Returns true if the machine (executing the command) is the server in a multiplayer game or is running single player. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isServer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isServer +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 8, 2011) +You can use isServer inside the condition of a trigger to have the trigger activate only for the server. All other conditions for the trigger will be checked across all machines, but it will only activate the trigger created on the server. For example: $Code$this isServer $/Code$ +%NextNote% +(December 21, 2014) +$Code$ if ( isDedicated ) then { +//run on dedicated server only +}; +if ( isServer ) then { +//run on dedicated server or player host +}; +if ( hasInterface ) then { +//run on all player clients incl. player host +}; +if (! isDedicated ) then { +//run on all player clients incl. player host and headless clients +}; +if (! isServer ) then { +//run on all player clients incl. headless clients but not player host +}; +if (! hasInterface ) then { +//run on headless clients and dedicated server +}; +if (! hasInterface ! isDedicated ) then { +//run on headless clients only +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isShowing3DIcons +//KeywordEnd// +DescriptionStart: +Returns true if the editor is set to draw 3D icons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isShowing3DIcons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isShowing3DIcons map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isSprintAllowed +//KeywordEnd// +DescriptionStart: +Returns true if player is allowed to sprint +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isSprintAllowed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isSprintAllowed unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isStaminaEnabled +//KeywordEnd// +DescriptionStart: +Check if stamina depletion is enabled +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isStaminaEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isStaminaEnabled unit; +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isSteamMission +//KeywordEnd// +DescriptionStart: +Returns true if the current mission is a Steam Workshop mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isSteamMission +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isSteamMission +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isStreamFriendlyUIEnabled +//KeywordEnd// +DescriptionStart: +True if stream friendly UI is enabled in Game Options. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isStreamFriendlyUIEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isStreamFriendlyUIEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isText +//KeywordEnd// +DescriptionStart: +Check if config entry represents text. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isText config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isTouchingGround +//KeywordEnd// +DescriptionStart: +Returns true if object is touching the ground. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isTouchingGround +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isTouchingGround object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(June 1, 2014) +If you are using this command as a validation method, it should not be the sole thing you are checking for, as the result is often inaccurate. For example, it returns false for some helicopters when landed on the roof of certain buildings, and it always returns false for boats, even if they are beached. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isTurnedOut +//KeywordEnd// +DescriptionStart: +Returns true if given unit is turned out, otherwise false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isTurnedOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isTurnedOut unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isTutHintsEnabled +//KeywordEnd// +DescriptionStart: +True if tutorial hints are enabled in Game Options. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isTutHintsEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isTutHintsEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isUAVConnectable +//KeywordEnd// +DescriptionStart: +Returns true if UAV is connectable by AV terminal(s). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isUAVConnectable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object isUAVConnectable [uav, checkAllItems] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isUAVConnected +//KeywordEnd// +DescriptionStart: +Returns true if UAV is connected to some terminal. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isUAVConnected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isUAVConnected uav +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isUniformAllowed +//KeywordEnd// +DescriptionStart: +Check whether given uniform can be dressed by target soldier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isUniformAllowed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit isUniformAllowed type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isWalking +//KeywordEnd// +DescriptionStart: +Returns true if walk is toggled (W+S in Arma 3). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isWalking +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isWalking unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(March 8, 2015) +To expand on the limited description, this command doesn't necessarily say whether or not the unit is currently walking. All it says is that walking is toggled on or off. This command can still return true when the unit is sprinting. When walking is toggled on, the unit will return to walking pace when not sprinting. When walking is toggled off, the unit will return to jogging pace when not sprinting. This command is not intended to gauge a units current movement speed. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isWeaponDeployed +//KeywordEnd// +DescriptionStart: +Returns true if weapon is currently deployed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isWeaponDeployed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isWeaponDeployed unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(July 1, 2015) +You can force a unit out of bipod or resting with: +$Code$_unit playMove "";$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +isWeaponRested +//KeywordEnd// +DescriptionStart: +Returns true if weapon is currently rested. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/isWeaponRested +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +isWeaponRested unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +(July 1, 2015) +You can force a unit out of bipod or resting with: +$Code$_unit playMove "";$/Code$ +%NextNote% +(July 12, 2015) +As of 1.49 $Code$ isWeaponRested player $/Code$ is the only current use of this command. You cannot detect remote player and you cannot detect local unit that is not a player. Might as well be a nullar command without argument. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +itemCargo +//KeywordEnd// +DescriptionStart: +Get array with items from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/itemCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +itemCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +items +//KeywordEnd// +DescriptionStart: +Returns an array of names of all special items of a vehicle or a soldier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/items +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +items unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(June 18, 2013) +Arma 3, version 0.70 - magazines, explosives, grenades and all items currently linked on the unit are not returned now. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +itemsWithMagazines +//KeywordEnd// +DescriptionStart: +Returns combined array including all unit's items and all unit's magazines. Loaded magazines such as currentMagazine, primaryWeaponMagazine, secondaryWeaponMagazine, handgunMagazine as well as assignedItems are excluded. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/itemsWithMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +itemsWithMagazines unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +join +//KeywordEnd// +DescriptionStart: +Join all units in the array to given group. +Maximum number of group members is: +OFP: 12 +Arma: ? +Arma 2: ? +Arma 3: "unlimited" (3000+) +VBS 2: "unlimited" (260+) +To have a group member leave a group, join him with the grpNull group (e.g. [guy1] join grpNull) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/join +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitArray join group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +joinAs +//KeywordEnd// +DescriptionStart: +Joins the unit to the given group, if position id is available, this one is used. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/joinAs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit joinAs [group, id] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +joinAsSilent +//KeywordEnd// +DescriptionStart: +Joins the unit to the given group, if position id is available, this one is used. Avoid any radio communication related to joining. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/joinAsSilent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit joinAsSilent [group, id] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +I haven't done a thorough test but this function doesn't seem to work for Civilians, use joinSilent instead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +joinSilent +//KeywordEnd// +DescriptionStart: +Join all units in the array to given group silently (without radio message). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/joinSilent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitArray joinSilent group +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(August 4, 2014) +If all units of a group are joined to another group then the first group will be NULL-group afterward. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +joinString +//KeywordEnd// +DescriptionStart: +Joins array into String with provided separator. Array can be of mixed types, all elements will be converted to String prior to joining, but the fastest operation is on the array of Strings. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/joinString +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array joinString separator +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbAddDatabase +//KeywordEnd// +DescriptionStart: +Register knowledge base database to given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbAddDatabase +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbAddDatabase filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbAddDatabaseTargets +//KeywordEnd// +DescriptionStart: +Register target list knowledge base database to given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbAddDatabaseTargets +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbAddDatabaseTargets filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbAddTopic +//KeywordEnd// +DescriptionStart: +Register conversation topic to given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbAddTopic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbAddTopic [TopicName, filename.bikb, filename.fsm, event_handler] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +.bikb extension is by convention only. It can be anything. +There is no default extension. +Even tho bikb's are standard class text they cannot be raPified. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbHasTopic +//KeywordEnd// +DescriptionStart: +Check if conversation topic was registered to given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbHasTopic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbHasTopic TopicName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbReact +//KeywordEnd// +DescriptionStart: +Pass a non-verbal communication to the receiver. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbReact +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbReact [receiver,topic,sentenceID,[argumentName,argumentValue,argumentText,argumentSpeech],...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbRemoveTopic +//KeywordEnd// +DescriptionStart: +Unregister conversation topic from given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbRemoveTopic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbRemoveTopic TopicName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbTell +//KeywordEnd// +DescriptionStart: +Make the person tell to the receiver the sentence. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbTell +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbTell [receiver, TopicName, SentenceClass, [argumentName, argumentValue, argumentText, argumentSpeech],...,forceRadio] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +// In Config file +class CfgIdentities +{ +class SSMHQ +{ +name = $STR_DN_WARFARE_HQ_BASE_UNFOLDED; +face = Face97 ; +glasses = None ; +speaker = MaleA0EN ; +pitch = 1.0; +}; +}; +// IN BIKB +class Sentences +{ +class AirstrikeRequest +{ +text = %team requesting close air support at grid %location ; +speech[]={%Team,RequestingCloseAirSupportAtGrid,%Location}; +class Arguments +{ +class Team {type = simple ;}; +class Location {type = simple ;}; +}; +}; +}; +class Arguments{}; +class Special {}; +startWithVocal[] = {}; +startWithConsonant[] = {}; +// In Script file +BIS_SSM_HQWEST = (createGroup west) createUnit [ Logic, [10,10,1000], [], 0, NONE ]; +BIS_SSM_HQWEST setGroupId [ Headquaters, SIX ]; +BIS_SSM_HQWEST setIdentity SSMHQ_EN ; +player kbAddtopic[ Airstrike, BIKB]; +BIS_SSM_HQWEST kbAddtopic[ Airstrike, BIKB]; +player kbTell [BIS_SSM_HQWEST, Airstrike, AirstrikeRequest, [ Team,{}, Anvil,[ Anvil ]],[ Location,{}, Strelka,[ Strelka ]],true]; +%NextNote% +(may 02, 2010) +Jezuro help on BIforum : [1] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +kbWasSaid +//KeywordEnd// +DescriptionStart: +Check if given item was said by person to someone. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/kbWasSaid +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person kbWasSaid [receiver, topic, sentenceID, maxAge] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +keyImage +//KeywordEnd// +DescriptionStart: +Returns a structured text, containing an image or name (if no image is found) of the button, on the keyboard, mouse or joystick, with the given code. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/keyImage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +keyImage dikCode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +keyName +//KeywordEnd// +DescriptionStart: +Returns the name of a button (on the keyboard, mouse or joystick) with the given code. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/keyName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +keyName dikCode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +knowsAbout +//KeywordEnd// +DescriptionStart: +Checks if a group or a side knows about target. If who is a unit, unit's group is considered, if who is a vehicle, commander's group is considered. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/knowsAbout +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +who knowsAbout target +%NextRawSyntax% +side knowsAbout target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +With Resistance (1.91) : No matter what class of unit the target is and no matter what the skill/class of the enemy AI, the magic 'knowsAbout' number is 0.105. +With CWC (1.46) : No matter what class of unit the target is and no matter what the skill/class of the enemy AI, the magic 'knowsAbout' number is 0.7. +What this means is, the AI will not fire on an enemy soldier until his 'knowsAbout' level of that enemy has reached the 'magic number' or higher. +This suggests that the knowsabout level must reach the magic threshold before a unit knows if another unit is an enemy or a friendly unit. +Triggers and knowsabout level: "Detected by xxx" triggers also follow the above rules. For a detected trigger to be set off, the knowsAbout level must reach the magic number. +Also... As soon as An AI unit gets hit with a bullet his knowsAbout level for the unit that shot him will instantly jump to 1.5, even if the shooter is 1000m away. Vice versa is also true. If An AI soldier's knowsAbout level for an enemy is 0.7 and the soldier fires and hits the enemy, his knowsAbout level about the enemy will instantly jump to 1.5. Some editors have found, whilst using this command over the years, that the following characteristics have cropped up: +AI enemies have a very limited amount of peripheral vision, it's not nearly as good as a human player's. A target must be in front of the unit for him to be noticed, so if you sprint right behind an enemy, this value doesn't increase. +Depending on the units skill level, it can take a little time for the unit to notice a target. So if you run right past a unit, this value might not increase. +Bushes between the unit and the target seem to have little effect on this value, and trees definitely have no affect. You may be in a forest, and can't see the unit, but he can see you. +MP Note knowsAbout returns a viable result only if left-hand parameter unit is local. +%NextNote% +(January 15, 2007) +In OFP v1.96, KnowsAbout return values range from 0 to 4. +All units in a group have equal knowsAbout for any given target. All units in a group always return knowsAbout 4 about each other. This suggests groups share a single knowledge base. +Without any contact with the target, the knowsAbout value decays at a linear rate so that it halves over 120 seconds. After this time is up knowsAbout drops instantly to 0. +If the distance between the all of unit's group and the target exceeds the viewdistance setting, knowsAbout instantly drops to 0. This is not changed by fog or daylight. +Note that in OFP unit see all the targets that his group members see. The data is processed between teammembers freely. +%NextNote% +the magic 'knowsAbout' number is 0.105. It's not that simple.Maybe true for infantry but not all vehicles. "Reveal" command sets knowsAbout to 1, but planes still won't fire at soldiers on the ground. There's only one known way to pass through this - designate target with another fake infantry unit near the target. As soon as this fake unit see the target knowsAbout lifts up to 2.5-4 and even single enemy soldiers are attacked rom the air (of course if plane has suitable munition :)) +%NextNote% +(July 05, 2009) +In ArmA (other not tested), KnowsAbout value will stay at its highest value during approximately 2-3 min and then reinitialized. +%NextNote% +(January 14, 2012) +Notes are for OA 1.60 : +The KnowsAbout value drops immediately back to zero, if the distance between both units is larger than the local viewDistance value. +After 110 seconds without (visible?) contact, the KnowsAbout value drops to zero again. While it seemed to take longer the higher the KnowsAbout value is (at least for a value of 4 it took almost six minutes at one point), I was unable to reproduce/confirm that. It is 110 seconds no matter how high the KnowsAbout value it seems. +%NextNote% +(June 13, 2012) +By Suma ( source ): +All friendly units within a view distance to each unit [are revealed (to the player? or each friendly?)] on the mission start. The code is half broken, as it does not make the units known, it only sets the "accuracy" value for them. Note: This is not affecting enemy units at all. +%NextNote% +(March 27, 2013) +Arma-II OA (1.62.101.480 @ACE), tests with infantry: +It is still true, that the command returns values between 0 (lowest) and 4 (most). Freshly Spotted units will have at least 1.5, slowly decreasing when the target disappeared. +The following Table shows my test results on a clear day at Takistan using the Vector. Please note that the returned values vary considerably depending on weather and time. Moonlight however seems to not have any considerable effect. +12:00, sunlight, clear sky +Distance +knowsAbout +1530 +1.5 +1370 +1.5 +1250 +1.5 +1135 +1.5 +1055 +1.52 +1022 +1.64 +990 +1.74 +833 +2.5 +720 +3.37 +600 +3.81 +505 +3.86 +400 +3.92 +380 +4 +365 +4 +21:00, bright half moon, clear sky +Distance +knowsAbout +285 +1.5 +120 +1.5 +88 +1.89 +75 +2.3 +61 +3.9 +23:00, pitch black, clear sky, NVG on +Distance +knowsAbout +600 +1.5 +487 +1.5 +390 +1.5 +289 +2.22 +278 +2.4 +%NextNote% +(May 31, 2014) +Can also use SIDE in place of UNIT. For example: +$Code$EAST knowsAbout player ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +land +//KeywordEnd// +DescriptionStart: +Force helicopter landing. Landing mode may be: +"LAND" (complete stop) +"GET IN" (hovering very low, for another unit to get in) +"GET OUT" (hovering low,for another unit to get out) +"NONE" (cancel a landing) Available since ArmA 2 57463 build. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/land +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +helicopter land mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Helos will land at the nearest "H" or "Invisible H", if there is one around (within 500m in ArmA). +%NextNote% +To make a helicopter LAND correctly and not hovering over the landing position use unitReady to check if the helicopter already has reached his destination. +You can fix a landing bug by using a short delay bevore checking the unitReady command. +_helicopter move (getPos _destination); +sleep 3; +while { ( (alive _helicopter) !(unitReady _helicopter) ) } do +{ +sleep 1; +}; +if (alive _helicopter) then +{ +_helicopter land LAND ; +}; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +landAt +//KeywordEnd// +DescriptionStart: +Order an AI airplane to land at a given airport. ID is the number to identify which airport on the island you want. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/landAt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +plane landAt id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +ARMA 3: +Altis : +0 = Airbase +1 = AAC Airfield +2 = Krya Nera Airstrip +3 = Selakeno Airfield +4 = Molos Airfield +5 = Almyra Salt Lake Airstrip +tom_48_97 17:56, 21 September 2010 (CEST) +ARMA 2 OA: +Takistan : +0 = Airport NorthWest +1 = Airport SouthEast +Planes approach all airports from South West +ARMA 2: +Utes : +0 = There is only one airport +Chernarus : +0 = Airport NorthWest close to Grishno +1 = Airport NorthEast close to Kranostav +2 = Airport SouthWest close to Balota +3 = Nearest Airport +Planes approach all airports from South East +ARMA: +Sahrani : +0: - Paraiso +1: - Rahmadi +2: - Pita +3: - Antigua +%NextNote% +(November 8, 2014) +In Arma 3 (1.34) landAt only works for fixed-wing aircraft. Rotary-wing craft ignore this command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +landResult +//KeywordEnd// +DescriptionStart: +Return the result of helicopter landing position searching (performed, after land command). The value can be "Found" (position found),"NotFound" (position not found), "NotReady" (position searching is,still in progress) or empty string when wrong argument given. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/landResult +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +landResult helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +language +//KeywordEnd// +DescriptionStart: +Returns current game language. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/language +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +language +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +laserTarget +//KeywordEnd// +DescriptionStart: +Returns laser target object created by given unit (gunner in vehicle or on foot) when using "Laserdesignator" or another laser targeting device. Laser target object is global and can be retrieved from any PC. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/laserTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +laserTarget unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(December 15, 2010) +Need to be try with a soldier and laser designator +%NextNote% +(December 19, 2010) +Works with either infantry or vehicles. Returns objNull if no target is present +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbAdd +//KeywordEnd// +DescriptionStart: +Adds an item with the given text to the listbox or combobox with id idc of the topmost user dialog. +It returns the index of the newly added item. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbAdd [idc, text] +%NextRawSyntax% +control lbAdd text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +%NextNote% +(April 12, 2015) +This command can be very very frustrating to use because it does not output any errors if unable to function. +Often, the 2nd provided syntax needs to be used like this: +$Code$_giveYourControlAname = (findDisplay 7) displayCtrl 9; +_addThisToListBox = "Option"; +_giveYourControlAname lbAdd _addThisToListBox;$/Code$ +Where "7" is the "idd" of the dialog you made in your ".hpp" file and where "9" is the "idc" of the RscListBox or RscComboBox. +The code above will add an option named "Option" to the ListBox or ComboBox. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbClear +//KeywordEnd// +DescriptionStart: +Clear all items in listbox or combobox with id idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbClear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbClear idc +%NextRawSyntax% +lbClear control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbColor +//KeywordEnd// +DescriptionStart: +Returns the text color of the item with the given index of the listbox or combobox with id idc of the topmost user dialog. +The color is returned in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbColor [idc, index] +%NextRawSyntax% +control lbColor index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbCurSel +//KeywordEnd// +DescriptionStart: +Returns the index of the selected item of the listbox or combobox with id idc of the topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbCurSel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbCurSel idc +%NextRawSyntax% +lbCurSel control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +%NextNote% +(July 11, 2014) +If nothing is selected this command returns -1 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbData +//KeywordEnd// +DescriptionStart: +Returns the additional text (invisible) in an item with the given index of the listbox or combobox with id idc of the topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbData [idc, index] +%NextRawSyntax% +control lbData index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbDelete +//KeywordEnd// +DescriptionStart: +Removes the item with the given index from the listbox or combobox with id idc of the topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbDelete +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbDelete [idc, index] +%NextRawSyntax% +control lbDelete index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbIsSelected +//KeywordEnd// +DescriptionStart: +Check whether given row of the given listbox is selected. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbIsSelected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control lbIsSelected index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbPicture +//KeywordEnd// +DescriptionStart: +Returns the picture name of the item with the given index of the listbox or combobox with id idc of the topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbPicture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbPicture [idc, index] +%NextRawSyntax% +control lbPicture index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSelection +//KeywordEnd// +DescriptionStart: +Returns the array of selected rows indices in the given listbox. +Use lbCurSel instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSelection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSelection control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetColor +//KeywordEnd// +DescriptionStart: +Sets the color of the item with the given index of the listbox or combobox with id idc of the topmost user dialog to color. +Colour is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetColor [idc, index, color] +%NextRawSyntax% +control lbSetColor [index, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetCurSel +//KeywordEnd// +DescriptionStart: +Selects the item with the given index of the listbox or combobox with id idc of the topmost user dialog. +To deselect all, use -1: _ctrl lbSetCurSel -1; +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetCurSel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetCurSel [idc, index] +%NextRawSyntax% +control lbSetCurSel index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +%NextNote% +(November 29, 2014) +lbSetCurSel -1 has no effect while the listbox is populated. You should use lbClear first, then lbSetCurSel -1, then re-populate the listbox. +%NextNote% +(March 1, 2015) +Keep in mind that running this command against control will fire attached 'onLBSelChanged' event handler. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetData +//KeywordEnd// +DescriptionStart: +Sets the additional text (invisible) in the item with the given index of the listbox or combobox with id idc of the topmost user dialog to the given data. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetData [idc, index, data] +%NextRawSyntax% +control lbSetData [index, data] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetPicture +//KeywordEnd// +DescriptionStart: +Sets the picture in the item (left) with the given index of the listbox or combobox with id idc of the topmost user dialog. Name is the picture name. The picture is searched for in the mission directory, the dtaExt subdirectory of the campaign directory and the dtaExt directory and the data bank (or directory). +In Arma 3 it might be necessary to set the color of the picture as well with lbSetPictureColor as default [0,0,0,0] color makes picture invisible. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetPicture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetPicture [idc, index, name] +%NextRawSyntax% +control lbSetPicture [index, name] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +%NextNote% +(August 18, 2015) +(ArmA 3) To place an image on the right end of the listItem: $Code$_ctrl lbSetPictureRight [_index, "A3\path\to\image.paa"];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetPictureColor +//KeywordEnd// +DescriptionStart: +Sets the color of item's picture (left) with the given index of the listbox with id idc of the topmost user dialog to the given color. Color is in format Color. Color which consists from only zeros means disable this override. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetPictureColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetPictureColor [idc, index, color] +%NextRawSyntax% +control lbSetPictureColor [index, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +%NextNote% +(August 18, 2015) +(ArmA 3 1.48) To give an image on the right side of a listbox item: +$Code$_ctrl lbSetPictureRightColor [_index, [1,1,1,0.7]];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetPictureColorDisabled +//KeywordEnd// +DescriptionStart: +Sets the disabled color of item's picture (left) with the given index of the listbox with id idc of the topmost user dialog to the given color. Color is in format Color. Color which consists from only zeros means disable this override. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetPictureColorDisabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetPictureColorDisabled [idc, index, color] +%NextRawSyntax% +control lbSetPictureColorDisabled [index, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetPictureColorSelected +//KeywordEnd// +DescriptionStart: +Sets the selected color of item's picture (left) with the given index of the listbox with id idc of the topmost user dialog to the given color. Color is in format Color. Color which consists from only zeros means disable this override. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetPictureColorSelected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetPictureColorSelected [idc, index, color] +%NextRawSyntax% +control lbSetPictureColorSelected [index, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetSelectColor +//KeywordEnd// +DescriptionStart: +Sets the select color of the item with the given index of the listbox or combobox with id idc of the topmost user dialog to color. +Colour is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetSelectColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetSelectColor [idc, index, color] +%NextRawSyntax% +control lbSetSelectColor [index, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetSelectColorRight +//KeywordEnd// +DescriptionStart: +Sets the select color of the of the secondary text (right aligned) of the item with the given index of the listbox or combobox with id idc of the topmost user dialog to color. +Colour is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetSelectColorRight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetSelectColorRight [idc, index, color] +%NextRawSyntax% +control lbSetSelectColorRight [index, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetSelected +//KeywordEnd// +DescriptionStart: +Set the selection state of the given row of the given listbox. Listbox must support multiple selection. +lbSetSelected was obsoleted, Use lbSetCurSel instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetSelected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control lbSetSelected [index, selected] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetTooltip +//KeywordEnd// +DescriptionStart: +Sets tooltip for item with given index of the listbox or combobox with id idc of the topmost user dialog to the given data. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetTooltip +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetTooltip [idc, index, tooltip] +%NextRawSyntax% +control lbSetTooltip [index, tooltip] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSetValue +//KeywordEnd// +DescriptionStart: +Sets the additional integer value in the item with the given index of the listbox or combobox with id idc of the topmost user dialog to the given value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSetValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSetValue [idc, index, value] +%NextRawSyntax% +control lbSetValue [index, value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +%NextNote% +(September 21, 2014) +lbSetValue only accepts integer, no decimal number. +Example: +CONTROL lbSetValue [index,10]; // value will be 10 +CONTROL lbSetValue [index,3.1]; // value will be 3 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSize +//KeywordEnd// +DescriptionStart: +Return number of items of listbox or combobox with id idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSize idc +%NextRawSyntax% +lbSize control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSort +//KeywordEnd// +DescriptionStart: +Sorts listbox entries alphabetically ascending by their text. +Alternative syntax (available since ARMA 3 v1.18) allows descending sorting as well. +Order could be: +"ASC" +"DESC" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSort +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSort control +%NextRawSyntax% +lbSort [control, sortOrder] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbSortByValue +//KeywordEnd// +DescriptionStart: +Sorts the Listbox Entries by their assigned Values. +The Entries getting listed by their Negativity (most negative Value on Top). +Also note that this Command will mix up the Entries randomly if multiple Entries have the same Value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbSortByValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbSortByValue control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +A good way to avoid that this Command will mix your Listbox up is, to assign your Value summed up with the Index ID returned by lbAdd to your Listbox Entries. +Posted: Sep 10 2014 +%NextNote% +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbText +//KeywordEnd// +DescriptionStart: +Returns the shown text in the item with the given index of the listbox or combobox with id idc of the topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbText [idc, index] +%NextRawSyntax% +control lbText index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lbValue +//KeywordEnd// +DescriptionStart: +Returns the additional integer value in the item with the given index of the listbox or combobox with id idc of the topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lbValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lbValue [idc, index] +%NextRawSyntax% +control lbValue index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +More information on the LB command family can be found here +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +leader +//KeywordEnd// +DescriptionStart: +Returns the group leader for the given unit or group. For dead units, objNull is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/leader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +leader unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +leaderboardDeInit +//KeywordEnd// +DescriptionStart: +Deletes internal class for the leaderboard with given name. Returns true if the board has been found and deinitialized. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/leaderboardDeInit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +leaderboardDeInit boardName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +leaderboardGetRows +//KeywordEnd// +DescriptionStart: +Returns an array with values for the given leaderboard, the array is in format: [[player1Name, score, rank], [player2Name, score, rank], [player3Name, score, rank]... ]; This can be called after the one of the row request function has been called and successfully finished! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/leaderboardGetRows +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +leaderboardGetRows boardName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +leaderboardInit +//KeywordEnd// +DescriptionStart: +Initialize the leaderboard structure for board with given name. Returns true if board is already initialized. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/leaderboardInit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +leaderboardInit boardName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +leaveVehicle +//KeywordEnd// +DescriptionStart: +Ceases the using of the vehicle by a group and unassigns vehicle from the group. If the argument is a single unit, the vehicle will be unassigned from unit's group. After vehicle is unassigned from the group, each individual crew member then unassigned from the vehicle. +In short the command could be hypothetically presented as: +leaveVehicle = un- addVehicle + unassignVehicle forEach crew +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/leaveVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group leaveVehicle vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(August 31, 2013) +In ArmA 3 this command will not force a player to exit from a vehicle. It will unassign vehicle role for this player. AI crew however will also disembark. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +libraryCredits +//KeywordEnd// +DescriptionStart: +Returns the credits for the libraries used by the game. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/libraryCredits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +libraryCredits +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +libraryDisclaimers +//KeywordEnd// +DescriptionStart: +Returns the library disclaimers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/libraryDisclaimers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +libraryDisclaimers +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lifeState +//KeywordEnd// +DescriptionStart: +Returns the life state of the given unit. Can be one of: +(Pre-Arma 3) +"ALIVE" +"DEAD" +"DEAD-RESPAWN" +"DEAD-SWITCHING" +"ASLEEP" +"UNCONSCIOUS" +(Arma 3) +"HEALTHY" +"DEAD" +"DEAD-RESPAWN" +"DEAD-SWITCHING" +"INCAPACITATED" +"INJURED" +In Arma 3 lifeState seems to change to "INJURED" when damage aliveUnit = 0.1 (0.1 seems to be the value defined in config under "InjuredTreshold"). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lifeState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lifeState unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lightAttachObject +//KeywordEnd// +DescriptionStart: +Attach light to given object at given position on object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lightAttachObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light lightAttachObject [object, position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(Dec 1, 2006) +Light can be created with command createVehicleLocal with special vehicle class "#lightpoint" +for example: +$Code$_light = "#lightpoint" createVehicleLocal pos; +_light setLightBrightness 1.0; +_light setLightAmbient [0.0, 1.0, 0.0]; +_light setLightColor [0.0, 1.0, 0.0]; +_light lightAttachObject [_object, [0,0,0]]; +$/Code$ +%NextNote% +(March 31, 2015) +When attached, movement is slow to update (jumpy). Use attachTo when attaching a light to moving objects. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lightDetachObject +//KeywordEnd// +DescriptionStart: +Detach light from object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lightDetachObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lightDetachObject light +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lightIsOn +//KeywordEnd// +DescriptionStart: +Check if lampost is on (shining). For working with CfgNonAIVehicles class "StreetLamp" only. Possible values are: +"ON" +"OFF" +"AUTO" (auto is only on during the night). +"ERROR" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lightIsOn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lightIsOn lamppost +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Use switchLight to turn lamposts on and off. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lightnings +//KeywordEnd// +DescriptionStart: +Return the current lightnings value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lightnings +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lightnings +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +limitSpeed +//KeywordEnd// +DescriptionStart: +Limit speed of given vehicle or person to given value (in km/h). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/limitSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName limitSpeed speed +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(9 February 2008) +(A1 1.08.5163)Has only an temporary effect on the vehicle specified (i.e. vehicle goes back to its previous speed right away). So, in order for this command to have a real, noticeable effect, it would have to be issued continuously (e.g. via a script loop, but in A3 1.24 it's unnecessary). +%NextNote% +(29 July 2014) +(A3 1.24)To clarify, limitSpeed only do effect on non-player controlled AI units, it has continuous effect and AI won’t break through the speed limitation until one is contacted, engaged or regrouped. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +linearConversion +//KeywordEnd// +DescriptionStart: +Converts given value from given "from" range to wanted "to" range. If clipping is set to true, the resulting value is guaranteed to be within "to" range no matter what. Say given range is 0 to 1 and wanted range is 0 to 100 (percent calculation). Given value 0.55 then will be linearConversion [0,1,0.55,0,100]; //55 but if given value is 1.1 linearConversion [0,1,1.1,0,100, false ]; //110 or if clipping is true linearConversion [0,1,1.1,0,100, true ]; //100 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/linearConversion +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +linearConversion [minFrom, maxFrom, value, minTo, maxTo, clip] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Mar 29, 2014) +(A3 0.50) It is recommended to use linearConversion instead of BIS_fnc_linearConversion : +$Code$ linearConversion [0,100,50,0,50, true ]; //same as [[0,100],50,[0,50]] call BIS_fnc_linearConversion $/Code$ +As for clamp, true will disable new value out of its range while false won't: +$Code$ linearConversion [0,100,150,0,50, true ]; //return 50 +linearConversion [0,100,150,0,50, false ]; //return 75 +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lineBreak +//KeywordEnd// +DescriptionStart: +Creates a structured text containing a line break. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lineBreak +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lineBreak +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lineIntersects +//KeywordEnd// +DescriptionStart: +Checks for object intersection with a virtual line between two positions. Returns true if intersects with an object. +NOTE: Doesn't work under water. Max harcoded distance is 1000m. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lineIntersects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lineIntersects [begPos, endPos, objIgnore1, objIgnore2] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(may 31, 2012) +Please note the difference : +terrainIntersect +terrainIntersectASL +lineIntersects +lineIntersectsWith +lineIntersectsObjs +intersect +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lineIntersectsObjs +//KeywordEnd// +DescriptionStart: +Returns list of objects intersected by given line from begPos to endPos. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lineIntersectsObjs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lineIntersectsObjs [begPos, endPos, withObj, ignoreObj, sortByDistance, flags] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(Mar 27, 2014) +Example (in ArmA3 ver 1.14) display objects' array in the middle of the screen sorted by 6 flags: +$Code$ +Sto = []; +Fn = { +{ +Sto set [_foreachindex,lineintersectsobjs [(eyepos player),(atltoasl screentoworld [0.5,0.5]),objnull,objnull,false,_x]]; +} foreach [1,2,4,8,16,32]; +hintsilent format [" +ONLY_WATER: %1, +NEAREST_CONTACT: %2, +ONLY_STATIC: %3, +ONLY_DYNAMIC: %4, +FIRST_CONTACT: %5, +ALL_OBJECTS: %6", +Sto select 0,Sto select 1,Sto select 2,Sto select 3,Sto select 4,Sto select 5]; +}; +["sample_id","onEachFrame","Fn"] call BIS_fnc_addStackedEventHandler; +$/Code$ +%NextNote% +(March 29, 2016) +Distance sorting is relative to object model center, and not intersect position. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lineIntersectsSurfaces +//KeywordEnd// +DescriptionStart: +Returns list of intersections with surfaces from begPosASL to endPosASL. If there is ground intersection, it is also included. Works on units. Works underwater. Doesn't return intersection with sea surface. Hardcoded max distance: 5000m. +Since Arma v1.51.131920 it is possible to indicate primary and secondary LOD to look for intersection. Available options are: +"FIRE" +"VIEW" +"GEOM" +"IFIRE" - ("I" stands for Indirect, almost the same as FIRE) +"NONE" +Default LODs are "VIEW" and "FIRE" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lineIntersectsSurfaces +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 27, 2015) +Fast check if object is in a house: $Code$KK_fnc_inHouse = { +lineIntersectsSurfaces [ +getPosWorld _this, +getPosWorld _this vectorAdd [0, 0, 50], +_this, objNull, true, 1, "GEOM", "NONE" +] select 0 params ["","","","_house"]; +if (_house isKindOf "House") exitWith { true }; +false +}; +onEachFrame { hintSilent str ( player call KK_fnc_inHouse)};$/Code$ +%NextNote% +(January 30, 2016) +This command is useful to place weaponholder (and then spawned weapons) on floor of houses, correcting the spawn position (can_collide) to intersect with floor: +$Code$ +MGI_fnc_setPosAGLS = { +params ["_obj", "_pos"]; +_wh_pos = getPosASL _obj; +_pos set [2, (ATLToASL _pos select 2)-10]; +_ins = lineIntersectsSurfaces [_wh_pos, _pos,_obj,objNull, true,1,"VIEW","FIRE"]; +_surface_distance = if (count _ins 0) then [{(_ins select 0 select 0) distance _wh_pos},{0}]; +_wh_pos set [2, (getPosASL _obj select 2) - (_surface_distance)]; +_weaponholder setPosASL _wh_pos; +}; +$/Code$ +After the position (_pos) obtained in BIS_fnc_buidingPositions array: +$Code$ +_weaponholder = createVehicle ["groundWeaponHolder", _pos, [], 0, "CAN_COLLIDE"]; +[_weaponholder,_pos] call MGI_fnc_setPosAGLS; +Then fill your weapon holder. +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lineIntersectsWith +//KeywordEnd// +DescriptionStart: +Returns objects intersecting with the virtual line from begPos to endPos. By default resulting array of intersecting objects is unsorted. To sort by distance set sortByDistance param to true. NOTE: Doesn't work under water. Max hardcoded distance is 1000m. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lineIntersectsWith +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lineIntersectsWith [begPos, endPos, objIgnore1, objIgnore2, sortByDistance] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(may 31, 2012) +Please note the difference : +terrainIntersect +terrainIntersectASL +lineIntersect s +lineIntersect s With +lineIntersect s Objs +intersect +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +linkItem +//KeywordEnd// +DescriptionStart: +Create and assign item to the correct slot. If there is an item in the targeted slot, it gets replaced. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/linkItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit linkItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +list +//KeywordEnd// +DescriptionStart: +List of units that would activate given Trigger. +It returns nothing before the simulation started, i.e. in (undelayed) init.sqf files. Returns a pointer to the trigger's list after the simulation started. Since this is just a reference this means that the value in your local variable will change as the content of the trigger area changes. To permanently copy the returned list to a different variable, use _mylist = +(list triggerOne). +The second example can be used inside the trigger (in that case, no need to name your trigger). +The list returned for trigger of type "Not present" is the same as that returned for type "present". +NOTE: While the command can query any trigger, local or remote, the result will be only for the trigger condition set on the local client. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/list +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +list trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(March 6, 2013) +Calling list immediately after creating a trigger via createTrigger (and setting up activation, area, statements, timeout, etc..), will return null instead of an array. It seems the trigger needs about 1 second to initialise, after which it will behave as expected: returning an array of all the objects inside the trigger (the ones matching the criteria), or an empty array. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +listObjects +//KeywordEnd// +DescriptionStart: +Return the list of all objects of given type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/listObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map listObjects type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ln +//KeywordEnd// +DescriptionStart: +Natural logarithm of x. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ln +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ln x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbAddArray +//KeywordEnd// +DescriptionStart: +Adds list of rows of strings. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbAddArray +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbAddArray [IDC,[[[text,text],[value,..],[data,..]],[[text,text],[value,..],[data,..]],]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbAddColumn +//KeywordEnd// +DescriptionStart: +Adds an column at given position. It returns the index of the newly added column. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbAddColumn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +_ctrl lnbAddColumn position +%NextRawSyntax% +lnbAddColumn [idc] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(A3 1.28) Horizontal coordinates of columns were added relative to list width, in range from 0 to 1. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbAddRow +//KeywordEnd// +DescriptionStart: +Adds an row of strings. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbAddRow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbAddRow [IDC,[ String, String... ]] +%NextRawSyntax% +_ctrl lnbAddRow [ String, String... ] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbClear +//KeywordEnd// +DescriptionStart: +Clears all items in the given listbox or combobox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbClear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbClear idc +%NextRawSyntax% +lnbClear ctrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbColor +//KeywordEnd// +DescriptionStart: +Returns the text color of the item with the given position of the 2D listbox. The color is returned in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbColor [idc, [row, column]] +%NextRawSyntax% +control lnbColor [row, column] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbCurSelRow +//KeywordEnd// +DescriptionStart: +Returns the index of the selected row id 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbCurSelRow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbCurSelRow idc +%NextRawSyntax% +lnbCurSelRow ctrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbData +//KeywordEnd// +DescriptionStart: +Returns the additional text (invisible) in an item with the given position of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbData [idc] ] +%NextRawSyntax% +_ctrl lnbData [row] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbDeleteColumn +//KeywordEnd// +DescriptionStart: +Removes column with given index from ListNBox control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbDeleteColumn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbDeleteColumn [idc,index] +%NextRawSyntax% +ctrl lnbDeleteColumn index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbDeleteRow +//KeywordEnd// +DescriptionStart: +Removes row with the given index from the given listbox or combobox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbDeleteRow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +_ctrl lnbDeleteRow row +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbGetColumnsPosition +//KeywordEnd// +DescriptionStart: +Returns relative screen X of ListNBox control columns position [0.1,0.3,0.6...]. Use lnbSetColumnsPos to set positions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbGetColumnsPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbGetColumnsPosition _ctrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbPicture +//KeywordEnd// +DescriptionStart: +Returns the picture name or path of the item with the given position of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbPicture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbPicture [IDC, [row, column]] +%NextRawSyntax% +control lnbPicture [row, column] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetColor +//KeywordEnd// +DescriptionStart: +Sets the color of the item with the given position of the 2D listbox. Color is in format Color. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetColor [idc,[row,column],color] +%NextRawSyntax% +_ctrl lnbSetColor [ [row,column],color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetColumnsPos +//KeywordEnd// +DescriptionStart: +Sets relative screen X for ListNBox control columns positions. Setter for lnbGetColumnsPosition +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetColumnsPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetColumnsPos [idc, positions] +%NextRawSyntax% +ctrl lnbSetColumnsPos positions +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +See: List Box#LISTNBOX +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetCurSelRow +//KeywordEnd// +DescriptionStart: +Selects the row with the given index of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetCurSelRow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetCurSelRow [idc, index] +%NextRawSyntax% +ctrl lnbSetCurSelRow index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetData +//KeywordEnd// +DescriptionStart: +Sets the additional text (invisible) in the item with the given position of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetData [idc] +%NextRawSyntax% +_ctrl lnbSetData [ [row] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetPicture +//KeywordEnd// +DescriptionStart: +Sets the picture in the item with the given position of the 2D listbox. +Name is the picture name. +The picture is searched in the mission, directory, the dtaExt subdirectory of the campaign directory, and the dtaExt directory and the data bank (or directory). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetPicture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetPicture [IDC, [Row, Column], PicturePathOrPictureName] +%NextRawSyntax% +_ctrl lnbSetPicture [ [Row] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetText +//KeywordEnd// +DescriptionStart: +Sets the additional text (invisible) in the item with the given position of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetText [idc,[row,column],data] +%NextRawSyntax% +_ctrl lnbSetText [ [row,column],data] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSetValue +//KeywordEnd// +DescriptionStart: +Sets the additional integer value in the item with the position index of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSetValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSetValue [idc, [row, column], value] +%NextRawSyntax% +control lnbSetValue [[row, column], value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbSize +//KeywordEnd// +DescriptionStart: +Returns size of 2D listbox or combobox as [rows, columns]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbSize _ctrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbText +//KeywordEnd// +DescriptionStart: +Returns the shown text in the item with the given position of the given 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control lnbText [row,column] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lnbValue +//KeywordEnd// +DescriptionStart: +Returns the additional integer value in the item with the given position of the 2D listbox. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lnbValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lnbValue [idc,[row, column]] +%NextRawSyntax% +ctrl lnbValue [row, column] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 9 2014) +(A3 1.28)As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the listNbox with different spaces. Accessing data with coordinate command at nearly the same syntax: +$Code$ +//Set same value to one position of a Control +_ctrl lnbSetData [ [0,0],"#1"]; +lnbSetColumnsPos [102, [0,1], 1]; +_ctrl lnbSetText [ [0,1], "#1"]; +_ctrl lnbSetValue [ [0,0],1]; +//Accessing the value disregard affecting one another. +_ctrl lnbData [0,0]; //"#1" +lnbGetColumnsPosition _ctrl //[1]; +_ctrl lnbText [0,0];//"#1" +_ctrl lnbValue [0,0];//1 +$/Code$ +For a direct visible control over CT_LISTNBOX: +$Code$ +0 = [_CT_LISTNBOX] spawn { +private ["_CT_LISTNBOX","_color","_current","_pic"]; +disableSerialization ; +_CT_LISTNBOX = _this select 0; +{ +_CT_LISTNBOX lnbAddRow [ getText (_x "displayNameShort"), getText (_x "displayName")]; +_CT_LISTNBOX lnbSetPicture [ [_foreachIndex,0], getText (_x "texture")]; +} forEach (" isClass _x" configClasses ( configFile "CfgRanks")); +_CT_LISTNBOX lnbSetCurSelRow 0; +_current = lnbCurSelRow _CT_LISTNBOX; +_color = _CT_LISTNBOX lnbColor [_current,0]; +_CT_LISTNBOX lnbSetColor [ [_current,1], [(_color select 0)/2,0,0,1] ]; +_CT_LISTNBOX lnbDeleteColumn 0; +_CT_LISTNBOX lnbDeleteRow 1; +sleep 1; +lnbClear _CT_LISTNBOX;//Clear all items but control still remains just invisible. +}; +$/Code$ +A combined use of both invisible and visible data processing commands alive the Control. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +load +//KeywordEnd// +DescriptionStart: +Returns current sum of mass from items stored in all unit's containers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/load +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +load unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadAbs +//KeywordEnd// +DescriptionStart: +Returns current sum of mass from items stored in all unit's containers, linked items and weapons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadAbs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +loadAbs unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadBackpack +//KeywordEnd// +DescriptionStart: +Returns current sum of mass from items stored in a backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +loadBackpack unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadFile +//KeywordEnd// +DescriptionStart: +Return content of given filename. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadFile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +loadFile filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(28 November 2006) +In Armed Assault, the 'loadfile' command must be preceded by the 'compile' command to work. +Ex OFP 1.96: _falarmEvent = loadfile ("syswarn\falarmEvent.sqf") +Ex ArmA 1.0: _falarmEvent = compile loadfile ("syswarn\falarmEvent.sqf") +%NextNote% +(11 July 2007) +The note by Pennywise is not entirely accurate. loadFile only needs to be preceded with compile when loading code (for example, a function contained in an.sqf file ). Using loadFile without compile will return a string, which, in some cases, is exactly what you want. +%NextNote% +(02 December 2012) +Please note that any comment you have within the file you load will be included, to get around that use preprocessFile instead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadGame +//KeywordEnd// +DescriptionStart: +Load a game from the autosave. If failed, restart the mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadGame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +loadGame +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadIdentity +//KeywordEnd// +DescriptionStart: +Loads person's identity from Objects.sav file in campaign directory (from entry name). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadIdentity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person loadIdentity name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadMagazine +//KeywordEnd// +DescriptionStart: +Initiates the loading action on given weapon of the turret of a transport. So the new magazine is not available instantly, yet according to the reloadTime. +The turret has to be manned. One can also change the magazine if its respective weapon is not selected. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +transport loadMagazine [turretPath, weaponName, magazineName] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadOverlay +//KeywordEnd// +DescriptionStart: +Creates the load overlay dialog for the specified type of overlay. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadOverlay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map loadOverlay config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadStatus +//KeywordEnd// +DescriptionStart: +Loads object's properties from Objects.sav file in campaign directory (from entry name). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadStatus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +obj loadStatus entryName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadUniform +//KeywordEnd// +DescriptionStart: +Returns current sum of mass from items stored in a uniform. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +loadUniform unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +loadVest +//KeywordEnd// +DescriptionStart: +Returns current sum of mass from items stored in a vest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/loadVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +loadVest unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +local +//KeywordEnd// +DescriptionStart: +Check if given unit is local on the computer in Multiplayer games (see Locality in Multiplayer for general concepts). +This can be used when some activation fields or scripts need to be performed only on one computer. In Single player all objects are local. +Note1: Map created objects (those placed in Visitor ) are local everywhere. +Note2: Since Arma 3 v1.53.132932 keyword local has been renamed to private for consistency and to avoid any confusion. However, this just makes the third example obsolete. It's core functionality still remains. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/local +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +local object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +In multiplayer, a game logic will always be local to the host computer. This works on both dedicated and player-hosted servers. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +localize +//KeywordEnd// +DescriptionStart: +Used to internationalise text messages. A string is returned from Stringtable.csv (or stringtable.xml) which corresponds to the stringName. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/localize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +localize stringName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(September 12, 2014) +The command localize will strip all HTML tags from your stringtable.xml entries, however there is a way to trick it by substituting tags with HTML code instead: +?xml version = 1.0 encoding = utf-8 ? +Key ID = STR_TEST_KK +Original ![CDATA[ t color='#ff0000' This doesn't work /t ]] /Original +/Key +Key ID = STR_TEST_KK2 +Original lt; t color='#ff0000' gt; This works lt; /t gt; /Original +/Key +$Code$ hint parseText localize "str_test_kk"; //no change of colour$/Code$ +$Code$ hint parseText localize "str_test_kk2"; //hint content is in red$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +locationNull +//KeywordEnd// +DescriptionStart: +A non-existing Location. To compare non-existent locations use isNull or isEqualTo : +locationNull == locationNull ; // false +isNull locationNull ; // true +locationNull isEqualTo locationNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/locationNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +locationNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +locationPosition +//KeywordEnd// +DescriptionStart: +Returns the position of a location. If the location is attached to an object, that object's position is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/locationPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +locationPosition location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 24, 2015) +locationPosition returns a position that is altitude zero ASL. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lock +//KeywordEnd// +DescriptionStart: +Lock vehicle (disable mounting / dismounting) for player. Similar to setVehicleLock when number is used as param. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lock +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName lock locked +%NextRawSyntax% +vehicleName lock lockstate +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(January 9, 2010) +Lock prevents AI persons mounting or dismounting vehicles when ordered to do so and players are prevented from doing both too, but AI will dismount when a vehicle is damaged. +%NextNote% +(September 22, 2010) +If an AI group (eg Mechanized Infantry) has its vehicule locked with its crew in it, it will mount or dismount it anyway. But a player in this group won't be able to enter the vehicle. +%NextNote% +(April 2, 2013) +From Arma 3 version 0.50 can be used Number as lock parameter : +0 - Unlocked +1 - Default +2 - Locked +3 - Locked for player +%NextNote% +(March 4, 2015) +1 - is DEFAULT lock for vehicle placed in editor. Player that is not the leader in a group of AIs will not be able to enter this vehicle. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockCameraTo +//KeywordEnd// +DescriptionStart: +Lock/Unlock stabilized camera (in vanilla used currently only for UAVs) to target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockCameraTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle lockCameraTo [object,turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 10, 2015) +The command also accepts a position (ASL) instead of an object. The vehicle has to have a stabilized optic for this command to work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockCargo +//KeywordEnd// +DescriptionStart: +Lock all cargo positions of a vehicle or lock by index. This command must be executed where vehicle is local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle lockCargo lock +%NextRawSyntax% +vehicle lockCargo [index, lock] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockDriver +//KeywordEnd// +DescriptionStart: +Lock the driver position of the vehicle. This command must be executed where vehicle is local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockDriver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle lockDriver lock +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +locked +//KeywordEnd// +DescriptionStart: +Check if vehicle is locked for Persons. If it is locked, Persons cannot mount / dismount without order. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/locked +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +locked vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(March 4, 2013) +From Arma 3 version 0.50 is return value Number : +-1 - Object is null +0 - Unlocked +1 - Default +2 - Locked +3 - Locked for player +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockedCargo +//KeywordEnd// +DescriptionStart: +Check whether cargo position of the vehicle is locked. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockedCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle lockedCargo cargoIndex +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockedDriver +//KeywordEnd// +DescriptionStart: +Check whether driver position of the vehicle turret is locked. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockedDriver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lockedDriver vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockedTurret +//KeywordEnd// +DescriptionStart: +Check whether gunner position of the vehicle turret is locked. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockedTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle lockedTurret turretPath +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockIdentity +//KeywordEnd// +DescriptionStart: +Locks the identity of a person. This will disable default identity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockIdentity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lockIdentity unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockTurret +//KeywordEnd// +DescriptionStart: +Lock the gunner position of the vehicle turret. This command must be executed where vehicle is local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle lockTurret [turret path,lock] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lockWP +//KeywordEnd// +DescriptionStart: +Disable switching to next waypoint (current waypoint will never complete while lockwp is used). Sometimes used during cut-scenes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lockWP +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName lockWP lock +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +log +//KeywordEnd// +DescriptionStart: +Base-10 logarithm of x. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/log +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +log x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(23:14, 16 Jun 2014) +(A3 1.20) To clarify: +$Code$y = 10 ^ x // x = log y$/Code$ +People use logarithm at the purpose of simplifying multiplication via exponents plus years before. +$Code$23456*45634 = 1.07039e+009 +log 23456 = 4.37025; log 45634 = 4.65929; ( log 23456) + ( log 45634) = 9.02954 +10^(( log 23456) + ( log 45634)) = 10 ^ 9.02954 // same as 23456*45634 +$/Code$ +As modern usage, for instance, to evaluate another exponent when multiple is known (Which magnitude is 4 times stronger than 8.3 earthquake?): +$Code$//_Unknown = log x; 8.3 = log y +// x = 10 ^_Unknown; y = 10 ^8.3 +//x/y = (10 ^_Unknown)/(10 ^8.3) = log 4 +// x/y = _Unknown – 8.3 = 0.6 +//_result = 8.9 magnitude +_result = ( log 4) + 8.3 +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +logEntities +//KeywordEnd// +DescriptionStart: +Creates a log file containing the list of all game entities in scene. +File is created in the same directory as.rpt file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/logEntities +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +logEntities +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +File name example: +logEntities_4688_12-04-2014_12-19-39.log +File content example: +====================== Vehicles ======================= +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:1, Out: 0, NetID:2:3, Pos: [2476.243896][73.782043], N:B_Soldier_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2471.500977][62.477680], N:Snake_random_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2489.192383][73.935181], N:Snake_random_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2487.953857][73.828362], N:Snake_random_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2800.174805][96.234093], N:Rabbit_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2825.378418][2.068635], N:Rabbit_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2888.919434][6.837101], N:Rabbit_F +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:0:0, Pos: [2910.756104][16.089361], N:Rabbit_F +Loc:0, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 1, AnyPl:0, Out: 0, NetID:2:0, Pos: [9.000000][9.000000], N:Logic +Total objects: 9 +Statistics objects: 9 +IsLocal: 8 +IsMarkedToDelete: 0 +IsDestroyed: 0 +IsDamageDestroyed: 0 +IsDamageDead: 0 +IsNotSimulated: 9 +IsVisible: 1 +IsAnyPlayer: 1 +IsOutsideMap: 0 +=================== Slow vehicles ===================== +Total objects: 214 +Statistics objects: 0 +Static objects are accounted in total object count but not included in statistics +IsLocal: 0 +IsMarkedToDelete: 0 +IsDestroyed: 0 +IsDamageDestroyed: 0 +IsDamageDead: 0 +IsNotSimulated: 0 +IsVisible: 0 +IsAnyPlayer: 0 +IsOutsideMap: 0 +=================== Out vehicles ==================== +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:2:1, Pos: [2476.243896][73.782043], N:Supply40 +Loc:1, ForDel:0, Dstr:0, DmgDstr:0, DmgDead:0, Sim:1, Inv: 0, AnyPl:0, Out: 0, NetID:2:2, Pos: [2476.243896][73.782043], N:Supply140 +Total objects: 2 +Statistics objects: 2 +IsLocal: 2 +IsMarkedToDelete: 0 +IsDestroyed: 0 +IsDamageDestroyed: 0 +IsDamageDead: 0 +IsNotSimulated: 2 +IsVisible: 0 +IsAnyPlayer: 0 +IsOutsideMap: 0 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +logNetwork +//KeywordEnd// +DescriptionStart: +Registers new log file recording a network traffic and returns handle of the log. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/logNetwork +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +logNetwork logFile +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 15, 2016) +With his syntax i get an error... - logNetwork "networkLog.txt"; +$Code$ 5:37:06 Error in expression logNetwork "networkLog.txt"; +5:37:06 Error position: logNetwork "networkLog.txt"; +5:37:06 Error lognetwork: Typ Zeichenfolge(STRING), erwartet(except) Array +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +logNetworkTerminate +//KeywordEnd// +DescriptionStart: +Terminates a network log file started with logNetwork with the given handle +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/logNetworkTerminate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +logNetworkTerminate handle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lookAt +//KeywordEnd// +DescriptionStart: +Control what the unit(s) is/are looking at (target or position). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lookAt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit lookAt position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +lookAtPos +//KeywordEnd// +DescriptionStart: +Center the map on,and point the camera at,the position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/lookAtPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map lookAtPos position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazineCargo +//KeywordEnd// +DescriptionStart: +Get array with magazines from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazineCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazineCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazines +//KeywordEnd// +DescriptionStart: +Returns array of type names of all vehicle's magazines. +When applied to a unit (soldier), the command behaves differently and will omit magazines already loaded into unit's weapons. Use currentMagazine to get this information for a currently loaded magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazines vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +In OFP v1.96, if a weapon is loaded with an empty magazine, that magazine will still be counted by this command. The ammo command can be used to check if a unit has any ammunition into it's last magazine. +%NextNote% +(25 November 2011) +This command does not include non-turret weapon magazines, such as smoke, flare or chaff magazines which are usually declared in the root of the vehicle's class, rather than in the Turrets hierarchy. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesAllTurrets +//KeywordEnd// +DescriptionStart: +Returns all magazines (including empty) from all vehicle turrets (including driver turret [-1]) and their ammo counts. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesAllTurrets +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesAllTurrets vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesAmmo +//KeywordEnd// +DescriptionStart: +Returns array of arrays of all vehicle's magazines and their ammo count. When applied to a unit (soldier), the command behaves differently and will omit magazines already loaded into unit's weapons. Use magazinesAmmoFull to return all magazines. +Output format : +[[magazine1],[magazine2],[magazine3]...[magazineN]] +Magazine format : +0: Magazine class name +1: Magazine current ammo count +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesAmmo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 20, 2014) +When used on vehicles this will only return all magazines associated with a single turretPath (which one depends on the actual armament of the vehicle, usually the first armed turretPath or alternatively turretPath [-1]). +If you want to get all turrets' magazines, use allTurrets and magazinesTurret. +-- Actium ( talk ) 15:41, 20 December 2014 (CET) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesAmmoCargo +//KeywordEnd// +DescriptionStart: +Returns an array of subarrays with the type names and ammo left of all the vehicle's cargo or container magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesAmmoCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesAmmoCargo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesAmmoFull +//KeywordEnd// +DescriptionStart: +Returns array of arrays of all vehicle's magazines with extended information about them. +Output format : +[[magazine1],[magazine2],[magazine3]...[magazineN]] +Magazine format : +0: Magazine class name +1: Magazine current ammo count +2: Magazine state (true - loaded, false - not loaded) +3: Magazine type (-1 - n/a, 0 - grenade, 1 - primary weapon mag, 2 - handgun mag, 4 - secondary weapon mag, 65536 - vehicle mag) +4: Magazine location ("Vest", "Uniform", "Backpack", "") or corresponding currentMuzzle +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesAmmoFull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesAmmoFull vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 20, 2014) +When used on vehicles this will only return all magazines associated with a single turretPath (which one depends on the actual armament of the vehicle, usually the first armed turretPath or alternatively turretPath [-1]). +If you want to get all turrets' magazines, use allTurrets and magazinesTurret. +-- Actium ( talk ) 15:40, 20 December 2014 (CET) +%NextNote% +(February 10, 2015) +As Actium said, this function seems to extract data from: +configfile "CfgVehicles" _the_vehicle_you_want "Turrets" "MainTurret" "magazines". +Some vehicles return an empty field {} because magazines are in straight in: +configfile "CfgVehicles" _the_vehicle_you_want "magazines" (often dedicated to flares only). +This is the case of WY-55 Hellcat. This function returns an empty array. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesDetail +//KeywordEnd// +DescriptionStart: +Returns an array of strings with description of all vehicle's magazines, their ammo count (current/default) and their ids. +When applied to a unit (soldier), the command behaves differently and will omit magazines already loaded into unit's weapons. Use currentMagazineDetail to get this information for a currently loaded magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesDetail +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesDetail vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesDetailBackpack +//KeywordEnd// +DescriptionStart: +Returns an array with the type names of all the unit's backpack magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesDetailBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesDetailBackpack unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesDetailUniform +//KeywordEnd// +DescriptionStart: +Returns an array with the type names of all the unit's uniform magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesDetailUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesDetailUniform unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesDetailVest +//KeywordEnd// +DescriptionStart: +Returns an array with the type names of all the unit's vest magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesDetailVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +magazinesDetailVest unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazinesTurret +//KeywordEnd// +DescriptionStart: +Returns all magazines of given turret. Use turret path [-1] for driver's turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazinesTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle magazinesTurret turretPath +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +magazineTurretAmmo +//KeywordEnd// +DescriptionStart: +Returns ammo count of given type from given turret +Broken when vehicle has multiple magazines of the same type +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/magazineTurretAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle magazineTurretAmmo [magazineClass, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mapAnimAdd +//KeywordEnd// +DescriptionStart: +Add next frame to map animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mapAnimAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mapAnimAdd [time, zoom, position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(05:26, 2 February 2007) +In OFP v1.96, the mapAnim series of commands, together with forceMap can only be used in the intro and mission, as it is not possible to access the map from the outro. (not checked, sourced from an old copy of the OFPEC comref) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mapAnimClear +//KeywordEnd// +DescriptionStart: +Clear map animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mapAnimClear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mapAnimClear +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +In OFP v1.96, the mapAnim series of commands, together with forceMap can only be used in the intro and mission, as it is not possible to access the map from the outro. (not checked, sourced from an old copy of the OFPEC comref) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mapAnimCommit +//KeywordEnd// +DescriptionStart: +Play map animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mapAnimCommit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mapAnimCommit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +In OFP v1.96, the mapAnim series of commands, together with forceMap can only be used in the intro and mission, as it is not possible to access the map from the outro. (not checked, sourced from an old copy of the OFPEC comref) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mapAnimDone +//KeywordEnd// +DescriptionStart: +Check if map animation is finished. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mapAnimDone +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mapAnimDone +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +In OFP v1.96, the mapAnim series of commands, together with forceMap can only be used in the intro and mission, as it is not possible to access the map from the outro. (not checked, sourced from an old copy of the OFPEC comref) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mapCenterOnCamera +//KeywordEnd// +DescriptionStart: +control mapCenterOnCamera boolean syntax enables/disables continuous centering of the main map type control on the camera position. Needs to be executed once. +mapCenterOnCamera control syntax centers mini map type control on camera. The command returns world position of the camera. Needs to be executed each frame (preferably inside onDraw EH). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mapCenterOnCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mainmap mapCenterOnCamera enable +%NextRawSyntax% +mapCenterOnCamera minimap +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mapGridPosition +//KeywordEnd// +DescriptionStart: +Returns the map grid position of an object or position. The format is determined by the Grid format specified in the CfgWorlds for the current world. Eg: "024577" or "De82" or similar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mapGridPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mapGridPosition param +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markAsFinishedOnSteam +//KeywordEnd// +DescriptionStart: +Marks current mission as finished on Steam. Returns true if Steam query is successfully started or false otherwise. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markAsFinishedOnSteam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markAsFinishedOnSteam +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerAlpha +//KeywordEnd// +DescriptionStart: +Gets the marker alpha. See setMarkerAlpha. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerAlpha +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerAlpha markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerBrush +//KeywordEnd// +DescriptionStart: +Gets the marker brush. See setMarkerBrush. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerBrush +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerBrush name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerColor +//KeywordEnd// +DescriptionStart: +Get marker colour. See setMarkerColor. Note: This function is identical to getMarkerColor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerColor markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerDir +//KeywordEnd// +DescriptionStart: +Get marker direction. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerDir markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(April 18, 2010) +The direction of the marker is the same as displayed in the editor, so it can both be negative, and be 360 degrees or greater. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerPos +//KeywordEnd// +DescriptionStart: +Get marker Position. Note: This function is identical to getMarkerPos. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerPos markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(March 17, 2014) +Position's Z coordinate will always be 0." +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerShape +//KeywordEnd// +DescriptionStart: +Gets the marker shape. See setMarkerShape for a list of strings that can be returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerShape +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerShape name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerSize +//KeywordEnd// +DescriptionStart: +Get marker size. Note: This function is identical to getMarkerSize. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerSize markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerText +//KeywordEnd// +DescriptionStart: +Get marker text. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerText markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +markerType +//KeywordEnd// +DescriptionStart: +Get type of marker. Note: This function is identical to getMarkerType. See cfgMarkers for a list of standard markers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/markerType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerType markerName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(March 17, 2014) +Using markerType is a good method to determine if a string is a valid marker name, unless the marker type isn't set. $Code$if (markerType "mark1" != "") then {hint "valid marker"}$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +max +//KeywordEnd// +DescriptionStart: +The greater of a,b +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/max +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +a max b +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +members +//KeywordEnd// +DescriptionStart: +Return a list of members in given team. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/members +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +members team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +min +//KeywordEnd// +DescriptionStart: +The smaller of a,b +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/min +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +a min b +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mineActive +//KeywordEnd// +DescriptionStart: +Checks if the given mine is active. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mineActive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mineActive obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mineDetectedBy +//KeywordEnd// +DescriptionStart: +Returns true if mine has been detected by a given side +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mineDetectedBy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +mine mineDetectedBy faction +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +missionConfigFile +//KeywordEnd// +DescriptionStart: +Return root of mission Description.ext entries hierarchy. +! +Since introduction of the Eden Editor, scenario attributes can be configured in the editor itself, not only in the external Description.ext file. To access desired value independently on where it's stored, use the following commands instead: +getMissionConfigValue +getMissionConfig +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/missionConfigFile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +missionConfigFile +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 17, 2015) +missionConfigFile can be used to parse mission.sqm file data as well if it is included into description.ext : +class MissionSQM +{ +#include mission.sqm +}; +Then mission.sqm data can be accessed like this: +$Code$ getNumber ( missionConfigFile "MissionSQM" "version"); //12 - version param in mission.sqm $/Code$ +(courtesy of Master85 ) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +missionName +//KeywordEnd// +DescriptionStart: +Return currently loaded mission file (path to mission.pbo, relative to game exe). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/missionName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +missionName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(2nd August, 2010) +Only works in SP and on the MP Host/DS. It returns the mission pboprefix if available, otherwise the pboname. For clients it returns '__cur_mp'. +%NextNote% +(September 25, 2014) +In OFP (up to v1.96) it returns the mission filename. In CWA (since v1.99), it returns the briefing name instead when in multiplayer. The string displayed is that set in the Intel section of the mission editor. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +missionNamespace +//KeywordEnd// +DescriptionStart: +Returns the global namespace attached to mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/missionNamespace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +missionNamespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +missionStart +//KeywordEnd// +DescriptionStart: +Returns date and time when mission started in format [year, month, day, hour, minute, second]. +Works only in multiplayer, in singleplayer all values are equal to zero [0,0,0,0,0,0] +NOTE : Because missionStart contains the time of the actual start of the mission, it might not be available in pre-init or init, but is guaranteed to be available in post-init when time 0. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/missionStart +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +missionStart +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 25, 2014) +Returns array with date indicating when the mission has started (after briefing screen). In OFP this command is bugged – it works only in multiplayer on a player�hosted machine and on a client. In single player it would return [0,0,0,0,0,0] and on a dedicated server – [1970,1,1,0,0,0]. In CWA this command is fixed. +%NextNote% +(December 30, 2014) +In arma 3 this command returns [0,0,0,0,0,0] in SP, [1970,1,1,0,0,0] on dedicated server and [1970,1,1,0,0,0] initially and then server real time on local headless client. On player clients it shows client's local date and time. Since Arma 3 v1.49 the dedicated server also returns correct mission start date. +%NextNote% +(August 27, 2015) +ArmA 3 1.50: This command now returns the correct values on dedicated server. http://feedback.arma3.com/view.php?id=23373 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +missionVersion +//KeywordEnd// +DescriptionStart: +Returns the version of the current mission. +Mission from the 2D Editor : 12 +Mission from the Eden Editor : 15 and higher (for example current version for Eden Editor mission in Arma 3 v1.57 is 51) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/missionVersion +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +missionVersion +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +mod +//KeywordEnd// +DescriptionStart: +Remainder of a divided by b. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/mod +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +a mod b +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(01:34, 16 April 2006) +Remainder is calculated in real domain. +mod is identical to a % b +You can use mod to round a decimal number down to the nearest whole number. For example: If you wanted to use the command random to generate a whole number between 0 and 5, you could put this in a script: +$Code$_rand = random 6; +_num = _rand - (_rand mod 1); +$/Code$ +In A1, the new commands round, floor or ceil would be the easier way to round. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +modelToWorld +//KeywordEnd// +DescriptionStart: +Converts position from object model space to world space. This command will take into account vectorUp of the object when calculating relative coordinates. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/modelToWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object modelToWorld modelPos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16 Feb, 2007) +The worldPos parameter appears to be a relative offset to the position of object, so it can often simply be [0,0,0]. +Example: to position an object _obj relative to the position of another object _RelObj with on offset of _Offset, try: +_Offset = [_x,_y,_z]; +_worldPos = _RelObj modelToWorld _Offset; +_obj setPos _worldPos; +%NextNote% +(16 Feb, 2007) +The object model space has got its Z-Axis along the object's vectorUp, its Y-Axis along the object's vectorDir, while its X-Axis goes along vectorDir x VectorUp (meaning as the X-Axis in a right-handed cartesian coordiante system ). +%NextNote% +(8 May, 2008) +If your object requires a new direction, ensure you call setDir prior to setPos when using modelToWorld. Calling setDir afterwards will skew its position otherwise. +_ladder setDir _angle; +_ladder setPos (_building modelToWorld [_x, _y, _z]); +%NextNote% +(6 Feb, 2011) +The z height returned changes dynamically with the height of waves beneath the object, if the object is located over sea. The z height returned by getPosATL and getPosASL does not change like this. This was tested by continuously retrieving the position of a static object, like the cross in the empty/corpses category, placed over sea or land. +modelToWorld behaves similar to +getPos _obj +but it does not give the same result, therefore +(_obj modelToWorld [0.0, 0.0, 0.0]) is not the same as (getPos _obj). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +modelToWorldVisual +//KeywordEnd// +DescriptionStart: +Converts position from object model space to world space in render time scope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/modelToWorldVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object modelToWorldVisual modelPos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moonIntensity +//KeywordEnd// +DescriptionStart: +Returns the intensity of the moon's brightness in range 0...1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moonIntensity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +moonIntensity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moonPhase +//KeywordEnd// +DescriptionStart: +Returns the phase of the in-game Moon on the given date in range 0...1, where 0 - new Moon, 1 - full Moon. According to this command the fullest Moon in Arma 3 at midnight is on setDate [4804,7,13,0,0]; +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moonPhase +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +moonPhase date +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +morale +//KeywordEnd// +DescriptionStart: +Checks a current morale level of the unit (-1..+1). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/morale +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +morale unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +move +//KeywordEnd// +DescriptionStart: +Creates a move waypoint on the given position (format Position or Position2D ) and makes it the currently active group waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/move +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group move position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +move3DENCamera +//KeywordEnd// +DescriptionStart: +Moves Eden Editor camera to given position, with or without offset. +Default camera offset: [0,-25,25] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/move3DENCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +move3DENCamera [position,useOffset] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveInAny +//KeywordEnd// +DescriptionStart: +Moves unit to the first available seat in a vehicle. The order of priorities is the same order used in squad command when you order subordinates to get in vehicle to any position and is the same order used in Zeus when you drag units to a vehicle. Seat assignment seems to use the following priority logic: +driver ( moveInDriver ) - commander turret ( moveInCommander ) - gunner turret ( moveInGunner ) - remaining turrets ( moveInTurret ) - cargo ( moveInCargo ). +NOTE : This command will move player into the locked vehicle or seat just as well. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveInAny +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit moveInAny vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveInCargo +//KeywordEnd// +DescriptionStart: +Move soldier into vehicle cargo position (Immediate, no animation). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveInCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName moveInCargo vehicle +%NextRawSyntax% +unitName moveInCargo [vehicle, CargoIndex] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion +If you place a soldier in a vehicle with the moveInCargo command, he wont "know" he's in the vehicle, and thus he won't disembark properly when the vehicle reaches a Transport Unload waypoint. Therefore you have to use the assignAsCargo command, in order for the AI to catch on. Something like this: moveInCargo helo1 this assignAsCargo helo1 +MP Note Functions MoveInCargo can only be called for local soldiers. They will be ignored for remote soldiers. (see Locality in Multiplayer ) +%NextNote% +In OFP v1.96, the moveIn commands will not trigger an associated getIn event. To ensure the getIn event is fired, use the "getIn Cargo" action command. +%NextNote% +In Arma 3 when using the alternative syntax of moveInCargo, it is necessary to call assignAsCargoIndex because it is not called automatically. +$Code$unit1 moveInCargo [heli, 3]; +unit1 assignAsCargoIndex [heli, 3];$/Code$ +Alternatively avoid this broken syntax all together and use: +$Code$unit1 assignAsCargoIndex [heli, 3]; +unit1 moveInCargo heli; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveInCommander +//KeywordEnd// +DescriptionStart: +Move soldier into vehicle commander position (Immediate, no animation). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveInCommander +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName moveInCommander vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +MP Note Functions MoveInCommander can only be called for local soldiers. They will be ignored for remote soldiers. (see Locality in Multiplayer ) +%NextNote% +In OFP v1.96, the moveIn commands will not trigger an associated getIn event. To ensure the getIn event is fired, use the "getIn Commander" action command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveInDriver +//KeywordEnd// +DescriptionStart: +Move soldier into vehicle driver position (Immediate, no animation). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveInDriver +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName moveInDriver vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +MP Note Functions MoveInDriver can only be called for local soldiers. They will be ignored for remote soldiers. (see Locality in Multiplayer ) +%NextNote% +In OFP v1.96, the moveIn commands will not trigger an associated getIn event. To ensure the getIn event is fired, use the "getIn Driver" action command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveInGunner +//KeywordEnd// +DescriptionStart: +Move soldier into vehicle gunner position (Immediate, no animation). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveInGunner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName moveInGunner vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +MP Note Functions MoveInGunner can only be called for local soldiers. They will be ignored for remote soldiers. (see Locality in Multiplayer ) +%NextNote% +In OFP v1.96, the moveIn commands will not trigger an associated getIn event. To ensure the getIn event is fired, use the "getIn Gunner" action command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveInTurret +//KeywordEnd// +DescriptionStart: +Moves the soldier into the vehicle's turret. (Immediately, without animation). turret path is an array of positions inside a turret, or positions inside a turret of a turret. +[0] means first turret. +[0,0] means first turret of first turret. +[0,1] means second turret of first turret. +[1] means second turret. +[1,0] means first turret of the second turret. +[2,0] means first turret of third turret. +And so on... +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveInTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName moveInTurret [vehicle, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(March 6, 2008) +To find out which turrets are available on a vehicle, and what the syntax is, you can use this little script. +%NextNote% +(February 13, 2014) +Examples for nested turrets: +MainTurret = $Code$_soldierOne moveInTurret [_tank, [0]] $/Code$ +CommanderTurret = $Code$_soldierOne moveInTurret [_tank, [0, 0]] $/Code$ +... where: +MainTurret is the standard BIS MainTurret... e.g: +$Code$class Turrets +{ +class MainTurret {}; +};$/Code$ +CommanderTurret is the standard BIS CommanderTurret located on the MainTurret... e.g: +$Code$class Turrets +{ +class MainTurret +{ +class Turrets +{ +class CommanderTurret {}; +}; +}; +};$/Code$ +%NextNote% +(March 18, 2014) +Here is a small function to find available turret paths for a given vehicle. It will only search 2 levels deep, hence called commonTurrets : +$Code$KK_fnc_commonTurrets = { +private ["_arr","_trts"]; +_arr = []; +_trts = configFile / "CfgVehicles" / typeOf _this / "Turrets"; +for "_i" from 0 to count _trts - 1 do { +_arr set [ count _arr, [_i]]; +for "_j" from 0 to count ( +_trts / configName (_trts select _i) / "Turrets" +) - 1 do { +_arr set [ count _arr, [_i, _j]]; +}; +}; +_arr +};$/Code$ +Example call: +$Code$ hint str ( vehicle player call KK_fnc_commonTurrets); //[[0],[0,0]]$/Code$ +See also allTurrets +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveObjectToEnd +//KeywordEnd// +DescriptionStart: +Shifts an editor object to the end of the objects array. This means,that the object will be drawn last (after all other objects). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveObjectToEnd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map moveObjectToEnd object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveOut +//KeywordEnd// +DescriptionStart: +Moves the soldier out of vehicle, immediately, without animation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +moveOut soldier +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(September 12, 2010) +Seems to work only for unconscious - NOT for dead bodies. setPos /ATL/ASL seems to the only working for dead bodies. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveTime +//KeywordEnd// +DescriptionStart: +Returns the current time of the most important RTM animation currently being played on the soldier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +moveTime soldier +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveTo +//KeywordEnd// +DescriptionStart: +Low level command to person to move to given position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person moveTo position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 14, 2010) +moveTo is a low-level command used in FSM called with doFSM or commandFSM. See doFSM for more information about this. Use doMove everywhere else - even in FSM executed with execFSM. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveToCompleted +//KeywordEnd// +DescriptionStart: +Check if latest low level moveTo command is finished. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveToCompleted +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +moveToCompleted person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +moveToFailed +//KeywordEnd// +DescriptionStart: +Check if latest low level moveTo command failed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/moveToFailed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +moveToFailed person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +musicVolume +//KeywordEnd// +DescriptionStart: +Checks the current music volume (set by fadeMusic ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/musicVolume +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +musicVolume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +name +//KeywordEnd// +DescriptionStart: +The name given to a unit using the setIdentity instruction or selected randomly by the game engine if setIdentity has not been used on the unit. If used on vehicle, name of first crew member (in order commander, driver, gunner). If used on an object, "Error: No unit" is being returned. +NOTE: In Arma 3 setName can be used on a person to set name. However in multiplayer name always returns profileName. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/name +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +name param +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Name will return an error for units that have been dead for more than a few seconds. +%NextNote% +(December 15, 2006) +To return the name of the unit that was given in the editor's "name" field, call up the unit's object in a format statement: +hint format["Unit's name: %1",_unitobject] +%NextNote% +(April 14, 2009) +Will return +Error: No vehicle +for JIP players in init.sqf, if no sleep were performed +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +name_location +//KeywordEnd// +DescriptionStart: +Returns the location's name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/name_location +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +name location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Appears to be only for the 3d editor. +%NextNote% +(May 17, 2015) +To return the textual name of a location use text command instead +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nameSound +//KeywordEnd// +DescriptionStart: +Returns the nameSound of a person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nameSound +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nameSound person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearEntities +//KeywordEnd// +DescriptionStart: +Find entities in the sphere with given radius. If typeName(s) is (are) given, only entities of given type (or its subtype) are listed. +This command returns only alive entities. If you need to return dead entities as well use entities command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearEntities +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position nearEntities radius +%NextRawSyntax% +position nearEntities [typeName, radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(27 Mar, 2014) +According to Code Optimisation, this function is the fastest and should be used instead of nearestObjects when suitable. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestBuilding +//KeywordEnd// +DescriptionStart: +Finds the nearest building to a given object or position. A "building" is defined as an object that is of class "House" and contains a path LOD. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestBuilding +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestBuilding position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 18, 2016) +This command doesn't return any house or building placed in editor (with createVehicle ). Use nearestObjects instead: +$Code$ nearestObjects [ player, ["House", "Building"], 50] select 0$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestLocation +//KeywordEnd// +DescriptionStart: +Return the closest location of specified class to a given position. Checked range is unlimited (i.e. covers the whole map). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestLocation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestLocation [position, locationClass] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestLocations +//KeywordEnd// +DescriptionStart: +Returns an array of locations of chosen type(s) within the given radius of the given position, sorted from nearest to farthest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestLocations +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestLocations [position, [locationType,...], radius, sortPosition] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestLocationWithDubbing +//KeywordEnd// +DescriptionStart: +Find the nearest location (to the given position) having it speech non-empty. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestLocationWithDubbing +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestLocationWithDubbing position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestObject +//KeywordEnd// +DescriptionStart: +Returns the nearest object of given type to given position within a sphere. Hardcoded radius is 50 meters. Unlike with nearestObjects, where distance is measured in 2D space, nearestObject will be closest object in 3D space. +If object class type is used, any object derived from the type is found as well (In OFP however, only objects with exactly the type given are found). If object ID passed as an argument (as in example 2) the search range is unlimited. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestObject [position, type] +%NextRawSyntax% +nearestObject position +%NextRawSyntax% +position nearestObject type +%NextRawSyntax% +position nearestObject id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestObjects +//KeywordEnd// +DescriptionStart: +Returns a list of nearest objects of the given types to the given position or object, within the specified distance. If more than one object is found they will be ordered according to distance2D to the object (i.e. the closest one will be first in the array). Alternatively, you use nearObjects command, which doesn't sort results. +position can use the format: +[[x,y,z], ["ClassName",...], radius] +or +[object, ["ClassName",...], radius] +To use it without any ClassName filter: +[object or position, [], radius]. +A list of ClassName types (Tanks eg) can be found in CfgVehicles +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestObjects [position, types, radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(unknown) +To get a list with alive targets for various situations use this construct: +$Code$_nearestTargets = nearestObjects [_submunScanPos, ["VBS2_TANK","TANK"], _scanArea]; +_validNearestTargets = []; +{ if ( alive _x) then {_validNearestTargets set [( count _validNearestTargets),_x];};} forEach _nearestTargets; +$/Code$ +results in _validNearestTargets being filled with targets == alive.. (you could use other conditions there, of course!) +-- Vigilante +%NextNote% +(10. Aug. 2010) +Passing an empty array to define the types will also return objects with no class at all (such as trees, bushes, stones,...). +Example: +$Code$_objects = nearestObjects [_position, [], _radius];$/Code$ +Passing the array ["All"] is not the same and will only return objects that have some sort of class. +%NextNote% +(11.09.2013) +If you want to detect nearby grenades for the position of a unit, for example, using 'nearestObjects' won't work. You have to use +'nearObjects' instead. +$Code$ count ( nearestObjects [_unit, ["GrenadeHand"], 30]) // WON'T WORK$/Code$ +Won't ever return anything but 0. +$Code$ count (_unit nearObjects ["GrenadeHand", 30]) // WORKS!$/Code$ +Will work. +%NextNote% +(March 22, 2014) +The distance from which an object is determined to be inside the radius is calculated from its model center (object modelToWorld [0,0,0]), and not the position returned by getPos/ATL/ASL. If an object is used as the origin from which to scan, distance is calculated from its model center as well. +%NextNote% +(October 26, 2014) +Return all trees in 100m radius around player: +$Code$trees = []; +{ +if ( str _x find ": t_" -1) then { +trees pushBack _x; +}; +} forEach nearestObjects [ player, [], 100];$/Code$ +%NextNote% +(August 27, 2015) +If you use "Man" as the class to look for, it will only find dismounted men. IE, men in vehicles will NOT be found. +%NextNote% +(January 8, 2016) +The first call to this command can take significantly longer then consecutive calls. But even after the objects in given radius were cached, the sorting this command performs could be quite expensive. For example to sort ~7000 object it might take up to 100ms. For performance reasons you can use nearObjects instead, which is basically the same command but without added sorting. +%NextNote% +(March 2, 2016) +In Arma 3, nearestObjects is partially broken and is unable to return nearby placed explosive charges or mines when searching by classnames. Use nearObjects, nearestObject or allMines instead. +Example of non-functional code: +$Code$//always returns nothing, even if there are objects that should be returned +nearestObjects [position player, ["APERSMine_Range_Ammo", "SatchelCharge_Remote_Ammo"], 10]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearestTerrainObjects +//KeywordEnd// +DescriptionStart: +Returns a list of nearest terrain objects of the given types to the given position or object, within the specified distance. If more than one object is found they will be ordered according to distance2D to the object (i.e. the closest one will be first in the array). +In contrast to nearestObjects this command returns terrain placed objects like trees, rocks and buildings which don't necessarily need an associated config class. +position can use the format: +[[x,y,z], ["Type",...], radius] +or +[object, ["Type",...], radius] +To use it without any type filter: +[object or position, [], radius] +Possible type names: "TREE", "SMALL TREE", "BUSH", "BUILDING", "HOUSE", "FOREST BORDER", "FOREST TRIANGLE", "FOREST SQUARE", "CHURCH", "CHAPEL", "CROSS", "ROCK", "BUNKER", "FORTRESS", "FOUNTAIN", "VIEW-TOWER", "LIGHTHOUSE", "QUAY", "FUELSTATION", "HOSPITAL", "FENCE", "WALL", "HIDE", "BUSSTOP", "ROAD", "FOREST", "TRANSMITTER", "STACK", "RUIN", "TOURISM", "WATERTOWER", "TRACK", "MAIN ROAD", "ROCKS", "POWER LINES", "RAILWAY", "POWERSOLAR", "POWERWAVE", "POWERWIND", "SHIPWRECK", "TRAIL" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearestTerrainObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nearestTerrainObjects [position, types, radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearObjects +//KeywordEnd// +DescriptionStart: +Find objects in a sphere with given radius. The first object in the returned array is not necessarily the closest one. If you need returned objects to be sorted by distance, use nearestObjects. If typeName is given, only objects of given type (or its subtype) are listed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position nearObjects radius +%NextRawSyntax% +position nearObjects [typeName, radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 30, 2007) +Units in vehicles are not detected via this command. +%NextNote% +(December 15, 2011) +In the second example, you can't omit the typeName parameter. It's required and you'll get an error if you don't supply it. Use "All" as an alternative to leaving it out. (CO 1.59) +%NextNote% +(January 3, 2013) +If you use the first example, it will return objects many more objects such as pollen, honeybees and crucially, triggers. Triggers will show in the returned array as "no shape" but you can use typeOf to get the classname, which will give "EmptyDetector". This will not return objects that don't have classnames such as plants, stones and some map objects like vehicle wrecks. nearestObjects will find objects without classnames. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearObjectsReady +//KeywordEnd// +DescriptionStart: +Check whether all data are loaded to nearObjects will return in reasonable time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearObjectsReady +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position nearObjectsReady radius +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearRoads +//KeywordEnd// +DescriptionStart: +Find the road segments within the circle of given radius. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearRoads +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +pos nearRoads radius +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(26 Mar, 2011) +NearRoads always gets data in the same order. In a 300 meter radius around Feruz Abad, for example, the first one is in the south-west corner and the last one is in the north-east. +Click below for picture. +[1] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearSupplies +//KeywordEnd// +DescriptionStart: +Find supplies (weapon holders, ammo crates, fuel feeds, other units) in the sphere with given radius. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearSupplies +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +origin nearSupplies radius +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nearTargets +//KeywordEnd// +DescriptionStart: +Returns a list of targets within the defined range. +"Targets" are not restricted to enemy units. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nearTargets +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit nearTargets range +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Febuary 17, 2011) +A subjective cost greater than 0 does not necessarily mean the target is an enemy unit. Any unit, that have yet to be identified by the unit, have a small positive cost in the range 0 to 1. +%NextNote% +(January 15, 2012) +The quality/detail level of the info depends on the knowsAbout value of the sourceUnit about the targetUnit: +For infantry: +] 0, 1.5 [ - side unknown, some position offset, identified as SoldierWB +[ 1.5, 1.6 [ - side identified, subjective cost set +[ 1.6, 2 [ - type identified better (USMC_Soldier_Base) +[ 2, 3.6 [ - type identified precisely (USMC_Soldier) +[ 3.6, 4 ] - position identified precisely +The values seems closely linked to the accuracy value of the given targetUnit class and its parents up in the config tree: +0class CAManBase: Man +1.6class SoldierWB: CAManBase +2class USMC_Soldier_Base: SoldierWB +3.9class USMC_Soldier: USMC_Soldier_Base +For tanks: +] 0, 0.03 [ - side unknown, some position offset, identified as LandVehicle +[ 0.03, 0.13 [ - type identified better (Tank) +[ 0.13, 0.3 [ - type identified better (M1A1) +[ 0.3, 1.5 [ - side identified, subjective cost set +[ 1.5, 3.6 [ - side identified precisely (CIV), subjective cost adjusted +[ 3.6, 4 ] - position identified precisely +The values seems closely linked to the accuracy value of the given targetUnit class and its parents up in the config tree: +0class All +class AllVehicles: All +0.0005class Land: AllVehicles +0.02class LandVehicle: Land +0.12class Tank: LandVehicle +0.25class M1A1: Tank +%NextNote% +(January 17, 2012) +When an unit dies, it's nearTargets array gets emptied after some seconds. +When an unit dies, its reference will get removed from other units nearTargets' arrays immediately. +A target will be removed from the array after about 360 seconds without contact. +%NextNote% +(January 21, 2012) +Position accuracy seems to be a radius in meters from the perceived position. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +needReload +//KeywordEnd// +DescriptionStart: +Return how much vehicle wants to reload its weapons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/needReload +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +needReload vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +netId +//KeywordEnd// +DescriptionStart: +Unique ID of object or group. As this command is MP only, you can use BIS_fnc_netId, which extends the use to SP as well. See also: BIS_fnc_objectVar +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/netId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +netId var +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +netObjNull +//KeywordEnd// +DescriptionStart: +A non existing object. This value is not equal to anything, including itself +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/netObjNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +netObjNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +newOverlay +//KeywordEnd// +DescriptionStart: +Creates the new overlay dialog for the specified type of overlay. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/newOverlay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map newOverlay config +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nextMenuItemIndex +//KeywordEnd// +DescriptionStart: +Returns the next available menu item index. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nextMenuItemIndex +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nextMenuItemIndex map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nextWeatherChange +//KeywordEnd// +DescriptionStart: +Return the remaining time (in seconds) over which the current weather change will occur. +When a weather change finishes, the game engine will automatically generate a new random weather change over a realistic time period (minimum of 90 minutes). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nextWeatherChange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nextWeatherChange +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nil +//KeywordEnd// +DescriptionStart: +Nil value. This value can be used to undefine existing variables. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nil +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +nil +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Note that ArrayName = nil destroys the arrayNAME not the array content. +Array content is 'destroyed' when no more ArrayName s refer to the content. +%NextNote% +Never ever assign a value to nil ! +Doing so creates a global variable with the same name that overrides the "command" nil : +foo = "foo"; +nil = "bar"; +foo = nil; +hint foo; // displays "bar" +%NextNote% +(September 25, 2014) +While isNil isn't available in OFP/CWA you can easily emulate it with something like this: +_nil = format[ %1,_nilstring]; +?(format[ %1,foo]==_nil): foo = Hello World! +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +nMenuItems +//KeywordEnd// +DescriptionStart: +Returns the total number of user-added menu items belonging to the given menu. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/nMenuItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map nMenuItems menuName +%NextRawSyntax% +map nMenuItems index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +not +//KeywordEnd// +DescriptionStart: +not a. +Exactly the same as ! a +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/not +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +not a +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +numberToDate +//KeywordEnd// +DescriptionStart: +Convert float number to a date. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/numberToDate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +numberToDate [year,time] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +objectCurators +//KeywordEnd// +DescriptionStart: +Returns array with all curators which can edit given object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/objectCurators +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectCurators obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +objectFromNetId +//KeywordEnd// +DescriptionStart: +Get object with given unique ID. If object is a group use groupFromNetId. As this command is MP only, you can use BIS_fnc_objectFromNetId, which extends the use to SP as well. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/objectFromNetId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectFromNetId id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +objectParent +//KeywordEnd// +DescriptionStart: +Returns parent of an object if the object is proxy, otherwise objNull. In case of backpack, the parent is a weaponholder or a cargo space of a vehicle or the unit carrying it. Unit in a vehicle will return the vehicle as parent. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/objectParent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectParent object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +objNull +//KeywordEnd// +DescriptionStart: +A non-existent Object. To compare non-existent objects use isNull or isEqualTo : +objNull == objNull ; // false +isNull objNull ; // true +objNull isEqualTo objNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/objNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +objStatus +//KeywordEnd// +DescriptionStart: +Sets the status of an objective that was defined in briefing.html. +Status may be one of: +"ACTIVE" +"FAILED" +"DONE" +"HIDDEN" +To refer to an objective that is named "OBJ_1", for example, use only the index number in this command (i.e. "1" objStatus "HIDDEN"). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/objStatus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectivenumber objStatus status +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onBriefingGroup +//KeywordEnd// +DescriptionStart: +Select a sound declared in the Description.ext of the mission to be played the first time the Group tab is selected in the briefing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onBriefingGroup +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onBriefingGroup soundName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onBriefingNotes +//KeywordEnd// +DescriptionStart: +Select a sound declared in the Description.ext of the mission to be played the first time the Notes tab is selected in the briefing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onBriefingNotes +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onBriefingNotes soundName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(8 Feb, 2007) +In OFP it works only with the sound files defined in the mission's description.ext +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onBriefingPlan +//KeywordEnd// +DescriptionStart: +Select a sound declared in the Description.ext of the mission to be played the first time the Plan tab is selected in the briefing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onBriefingPlan +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onBriefingPlan soundName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 20, 2007) +In OFP 1.96 only sound files defined in the mission description can be played in this way. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onBriefingTeamSwitch +//KeywordEnd// +DescriptionStart: +Select a sound declared in the Description.ext of the mission to be played the first time the TeamSwitch tab is selected in the briefing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onBriefingTeamSwitch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onBriefingTeamSwitch soundName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onCommandModeChanged +//KeywordEnd// +DescriptionStart: +Defines code performed when hc command mode changes either because of (Left Ctrl + Space) shortcut or hcShowBar scripting command. Groups hc mode must contain at least one group for this command to work (see High Command ). Attached code receives _isHighCommand boolean. +i +Since Arma 3 v1.57 a stackable version of this EH is available: CommandModeChanged +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onCommandModeChanged +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onCommandModeChanged code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onDoubleClick +//KeywordEnd// +DescriptionStart: +Defines an action performed when the user double clicks on the map. Command receives:,_pos array position,_units array selected units,_shift,_alt bool key state +NOTE: This is old mission editor command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onDoubleClick +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map onDoubleClick command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onEachFrame +//KeywordEnd// +DescriptionStart: +Runs given statement every frame. +i +Since Arma 3 v1.57 a stackable version of this EH is available: EachFrame +In order to keep compatibility between official and community content the functions BIS_fnc_addStackedEventHandler and BIS_fnc_removeStackedEventHandler should be used instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onEachFrame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onEachFrame statement +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(21 Dec, 2012) +$Code$ onEachFrame {}; //Reset event$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onGroupIconClick +//KeywordEnd// +DescriptionStart: +Defines an action performed when player clicked on group marker (3D or in a map). The code executed once. This EH, unlike onGroupIconOverEnter and onGroupIconOverLeave, has one more param which returns 1 if RMB was pressed, 0 otherwise. +i +Since Arma 3 v1.57 a stackable version of this EH is available: GroupIconClick +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onGroupIconClick +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onGroupIconClick command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onGroupIconOverEnter +//KeywordEnd// +DescriptionStart: +Defines an action performed when player moves pointer over group marker (3D or in a map). The code will execute continuously while pointer is over icon. +i +Since Arma 3 v1.57 a stackable version of this EH is available: GroupIconOverEnter +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onGroupIconOverEnter +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onGroupIconOverEnter command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onGroupIconOverLeave +//KeywordEnd// +DescriptionStart: +Defines an action performed when pointer, previously positioned over icon, is moved away from it (3D or in a map). The code is executed once. +i +Since Arma 3 v1.57 a stackable version of this EH is available: GroupIconOverLeave +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onGroupIconOverLeave +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onGroupIconOverLeave command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onHCGroupSelectionChanged +//KeywordEnd// +DescriptionStart: +Defines an action performed when high command group selection has been changed. +Command receives 2 variables: +_group: Group - last selected/deselected group +_isSelected: Boolean - new selection state of the specific group +The code is executed on every hc group selection change until it is +removed via $Code$ onHCGroupSelectionChanged "";$/Code$ or $Code$ onHCGroupSelectionChanged {};$/Code$ +or replaced by $Code$ onHCGroupSelectionChanged "SomeOtherCommand(s)";$/Code$ or $Code$ onHCGroupSelectionChanged {SomeOtherCommand(s)};$/Code$ +i +Since Arma 3 v1.57 a stackable version of this EH is available: HCGroupSelectionChanged +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onHCGroupSelectionChanged +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onHCGroupSelectionChanged command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onMapSingleClick +//KeywordEnd// +DescriptionStart: +Define action performed when user clicks in map by executing command string. +the string receives 5 (localised in scope) variables: +_this: Anything - Params passed to onMapSingleClick +_pos: Array - Clicked position +_units: Array - Units which were selected (via function keys) before opening the map ( may be non-functional in Arma ) +_shift: Boolean - Whether Shift was pressed when clicking on the map +_alt: Boolean - Whether Alt was pressed when clicking on the map +In Arma 3 the code should return true only if you wish to override default engine handling of the mouse click on map (see example #4) For older games, when click is processed, code should ultimately return true back to the engine. If false is returned, default processing by the game engine is done. Return value of any other type (including Nothing ) is an error. In such case default processing by the game engine is done, and error message may be displayed. +The code is executed on every click, until the Command is +removed via onMapSingleClick "", or +replaced by onMapSingleClick "SomeOtherCommand(s)" +i +Since Arma 3 v1.57 a stackable version of this EH is available: MapSingleClick +In order to keep compatibility between official and community content the functions BIS_fnc_addStackedEventHandler and BIS_fnc_removeStackedEventHandler should be used instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onMapSingleClick +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onMapSingleClick command +%NextRawSyntax% +params onMapSingleClick command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(8 July, 2009) +See my Multiple OnMapSingleClick script to allow you to add multiple events to the onMapSingleClick event. Some minor editing of the scripts would be required to use them in Arma. +%NextNote% +(April 1, 2016) +_units param is supposed to return what groupSelectedUnits returns. Player must be leader and some units in the group must be selected on the group bar. However selected units are connected with group orders menu, which interferes with map click. In other words, when you click on the main map, the map gets focus and group orders menu closes, deselecting any selected unit, so _units is [] pretty much all the time. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onPlayerConnected +//KeywordEnd// +DescriptionStart: +This command will execute attached code whenever a player is connected to a MP session. The code will receive a number of special variables: +_id : Number - is the unique DirectPlay ID. Quite useless as the number is too big for in-built string representation and gets rounded. It is also the same id used for user placed markers. +_name : String - is profileName of the joining player. +_uid : String - is getPlayerUID of the joining player. In Arma 3 it is also the same as Steam ID. +_owner : ( since Arma 3 v1.49 ) Number - is owner id of the joining player. Can be used for kick or ban purposes or just for publicVariableClient. +_jip : ( since Arma 3 v1.49 ) Boolean - is a flag that indicates whether or not the player joined after the mission has started ( J oined I n P rogress). true - when the player is JIP, otherwise false. +i +Since Arma 3 v1.57 a stackable version of this EH is available: PlayerConnected +In order to keep compatibility between official and community content the functions BIS_fnc_addStackedEventHandler and BIS_fnc_removeStackedEventHandler should be used instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onPlayerConnected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onPlayerConnected code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onPlayerDisconnected +//KeywordEnd// +DescriptionStart: +This command will execute attached code whenever a player is leaving an MP session. The code will receive a number of special variables: +_id : Number - is the unique DirectPlay ID. Quite useless as the number is too big for in-built string representation and gets rounded. It is also the same id used for user placed markers. +_name : String - is profileName of the leaving player. +_uid : String - is getPlayerUID of the leaving player. In Arma 3 it is also the same as Steam ID. +_owner : ( since Arma 3 v1.49 ) Number - is owner id of the leaving player. Can be used for kick or ban purposes or just for publicVariableClient. +_jip : ( since Arma 3 v1.49 ) Boolean - is a flag that indicated whether or not the player joined after the mission has started ( J oined I n P rogress). true - if the player was JIP, otherwise false. +i +Since Arma 3 v1.57 a stackable version of this EH is available: PlayerDisconnected +In order to keep compatibility between official and community content the functions BIS_fnc_addStackedEventHandler and BIS_fnc_removeStackedEventHandler should be used instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onPlayerDisconnected +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onPlayerDisconnected code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(January 14, 2015) +For Arma 3 v1.32 and onward, one might want to consider using instead the HandleDisconnect mission event handler for greater flexibility. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onPreloadFinished +//KeywordEnd// +DescriptionStart: +Defines an action performed after the preload screen finished. +i +Since Arma 3 v1.57 a stackable version of this EH is available: PreloadFinished +In order to keep compatibility between official and community content the functions BIS_fnc_addStackedEventHandler and BIS_fnc_removeStackedEventHandler should be used instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onPreloadFinished +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onPreloadFinished command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 24, 2009) +There is a bug in Arma2 that will make this command execute every time the screen with "Receiving..." has been displayed. +If this code is put in the Init.sqf it will run the startcam.sqf script when the loading screen has disappeared +onPreloadFinished '[fire1] execVM scripts\startcam.sqf '; +It will however also run every time a player change graphics settings, alt-tab or do anything else that will trigger the loading screen. +You will have to script around it with if statements to get it to run only in the beginning of the mission. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onPreloadStarted +//KeywordEnd// +DescriptionStart: +Defines an action performed just before the preload screen started. +i +Since Arma 3 v1.57 a stackable version of this EH is available: PreloadStarted +In order to keep compatibility between official and community content the functions BIS_fnc_addStackedEventHandler and BIS_fnc_removeStackedEventHandler should be used instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onPreloadStarted +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onPreloadStarted command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onShowNewObject +//KeywordEnd// +DescriptionStart: +Defines an action performed when the user right clicks on the map and,selects New Object. Set to empty for default behavior. Command receives:,_pos array position, +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onShowNewObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map onShowNewObject command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +onTeamSwitch +//KeywordEnd// +DescriptionStart: +Defines an action performed when the team switch is finished. Commandset receives the following special variables: _from object previous unit, _to object current unit. Consecutive use of onTeamSwitch command will overwrite previously set commandset. +i +Since Arma 3 v1.57 a stackable version of this EH is available: TeamSwitch +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/onTeamSwitch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +onTeamSwitch commandset +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +openCuratorInterface +//KeywordEnd// +DescriptionStart: +Force opens curator interface. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/openCuratorInterface +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +openCuratorInterface +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +openMap +//KeywordEnd// +DescriptionStart: +Shows in-game map. If forced, cannot be closed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/openMap +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +openMap show +%NextRawSyntax% +openMap [show, forced] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +openYoutubeVideo +//KeywordEnd// +DescriptionStart: +Opens Steam overlay with given YT video. Video URL is the end part of the YT URL, starting with watch?v=.... If the user has Steam overlay disabled, the command will display appropriate message to the user and return false. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/openYoutubeVideo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +openYoutubeVideo youTubeUrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +opfor +//KeywordEnd// +DescriptionStart: +Pre-defined variable for the opfor side. +Alias for east. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/opfor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +opfor +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +or +//KeywordEnd// +DescriptionStart: +Returns true only if one or both conditions are true. In case of the alternative syntax, lazy evaluation is used (if left operand is true, evaluation of the right side is skipped completely). +Identical to: a || b +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/or +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +a or b +%NextRawSyntax% +a or b +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 29, 2015) +The examples suggest that you can only use two conditions with or. You can use more if you want. +It is not recommended to use a lot of conditions because the check will take longer to complete. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +orderGetIn +//KeywordEnd// +DescriptionStart: +Force all units in the array to get in or out of their assigned vehicles. Units must be assigned to a vehicle before this command will do anything. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/orderGetIn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitArray orderGetIn order +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(8 May, 2014) +(ArmA3 ver 1.18), here's a quick reference to unit's embarkation and disembarkation. +Command +Remote Control +Behavior +Role Unassigning +orderGetIn +false +orderGetIn won't take effect on player controlled AI units, and which needs to be used together with assaignAs command family. Generally speaking, orderGetIn is a Role Excuator. +When orderGetIn was disabled it won't automatically unassign unit's vehicle role but will force the unit get out of the vehicle and stop him re-entering until it was enabled again. orderGetIn false won't stop a unit when he is embarking a vehicle in the half way but unassignVehicle will do. orderGetIn false will wait to fire until the unit enter a vehicle. +allowGetIn +false +allowGetIn won't take effect on player controlled AI units. Different from orderGetIn, this command is a Role Holder, it can control the unit's movement in the half way set by orderGetIn but not by setWaypointType, unit will be forced to get out from a vehicle by allowGetIn false and won't automatically re-enter the vehicle until allowGetIn true +allowGetIn won't do anything with unit's vehicle role +doGetOut +true +Works on player controlled ai silently, unit will automatically get back to the vehicle after disembarkation. (Unit won't get out until vehicle is stopped or landed) +false +commandGetOut +true +Same as doGetOut with radio message. (Unit won't get out until vehicle is stopped or landed) +false +leaveVehicle +false +leaveVehicle can't force a player controlled AI disembark +true +action ["GetOut",_veh] +true +Eject immediately without parachute +false +action ["Eject",_veh] +true +Eject immediately with parachute if needed +false +setWaypointType "GETIN" +false +Waypoint won't be affected by orderGetIn false or allowGetIn false until the unit is on the vehicle. +N/A +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +overcast +//KeywordEnd// +DescriptionStart: +Return the current overcast level. Zero is clear skies, one is maximum cloud cover. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/overcast +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +overcast +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +overcastForecast +//KeywordEnd// +DescriptionStart: +Return the overcast forecast. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/overcastForecast +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +overcastForecast +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +owner +//KeywordEnd// +DescriptionStart: +On server machine, returns the ID of the client where the object is local. Otherwise returns 0. For use on clients clientOwner command is available. To find out the owner of a Group, use groupOwner. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/owner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +owner object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +param +//KeywordEnd// +DescriptionStart: +Extracts a single value with given index from input argument, similar to BIS_fnc_param. When used without argument, as shown in main syntax, internal variable _this, which is usually available inside functions and event handlers, is used as argument. If input argument is not an array, it will be converted to 1 element array. +If extracted item of input with given index is undefined, of the wrong type or of the wrong length (if the item is an array), default value is used instead. Since Arma 3 v1.53.132691, onscreen errors are displayed for when the input is of the wrong type or size. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/param +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +param [index, defaultValue, expectedDataTypes, expectedArrayCount] +%NextRawSyntax% +argument param [index, defaultValue, expectedDataTypes, expectedArrayCount] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +params +//KeywordEnd// +DescriptionStart: +Parses input argument into array of private variables, similar to BIS_fnc_param. When used without argument, as shown in main syntax, internal variable _this, which is usually available inside functions and event handlers, is used as argument. +In addition to simple parsing directly into variables, input can be tested in case it is undefined, of the wrong type or of the wrong size (if array) and substituted if necessary with default values. Since Arma 3 v1.53.132691, onscreen errors are displayed for when the input is of the wrong type or size. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/params +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +params [element1, element2,...elementN] +%NextRawSyntax% +argument params [element1, element2,...elementN] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 30, 2015) +Because params doubles as private, instead of: +$Code$[1, 2, 3] params ["_one", "_two", "_three"]; +private "_four"; +_four = 4;$/Code$ +You can just: +$Code$[1, 2, 3] params ["_one", "_two", "_three", "_four"]; +_four = 4;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +parseNumber +//KeywordEnd// +DescriptionStart: +An SQF equivalent of C++ atof function. Parses the string, interpreting its content as a floating point number. +The command first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes as many characters as possible that are valid following a syntax resembling that of floating point literals, and interprets them as a numerical value. The rest of the string after the last valid character is ignored and has no effect on the behavior of this command. +If the first sequence of non-whitespace characters in string does not form a valid floating-point number, or if no such sequence exists because either string is empty or contains only whitespace characters, no conversion is performed and the command returns 0. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/parseNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +parseNumber string +%NextRawSyntax% +parseNumber boolean +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Aug 28, 2014) +(A3 1.26)It only detects the first occurrence of a number in the string, return 0 by default. +$Code$ parseNumber "2s4f"; // 2 +parseNumber "s2f4"; // 0$/Code$ +parse config or code, currently BIS_fnc_parseNumber, occurrence is only limited with number, return -1 by default. +$Code${s3s4f} call BIS_fnc_parseNumber ; // -1$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +parseText +//KeywordEnd// +DescriptionStart: +Creates a structured text by parsing the given XML description. Do not use parseText when displaying a localized text from stringtable.xml (see notes below). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/parseText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +parseText text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(22:07, 11 May 2007 (CEST)) +You can also colorate your text. You just have to use following tag: +t color='#ffff00' Your yellow text! /t +To change the size of your text, use this command: +t size='2.2' Your bigger text! /t +To change text font, use: +t font='Zeppelin33' Bold Text /t +To change horizontal alignment, use (parameter can be 'left', 'center', 'right'): +t align='center' Centered Text /t +To change vertical alignment within a line, use (parameter can be 'top', 'middle', 'bottom'): +t valign='bottom' Text at Line Bottom /t +To underline text, use: +t underline='true' Underlined Text /t +To put shadow under text, use: +t shadow='true' t shadowColor='#ff0000' Text with Red Shadow /t /t +Following statements are valid too: +t underline='1' Underlined Text /t +t shadow='1'shadowColor='#ff0000' Green shadow text /t +Following fonts are valid (got from config): +t font='Zeppelin32' Zeppelin32 (normal text) /t +t font='Zeppelin33' Zeppelin33 (bold text) /t +t font='Zeppelin33Italic' Zeppelin33Italic (bold italic text) /t +t font='Bitstream' Bitstream (same as Zeppelin32) /t +t font='TahomaB' TahomaB (same as Zeppelin32) /t +t font='LucidaConsoleB' LucidaConsoleB (like Courier) /t +%NextNote% +(21 March 2009) +Although there is a dedicated image command, parseText gives more options: +img size='5' color='#ff0000' image='fish.paa'/ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +parsingNamespace +//KeywordEnd// +DescriptionStart: +Returns the global namespace attached to config parser. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/parsingNamespace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +parsingNamespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 27, 2015) +Any global variable defined in a config using __EXEC() will be stored in this namespace. +For example in the description.ext: +$Code$__EXEC(testVar = 1);$/Code$ +The variable "testVar" can be accessed during mission run time using getVariable +$Code$ hint str ( parsingNamespace getVariable ["testVar", 0]);$/Code$ +The above example would print 1. +This example however: +$Code$__EXEC(_testVar = 1);$/Code$ +Would print 0, because adding an underscore will make the variable local to the config in the same way that it would make it local to a script. +See PreProcessor Commands for more details on __EXEC() +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +particlesQuality +//KeywordEnd// +DescriptionStart: +Returns current settings for particles quality (configure- video- general- particles). 0-low, 1-normal, 2-high +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/particlesQuality +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +particlesQuality +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +pi +//KeywordEnd// +DescriptionStart: +pi (180 degrees converted to Radians ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/pi +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +pi +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +pickWeaponPool +//KeywordEnd// +DescriptionStart: +Transfer weapons and magazines from cargo of object into weapon pool (used in campaign to transfer weapons into next mission). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/pickWeaponPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +pickWeaponPool object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +pitch +//KeywordEnd// +DescriptionStart: +Returns the pitch of a persons voice. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/pitch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +pitch person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playableSlotsNumber +//KeywordEnd// +DescriptionStart: +Returns the number of available slots in mission per side (both empty and taken). In singleplayer mission, it returns number of playable units per side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playableSlotsNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playableSlotsNumber side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playableUnits +//KeywordEnd// +DescriptionStart: +Returns a list of playable units in a multiplayer game (occupied by both AI or players), created on the following sides east, west, resistance / independent and civilian only. Does not contain units of sideLogic. This does not include dead players awaiting for respawn. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playableUnits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playableUnits +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 13, 2009) +In single-player missions, this command will return an empty array. +%NextNote% +(December 23, 2014) +To get a list of all player-controlled units: +$Code$_allPlayers = []; +{ +if ( isPlayer _x) then +{ +_allPlayers pushBack _x; +}; +} forEach playableUnits ;$/Code$ +%NextNote% +(April 15, 2015) +Quote: $Code$ Killswitch +In single-player missions, this command will return an empty array.$/Code$ +Use the switchableUnits command instead +%NextNote% +(August 16, 2015) +playableUnits will not return dead players, use allPlayers instead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playAction +//KeywordEnd// +DescriptionStart: +When used on a person, a smooth transition to the given action will be initiated. +For Arma 3 actions see: playAction/actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier playAction action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playActionNow +//KeywordEnd// +DescriptionStart: +When used on a person, a smooth transition to the given action will be initiated, but all previous playAction are discarded. +For Arma 3 actions see: playAction/actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playActionNow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier playActionNow action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(October 12, 2010) +Some other possible playactions: +"walkf" - walk forward +"walkb" - walk backwards +"walkr" - strafe right +"walkl" - strafe left +"grabdrag" - initiate First Aid dragging animation +"stopdrag" - stops First Aid dragging animation +"reloadMagazine" - reloads the current magazine +"gestureFreeze" - hand signal "Freeze" +"GestureGo" +"GestureCover" +"GestureAttack" +"GestureCeaseFire" +"GestureFollow" +"GestureUp" +"GestureAdvance" +"GesturePoint" +Note that playAction works regardless of stance (rifle up, down, crouched, prone). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +player +//KeywordEnd// +DescriptionStart: +Person controlled by player. +In MP this value is different on each computer and on dedicated server this value is null. +In Intros and Outros this isn't set by default and must be assigned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/player +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +player +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(20 Jul, 2010) +Before you use the player object (usually to avoid JIP issues) all you need is to run: +waitUntil {!isNull player}; +Anything else you see in other scripts is equivalent and/or redundant. Of course JIP players may need more than just the player to point at the actual JIP player unit, but that's script/mission-specific. +%NextNote% +(27 Jan, 2008) +( isNull player ) is true for JIP players on their client during initialization. +After initialization, it will be set, making it valid again. +To cater for this, some people use code similar to the following in their spawned scripts: +if (!isServer (player != player)) then +{ +waitUntil {player == player}; +waitUntil {time 10}; +}; +// 'player' will now be valid +_action = player addAction ["heal", "heal.sqf", [], -1, false, false, ""]; +See JIP/player topic for additional helpful information. +%NextNote% +(June 26, 2014) +player can actually be REMOTE object on player's PC: http://www.youtube.com/watch?v=m6IILtfa3cQ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playerRespawnTime +//KeywordEnd// +DescriptionStart: +Return the player remaining time to respawn. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playerRespawnTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playerRespawnTime +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 21, 2007) +When playerRespawnTime reaches zero the player respawns as expected. When the player has completed respawning this command returns -1. +%NextNote% +Also note that spawning doesn't create a body to use, but allows a player to choose an already +existing one as defined either in the mission editor or in a script as player or playable. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playerSide +//KeywordEnd// +DescriptionStart: +Returns the player's side. This is valid even when the player controlled person is dead (a difference from side player ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playerSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playerSide +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(27 Jan, 2008) +playerSide defaults to west for JIP players early on during initialization regardless of their side. +So if you are a JIP player on another side (like east ), you will need to cater for this for any early initializations. +%NextNote% +(13 Oct, 2008) +playerSide also shows your starting side, even if your side changes to enemy due to a bad rating. In that case, playerSide != side player. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playersNumber +//KeywordEnd// +DescriptionStart: +Return count of players playing on given side. Works only in multiplayer, in singleplayer always returns 0. +Returns number of playable slots taken by a side, not actual number of players of the side present in the mission. As a result, players who claimed a slot in the lobby but didn't start the mission yet are counted in as well. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playersNumber +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playersNumber side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 13, 2015) +playersNumber returns playable AI as well as human players. It does not include non playable AI. [NOTE: This was observed in ArmA 1.05] +To get the amount of players that are on the same side as the person executing the script: +$Code$playersNumber playerSide;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playGesture +//KeywordEnd// +DescriptionStart: +When used on a person,a smooth transition to the given move will be initiated. Command doesn't seem to be functional +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playGesture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier playGesture moveName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 31, 2010) +Rpt says "Not implemented" as of OA 1.54. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playMission +//KeywordEnd// +DescriptionStart: +The mission is launched (from the main menu). Both campaign and mission are given as their directory name. If the campaign is empty, a single mission is launched. If skipBriefing is true, the intro and briefing are skipped. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playMission +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playMission [campaign, mission, skipBriefing] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playMove +//KeywordEnd// +DescriptionStart: +When used on person, smooth transition to given move will be done. +List of moves in ArmA 2 List of moves in Armed Assault List of moves in Operation Flashpoint: Resistance +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playMove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName playMove moveName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +For an immediate transition use switchMove. This command must be executed after mission start. If you place it into init.sqs / init.sqf or in the Init field of some unit, it will not work. Just add a little delay (~0.001) and then place the command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playMoveNow +//KeywordEnd// +DescriptionStart: +When used on a person,a smooth transition to the given move will be initiated, but all previous playMove are discarded. +List of moves in ArmA 2 List of moves in Armed Assault List of moves in Operation Flashpoint: Resistance +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playMoveNow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier playMoveNow moveName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playMusic +//KeywordEnd// +DescriptionStart: +Plays music defined in CfgMusic. To stop the music execute playMusic "" or give the start time which is beyond the music duration playMusic ["SomeMusic", 1000]; +For Arma 3 music, see Arma 3 CfgMusic +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playMusic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playMusic name +%NextRawSyntax% +playMusic [name, start] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +You can get all Music Types from Arma:_cfgMusic +http://community.bistudio.com/wiki/Arma_2:_Music#top +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playScriptedMission +//KeywordEnd// +DescriptionStart: +Load the given world, launch an empty mission and execute the given, expression. Config (optional) can reference to the config entry, replacing description.ext for this mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playScriptedMission +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playScriptedMission [world,expression,config,ignoreChildWindow] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 31, 2015) +For this command to work, you will need to +call command with ignoreChildWindow param set to true (in VBS docs its called fromMission) +close any opened display (not sure about this part, but closing every display (but #0) seems to work): +If mission is run from 2D editor, you can just close RscDisplayArcadeMap display (idd 26) (because this was done from 2D editor, so RscDisplayArcadeMap is still active in background -- benargee ) +If mission is run from single mission browser, you can just close RscDisplaySingleMission (idd 2) +end mission +Debriefing will show and player will be moved to new mission after clicking on Continue. +Command is a bit bugged: +Third (config) param doesn't seem to work +If you run this command in mission loaded from pbo, said pbo won't be writable until you close the game (you can't update it) +Following code will change change island to Stratis and spawns player as basic soldier at [0,0,0] coordinates. +$Code$disableSerialization; +playScriptedMission ['Stratis',{ +createCenter west; +_grp = createGroup west; +_player = _grp createUnit [ B_Soldier_F,[0,0,0],[],0, NONE ]; +selectPlayer _player; +},missionConfigFile, true]; +//Close all displays that could be the background display... this is essentialy forceEnd command +//Closing #0 will cause game to fail +_zero = findDisplay(0); +{ +if (_x != _zero) then { +_x closeDisplay 1; +}; +} foreach allDisplays; +failMission END1 ;$/Code$ +(tested in Arma 3 1.54.133741) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playSound +//KeywordEnd// +DescriptionStart: +selects Sound from CfgSounds declared in the Description.ext file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playSound +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playSound soundName +%NextRawSyntax% +playSound [soundName, isSpeech] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +For dialogue involving living units it is better to use say, playSound will play a sound at the location of the player, say will play a sound at the location of the unit that is speaking, and it will only play that sound if the unit is alive. +%NextNote% +(December 28, 2014) +As you may have noticed, the parameter for playsound/say3d that deals with the "volume" of the sound played has little to do with the effective loudness heard in game. What it is alters is the drop off for fading the sound at a distance. A higher decibel or integer value will increase the distance before any sort of fading will take place. The actual volume of the sound file played will factor in to this, as it does throughout the playing action. +Amplifying the Sound +Modifying the effective volume of sounds played by the engine is possible by "spamming" the sounds. By quickly playing the sounds overtop of one another, you can effectively amplify the volume +This example, +$Code$ +playSound "soundname"; +playSound "soundname"; +$/Code$ +Will effectively amplify the sound by a sensed 2x. The volume of the sound file itself will still affect the sound volume as it appears as though the arma engine has no normalization for sound files added to it. +This technique may cause issues in sound quality in large multiplayer servers. I observed multiple instances when a triggered sound amplified with this method was out of sync with each other. Timing of the individual commands sent over the network is probably the issue. Recommend you compile your amplification code into a single finished function for better syncing for clients not activating the action/far away from the activation position. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +playSound3D +//KeywordEnd// +DescriptionStart: +Plays positional sound with given filename on every computer on network. At least 2 parameters must be specified. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/playSound3D +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +playSound3D [filename, soundSource, isInside, soundPosition, volume, soundPitch, distance] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(September 23, 2013) +This command works well with addon sounds, however getting it to play mission sound files is a bit tricky. Follow this guide +%NextNote% +(September 26, 2014) +Currently, playSound3D is not JIP compatible, so joining players will not hear the sound if is started before and is still playing when player joins. +%NextNote% +(October 16, 2013) +You need to get the correct path for custom mission sounds. Use missionConfigFile with BIS_fnc_trimString (to trim off " description.ext "), then add your mission's sound directory and sound file: +$Code$_soundPath = [( str missionConfigFile ), 0, -15] call BIS_fnc_trimString; +_soundToPlay = _soundPath + "sounds\some_sound_file.ogg"; +playSound3D [_soundToPlay, _sourceObject, false, getPos _sourceObject, 10, 1, 50]; +//Volume db+10, volume drops off to 0 at 50 meters from _sourceObject$/Code$ +%NextNote% +(November 8, 2014) +When object is supplied but not a position, the position is taken from object, otherwise the position is taken from supplied position. That doesn't mean that when position is taken from object it is going to follow object when it changes position. The sound is generated at object position and it stays there. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +position +//KeywordEnd// +DescriptionStart: +Synonym for getPos. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/position +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +position object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +positionCameraToWorld +//KeywordEnd// +DescriptionStart: +Transforms position from camera coordinate space to world coordinate space. +Camera axes are relative to camera orientation. x axis goes from left of the camera to right of the camera, z axis goes from underneath the camera to above the camera and y axis goes from back of the camera to where the camera is looking. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/positionCameraToWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +positionCameraToWorld cameraPos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 17, 2008) +By measuring the distance between the camera and the player one can determine whether 1st-person or 3rd-person view is being used: +$Code$ if (( positionCameraToWorld [0,0,0] distance player ) 2) then { hint "3rd person"} else { hint "1st person"};$/Code$ +%NextNote% +(22:45, 17 October 2010 (CEST)) +The camera coordinate system is different from the model coordinate system: when modelToWorld uses [x, y, z] then positionCameraToWorld uses [x, z, y]. So for a steady camera the following is true: +$Code$ positionCameraToWorld [5,10,15] == _camera modelToWorld [5,15,10];$/Code$ +%NextNote% +(July 20, 2014) +When over land, the position returned is in format PositionATL, and over sea, PositionASLW. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +posScreenToWorld +//KeywordEnd// +DescriptionStart: +Convert screen coordinates in map to world coordinates. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/posScreenToWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map posScreenToWorld [x, y] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 7, 2007) +Notes: +You can get the screen coordinates by the UI Event Handlers onMouseButtonDown, onMouseButtonUp, onMouseButtonClick, onMouseButtonDblClick. +The return Array is in 2-D, you can use it with all set-position commands. +_x = returnArray select 0; +_y = returnArray select 1; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +posWorldToScreen +//KeywordEnd// +DescriptionStart: +Convert world coordinates to screen coordinates in map. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/posWorldToScreen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map posWorldToScreen position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectAdjust +//KeywordEnd// +DescriptionStart: +Set post process effect parameters +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectAdjust +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +effect ppEffectAdjust settings +%NextRawSyntax% +effect ppEffectAdjust settings +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectCommit +//KeywordEnd// +DescriptionStart: +Commit post process effect in given time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectCommit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +effect ppEffectCommit commit +%NextRawSyntax% +effect ppEffectCommit commit +%NextRawSyntax% +[effect1,...] ppEffectCommit commit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectCommitted +//KeywordEnd// +DescriptionStart: +Check whether given post process effect is committed +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectCommitted +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ppEffectCommitted effect +%NextRawSyntax% +ppEffectCommitted effect +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectCreate +//KeywordEnd// +DescriptionStart: +Creates Post process effects specified by effect name and priority. Supported effects are: +"RadialBlur" +"ChromAberration" +"WetDistortion" +"ColorCorrections" +"DynamicBlur" +"FilmGrain" +"ColorInversion" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectCreate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ppEffectCreate [name, priority] +%NextRawSyntax% +ppEffectCreate [[name1, priority1],...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 24, 2015) +"wetDistortion" only works if handle is used. Arma 3 (1.48.131561) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectDestroy +//KeywordEnd// +DescriptionStart: +Destroy Post process effects given by handle or array of handles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectDestroy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ppEffectDestroy effect +%NextRawSyntax% +ppEffectDestroy [effect1,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectEnable +//KeywordEnd// +DescriptionStart: +Enable / disable Post process effects +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectEnable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +effect ppEffectEnable enable +%NextRawSyntax% +effect ppEffectEnable enable +%NextRawSyntax% +[effect1,...] ppEffectEnable enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectEnabled +//KeywordEnd// +DescriptionStart: +Checks whether given post process effect is enabled +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ppEffectEnabled effect +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ppEffectForceInNVG +//KeywordEnd// +DescriptionStart: +Forces use of Post process effects in NVG. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ppEffectForceInNVG +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +number ppEffectForceInNVG bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +precision +//KeywordEnd// +DescriptionStart: +Return the precision of the given entity, how is the entity able to be precise when moving to given target. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/precision +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +precision entity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preloadCamera +//KeywordEnd// +DescriptionStart: +Preload all textures and models around given Position to avoid visual artifacts after camera is moved. +Should be used before any abrupt camera change/cut. +Returns true once all data is ready. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preloadCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +preloadCamera position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preloadObject +//KeywordEnd// +DescriptionStart: +Preload all textures, materials and proxies needed to render given object. Object can be determined either by config class name ( CfgVehicles ), or by Unit. +Returns true once all data is loaded and ready. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preloadObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +distance preloadObject object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preloadSound +//KeywordEnd// +DescriptionStart: +Makes sure that a sound can start playing without any delay once it is needed. Command works in Arma 3, but might not be implemented in earlier Arma installments. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preloadSound +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +preloadSound soundName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preloadTitleObj +//KeywordEnd// +DescriptionStart: +Object title - Preload data the object can be defined in the Description.ext file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preloadTitleObj +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +preloadTitleObj [name, type] +%NextRawSyntax% +preloadTitleObj [name, type, speed, showInMap] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preloadTitleRsc +//KeywordEnd// +DescriptionStart: +Resource title - Preload data. +The resource can be defined in the Description.ext file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preloadTitleRsc +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +preloadTitleRsc [name, type] +%NextRawSyntax% +preloadTitleRsc [name, type, speed, showInMap] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preprocessFile +//KeywordEnd// +DescriptionStart: +Reads and processes the content of the specified file. Preprocessor is C-like, supports comments using // or /* and */ and macros defined with #define. Due to the hard-drive access this command executes (and the lack of caching) this command should not be used in time-critical script loops. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preprocessFile +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +preprocessFile fileName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 4, 2008) +File path is always relative to mission directory. If script dir\a.sqf includes dir\b.sqf, use "dir\b.sqf" and not "b.sqf". +%NextNote% +(July 8, 2011) +Use preprocessFileLineNumbers instead as it provides more context information on error. +%NextNote% +(December 17, 2013) +The main difference between preprocessFile and preprocessFileLineNumbers is that the latter adds #line directive to the target file, which allows to log the __LINE__ error happened at and the __FILE__ error happened in. +%NextNote% +(July 25, 2014) +Essentially what the preprocessFile command does is it refers to the contents of a file as a string: +Example 1: +boop.html: +$Code$ t align = 'center' valign = 'middle' shadow = '0' size = '2' structured text /t $/Code$ +init.sqf: +$Code$_text = parseText preprocessFile "boop.html"; +hint _text; +$/Code$ +This is especially useful for long strings, and it works on files with any file extension as long as they can be edited with a text editor. +Example 2: +init.sqf: +$Code$ hint preprocessFile "description.ext"; +copyToClipboard preprocessFile "mission.sqm"; +$/Code$ +The above is all valid. However, using *.jpg or any other files saved in an image format is not possible. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +preprocessFileLineNumbers +//KeywordEnd// +DescriptionStart: +Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using // or /* and */ and macros defined with #define. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/preprocessFileLineNumbers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +preprocessFileLineNumbers fileName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 17, 2013) +The main difference between preprocessFile and preprocessFileLineNumbers is that the latter adds #line directive to the target file, which allows to log the __LINE__ error happened at and the __FILE__ error happened in. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +primaryWeapon +//KeywordEnd// +DescriptionStart: +Returns name of unit's primary weapon (empty string if none). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/primaryWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +primaryWeapon unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +primaryWeapon tells you what weapon the unit has irrespective of the status of the weapon. For example a unit that has an M16 on his back will still report an M16 as its primary weapon. +%NextNote% +(October 11, 2015) +To directly detect the active weapon use currentWeapon command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +primaryWeaponItems +//KeywordEnd// +DescriptionStart: +Returns array with all items assigned to the primary weapon. This command is used for infantry weapons only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/primaryWeaponItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +primaryWeaponItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 16, 2015) +Since revision 129742, this command also returns an attached bipod. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +primaryWeaponMagazine +//KeywordEnd// +DescriptionStart: +Returns array containing class name of currently loaded primary weapon magazine (or magazine s in case of weapon having grenade launcher), otherwise it returns []. This command is used for infantry weapons only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/primaryWeaponMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +primaryWeaponMagazine unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 8, 2014) +This function returns an array like ["type of magazine loaded in primary weapon", "type of grenade loaded in launcher if exist"] +For example ["30Rnd_556x45_Stanag", "1Rnd_HE_Grenade_shell"], with no consideration about amount of these ammo. +However, be careful if you intend to use it in expression like : (magazines _unit) - (primaryWeaponMagazine _unit), i.e. magazines "minus" this array, +The result will inventory all magazines (with grenades, chemlights...) except ALL magazines (and grenades eventually) belonging to the TYPE of the loaded one! i.e. you suppress ALL "30Rnd_556x45_Stanag" but the "30Rnd_556x45_Stanag_Tracer_Green" are still remaining. +If you kill the unit, the same expression will return a consistent inventory as primary weapon "disappears" and primaryWeaponMagazine is empty. "30Rnd_556x45_Stanag" are back! +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +priority +//KeywordEnd// +DescriptionStart: +Return the priority of the task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/priority +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +priority task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +private +//KeywordEnd// +DescriptionStart: +Sets a variable to the innermost scope as demonstrated in Example 3. +Since Arma 3 v1.53.132932 private can be used as keyword as shown in Example 4. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/private +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +private variableName +%NextRawSyntax% +private variableNameList +%NextRawSyntax% +value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 24, 2009 15:04) +The example provided is fairly worthless without a context. +Using the private command allows you to declare a variable in the current scope, without regards to variables in a higher scope with the same name. Note that if you try to declare a variable without an underscore (meaning it's global) with the private command, it will cause an error. Specifically: "Error Local variable in global space". +Here's a code example with output for your benefit. +$Code$ +_foo = 10; +if (true) then +{ +private ["_foo"]; +_foo = 5; +player sideChat format ["%1", _foo]; +}; +player sideChat format ["%1", _foo]; +$/Code$ +In this example, the first sidechat (innermost) returns 5 while the second sidechat (outermost) returns 10. +$Code$ +if (true) then +{ +private ["_bar"]; +_bar = 5; +player sideChat format ["%1", _bar]; +}; +$/Code$ +In this example, the private command does nothing and is simply a waste of code, assuming there is no higher level code to interfere with the if statement. +%NextNote% +(August 4, 2010) +The higher scope is also the script from which the function has been called. +If you've got in the script: +$Code$ +_a = 1; +call compile loadFile "function.sqf"; +hint format ["%1", _a]; +$/Code$ +And in the function.sqf : +$Code$ +_a = 2; +$/Code$ +Game will display 2. +Inserting private "_a" in the function prevents the change and so number 1 will be displayed on the screen. +%NextNote% +(February 25, 2015) +Recursive loops require the use of private. Without it, your variables will be overwritten. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +processDiaryLink +//KeywordEnd// +DescriptionStart: +Open the diary screen on the record specified by link. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/processDiaryLink +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +processDiaryLink link +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +productVersion +//KeywordEnd// +DescriptionStart: +Returns the product's friendly name, identifier and version. In Arma 3 it also returns branch identifier, whether or not the game was launched using mods, and the platform. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/productVersion +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +productVersion +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +profileName +//KeywordEnd// +DescriptionStart: +Returns profile name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/profileName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +profileName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +profileNamespace +//KeywordEnd// +DescriptionStart: +Returns the global namespace attached to the active user profile. +Use setVariable and getVariable to save and load data to this Namespace. A variable can be deleted by setting its value to nil. +The variables are stored next to the user profile in a file named myUsername.vars.TakeOnHProfile (e.g. in the My Documents\Take On Helicopters folder). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/profileNamespace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +profileNamespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +The variables are loaded when the user profile is loaded or changed. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +profileNameSteam +//KeywordEnd// +DescriptionStart: +Returns name of the current Steam profile. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/profileNameSteam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +profileNameSteam +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +progressLoadingScreen +//KeywordEnd// +DescriptionStart: +If loading screen is shown, sets progress bar to the given value (interval is from 0 to 1]) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/progressLoadingScreen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +progressLoadingScreen progress +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +progressPosition +//KeywordEnd// +DescriptionStart: +Returns the current position in the progress bar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/progressPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +progressPosition control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +progressSetPosition +//KeywordEnd// +DescriptionStart: +Sets progress position of the progress bar ( DialogControls-ProgressBar ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/progressSetPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +control progressSetPosition pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +publicVariable +//KeywordEnd// +DescriptionStart: +Broadcasts missionNamespace variable and its value to all computers. The data is sent consequently and reliably to all clients. Using publicVariable too frequently in a given period of time can cause other parts of the game to experience bandwidth problems. +Variables broadcast with publicVariable during a mission stay persistent for JIP (Join In Progress) clients. Such persistent variables are synced to the JIP client before the first batch of client side Event Scripts are ran. +The following Types of data are supported: +Number +Since OFP version 1.34 : +Boolean +Object +Group +Since ArmA version 1.00: +String +Text +Since ArmA version 1.09 : +Array +Code +Since Arma 3 version 1.26 : +Nothing ( nil ) +Limitations : Cannot use reserved names, such as " player " or " west " or " side ", etc. It is also not possible to transfer references to entities which are local, like scripts, displays, or local objects. Team Member is also not supported. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/publicVariable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +publicVariable varName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(3 Aug, 2006 23:03) +This command broadcasts a variable to all clients, but as soon as you change the variable again, you have to use publicVariable again, as it does not automatically synchronise it. +%NextNote% +(12 April, 2008) +Be sure to place your variable name in quotation marks. This may sound awfully simple, but many times I have forgotten to do this, and it has resulted in no end of headaches for me. +%NextNote% +(2 Feb, 2008) +When initialising a public variable to handle JIP, you will usually first want to check if the public variable has already been (broadcast, received and) set locally. Otherwise you may inadvertantly overwrite the broadcast value with your default value. +To perform this check, use code similar to the following to first check that the variable is nil: +if ( isNil "PV_abc") then +{ +// set the nil variable with a default value for server and both JIP 'join at mission start' +PV_abc = [7, 8, 9]; +}; +// else public variable has already been set due to a public variable broadcast. +%NextNote% +(14 July, 2011) +To make Dr_Eyeball's note even more clear: +For JIP players pV'ed variables are received and set BEFORE the init.sqf. +So to avoid the received variables getting overwritten by variable initialization normally done in the init.sqf, you HAVE TO to use the 'if ( isNil "PV_abc")' pattern. +It says literally: "Only initialize value it has not yet been set. And in a JIP this may already been the cause due to publicVariable use". +%NextNote% +(21 September, 2013) +To make Dr_Eyeball's and kju's notes even more clear, public variable is persistent. Once it has been broadcast it will be delivered to all clients, present and future. Therefore it is wise to check if the variable already exists on a client due to it being persistent before initialising its value. +%NextNote% +(23 February, 2014) +Just to clarify, when players JIP, they get the value of the variable from the last call to publicVariable, not the current value of the variable. Eg. with +$Code$SomeVar = 5; publicVariable "SomeVar"; SomeVar = 10;$/Code$ +Connecting players will receive 5, not the current value of 10. +%NextNote% +(October 19, 2014) +I'm pretty far down the notes list so I hope this doesn't get buried. +For clarity, after a variable has been publicVariable'd, scripts in all clients can use it as if it had been defined locally. +Variables that have been publicVariable'd do not need to be pre-defined on receiving clients. In fact, this could cause issues with JIP players overwriting a publicVariable value, as mentioned above. (tested in A3 1.32.127785) +Local variables cannot be publicVariable'd. (tested in A3 1.32.127785) (tested by having dedicated server publicVariable a local variable, then trying to hint it on client. Error was "Undefined variable in expression") +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +publicVariableClient +//KeywordEnd// +DescriptionStart: +Send the variable value to the client computer - same limitations regarding variable type as publicVariable. +The Client ID is the temporary ID given to a connected client for that session. You can find out this ID with the owner command (using it on a player's character, for example, will give you that players client ID). +In Arma 3 it is possible to broadcast nil value +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/publicVariableClient +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +clientID publicVariableClient varName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(24 Aug, 2012) +publicVariableServer (run on client) +publicVariableClient (run on server) +Publishes a variable (name as STRING) to a specific client, from the server. This is useful where you want to synchronize a variable with only a specific client. +This is a useful way to cut down on network traffic, as publicVariable commands are issued as a priority message. So use publicVariable sparingly, and these commands where they apply. - Rocket +%NextNote% +(21 Sep, 2013) +While publicVariable is JIP compatible and persistent, publicVariableClient is not. If you log out then log in with the same owner id the public variable sent to your client prior will be nil. +$Code$//server +pv = 123; +3 publicVariableClient "pv"; +//connected client with id 3 +hint str pv; //123 +// +//client log out/log in +// +//client id is still 3 +hint str pv; //error, undefined variable pv$/Code$ +%NextNote% +(April 12, 2015) +Tested in Arma 3 v1.43, publicVariableClient works client-to-client if owner id of the targeted client is known. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +publicVariableServer +//KeywordEnd// +DescriptionStart: +Send the variable value to the server - same limitations regarding variable type as publicVariable. +In Arma 3 it is possible to broadcast nil value +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/publicVariableServer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +publicVariableServer varName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(24 Aug, 2012) +publicVariableServer (run on client) +publicVariableClient (run on server) +Publishers the variable (name as STRING) to the server only. Useful when you want to synchronize a variable with the server but not any other clients. - Rocket +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +pushBack +//KeywordEnd// +DescriptionStart: +Insert an element to the back of the given array. This command modifies the original array. (see also: pushBackUnique ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/pushBack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array pushBack element +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Aug 1, 2014) +(A3 1.26) It is recommended to use pushBack instead of BIS_fnc_arrayPush. +$Code$_array = [1,2,3]; +_array pushBack 4; //same as [_array, 4] call BIS_fnc_arrayPush ; +$/Code$ +%NextNote% +(August 23, 2014) +It's highly recommended to use the new pushBack command, up to 43% faster than set and up to 11843% faster a plus b ! +%NextNote% +(November 26, 2014) +pushBack does not support nil while set and a plus b do. For example: +$Code$_array = []; +for "_i" from 0 to 3 do +{ +_array pushBack nil ; +}; +hint str _array; // hint is []$/Code$ +%NextNote% +(May 21, 2015) +Array "push" implementation using pushBack, alternative to BIS_fnc_arrayPush +$Code$KK_fnc_push = { +_this select 0 pushBack (_this select 1); +_this select 0 +}; +// Example +arr = [1,2,3]; +[arr, 4] call KK_fnc_push; //both arr and return of function are now [1,2,3,4]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +pushBackUnique +//KeywordEnd// +DescriptionStart: +Adds element to the back of the given array but only if it is unique to the array. The index of the added element is returned upon success, otherwise -1. This command modifies the original array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/pushBackUnique +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array pushBackUnique element +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +putWeaponPool +//KeywordEnd// +DescriptionStart: +Transfer weapons and magazines from weapon pool into cargo of object obj. Used in campaign to transfer weapons into next mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/putWeaponPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +putWeaponPool object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +queryItemsPool +//KeywordEnd// +DescriptionStart: +Returns the number of items of type in the weapon pool (used in campaigns to transfer weapons to the next mission). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/queryItemsPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +queryItemsPool name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +queryMagazinePool +//KeywordEnd// +DescriptionStart: +Return number of magazines of type name in magazine pool (used in campaign to transfer magazines into next mission). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/queryMagazinePool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +queryMagazinePool name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +queryWeaponPool +//KeywordEnd// +DescriptionStart: +Return number of weapons of type name in weapon pool (used in campaign to transfer weapons into next mission). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/queryWeaponPool +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +queryWeaponPool name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rad +//KeywordEnd// +DescriptionStart: +Convert x from Degrees to Radians. 360 degrees is equal to 2 multiplied with pi. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rad x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +radioChannelAdd +//KeywordEnd// +DescriptionStart: +Add the units to the custom radio channel. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/radioChannelAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +index radioChannelAdd units +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +radioChannelCreate +//KeywordEnd// +DescriptionStart: +Create a custom radio channel with the given color, label, call sign and registered characters. The index returned can be used to manipulate the created channel later. There are 10 slots for custom radio channels which would correspond to channels 6-15 (see getPlayerChannel ). The command will find an unused index in this range and create it when found. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/radioChannelCreate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +radioChannelCreate [color, label, callSign, units] +%NextRawSyntax% +radioChannelCreate [color, label, callSign, characters, sentenceType] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(January 21, 2016) +Make sure you add all units you intend to speak or receive messages on created custom channel to the channel. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +radioChannelRemove +//KeywordEnd// +DescriptionStart: +Remove the characters from the custom radio channel. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/radioChannelRemove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +index radioChannelRemove characters +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +radioChannelSetCallSign +//KeywordEnd// +DescriptionStart: +Set the custom radio channel's call sign. +Available special parameters: +$KEY (reference to a localized text) +%CHANNEL_LABEL +%UNIT_SIDE +%UNIT_NAME +%UNIT_RANK +%UNIT_ID +%UNIT_REF +%UNIT_GRP_NAME +%UNIT_GRP_LEADER +%UNIT_VEH_NAME +%UNIT_VEH_POSITION +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/radioChannelSetCallSign +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +index radioChannelSetCallSign callSign +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +radioChannelSetLabel +//KeywordEnd// +DescriptionStart: +Set the custom radio channel's label. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/radioChannelSetLabel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +index radioChannelSetLabel label +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +radioVolume +//KeywordEnd// +DescriptionStart: +Checks the current radio volume (set by fadeRadio ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/radioVolume +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +radioVolume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rain +//KeywordEnd// +DescriptionStart: +Returns the current value of rain density in range 1...0 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rain +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rain +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rainbow +//KeywordEnd// +DescriptionStart: +Returns the current rainbow intensity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rainbow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rainbow +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +random +//KeywordEnd// +DescriptionStart: +Random real (floating point) value from 0 (inclusive) to x (not inclusive). +Since Arma 3 v1.55.133393 alternative syntax is added, allowing to define Gaussian Distribution params. Uses the same method as setTriggerTimeout command. Quite useful for spawning loot for example, making more valuable items more rare. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/random +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +random x +%NextRawSyntax% +random [min, mid, max] Since Arma 3 v1.55.133393 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 12, 2015) +Random selections including negative numbers can be obtained via: +$Code$_Xrnd = round(random 200) -100;$/Code$ +This will yield numbers between -100 and 100. +Be careful using random numbers in multiplayer, each client will come up with a different result. See multiplayer tutorials for more general information about locality. +The number returned is unlikely to be a whole number. To return a whole number use either round, ceil or floor together with random : +x=round(random 5) will return 0,1,2,3,4 or 5. (non-uniform distribution, 0 and 5 are half as likely to be selected than any of the other numbers) +x=floor(random 5) will return 0,1,2,3 or 4. (uniform distribution, all numbers have the same probability of being selected) +x=ceil(random 5) will return 0,1,2,3,4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rank +//KeywordEnd// +DescriptionStart: +Returns the rank of the given unit. Rank can be one of the following: +"PRIVATE" +"CORPORAL" +"SERGEANT" +"LIEUTENANT" +"CAPTAIN" +"MAJOR" +"COLONEL" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rank +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rank unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rankId +//KeywordEnd// +DescriptionStart: +Return the rank of the given unit for comparison. +Value may be : +0 - Private +1 - Corporal +2 - Sergeant +3 - Lieutenant +4 - Captain +5 - Major +6 - Colonel +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rankId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rankId unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rating +//KeywordEnd// +DescriptionStart: +Check unit rating. Rating is increased for killing enemies, decreased for killing friendlies (see Rating Values ). Can be changed via addRating by the mission designer. +The rating of the player is displayed as the "score" at the end of the mission. Via Description.ext one can define how many points it takes to get a perfect score, as well as the number of stars. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rating +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rating unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +In ArmA 1.18 rating does only return rating levels for units that are local. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rectangular +//KeywordEnd// +DescriptionStart: +Checks if a location is rectangular (returns true) or elliptical (returns false). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rectangular +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rectangular location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +registeredTasks +//KeywordEnd// +DescriptionStart: +List all registered task types. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/registeredTasks +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +registeredTasks member +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +registerTask +//KeywordEnd// +DescriptionStart: +Register a new task type. Parameters are defined in the given config class (subclass of CfgTasks). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/registerTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember registerTask entryName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +reload +//KeywordEnd// +DescriptionStart: +Reload all weapons +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/reload +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +reload unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +reloadEnabled +//KeywordEnd// +DescriptionStart: +Check whether magazine is reloaded whenever emptied. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/reloadEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +Boolean reloadEnabled unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +remoteControl +//KeywordEnd// +DescriptionStart: +Switches on remote control of the unit. Command needs to be executed locally to the player. If driver is remote it will get transferred to players PC. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/remoteControl +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +who remoteControl whom +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +You must use switchCamera in order to remote control the unit and. +You can only remoteControl characters, e.g. if yo want to remote control a car, you have +to add a driver and use +"player remoteControl driver someVehicle". +%NextNote% +(Jan 25, 2010) +Arma 1.05 : +You can remoteControl multiple units at the same time. +It is not needed to switchCamera to the unit to be able to control it - it is needed to be able to fire with. +The switchCamera is fixed : the player can't change internal/external/optics view. +Do not think about it like a selectPlayer : it is used to give the control to the vehicle role the unit is in. +SwitchCamera to the vehicle the unit is in ; the camera will go depending the role you are remoteControlling. +The AI driver won't follow your vehicle move orders. +If the player dies, the death screen will appear, not automatically turning back to the player. +If you want to stop the remote control, use objNull as remote controller. +Example : +player remoteControl driver jeep1; // will remoteControl it, you still will have full control of the player +jeep1 switchCamera internal ; // fix the camera to the ''vehicle'' and not to (driver jeep1) ! +waitUntil { !(alive jeep1) || !(alive player) }; +objNull remoteControl driver jeep1; // removes the remoteControlling +player switchCamera internal ; // returns to the player +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +remoteExec +//KeywordEnd// +DescriptionStart: +Asks server to execute given scripted function or script command. The environment chosen for the execution is as follows: +Scripted function - scheduled environment ( suspension is allowed, i.e. spawn, execVM ). +Script command - unscheduled environment ( suspension is NOT allowed). +remoteExec can also be used in SP (the same restrictions apply both to SP and MP). For more information about the usage, security features and advanced jip techniques check the remote execution dedicated section. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/remoteExec +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +params remoteExec [functionName, targets, JIP]; +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 30, 2015) +While it is true that this function executes the desired scripted command/function by calling it, it does not mean remoteExecCall itself will be executed right away. Therefore, calling remoteExecCall is by no means a replacement for calling scripted commands/functions directly. +Example: +remoteExecCall ["func1"]; call func2; // func2 can be executed sooner than func1 +call func1; call func2; // func2 will always execute after func1. +%NextNote% +(December 29, 2015) +remoteExec and remoteExecCall are currently filtered by BattlEye's remoteexec.txt, the string passed to BattlEye is formatted the same way as the following example's output: +$Code$ format ["%1 %2", functionName, str params]$/Code$ +%NextNote% +(January 15, 2016) +Executing commands/functions via remoteExec is more faster than using BIS_fnc_MP. Tested with BIS_fnc_codePerformance in ArmA 3 1.52. +$Code$['"string" remoteExec ["hint",player];',[],100] call BIS_fnc_codePerformance; //Result ~0.1ms$/Code$ +$Code$['["string","hint",player] call BIS_fnc_MP;',[],100] call BIS_fnc_codePerformance; //Result ~0.6ms$/Code$ +%NextNote% +(March 24, 2016) +The INCORRECT way to call reveal command on a certain object for every player: +$Code$[ player, _desired_object] remoteExec ["reveal", 0];$/Code$ +In this case player object will be the object obtained on the computer where remoteExec is initiated. If it is dedicated server, player will be objNull, if it is client, player would be player object on this client. In any case this will not reveal _desired_object for all connected players. +The CORRECT way: +$Code$[_desired_object, { player reveal _this}] remoteExec ["call", 0];$/Code$ +The _desired_object will be identical on every client, this is what we want, but player will refer to individual player on each client, so _desired_object will be revealed to all connected players. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +remoteExecCall +//KeywordEnd// +DescriptionStart: +Asks server to execute given scripted function or script command. The environment chosen for the execution is as follows: +Scripted function - unscheduled environment ( suspension is NOT allowed). +Script command - unscheduled environment ( suspension is NOT allowed). +remoteExecCall can also be used in SP (the same restrictions apply both to SP and MP). For more information about the usage, security features and advanced jip techniques check the remote execution dedicated section. +While it is true that this function executes the desired scripted command/function by calling it, it does not mean remoteExecCall itself will be executed right away. Therefore, calling remoteExecCall is by no means a replacement for calling scripted commands/functions directly. +Example: +remoteExecCall ["func1"]; call func2; // func2 can be executed sooner than func1 +call func1; call func2; // func2 will always execute after func1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/remoteExecCall +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +params remoteExecCall [functionName, targets, JIP] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 16, 2015) +Removal of persistent call must be in the following format no argument remoteExecCall [ empty string, JIP id ]. For example: +$Code$ remoteExecCall ["", "5:8"];$/Code$ +%NextNote% +(December 29, 2015) +remoteExec and remoteExecCall are currently filtered by BattlEye's remoteexec.txt, the string passed to BattlEye is formatted the same way as the following example's output: +$Code$ format ["%1 %2", functionName, str params]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +remove3DENConnection +//KeywordEnd// +DescriptionStart: +Remove connection between entities. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/remove3DENConnection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +remove3DENConnection [type, from, to] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +remove3DENEventHandler +//KeywordEnd// +DescriptionStart: +Removes Eden Editor event handler of given type and ID. +See the list of all Eden Editor Event Handlers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/remove3DENEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +remove3DENEventHandler [type,id] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +remove3DENLayer +//KeywordEnd// +DescriptionStart: +Remove Eden Editor editing layer. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/remove3DENLayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +remove3DENLayer layerID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAction +//KeywordEnd// +DescriptionStart: +Removes user added action with given id index. This only removes actions added with the addAction command. You cannot remove default game actions, such as reload. +This command has local effect. The action will only be removed on the computer that executes the command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeAction index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAll3DENEventHandlers +//KeywordEnd// +DescriptionStart: +Removes all Eden Editor event handlers of given type. +See the list of all Eden Editor Event Handlers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAll3DENEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAll3DENEventHandlers type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllActions +//KeywordEnd// +DescriptionStart: +Removes all unit's user added actions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllActions +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllActions unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(30 October, 2013) +Syntax of this command was until Arma 3 ver. 1.06: unit removeAllActions number +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllAssignedItems +//KeywordEnd// +DescriptionStart: +Unassigns and deletes all linked items from inventory. The commands operates on assignedItems array, which doesnt include goggles or headgear. Use removeGoggles and removeHeadgear for those. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllAssignedItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllAssignedItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllContainers +//KeywordEnd// +DescriptionStart: +Removes all containers from the unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllContainers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllContainers unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(2013) +This will remove the Uniform, Vest and Backpack from a unit leaving them unable to hold or pickup inventory items. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllCuratorAddons +//KeywordEnd// +DescriptionStart: +Restrict access to all addons for given curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllCuratorAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllCuratorAddons curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllCuratorCameraAreas +//KeywordEnd// +DescriptionStart: +Delete all curator camera areas. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllCuratorCameraAreas +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllCuratorCameraAreas curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllCuratorEditingAreas +//KeywordEnd// +DescriptionStart: +Delete all curator edit areas. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllCuratorEditingAreas +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllCuratorEditingAreas curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllEventHandlers +//KeywordEnd// +DescriptionStart: +Removes all event handlers of given type that were added by addEventHandler. Since VBS2 v1.24 can be applied on individual weapon rounds. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName removeAllEventHandlers handlerType +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllHandgunItems +//KeywordEnd// +DescriptionStart: +Removes all items from weapon except magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllHandgunItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllHandgunItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllItems +//KeywordEnd// +DescriptionStart: +Removes all special items from the unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(June 18, 2013) +Arma 3, version 0.70 - removes only items listed by command items. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllItemsWithMagazines +//KeywordEnd// +DescriptionStart: +Removes all itemsWithMagazines from the uniform, vest and backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllItemsWithMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllItemsWithMagazines unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllMissionEventHandlers +//KeywordEnd// +DescriptionStart: +Removes all mission event handlers of the given type which were added by addMissionEventHandler. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllMissionEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllMissionEventHandlers type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllMPEventHandlers +//KeywordEnd// +DescriptionStart: +Removes all MP event handlers of the given type which were added by addMPEventHandler. Command needs to be executed only on one PC for MP event handler to be removed globally. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllMPEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName removeAllMPEventHandlers event +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllMusicEventHandlers +//KeywordEnd// +DescriptionStart: +Removes all music track event handlers of given type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllMusicEventHandlers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllMusicEventHandlers type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllPrimaryWeaponItems +//KeywordEnd// +DescriptionStart: +Removes all items from weapon except magazine. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllPrimaryWeaponItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllPrimaryWeaponItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeAllWeapons +//KeywordEnd// +DescriptionStart: +Remove all weapons and magazines of the unit. +On vehicles only ammo is removed +Does not remove map, compass, radio. Use +unitname removeweapon "itemmap" +for that purpose. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeAllWeapons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeAllWeapons unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(October 14, 2014) +removeAllWeapons doesn't quite work with vehicles. If you need to remove all weapons from a vehicle, remove each weapon individually: +$Code${tank removeWeapon _x} forEach weapons tank;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeBackpack +//KeywordEnd// +DescriptionStart: +Removes unit's backpack +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeBackpack unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeBackpackGlobal +//KeywordEnd// +DescriptionStart: +Removes backpack from a unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeBackpackGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeBackpackGlobal unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeCuratorAddons +//KeywordEnd// +DescriptionStart: +Restrict curator use of given addons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeCuratorAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj removeCuratorAddons addons +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeCuratorCameraArea +//KeywordEnd// +DescriptionStart: +Removes curator camera area. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeCuratorCameraArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj removeCuratorCameraArea cameraAreaID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeCuratorEditableObjects +//KeywordEnd// +DescriptionStart: +Unregister objects which can be edited by a curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeCuratorEditableObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj removeCuratorEditableObjects [[objects],removeCrew] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeCuratorEditingArea +//KeywordEnd// +DescriptionStart: +Removes editing area for given curator. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeCuratorEditingArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj removeCuratorEditingArea editAreaID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeDrawIcon +//KeywordEnd// +DescriptionStart: +Removes an icon for an editor object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeDrawIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map removeDrawIcon [object,string identifier] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeDrawLinks +//KeywordEnd// +DescriptionStart: +Remove all drawn links for the given editor object for the given editor,object type. Pass an empty string as param type to remove all draw,links for an object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeDrawLinks +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map removeDrawLinks [from,param type] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeEventHandler +//KeywordEnd// +DescriptionStart: +Removes event handler added by addEventHandler. +When any handler is removed, all handler indices higher than the deleted one should be decremented. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName removeEventHandler [type, index] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeFromRemainsCollector +//KeywordEnd// +DescriptionStart: +Removes vehicles/units from disposal manager, added earlier with addToRemainsCollector +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeFromRemainsCollector +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeFromRemainsCollector remains +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeGoggles +//KeywordEnd// +DescriptionStart: +Removes goggles from unit (diver goggles for example). This command does not remove NVGoggles. Use unassignItem and removeItem or just unlinkItem for latter. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeGoggles +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeGoggles unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeGroupIcon +//KeywordEnd// +DescriptionStart: +Remove icon with given ID from group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeGroupIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group removeGroupIcon iconID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeHandgunItem +//KeywordEnd// +DescriptionStart: +Removes given weapon item from the handgun weapon cargo space. +As of Arma 3 DEV 1.37, this command also supports weapon magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeHandgunItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeHandgunItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeHeadgear +//KeywordEnd// +DescriptionStart: +Removes headgear from a unit. If unit has no headgear command quietly fails. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeHeadgear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeHeadgear unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeItem +//KeywordEnd// +DescriptionStart: +Removes item from the inventory. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeItemFromBackpack +//KeywordEnd// +DescriptionStart: +Removes item from soldier's backpack. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeItemFromBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeItemFromBackpack item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeItemFromUniform +//KeywordEnd// +DescriptionStart: +Removes item from soldier's uniform. Can be used with magazines and weapons too. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeItemFromUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeItemFromUniform item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeItemFromVest +//KeywordEnd// +DescriptionStart: +Removes item from soldier's vest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeItemFromVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeItemFromVest item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeItems +//KeywordEnd// +DescriptionStart: +Removes all items with given template from the inventory. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeItems item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMagazine +//KeywordEnd// +DescriptionStart: +Remove magazine from the unit. +Note: You may create invalid combinations with this function. When doing so, application behaviour is undefined. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName removeMagazine magazineName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMagazineGlobal +//KeywordEnd// +DescriptionStart: +Removes the magazine from the unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMagazineGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeMagazineGlobal magazineName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMagazines +//KeywordEnd// +DescriptionStart: +Remove all magazines of given type from the unit. +Note: You may create invalid combinations with this function. When doing so, application behaviour is undefined. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName removeMagazines magazineName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +Though BIS did not provide a command to remove all magazines of every type, it can still be accomplished using forEach magazines. example: +{player removeMagazine _x} forEach magazines player +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMagazinesTurret +//KeywordEnd// +DescriptionStart: +Removes all magazines of the given type from the unit. Use turret path [-1] for driver's turret. +Note: you may create invalid combinations by using this function. When doing so, application behaviour is undefined. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMagazinesTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle removeMagazinesTurret [magazineName, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(July 30, 2011) +Here's how you would remove all machine gun ammo from an M1A2 TUSK: +remove the gunner's M240 ammo. +$Code$this removeMagazinesTurret ["1200Rnd_762x51_M240",[0]];$/Code$ +remove the commander's M2 ammo. +$Code$this removeMagazinesTurret ["100Rnd_127x99_M2",[0,0]];$/Code$ +remove the loader's M240 ammo. +$Code$this removeMagazinesTurret ["100Rnd_762x51_M240",[0,1]];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMagazineTurret +//KeywordEnd// +DescriptionStart: +Removes the magazine from the turret. Use turret path [-1] for driver's turret. +Note: you may create invalid combinations by using this function. When doing so, application behaviour is undefined. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMagazineTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle removeMagazineTurret [magazineName, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMenuItem +//KeywordEnd// +DescriptionStart: +Removes a previously added menu item. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMenuItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map removeMenuItem index +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMissionEventHandler +//KeywordEnd// +DescriptionStart: +Removes mission event handler added by addMissionEventHandler. +When any handler is removed, all handler indices higher that the deleted one should be decremented. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMissionEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeMissionEventHandler [type, index] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 6, 2015) +As of Arma 3 version 1.38 you can safely remove mission event handlers without worrying about decrementing higher indices. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMPEventHandler +//KeywordEnd// +DescriptionStart: +Removes MP event handler added by addMPEventHandler. Format of handler is [type,index]. Index is returned by addMPEventHandler. When any handler is removed, all handler indices highter than the deleted one should decremented +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMPEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName removeMPEventHandler [event, index] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(25 July, 2011) +At least for MPKilled it needs to be executed where the target unit is local. The effect (the removal) is global. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeMusicEventHandler +//KeywordEnd// +DescriptionStart: +Removes specified music track event handler. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeMusicEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeMusicEventHandler [type, id] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removePrimaryWeaponItem +//KeywordEnd// +DescriptionStart: +Removes given weapon item from the primary weapon cargo space. +As of Arma 3 DEV 1.37, this command also supports weapon magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removePrimaryWeaponItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removePrimaryWeaponItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeSecondaryWeaponItem +//KeywordEnd// +DescriptionStart: +Removes given weapon item from the secondary weapon cargo space. This command also supports weapon magazines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeSecondaryWeaponItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeSecondaryWeaponItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeSimpleTask +//KeywordEnd// +DescriptionStart: +Remove a simple task from the list of simple tasks. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeSimpleTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person removeSimpleTask task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeSwitchableUnit +//KeywordEnd// +DescriptionStart: +Remove a unit from the list of units available for Team Switch. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeSwitchableUnit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeSwitchableUnit unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeTeamMember +//KeywordEnd// +DescriptionStart: +Remove given member from given team. Effect is local, unless both member and team are local to PC on which command is executed, then effect is global. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeTeamMember +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +team removeTeamMember member +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeUniform +//KeywordEnd// +DescriptionStart: +Removes uniform from unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeUniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeUniform unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeVest +//KeywordEnd// +DescriptionStart: +Removes vest from unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeVest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +removeVest unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeWeapon +//KeywordEnd// +DescriptionStart: +Remove weapon from a unit. The unit must be local to the computer where command is executed. For a global version of this command see removeWeaponGlobal. +Note : It is possible to create invalid combinations with this command (ie, attempting to remove a weapon that a unit does not possess). When doing so, application behaviour is undefined. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeWeapon weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(May 27, 2009) +CTD may occur in certain conditions: when shooter is AI and is currently shooting at target in some proximity (tested with M136 on ACE 1.08 and Compact Fix 1.14H+). Even "dropweapon" action may cause CTD with AI. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeWeaponGlobal +//KeywordEnd// +DescriptionStart: +Remove a weapon from a unit. An attempt to remove a weapon, which is not in unit's possession, is simply ignored. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeWeaponGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit removeWeaponGlobal weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +removeWeaponTurret +//KeywordEnd// +DescriptionStart: +Removes weapon from the turret. Use turret path [-1] for driver's turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/removeWeaponTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle removeWeaponTurret [weaponName, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +requiredVersion +//KeywordEnd// +DescriptionStart: +Check if version of application is available. If the current version is older than the required one, a warning message is shown and false is returned. +Version of format Major.Minor, e.g. 1.30 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/requiredVersion +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +requiredVersion version +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 12, 2008) +If the script contains a command that was introduced after the required version, it will still generate a syntax error, even if this test is done at the top of the script (as the whole script is parsed before execution). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +resetCamShake +//KeywordEnd// +DescriptionStart: +Stops any ongoing camera shake effects. Does not prevent new effects from being created. To disallow new effects altogether, enableCamShake should be used. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/resetCamShake +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +resetCamShake +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +resetSubgroupDirection +//KeywordEnd// +DescriptionStart: +Resets direction of subgroup. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/resetSubgroupDirection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +resetSubgroupDirection unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +resistance +//KeywordEnd// +DescriptionStart: +Resistance side. +When used in a format statement ( hint format ["%1",resistance] ), the string returned is "GUER". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/resistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +resistance +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +resize +//KeywordEnd// +DescriptionStart: +Change array size. Can be used to add or remove elements from an array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/resize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +arrayName resize count +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 13, 2014) +Use this number to resize the array to the number of elements desired, not the desired index of the final element. +resize cannot be used to create a new array. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +resources +//KeywordEnd// +DescriptionStart: +Returns the resources of a team member. Results are local to the PC on which command was executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/resources +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +resources member +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +respawnVehicle +//KeywordEnd// +DescriptionStart: +Sets vehicle as respawnable in MP game. The vehicle will be spawned at the locality and coordinates it was prior to destruction. If respawn type is set to base respawn (type 3) and vehicle respawn marker is provided (respawn_vehicle_XXXSIDEXXX), vehicle will spawn on the marker. +NOTE : Command has to be executed where vehicle is local +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/respawnVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle respawnVehicle [delay, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(May 28, 2007) +For this command to work (in MP) you need the appropriate markers in the mission. +The markers are... +respawn_vehicle_west +respawn_vehicle_east +respawn_vehicle_guerilla +respawn_vehicle_civilian +Also, by default it will use respawnDelay from the description.ext as mentioned unless you specify +respawnVehicleDelay = x; +Where x is delay in seconds. +In Multiplayer the respawned vehicle remains local to the client who was the last driver of the vehicle or the client who was the leader of the last AI driver of the vehicle. +If the vehicle has yet to be driven or the AI driver is local to the Server then the respawned vehicle will be local to the Server. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +restartEditorCamera +//KeywordEnd// +DescriptionStart: +Restarts the mission editor camera (if it was deleted by a script,for example). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/restartEditorCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +restartEditorCamera map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +reveal +//KeywordEnd// +DescriptionStart: +Reveals a target to a group. If toWhom is a unit, unit's group is considered. If toWhom is a vehicle, vehicle commander's group is considered. +The knowledge value will be set to the highest level any unit of the revealing side has about the revealed target. If the revealing side has no knowledge about the revealed target, the value will be set to 1. +Since ARMA 2 OA 1.60 the alternative syntax is available. Values greater than or equal 1.5 reveal the side of the target, too. +The knowledge level can only be increased, not decreased by this command. +In MP targetKnowledge and knowsAbout infos get updated only on the PC where command was executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/reveal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +toWhom reveal target +%NextRawSyntax% +toWhom reveal [target, accuracy] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(January 15, 2007) +In OFP v1.96, When a target is revealed to a unit, it's knowsAbout rating is set to 1, unless it was already more than 1 in which case reveal does nothing. See knowsAbout for more details about knowsAbout ratings and limitations. +%NextNote% +(January 24, 2008) +Use reveal to allow client to see a created vehicle faster - the associated menu interaction will become available therefore, like the player has option to get in sooner. +_tank = "M1A1" createVehicle (position player); +player reveal _tank; +//get in user actions become available instantly +%NextNote% +(January 15, 2012) +The same idea from Doolittle's note applies to beaming of units. If you setPos an unit or a player, reveal (all) nearby objects and vehicles to make the interaction possible a lot quicker. +%NextNote% +(January 15, 2012) +Revealing a targetUnit will also add it to nearTargets database of the given sourceUnit. The quality/detail level of the info depends on the knowsAbout value used with reveal. More detail in the nearTargets page. +%NextNote% +(October 21, 2014) +Units that have been previously subjected to enableSimulation false; or enableSimulationGlobal false; may stay unrecognised for a long time even after simulation was re-enabled, returning objNull as cursorTarget. Force revealing units with reveal command usually solves the problem. For example: $Code${ player reveal _x} forEach allUnits ;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +revealMine +//KeywordEnd// +DescriptionStart: +Sets given mine as known to the side. (Knowledge about a mine is always shared across all units in a side.) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/revealMine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +side revealMine mine +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +reverse +//KeywordEnd// +DescriptionStart: +Reverses given array by reference (modifies the original array, just like resize ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/reverse +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +reverse array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +reversedMouseY +//KeywordEnd// +DescriptionStart: +Return if mouse vertical axe is inverted. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/reversedMouseY +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +reversedMouseY +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +roadAt +//KeywordEnd// +DescriptionStart: +Returns road segment at given position, objNull otherwise. Same as isOnRoad only returns the actual road object instead of boolean. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/roadAt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +roadAt position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +roadsConnectedTo +//KeywordEnd// +DescriptionStart: +Find the road segments connected to the given road segment. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/roadsConnectedTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +roadsConnectedTo roadSegment +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +roleDescription +//KeywordEnd// +DescriptionStart: +Returns unit description set in Editor and visible on role selection screen in MP. Works in MP and SP. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/roleDescription +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +roleDescription unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 29, 2015) +One thing you should know about roles. When switching to units placed in editor on the fly in MP, it could mess up the role of the player. Could be bug, could be intended, but I would not recommend doing this. Create new unit dynamically if you need to switch to. Anyway, if role of the unit is messed up so is roleDescription. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeAttachedObjects +//KeywordEnd// +DescriptionStart: +Returns list of attached objects on ropes +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeAttachedObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeAttachedObjects vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeAttachedTo +//KeywordEnd// +DescriptionStart: +Returns the object it is attached to by rope +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeAttachedTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeAttachedTo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeAttachEnabled +//KeywordEnd// +DescriptionStart: +Returns true if vehicle can be attached to ropes +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeAttachEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeAttachEnabled vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeAttachTo +//KeywordEnd// +DescriptionStart: +Attach vehicle to rope with optional offset +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeAttachTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +[veh, toPoint, ropeEndDownDir] ropeAttachTo rope +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeCreate +//KeywordEnd// +DescriptionStart: +Create a rope (PhysX rope in Arma 3). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeCreate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeCreate [fromObject, fromPoint, toObject, toPoint, segments, length] +%NextRawSyntax% +ropeCreate [fromObject, fromPoint, length, segments, unroll] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 8, 2014) +Doesn't work well for towing vehicles on the ground. +Their wheels don't turn freely and have a LOT of friction. You'll most likely end up flipping the vehicle over if you try to tow it. +Also note that ropes can be destroyed/cut by shooting at them. +%NextNote% +(January 4, 2015) +Pay special attention to what is your fromObject and what is your toObject as this will have an impact on the physics of the rope. +For example: If you want to tow an Assault CRRC from a heavier Speedboat Minigun, attach two boats together with a rope. If you drive the Speedboat Minigun and set the CRRC as the fromObject, the rope will have almost no elasticity and the CRRC will yank around as you tow it. However, if you set the CRRC as the toObject, the rope will have more elasticity and will be a little friendlier for the CRRC when you are towing it. +%NextNote% +(July 9, 2015) +Parameters segments and unroll are not supported in Arma 3. Segments are set automatically according the length of a rope. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeCut +//KeywordEnd// +DescriptionStart: +Cut rope and detach rope from vehicle +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeCut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeCut [rope, distance] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeDestroy +//KeywordEnd// +DescriptionStart: +Destroy a rope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeDestroy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeDestroy rope +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeDetach +//KeywordEnd// +DescriptionStart: +Detach a rope from an object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeDetach +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle ropeDetach rope; +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeEndPosition +//KeywordEnd// +DescriptionStart: +Return rope end positions in Position3D format +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeEndPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeEndPosition rope +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeLength +//KeywordEnd// +DescriptionStart: +Return rope length in meters (set by ropeCreate, ropeCut, ropeUnwind ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeLength +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeLength rope +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 19, 2016) +When a rope gets stretched ropeLength will still return the same length as before. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropes +//KeywordEnd// +DescriptionStart: +Returns a vehicle's rope objects in an Array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropes +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropes vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(05 April, 2014) +The ropes command seems to return each individual sling load rope. ropes will return an empty Array if the sling load ropes are not deployed. Ropes as of A3 1.33 have a cfgVehicles classname of "Rope". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeUnwind +//KeywordEnd// +DescriptionStart: +Unwind rope to target length. Use relative parameter for changing rope length +/- from current length +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeUnwind +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeUnwind [rope, speed, targetLength, relative] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 8, 2014) +Unwinding speed is not linear but instead automatically accelerates at the beginning and slows down at the end. +The speed also only seems to have no effect when pulling the rope in. (unless the end of the rope is not attached to anything) +High unwinding speeds (over ~250) can cause your cargo to get stuck in midair. +%NextNote% +(January 4, 2015) +Rope length limits are between 0.5 and 100 meters. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +ropeUnwound +//KeywordEnd// +DescriptionStart: +False if unwinding in progress, otherwise true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/ropeUnwound +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +ropeUnwound rope +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rotorsForcesRTD +//KeywordEnd// +DescriptionStart: +Returns force produced by rotors. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rotorsForcesRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rotorsForcesRTD RTD_helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 4, 2014) +There is no official information I can find on what these values mean. According to my testing on the Mi-290 Taru, here is what I have come up with: +$Code$[[ rotor 1 roll +right/-left, rotor 1 pitch +down/-up, rotor 1 collective +up/-down ], +[ rotor 2 roll +right/-left, rotor 2 pitch +down/-up, rotor 2 collective +up/-down ]]$/Code$ +When yawing left and right, rotor 1 and 2 collective differ from each other. This is normal behaviour with coaxial rotors. Yawing right increase rotor 1 collective and decreases rotor 2 collective. Yawing left does the opposite. Rotor 1 in this example seems to be the bottom rotor. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +rotorsRpmRTD +//KeywordEnd// +DescriptionStart: +Returns rotors RPM +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/rotorsRpmRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +rotorsRpmRTD RTD_helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +round +//KeywordEnd// +DescriptionStart: +Rounds up or down to the closest integer. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/round +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +round x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +runInitScript +//KeywordEnd// +DescriptionStart: +Launch init.sqs or init.sqf scripts. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/runInitScript +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +runInitScript +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +safeZoneH +//KeywordEnd// +DescriptionStart: +Returns ratio of height of Safezone UI relative to the Absolute UI. See SafeZone +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/safeZoneH +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +SafeZoneH +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +safeZoneW +//KeywordEnd// +DescriptionStart: +Returns ratio of width of Safezone UI relative to the Absolute UI. See SafeZone +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/safeZoneW +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +safeZoneW +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +safeZoneWAbs +//KeywordEnd// +DescriptionStart: +Returns SafeZone width (of all monitors, in case there's more than one) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/safeZoneWAbs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +safeZoneWAbs +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +safeZoneX +//KeywordEnd// +DescriptionStart: +see SafeZone +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/safeZoneX +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +SafeZoneX +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +safeZoneXAbs +//KeywordEnd// +DescriptionStart: +Returns SafeZone left border (of all monitors, in case there's more than one) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/safeZoneXAbs +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +safeZoneXAbs +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +safeZoneY +//KeywordEnd// +DescriptionStart: +see SafeZone +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/safeZoneY +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +SafeZoneY +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveGame +//KeywordEnd// +DescriptionStart: +Autosave game (used for Retry). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveGame +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +saveGame +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveIdentity +//KeywordEnd// +DescriptionStart: +Saves person's identity to Objects.sav file in campaign directory as entry name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveIdentity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName saveIdentity name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 12, 2006) +Can be also used in singleplayer missions to save player status before cutscenes and load it to player's double. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveJoysticks +//KeywordEnd// +DescriptionStart: +Saves joysticks key mappings into the joysticks.cfg file. Engine add these joysticks to the Joystick Scheme mapping dialog in options controls section. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveJoysticks +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +saveJoysticks +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveOverlay +//KeywordEnd// +DescriptionStart: +Save the current overlay. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveOverlay +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +saveOverlay map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveProfileNamespace +//KeywordEnd// +DescriptionStart: +Saves the variables stored in profileNamespace to the persistent active user profile. +Warning : this is a file operation, which makes it expensive! It is not recommended to do this at a high frequency in a loop for example. It is however also recommended not to change a large amount of variables and wait long before saving, because certain game crashes may cause a loss of data. +Warning : saving a lot of data can quickly increase the size of the profile variables file, so keep an eye on this. +Warning : TKOH's Heliport status (used in the Career mode for example) is stored in this file, so be mindful of working with this technology to avoid losing data and progress. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveProfileNamespace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +saveProfileNamespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Variables are also saved when the game is quit. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveStatus +//KeywordEnd// +DescriptionStart: +Saves object's properties to Objects.sav file in campaign directory as entry name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveStatus +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object saveStatus name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +saveVar +//KeywordEnd// +DescriptionStart: +Save variable value into the campaign space. This variable is available to all following missions in the campaign. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/saveVar +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +saveVar varname +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 28, 2009) +If you try to saveVar a vehicle saved in your variable (SavedVars = [Car1]; saveVar "SavedVars"), then Car1 will not be properly "saved", refering to ObjNull if you try to use it in subsequent missions, even if a vehicle with the same vehicle varname exists. To get around this, save the vehicle's varname as a string (SavedVars = [str(Car1)]) and then when you need it just use call compile to "unstring" the varname (_car = call compile (SavedVars select 0);). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +savingEnabled +//KeywordEnd// +DescriptionStart: +Check if saving the game is enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/savingEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +savingEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +say +//KeywordEnd// +DescriptionStart: +Unit will say given sound. +When the Unit is a Person, it will also perform corresponding lipsync effect provided an appropriate.lip file has been created for this sound. +A unit that has been killed or does not exist will not say anything. +Compare this with playSound which will always play a sound at the location of the player. +If the camera is not within given range, title is not shown and the sound will not be heard. +Sound is defined in CfgSound of the Description.ext. +NOTE: say will mimic either say2D or say3D depending on whether it is there executed in a cut scene or in a game scene. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/say +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +from say sound +%NextRawSyntax% +from say [sound, maxTitlesDistance, speed] +%NextRawSyntax% +[from, to] say sound +%NextRawSyntax% +[from, to] say [sound, maxTitlesDistance, speed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(7 March 2013) +Say will occur in 3D when the player is active, during cutscenes it will not. Use say3D for cutscenes. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +say2D +//KeywordEnd// +DescriptionStart: +Plays given sound in 2D +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/say2D +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +from say2D sound +%NextRawSyntax% +from say2D [sound, maxTitlesDistance, speed] +%NextRawSyntax% +[from, to] say2D sound +%NextRawSyntax% +[from, to] say2D [sound, maxTitlesDistance, speed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +say3D +//KeywordEnd// +DescriptionStart: +Unit or object will say given sound in 3D Space. +This allows broadcasting of positional music or sound from a source, without having to script a fade sound or music command. +Compare this with say2D which will always play a sound at the location of the player after he has been in the vicinity of a broadcasting sound. +Sound is defined in CfgSound of the Description.ext. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/say3D +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +from say3D sound +%NextRawSyntax% +from say3D [sound, maxTitlesDistance, speed] +%NextRawSyntax% +[from, to] say3D sound +%NextRawSyntax% +[from, to] say3D [sound, maxTitlesDistance, speed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(7 March 2013) +The only difference with this command and say is during cutscenes (when some camera effect is active). In cutscenes, say3D is 3D, say is not. +%NextNote% +(July 19, 2015) +In Arma 2 1.63, the object this command is assigned to must be alive for the sound to broadcast. If the object is killed while the sound is still playing, the sound will stop immediately. +Here is a link to the forum to get around this issue: [1] +I have not tested this in Arma 3 yet. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +scopeName +//KeywordEnd// +DescriptionStart: +Defines name of current scope. Name is visible in debugger, and name is also used as reference in some commands like breakOut and breakTo. Scope name should be defined only once per scope. Trying to set a different name on the scope that has already defined scope name will result in error. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/scopeName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +scopeName name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +score +//KeywordEnd// +DescriptionStart: +Returns the person's score in MP. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/score +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +score unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +scoreSide +//KeywordEnd// +DescriptionStart: +Returns score for the given side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/scoreSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +scoreSide side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +screenToWorld +//KeywordEnd// +DescriptionStart: +Returns the position on landscape ( PositionAGL ) corresponding to the given point on screen (in UI coordinates). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/screenToWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +screenToWorld screen +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +scriptDone +//KeywordEnd// +DescriptionStart: +Check if a script is finished running using the Script_(Handle) returned by execVM or spawn. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/scriptDone +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +scriptDone handle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(03:54, 11 September 2009) +A Null Script handle can be created in this manner: +$Code$_handle = 0 spawn {};$/Code$ +That is what any Script_(Handle) becomes when a script is finished running, meaning it will test as true with: +$Code$ scriptDone _handle $/Code$ and it returns " NULL-script " when converted to string. This in turn lets you initialize the variable with a completed Script_(Handle) and lets you test the variable even though nothing else may have set the handle by creating a script with spawn or execVM. It also lets you store and manage script handles in arrays, and a few other sexy things. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +scriptName +//KeywordEnd// +DescriptionStart: +Assign a user friendly name to the VM script this command is executed from. +Once name is assigned, it cannot be changed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/scriptName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +scriptName name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(17:39, 13 June 2009 (CEST)) +scriptName is good when you want to load the handle of some spawn or call with some name: +on top of leetscript.sqf +$Code$ +scriptName "LEETSCRIPT"; +GLOBAL_SCR_NAME = [] spawn "leetscript.sqf"; +hint format ["%1",GLOBAL_SCR_NAME]; +//display "LEETSCRIPT"$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +scriptNull +//KeywordEnd// +DescriptionStart: +A non-existing Script or script that has finished ( scriptDone ). To compare non-existent scripts use isNull or isEqualTo : +scriptNull == scriptNull ; // ERROR! == cannot be used with script object +isNull scriptNull ; // true +scriptNull isEqualTo scriptNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/scriptNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +scriptNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +scudState +//KeywordEnd// +DescriptionStart: +Current state of given Scud launcher. Following states are recognized: +0 - No activity +1 - Launch preparation, +2 - Launch prepared +3 - Ignition +4 - Launched. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/scudState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +scudState scudName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +This command checks the scud status (Non-integral values are used to indicate transition between states). +To make the scud be upright, launch or cancel launch you need to use actions. +$Code$scud1 action ["scudLaunch",scud1]; // erect the missile +scud1 action ["scudStart",scud1]; // launch the missile +scud1 action ["scudCancel",scud1]; // down the missile +$/Code$ +(Make sure either the scud launcher has a crew inside or you use the game logic to perform actions). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +secondaryWeapon +//KeywordEnd// +DescriptionStart: +Returns name of a unit's secondary weapon (empty string if none). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/secondaryWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +secondaryWeapon unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +secondaryWeapon tells you what weapon the unit has irrespective of the status of the weapon. For example a unit that has a LAWLauncher on his back will still report a LAWLauncher as its secondary weapon. Use currentWeapon to detect the active weapon. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +secondaryWeaponItems +//KeywordEnd// +DescriptionStart: +Returns array with all items assigned to the secondary weapon. This command is used for infantry weapons only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/secondaryWeaponItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +secondaryWeaponItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +secondaryWeaponMagazine +//KeywordEnd// +DescriptionStart: +Returns either single element array, containing class name of currently loaded in the secondary weapon magazine, or an empty array if unit has no secondary weapon or secondary weapon is not loaded. This command is used for infantry weapons only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/secondaryWeaponMagazine +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +secondaryWeaponMagazine unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +select +//KeywordEnd// +DescriptionStart: +Selects an element from an array, config entry from Config or substring from a string or a range from an array. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/select +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array select index +%NextRawSyntax% +array select boolean +%NextRawSyntax% +config select index +%NextRawSyntax% +string select [start, length] +%NextRawSyntax% +array select [start, count] +%NextRawSyntax% +array select expression +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(3 March 2009) +When combined with the count command, this can be used to read all entries out of a config; even when you don't know exactly how many entries there will be. See the notes under count for more info. +%NextNote% +(27 Sep, 2013) +Rounding of fractions with select is not the same as when you use round command: +$Code$_roundThis = 0.5; +hint str ([0,1] select _roundThis); //0 +hint str round _roundThis; //1$/Code$ +%NextNote% +(30 May, 2014) +In ArmA3 ver 1.18, Boolean type supported. Which true defaulted as 1 and false as 0. +$Code$[0,1] select (56 40) // 1 +[0,1,2] select ((! isNil "v") false ) // 0$/Code$ +%NextNote% +(June 22, 2015) +Usually when select tries to pick up element out of range, Arma throws "division by zero" error. However there are exceptions. Basically as long as index of element you are selecting is less then or equal to array size, you will get no error. +$Code$[] select 0; //ok, result is nil +[1,2,3] select 3; //ok, result is nil +[1,2,3] select 4; //division by zero$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectBestPlaces +//KeywordEnd// +DescriptionStart: +Find the places with the maximum value of expression in the given area. Places can be on water. Results are sorted by value. Search pattern is randomised every command execution. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectBestPlaces +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +selectBestPlaces [position, radius, expression, precision, sourcesCount] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Jul 17, 2010) +see http://forums.bistudio.com/showthread.php?t=93897 for some more information (though neither official, nor complete). The most important information is the list of useable keywords for the expression which is: forest, trees, meadow, hills, houses, sea, night, rain, windy and deadBody. The keyword will be replaced by the actual value at the given sample position and thus the expression gets evaluated. For example the following expression (which returns high values in forest) "forest + trees - meadow - houses - (10 * sea)" might be transformed to 0 + 0.1 - 0.7 - 0 - (10 * 0) which is - with it's result of -0.6 - not in the forest, though there are some tree(s) around. You get the idea. +Also note that you may aswell check such an expression value at a single position by passing a low radius and a sourceCount of 1, which is often just as useful as retrieving multiple (and already sorted) positions. +Also do not underestimate the keywords night, rain or windy, for if you couple them with the other keywords, you can easily get a highly dynamic system at a very low cost. (this, btw., is how animals "choose" where and when to spawn) +%NextNote% +(Apr 3, 2014) +In ArmA3 ver 1.14 Two new expressions are available: waterDepth (0-1) and camDepth (0-1), along with three simple operators: interpolate, randomGen and factor that can be used together with expressions. E.g. +$Code$ +p = selectBestPlaces [ +position player, +500, +"(2 * (waterDepth interpolate [1,16,0,1]) * ((0.1+houses factor [0.1,0.8]) * (randomGen 1 + houses)))", +1, +1]; +$/Code$ +A lgorithm randomGen: +$Code$ +randomGen A(number): randomly generate a float number from 0 - A +$/Code$ +A lgorithm factor: +$Code$ +A(number) factor [p,q] = +p A q: [(A -p)/(q-p)] +$/Code$ +A lgorithm interpolate: +$Code$ +A(number) interpolate [p,q,r,s] = +A =p:r +A =q:s +p A q: [(A -p)/(q-p)]*(s-r) +r +$/Code$ +%NextNote% +(June 15, 2015) +precision seems to have range 0 - 100. At very low values the command is extremely slow. 100 makes it quite fast. It looks like precision is some kind of grid search size. Large chunks make the search faster but less accurate. +Resulting array is [] if sourcesCount is 0 or expression is "". In all other cases it seems that result is array of arrays of the set max count. The sole indication of successful search is expressionResult value when it is 0. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectDiarySubject +//KeywordEnd// +DescriptionStart: +Select the subject page in a log. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectDiarySubject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person selectDiarySubject subject +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectedEditorObjects +//KeywordEnd// +DescriptionStart: +Returns a list of currently selected editor objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectedEditorObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +selectedEditorObjects map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectEditorObject +//KeywordEnd// +DescriptionStart: +Select an editor object. Does not un-select previously selected objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectEditorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map selectEditorObject object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectionPosition +//KeywordEnd// +DescriptionStart: +Search for selection in the object model (first in the memory level, then in geometry LODs). +Returns position in model space. In A1 it returns the initial position of the selection, in A2/3 position of the selection (e.g. when it is animated) in render time scope. If a selection does not exist [0,0,0] is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectionPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object selectionPosition selectionName +%NextRawSyntax% +object selectionPosition [selectionName, LODName] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(January 5, 2007) +To know more selections simply create an eventHandler damage on an object. +%NextNote% +(July 29, 2015) +Since 1.49.131660, you can use an alternative syntax: +object selectionPosition [selectionName, lodName] +lodName: "Memory", "Geometry", "FireGeometry", "LandContact", "HitPoints" +If the given selectionName is not found in the given lod, [0,0,0] is returned. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectLeader +//KeywordEnd// +DescriptionStart: +Select a group's leader. In MP the group has to be local to the PC executing the command. Locality of the group can be checked with local command and group ownership with groupOwner command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectLeader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName selectLeader unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectNoPlayer +//KeywordEnd// +DescriptionStart: +Switch player to no unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectNoPlayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +selectNoPlayer +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +-- Worldeater 09:48, 15 October 2010 (CEST) +%NextNote% +(May 2, 2015) +SP only. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectPlayer +//KeywordEnd// +DescriptionStart: +Moves player into given unit. In Arma 3 it is now not possible to selectPlayer into unit occupied by another player. Also avoid selecting player into editor placed units in multiplayer, as it may, on occasion, lead to some undefined behaviour. If you need to selectPlayer into another unit, consider creatingUnit dynamically. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectPlayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +selectPlayer unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +This command has significant effects on locality +Notes on locality issues with selectPlayer in multiplayer environments: +1) If you switch to a unit that's not local, control over movement will not be given to you immediately. For example, if you switch to an AI unit whose leader is a player, you will not be able to control the movement of your new avatar, as its control remains with the leader unit. You will however be able to look around while the unit walks automatically. +2) The identity of units are not transferred properly: If your old unit dies, this will count for your stats. Your old unit might remain identifiable as you (if you aim at the unit you see your own name). Your new unit will keep it's name, face and voice (face can be set dynamically, but name, voice and glasses have to be defined before mission start in the description.ext). When chatting, not the name of your original identity, but the identity of the transferred to person will show. +Those 2 Points were for ArmA I, I am currently analyzing the behaviour in ArmA II with version 1.08 + OA 1.57 +So with ArmA II, you still have to keep an eye on locality (otherwise the AI will controll the unit you are), but there are cool possibilities now: if you do a "selectPlayer unitVarName",the unit takes your identity (with name, voice, face and glasses) - and your identity is also visible on other clients! +But you have to remember that your old unit will stay with your Identity. Dies the old unit, the stats count it. An other thing you have to pay attention is the Death for your new unit - you have to register an EventHandler, otherwise you will stay in your dead unit, and also the MenuOption Respawn won't help you out! 3.Jan. 2011 +3) If you do a selectPlayer call, join,joinSilent,joinAs,joinAsSilent wont work anymore correctly. Means: Your unit joins the other group AND your unit will be local to the other group. so at the moment you can use selectPlayer only as a single human player in a group. In the later day I will try what happens if both human players are units by selectPlayer, and both join the same group (till yet tried with one selectPlayer unit and one originUnit) +14.May 2011 +Tried to create ingame a group with a selectPlayer Unit (on both clients), and joint the new squad. The result was, the group was local to the client who created the group, so after that, all other units that join that Group are - as you may think already, local to that single client. 18.May 2011 +%NextNote% +3) After switching to a unit that's not local, the unit will remain local to you after switching back. For example, if we have units A and B, and a client starts as unit A and unit B is AI under server control. If you switch to unit B, it will take some time, but eventually you can control the movement of unit B (see (1) above). Now if you switch back to unit A, unit B will remain local to you, the player. Any server-side scripts which try to execute local arguments -- such as doMove -- will fail. +%NextNote% +A working implementation can be found at A S ProMode dev-heaven repo, acc guest, pw guest or at pastebin. +Be careful to learn all the pitfalls and things you need to take into consideration to have this working in MP. +%NextNote% +(09 March 2014) +Arma 3 (v1.13): In MP the Identity and the name carries over to the new Unit but not in SP. Use setName to set the name in SP. +%NextNote% +(June 24, 2015) +Most of the notes above do not apply to Arma 3 anymore. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectRandom +//KeywordEnd// +DescriptionStart: +Returns a random element from the given array. Engine solution to BIS_fnc_selectRandom +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectRandom +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +selectRandom array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectWeapon +//KeywordEnd// +DescriptionStart: +Selects the given weapon. +Note: For weapons that have more than one muzzle, you have to input the muzzlename and not the weaponName. +The only weapons that have muzzleNames seem to be rifles with grenade launchers, handgrenades, smokeshells and satchels. +In all other cases the weaponName must be used. +Fortunately, in OFP, in most cases, both names are the same. But check. +In ArmA the weaponNames and muzzleNames are different. +For muzzle names see cfgWeapons. +NOTE: The unit must be local to the PC on which command is executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectWeapon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName selectWeapon muzzleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(5 Aug, 2008) +Rather than simply using selectWeapon to select your default weapon after adding them to your player, it is recommended you use a script instead similar to the following, which caters for multiple muzzles: +SelectWeapon.sqf +// Desc: select default weapon handle multiple muzzles +if (count weapons player 0) then +{ +private['_type', '_muzzles']; +_type = ((weapons player) select 0); +// check for multiple muzzles (eg: GL) +_muzzles = getArray(configFile cfgWeapons _type muzzles ); +if (count _muzzles 1) then +{ +player selectWeapon (_muzzles select 0); +} +else +{ +player selectWeapon _type; +}; +}; +%NextNote% +(22 Mar, 2010) +Can be used with primaryWeapon to select the primary weapon. +An example with muzzle care (see Dr_EyeBall note) : +if ( (primaryWeapon player) != ) then +{ +private['_type', '_muzzles']; +_type = primaryWeapon player; +// check for multiple muzzles (eg: GL) +_muzzles = getArray(configFile cfgWeapons _type muzzles ); +if (count _muzzles 1) then +{ +player selectWeapon (_muzzles select 0); +} +else +{ +player selectWeapon _type; +}; +}; +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +selectWeaponTurret +//KeywordEnd// +DescriptionStart: +Selects the given weapon on specified turret. Use turret path [-1] for driver's turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/selectWeaponTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle selectWeaponTurret [weapon, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sendAUMessage +//KeywordEnd// +DescriptionStart: +Send the command to the list of clients. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sendAUMessage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sendAUMessage [clientList, command] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sendSimpleCommand +//KeywordEnd// +DescriptionStart: +Sends a simple command to the vehicle's driver / gunner. +Gunner commands +FIRE +CEASE FIRE +MANUAL FIRE +CANCEL MANUAL FIRE +KEY FIRE +Driver commands +FORWARD +STOP +BACK +FAST +KEY FAST +SLOW +KEY SLOW +LEFT +RIGHT +KEY UP +KEY DOWN +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sendSimpleCommand +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName sendSimpleCommand command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Valid commands include: "FORWARD", "SLOW", "FAST" "BACK", "LEFT", "RIGHT", "STOP", "FIRE", "CEASE FIRE", "MANUAL FIRE", "CANCEL MANUAL FIRE". There may be more. +Only vehicles crewed by a player can use sendSimpleCommand. +%NextNote% +Other commands that work: "KEY FIRE", "KEY FAST", "KEY SLOW", "KEY DOWN", "KEY UP". These will simulate key presses. +In Arma 3 player doesn't always need to be in the vehicle to give commands. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sendTask +//KeywordEnd// +DescriptionStart: +Create a new AI task (subtask of parentTask). Type is name of registered task type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sendTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sender sendTask [receiver,[type] or [type,parentTask],priority,name1,value1,name2,value2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sendTaskResult +//KeywordEnd// +DescriptionStart: +Send a result of the task to the task sender. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sendTaskResult +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task sendTaskResult [state,result,sentence] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sendUDPMessage +//KeywordEnd// +DescriptionStart: +Send message to given address using UDP protocol. Returns false if the message has not been delivered +Note: Not implemented (see talk page for more info). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sendUDPMessage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sendUDPMessage [ip, port, message] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +serverCommand +//KeywordEnd// +DescriptionStart: +Executes a server command on the server. In order to be able to execute admin command the user must be logged in as admin. Commands available for non-admin users are: #login, #vote and #userlist. Which command is available can be detected with serverCommandAvailable and whether or not it can be executed with serverCommandExecutable. NOTE: This command must be executed from UI event handler ( ctrlAddEventHandler, displayAddEventHandler ), such as onButtonDown or other User_Interface_Event_Handlers. +As of Arma 3 v1.39 serverCommand can be used on dedicated server and headless clients. This requires a password, both set in server.cfg and passed to the command itself. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/serverCommand +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +serverCommand command +%NextRawSyntax% +password serverCommand command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +serverCommandAvailable +//KeywordEnd// +DescriptionStart: +Returns true if the serverCommand can be performed on the machine, false if not. serverCommand can be executed only from User Interface Event Handlers, so calling this command elsewhere may return true even if serverCommand would have no effect. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/serverCommandAvailable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +serverCommandAvailable command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +serverCommandExecutable +//KeywordEnd// +DescriptionStart: +Returns true if the serverCommand can be performed on the machine and in this exact environment, otherwise false. serverCommand can be executed only from User Interface Event Handlers, and this command also checks if that's the case. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/serverCommandExecutable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +serverCommandExecutable command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +serverName +//KeywordEnd// +DescriptionStart: +Returns name of the hosting server in MP, "" in SP. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/serverName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +serverName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +serverTime +//KeywordEnd// +DescriptionStart: +Server time synchronized to clients. Returns always 0 in Singleplayer. +Note that in ArmA2 1.05 Final, this command only returns the time since the Server was actually started. +NOTE: serverTime is available to both server and clients and shows the same value when synced. The only time it is not synced is on the server, right after server restart and only for the first 300 seconds. Client side serverTime is synced from the start. serverTime is also different from server time and server diag_tickTime +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/serverTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +serverTime +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(Sep 8, 2010(CEST) 19:31) +There is a bug in this command, about 3 minutes after missionstart this command returns something completely different. +See http://dev-heaven.net/issues/13581 for further infomation. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set +//KeywordEnd// +DescriptionStart: +Changes the element at the given (zero-based) index of the array. +If the element does not exist, resize index+1 is called to create it. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array set [index, value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENAttribute +//KeywordEnd// +DescriptionStart: +Set one of entity attributes. +! +Attributes are available only within the Eden Editor workspace. You cannot access them in scenario preview or exported scenario! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENAttribute +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entity set3DENAttribute [class, value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENAttributes +//KeywordEnd// +DescriptionStart: +Set entity attributes. +An attribute is identified by its property ( data when it's engine-drive attribute) value in config. For the list of all attributes with their properties, see Setting Attributes. +! +Attributes are available only within the Eden Editor workspace. You cannot access them in scenario preview or exported scenario! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENAttributes +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +set3DENAttributes [[ entities1, class1, value1 ],..., [ entitiesN, classN, valueN ]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENGrid +//KeywordEnd// +DescriptionStart: +Sets the grid increment for the given transformation type. +Transformation types: +Rotation - "r" +Translation - "t" +Scale - "s" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENGrid +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +set3DENGrid [type,value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENIconsVisible +//KeywordEnd// +DescriptionStart: +Toggle visibility of Eden Editor icons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENIconsVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +set3DENIconsVisible [showMap, showScene] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENLayer +//KeywordEnd// +DescriptionStart: +Set layer for Eden Entity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENLayer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entity set3DENLayer layerID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENLinesVisible +//KeywordEnd// +DescriptionStart: +Toggle visibility of Eden Editor lines. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENLinesVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +set3DENLinesVisible [showMap, showScene] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENMissionAttributes +//KeywordEnd// +DescriptionStart: +Set scenario attributes. +An attribute is identified by its property ( data when it's engine-drive attribute) value in config. For the list of all attributes with their properties, see Setting Attributes. +! +Attributes are available only within the Eden Editor workspace. You cannot access them in scenario preview or exported scenario! +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENMissionAttributes +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +set3DENMissionAttributes [[ section, class1, value1 ],..., [ section, classN, valueN ]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +set3DENObjectType +//KeywordEnd// +DescriptionStart: +Sets the classname of one or more given Eden Editor objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/set3DENObjectType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objects set3DENObjectType classname +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAccTime +//KeywordEnd// +DescriptionStart: +Set time acceleration coefficient. May be also used to slow time in cutscenes. This command does NOT work in multiplayer. accFactor is clamped to [1/128; 4]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAccTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setAccTime accFactor +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +A good habit to get into is setting the accTime to 1 at the start of all cutscenes, in case the player is running at 4x speed when the scene starts. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAirportSide +//KeywordEnd// +DescriptionStart: +Set owning side of the airport. ID is the number to identify which airport on the island you want to check. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAirportSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +id setAirportSide side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAmmo +//KeywordEnd// +DescriptionStart: +Sets custom ammo count in the currently loaded magazine of the specified weapon. The unit must be local to the computer where command is executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setAmmo [weapon, count] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAmmoCargo +//KeywordEnd// +DescriptionStart: +Set amount of ammo resources in cargo space of a rearm vehicle. Ammo resource is used to resupply vehicles that take ammo. Soldiers use individual magazines instead. Amount: 1 is full cargo. +The actual quantity to work with is determined by the model's class in CfgVehicles +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAmmoCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setAmmoCargo ammoCargo +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(31 Aug, 2011) +While the amount of total 'ammo' that can be reloaded is defined in the truck/supply point's CfgVehicles entry, the amount each round of ammunition takes from that total is defined in the CfgAmmo 'Cost' entry for that round. +Your typical truck has 300000 ammo capacity, and the tunguska's missiles have a Cost of 50000. So the tunguska can reload a total of 6 missiles from the ammo truck before the ammo capacity is depleted and needs to be set with setAmmoCargo. +A similar thing applies with a vehicle's cfgVehicle Cost entry for repairing, and the vehicle's fuelCapacity entry when refuelling. +%NextNote% +(July 10, 2015) +(ArmA 3 1.44) setAmmoCargo will have no effect if the vehicle doesn't support getAmmoCargo. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAnimSpeedCoef +//KeywordEnd// +DescriptionStart: +Sets a coefficient for animation speed +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAnimSpeedCoef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setAnimSpeedCoef coef +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAperture +//KeywordEnd// +DescriptionStart: +Sets custom camera aperture (-1 to do it automatically). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAperture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setAperture aperture +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +It's up to the maker of the mission to decide if HDR effects are to be disabled and what aperture to be used. Of course, this static aperture setting will not work well after lighting conditions changed too much. +( forum discussion ) +%NextNote% +The aperture value to simulate typical daylight (outdoor) conditions is 50. The aperture value to simulate typical daylight (indoor) conditions is 30. Setting the value to less than 20 will result in a very bright scene, suitable for night conditions. The closer the number is to 0, the more light will be let into the lens, to carry on the aperture metaphor. Different lighting/weather conditions can change the actual indoor and outdoor aperture values. Experiment and test to be sure. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setApertureNew +//KeywordEnd// +DescriptionStart: +Sets custom camera aperture ([-1] to do it automatically). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setApertureNew +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setApertureNew [min, std, max, stdLum] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 10, 2014) +Effects of command are persistent after mission end. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setArmoryPoints +//KeywordEnd// +DescriptionStart: +Stores passed number into [USERNAME].ArmaXProfile file, where it assigns it as a value to armoryPoints entry. If entry doesn't exist, it is created. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setArmoryPoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setArmoryPoints points +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAttributes +//KeywordEnd// +DescriptionStart: +Returns a structured text created by the given structured or plain text by setting attributes to the given values. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAttributes +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +text setAttributes [name1, value1, name2, value2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 9, 2014) +This command doesn't seem to work in Arma 3. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setAutonomous +//KeywordEnd// +DescriptionStart: +Sets UAV autonomous mode. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setAutonomous +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uav setAutonomous bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setBehaviour +//KeywordEnd// +DescriptionStart: +Set group/unit behaviour mode. Behaviour is one of: +"CARELESS" +"SAFE" +"AWARE" +"COMBAT" +"STEALTH". +See this page for details of the effect of this command on AI units. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setBehaviour +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName setBehaviour behaviour +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +Warning! Since ArmA v.1.14 the command setBehaviour "COMBAT" do not work correctly any loger. +Units ( Groups ) which are using this behaviour and then get a move order, will not move to the given position. +%NextNote% +Although setBehaviour can be called on an individual unit, the entire group will be affected. +%NextNote% +If setting a behaviour on an individual unit is required, it can be achieved by creating a temporary group, use joinSilent to make the individual unit belong to that group, then change his behaviour, use joinSilent into the original group, then delete the temporary group. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setBleedingRemaining +//KeywordEnd// +DescriptionStart: +Sets for how many seconds injured unit leaves blood trail. The unit damage must be = 0.1 for this command to have an effect, otherwise, the getBleedingRemaining will return 0 and no blood trail is left behind. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setBleedingRemaining +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setBleedingRemaining time +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCameraInterest +//KeywordEnd// +DescriptionStart: +Set camera interest for given entity. Camera interest is by default 0. Any unit which is speaking has its camera interest raised to 50. Camera interest is used to focus camera to control depth of field in cutscenes. Combination of camera interest, unit position of the screen, unit movement, unit type, and some other properties is used to determine which unit to focus at. Higher camera interest increases the chance of the unit being focused. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCameraInterest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +entity setCameraInterest interest +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCamShakeDefParams +//KeywordEnd// +DescriptionStart: +Sets camera shake default params, the default camshake when, for example, you freelook at your character shooting a 12.7mm sniper rifle or firing tank cannon. Would also work in 1st person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCamShakeDefParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setCamShakeDefParams [power, duration, frequency, minSpeed, minMass, caliberCoefHit, vehicleCoef] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 1, 2014) +Doesn't appear to have any effect in ArmA 3. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCamShakeParams +//KeywordEnd// +DescriptionStart: +Set camera shake parameters. +Will not have any effect until shake is started via addCamShake. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCamShakeParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setCamShakeParams [posCoef, vertCoef, horzCoef, bankCoef, interpolation] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCamUseTi +//KeywordEnd// +DescriptionStart: +Activates thermal vision. Mode index defines what sort of thermal vision it is: +0 - White Hot +1 - Black Hot +2 - Light Green Hot / Darker Green cold +3 - Black Hot / Darker Green cold +4 - Light Red Hot /Darker Red Cold +5 - Black Hot / Darker Red Cold +6 - White Hot. Darker Red Col +7 - Thermal (Shade of Red and Green, Bodies are white) +This command only works with camCreate created camera that is currently the main camera for the player (see example). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCamUseTi +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +Bool setCamUseTi modeIndex +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCaptive +//KeywordEnd// +DescriptionStart: +Mark a unit as captive. If unit is a vehicle, commander is marked. A captive is neutral to everyone (belong to civilian side ), and will not trigger "detected by" conditions for its original side. +Using a number (instead of a boolean) for the status has no further effect on the engine's behavior, but can be used by captiveNum to keep track of the captivity status at a finer resolution (e.g. handcuffed, grouped, etc.). The numbered status syntax was introduced in Arma 2. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCaptive +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName setCaptive status +%NextRawSyntax% +unitName setCaptive status +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +This function does not remove unit's weapons. +If you make a unit captive, that unit will still fire on the enemy, but the enemy will not fire back. +%NextNote% +(January 1, 2011) +If you change a unit from captive to no longer captive (for example, to "reveal" an undercover unit), enemy units that already have prior knowledge of the unit as a captive will only partially engage, making it very easy for the undercover unit. This seems to be a bug. +However other enemy unit the unit later encounters will engage freely with full force. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCenterOfMass +//KeywordEnd// +DescriptionStart: +Changes the center of mass of an object smoothly during the given time (in seconds). A time of zero (or using the alternative syntax) means an immediate change. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCenterOfMass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +myObject setCenterOfMass [com, time] +%NextRawSyntax% +myObject setCenterOfMass com +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(20 Jun, 2014) +(ArmA3 1.22) A quick reference: +category +setMass +setCenterOfMass +unit +The larger the mass is, the easier a unit will physically fatigued +N/A +aircraft +The larger the mass is, the more sensitive an aircraft will react to joystick, vice versa. +Aircraft slant due to center change accordingly, and the position of the camera view will be altered relatively at the same time. (3rd person view) +vehicle +The larger the mass is, the slower a vehicle drives (Ships will sink), vice versa. (Land vehicle performs like a bouncing ball while ships accelerated pretty speedy.) +Vehicle slant due to center change accordingly. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCollisionLight +//KeywordEnd// +DescriptionStart: +Switches collision lights of a vehicle on/off. Note that the vehicle has to be local, for global variant use Arma 3 Actions "CollisionLightOn"/"CollisionLightOff" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCollisionLight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setCollisionLight set +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCombatMode +//KeywordEnd// +DescriptionStart: +Set group combat mode (engagement rules). +Mode may be one of: +" BLUE " (Never fire) +" GREEN " (Hold fire - defend only) +" WHITE " (Hold fire, engage at will) +" YELLOW " (Fire at will) +" RED " (Fire at will, engage at will) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCombatMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName setCombatMode mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCompassOscillation +//KeywordEnd// +DescriptionStart: +Sets compass oscillation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCompassOscillation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setCompassOscillation [angle, frequencyMin, frequencyMax] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCuratorCameraAreaCeiling +//KeywordEnd// +DescriptionStart: +Sets maximal height to which curator camera can move. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCuratorCameraAreaCeiling +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj setCuratorCameraAreaCeiling height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCuratorCoef +//KeywordEnd// +DescriptionStart: +Sets coef for some action (coef have to be bigger than -1 000 000, anything lower is considered as disabled action). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCuratorCoef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj setCuratorCoef [action,coef] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(March 25, 2015) +Possible actions are: +place +edit +delete +destroy +group +synchronize +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCuratorEditingAreaType +//KeywordEnd// +DescriptionStart: +Set whether curator can edit in all editing areas (true) or outside of them (false). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCuratorEditingAreaType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj setCuratorEditingAreaType bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCuratorWaypointCost +//KeywordEnd// +DescriptionStart: +Sets cost of waypoints (used for placing, editing and deleting). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCuratorWaypointCost +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +curatorObj setCuratorWaypointCost cost +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCurrentChannel +//KeywordEnd// +DescriptionStart: +Sets given channel as current chat channel. Scripted way of selecting desired channel on the UI. The given channel may be disabled (see enableChannel ), this is why this command returns boolean, true on success or false on failure. Correspondence between channel and number: +0 = Global +1 = Side +2 = Command +3 = Group +4 = Vehicle +5 = Direct +6-15 = Custom Radio (see radioChannelCreate ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCurrentChannel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setCurrentChannel channel +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(December 9, 2015) +This command can be used together with custom radio channels, but an offset of 5 must be added to the index from radioChannelCreate. +$Code$_index = radioChannelCreate [[1, 0, 0, 1], "Custom Channel 1", "%UNIT_NAME", [player]]; +setCurrentChannel (_index + 5); +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCurrentTask +//KeywordEnd// +DescriptionStart: +Set the task as a current task of the person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCurrentTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setCurrentTask task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCurrentWaypoint +//KeywordEnd// +DescriptionStart: +Sets the currently active waypoint for a group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCurrentWaypoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName setCurrentWaypoint waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +(27 Aug 2007) +(A1 1.08) Does not seem to work with Game Logic. Crashes to desktop. +%NextNote% +(26 Nov 2008) +Note that a waypoints number as seen in the mission editor is not the same as it's waypoint number using this command. In the mission editor, waypoint 0 refers to the first placed waypoint, whereas waypoint 0 with the setCurrentWaypoint command refers to the unit's initial position waypoint. +%NextNote% +(17 Jan 2010) +(A2 1.05) This command may crash the game to desktop if you call it from the on act field of a waypoint that belongs to that same unit. +%NextNote% +(13 Aug 2012) +Using this command forces the last waypoint to complete. Any code in the on Act of that waypoint will run. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setCustomAimCoef +//KeywordEnd// +DescriptionStart: +Set custom aim precision coefficient for weapon sway +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setCustomAimCoef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setCustomAimCoef coef +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDamage +//KeywordEnd// +DescriptionStart: +Damage / repair object. +Damage 0 means fully functional, damage 1 means completely destroyed / dead. +This function is identical to setDammage. +It was introduced to fix a spelling error in original function name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDamage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setDamage damage +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +In OFP, setting a unit's damage to a negative value will set it's health to full, but impair their aim. +%NextNote% +(May 29, 2015) +Using this possible overrides individual hit damages such as setHitPointDamage ["HitHead", _value]; if you're having issues try setting hitdamage after setdamage +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDammage +//KeywordEnd// +DescriptionStart: +Damage / repair object. +Damage 0 means fully functional, damage 1 means completely destroyed / dead. +Alias of setDamage, which was introduced to fix a spelling error in this operator's name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDammage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setDammage damage +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +In OFP, setting a unit's damage to a negative value will set it's health to full, but impair their aim. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDate +//KeywordEnd// +DescriptionStart: +Sets the actual mission date and time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setDate [year, month, day, hour, minute] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +This command is special in that it is "smart". If you add 120 minutes, for example, it will actually advance hours by 2, and so on. +10:00, 7/12/2010 (BST) +%NextNote% +This command sets the date for the southern hemisphere only, i.e. when the map is in northern hemisphere a date [2010,12,7,17,0] is in day light and and date [2010,6,7,17,0] is in darkness. +21:35, 31 October 2011 (EET) +%NextNote% +In multiplayer, the effect of this command is local, not global. The date from the server is synchronized with clients when they join the game (including start of the mission and joining in progress). E.g. if this command is executed on server in the init.sqf before the mission starts, every client will be synchronized with server as mission is started. However, if you run this command in the middle of the mission, effect is local. +10 September 2013 (EET) +%NextNote% +This command is JIP compatible. Players joining after mission start will get current server date set up. +%NextNote% +(October 4, 2014) +Since an unknown version of ARMA 3, this command sadly now has global effect when executed on the server. +%NextNote% +(February 5, 2015) +Arma 3 1.38.128937- Leapyear BUG - setdate [2016,12,31,23,59] yields an ingame date of the 1st of January 2017. If left to tick over from the 30th of December it ticks to 1st January skipping the 31st of December entirely. +Feedback_Link +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDebriefingText +//KeywordEnd// +DescriptionStart: +Sets debriefing text for endType defined in CfgDebriefing. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDebriefingText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +endType setDebriefingText [title, description] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDefaultCamera +//KeywordEnd// +DescriptionStart: +Sets the position and direction for the camera used after camera is set on no object (log out view when leaving MP game for example) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDefaultCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setDefaultCamera [position, direction] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDestination +//KeywordEnd// +DescriptionStart: +Set the destination for path planning of the pilot. +Possible values for planningMode are: +"DoNotPlan" - used when not moving +"DoNotPlanFormation" - used in formation when simple path testing is used +"LEADER PLANNED" - used for formation leader (full path finding used) +"LEADER DIRECT" - used for DirectGo (like getin, supply) +"FORMATION PLANNED" - used in formation when full path finding is used +"VEHICLE PLANNED" - used for vehicle driver +Works best when used on agents +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDestination +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setDestination [position, planningMode, forceReplan] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDetailMapBlendPars +//KeywordEnd// +DescriptionStart: +Sets the detail texture map blend pars. Allows for smooth transition between detailed and undetailed terrain texture at distance. If noDetail fullDetail, the texture detail will incur smooth transition in the area between the thresholds. If noDetail = fullDetail there will be obvious visible edge between texture detail changes at fullDetail distance. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDetailMapBlendPars +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setDetailMapBlendPars [fullDetail, noDetail] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDir +//KeywordEnd// +DescriptionStart: +Sets object heading. Angles are measured in degrees clockwise from north. The accepted heading range is from 0 to 360 Negative angles represent a counter-clockwise angle and the angle can be of any size. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setDir heading +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(November 27, 2013) +Make sure you setDir BEFORE you set position. Setting direction after set position could lead to unpredictable behaviour. For example main part of the hospital building in Arma 3 can lose collision detection near both side entrances. AI will also can get confused and will stop detecting obstacles if setDir called after setPos. +%NextNote% +(May 9, 2007) +Though effects of this command remain local, you can do a setPos afterwards to synchronize the direction on all machines in MP. +$Code$myObj setDir 90; +myObj setPos getPos myObj;$/Code$ +%NextNote% +(January 9, 2009) +In ArmA, the effect of setDir is synchronized across the network. +%NextNote% +(April 5th, 2011) +In OA 1.59 the comment of Manny still holds true for createVehicle'd empty vehicles by the server. +For the player object a local setDir alone is enough. +%NextNote% +(July 10, 2010) +In ArmA 2 OA, this command only makes the unit glance momentarily to the direction. To change his heading more permanently use setFormDir. +%NextNote% +(August 28, 2013) +Be careful letting the command to do the conversion for you when the angle is 0 or 360 +$Code$ player setDir 360+1; +hint str direction player ; //1 +player setDir -360+1; +hint str direction player ; //1.00001 +player setDir 360*5+1; +hint str direction player ; //1.00002 +player setDir -360*5+1; +hint str direction player ; //0.999972 +player setDir 360*10+1; +hint str direction player ; //0.999876 +player setDir -360*10+1; +hint str direction player ; //1 +player setDir 360*100000+1; +hint str direction player ; //358.24 +player setDir -360*100000+1; +hint str direction player ; //1.76001 +player setDir 360*10000000+1; +hint str direction player ; //298.591 +player setDir -360*10000000+1; +hint str direction player ; //61.4094$/Code$ +%NextNote% +(November 25, 2013) +In Arma 3, setDir affects vectorUp, vectorDir and velocity of the object it applied to. While this is not noticeable with stationary objects, a moving objects will have its orientation and velocity reset. So if you are planning on using setDir on a moving object, make sure you read the velocity value before and restore it after if you want the object to continue to move. +$Code$_vel = velocity _object; +_object setDir 45; +_object setVelocity _vel; +$/Code$ +With orientation it is a bit more complicated. setDir resets vectorUp to [0,0,1] and changes vectorDir accordingly to accommodate set direction. If your object's vectorUp is not [0,0,1] and you want to keep it this way, then you have to use setVectorDirAndUp to change object's direction not setDir. This is also the reason why it is better to use setVectorDirAndUp instead of setDir on attached objects for a better control of object's orientation. +%NextNote% +(November 22, 2014) +To setDir for AI unit, setFormDir first: +$Code$_ai setFormDir 180; +_ai setDir 180;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDirection +//KeywordEnd// +DescriptionStart: +Set's the orientation of a location. It's area and map icon (if it's type uses an icon) will be rotated to this orientation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDirection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setDirection direction +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDrawIcon +//KeywordEnd// +DescriptionStart: +Set the icon to be shown in 2D editor for the specified editor object. If maintain size is false,icon will not scale depending on the scale,of the map. If maintain size is a number,the icon will maintain size,if map scale is below that number. is3D,show line and priority are,optional. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDrawIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map setDrawIcon [object,texture,color,offset,width,height,maintain size?,angle,string identifier,shadow,is3D,draw line?,priority] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setDropInterval +//KeywordEnd// +DescriptionStart: +Set interval of emitting particles from particle source. In Arma 3 hardcoded limit of how many particles can exist at the same time is 18000. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setDropInterval +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +particleSource setDropInterval interval +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setEditorMode +//KeywordEnd// +DescriptionStart: +Sets map mode to MAP,3D or PREVIEW. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setEditorMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map setEditorMode mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setEditorObjectScope +//KeywordEnd// +DescriptionStart: +This command defines the level of access a user has to editor objects. +"objects" is an array of either Editor Objects (eg ["_unit_0"]) or actual Game Objects (eg [player]). If the array is empty then the command will automatically parse all editor objects. +"editorType" is the editor type to effect (eg "unit", "vehicle", "center") or "" for all types. +"condition" is an executable string that must evaluate to true or false. If true, the scope of the evaluated editor object will be modified. "_x" can be used in the string as reference to the ingame representation of the currently processed array member. +"scope" is one of "HIDE", "VIEW", "SELECT", "LINKTO", "LINKFROM", "ALLNODRAG", "ALLNOTREE", "ALLNOCOPY", "ALLNOSELECT" or "ALL". +"subordinatesAlso" is a boolean value. If true then subordinates in the editor will be assigned the same scope as the parent. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setEditorObjectScope +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map setEditorObjectScope [objects, editorType, condition, scope, subordinatesAlso] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setEffectCondition +//KeywordEnd// +DescriptionStart: +The statement is executed when the trigger or waypoint is activated and the effects are launched depending on the result. +If the result is a boolean and true, the effect is launched. +If the result is an object, the effect is launched if the result is the player or the player vehicle. +If the result is an array, the effect is launched if the result contains the player or the player vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setEffectCondition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setEffectCondition statement +%NextRawSyntax% +waypoint setEffectCondition statement +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFace +//KeywordEnd// +DescriptionStart: +Set person's face. For a list of available faces, check Category:CfgIdentities. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setFace face +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(September 19, 2013) +For ArmA 3 face can be any of the following: +AfricanHead_01 +AfricanHead_02 +AfricanHead_03 +AsianHead_A3_01 +AsianHead_A3_02 +AsianHead_A3_03 +GreekHead_A3_01 +GreekHead_A3_02 +GreekHead_A3_03 +GreekHead_A3_04 +GreekHead_A3_05 +GreekHead_A3_06 +GreekHead_A3_07 +GreekHead_A3_08 +GreekHead_A3_09 +PersianHead_A3_01 +PersianHead_A3_02 +PersianHead_A3_03 +NATOHead_01 +WhiteHead_02 +WhiteHead_03 +WhiteHead_04 +WhiteHead_05 +WhiteHead_06 +WhiteHead_07 +WhiteHead_08 +WhiteHead_09 +WhiteHead_10 +WhiteHead_11 +WhiteHead_12 +WhiteHead_13 +WhiteHead_14 +WhiteHead_15 +%NextNote% +(unknown) +For ArmA 2 the face value is a string from Face01 to Face107. Camo faces are available as well, 6 per face. For example the full set of class names for face value 77 would be: +Face77, Face77_camo1, Face77_camo2, Face77_camo3, Face77_camo4, Face77_camo5 and Face77_camo6 +All Armed Assault 1.08 faces plus tutorial, +Online gallery of 1.08 Armed Assault faces +a full list of Arma 2 faces +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFaceAnimation +//KeywordEnd// +DescriptionStart: +Set facial animation phase (eye blinking), blink is in the range from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFaceAnimation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setFaceAnimation blink +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(09:01, 23 December 2008 (CET)) +Setting face animation to 4 will give "devilish" features (ArmA) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFatigue +//KeywordEnd// +DescriptionStart: +Sets the person's fatigue, from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFatigue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setFatigue value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(05 April, 2014) +setFatigue will affect fatigue of a local unit only. If you execute it on remote unit, the getFatigue value will only change locally with no effect on remote unit. Scripted setFatigue changes don't broadcast at all. In short, use setFatigue on local units only. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFlagOwner +//KeywordEnd// +DescriptionStart: +Sets flag owner. When owner is set to objNull or any object other than a unit of class man or logic, flag is returned to the flagpole. A flag owned by a logic has no visual representation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFlagOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flag setFlagOwner owner +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +Since flags can not be owned by vehicles, use "flag setFlagOwner driver tank1" or "flag1 setFlagOwner tank1D" to assign the flag to the vehicle's driver. The second method will only work if tank1 is the name of a unit, not a variable refering to it. True for OFP Arma +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFlagSide +//KeywordEnd// +DescriptionStart: +Sets flag Side. A flag may be taken by any unit that is enemy to the side that owns the flag. Just like with setFlagTexture, if the command executed where unit is local effect of the command will be global and JIP compatible. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFlagSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flag setFlagSide side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFlagTexture +//KeywordEnd// +DescriptionStart: +Sets flag texture. +If texture is "", flag is not drawn. +Custom texture can be used, as long as it is in *.jpg format, and has dimensions of 200px*200px. +The page Flag Textures shows which textures are available in each game. +NOTE : In MP this command has to be executed where Flag Pole is local. If you add Flag Pole in the editor, it will be local to the server, so executing setFlagTexture on the server will change flag texture on all clients. The command is also persistent and is synchronised for JIP clients. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFlagTexture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +flag setFlagTexture texture +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFog +//KeywordEnd// +DescriptionStart: +Changes the fog smoothly over the the given TransitionTime (in seconds). A time of zero means there will be an immediate change. A fog intensity of zero is minimum fog and a fog level of one is maximum fog. +NOTE : Since Arma 3 this command is MP synchronised, if executed on server, the changes will propagate globally. If executed on client effect is temporary as it will soon change to the server setting. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setFog fog +%NextRawSyntax% +time setFog [fogValue, fogDecay, fogBase] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +Only one script command induced weather change (either setOvercast or setFog) can be happening at a time. Starting a new weather change will immediately halt the current weather change. SetRain changes are independent and can occur simultaneously to a weather change. +%NextNote% +(December 15, 2015) +setTimeMultiplier DOES affect transition time. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFormation +//KeywordEnd// +DescriptionStart: +Set group formation. +Formation is one of: +"COLUMN" +"STAG COLUMN" +"WEDGE" +"ECH LEFT" +"ECH RIGHT" +"VEE" +"LINE" +"FILE" (ArmA) +"DIAMOND" (ArmA) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFormation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setFormation formation +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFormationTask +//KeywordEnd// +DescriptionStart: +Set the current task of the formation member. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFormationTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setFormationTask task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16:57, 2 March 2007 (CET)) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFormDir +//KeywordEnd// +DescriptionStart: +Set group formation heading. Accepted heading range is 0 to 360. Formation is facing this direction unless enemy is seen. When group is moving, this value is overriden by movement direction. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFormDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setFormDir heading +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(November 22, 2014) +When applied to AI, setFormDir will set unit formation direction, which in turn will force unit to change direction to match formation direction, however unit will stop turning as soon as unit direction is +/- 30 degrees of the formation direction. To precisely match formation direction, additional setDir is required: +$Code$_unit setFormDir 45; +_unit setDir 45; +hint str direction _unit; //45$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFriend +//KeywordEnd// +DescriptionStart: +Sets how friendly side1 is with side2. For a value smaller than 0.6 it results in being enemy, otherwise it's friendly. +Intended to be used on mission start. Changing value during mission can cause unexpected errors in AI behavior. See also Side relations. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFriend +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +side1 setFriend [side2, value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(18:49, 28 December 2006) +This command might be buggy in ArmA (or the description regarding enemy status is wrong). See this discussion. +%NextNote% +(11:25, 30 November 2007) +Setting the civilian side to be the enemy of any other side will result in the other side attacking inanimate mission editor placed objects such as empty vehicles and static objects, since these objects belong to the civilian side. +%NextNote% +(15:57, 27 February 2008) +Be aware that this command only sets the friendliness of one side. If you want to have both sides attacking each other, you have to set both: $Code$Resistance setFriend [East, 0]; +East setFriend [Resistance, 0];$/Code$ +%NextNote% +(October 11, 2014) +(Arma 3 1.30 stable) It is possible to make a side hostile towards itself. +$Code$ west setFriend [ west, 0]; $/Code$ +It is only possible to do so with west / blufor, east / opfor, independent / resistance and civilian. This essentially creates a free for all deathmatch. Affects AI behaviour too. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFromEditor +//KeywordEnd// +DescriptionStart: +Set if given team member was inserted directly from editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFromEditor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember setFromEditor fromEditor +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFSMVariable +//KeywordEnd// +DescriptionStart: +Set variable to given value in the variable space of given FSM. +The FSM handle is the number returned by the execFSM command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFSMVariable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +handle setFSMVariable [name, value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 23, 2014) +If the variable is not yet defined within the FSM it will be created. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFuel +//KeywordEnd// +DescriptionStart: +Sets fuel percentage from 0 (empty) to 1 (full). The vehicle must be local to the computer where command is executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFuel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setFuel amount +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setFuelCargo +//KeywordEnd// +DescriptionStart: +Sets fuel amount in cargo space of refuel vehicle from empty (0) to full (1) +Note, the carrying capacity of each side's refuel trucks differ. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setFuelCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setFuelCargo amount +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(July 10, 2015) +(ArmA 3 1.44) setFuelCargo will have no effect if the vehicle doesn't support getFuelCargo. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupIcon +//KeywordEnd// +DescriptionStart: +Set group icons properties. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setGroupIcon [id, icon, offset] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupIconParams +//KeywordEnd// +DescriptionStart: +Set group icons parameters. [color,string,float,bool] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupIconParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setGroupIconParams properties +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupIconsSelectable +//KeywordEnd// +DescriptionStart: +Sets if group icons raises onclick and onover events. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupIconsSelectable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setGroupIconsSelectable bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupIconsVisible +//KeywordEnd// +DescriptionStart: +Sets if group icons are visible. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupIconsVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setGroupIconsVisible array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupId +//KeywordEnd// +DescriptionStart: +Sets a group's identity, how it will be displayed in chat, for example. The identity setup consists of format keywords (marked with %) and param keywords taken from CfgWorlds config. Basically it is like format command but with some special group keywords. For Arma 3 possible values are: +%GroupSquad +"Squad1" - 1 +"Squad2" - 2 +"Squad3" - 3 +"Squad4" - 4 +%GroupPlatoon +"Platoon1" - 1 +"Platoon2" - 2 +"Platoon3" - 3 +"Platoon4" - 4 +%GroupCompany +"CompanyAlpha" - Alpha +"CompanyBravo" - Bravo +"CompanyCharlie" - Charlie +"CompanyDelta" - Delta +"CompanyEcho" - Echo +"CompanyFoxtrot" - Foxtrot +"CompanyGolf" - Golf +"CompanyHotel" - Hotel +"CompanyIndia" - India +"CompanyKilo" - Kilo +"CompanyLima" - Lima +"CompanyMike" - Mike +"CompanyNovember" - November +"CompanyOscar" - Oscar +"CompanyPapa" - Papa +"CompanyQuebec" - Quebec +"CompanyRomeo" - Romeo +"CompanySierra" - Sierra +"CompanyTango" - Tango +"CompanyUniform" - Uniform +"CompanyVictor" - Victor +"CompanyWhiskey" - Whiskey +"CompanyXray" - X-Ray +"CompanyYankee" - Yankee +"CompanyZulu" - Zulu +%GroupNames +"Alpha" - Alpha +"Bravo" - Bravo +"Charlie" - Charlie +"Delta" - Delta +"Echo" - Echo +"Foxtrot" - Foxtrot +"Golf" - Golf +"Hotel" - Hotel +"November" - November +"Kilo" - Kilo +"Yankee" - Yankee +"Zulu" - Zulu +"Two" - Two +"Three" - Three +"Buffalo" - Buffalo +"Guardian" - Guardian +"Convoy" - Convoy +"Fox" - Fox +%GroupColors +"GroupColor1" - Black +"GroupColor2" - Red +"GroupColor3" - Green +"GroupColor4" - Blue +"GroupColor5" - Yellow +"GroupColor6" - Orange +"GroupColor7" - Pink +"GroupColor0" - +"Six" - Six +For global variant of this command use setGroupIdGlobal. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setGroupId [nameFormat, nameParam1,..., nameParamN] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +Letter is one of: +"Alpha" +"Bravo" +"Charlie" +"Delta" +"Echo" +"Foxtrot" +"Golf" +"Hotel" +"Kilo" +"Yankee" +"Zulu" +"Buffalo" +"Convoy" +"Guardian" +"November" +"Two" +"Three" +"Fox" +Colour may be one of the following: +"GroupColor0" - (Nothing) +"GroupColor1" - Black +"GroupColor2" - Red +"GroupColor3" - Green +"GroupColor4" - Blue +"GroupColor5" - Yellow +"GroupColor6" - Orange +"GroupColor7" - Pink +"Six" - Six +%NextNote% +(August 4, 2006) +Notes from before the conversion: +Note that this command does not name the group. To call a group "grp1", for example, write this in the init field of the group leader : +grp1 = group this +%NextNote% +(December 9, 2006) +Selfdefined Callsigns: +In Armed Assault you're able to define the callsignletter by yourself. This can be for example "Fireteam", or "Specialforces". +this setgroupId ["Attackteam"] +%NextNote% +In OFP v1.96, the radio callsign strings for a mission can be redefined by creating a stringtable.csv in the mission folder. All string names except FOX can be found within the main stringtable.csv. Note "SIX" has a string suggesting it is a groupname, although the engine uses it as a colour. Some examples of the string names : STR_CFG_GRPNAMES_ALPHA, STR_CFG_GRPNAMES_FOX, STR_CFG_GRPCOL_BLACK, STR_CFG_GRPNAMES_SIX, STR_CFG_FIREFLYBASE, STR_CFG_PAPABEAR, STR_CFG_HQ_BASE, STR_CFG_HQ_BASE. +%NextNote% +(April 21, 2015) +List of available keywords from config: $Code$"if ((configName _x) select [0, 5] == 'group') then { +diag_log ('%' + configName _x); +for '_i' from 0 to count _x - 1 do { +diag_log ('* ""' + configName (_x select _i) + '"" - ' + getText ((_x select _i) 'name')); +}; +}; false" configClasses (configFile "CfgWorlds");$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupIdGlobal +//KeywordEnd// +DescriptionStart: +A global equivalent of setGroupId +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupIdGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setGroupIdGlobal [nameFormat, nameParam1,..., nameParamN] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGroupOwner +//KeywordEnd// +DescriptionStart: +Changes the ownership of a group (and all its units) to a given client. Group leader can't be a player. Only works when called from a server. Returns true if locality was changed. For agents use setOwner command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGroupOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +group setGroupOwner clientID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(July 30, 2015) +In ArmA3 1.48, setGroupOwner does NOT work if group has no units +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setGusts +//KeywordEnd// +DescriptionStart: +Changes the gusts value smoothly during the given time (in seconds). A time of zero means there will be an immediate change. Value is 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setGusts +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setGusts value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setHideBehind +//KeywordEnd// +DescriptionStart: +Sets the data for hiding. objectWhereHide can be taken using findCover. hidePosition can be taken using getHideFrom. Command is not functional in ArmA 2. +This command is not implemented +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setHideBehind +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setHideBehind [objectWhereHide, hidePosition] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setHit +//KeywordEnd// +DescriptionStart: +Damage / repair part of object. The object must be local to the computer where command is executed. +Damage 0 means fully functional, damage 1 means completely destroyed / dead. Note: Some part names are in Czech; see translation table. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setHit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setHit [part, damage] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +Damaging specific parts of the vehicle will not update its overall damage value (as of v1.03): +player setHit [ hands, 0.9]; +hint str (damage player); //will return 0 +%NextNote% +Direct use of the names of sections of the model is likely a bad practice, and will not work on some addons. +So instead: +_MH60S setHit [ elektronika, _hit]; +should be used: +_MH60S setHit [getText(configFile cfgVehicles MH60S HitPoints HitAvionics name ), _hit]; +%NextNote% +Since there is no getHit (as of 1.61), you can use canMove command to check if vehicle is capable of moving. +For land wheeled vehicles canMove will return false if any real wheel (damaging nonexistent wheels doesn't count) has hitpoint damage greater than 0.9. Having HitEngine damage greater than 0.9 will make canMove to return false as well (plus will result in vehicle exploding). HitFuel however doesn't make canMove return false even though having high HitFuel damage will make car explode. +For helicopters HitEngine with damage greater than 0.9 will make canMove return false as well. Having HitHRotor (main rotor) damaged even up to 1 will never make canMove return false. However, if HitVRotor (tail rotor) will have damage greater than 0.703608 it will make canMove return false (even though some helicopters are controllable and flyable by player with broken tail rotor). +In same manner you can use canFire to check if turret hitpoints are not damaged enough to be able to fire. (canFire always returns false if there is nobody in vehicle) +Update: Since ArmA 3 1.31 getHit has been introduced. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setHitIndex +//KeywordEnd// +DescriptionStart: +Set the current level of damage for a specific Hit Point (specified by its hit part index). All hit points can be obtained with getAllHitPointsDamage command. +0: no damage +1: full damage +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setHitIndex +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setHitIndex [hitPartIndex, damage] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setHitPointDamage +//KeywordEnd// +DescriptionStart: +Set the current level of damage for a specific Hit Point (specified by its config class). +0: no damage +1: full damage +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setHitPointDamage +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setHitPointDamage [hitPointName, damage] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 30, 2012) +This command is using the Hit Points (defined in the HitPoints class in the config) while setHit is using Named Selections (defined in the model itself). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setHorizonParallaxCoef +//KeywordEnd// +DescriptionStart: +Sets coef used to shift horizon position based on camera height (use 0 to disable shifting). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setHorizonParallaxCoef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setHorizonParallaxCoef coef +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setHUDMovementLevels +//KeywordEnd// +DescriptionStart: +Set min/max movement borders displayed in HUD gauges. Use -1 to skip some value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setHUDMovementLevels +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setHUDMovementLevels [minSpeed, maxSpeed, minAlt, maxAlt, minDir, maxDir, targetOrPosition] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setIdentity +//KeywordEnd// +DescriptionStart: +Set identity of person. +Identities are defined in Description.ext of the mission or campaign. For a list of available faces, glasses and speakers check Category:CfgIdentities. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setIdentity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setIdentity identity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 28, 2013) +For ArmA3 the definition format in the Description.ext file is: +class CfgIdentities +{ +class MyLittleSoldier +{ +name = Givens ; +nameSound = Givens ; +face= WhiteHead_06 ; +glasses= None ; +speaker= Male05ENG ; +pitch=1.1; +}; +}; +nameSound can be any preset BIS recorded name value. By default units will be called out in voice by their number. By using nameSound you can call them out by name using the following values: +Default: +Armstrong +Nichols +Tanny +Frost +Lacey +Larkin +Kerry +Jackson +Miller +McKendrick +Levine +Reynolds +BLUFOR: +Adams +Bennett +Campbell +Dixon +Everett +Franklin +Givens +Hawkins +Lopez +Martinez +O'Connor +Ryan +Patterson +Sykes +Taylor +Walker +OPFOR: +Amin +Masood +Fahim +Habibi +Kushan +Jawadi +Nazari +Siddiqi +Takhtar +Wardak +Yousuf +INDEPENDENT: +Anthis +Costa +Dimitirou +Elias +Gekas +Kouris +Leventis +Markos +Nikas +Nicolo +Panas +Petros +Rosi +Samaras +Stavrou +Thanos +Vega +CODE NAMES: +Ghost +Stranger +Fox +Snake +Razer +Jester +Nomad +Viper +Korneedler +face can be any of the following: +AfricanHead_01 +AfricanHead_02 +AfricanHead_03 +AsianHead_A3_01 +AsianHead_A3_02 +AsianHead_A3_03 +GreekHead_A3_01 +GreekHead_A3_02 +GreekHead_A3_03 +GreekHead_A3_04 +GreekHead_A3_05 +GreekHead_A3_06 +GreekHead_A3_07 +GreekHead_A3_08 +GreekHead_A3_09 +PersianHead_A3_01 +PersianHead_A3_02 +PersianHead_A3_03 +NATOHead_01 +WhiteHead_02 +WhiteHead_03 +WhiteHead_04 +WhiteHead_05 +WhiteHead_06 +WhiteHead_07 +WhiteHead_08 +WhiteHead_09 +WhiteHead_10 +WhiteHead_11 +WhiteHead_12 +WhiteHead_13 +WhiteHead_14 +WhiteHead_15 +speaker can be any of the following: +Male01ENG +Male01ENGB +Male01GRE +Male01PER +Male02ENG +Male02ENGB +Male02GRE +Male02PER +Male03ENG +Male03ENGB +Male03GRE +Male03PER +Male04ENG +Male04ENGB +Male04GRE +Male05ENG +Male06ENG +Male07ENG +Male08ENG +Male09ENG +In ArmA 3 1.04+ these settings can also be set individually without description.ext editing by using the following commands: setFace, setName, setNameSound, setSpeaker, setPitch +%NextNote% +(August 4, 2006) +Notes from before the conversion: +The definition format in the Description.ext file is: +class CfgIdentities +{ +class John_Doe +{ +name = John Bartholemew Doe ; +face = Face20 ; +glasses = None ; +speaker = Dan ; +pitch = 1.1; +}; +}; +In Operation Flashpoint, +Name can be any string. +Face can take any of the following values: +Male: "Face1"... to "Face52", "Face99" "FaceR01" to "Face R04" +Female: "Eva", "Kamila", "Lada", "Lucie", "Marketa" "Nada" +Glasses can take the following values: "None", "Spectacles" "Sunglasses" +Speaker determines which voice is used and can take any of the following values: +"Adam" +"Dan" +"George" +"Greg" +"John" +"Jonah" +"Marc" +"Patrick" +"Paul" +"Peter" +"Rich" +"Rob" +"Ted" +"Tom" +"Nikolai" +"Vitaliy" +"Sergey" +"Oleg" +"Ruslan" +"Aleksei" +"Andrei" +"Boris" +"Georgiy" +"Vadim" +"Vladimir" +"Ivan" +Pitch sets the tone of voice. 1.0 for normal; 1.0 for deep; 1.0 for high pitched +%NextNote% +(November 18, 2006) +Preview of all faces in Armed Assault can be found on Czech Biki +%NextNote% +(May 10, 2008) +Glasses and Female faces do not work as of Arma patch 1.12beta. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setImportance +//KeywordEnd// +DescriptionStart: +Sets the importance value of location. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setImportance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setImportance value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLeader +//KeywordEnd// +DescriptionStart: +Set the leader of given team. Effect is local, unless both leader unit and team are local to PC on which command is executed, then effect is global. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLeader +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +team setLeader leader +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightAmbient +//KeywordEnd// +DescriptionStart: +Set ambient color of light. This includes surfaces that face away from the light, unlike setLightColor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightAmbient +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightAmbient [r, g, b] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Dec 1, 2006) +Light can be created with command createVehicleLocal with special vehicle class "#lightpoint" +for example: +$Code$_light = "#lightpoint" createVehicleLocal pos; +_light setLightBrightness 1.0; +_light setLightAmbient [0.0, 1.0, 0.0]; +_light setLightColor [0.0, 1.0, 0.0]; +_light lightAttachObject [_object, [0,0,0]]; +$/Code$ +%NextNote% +(Aug 17, 2007) +To clarify: +setLightAmbient - Terrain and surrounding objects are bathed in this colour. +setLightColor - Controls the "haze" seen around the lightsource (ex flares). +%NextNote% +(Mar 25, 2014) +When both setLightAmbient and setLightColor were [0,0,0], there won’t be any visual presentation on the light source. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightAttenuation +//KeywordEnd// +DescriptionStart: +Sets attenuation of light. Standard method of attenuation (1 / (constant + linear*dist + quadratic*dist*dist)). start param represents distance, where the attenuation starts to take effects (dist = distance - start). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightAttenuation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightAttenuation [start, constant, linear, quadratic, hardlimitstart, hardlimitend] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Mar 25, 2014) +(A3 1.14) setLightAttenuation array will present fallowing visual effects: +[start(SCALAR), constant(SCALAR), linear (SCALAR), quadratic(SCALAR)] +start(SCALAR) – Number can be unlimited, this parameter determines the range that the light source takes effect. Terrain environmental color will be bathed by ‎setLightAmbient within the range and its covered objects will reflect the color by ‎setLightColor. +constant(SCALAR) – Support signed number, this parameter determines the brightness proportion of the light source, higher the number is, less the brightness will be, vice versa. Any minus value passed will be treated as 0 (100% brightness). In other words, this parameter is related with ‎‎setLightBrightness and ‎setLightIntensity. +linear (SCALAR) – Support signed number, effective range is from 0 ~ 100 (passed minus value will be treated as 0), this parameter determines the concentration of the light source, higher the number is, more will the light concentrate, vice versa. In other words, this parameter will turn the source into spotlight and sharpens its light circle border. +Please pay attention to a special value: 4.31918e-005 +e.g. +$Code$ +_light setLightAttenuation [2,4, 4.31918e-005,0]; //This value will make the light source reach an ultra high effect range. Any initial param set before will be discarded and overwritten. +$/Code$ +quadratic(SCALAR) – Support signed number (range unlimited, passed minus number will be treated as 0), this parameter determines the range that the light source is visible and its visual presentation looks similar to linear. 0 means the maximum visible range. In further explanation, a less bright source can’t be seen out of the range on the land but still visible on the sea, and a bright enough source won’t be effected by the passed range who is still visible out of the range. +Please pay attention to a special value: 4.31918e-005 +e.g. +$Code$ +_light setLightAttenuation [6,0,0, 4.31918e-005 ]; //This value will make the light source reach an ultra high effect range. Any initial param set before will be discarded and overwritten. +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightBrightness +//KeywordEnd// +DescriptionStart: +Set brightness of light. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightBrightness +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightBrightness brightness +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Dec 1, 2006) +Light can be created with command createVehicleLocal with special vehicle class "#lightpoint" +for example: +$Code$_light = "#lightpoint" createVehicleLocal pos; +_light setLightBrightness 1.0; +_light setLightAmbient [0.0, 1.0, 0.0]; +_light setLightColor [0.0, 1.0, 0.0]; +_light lightAttachObject [_object, [0,0,0]]; +$/Code$ +%NextNote% +(Mar 24, 2014) +In ArmA3 ver1.14 setLightBrightness will overwrite the previous effect processed by setLightIntensity on the same light source, vice versa. And both of them currently play the same role on brightness, for example: $Code$_light setLightBrightness 1;// same as _light setLightIntensity 3000;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightColor +//KeywordEnd// +DescriptionStart: +Set diffuse color of light. Illuminates surfaces that are facing the light. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightColor [r, g, b] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Dec 1, 2006) +Light can be created with command createVehicleLocal with special vehicle class "#lightpoint" +for example: +$Code$_light = "#lightpoint" createVehicleLocal pos; +_light setLightBrightness 1.0; +_light setLightAmbient [0.0, 1.0, 0.0]; +_light setLightColor [0.0, 1.0, 0.0]; +_light lightAttachObject [_object, [0,0,0]]; +$/Code$ +%NextNote% +(Aug 17, 2007) +To clarify: +setLightAmbient - Terrain and surrounding objects are bathed in this colour. +setLightColor - Controls the "haze" seen around the lightsource (ex flares). +%NextNote% +(Mar 24, 2014) +1. In ArmA3 ver 1.14 setLightColor will also change the color of the flare when setLightUseFlare, setLightFlareSize and setLightFlareMaxDistance were used on the same light source. For example: +$Code$ +_light setLightUseFlare true; +_light setLightFlareSize 2; +_light setLightFlareMaxDistance 60; +_light setLightColor [1, 1, 1]; +$/Code$ +2. When both setLightAmbient and setLightColor were [0,0,0], there won’t be any visual presentation on the light source. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightDayLight +//KeywordEnd// +DescriptionStart: +Sets if light can be used during the day. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightDayLight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightDayLight bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightFlareMaxDistance +//KeywordEnd// +DescriptionStart: +Sets max distance where the flare is visible. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightFlareMaxDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightFlareMaxDistance distance +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightFlareSize +//KeywordEnd// +DescriptionStart: +Sets relative size of the flare for the light. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightFlareSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightFlareSize size +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightIntensity +//KeywordEnd// +DescriptionStart: +Sets intensity of light. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightIntensity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightIntensity value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Mar 24, 2014) +In ArmA3 ver1.14 setLightIntensity will overwrite the previous effect processed by setLightBrightness on the same light source, vice versa. And both of them currently play the same role on brightness, for example: $Code$_light setLightIntensity 3000;// same as _light setLightBrightness 1;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightnings +//KeywordEnd// +DescriptionStart: +Changes the lightnings value smoothly during the given time (in seconds). +A time of zero means there will be an immediate change. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightnings +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setLightnings value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLightUseFlare +//KeywordEnd// +DescriptionStart: +Sets if light has flare. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLightUseFlare +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +light setLightUseFlare bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Mar 25, 2014) +1. In ArmA3 ver 1.14 flare color can be changed via setLightColor. +2. Flare won't have visual presentation in daytime. +3. setLightUseFlare needs to be used together with setLightFlareSize and setLightFlareMaxDistance so that a flare can be seen. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setLocalWindParams +//KeywordEnd// +DescriptionStart: +Sets parameters for helicopter rotor wash. Visually it affects how much the grass and bushes bend under a helicopter and how big is the area of the effect. Default [1.0, 1.0]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setLocalWindParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setLocalWindParams [strength, diameter] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMagazineTurretAmmo +//KeywordEnd// +DescriptionStart: +Sets ammo count to given amount for given turret. +Broken when vehicle has multiple magazines of the same type +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMagazineTurretAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setMagazineTurretAmmo [magazineClass, ammoCount, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerAlpha +//KeywordEnd// +DescriptionStart: +Sets the marker alpha. The marker is modified on all computers in a network session. +When alpha equals 1, the marker is visible, but if alpha equals 0, then the marker is invisible. +Alpha can be numbers and fractions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerAlpha +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +marker setMarkerAlpha alpha +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerAlphaLocal +//KeywordEnd// +DescriptionStart: +Sets the marker alpha. The marker is only modified on the computer where the command is called. +When alpha equals 1, the marker is visible, but if alpha equals 0, then the marker is invisible. +Alpha can be numbers and fractions. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerAlphaLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +marker setMarkerAlphaLocal alpha +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(January 7, 2010) +%NextNote% +The range for 'alpha' is 0... 1 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerBrush +//KeywordEnd// +DescriptionStart: +Selects the fill texture for the marker ("RECTANGLE" or "ELLIPSE"). Brush is the name of the subclass in CfgMarkerBrushes. +brush can be: +"Solid" +"SolidFull" (A3 only) +"Horizontal" +"Vertical" +"Grid" +"FDiagonal" +"BDiagonal" +"DiagGrid" +"Cross" +"Border" +"SolidBorder" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerBrush +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerBrush brush +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerBrushLocal +//KeywordEnd// +DescriptionStart: +Selects the fill texture for the marker ("RECTANGLE" or "ELLIPSE"). Brush is the name of the subclass in CfgMarkerBrushes. +brush can be: +"Solid" +"SolidFull" (A3 only) +"Horizontal" +"Vertical" +"Grid" +"FDiagonal" +"BDiagonal" +"DiagGrid" +"Cross" +"Border" (A2/A3 only) +"SolidBorder" (OA/A3 only) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerBrushLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerBrushLocal brush +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerColor +//KeywordEnd// +DescriptionStart: +Set marker color. Color is one of: +"Default" +"ColorBlack" +"ColorGrey" +"ColorRed" +"ColorRedAlpha" (Arma 2 only) +"ColorGreen" +"ColorGreenAlpha" (Arma 2 only) +"ColorBlue" +"ColorYellow" +"ColorOrange" +"ColorWhite" +"ColorPink" +"ColorBrown" +"ColorKhaki" +"ColorWEST" +"ColorEAST" +"ColorGUER" +"ColorCIV" +"ColorUNKNOWN" +"Color1_FD_F" (Light red) +"Color2_FD_F" (Light khaki) +"Color3_FD_F" (Light orange) +"Color4_FD_F" (Light blue) +Arma 3 +"ColorBLUFOR" +"ColorCivilian" +"ColorIndependent" +"ColorOPFOR" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerColor color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerColorLocal +//KeywordEnd// +DescriptionStart: +Set marker color. Color is one of: +"Default" +"ColorBlack" +"ColorGrey" +"ColorRed" +"ColorRedAlpha" (Arma 2 only) +"ColorGreen" +"ColorGreenAlpha" (Arma 2 only) +"ColorBlue" +"ColorYellow" +"ColorOrange" +"ColorWhite" +"ColorPink" +"ColorBrown" +"ColorKhaki" +"ColorWEST" +"ColorEAST" +"ColorGUER" +"ColorCIV" +"ColorUNKNOWN" +"Color1_FD_F" (Light red) +"Color2_FD_F" (Light khaki) +"Color3_FD_F" (Light orange) +"Color4_FD_F" (Light blue) +Arma 3 +"ColorBLUFOR" +"ColorCivilian" +"ColorIndependent" +"ColorOPFOR" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerColorLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerColorLocal color +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerDir +//KeywordEnd// +DescriptionStart: +Sets the orientation of the marker. Angle is in degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerDir angle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerDirLocal +//KeywordEnd// +DescriptionStart: +Sets the orientation of the marker. Angle is in degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerDirLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerDirLocal angle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerPos +//KeywordEnd// +DescriptionStart: +Moves the marker. Pos format is Position2D. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerPos pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +Effect is local in OFP. +%NextNote% +(March 31, 2008) +This command will not move a marker on dedicated server (if a client calls it). AI will continue to respawn at old spot if you are moving something like respawn_west. +%NextNote% +(August 7, 2009) +The marker position can actually be set in 3D. This has a benefit for respawn markers, when placed at the correct altitude ASL on the LHD, the correct altitude will be used for respawn. There is no particular benefit for regular markers since markerPos will still return 0 for the altitude array element. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerPosLocal +//KeywordEnd// +DescriptionStart: +Moves the marker. Pos format is Position2D. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerPosLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerPosLocal pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerShape +//KeywordEnd// +DescriptionStart: +Selects the shape (type) of the marker. +Shape can be "ICON", "RECTANGLE" or "ELLIPSE". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerShape +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerShape shape +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerShapeLocal +//KeywordEnd// +DescriptionStart: +Selects the shape (type) of the marker. +Shape can be "ICON", "RECTANGLE" or "ELLIPSE". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerShapeLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerShapeLocal shape +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerSize +//KeywordEnd// +DescriptionStart: +Set marker size. +Size is in format [a-axis, b-axis]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerSize [a-axis, b-axis] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerSizeLocal +//KeywordEnd// +DescriptionStart: +Set marker size. +Size is in format [a-axis, b-axis]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerSizeLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerSizeLocal [a-axis, b-axis] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerText +//KeywordEnd// +DescriptionStart: +Sets the text label of an existing marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerText text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +createMarker is GLOBAL in multiplayer, so all markers created with it exist for all clients. But they are not visible. Almost all setMarker commands can then be used for different effects on LOCAL clients. +BUT if you use the setMarkerText command, then the marker will become visible to all clients since the command is GLOBAL. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerTextLocal +//KeywordEnd// +DescriptionStart: +Sets the text label of an existing marker. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerTextLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerTextLocal text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerType +//KeywordEnd// +DescriptionStart: +Set marker type. See cfgMarkers for a list of standard markers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerType type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMarkerTypeLocal +//KeywordEnd// +DescriptionStart: +Set marker type. See cfgMarkers for a list of standard markers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMarkerTypeLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +markerName setMarkerTypeLocal type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMass +//KeywordEnd// +DescriptionStart: +Changes the mass of an object smoothly during the given time (in seconds). A time of zero (or using the alternative syntax) means an immediate change. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +myObject setMass [mass, time] +%NextRawSyntax% +myObject setMass mass +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(20 Jun, 2014) +(ArmA3 1.22) A quick reference: +category +setMass +setCenterOfMass +unit +The larger the mass is, the easier a unit will physically fatigued +N/A +aircraft +The larger the mass is, the more sensitive an aircraft will react to joystick, vice versa (Except when AFM is enabled). +Aircraft slant due to center change accordingly, and the position of the camera view will be altered relatively at the same time. (3rd person view) +vehicle +The larger the mass is, the slower a vehicle drives (Ships will sink), vice versa. (Land vehicle performs like a bouncing ball while ships accelerated pretty speedy.) +Vehicle slant due to center change accordingly. +%NextNote% +(March 26, 2015) +If you intend to use setMass in conjunction with ropeCreate in MP i highly recommend to first ropeCreate then setMass (on clientside). +RopeCreate in MP will set the mass of the attached object to the server value upon execution. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMimic +//KeywordEnd// +DescriptionStart: +Set person's facial expression. Following mimic values are recognized: +"Default" +"Normal" +"Smile" +"Hurt" +"Ironic" +"Sad" +"Cynic" +"Surprised" +"Agresive" +"Angry" +Since Arma 2 OA 1.6*, these values are used : +"neutral" +"dead" +"danger" +"hurt" +"aware" +"safe" +"combat" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMimic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setMimic mimic +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +To give the impression of hard faced guys going into a mission, use the setmimic "angry" command. I always have this on my guys to stop them grinning during a cutscene/mission. +%NextNote% +In OFP v1.96, a character will keep any facial expression you set indefinately. Setmimic to "" to return soldier to automatic facial expressions. +%NextNote% +(Jan 19, 2010) +Not working in Arma 2 1.05. +%NextNote% +(September 2, 2013) +In Arma 3 the following face expressions work: "neutral","dead","danger","hurt","aware","safe","combat". Names must be written in all lower case letters. There is another grimace in config - "unconscious", which doesn't quite work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMousePosition +//KeywordEnd// +DescriptionStart: +Moves mouse pointer to specified position on the screen. x and y could be any number, but will be clipped so mouse never leaves the screen area. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMousePosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setMousePosition [x, y] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMusicEffect +//KeywordEnd// +DescriptionStart: +Defines the music track played on activation. +Track is a subclass name of CfgMusic. In addition, "$STOP$" (stops the current music track). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMusicEffect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setMusicEffect track +%NextRawSyntax% +waypoint setMusicEffect track +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setMusicEventHandler +//KeywordEnd// +DescriptionStart: +Sets given music track event handler. Will overwrite other music event handlers. Use addMusicEventHandler if you want to stack them. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setMusicEventHandler +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setMusicEventHandler [type, function] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setName +//KeywordEnd// +DescriptionStart: +Sets the name of a location or a person. In Arma 3 this can be used to set name of a person but only in single player. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setName name +%NextRawSyntax% +unit setName [name, firstName, lastName] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(July 9, 2010‎) +Appears to be only for the 3d editor. +%NextNote% +(September 19, 2013‎) +Support of a person as the first parameter from Arma 3 v. 1.02. +%NextNote% +(April 12, 2014) +Seems to have no effect on players in Multiplayer. (ArmA 3 v1.00) +%NextNote% +(August 18, 2014) +Only last name will appear in command bar i.e. this setname _mynameArray will display _mynameArray select 2. If setname is used with a string : this setname "blah", nothing occurs in command bar and default randomized name is displayed. +Dealing with the units' names in a script, _x (in a foreach units group, for example) will return the "object" as B ALFA 4-1:2 or the name written in ai unit name field in editor (if exists). This context is rather a "variable name" for each object (ai) than an "identity name" as given via setname function. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setNameSound +//KeywordEnd// +DescriptionStart: +Sets the nameSound of a person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setNameSound +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setNameSound name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 19, 2013) +nameSound can be any preset BIS recorded name value. By default units will be called out in voice by their number. By using nameSound you can call them out by name using the following values: +Default: +Armstrong +Nichols +Tanny +Frost +Lacey +Larkin +Kerry +Jackson +Miller +McKendrick +Levine +Reynolds +BLUFOR: +Adams +Bennett +Campbell +Dixon +Everett +Franklin +Givens +Hawkins +Lopez +Martinez +OConnor +Ryan +Patterson +Sykes +Taylor +Walker +OPFOR: +Amin +Masood +Fahim +Habibi +Kushan +Jawadi +Nazari +Siddiqi +Takhtar +Wardak +Yousuf +INDEPENDENT: +Anthis +Costa +Dimitirou +Elias +Gekas +Kouris +Leventis +Markos +Nikas +Nicolo +Panas +Petros +Rosi +Samaras +Stavrou +Thanos +Vega +CODE NAMES: +Ghost +Stranger +Fox +Snake +Razer +Jester +Nomad +Viper +Korneedler +%NextNote% +(December 22, 2013) +setting an incorrect value like "0" or "randomString" will remove the callsign (" /* 2, */ fall back") +%NextNote% +(April 25, 2015) +While kylania listed available names, you can use any word you want. Available words for english can be found in configfile "RadioProtocolENG" "Words". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectArguments +//KeywordEnd// +DescriptionStart: +Set object arguments in mission editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectArguments +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map setObjectArguments [object,[name1,value1,...]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectMaterial +//KeywordEnd// +DescriptionStart: +Sets material of object selection. The selection number is defined through the hiddenselection []={} array in the vehicle's config (starting with 0). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectMaterial +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +obj setObjectMaterial [selectionNumber, material] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectMaterialGlobal +//KeywordEnd// +DescriptionStart: +Set the material of the given selection on all computers in a network session. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectMaterialGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +obj setObjectMaterialGlobal [selection, material] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectProxy +//KeywordEnd// +DescriptionStart: +Set the proxy object associated with the given editor object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectProxy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map setObjectProxy [object,proxy object] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectTexture +//KeywordEnd// +DescriptionStart: +Textures object selection with texture named in array. +Array has the form [selectionNumber, "Texture"]. +The selection number is defined through the hiddenselection []={} array in the vehicle's config (starting with 0). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectTexture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setObjectTexture [selectionNumber,texture] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(Aug 4, 2006) +In MP this command has only local effect. If you want to change a texture on all clients, you have to execute this command on each client (or setObjectTextureGlobal ). This command has also a bug: when a saved game is loaded the texture you have set will disappear and needs to be reset. +%NextNote% +(December 19, 2009) +Instead of bitmaps, procedural textures can be used. +The syntax for those is #(argb,8,8,3)color(R,G,B,A), where R,G,B stands for Red, Green, Blue, and A stands for Alpha, all values can be anything between 0 and 1 (including decimals). e.g. +$Code$_obj setObjectTexture [0,'#(argb,8,8,3)color(0,1,0,1)']$/Code$ +would color myObj in flat green. See Procedural Textures for more details. +%NextNote% +(August 25, 2014) +Also works with absolute path and.jpg files. +$Code$_obj setObjectTexture [0, "C:\Folder\Folder\Texture.paa"]; +_obj setObjectTexture [0, "C:\Folder\Folder\Texture.jpg"];$/Code$ +Texture can also be blank: +$Code$_obj setObjectTexture [2,""];$/Code$ +This will make the texture selection invisible on certain units without an error message. In some cases this is a desirable effect +%NextNote% +(March 18, 2015) +It is also possible to apply texture to unit's backpack, as it also has hidden selection (unfortunately does not work for vests) +$Code$(backpackContainer player) setObjectTexture [0,'#(argb,8,8,3)color(0,0,0,1)']$/Code$ +Also keep in mind that player's custom texture is being reset when you open BIS Arsenal (even without changing any gear) +%NextNote% +(May 13, 2015) +You can also use the gameinternal skins: List of MH9 Skins $Code$_obj setObjectTexture [0, "\a3\air_f\heli_light_01\data\skins\heli_light_01_ext_digital_co.paa"];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectTextureGlobal +//KeywordEnd// +DescriptionStart: +Set the texture of the given selection on all computers in a network session. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectTextureGlobal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +obj setObjectTextureGlobal [selection, texture] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(March 8, 2015) +The effect is persistent and will be synchronized for players who join in progress. (Tested with Arma 3 v1.40) +%NextNote% +(December 29, 2015) +In some cases the ".paa" files do not work. Instead you can try ".jpg" files. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setObjectViewDistance +//KeywordEnd// +DescriptionStart: +Sets the rendering distance of objects (and shadows). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setObjectViewDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setObjectViewDistance distance +%NextRawSyntax% +setObjectViewDistance [objectDistance, shadowDistance] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setOvercast +//KeywordEnd// +DescriptionStart: +Set overcast to given value smoothly during given time (in seconds). Zero time means immediate change. An overcast setting of zero means clear (sunny) weather, and one means storms and rain are very likely. Higher overcast values also result in higher wind speeds. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setOvercast +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setOvercast overcast +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Use setRain if you want to make sure it rains. +%NextNote% +Only one script command induced weather change (either setOvercast or setFog ) can be happening at a time. Starting a new weather change will immediately halt the current weather change. SetRain changes are independent and can occur simultaneously to a weather change. +%NextNote% +Arma 3 's volumetric clouds cannot be instantly changed (it would take up to a few seconds to do a full recompute). Therefore, 0 setOvercast 0 will not have the desired effect. You can use skipTime to get to the desired cloud coverage. +NOTE: To get instant, seamless overcast change to overcast 1 advance the time 24 hours with skipTime while setting overcast transition time to 86400 seconds (24 hours) -- Killzone_Kid +$Code$86400 setOvercast 1; +skipTime 24; +//to remain on the same date: +skipTime -24; +86400 setOvercast 1; +skipTime 24; +$/Code$ +%NextNote% +With removal of simulSetHumidity‎, in order to add instant cloud cover, execute simulWeatherSync with delay (for now): +$Code$ skipTime -24; +86400 setOvercast 1; +skipTime 24; +0 = [] spawn { +sleep 0.1; +simulWeatherSync ; +};$/Code$ +There is slight freeze with simul command. +%NextNote% +Delay in Arma 3 doesn't work for quick changes. Using 120 setOvercast 1 only reaches full overcast after about 50 minutes. Using setTimeMultiplier does speed up the overcast, but it doesn't render any clouds. You will need to skipTime or forceWeatherChange to render clouds if you want it to happen within the hour. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setOwner +//KeywordEnd// +DescriptionStart: +From server machine, change the ownership of an object to a given client. Returns true if locality was changed. +Since Arma 3 v1.40, this command should not be used to transfer ownership of units with AI ( agents are an exception to this rule). +Using command in an unintended way will display an on-screen warning and log a message to.rpt file. +To transfer ownership of all AI units in a group properly, use setGroupOwner instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setOwner clientID +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(January 7, 2015) +The ownership can only be given from server to client. For some reason the server cannot return ownership back with this command. This is fixed in Arma 3 1.40 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setOxygenRemaining +//KeywordEnd// +DescriptionStart: +Sets oxygen remaining. It has no effect when soldier is not diving. Oxygen remaining is a number between 0 and 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setOxygenRemaining +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setOxygenRemaining value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setParticleCircle +//KeywordEnd// +DescriptionStart: +Update particle source to create particles on circle with given radius. Velocity is transformed and added to total velocity. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setParticleCircle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +particleSource setParticleCircle [radius, velocity] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setParticleClass +//KeywordEnd// +DescriptionStart: +Set parameters from existing config class. ClassName is name of the class from CfgCloudlets. +Since version 1.11.114706 you can use setParticleParams to overwrite many values set by config class, particularity those defined in ParticleArray. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setParticleClass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +source setParticleClass className +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 28, 2015) +This can be very useful for getting features that can't normally be added with commands, such as AI view blocking and particles that can only be above/underwater. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setParticleFire +//KeywordEnd// +DescriptionStart: +Set fire parameters to particle effect. +Note: You need to create emitter at first. Basic parameters of particle effect must be defined too. You can use script commands setParticleClass or setParticleParams to do so. See example. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setParticleFire +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +source setParticleFire [coreIntensity, coreDistance, damageTime] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setParticleParams +//KeywordEnd// +DescriptionStart: +Set parameters to particle source. Array is in format ParticleArray. +Since Arma 3 version 1.11.114706 you can use this command to overwrite many values set by setParticleClass, particularity those defined in ParticleArray. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setParticleParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +particleSource setParticleParams array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setParticleRandom +//KeywordEnd// +DescriptionStart: +Set randomization of particle source parameters. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setParticleRandom +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +particleSource setParticleRandom [lifeTime, position, moveVelocity, rotationVelocity, size, color, randomDirectionPeriod, randomDirectionIntensity, {angle}, bounceOnSurface] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 03, 2013) +Support of parameter bounceOnSurface ( Number - 0-1) is in the game since Arma 3 version 0.74. It's variability in speed's loosing in collision with ground. Requires collisions with ground enabled by script command setParticleParams. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPilotLight +//KeywordEnd// +DescriptionStart: +Switches headlights of a vehicle on/off. Note that the vehicle has to be local, for global variant use Arma 3 Actions " LightOn "/" LightOff " +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPilotLight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setPilotLight set +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPiPEffect +//KeywordEnd// +DescriptionStart: +Sets Render Target's visual effect (Picture-in-Picture). +0: Normal - [0] +1: Night Vision - [1] +2: Thermal - [2] +3: Color Correction - [3, enabled, brightness, contrast, offset, blend [r,g,b,a], lerp [r,g,b,a], rgb [r,g,b,a]] +4: Mirror - [4] currently not working +5: Chromatic Aberration - [5, enabled, powerx, powery, (bool) aspectCorrection] currently not working +6: Film Grain - [6, enabled, intensity, sharpness, grainsize, intensityx1, intensityx2, (bool) monochromatic] currently not working +7: Thermal Inverted [7] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPiPEffect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +name setPiPEffect [effect, optionalParam1,..., optionalParamN] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPitch +//KeywordEnd// +DescriptionStart: +Sets the pitch of a persons voice. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPitch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setPitch pitch +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPlayable +//KeywordEnd// +DescriptionStart: +Create MP role for the unit. The roles created this way are used for Join In Progress and Team Switch. +NOTE: Currently in Arma 3 this command does nothing. +Doesn't work as intended +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPlayable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setPlayable unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(december 19, 2009) +if you want to add a TeamSwitchable unit (at least in Arma2), better use addSwitchableUnit +%NextNote% +(may 23, 2011) +This command does not work as well as addSwitchableUnit : http://dev-heaven.net/issues/show/4461 (ArmA 2 OA v1.59) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPlayerRespawnTime +//KeywordEnd// +DescriptionStart: +Set the time interval to wait on player respawn. It is set to mission default on mission start again. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPlayerRespawnTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setPlayerRespawnTime interval +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPos +//KeywordEnd// +DescriptionStart: +Sets object position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setPos pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(14 Dec, 2010) +This command takes a PositionAGL. Apparently, Position and PositionAGL are the same thing. +%NextNote% +(6 Feb, 2011) +Calling setPos on an object can cause the object's orientation to change. This depends on the terrain and/or objects below the object. This was tested by calling setPos on a test object with the position of a helicopter ( modelToWorld with some offset). When flying over land the orientation of the test object would rapidly change depending on the slope of the ground and objects beneath it. +Comment applicable to Ver 1.96 and earlier : +obj1 setPos [x,y,z] +Will place most objects z metres above ground level (negative numbers for underground). But if obj1 is a trigger then it will be placed z metres above sea level. This can be very useful if you want to check a unit's height above sea level but it can be a problem if you want to move a trigger to create an explosion or a sound. To move a trigger to a location at ground level: +$Code$triggername setPos [x,y,0]; +triggername setPos [x,y, abs ( getPos triggername select 2)];$/Code$ +Note for Armed Assault: Using setPos for a trigger will work in exactly the same way that setPos works for other objects - namely that setPos [x,y,z] will place the trigger z metres above ground level. +SetPos for static objects like a ammo crate do not work in MP. +%NextNote% +(23 Nov, 2011) +You can use getPos and setPos on triggers. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPosASL +//KeywordEnd// +DescriptionStart: +Sets the object position above sea level. The pos array uses the PositionASL format. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPosASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setPosASL pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPosASL2 +//KeywordEnd// +DescriptionStart: +Sets the object position. The pos array uses the PositionASL format. The version of the command does not offset based on object center. +Appears to be broken +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPosASL2 +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +obj setPosASL2 pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(21 Aug, 2013) +This command appears to do nothing in both Arma 2 and Arma 3. Tested on 21-08-2013. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPosASLW +//KeywordEnd// +DescriptionStart: +Sets the object position above sea surface. The pos array uses the PositionASLW format. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPosASLW +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +obj setPosASLW pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPosATL +//KeywordEnd// +DescriptionStart: +Sets the position of an object relative to the terrain. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPosATL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setPosATL pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(Feb 26, 2012) +Please Note : this command demands PositionATL format ; one does not simply give 2D position, as this function won't do anything. +%NextNote% +(November 11, 2014) +If you plan on creating bases through script, setPosATL and getPosATL will be your friends. Other commands like getPos or getPosASL will return the position relative to any objects that are underneath. I wrote a base building helper script and through multiple tests, I have found that getPosATL is the absolute best way to get position for objects that are over land. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPosition +//KeywordEnd// +DescriptionStart: +Sets the position of a location. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setPosition pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setPosWorld +//KeywordEnd// +DescriptionStart: +Sets position of an object based on PositionWorld, which is PositionASL of the model centre [0,0,0]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setPosWorld +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setPosWorld position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRadioMsg +//KeywordEnd// +DescriptionStart: +Sets radio trigger menu title text (0 - 0 - map radio). Use "NULL" to disable radio slot. Use "" to restore default title +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRadioMsg +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +index setRadioMsg text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRain +//KeywordEnd// +DescriptionStart: +Set rain density smoothly over the given transition time (in seconds). A transition time of zero means an immediate change. A rain density of zero is no rain, one is maximum rain. Rain is not possible when overcast is less than 0.7. +NOTE : Since Arma 3 this command is MP synchronised, if executed on server, the changes will propagate globally. If executed on client effect is temporary as it will soon change to the server setting. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRain +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setRain rain +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +%NextNote% +(December 15, 2015) +setTimeMultiplier does NOT affect transition time. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRainbow +//KeywordEnd// +DescriptionStart: +Changes the rainbow value smoothly during the given time (in seconds). A time of zero means there will be an immediate change. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRainbow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setRainbow value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 24, 2015) +It should be known that this command does not create a rainbow in all conditions. As in real life, the rainbow can only appear after rainfall and opposite of the sun when it is low on the horizon. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRandomLip +//KeywordEnd// +DescriptionStart: +Enables/Disables random lip. When enabled, the unit continuously moves its lips as if it's talking. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRandomLip +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setRandomLip bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRank +//KeywordEnd// +DescriptionStart: +Sets rank of given unit. +Possible values: PRIVATE, CORPORAL, SERGEANT, LIEUTENANT, CAPTAIN, MAJOR or COLONEL. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRank +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName setRank rank +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(Mar 26, 2009) +Changing a unit's rank using either setUnitRank or setRank will also REPLACE their current rating dependent on their new rank (colonels have a rating of 7500 etc). That is to say REPLACE, not add to: the unit's old rating will disappear with the rank change. +%NextNote% +(April 12, 2014) +Behavior when used on players in multiplayer seems unpredictable. (ArmA 3 1.00) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRectangular +//KeywordEnd// +DescriptionStart: +Set the shape of a location to be either rectangular or elliptical. Locations default shape is elliptical. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRectangular +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setRectangular set +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setRepairCargo +//KeywordEnd// +DescriptionStart: +Set amount of repair resources in cargo space of repair vehicle. +Amount 1 is full cargo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setRepairCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setRepairCargo amount +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(July 10, 2015) +(ArmA 3 1.44) setRepairCargo will have no effect if the vehicle doesn't support getRepairCargo. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setShadowDistance +//KeywordEnd// +DescriptionStart: +Sets the shadows rendering distance. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setShadowDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setShadowDistance value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSide +//KeywordEnd// +DescriptionStart: +Sets a location's side. The default side is Unknown. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSide +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setSide side +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16:00, 3 December 2013 (CEST)) +For units, vehicles you can use: " array joinSilent createGroup Side ", e.g. in init: "[this] joinSilent createGroup EAST;" described in the note below +%NextNote% +(19:05, 6 August 2009 (CEST)) +This is a frequent question on OFPEC, but produced here because it was difficult to find an answer to. setSide does not work for men, vehicles, etc.: it is intended for locations ( i.e., territory). If you want to switch a unit's ( e.g., the player's) side in the middle of a battle, make the unit joinSilent a group on the given side instead. If you want the unit to become the group leader after joining, use selectLeader. I haven't tested the idea of spawning a temporary unit of that side, assigning the player to that unit, setting the player as the leader, then deleting the original unit, but I don't see why it wouldn't work. (It begs the question why we don't have a setSide object function, though.) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSimpleTaskCustomData +//KeywordEnd// +DescriptionStart: +Set custom data for the task. Tooltip will be drawn in task list on the right side. Descriptin will be drawn in task description panel on the bottom. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSimpleTaskCustomData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setSimpleTaskCustomData [IconPath, tooltip, description] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSimpleTaskDescription +//KeywordEnd// +DescriptionStart: +Attach descriptions to the simple task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSimpleTaskDescription +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setSimpleTaskDescription [description, descriptionShort, descriptionHUD] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSimpleTaskDestination +//KeywordEnd// +DescriptionStart: +Attach a destination to the simple task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSimpleTaskDestination +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setSimpleTaskDestination pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSimpleTaskTarget +//KeywordEnd// +DescriptionStart: +Attach a target to the simple task. Overrides setSimpleTaskDestination. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSimpleTaskTarget +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setSimpleTaskTarget [target, precisePosition] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSimpleTaskType +//KeywordEnd// +DescriptionStart: +Attach type to the simple task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSimpleTaskType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setSimpleTaskType taskType +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSimulWeatherLayers +//KeywordEnd// +DescriptionStart: +Sets number of simul weather layers, affects quality of simul weather clouds. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSimulWeatherLayers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setSimulWeatherLayers layers +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSize +//KeywordEnd// +DescriptionStart: +Sets the size (radius) of a location. +The width is 2 * x, the height is 2 * y. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setSize size +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSkill +//KeywordEnd// +DescriptionStart: +Sets ability level of person (commander unit). Value of skill may vary from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSkill +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setSkill skill +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Approximate ranges are: +Novice 0.25 +Rookie = 0.25 and = 0.45 +Recruit 0.45 and = 0.65 +Veteran 0.65 and = 0.85 +Expert 0.85 +%NextNote% +(June 30, 2007) +If "SuperAI" is turned on in the Difficulty Menu, the skill level is always 1, no matter what was defined in the editor or via this command. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSlingLoad +//KeywordEnd// +DescriptionStart: +Creates sling loading from first object to second object if possible. To unload cargo, pass objNull as second param. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSlingLoad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setSlingLoad cargo +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 8, 2014) +"... if possible " +FYI, that only means that 'vehicle' has to be able to lift 'cargo'. The position/distance does not matter, 'cargo' is automatically moved to a position that is close enough but doesn't doesn't collide with 'vehicle'. (can also be used if 'vehicle' is not flying, in which case 'cargo' will be placed and attached on the ground next to it). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSoundEffect +//KeywordEnd// +DescriptionStart: +Defines the different sound effects. +Sound / voice plays a 2D / 3D sound from CfgSounds. +SoundEnv plays an enviromental sound from CfgEnvSounds. +SoundDet (only for triggers) creates a dynamic sound object attached to a trigger defined in CfgSFX. +Use "$NONE$" to stop the sound (1st item). Also use $NONE$ to skip the sound (1st item), when there is none to be used (Example 3). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSoundEffect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setSoundEffect [sound, voice, soundEnv, soundDet] +%NextRawSyntax% +waypoint setSoundEffect [sound, voice, soundEnv, soundDet] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 2, 2013) +To avoid having to create a dummy sound definition, you can use $NONE$ instead. +$Code$private "_trigger"; +_trigger = createTrigger ["EmptyDetector", position player]; +_trigger setTriggerStatements ["true", "", ""]; +_trigger setSoundEffect ["$NONE$", "", "BattlefieldFirefight1", ""]; +$/Code$ +%NextNote% +(March 7, 2012) +When using this function, I found that if the parameter sound was empty, then you would always get a 'Sound not found' error. The following code fixes this problem. You need to create a dummy sound. This is what example 3 is hinting towards. +description.ext: +$Code$class CfgSounds { +sounds[] = {}; +class NoSound {name = "NoSound";sound[] = {"", 0, 1};titles[] = {};}; //Dummy sound needed for setSoundEffect command, due to stupid bug in engine. +}; +$/Code$ +(code sample above written by 'CarlGustaffa' on the Bohemia Interactive forums.) +script.sqf: +$Code$_trigger = createTrigger[ "EmptyDetector", _position ]; +_trigger setTriggerStatements [ "true", "", "" ]; +_trigger setSoundEffect[ "NoSound", "", "", "Wind2_EP1" ]; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSpeaker +//KeywordEnd// +DescriptionStart: +Sets the speaker of a person. In order to setSpeaker dynamically in MP, the command needs to run on every computer with exactly the same params otherwise the speaking unit could appear silent on other PCs. Run this on server: +[bob, "Male02GRE"] remoteExecCall ["setSpeaker", 0]; +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSpeaker +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person setSpeaker speaker +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(September 19, 2013) +speaker can be any of the following: +Male01ENG +Male01ENGB +Male01GRE +Male01PER +Male02ENG +Male02ENGB +Male02GRE +Male02PER +Male03ENG +Male03ENGB +Male03GRE +Male03PER +Male04ENG +Male04ENGB +Male04GRE +Male05ENG +Male06ENG +Male07ENG +Male08ENG +Male09ENG +%NextNote% +(January 12, 2014) +speakers available in Arma 3 (v1.08) : +Gender +Profile setting +US English (B) for EN-GB available +Greek +Persian +Male +Male01_F +Male01ENG(B) +Male01GRE +Male01PER +Male02_F +Male02ENG(B) +Male02GRE +Male02PER +Male03_F +Male03ENG(B) +Male03GRE +Male03PER +Male04_F +Male04ENG(B) +Male04GRE +Male01PER +Male05_F +Male05ENG +Male05GRE +Male02PER +Male06_F +Male06ENG +Male02GRE +Male03PER +Male07_F +Male07ENG +Male03GRE +Male01PER +Male08_F +Male08ENG +Male04GRE +Male02PER +Male09_F +Male09ENG +Male01GRE +Male03PER +Female +- +- +- +- +%NextNote% +(November 10, 2014) +In order to stop a unit from talking you can use: +_unit setSpeaker NoVoice +This will have no negative on the ability to command the unit. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSpeech +//KeywordEnd// +DescriptionStart: +Add speech to location. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSpeech +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setSpeech speech +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSpeedMode +//KeywordEnd// +DescriptionStart: +Set group speed mode. Mode may be one of: +"LIMITED" (half speed) +"NORMAL" (full speed, maintain formation) +"FULL" (do not wait for any other units in formation) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSpeedMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +groupName setSpeedMode mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(14 Feb 2010) +Although setSpeedMode can be called on an individual unit, the entire group will be affected. +%NextNote% +(17 May 2008) +In Multiplayer, this command is overwritten by itself to NORMAL or FULLSPEED (i don't know which one, but it's fast move) when you ask the unit to move via script (ex : _unit doMove (getMarkerPos "destination"); ) +The solution to solve this problem is to initialize the setSpeedMode after your order the unit to move. +So basically it gives you : +_unit doMove (getMarkerPos "destination"); +_unit setSpeedMode "LIMITED"; +If you plan to move the unit again after it reaches its destination, you will have to set the speed mode to LIMITED again like i did just above. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setStamina +//KeywordEnd// +DescriptionStart: +Set units' stamina (seconds until depletion) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setStamina +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setStamina stamina +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 30, 2015) +"setStamina" has the same effect as "setFatigue". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setStaminaScheme +//KeywordEnd// +DescriptionStart: +Set stamina bar color. The scheme can be "Normal", "FastDrain", "Exhausted" or "Default". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setStaminaScheme +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setStaminaScheme "scheme" +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setStatValue +//KeywordEnd// +DescriptionStart: +Sets a value to a given stat. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setStatValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setStatValue [StatName, Value] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSuppression +//KeywordEnd// +DescriptionStart: +Sets the person's suppression, from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSuppression +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setSuppression value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setSystemOfUnits +//KeywordEnd// +DescriptionStart: +Set system of units. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setSystemOfUnits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setSystemOfUnits value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTargetAge +//KeywordEnd// +DescriptionStart: +Sets how the target is known to the other centers. They behave like the target was seen age seconds ago. +Possible age values are: "ACTUAL", "5 MIN", "10 MIN", "15 MIN", "30 MIN", "60 MIN", "120 MIN" or "UNKNOWN". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTargetAge +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setTargetAge age +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTaskResult +//KeywordEnd// +DescriptionStart: +Set a result of the task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTaskResult +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setTaskResult [state,result] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTaskState +//KeywordEnd// +DescriptionStart: +Set the state of a given task. +State value may be one of: +"Succeeded" +"Failed" +"Canceled" +"Created" +"Assigned" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTaskState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +task setTaskState state +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTerrainGrid +//KeywordEnd// +DescriptionStart: +Operation Flashpoint, VBS1 : Set desired terrain resolution (in meters). +For default landscapes, supported resolutions are: +50 - smoothest, less lag +25 - default in multiplayer +12.5 - default in singleplayer +6.25 +3.125 - bumpiest, higher lag +If you select unsupported resolutions, nearest supported value is used instead. +Armed Assault, VBS2 : Terrain resolution is fixed, determined by the world created. This function controls terrain LOD instead (the distance in which the terrain mesh resolution starts to degrade). Higher number means less vertices are used for terrain rendering, making distant hills less smooth. Value 12.5 corresponds to selecting Terrain Detail Normal in Video options, 50 to Very Low, 3.125 to Very High. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTerrainGrid +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setTerrainGrid grid +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +This is like opening up your video preferences and changing "terrain detail", i.e.: setTerrainGrid 50 = lowest detail +setTerrainGrid 3.125 = highest detail It is similar to the command setViewDistance. +%NextNote% +(August 18, 2007) +Effects on grass: +50: disables/removes grass altogether. +25: grass is visible. +Lower values make grass drawn a bit further at distance. However the effect is decreasing rapidly: Grass radius of 25 is 100%. 12.5 is now like 100% + 20%, 6.25 is like 100% + 20% + 5% and 3.125 is 100% + 20% + 5% + 1%. Note these are estimates! +Demo Mission Test_VD_TD.Sara.rar : ViewDistance and TerrainGrid can be changed via RadioTriggers +%NextNote% +(December 15, 2019) +ArmA2 Supported Reso: +In ArmA2 you are not stuck to 50, 25, 12 etc. 45 is a lower setting then 25! +%NextNote% +(March 13, 2013) +ArmA 3 Multiplayer default: +Some testing indicates that the default value for Arma 3 multiplayer is 10 - just like before. 10 is between "Normal" and "High". +An user's terrain detail setting is ignored in multiplayer just like in ArmA 2. +%NextNote% +(November 19, 2014) +TerrainGrid values for Arma 3 1.34: +Low = 50 (NoGrass) +Standard = 25 +High = 12.5 +Very High = 6.25 +Ultra = 3.125 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setText +//KeywordEnd// +DescriptionStart: +Sets the text associated with a location. This text will be displayed on the game map at the location's position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setText text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTimeMultiplier +//KeywordEnd// +DescriptionStart: +Sets a time multiplier for in-game time. The command range is now capped at 0.1 - 120 to avoid performance problems. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTimeMultiplier +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setTimeMultiplier value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTitleEffect +//KeywordEnd// +DescriptionStart: +Defines the title effect via [Type, Effect, Text] where +'Type' can be +"NONE", +"OBJECT", +'Text' defines the shown object, a subclass of CfgTitles. +"RES" +'Text' defines a resource class, a subclass of RscTitles. +"TEXT" +The 'Text' is shown as text itself. 'Effect' defines a subtype: "PLAIN", "PLAIN DOWN", "BLACK", "BLACK FADED", "BLACK OUT", "BLACK IN", "WHITE OUT" or "WHITE IN". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTitleEffect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTitleEffect [type, effect, text] +%NextRawSyntax% +waypoint setTitleEffect [type, effect, text] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTriggerActivation +//KeywordEnd// +DescriptionStart: +Defines the trigger activation type. +See ArmA:Mission Editor - Triggers for a thorough overview of triggers and its fields for activation, effects, etc. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTriggerActivation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTriggerActivation [by, type, repeating] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTriggerArea +//KeywordEnd// +DescriptionStart: +Defines the area monitored by the given trigger. The area could be either rectangular or elliptical. Since Arma 3 v1.59.135137 it is possible to define 3 dimensional area to monitor by specifying extra param for the area height (see pic). +Just like with a and b dimensions, c dimension will alter area in opposite directions from the trigger position along z axis. Therefore if the trigger position is on the surface, half of the trigger area will be above the surface and half below. To place the whole area above the surface, adjust trigger position (move it up c meters). If c is not specified or = 0, the trigger area considered infinitely tall, like in old triggers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTriggerArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTriggerArea [a, b, angle, isRectangle, c] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTriggerStatements +//KeywordEnd// +DescriptionStart: +Defines trigger condition, activation and deactivation statements. Trigger condition has to return Boolean. true will activate the trigger, false will deactivate it (only if activation is set to repeat). thisList returns the same result as list command, which includes all entities in the trigger area that are capable of activating the trigger. Dead entities are excluded as well as crew in vehicles, vehicles themselves are included. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTriggerStatements +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTriggerStatements [condition, activation, deactivation] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(Mar 14, 2011) +An array with three arguments is mandatory for this function. +%NextNote% +(September 16, 2014) +Magic variable thisList does not contain dead units. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTriggerText +//KeywordEnd// +DescriptionStart: +Sets the text label attached to the trigger object. This is used for example as a radio slot label for radio activated triggers. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTriggerText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTriggerText text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTriggerTimeout +//KeywordEnd// +DescriptionStart: +Defines the time between condition satisfaction and trigger activation (randomly from min to max, with an average value mid). If the last argument is true, the condition must be fullfilled all the time. +For a normal trigger, min, mid and max are used to generate random duration according to Gaussian Distribution. For a "Seized" type of trigger, the duration value is generated using side ruling power +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTriggerTimeout +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTriggerTimeout [min, mid, max, interruptable] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setTriggerType +//KeywordEnd// +DescriptionStart: +Sets the type of action processed by the trigger after activation (no action, a waypoints switch or an end of mission): +"NONE" +"EAST G" - Guarded by OPFOR +"WEST G" - Guarded by BLUFOR +"GUER G" - Guarded by Independent +"SWITCH" - Switch waypoints/break loop (see Triggers ) +"END1" - End #1 +"END2" - End #2 +"END3" - End #3 +"END4" - End #4 +"END5" - End #5 +"END6" - End #6 +"LOOSE" - Lose //it is not a typo on the wiki, it is indeed misspelt in the game engine. +"WIN" - (not found in ArmA) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setTriggerType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger setTriggerType action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(July 15, 2009) +Is: _ trigger setTriggerType "WEST G" really defining a "GUARDED BY WEST" trigger ? +It seems not working in ArmA 2 v. 1.02. +See also my note here: http://community.bistudio.com/wiki/triggerType +%NextNote% +(July 15, 2009) +Seems unlikely. Check these examples used by BI missions: +http://pastebin.jonasscholz.de/13 +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setType +//KeywordEnd// +DescriptionStart: +Changes a location to the specified class. Location classes are defined in CfgLocationTypes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +location setType name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnconscious +//KeywordEnd// +DescriptionStart: +Set / reset the unconscious life state of the given unit (in MP works only for a local unit). +In Arma 3 this command is disabled since "UNCONSCIOUS" lifeState doesn't exist in Arma 3 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnconscious +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setUnconscious set +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnitAbility +//KeywordEnd// +DescriptionStart: +Sets skill of given unit. Unlike with setSkill it is possible to use values 1 with this command, and even though skill will correctly return set value, the actual unit ability will be capped to max available. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnitAbility +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setUnitAbility skill +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 8, 2014) +AFAIK not used in Arma 3 anymore (or equals to setSkill) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnitPos +//KeywordEnd// +DescriptionStart: +Set unit position rules. Mode may be one of: +"DOWN" - unit goes prone and stays prone. +"UP" - unit stands and stays standing. +"MIDDLE" - Kneel Position. ArmA version 1.04 (Unit will not kneel if it is unarmed ) +"AUTO" - unit chooses mode according to circumstances. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnitPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setUnitPos mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(18 September 2008‎) +Command most likely only works if run before join into group after createUnit array. +%NextNote% +(21 October 2009) +In Arma, this command does not change the stance of player units. In VBS2 after v1.30, this command does affect players (it changes their stance, but doesn't force them to stay in that stance). +%NextNote% +(11 March 2011) +The above comment by Dwarden about 'an additional join required' is no longer true for Operation Arrowhead. +%NextNote% +(26 September 2013‎) +A unit might not always go prone when ordered to setUnitPos "DOWN", if the unit doesn't agree with the command. To force the unit to go prone, stop the unit from firing by setCombatMode "BLUE" and then order the unit to prone. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnitPosWeak +//KeywordEnd// +DescriptionStart: +Set unit position rules. Mode may be one of: +"DOWN" - person goes prone and stays prone. +"UP" - person stands and stays standing. +"Middle" - Kneel Position. ArmA version 1.04 +"AUTO" - person chooses mode according to circumstances. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnitPosWeak +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setUnitPosWeak mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +This command is the lowest level of priority for setting unit position and to be used in scripted +FSM's. +The current priorities are: +1. Unit pos commanded (from the commanding menu, higher priority). +2. Unit pos scripted (from setUnitPos scripting command, medium priority). +3. Unit pos FSM / setUnitPosWeak (used in the formation FSM, lowest priority). +Command most likely only works if run before join into group after createUnit array. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnitRank +//KeywordEnd// +DescriptionStart: +Sets rank of given unit. +Possible rank values, and the associated rating that is automatically given: +PRIVATE: 0 +CORPORAL: 500 +SERGEANT: 1500 +LIEUTENANT: 2500 +CAPTAIN: 3500 +MAJOR: 5000 +COLONEL: 7500 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnitRank +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName setUnitRank rank +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Mar 26, 2009) +Changing a unit's rank using either setUnitRank or setRank will also REPLACE their current rating dependent on their new rank (colonels have a rating of 7500 etc). That is to say REPLACE, not add to: the unit's old rating will disappear with the rank change. +%NextNote% +(December 24, 2015) +In Arma 3, if the rank is not spelled correctly or the string is empty, it will default to Private. This command is not case sensitive. For Arma 3 the rating set by this command is as follows. +(PRIVATE: 0) +(CORPORAL: 50) +(SERGEANT: 150) +(LIEUTENANT: 250) +(CAPTAIN: 350) +(MAJOR: 500) +(COLONEL: 750) The rating listed here will be present on base type respawn. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnitRecoilCoefficient +//KeywordEnd// +DescriptionStart: +Proportionaly increase/decrease unit's recoil. Drives muzzle up with every shot when supplied positive number and down when negative. 0 cancels recoil. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnitRecoilCoefficient +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName setUnitRecoilCoefficient coefficient +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 28, 2015) +Doesnt seem to work on AI or remote controlled units. Setting the value too high, positive or negative produces some interesting recoil animations. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUnloadInCombat +//KeywordEnd// +DescriptionStart: +If cargo or turret units should get out of vehicle when in combat. If true, vehicle will stop and units will dismount. Vehicle must be local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUnloadInCombat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setUnloadInCombat [allowCargo, allowTurrets] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setUserActionText +//KeywordEnd// +DescriptionStart: +Changes user added action menu item text. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setUserActionText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setUserActionText [index, text] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVariable +//KeywordEnd// +DescriptionStart: +Set variable to given value in the variable space of given element. +To remove a variable, set it to nil (e.g. player setVariable ["varname", nil ];$/Code$ ). +All available data type combinations: +Namespace setVariable Array +Object setVariable Array +Group setVariable Array +Team_Member setVariable Array +Task setVariable Array +Location setVariable Array +Control setVariable Array (since Arma 3 v1.55.133553) +Display setVariable Array (since Arma 3 v1.55.133553) +In Arma 3 it is possible to broadcast nil value +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVariable +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName setVariable [name, value, public] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(18 August, 2007) +According to Suma, beginning with ArmA version 1.08, "setVariable now should work on any entity which can be targeted by AI, including soldier and game logic units. This includes most buildings, but not other static objects. +Using it with buildings one should be aware the building may be discarded because of streaming. In such case the variable space is lost. When used for buildings, the storage should therefore be considered non-reliable." Reference: Make setVariable work on other things than just vehicles +%NextNote% +(3 November, 2009) +Public variable parameter works also for groups in ArmA II. Ref: A2 CIT. +%NextNote% +(January 18, 2010) +this command doesn't work with tasks in Arma 2 1.05 +%NextNote% +(February 8, 2010) +In Arma 2 1.05 the missionNamespace object allows only the two main Arguments by syntax. Publishing the Variable afterwards works fine. +%NextNote% +(January 25, 2011) +this command does work with tasks in Arma 2 OA 1.57 +%NextNote% +(19 July, 2011) +My finds with 1.59 are: +not working for Task (example anyone?) +public is JIP synced for Object and Group +public parameter is not available for Namespace, Location (, Task ) +%NextNote% +(8 May, 2012) +IMPORTANT: This will not work on groups if you do it from the init line (you'll experience locality issues). Do something like this instead: +Put this on init line: +$Code$b_GroupSetup = [ group this, "3/B", "Tank", "Platoon"] execVM "grouptest.sqf";$/Code$ +grouptest.sqf: +$Code$ if ( isServer ) then { +private ["_GroupSelect", "_GroupDesig", "_GroupType", "_GroupSize"]; +_GroupSelect = _this select 0; +_GroupDesig = _this select 1; +_GroupType = _this select 2; +_GroupSize = _this select 3; +_GroupSelect setVariable ["groupDetails", [_GroupDesig, _GroupType, _GroupSize, 0, [], ""], true ]; +};$/Code$ +%NextNote% +(June 13, 2014) +(A3) Disable randomization and set a color to randomized vehicles by using ‘this setVariable ["color",X]’ in the init of the vehicle where X is a number ranging from 0 to the number of skins (minus 1). If the number is out of range, the skin is still randomized. +%NextNote% +(December 9, 2015) +This command does not work with CfgAmmo or CfgNonAIVehicles objects, like bullets, mines or butterflies. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVectorDir +//KeywordEnd// +DescriptionStart: +Set object's direction vector. Up vector will remain unchanged. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVectorDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setVectorDir [x,y,z] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(March 16, 2008) +Command can be also used to rotate camera in all three axis. +%NextNote% +(21:06, 3 March 2009 (CET)) +setVectorDir can only influence an object's pitch. It can not influence bank. Example: +$Code$player setVectorDir [0,0,1]$/Code$ +If the player is facing 0 degrees (north), then this will do NOTHING. +If the player is facing 90 degrees (east), then this will make him pitch 90 degrees up. +You can't directly pitch an object beyond 90 degrees, because this would change its facing direction. You must first flip it's direction using setDir, then you must bank the object 180 degrees, THEN you pitch the object appropriately. +%NextNote% +(August 17, 2015) +In Arma 3, setVectorDir does not control an object's pitch or bank, in fact, it is not possible to change either of those solely using setVectorDir. This command can only affect horizontal rotation along the x-plane, unless an object first has it's vectorUp changed to something other than [0,0,1]. Correct input to setVectorDir should be calculated using the trigonometric functions sin and cos. +examples: +$Code$ +0 degrees (north) +player setVectorDir +[ +sin 0, //equals 0 +cos 0, //equals 1 +1 +]; +45 degrees (north-east) +player setVectorDir +[ +sin 45, //equals 0.707 +cos 45, //equals 0.707 +1 +];$/Code$ +If you are doing trigonometric calculations, it may be better to use setVectorDir rather than setDir, since sine and cosine have already been calculated and will not need to be re-calculated +(also, setDir probably uses setVectorDir anyway.) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVectorDirAndUp +//KeywordEnd// +DescriptionStart: +Sets orientation of an object. The command takes 2 vector arrays, one for vectorDir and one for vectorUp. Default object orientation will always have vectorDir pointing forward (North) along Y axis and vectorUp pointing up along Z axis - [[0,1,0],[0,0,1]], as shown on the diagram below. +When attaching object to an object the axes are relative to the object that gets the attachment. If it is player object for example, then X goes from left to right, Y goes from back to front, and Z goes from down up. +The setDir command is incompatible with setVectorDirAndUp and should not be used together on the same object. Using setVectorDirAndUp alone should be sufficient for any orientation. +In Multiplayer, setVectorDirAndUp must be executed on the machine where the object it applied to is local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVectorDirAndUp +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setVectorDirAndUp [[x1, y1, z1],[x2, y2, z2]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(March 16, 2008) +Command can be also used to rotate camera in all three axis (which also mean it's possible to set camera bank). +%NextNote% +(May 9, 2008) +The object's vectorDir can only control its pitch, while its vectorUp can only control its bank. To set an object's yaw (direction), use the setdir command, before using this command. +You would think vectorUp would control pitch as well, but any pitch that would be set due to vectorUp is ignored. The same is true with vectorDir and yaw; any vectorDir that would adjust yaw is also ignored. If this doesn't make sense, try to visualize it with a box or soda can. +This command does NOT work with values relative to a unit, but rather it works with world vectors (think world coordinates as opposed to model coordinates). As a result, this command can be difficult to use in many situations, because the input values needed to get a certain pitch / bank for an object vary, depending on what direction the object is facing (yaw). +A function to set an object's pitch / bank can be found here +%NextNote% +(October 23rd, 2009) +Note this odd command may now be better understood. There's a thread about it here: +BI Studios Forum Thread +%NextNote% +(1 Jun, 2014) +(ArmA3 ver 1.20) setDir overwrites setVectorDirAndUp (P.S. setVectorDirAndUp also affects setVelocity.), so use setDir before BIS_fnc_setPitchBank, which is an easier workaround on vector, if changing yaw, pitch and bank are needed. setVectorDirAndUp is CCW, so if we wanna to set an obj 40 degrees CW, 170 degrees pitch and 85 degrees bank: +$Code$_obj setDir (40 - 180); [_obj, 170, 85] call BIS_fnc_setPitchBank ;$/Code$ +Same as: +$Code$_obj setVectorDirAndUp [[0.63,0.75,0.17],[-0.75,0.65,-0.084]];$/Code$ +Be aware that attachTo may flip vectorDir if pitch beyond 90 degrees and cause unexpected behavior to BIS_fnc_setPitchBank, e.g. +$Code$[_obj, 100, 0] call BIS_fnc_setPitchBank ; //vector: [-0.14,-0.09,0.98],[-0.83,-0.51,-0.17]$/Code$ +$Code$_obj attachTo [_logic,[0,0,2]]; +[_obj, 100, 0] call BIS_fnc_setPitchBank ; //vector: [0.11,0.33,0.93],[-0.06,0.94,-0.32] +compass direction algorism failed if obj was attached at present.$/Code$ +To overcome such limitation we can use fallowing function for a better workaround. (code originated from bapedibupa, remodified) +$Code$ +_obj attachTo [_logic,[0,0,2]]; +[_obj,[120,-78,37]] call fnc_SetPitchBankYaw; // pitch: 120, bank: -78, yaw: 37$/Code$ +$Code$ +fnc_SetPitchBankYaw = { +private ["_object","_rotations","_aroundX","_aroundY","_aroundZ","_dirX","_dirY", +"_dirZ","_upX","_upY","_upZ","_dir","_up","_dirXTemp","_upXTemp"]; +_object = _this select 0; +_rotations = _this select 1; +_aroundX = _rotations select 0; +_aroundY = _rotations select 1; +_aroundZ = (360 - (_rotations select 2)) - 360; +_dirX = 0; +_dirY = 1; +_dirZ = 0; +_upX = 0; +_upY = 0; +_upZ = 1; +if (_aroundX != 0) then { +_dirY = cos _aroundX; +_dirZ = sin _aroundX; +_upY = - sin _aroundX; +_upZ = cos _aroundX; +}; +if (_aroundY != 0) then { +_dirX = _dirZ * sin _aroundY; +_dirZ = _dirZ * cos _aroundY; +_upX = _upZ * sin _aroundY; +_upZ = _upZ * cos _aroundY; +}; +if (_aroundZ != 0) then { +_dirXTemp = _dirX; +_dirX = (_dirXTemp* cos _aroundZ) - (_dirY * sin _aroundZ); +_dirY = (_dirY * cos _aroundZ) + (_dirXTemp * sin _aroundZ); +_upXTemp = _upX; +_upX = (_upXTemp * cos _aroundZ) - (_upY * sin _aroundZ); +_upY = (_upY * cos _aroundZ) + (_upXTemp * sin _aroundZ); +}; +_dir = [_dirX,_dirY,_dirZ]; +_up = [_upX,_upY,_upZ]; +_object setVectorDirAndUp [_dir,_up]; +}; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVectorUp +//KeywordEnd// +DescriptionStart: +Set object's up vector. Direction vector will remain unchanged. Default object's vectorUp is [0,0,1]. +In Multiplayer, setVectorUp must be executed on the machine where the object it applied to is local. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVectorUp +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setVectorUp [x, y, z] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +player setVectorUp [0,1,0] +If the player is facing 0 degrees (north), then this will do NOTHING. +If the player is facing 90 degrees (east), then this will make him bank 90 degrees to his left. +-- General Barron 21:07, 3 March 2009 (CET) +%NextNote% +(March 22, 2007) +An in-depth discussion on the concept of vectors is available here. +%NextNote% +(March 16, 2008) +Command can be also used to rotate camera in all three axis (which also mean it's possible to set camera bank). +%NextNote% +(October 3, 2013) +It is possible to change both pitch and bank of an object ( surfaceNormal application for instance). Assuming an ammo box in the following example is facing North (default direction is 0): $Code$_ammobox setVectorUp [0,1,0]; //box is pitched 90 degrees forward +_ammobox setVectorUp [1,0,0]; //box is banked 90 degrees to the right$/Code$ +However the above will stop working as soon as you attach the box to something. The following trick however will work in this case: +$Code$_ammobox attachTo [ player, [0,2,1]]; +_ammobox setVectorUp [0,0.99,0.01]; //box is pitched ~90 degrees forward +_ammobox setVectorUp [0.99,0,0.01]; //box is banked ~90 degrees to the right$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleAmmo +//KeywordEnd// +DescriptionStart: +Sets how much ammunition (compared to a full state defined by the vehicle type) the vehicle has. Note that the ammo will be added only to local turrets. To check locality of turret use turretLocal. +The value ranges from 0 to 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setVehicleAmmo value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +This command does not add magazines to vehicle weapons that normally start with more than one magazine. It can however, remove these magazines. +%NextNote% +A2:OA v1.59 - Magazines of vehicle turrets are also refilled by this command. +%NextNote% +If you 'unit/vehicle setVehicleAmmo 0;' an unit/vehicle first, you cannot refill it with 'unit/vehicle setVehicleAmmo 1;'. +You need to execute where the unit is local. +You need to execute on the effectiveCommander of a vehicle. +%NextNote% +In ArmA 3, using this command seems correctly rearm the vehicle and its turrets in all situations (tested with beta 0.72). +%NextNote% +In ArmA 3, when using this on a player, this command can only reduce the number of magazine in relation to the current ammo quantity of the unit. For example if player has 8 magazines, player setVehicleAmmo 0.5; will leave unit with 4 mags. Executing player setVehicleAmmo 0.5; again will leave unit with 2 mags. player setVehicleAmmo 0.5; again - 1 mag. player setVehicleAmmo 0; will remove all mags. If player had 10 mags with 30 bullets in each, player setVehicleAmmo 0.01; will leave player with loaded mag with 3 bullets in it (300 x 0.01 = 3) +%NextNote% +(December 20, 2014) +This command does not operate compared to a full state defined by the vehicle type, but rather relative to a vehicle's current magazine loadout. To get the former behaviour use setVehicleAmmoDef, which utilizes the vehicles default magazine loadout (i.e. its CfgVehicles magazines[] values). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleAmmoDef +//KeywordEnd// +DescriptionStart: +Sets how much ammunition (compared to the current configuration of magazines, but fully loaded) the vehicle has. Note that the ammo will beaddet only to local turrets. To check the locality of turret use turretLocal. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleAmmoDef +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit setVehicleAmmoDef value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(December 20, 2014) +For vehicles this command operates relative to its stock magazine loadout (i.e. its CfgVehicles magazines[] values). Thus setVehicleAmmoDef 1 will fully restore a vehicle to its default ammunition capacity, resetting any changes made by intentionally/implicitly adding/removing magazines. +Use setVehicleAmmo to operate in relation to a vehicle's current magazine loadout. +-- Actium ( talk ) 22:49, 20 December 2014 (CET) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleArmor +//KeywordEnd// +DescriptionStart: +Sets the armor (or health for men) state of the vehicle (a value from 0 to 1). +Works like setDamage only in reverse: player setVehicleArmor 1 is the same as player setDamage 0, and player setVehicleArmor 0 is the same as player setDamage 0.97 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleArmor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setVehicleArmor value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleId +//KeywordEnd// +DescriptionStart: +Sets id (integer value) to vehicle. By this id vehicle is referenced by triggers and waypoints. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleId +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setVehicleId id +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleLock +//KeywordEnd// +DescriptionStart: +Sets vehicle lock. Possible values: +"UNLOCKED" +"DEFAULT" +"LOCKED" +"LOCKEDPLAYER" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleLock +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setVehicleLock lockState +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(October 22, 2014) +In Arma 3: +setVehicleLock "UNLOCKED" = same as " lock 0" +setVehicleLock "DEFAULT" = same as " lock 1" +setVehicleLock "LOCKED" = same as " lock 2" +setVehicleLock "LOCKEDPLAYER" = same as " lock 3" +%NextNote% +(March 4, 2015) +DEFAULT lock is default vehicle lock when vehicle placed in editor. If player is in a group of AIs and not the leader, he will not be able to enter this vehicle as he will not have GetIn action for this vehicle. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehiclePosition +//KeywordEnd// +DescriptionStart: +Moves the object to a given position (same as createVehicle placement algorithm). Uses either the position that's defined by the position param, or one of the marker positions from the markers array. The object is placed inside a circle with position as its center and placement as its radius. The type of placement could also be controlled with special. +If position is in water and vehicle can float, it is placed on water surface, otherwise it is placed on the ground, even if ground is under water. If roof surfaces support walking, units will be placed on roofs if such position is given. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehiclePosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setVehiclePosition [position, markers, placement, special] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +(June 24, 2015) +If you need to set direction as well, set it before using setVehiclePosition. The command will use existing dir of the object for its calculations. +$Code$ player setDir random 360; +player setVehiclePosition [ player, [], 100, "none"];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleTiPars +//KeywordEnd// +DescriptionStart: +Sets the "heat" state of different vehicle parts (for TI detection). This allows simulation of heated up parts of a vehicle without it actually having to utilize them. (0: cold, 1: hot) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleTiPars +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setVehicleTiPars [engine, wheels, weapon] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVehicleVarName +//KeywordEnd// +DescriptionStart: +Sets string representation of an object to a custom string. For example it is possible to return "MyFerrari" instead of default "ce06b00# 164274: offroad_01_unarmed_f.p3d" when querying object as string: +$Code$ hint str _offroad; //MyFerrari$/Code$ +When a vehicle is created and named in the editor, the name becomes both the variable containing the vehicle object and the string representation of the vehicle object. vehicleVarName on the other hand is only string representation of the object. So if you want to refer to the actual object by its vehicleVarName, an extra step needed to assign the object to a variable of the same name. For example to see and refer to offroad as myFerrari: +$Code$_offroad setVehicleVarName "MyFerrari"; MyFerrari = _offroad;$/Code$ +In multiplayer environment setVehicleVarName has to be executed on every PC if you want the custom name to be known everywhere. If vehicle is created and named in the editor, the vehicle name will be known globally automatically. +To reset vehicleVarName and str representation of the object to original form set vehicleVarName to an empty string: +$Code$_offroad setVehicleVarName "";$/Code$ +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVehicleVarName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object setVehicleVarName name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVelocity +//KeywordEnd// +DescriptionStart: +Set velocity (speed vector) of a vehicle. Units are in metres per second. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVelocity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName setVelocity [x, y, z] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(20 Jun, 2014) +(ArmA3 1.22) setVelocity will be affected by setDir and setVectorDirAndUp. So use it after them. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVelocityTransformation +//KeywordEnd// +DescriptionStart: +Interpolate and sets vectors. For additional info see this resource. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVelocityTransformation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +objectName setVelocityTransformation [position1, position2, velocity1, velocity2, direction1, direction2, up1, up2, time] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Aug 4, 2014 – 12:35) +(A3 1.24) Generally speaking setVelocityTransformation is more likely a combination of setPosASL, setVectorDirAndUp (or BIS_fnc_setPitchBank ) and time multiplier. It can be used as a position tracker with all necessary information collected, copied and then released within one function. Here’s a simple reproduction on how setVelocityTransformation works in game: +$Code$ +private ["_dataOld","_dataNext","_capturedData","_obj","_fps","_startTrackingTime","_stepOld","_stepNext","_tracker","_tempTime"]; +_stepOld = 0; +_tempTime = 0; +_stepNext = 1; +while { true } do { +_capturedData = _capturedData + [[ getPosASL _obj, velocity _obj, vectorDir _obj, vectorUp _obj]]; +sleep _fps; +_tempTime = _tempTime + _fps; +if (_tempTime = _startTrackingTime) then { +_dataOld = _capturedData select _stepOld; +_dataNext = _capturedData select _stepNext; +_stepOld = _stepOld + 1; +_stepNext = if (_stepNext = ( count _capturedData)) then [{_stepOld},{_stepNext + 1}]; +_tracker setVelocityTransformation +[_dataOld select 0,_dataNext select 0,_dataOld select 1,_dataNext select 1, +_dataOld select 2,_dataNext select 2,_dataOld select 3,_dataNext select 3,1]; +}; +};$/Code$ +Tracker starts coping the route and stance from the object when time start counting. TimeDiff determines the distance multiply between the current position and the next position. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setViewDistance +//KeywordEnd// +DescriptionStart: +Set rendering distance, in metres. Default is 900m (in OFP) or 1,200m (in ArmA), accepted range is 500m to 5,000m (in OFP) or 10,000m (in ArmA). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setViewDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setViewDistance distance +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +In OFP v1.96, view distance also defines the maximum distance between a unit and any other unit they can know about. Higher view distance will involve more AI simulation cycles for every unit, which causes low performance. +%NextNote% +I tested the above and it seems to apply in Arma 2 as well. AI at a bit above 500m would stop engaging when I lowered the view distance down to 500m and re-engaged when I increased it back. +%NextNote% +In ArmA 2 viewDistance can be set up to 15 km with this command ( while from interface only 10 km ) +%NextNote% +(October 15, 2014) +In Arma 3, Values below 200 have no visible effect. +%NextNote% +(November 20, 2014) +To clarify Bernagee's post, values under 200 have no effect. Tested by setViewDistance below 200, then hint viewDistance. It will not go below 200. Also, as object view distance can only be, at a maximum, the view distance, object view distance will also be reset to 200. +%NextNote% +(June 8, 2015) +Client-side max view distance is limited by the server's view distance. +Tested in Arma 3. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setVisibleIfTreeCollapsed +//KeywordEnd// +DescriptionStart: +Sets whether or not the object is visible even if the tree is collapsed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setVisibleIfTreeCollapsed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map setVisibleIfTreeCollapsed [object, visible] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaves +//KeywordEnd// +DescriptionStart: +Changes the waves value smoothly during the given time (in seconds). A time of zero means there will be an immediate change. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaves +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setWaves value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointBehaviour +//KeywordEnd// +DescriptionStart: +Switches the unit behaviour when the waypoint becomes active. +Possible values are: +"UNCHANGED" +"CARELESS" +"SAFE" +"AWARE" +"COMBAT" +"STEALTH" +See the AIBehaviour page for details of the effect of this command on AI units. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointBehaviour +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointBehaviour mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 26, 2008) +Modes are case sensitive - "safe" won't work, while "SAFE" is ok. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointCombatMode +//KeywordEnd// +DescriptionStart: +The group combat mode is switched when the waypoint becomes active. +Possible mode values are: +"NO CHANGE" (No change) +" BLUE " (Never fire) +" GREEN " (Hold fire - defend only) +" WHITE " (Hold fire, engage at will) +" YELLOW " (Fire at will) +" RED " (Fire at will, engage at will) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointCombatMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointCombatMode mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointCompletionRadius +//KeywordEnd// +DescriptionStart: +The completion radius allows units to call the waypoint completed once they are inside of the given circle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointCompletionRadius +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointCompletionRadius radius +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(29 January 2010‎, 14:12) +The completion radius is currently important for units moving in the Combat mode. +With default completion radius = 0 the leader always finishes in the exact location of the waypoint. +By providing a completion radius you allow him to plan his road to a cover nearby instead. +This does not necessarily mean the waypoint is complete once they are inside of the circle. +The way it works now it is complete once unit is inside and does not think it would be reasonable to move any closer. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointDescription +//KeywordEnd// +DescriptionStart: +Sets the description shown in the HUD while the waypoint is active. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointDescription +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointDescription text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointFormation +//KeywordEnd// +DescriptionStart: +Switches the group formation when the waypoint becomes active. +Possible values are: +"NO CHANGE" +"COLUMN" +"STAG COLUMN" +"WEDGE" +"ECH LEFT" +"ECH RIGHT" +"VEE" +"LINE" +"FILE" +"DIAMOND" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointFormation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointFormation formation +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointHousePosition +//KeywordEnd// +DescriptionStart: +For waypoints attached to a house, this defines the target house position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointHousePosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointHousePosition pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointLoiterRadius +//KeywordEnd// +DescriptionStart: +Assignes loiter radius to waypoint +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointLoiterRadius +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointLoiterRadius radius +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointLoiterType +//KeywordEnd// +DescriptionStart: +Sets the waypoint loiter type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointLoiterType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointLoiterType type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointName +//KeywordEnd// +DescriptionStart: +Changes the waypoint name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointName name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointPosition +//KeywordEnd// +DescriptionStart: +Moves the waypoint to a random position in a circle with the given center and radius. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointPosition [center, radius] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointScript +//KeywordEnd// +DescriptionStart: +Attaches a script to a scripted waypoint. In early versions of Arma, command consisted of a script name and additional script arguments and the script had to use SQS -Syntax. The script receives the following arguments in _this variable: [group, position, target] +In Arma 3, command argument can be a String with code, a reference to.sqf script (it will have to explicitly end with.sqf ) or a reference to.sqs script. +See Mission editor Description for more information about scripted waypoints. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointScript +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointScript command +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointSpeed +//KeywordEnd// +DescriptionStart: +Switches the group speed mode when the waypoint becomes active. +Possible values are: +"UNCHANGED" +"LIMITED" +"NORMAL" +"FULL" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointSpeed mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointStatements +//KeywordEnd// +DescriptionStart: +The waypoint is done only when the condition is fulfilled. When the waypoint is done, the statement expression is executed. +Within the Condition Statement code string: +this refers to the group leader +thisList refers to an array containing each unit in the group +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointStatements +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointStatements [condition, statement] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointTimeout +//KeywordEnd// +DescriptionStart: +Defines the time between condition satisfaction and waypoint finish (randomly from min to max, with an average value mid). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointTimeout +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointTimeout [min, mid, max] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(00:32, 12 December 2010) +The example doesn't seem to make sense, according to the listed syntax. It seems to set a Max time greater than the Mid time. +%NextNote% +(03:30, 12 December 2010) +If mid is greater than max, the result will be really near the mid value. +Results with the values of the example: 8.237, 9.383, 10.425, 9.417, 9.43401, 10.425, 9.90601, 9.96701, 9.42401, 9.42502, 9.96698, 9.89999... +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointType +//KeywordEnd// +DescriptionStart: +Changes the waypoint type. +Type can be: +"MOVE" +"DESTROY" +"GETIN" +"SAD" +"JOIN" +"LEADER" +"GETOUT" +"CYCLE" +"LOAD" +"UNLOAD" +"TR UNLOAD" +"HOLD" +"SENTRY" +"GUARD" +"TALK" +"SCRIPTED" +"SUPPORT" +"GETIN NEAREST" +"DISMISS" +"LOITER" (new in Arma 3) +"AND" (only for game logics) +"OR" (only for game logics) +More details at Waypoint types. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointType type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(07:44, 23 November 2007) +For waypoint types description look at +ArmA: Mission_Editor +OFP: Mission_Editor +Using Move With a game logic group will move the logic to the set location just like setpos. In the editor only AND and OR type of waypoints are available for GAME LOGICS but you can use CYCLE type as well in setWaypointType. +$Code$_wp = group logic1 addWaypoint [ getPos player, 1]; +[ group logic1, 1] setWPPos getPos player ; +[ group logic1, 1] setWaypointType "move";$/Code$ +%NextNote% +(23:07, 18 October 2013 (CEST)) +To clear up any confusion regarding the syntax, follow this example where grp01 is the name of a group of AI units: +$Code$_wp = grp01 addWaypoint [[25295,21919,85], 0]; +_wp setWaypointType "MOVE"; +_wp1 = grp01 addWaypoint [[25381,21882,70], 0]; +_wp1 setWaypointType "MOVE"; +_wp2 = grp01 addWaypoint [[ 25332,21782,78], 0]; +_wp2 setWaypointType "CYCLE"; //Use the variable (_wp2), not [grp01, 0]$/Code$ +%NextNote% +(December 22, 2015) +To spawn a helicopter with troops inside and make them land and unload. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWaypointVisible +//KeywordEnd// +DescriptionStart: +Sets the visibility of the waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWaypointVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWaypointVisible visible +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(September 23, 2015) +This does not apply to Zeus/Curator view... so this command won't hide the Waypoint lines and icons from your view as a Zeus when units are in your EditableAddons list. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWeaponReloadingTime +//KeywordEnd// +DescriptionStart: +Sets states and/or makes an action of/on weapon. Reload time is between 0 and 1 inclusive, where 1 is 100% of maximum reloading time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWeaponReloadingTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle setWeaponReloadingTime [gunner, muzzleName, reloadTime] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 15, 2012) +The description is confusing to me. What the command essential does is to set the reloading state/time of the given weapon. For example you can fire a missile, and make the weapon available to fire again instantly if you apply 0. +Or you can delay or stop the reload event indefinitely. The 0-1 range is a percentage - the reload time is taken from the weapons's config value (either reloadTime or magazineReloadTime - not sure). The effect is one time only each - it does not modify the weapon's general reload time. +Works also for infantry weapons - probably useful weapons with longer reload time like sniper weapons or launchers: +player setWeaponReloadingTime [player,currentWeapon player,0]; +No idea what's point of the return value. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWind +//KeywordEnd// +DescriptionStart: +Set current (forced == false) or permanent (forced == true) wind vector. +NOTE : The effect is global only if command is executed on the server. Wind set locally will sync back to server value in a while. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWind +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +setWind [x, y, forced] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWindDir +//KeywordEnd// +DescriptionStart: +Changes the wind direction smoothly during the given time (in seconds). A time of zero means there will be an immediate change. +NOTE : Effect is global only when executed on the server. On clients wind direction will sync to server value in a while. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWindDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setWindDir value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / global +//LocalityEnd// +NoteStart: +(April 12, 2014) +Seems to make wind [0,0] in MP. (ArmA 3 1.00) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWindForce +//KeywordEnd// +DescriptionStart: +Set max. wind overall wind changes in time. A time of zero means there will be an immediate change. A wind level of zero is minimal changes and a wind level of one means that wind can change rapidly. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWindForce +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setWindForce wind +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWindStr +//KeywordEnd// +DescriptionStart: +Changes the wind strength smoothly during the given time (in seconds). A time of zero means there will be an immediate change. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWindStr +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time setWindStr value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +setWPPos +//KeywordEnd// +DescriptionStart: +Set waypoint position +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/setWPPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint setWPPos pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +show3DIcons +//KeywordEnd// +DescriptionStart: +Toggle the drawing of 3D icons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/show3DIcons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map show3DIcons bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showChat +//KeywordEnd// +DescriptionStart: +Shows/hides the whole chat window. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showChat bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showCinemaBorder +//KeywordEnd// +DescriptionStart: +Forces drawing of cinema borders when using custom camera camCreate. This is normally used in cutscenes to indicate player has no control. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showCinemaBorder +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showCinemaBorder show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(13 October 2007) +This command does only work when Mission is started. Use waitUntil { time 0}; to be sure it works. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showCommandingMenu +//KeywordEnd// +DescriptionStart: +Create the commanding menu described by the given config class or menu name. When the name is empty, the current menu is hidden. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showCommandingMenu +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showCommandingMenu name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 22nd, 2012) +//This script will create a custom menu, and display it once. +MY_SUBMENU_inCommunication = +[ +[ User submenu,true], +[ Option-1, [2],, -5, [[ expression, player sidechat -1 ]], 0, 0, \ca\ui\data\cursor_support_ca ], +[ Option 0, [3],, -5, [[ expression, player sidechat 0 ]], 1, 0, \ca\ui\data\cursor_support_ca ], +[ Option 1, [4],, -5, [[ expression, player sidechat 1 ]], 1, CursorOnGround, \ca\ui\data\cursor_support_ca ] +]; +MY_MENU_inCommunication = +[ +// First array: User menu This will be displayed under the menu, bool value: has Input Focus or not. +// Note that as to version Arma2 1.05, if the bool value set to false, Custom Icons will not be displayed. +[ User menu,false], +// Syntax and semantics for following array elements: +// [ Title_in_menu, [assigned_key], Submenu_name, CMD, [[ expression,script-string]], isVisible, isActive, optional icon path ] +// Title_in_menu: string that will be displayed for the player +// Assigned_key: 0 - no key, 1 - escape key, 2 - key-1, 3 - key-2,..., 10 - key-9, 11 - key-0, 12 and up... the whole keyboard +// Submenu_name: User menu name string (eg #USER:MY_SUBMENU_NAME ), for script to execute. +// CMD: (for main menu:) CMD_SEPARATOR -1; CMD_NOTHING -2; CMD_HIDE_MENU -3; CMD_BACK -4; (for custom menu:) CMD_EXECUTE -5 +// script-string: command to be executed on activation. (no arguments passed) +// isVisible - Boolean 1 or 0 for yes or no, - or optional argument string, eg: CursorOnGround +// isActive - Boolean 1 or 0 for yes or no - if item is not active, it appears gray. +// optional icon path: The path to the texture of the cursor, that should be used on this menuitem. +[ First, [0],, -5, [[ expression, player sidechat First ]], 1, 1 ], +[ Second, [2],, -5, [[ expression, player sidechat Second ]], 1, 1 ], +[ Submenu, [3], #USER:MY_SUBMENU_inCommunication, -5, [[ expression, player sidechat Submenu ]], 1, 1 ] +]; +showCommandingMenu #USER:MY_MENU_inCommunication ; +// Appendix, list of optional argument strings +HasRadio +CanAnswer +IsLeader +IsAlone +IsAloneInVehicle +IsCommander +VehicleCommander +CommandsToGunner +CommandsToPilot +NotEmpty +NotEmptySoldiers +NotEmptyCommanders +NotEmptyMainTeam +NotEmptyRedTeam +NotEmptyGreenTeam +NotEmptyBlueTeam +NotEmptyYellowTeam +NotEmptySubgroups +NotEmptyInVehicle +SelectedTeam +SelectedUnit +FuelLow +AmmoLow +Injured +Multiplayer +AreActions +CursorOnGroupMember +CursorOnHoldingFire +CursorOnEmptyVehicle +CursorOnVehicleCanGetIn +CursorOnFriendly +CursorOnEnemy +CursorOnGround +CanSelectUnitFromBar +CanDeselectUnitFromBar +CanSelectVehicleFromBar +CanDeselectVehicleFromBar +CanSelectTeamFromBar +CanDeselectTeamFromBar +FormationLine +FormationDiamond +SomeSelectedHoldingFire +PlayableLeader +PlayableSelected +IsWatchCommanded +IsSelectedToAdd +HCIsLeader +HCCursorOnIcon +HCCursorOnIconSelectable +HCCanSelectUnitFromBar +HCCanDeselectUnitFromBar +HCCanSelectTeamFromBar +HCCanDeselectTeamFromBar +HCNotEmpty +PlayerVehicleCanGetIn +IsXbox +IsTeamSwitch +CursorOnNotEmptySubgroups +SomeSelectedHaveTarget +CursorOnGroupMemberSelected +HCCursorOnIconSelectableSelected +HCCursorOnIconenemy +PlayerOwnRadio +CursorOnNeedFirstAID +CursorOnNeedHeal +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showCompass +//KeywordEnd// +DescriptionStart: +Shows or hides the compass on the map screen, if enabled for the mission and you possess the item. (default true ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showCompass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showCompass show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16 Aug, 2009) +In Arma 2, the Compass is now an inventory item. Class path is CfgWeapons- ItemCompass. Use the commands addWeapon and removeWeapon to add or remove it from a unit's inventory. (example: player addweapon "ItemCompass") +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showCuratorCompass +//KeywordEnd// +DescriptionStart: +Hides or shows compass in curator interface. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showCuratorCompass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showCuratorCompass bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showGPS +//KeywordEnd// +DescriptionStart: +Shows or hides the GPS receiver on the map screen, if enabled for the mission and you possess the item. (default false ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showGPS +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showGPS show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16 Aug, 2009) +In Arma 2, the GPS is now an inventory item. Class path is CfgWeapons- ItemGPS. Use the commands addWeapon and removeWeapon to add or remove it from a unit's inventory. (example: player addweapon "ItemGPS") +%NextNote% +(14 Jun, 2010) +In Arma 2 GPS is also an item, so will not be removed by removeAllWeapons, even though it can be removed by removeWeapon and added by addWeapon. To remove all items use the removeAllItems command (though this will also remove basic items such as map and compass). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showHUD +//KeywordEnd// +DescriptionStart: +Enable / disable showing of HUD. Defines visibility of weapon crosshair and any informational tags that appear when pointing the weapon at an object as well as availability of the default action menu. Unfortunately, it also hides icons drawn with drawIcon3D. +Appearance of HUD can also be controlled with showHUD param in description.ext. NOTE: As of Arma 3 v1.49.131879 there is a showHUD[] array param, that is identical in format to the extended showHUD command. When showHUD[] array param is present in description.ext, it will disable showHUD command entirely, allowing mission makers to permanently alter visibility of some HUD elements. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showHUD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showHUD enable +%NextRawSyntax% +showHUD [hud, info, radar, compass, direction, menu, group, cursors] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(August 17, 2015) +Last param, "cursors" controls visibility of the action menu as well as weapon cursors. However if 1st param "hud" hides and disables action menu, last param "cursors" only hides it. So you get invisible action menu that is fully operational. inGameUISetEventHandler will still fire on interaction, giving the information about selected item on the action menu even if you cannot see it. Unfortunately it also hides icons drawn with drawIcon3D. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showLegend +//KeywordEnd// +DescriptionStart: +Show/hide map legend. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showLegend +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map showLegend bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showMap +//KeywordEnd// +DescriptionStart: +Enable Map (default true ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showMap +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showMap show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +In ArmA 2 - This command no longer works. The map is now an inventory item. It is kept under the weapon class name "itemmap". +Example: $Code$unitname removeweapon "itemmap"$/Code$ To add again use $Code$unitname addweapon "itemmap"$/Code$. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownArtilleryComputer +//KeywordEnd// +DescriptionStart: +Checks whether the player has the artillery computer currently open. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownArtilleryComputer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownArtilleryComputer +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownChat +//KeywordEnd// +DescriptionStart: +Returns true if chat window is enabled. Chat window can be disabled with showChat command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownChat +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownCompass +//KeywordEnd// +DescriptionStart: +Checks if client has Compass enabled in description.ext ( showCompass param) or force enabled with showCompass command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownCompass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownCompass +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownCuratorCompass +//KeywordEnd// +DescriptionStart: +Returns true if compass is shown. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownCuratorCompass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownCuratorCompass +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showNewEditorObject +//KeywordEnd// +DescriptionStart: +Show the add editor object dialog,type is editor object type,class is,class definition to automatically select,side filters by a certain,side,pos is position to create the object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showNewEditorObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map showNewEditorObject [type,class,side,position] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownGPS +//KeywordEnd// +DescriptionStart: +Checks if client has GPS reciever enabled in description.ext ( showGPS param) or force enabled with showGPS command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownGPS +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownGPS +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownHUD +//KeywordEnd// +DescriptionStart: +Returns array of Booleans corresponding to the visibility of various HUD elements (see extended showHUD ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownHUD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownHUD +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownMap +//KeywordEnd// +DescriptionStart: +Checks if client has Map enabled in description.ext ( showMap param) or force enabled with showMap command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownMap +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownMap +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownPad +//KeywordEnd// +DescriptionStart: +Checks if client has Notepad enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownPad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownPad +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownRadio +//KeywordEnd// +DescriptionStart: +Check if player has Radio enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownRadio +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownUAVFeed +//KeywordEnd// +DescriptionStart: +Returns true if video feed transmitted from UAV is shown. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownUAVFeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownUAVFeed +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownWarrant +//KeywordEnd// +DescriptionStart: +Check if player has ID card enabled. Obsolete command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownWarrant +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownWarrant +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +shownWatch +//KeywordEnd// +DescriptionStart: +Checks if client has Watch enabled in description.ext ( showWatch param) or force enabled with showWatch command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/shownWatch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +shownWatch +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showPad +//KeywordEnd// +DescriptionStart: +Shows or hides the notebook on the map screen, if enabled for the mission. (default true ). It is no longer relevant to Arma 2. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showPad +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showPad show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showRadio +//KeywordEnd// +DescriptionStart: +Shows or hides the radio on the map screen, if enabled for the mission and you possess the item. (default true ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showRadio show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16 Aug, 2009) +In Arma 2, the radio is now an item in ArmA 2. Class path is CfgWeapons- ItemRadio. Use the command addWeapon and removeWeapon to remove it from a unit's inventory. (example: player removeweapon "ItemRadio") +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showSubtitles +//KeywordEnd// +DescriptionStart: +Enable / disable showing of subtitles. Return the previous state. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showSubtitles +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showSubtitles enable +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showUAVFeed +//KeywordEnd// +DescriptionStart: +Shows/hides video feed transmitted from UAV. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showUAVFeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showUAVFeed bool +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showWarrant +//KeywordEnd// +DescriptionStart: +Enable ID card (default false ). Obsolete command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showWarrant +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showWarrant show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showWatch +//KeywordEnd// +DescriptionStart: +Shows or hides the watch on the map screen, if enabled for the mission and you possess the item. (default true ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showWatch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +showWatch show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(16 Aug, 2009) +In Arma 2, the Watch is now an inventory item. Class path is CfgWeapons- ItemWatch. Use the commands addWeapon and removeWeapon to add or remove it from a unit's inventory. (example: player addweapon "ItemWatch") +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +showWaypoint +//KeywordEnd// +DescriptionStart: +Sets the condition determining when the waypoint is shown. +Possible values are: +"NEVER" - never show it +"EASY" - show only in cadet mode +"ALWAYS" - always show it +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/showWaypoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint showWaypoint show +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +side +//KeywordEnd// +DescriptionStart: +Returns the side of a unit, vehicle, object or location. Once dead, a unit will be on the civilian side. Query the side of the Group to get a reliable result. +When used in conjunction with a format statement hint format ["%1", side player ], the returned strings are: " WEST ", " EAST ", " GUER ", " CIV ", " LOGIC ", " ENEMY " (eg: renegades), " FRIENDLY ", " AMBIENT LIFE ", " EMPTY " or " UNKNOWN ". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/side +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +side object +%NextRawSyntax% +side location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +In ArmA, the following objects are on side civilian : dead bodies and vehicles, empty vehicles, all mission editor placed objects (that do not have an inherit side), all objects with interactive components such as ladders and doors, man made structures such as buildings (including classless wrp placed objects), docks, high tension powerlines, see-saws, large rubbish bins, fountains. Basically if an object uses a non-simple damage or physics simulation it is likely to be on the civilian side. +NOTE: If you need to know the side of a dead body, you can use faction command as a workaround -- Killzone_Kid +%NextNote% +In OFP 1.96, side return value for empty vehicles will be civilian. +%NextNote% +In OFP v1.96, the side return value for a vehicle is based on the side of it's commander, then gunner, then driver, then cargo. It will retain it's side value until it is either empty, or a unit of another side takes over in a equal or higher role, irrespective of the side of other units still on board. This can be used to simulate friendly fire, as a vehicle can be made to appear to be an enemy even though all units on board are actually friendly. +%NextNote% +Units with negative score(rating) are sideEnemy. +%NextNote% +The Side for civilians is civilian and the string name of the side is "CIV". For Resistance/Independent (Guerilla) they are resistance and "GUER". +%NextNote% +As CEEB says above, in ArmA2, side for a vehicle often depends on who the command or driver is, for example, A KA52, piloted by a USMC guy will have side WEST. For an accurate result of what 'where the vehicle was made', use faction. This ignores the pilot/commander, so in my example here, this KA52 will always return faction "RU". Note that faction returns different values to side though. +%NextNote% +Side values for ambient life (animals) are bizarre. side _unit returns "CIV", but playerSide returns "AMBIENT LIFE" when the player is an animal. In that case, playerSide == side player returns false! +Fortunately, you can easily check if a unit is an animal with _unit isKindOf "ANIMAL"' +%NextNote% +Units who set via 'this setcaptive true' are always on side civilian. +%NextNote% +(July 30, 2015) +This is probably the most confusing section of the wiki so here I give my clarification: +In ArmA3 1.48, forEach'ing playableUnits to find certain players from certain sides, you will need to do it like this: +$Code$if (side _x isEqualTo EAST) then { diag_log format["%1's side is %2", name _x, side _x];$/Code$ +Instead, this page might trick you into thinking that you will need to check for player's side like this: +$Code$side _x isEqualTo "EAST"$/Code$ ^^^^^ That does NOT work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideAmbientLife +//KeywordEnd// +DescriptionStart: +Returns side of ambient life, for example ambient life placed in Eden Editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideAmbientLife +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sideAmbientLife +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideChat +//KeywordEnd// +DescriptionStart: +Types text to the side radio channel. Must have assigned "itemRadio" to see or transmit the messages. +Note: This function only types text to the list, it does not broadcast the message. If you want the message to show on all computers, you have to execute it on all of them. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName sideChat chatText +%NextRawSyntax% +[side, string] sideChat chatText +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +In OFP v1.96, sideChat messages can be sent from 2 abstract sources: "Papa_Bear" and "Base FireFly". Use sideChat on an array in the form [SIDE,"base"],[SIDE,"HQ"],[SIDE,"Papa_bear"] or [SIDE,"airbase"], where SIDE is the side broadcasting. "HQ", "base" and "Papa_bear" seem to be the same object. The callsign strings can be re-defined using a stringTable.csv file, using STR_CFG_PAPABEAR and STR_CFG_FIREFLYBASE. Example : [EAST,"base"] sideChat "Return to base!". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideEmpty +//KeywordEnd// +DescriptionStart: +Returns empty side, for example static buildings in Eden Editor. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideEmpty +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sideEmpty +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideEnemy +//KeywordEnd// +DescriptionStart: +The enemy side (used for renegades). Unit of this side is enemy to everyone. +To become one, you can attack members of your own side or use addRating. +When below a rating of -2000 units switch automatically to this side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideEnemy +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sideEnemy +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideFriendly +//KeywordEnd// +DescriptionStart: +The Friendly side (used for captives). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideFriendly +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sideFriendly +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideLogic +//KeywordEnd// +DescriptionStart: +The Logic side. +Side of Game Logics and Modules. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideLogic +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sideLogic +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideRadio +//KeywordEnd// +DescriptionStart: +Send the message to the side radio channel. Message is defined in Description.ext file. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName sideRadio chat +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(03:47, 12 February 2007) +In OFP v1.96, sideRadio messages can be sent from 2 abstract sources: "Papa_Bear" and "Base FireFly". Use sideRadio on an array in the form [SIDE,"base"],[SIDE,"HQ"],[SIDE,"Papa_bear"] or [SIDE,"airbase"], where SIDE is the side broadcasting. "HQ", "base" and "Papa_bear" seem to be the same object. The callsign strings can be re-defined using a stringTable.csv file, using STR_CFG_PAPABEAR and STR_CFG_FIREFLYBASE. Example : [EAST,"base"] sideRadio "returnToBase". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sideUnknown +//KeywordEnd// +DescriptionStart: +The unknown side. +Used when the side of a unit is unknown, e.g. for spotted targets with insufficient information. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sideUnknown +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sideUnknown +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +simpleTasks +//KeywordEnd// +DescriptionStart: +Return all simple tasks assigned to given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/simpleTasks +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +simpleTasks person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +simulationEnabled +//KeywordEnd// +DescriptionStart: +Check if the entity has enabled simulation. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/simulationEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +simulationEnabled entity +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +simulCloudDensity +//KeywordEnd// +DescriptionStart: +Returns density of clouds at given position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/simulCloudDensity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +simulCloudDensity pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +simulCloudOcclusion +//KeywordEnd// +DescriptionStart: +Returns clouds occlusion between two given points (0 - no clouds, 1 - full clouds). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/simulCloudOcclusion +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +simulCloudOcclusion [pos1,pos2] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(8 August, 2014) +The simulCloudOcclusion command is not recognized on dedicated servers, and will produce an error. If you use this command, it cannot be anywhere within a script that is run on the dedicated server, or the entire script will halt. To get around this, you can use: $Code$if ! isDedicated then {[] execVM "simulCloudOcclusionScript.sqf"};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +simulInClouds +//KeywordEnd// +DescriptionStart: +Returns if given position is in clouds. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/simulInClouds +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +simulInClouds pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +simulWeatherSync +//KeywordEnd// +DescriptionStart: +Synchronizes Simul Weather with Arma weather, generates all keyframes. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/simulWeatherSync +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +simulWeatherSync +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sin +//KeywordEnd// +DescriptionStart: +Sine of x, argument in Degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sin +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sin x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +size +//KeywordEnd// +DescriptionStart: +Returns a location's size. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/size +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +size location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sizeOf +//KeywordEnd// +DescriptionStart: +Returns the diameter of bounding sphere of the object of given type in meters. Size returned is usually bigger than the biggest size of the object along any of the axes. For example if object is 10 x 4 x 5 the sizeOf value returned expected to be around 10. If you need to estimate the size of the object more precisely, use boundingBox or boundingBoxReal. +NOTE: The object has to be present in current mission to be able to read its size (otherwise zero will be returned). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sizeOf +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sizeOf type +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +skill +//KeywordEnd// +DescriptionStart: +Returns current level of ability of person, in range between 0 and 1. Skill 1 is highest skill. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/skill +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +skill unitName +%NextRawSyntax% +unitName skill skillType +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Skill of AI units set via the slider in unit placement screen varies from 0.2 to 1.0. +If superAI is enabled all units have skill of 1.0 regardless of the skill slider +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +skillFinal +//KeywordEnd// +DescriptionStart: +Returns final, recalculated sub skill value of given unit. (with regard to AI Level coefficient (Difficulty settings)). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/skillFinal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName skillFinal sub-skill +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Since 1.40 the command works also in MP environment +%NextNote% +(January 31, 2015) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +skipTime +//KeywordEnd// +DescriptionStart: +Jumps the specified number of hours forward or backward. The time of day and tides are adjusted, but no changes are made to any units. If present, the lower level of clouds instantly jump to the position they would be in if time had passed normally. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/skipTime +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +skipTime duration +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +To simulate a smooth time-lapse effect (e.g. in cut-scenes), you can use the following code: +$Code$while {true} do {skiptime 0.00333; sleep 0.1};$/Code$ +%NextNote% +To skip forward to a specific time, irrespective of the current mission time, use +$Code$skipTime (_timeToSkipTo - daytime + 24 ) % 24;$/Code$ +%NextNote% +In ArmA OFP, skipTime does not actually estimate weather changes beyond moving the clouds across the sky. Weather counters continue as if no time has passed. The setDate command can be used instead of skiptime to change the time without the visual give-away of the lower clouds jumping. +%NextNote% +I cannot confirm this for OA 1.60 beta (85889): +MP: Even though the immediate effect of skipTime is only local, +the new time will propagate through the network after 30 seconds or so. +Instead the date, which includes time, is synced automatically for new JIP clients - NOT for present instances. +So one has to apply skipTime on all instances in MP (server + all present clients). +%NextNote% +This command is blocking and in some cases it may take up to 1.5 seconds (probably depends on CPU) for it to calculate the changes to the environment, during which the game will microfreeze. It largely depends on weather changes, which are quite random. However one thing remains consistent, skipTime 24 hours is always almost instant. This is quite helpful when used in conjunction with commands such as setOvercast for instant and seamless effect. To try it yourself use this script: +$Code$[] spawn { +for "_i" from 1 to 24 do { +_time = diag_tickTime ; +skipTime _i; +diag_log [_i, diag_tickTime - _time]; +sleep 3; +}; +};$/Code$ +One of the results (results will vary depending on weather conditions): +$Code$[1,1.44507] +[2,1.46118] +[3,1.33105] +[4,1.396] +[5,0.0310059] +[6,1.37891] +[7,1.4502] +[8,1.37817] +[9,1.37695] +[10,1.37012] +[11,1.448] +[12,1.32593] +[13,1.45508] +[14,1.448] +[15,0.0349121] +[16,0.0368652] +[17,1.25903] +[18,1.38599] +[19,1.4519] +[20,0.052002] +[21,0.0400391] +[22,0.0490723] +[23,1.35205] +[24,0.0151367] //this is always the lowest$/Code$ +%NextNote% +In Arma 3 (around v1.14) skipTime executed on the server will get synced in 5 seconds or so with all the clients. It will also be JIP compatible. skipTime executed on a client will change time on client for about 5 seconds after which it will sync back to server time. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sleep +//KeywordEnd// +DescriptionStart: +Suspend execution for given time in seconds. The sleep precision is given by a framerate, the delay given is the minimal delay expected. Must be called inside of a context which is interruptible, i.e. a script executed by execVM or spawn. +Note that this command will suspend the script indefinitely if game simulation is paused in SP. To avoid this, use uiSleep. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sleep +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sleep delay +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 20, 2006) +Sleep suspends both SQF functions and SQF scripts. In functions, the calling script is still in suspension due to waiting for a return from the call command. The game engine will continue, however. See Function for more detail. +%NextNote% +(February 12, 2007) +Sleep durations between.0005 and.02 will cause the same delay (roughly.02 seconds). Delays of.0005 and less have no effect (ie, the sleep call will return immediately). +%NextNote% +The comment above is a little misleading. The game engine appears to work by processing frames and then checking to see whether scripts are available to execute. Sleep causes the script/function to be suspended until at least the specified time has elapsed. To wait for the next frame, or give other scripts a chance to run, use Sleep 0.001. +%NextNote% +(July 16, 2007) +For scripts called by the Init Event Handler the first sleep command will suspend the script at the briefing screen at the start of a mission. The script will continue after the briefing screen, when actually "in game". +%NextNote% +(July 12, 2014) +Sleep will treat negative values as if they were 0. (Tested in Arma 3 v1.22) +%NextNote% +(October 18, 2014) +For server scripts, if you are creating "while true" timers, it is best to use uiSleep instead, as the sleep from that command is not slowed down by simulation / server lag, so the timers will execute at intervals that are much closer to real time, even under heavy lag. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sliderPosition +//KeywordEnd// +DescriptionStart: +Return current thumb position of slider idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sliderPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sliderPosition idc +%NextRawSyntax% +sliderPosition control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sliderRange +//KeywordEnd// +DescriptionStart: +Return limits, as an Array [min, max] of slider idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sliderRange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sliderRange idc +%NextRawSyntax% +sliderRange control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sliderSetPosition +//KeywordEnd// +DescriptionStart: +Set current thumb position of slider idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sliderSetPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sliderSetPosition [idc, pos] +%NextRawSyntax% +control sliderSetPosition pos +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sliderSetRange +//KeywordEnd// +DescriptionStart: +Set limits of slider idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sliderSetRange +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sliderSetRange [idc, min, max] +%NextRawSyntax% +control sliderSetRange [min, max] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sliderSetSpeed +//KeywordEnd// +DescriptionStart: +Set speed of slider with id idc of topmost user dialog. +Click to arrow - move by line +Click to scale outside thumb - move by page. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sliderSetSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sliderSetSpeed [idc,line,page] +%NextRawSyntax% +control sliderSetSpeed [line, page] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sliderSpeed +//KeywordEnd// +DescriptionStart: +Return speed, as an Array [min, max] of slider idc of topmost user dialog. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sliderSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sliderSpeed idc +%NextRawSyntax% +sliderSpeed control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +slingLoadAssistantShown +//KeywordEnd// +DescriptionStart: +Returns true of Sling Load Assistant is open +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/slingLoadAssistantShown +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +slingLoadAssistantShown +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +soldierMagazines +//KeywordEnd// +DescriptionStart: +Get array with all magazines of the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/soldierMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldierMagazines unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +someAmmo +//KeywordEnd// +DescriptionStart: +Check if unit has some ammo. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/someAmmo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +someAmmo unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sort +//KeywordEnd// +DescriptionStart: +Attempts to sort given array either in ascending ( true ) or descending ( false ) order. All array elements should be one of the following types: +String - array of strings (["a","b","c"...]) +Number - array of numbers ([1,2,3...]) +Array - array of subarrays ([["a",1,2],["b",3,4],["c",5,6]...]). Subarrays should be of the same structure. Subarray elements other than String or Number will be ignored during sorting. +Mixed arrays (["a",1,[true]...]) are not supported and results are undefined. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sort +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +array sort order +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(April 16, 2015) +The algorithm for sorting subarrays: compare 1st element, if equal compare 2nd, if equal compare 3rd...etc. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +soundVolume +//KeywordEnd// +DescriptionStart: +Check current sound volume (set by fadeSound ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/soundVolume +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soundVolume +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +spawn +//KeywordEnd// +DescriptionStart: +Adds given code to the scheduler. Exactly when the code will be executed is unknown, it depends on how busy is the engine and how filled up is the scheduler. Therefore spawn does not wait for the supplied code to finish, instead, spawn returns a Script handle to the scheduler task. scriptDone command can be used to check the code completion. Additional arguments are passed to the code in local variable _this. Since Arma 3 v1.55 the script handle also exists inside the code in _thisScript variable. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/spawn +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +arguments spawn code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(5 March, 2009) +spawn cannot call other local functions on the same scope as itself. +It can, however, call other global functions: +$Code$_addOne = {TST=TST+1}; +TST_addOne = {TST=TST+1}; +_add = { +TST=TST+1; +player sideChat format ["added: %1",TST]; +[] call _addOne; +player sideChat format ["called local: %1",TST]; +[] call TST_addOne; +player sideChat format ["called global: %1",TST]; +}; +TST=0; +[] call _add; +[] spawn _add;$/Code$ +The call of _addOne from the spawned function does not do anything. +%NextNote% +(October 21, 2014) +spawn requires a script handle when used in the 2D editor. (A3) +In scripts and in the debug console, it is not required, but very useful for keeping track of running scripts. Having a script handle also makes it easy to terminate scripts at any time. +Since spawn creates a new scheduled environment, having an excess of open threads can make the scheduler queue extremely long, significantly increasing the execution time of each thread. (it takes an extremely large amount of threads, though) +%NextNote% +(August 25, 2015) +If you want to call a local function which has NOT been created inside a spawned function, then do this: +$Code$_fncOne = { systemChat"This is _fncOne" }; _fncTwo = { call (_this select 0) }; [_fncOne] spawn _fncTwo;$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +speaker +//KeywordEnd// +DescriptionStart: +Returns the speaker of a person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/speaker +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +speaker person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +speed +//KeywordEnd// +DescriptionStart: +Object speed (in km/h). Returns relative speed of given object along Y axis. An equivalent to: 3.6 * ( velocityModelSpace _obj select 1) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/speed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +speed object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +speedMode +//KeywordEnd// +DescriptionStart: +Returns speed mode of the group, which can be any of the following: +"LIMITED" +"NORMAL" +"FULL" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/speedMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +speedMode groupName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +splitString +//KeywordEnd// +DescriptionStart: +An SQF version of C++ strtok. Splits given string str into an array of tokens according to given delimiters. In addition, if empty string "" is used for delimiters, str is split by each character. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/splitString +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +str splitString delimiters +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sqrt +//KeywordEnd// +DescriptionStart: +Returns square root of x. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sqrt +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sqrt x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(18:05, 24 August 2014 (EST)) +Alternatively use "x^0.5" or "x^(1/2)". $Code$_sq = 9^0.5; //Result is 3 +_sq = 9^(1/2); //Result is 3$/Code$ +You can use this method to get any root. +Cubed root = x^(1/3) or x^0.333[repeating]. +Root 4 = x^(1/4) or x^0.25. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +squadParams +//KeywordEnd// +DescriptionStart: +Returns data about squad of given unit loaded from squad.xml. +All items in returned array are String. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/squadParams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +squadParams unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(July 19, 2015) +Returns an empty array in singleplayer. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +stance +//KeywordEnd// +DescriptionStart: +Returns the stance of given unit - can be "STAND", "CROUCH", "PRONE", "UNDEFINED" (for example, swimming) or "" (on non-human object ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/stance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +stance unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +startLoadingScreen +//KeywordEnd// +DescriptionStart: +Shows loading screen with the given text, using the given resource. While loading screen is shown, simulation and scene drawing is disabled, user control is disabled, mouse cursor is hidden, scripts run at full speed. The loading screen does not end by itself and needs endLoadingScreen command, so make sure there is one at the end of loading operation. +NOTE: The game simulation is disabled during Loading Screen operation (at least in SP), therefore any use of sleep command will pause the game indefinitely. If you have to "sleep", use uiSleep +By default (if custom resource is not provided) startLoadingScreen will use "RscDisplayNotFreeze" resource. If you are using custom resource (could be also defined in description.ext ), the following resource's controls are supported by the engine: +idc = 101; - text (type = 0;) or picture (type = 48;). The text will be set to the text provided by the command param. +idc = 103; - progress (type = 8;) or animated texture (type = 45;). This control indicates global hardcoded mission loading progress and is useless after mission is loaded. +idc = 104; - progress (type = 8;). This control's progress is initially set to 0 and can be manipulated with progressLoadingScreen command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/startLoadingScreen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +startLoadingScreen [text, resource] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 15, 2009) +As it stops simulation as well as scene drawing, be sure not to put any sleep (or waitUntil if you are checking for in-game changes ; waitUntil for var initialization or script loading is ok) command between startLoadingScreen and endLoadingScreen. +%NextNote% +(January 18, 2010) +edit 10:15 : Whatever transparence you define in your own resource, there will be a black screen to cache loading. +It's up to you to choose a nice blue background :-) +Resource has to be defined in description.ext ; it must NOT be defined as RscTitles ! Here is an example : +Details anzeigen +$Code$ +// basic defines +// +class RscText +{ +type = 0; +idc = -1; +x = 0; +y = 0; +h = 0.037; +w = 0.3; +style = 0x100; +font = Zeppelin32; +SizeEx = 0.03921; +colorText[] = {1,1,1,1}; +colorBackground[] = {0, 0, 0, 0}; +linespacing = 1; +}; +class RscPicture +{ +access=0; +type=0; +idc=-1; +style=48; +colorBackground[]={0,0,0,0}; +colorText[]={1,1,1,1}; +font="TahomaB"; +sizeEx=0; +lineSpacing=0; +text=""; +}; +class RscLoadingText : RscText +{ +style = 2; +x = 0.323532; +y = 0.666672; +w = 0.352944; +h = 0.039216; +sizeEx = 0.03921; +colorText[] = {0.543,0.5742,0.4102,1.0}; +}; +class RscProgress +{ +x = 0.344; +y = 0.619; +w = 0.313726; +h = 0.0261438; +texture = "\ca\ui\data\loadscreen_progressbar_ca.paa"; +colorFrame[] = {0,0,0,0}; +colorBar[] = {1,1,1,1}; +}; +class RscProgressNotFreeze +{ +idc = -1; +type = 45; +style = 0; +x = 0.022059; +y = 0.911772; +w = 0.029412; +h = 0.039216; +texture = "#(argb,8,8,3)color(0,0,0,0)"; +}; +// +// the loading screen itself +// +class Harrier_loadingScreen +{ +idd = -1; +duration = 10e10; +fadein = 0; +fadeout = 0; +name = "loading screen"; +class controlsBackground +{ +class blackBG : RscText +{ +x = safezoneX; +y = safezoneY; +w = safezoneW; +h = safezoneH; +text = ""; +colorText[] = {0,0,0,0}; +colorBackground[] = {0,0,0,1}; +}; +class nicePic : RscPicture +{ +style = 48 + 0x800; // ST_PICTURE + ST_KEEP_ASPECT_RATIO +x = safezoneX + safezoneW/2 - 0.25; +y = safezoneY + safezoneH/2 - 0.2; +w = 0.5; +h = 0.4; +text = "img\nicePic.paa"; +}; +}; +class controls +{ +class Title1 : RscLoadingText +{ +text = "$STR_LOADING"; // "Loading" text in the middle of the screen +}; +class CA_Progress : RscProgress // progress bar, has to have idc 104 +{ +idc = 104; +type = 8; // CT_PROGRESS +style = 0; // ST_SINGLE +texture = "\ca\ui\data\loadscreen_progressbar_ca.paa"; +}; +class CA_Progress2 : RscProgressNotFreeze // progress bar that will go reverse +{ +idc = 103; +}; +class Name2: RscText // the text on the top-left +{ +idc = 101; +x = 0.05; +y = 0.029412; +w = 0.9; +h = 0.04902; +text = ""; +sizeEx = 0.05; +colorText[] = {0.543,0.5742,0.4102,1.0}; +}; +}; +}; +$/Code$ +%NextNote% +(February 19, 2015) +Based on what Lou Montana has previously said, the simulation does become disabled upon using this command. If you wish to use a delay 'sleep' will not work. The work around would be to use 'uiSleep' +%NextNote% +(November 21, 2015) +In Arma 3 default loading screen has no control do display text. The description of the command now contains information what is needed to create custom loading screen resource. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +step +//KeywordEnd// +DescriptionStart: +Description: +Optionally can set step. If you want to count down, step must be specified, and set negative. Default value is 1. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/step +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +stop +//KeywordEnd// +DescriptionStart: +Stop AI unit. Stopped unit will not be able to move, fire, or change its orientation to follow a watched object. It may still change the stance if deemed appropriate (e.g. under fire). Use disableAI to disable specific AI capabilities. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/stop +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName stop toggle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(January 6, 2011) +This command appears to be local only. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +stopped +//KeywordEnd// +DescriptionStart: +Check if unit is stopped by stop command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/stopped +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +stopped unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +str +//KeywordEnd// +DescriptionStart: +Converts any value into a string by placing " and " around the argument. This command will not parse any escaped " within the string. In order to preserve "", use single quotes: +$Code$ str "string "" string"; //"string " string" - not a valid string +str 'string "" string'; //"string "" string" - a valid string$/Code$ +When used on object, object debug name is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/str +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +str value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +When applied to a unit, this returns the variable name that was assigned to the unit in the editor. For example, if you have created a playable unit with the name 'thePlayer' then you can use 'str player' to return "thePlayer"; +%NextNote% +(April 5, 2012) +When applied to a string, places quotes around it. If it also contains quotes, be careful in how you use it; e.g. including it as part of a string and then compiling it as code won't work. +%NextNote% +(December 5, 2014) +In addition to the note above, if you try to count that string, the added quotations marks are valid characters and will be counted. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +sunOrMoon +//KeywordEnd// +DescriptionStart: +Returns the sun to moon transition state in range 0...1 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/sunOrMoon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +sunOrMoon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 21, 2014) +Note that at a 0.99 value, the twilight is still quite dark. +Can be tested with : +$Code$//test +onEachFrame +{ +systemchat format ["%1",sunOrMoon]; +};$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +supportInfo +//KeywordEnd// +DescriptionStart: +Creates a list of supported operators and type. Each field of array has the format: "x:name" Where x can be: +'t' - type +'n' - null operator +'u' - unary operator +'b' - binary operator. +'name' is the operator or type name (in case operator, type of input operands is included). +mask parameter can be an empty string, or one of field. In this case, function returns empty array, if operator is not included in the list. Limited wildcard support is available. Type x may be replaced with *, meaning all types. For the mask partial match may be used, like abc*, meaning any operators starting with 'abc' are reported, for example: *:name, t:*, t:name* or *:*. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/supportInfo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +supportInfo mask +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 22nd, 2012) +With CBA one can create a list of all available SQF commands in the RPT +[supportInfo ] call cba_fnc_debug; +One can get CBA here. +%NextNote% +(September 24, 2014) +To get the list of all supported commands in Arma 3 one can simply: +$Code${ diag_log _x} forEach supportInfo "";$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +suppressFor +//KeywordEnd// +DescriptionStart: +Force suppressive fire from the unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/suppressFor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit suppressFor duration +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +surfaceIsWater +//KeywordEnd// +DescriptionStart: +Returns whether water is at given position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/surfaceIsWater +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +surfaceIsWater position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(4 May, 2012) +Does not work with inland water. Works only with sea water. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +surfaceNormal +//KeywordEnd// +DescriptionStart: +Returns surface normal on given position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/surfaceNormal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +surfaceNormal position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +surfaceType +//KeywordEnd// +DescriptionStart: +Returns what surface type is at the given position. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/surfaceType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +surfaceType position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 05, 2010) +In ArmA 2 returned value is "#UTGRASS" for natural surface and "#UTCONCRETE" for urban surface. +%NextNote% +(December 16, 2006) +Only seems to return either "#GRASSSOUTH" or "#GRASSGENERAL", even when you're in a building or in water. +%NextNote% +(December 30, 2006) +Another returned value is "#SANDGENERAL". However, when providing an exact [x,y] position the "surfaceType" function seems to return the general surface type of the environment rather than the exact type on that given position. +%NextNote% +(12 Sep 2014) +(A3 1.28) Surface types: +#GdtStratisConcrete +#GdtStratisDryGrass +#GdtStratisGreenGrass +#GdtStratisRocky +#GdtStratisForestPine +#GdtStratisBeach +#GdtStratisDirt +#GdtVRsurface01 +#GdtDirt +#GdtGrassGreen +#GdtGrassDry +#GdtSoil +#GdtThorn +#GdtStony +#GdtConcrete +#GdtMarsh +#GdtBeach +#GdtSeabed +#GdtDead +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +swimInDepth +//KeywordEnd// +DescriptionStart: +Sets the target depth level for swimming soldier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/swimInDepth +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit swimInDepth value +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +switch +//KeywordEnd// +DescriptionStart: +Description: +Checks if the given parameter matches any case. If so, the code block of that case will be executed. After that the switch ends so no further cases will be checked. +If a case has no code block, the code of the next case will automatically be executed. This makes it possible to formulate a logical "or" for cases which otherwise would contain the exact same code. (See example 4 below) +The default block will only be executed if no case matches, no matter at which position inside the switch it is. +switch returns whatever the return value of the case block is. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switch +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +switchableUnits +//KeywordEnd// +DescriptionStart: +Return a list of units accessible through Team Switch. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switchableUnits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +switchableUnits +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(July 06, 2011) +On dedicated server this command returns empty array. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +switchAction +//KeywordEnd// +DescriptionStart: +When used on a person, the given action is started immediately (there is no transition). Use switchmove "" to switch back to the default movement if there is no transition back, otherwise the person may be stuck. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switchAction +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier switchAction action +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +switchCamera +//KeywordEnd// +DescriptionStart: +Switch camera to given vehicle / camera. Mode is one of: +"INTERNAL" : 1st person +"GUNNER" : optics / sights +"EXTERNAL" : 3rd person +"GROUP" : group +"CARGO" : same as "INTERNAL" +If you switch to a unit in a vehicle, this command uses the correct turret. Control over the unit is not given to the player. Use selectPlayer or a combination of switchCamera and remoteControl to achieve this. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switchCamera +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitName switchCamera mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(May 16, 2015) +Force top down view: $Code$cam = "Land_HandyCam_F" createVehicleLocal [0,0,0]; +cam hideObject true ; +cam attachTo [ player, [0,0,10]]; +cam setVectorUp [0,0.99,0.01]; +cam switchCamera "Internal"; +findDisplay 46 displayAddEventHandler ["MouseButtonDown", { +if (_this select 1 == 0) then { +player forceWeaponFire [ currentMuzzle player, currentWeaponMode player ]; +}; +false +}]; +findDisplay 46 displayAddEventHandler ["KeyDown", { +if (_this select 1 in actionKeys "ReloadMagazine") then { +reload player ; +}; +false +}];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +switchGesture +//KeywordEnd// +DescriptionStart: +When used on a person,the given move is started immediately (there is no transition). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switchGesture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier switchGesture moveName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 31, 2010) +Rpt says "Not implemented" as of OA 1.54. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +switchLight +//KeywordEnd// +DescriptionStart: +Controls whether a lamp is lit or not. For working with CfgNonAIVehicles class "StreetLamp" only. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switchLight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +lamp switchLight mode +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(January 23, 2010) +If you want turn street lamp off in ArmA2, the syntax is: +ID959522=position player nearestObject 959522 +ID959522 switchLight "off" +%NextNote% +(September 16, 2013) +In ArmA3 use setHit instead: +$Code$_lamp = nearestObject [ player, "Lamps_base_F"]; +_lamp setHit ["light_1_hitpoint", 0.97]; //off +_lamp setHit ["light_1_hitpoint", 0]; //on$/Code$ +Switch all lights off in the 500 radius of player: +$Code${ +_x setHit ["light_1_hitpoint", 0.97]; +_x setHit ["light_2_hitpoint", 0.97]; +_x setHit ["light_3_hitpoint", 0.97]; +_x setHit ["light_4_hitpoint", 0.97]; +} forEach nearestObjects [ player, [ +"Lamps_base_F", +"PowerLines_base_F", +"PowerLines_Small_base_F" +], 500];$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +switchMove +//KeywordEnd// +DescriptionStart: +When used on a person, the given move is started immediately (there is no transition). Use switchmove "" to switch back to the default movement if there is no transition back, otherwise the person may be stuck. +List of moves in ArmA 2 +List of moves in Armed Assault +List of moves in Operation Flashpoint: Resistance +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/switchMove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +person switchmove movename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(March 25, 2007) +In some cases the movement won't stay. I.e. AI hostages that put their hands behind their heads (_hostage switchMove "AmovPercMstpSsurWnonDnon") won't hold their hands up, unless you first use disableAI "autoTarget" on them. They mostly put their hands down because they 'noticed' unknown objects. +%NextNote% +(August 03, 2008) +This command will not cause an AnimChanged or AnimDone event. However, playMove will. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizedObjects +//KeywordEnd// +DescriptionStart: +Return the list of objects synchronized with the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizedObjects +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +synchronizedObjects unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +command to select the actual vehicle. +This command only returns the synchronized objects when used on intelligent objects such as units or +logic objects. All other objects returns an empty array. +In MP this command returns only values when the object is local. otherwise it returns an empty array. +%NextNote% +(February 26, 2015) +When returning the synchronized objects, they are returned in order of their type: +"Man","Logic","EmptyDetector" +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizedTriggers +//KeywordEnd// +DescriptionStart: +Returns the list of triggers synchronized with a given waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizedTriggers +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +synchronizedTriggers waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizedWaypoints +//KeywordEnd// +DescriptionStart: +Returns the list of waypoints synchronized with a given trigger or waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizedWaypoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +synchronizedWaypoints obj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizeObjectsAdd +//KeywordEnd// +DescriptionStart: +Add given objects to the unit's list of synchronized objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizeObjectsAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit synchronizeObjectsAdd [objects] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizeObjectsRemove +//KeywordEnd// +DescriptionStart: +Remove given objects from the unit's list of synchronized objects. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizeObjectsRemove +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit synchronizeObjectsRemove [objects] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizeTrigger +//KeywordEnd// +DescriptionStart: +Synchronizes the trigger with zero or more waypoints. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizeTrigger +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger synchronizeTrigger [waypoint1, waypoint2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizeWaypoint +//KeywordEnd// +DescriptionStart: +Synchronizes the waypoint with other waypoints. Each waypoint is given as an array [group, index]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizeWaypoint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint synchronizeWaypoint [waypoint1, waypoint2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 31, 2008) +To 'unsynchronize' a waypoint use: Waypoint synchronizeWaypoint [] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +synchronizeWaypoint_trigger +//KeywordEnd// +DescriptionStart: +Synchronizes a trigger with other waypoints. Each waypoint is given as an array [group, index]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/synchronizeWaypoint_trigger +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +trigger synchronizeWaypoint [waypoint1, waypoint2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +systemChat +//KeywordEnd// +DescriptionStart: +Types text to the system radio channel. This function only types text to the list, it does not broadcast the message. If you want the message to show on all computers, you have to execute it on all of them. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/systemChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +systemChat text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +systemOfUnits +//KeywordEnd// +DescriptionStart: +Returns the currently selected system of units. +0: Metric +1: Mixed (ground vehicles use Metric / air vehicles use Imperial) +2: Imperial +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/systemOfUnits +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +systemOfUnits +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tan +//KeywordEnd// +DescriptionStart: +Tangent of x, argument in Degrees. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tan +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tan x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +targetKnowledge +//KeywordEnd// +DescriptionStart: +Returns unit's knowledge about target. The returned array includes information whether the target is +known by group +known by the unit +last time the target was seen by the unit +last time the target endangered the unit +target side +position error +target position +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/targetKnowledge +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit targetKnowledge target +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +targetsAggregate +//KeywordEnd// +DescriptionStart: +Aggregate candidates. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/targetsAggregate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +[speaker, side, unit, place, time] targetsAggregate candidates +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +targetsQuery +//KeywordEnd// +DescriptionStart: +Returns sorted array of targets, known to the enquirer (including own troops), where the accuracy coefficient reflects how close the result matches the query. This command could be CPU intensive. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/targetsQuery +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +enquirer targetsQuery [targetIgnore, targetSide, targetType, targetPosition, targetMaxAge] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskAlwaysVisible +//KeywordEnd// +DescriptionStart: +Returns true if the task is flagged to be always visible or false if not. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskAlwaysVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskAlwaysVisible task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskChildren +//KeywordEnd// +DescriptionStart: +Return the child tasks of the specified task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskChildren +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskChildren task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskCompleted +//KeywordEnd// +DescriptionStart: +Return if task is completed. (state Succeeded, Failed or Canceled) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskCompleted +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskCompleted task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskCustomData +//KeywordEnd// +DescriptionStart: +Returns custom data attached to the local task or an empty array if there are no custom data attached. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskCustomData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskCustomData task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskDescription +//KeywordEnd// +DescriptionStart: +Returns the sub-parts of the task description. The returned Array is in format [Task description, Task title, Task waypoint description]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskDescription +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskDescription task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(November 14, 2014) +Be careful if you want to use this to retrieve the title of a task. +If the task has no description set, then "taskDescription" will only return an array of empty Strings. +Therefor always use setSimpleTaskDescription directly after creating a new task, even if you set the Description to "". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskDestination +//KeywordEnd// +DescriptionStart: +Returns the position of the task (as specified by destination parameter in config). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskDestination +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskDestination task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskHint +//KeywordEnd// +DescriptionStart: +Shows info about new, changed or failed task. The text can contain several lines. \n is used to indicate the end of a line. +To maintain Arma 3 visual style, it's recommended to use BIS_fnc_showNotification instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskHint +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskHint [hintText, [r, g, b, a], icon] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +Here are the BIS colors: +$Code$ +taskHint ["New Task!\nHere's your new task!", [1, 1, 1, 1], "taskNew"]; +taskHint ["Task Assigned!\nDo this now!", [1, 1, 1, 1], "taskCurrent"]; +taskHint ["Task Succeeded!\nGood job!", [0.600000,0.839215,0.466666,1], "taskDone"]; +taskHint ["Task Failed!\nBad job!", [0.972549,0.121568,0,1], "taskFailed"]; +taskHint ["Task Canceled!\nNever mind!", [0.75,0.75,0.75,1], "taskFailed"]; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskNull +//KeywordEnd// +DescriptionStart: +A non-existing Task. To compare non-existent tasks use isNull or isEqualTo : +taskNull == taskNull ; // false +isNull taskNull ; // true +taskNull isEqualTo taskNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskParent +//KeywordEnd// +DescriptionStart: +Return the parent task of the specified task. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskParent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskParent task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskResult +//KeywordEnd// +DescriptionStart: +Send a result of the task to the task sender. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskResult +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskResult task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskState +//KeywordEnd// +DescriptionStart: +Returns the current state of a task. +Possible return values are: +None +Created +Assigned +Succeeded +Failed +Canceled +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskState task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +taskType +//KeywordEnd// +DescriptionStart: +Returns the type of the given task +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/taskType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +taskType task +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teamMember +//KeywordEnd// +DescriptionStart: +Return an agent for given person. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teamMember +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember person +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teamMemberNull +//KeywordEnd// +DescriptionStart: +A non-existent Team Member. To compare non-existent team members use isNull or isEqualTo : +teamMemberNull == teamMemberNull ; // false +isNull teamMemberNull ; // true +teamMemberNull isEqualTo teamMemberNull ; // true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teamMemberNull +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMemberNull +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teamName +//KeywordEnd// +DescriptionStart: +Return a name of given team. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teamName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamName team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teams +//KeywordEnd// +DescriptionStart: +Return a list of teams in the current mission. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teams +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teams +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teamSwitch +//KeywordEnd// +DescriptionStart: +Invoke the Team Switch dialog (force it even when conditions are not met). There has to be at least one playable unit for team switch to work, and for this command to work in MP, respawn type in description.ext should be 5 (SIDE) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teamSwitch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamSwitch +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(May 13, 2015) +To get a unit back to it's normal AI behaviour after using team switch, simply use this code on the unit: +$Code$_unit enableAI "TEAMSWITCH";$/Code$ +(Tested in Arma 3 1.44) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teamSwitchEnabled +//KeywordEnd// +DescriptionStart: +Check if Team Switch is currently enabled. +Team Switch is enabled by default. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teamSwitchEnabled +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamSwitchEnabled +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +teamType +//KeywordEnd// +DescriptionStart: +Returns a type of given team. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/teamType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamType team +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +terminate +//KeywordEnd// +DescriptionStart: +Terminate (abort) spawned or execVM 'd script. Note : The given script will not terminate immediately upon terminate command execution, it will do so the next time the script is processed by the scheduler. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/terminate +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +terminate scriptHandle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +terrainIntersect +//KeywordEnd// +DescriptionStart: +Checks for intersection of terrain between two positions. Returns true if intersects with terrain. Uses PositionAGL +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/terrainIntersect +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +terrainIntersect [pos1, pos2] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(may 31, 2012) +Please note the difference : +terrainIntersect +terrainIntersectASL +lineIntersect s +lineIntersect s With +lineIntersect s Objs +intersect +%NextNote% +(may 31, 2012) +This command is CPU intensive on the engine, be careful with its use. +%NextNote% +(Jun 23, 2012) +This command was changed to ATL and counterpart for ASL was added in build 94049. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +terrainIntersectASL +//KeywordEnd// +DescriptionStart: +Checks for intersection of terrain between two positions. Returns true if intersects with terrain. Uses PositionASL +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/terrainIntersectASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +terrainIntersectASL [pos1, pos2] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(may 31, 2012) +Please note the difference : +terrainIntersect +terrainIntersectASL +lineIntersect s +lineIntersect s With +lineIntersect s Objs +intersect +%NextNote% +(may 31, 2012) +This command is CPU intensive on the engine, be careful with its use. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +text +//KeywordEnd// +DescriptionStart: +Creates a structured text containing the given plain text. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/text +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +text param +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +text_location +//KeywordEnd// +DescriptionStart: +Returns a location's text value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/text_location +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +text location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +textLog +//KeywordEnd// +DescriptionStart: +Dump argument value to debugging output. +Note : This command is non-functional in the retail version. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/textLog +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +textLog anything +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +textLogFormat +//KeywordEnd// +DescriptionStart: +Debugging output. This command is non-functional in the retail version. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/textLogFormat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +textLogFormat [format, arg1, arg2,...] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tg +//KeywordEnd// +DescriptionStart: +Identical to tan +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tg +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tg x +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +then +//KeywordEnd// +DescriptionStart: +Description: +First or second element of array is executed depending on result of if condition. Result of the expression executed is returned as a result (result may be Nothing ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/then +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +throw +//KeywordEnd// +DescriptionStart: +Throws an exception. The exception is processed by first catch block. +NOTE : Avoid using alternative shorthand syntax if you are planning on preparing your exception information dynamically, as it will have to be generated first regardless of the condition of the if statement before it, as shown in example 3. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/throw +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +throw expression +%NextRawSyntax% +if +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +time +//KeywordEnd// +DescriptionStart: +Returns time elapsed since mission started (in seconds). The value is different on each client. If you need unified time, use serverTime. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/time +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +time +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Not to be confused with _time. Within a script, the reserved local variable _time returns the time elapsed since the script started running. Note that the value of time is not saved when the mission is saved and so will be reset to zero when a mission is restarted from a saved position. The value of _time is saved correctly and will resume from where it was. +_time has only special meaning in SQS scripts, in SQF script it is just another variable. -- Killzone_Kid +%NextNote% +(January 5, 2007) +Notes from before the conversion: +time works properly in sqf called with execVM command. In an other hand, _time does not works in sqf called with execVM command.(Arma v1.02.5103GER) +%NextNote% +(October 02, 2010) +On overloaded servers (below ~10 server FPS), time readings are unreliable. Seconds actually take longer. While the clients keep a steady tempo, server time lags behind, resulting in considerable offset between client and server time (easily 30 minutes for a 2 hour game). Client time is synchronised to server time during JIP, but other than that it runs independently. +%NextNote% +(30 Oct 2013) +Arma 3 JIP bug: +As of Arma 3 v1.02, for JIP clients 'time' value will start off counting from 0, not the real 'time' value. After about 2.5sec (on average), it will then jump to a high value and synchronise with the real 'time' value, which could be 900, for example. +Therefore, do not use 'time' for any start of mission init timeouts; it's unreliable. (It's odd that it doesn't synchronise at the same time as public variables.) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +timeMultiplier +//KeywordEnd// +DescriptionStart: +Returns the value set with setTimeMultiplier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/timeMultiplier +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +timeMultiplier +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +titleCut +//KeywordEnd// +DescriptionStart: +this command was obsoleted, use cutText instead. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/titleCut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +titleCut [text, type, speed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +titleFadeOut +//KeywordEnd// +DescriptionStart: +Terminate the title effect and set duration of the fade out phase to the given time. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/titleFadeOut +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +titleFadeOut duration +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +titleObj +//KeywordEnd// +DescriptionStart: +Shows object defined in global config in CfgTitles. Type may be one of: +"PLAIN" +"PLAIN DOWN" +"BLACK" +"BLACK FADED" +"BLACK OUT" +"BLACK IN" +"WHITE OUT" +"WHITE IN" +See Title Effect Type for more information about these types. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/titleObj +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +titleObj [class, type, speed, showOnMap] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +titleRsc +//KeywordEnd// +DescriptionStart: +Resource title - Resource can be defined in Description.ext Also see cutRsc, with these two commands you can show two different resources at once. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/titleRsc +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +titleRsc [text, type, speed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(30 Jun, 2008) +Using titleRsc (unlike cutRsc ) for a HUD will mean: +the HUD will remain visible when you access the map and overlay it. +using the 'Direct communication' chat channel messages will interfere with the HUD by hiding it, since it appears to use the same 'resource layer'. +%NextNote% +(September 25, 2014) +In OFP/CWA any x Rsc will hide all the elements of the HUD, including the map. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +titleText +//KeywordEnd// +DescriptionStart: +Displays text across the screen. +If used along with cutText two different texts (in different type styles) can be shown at once. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/titleText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +titleText [text, type, speed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / local +//LocalityEnd// +NoteStart: +(November 21, 2014) +The third parameter or 'speed', as it's called in the description, refers to the amount of time the message will be shown on-screen. Multiply each number by 10 to get the number of seconds it will be shown. You can even use floats as input, like 0.1, to show a message for only 1 second. +Note : Calculating the time with that method does not include the time it takes to fade in/out, which is about 1 second unless you use numbers lower than 1. +Note : Using anything lower than 0.001 seems to have no effect, or the effect is so little it's negligible. +(A3 1.34.128075) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +to +//KeywordEnd// +DescriptionStart: +Description: +Continue sequence of 'for' command. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/to +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +toArray +//KeywordEnd// +DescriptionStart: +Converts the supplied String into an Array of Numbers. +The numbers in the created array are the decimal Unicode representations of characters. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/toArray +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +toArray string +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +toLower +//KeywordEnd// +DescriptionStart: +Converts the supplied string to all lowercase characters. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/toLower +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +toLower string +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +toString +//KeywordEnd// +DescriptionStart: +Converts the supplied Array of Numbers into a String. +The numbers in the array to be converted are the decimal Unicode representations of characters. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/toString +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +toString array +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 10, 2015) +Tabs and new lines can be created with toString [9] and toString [10], respectively. Alternatively, a new line can also be created with toString [92,110] ("\n"). If you save these strings into a variable, they can be manipulated like any other string. For example, the following code will work just fine and return the expected output: +$Code$_tab = toString [9]; +for "_i" from 0 to 3 do +{ +_tab = _tab + ( toString [9]); +}; +copyToClipboard format ["x%1x",tab];$/Code$ +%NextNote% +(August 25, 2015) +While you can convert any String to Array with toArray command, only numbers from 1 to 55295 (not 65535 as expected) can be successfully converted to String with toString and then back to Array with toArray without loss of data. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +toUpper +//KeywordEnd// +DescriptionStart: +Converts the supplied string to all uppercase characters. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/toUpper +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +toUpper string +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerActivated +//KeywordEnd// +DescriptionStart: +Returns true if the trigger has been activated. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerActivated +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerActivated trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +If trigger already activated at least once, triggerActivated will only return false if trigger is set to activate Repeatedly. +In other words, a trigger set to activate Once will always return true once activated at least once (even if trigger is no longer activated). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerActivation +//KeywordEnd// +DescriptionStart: +Returns trigger activation in the form [by, type, repeating]. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerActivation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerActivation trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerArea +//KeywordEnd// +DescriptionStart: +Returns currently monitored trigger area. The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +NOTE : Since Arma 3 v1.59.135137, triggerArea returns 3rd dimension for the monitored area. If height is not set, the value for it would be -1; +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerArea +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerArea trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerAttachedVehicle +//KeywordEnd// +DescriptionStart: +Returns vehicle attached to the trigger (for example using triggerAttachVehicle ). +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerAttachedVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerAttachedVehicle trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerAttachObject +//KeywordEnd// +DescriptionStart: +Assigns a static object to the trigger. The activation source is changed to "STATIC". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerAttachObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerName triggerAttachObject objectId +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 31, 2013) +This command doesn't quite work in Arma 3 [1] +Further investigation reveals that objectId param for this command is some kind of map id and not the id you can see in the editor. This map id could be seen in multiplayer when looking at netId of the static objects, for example "1:-23984219837", the -23984219837 would be the objectId. Unfortunately it still doesn't work. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerAttachVehicle +//KeywordEnd// +DescriptionStart: +Specifies the entity which will activate the selected trigger. +If [] is given, the trigger is decoupled from the assigned vehicle (example 2). +If the activation source is "VEHICLE", "GROUP", "LEADER" or "MEMBER", it's changed to "NONE". +If [vehicle] is given, the trigger is coupled to the vehicle or its group. +When the source is "GROUP", "LEADER" or "MEMBER", it's coupled to the group, otherwise it's coupled to the vehicle and the source is changed to "VEHICLE". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerAttachVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerName triggerAttachVehicle objects +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerStatements +//KeywordEnd// +DescriptionStart: +Returns trigger statements in the form [cond, activ, desactiv]. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerStatements +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerStatements trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerText +//KeywordEnd// +DescriptionStart: +Returns trigger text. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerText trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerTimeout +//KeywordEnd// +DescriptionStart: +Returns trigger timeout in the form [min, mid, max, interruptable]. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerTimeout +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerTimeout trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerTimeoutCurrent +//KeywordEnd// +DescriptionStart: +Returns trigger timeout or -1 if countdown is not in progress. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerTimeoutCurrent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerTimeoutCurrent trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(November 26, 2013) +Triggers have their own schedule. If you create a trigger with timeout and try to read triggerTimeoutCurrent immediately it will return -1. This is because the countdown will not start until the next scheduled trigger check is due, and this could take up to 0.5 seconds. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +triggerType +//KeywordEnd// +DescriptionStart: +Returns trigger type. +Note: The trigger could be local or remote but the result returned by this command will be for the trigger condition set up locally on the client that executed the command. See createTrigger for more info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/triggerType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +triggerType trigger +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(July 15, 2009) +Arma 2 v. 1.02: +triggerType _triggername gives null string as result for "GUARDED BY EAST" / "GUARDED BY WEST" type triggers. +Expected result was "WEST G" / "EAST G" :( +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +true +//KeywordEnd// +DescriptionStart: +Always true +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/true +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +true +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +try +//KeywordEnd// +DescriptionStart: +Defines a try-catch structure. This sets up an exception handling block. Any thrown exception in a try block is caught in a catch block. The structured exception block has following form: +$Code$ try //begin of try-catch block +{ //block, that can throw exception } +catch +{ //block, that process an exception. Exception is described in _exception variable };$/Code$ +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/try +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +try code +%NextRawSyntax% +args try code +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 9, 2015) +Do not expect this behave like Javascript try catch and ignore all errors. But it does have one useful behaviour. Normally when runtime error occurs in SQF (unlike when there is compile error) it continues to execute till the end. But if the script is placed in try {} scope and throw is used upon error, the script immediately terminates, exits the try {} scope and enters catch {} scope. This way it is possible to process possible exceptions in civilised manner. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +turretLocal +//KeywordEnd// +DescriptionStart: +Checks if a turret is local. +Some info on turrets: A vehicle turret will change locality when player gunner gets in it, just like vehicle changes locality when player driver gets in it. Many commands for turrets work only where turret is local. When gunner leaves turret it is supposed to change locality to the locality of the vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/turretLocal +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle turretLocal turretPath +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +turretOwner +//KeywordEnd// +DescriptionStart: +Returns id of the owner of the turret. On clients always returns 0. +Some info on turrets: A vehicle turret will change locality when player gunner gets in it, just like vehicle changes locality when player driver gets in it. Many commands for turrets work only where turret is local. When gunner leaves turret it is supposed to change locality to the locality of the vehicle. A vehicle can have one owner while turrets have different owners. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/turretOwner +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle turretOwner turretPath +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +turretUnit +//KeywordEnd// +DescriptionStart: +Returns the unit in the vehicle turret. Driver turret [-1] is supported since Arma 3 v1.57.135045 +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/turretUnit +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle turretUnit turretpath +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvAdd +//KeywordEnd// +DescriptionStart: +Adds an item with given text to Tree View with given idc under specified path (zero based). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvAdd [idc, path, text] +%NextRawSyntax% +control tvAdd [path, text] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvClear +//KeywordEnd// +DescriptionStart: +Removes all items from Tree View with given idc. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvClear +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvClear idc +%NextRawSyntax% +tvClear control +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvCollapse +//KeywordEnd// +DescriptionStart: +Collapses tree item pointed to by the path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvCollapse +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvCollapse [idc, [path]] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvCount +//KeywordEnd// +DescriptionStart: +Returns childrens count of item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvCount +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvCount [idc, [path]] +%NextRawSyntax% +_ctrl tvCount [path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvCurSel +//KeywordEnd// +DescriptionStart: +Returns path to currently selected item. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvCurSel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvCurSel idc +%NextRawSyntax% +tvCurSel _ctrl +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command fmily overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvData +//KeywordEnd// +DescriptionStart: +Returns string data from item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvData [idc, [path]] +%NextRawSyntax% +control tvData [path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvDelete +//KeywordEnd// +DescriptionStart: +Removes an item on given path from Tree View with given idc. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvDelete +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvDelete [idc, [path]] +%NextRawSyntax% +_ctrl tvDelete [path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command fmily overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvExpand +//KeywordEnd// +DescriptionStart: +Expands tree item pointed to by the path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvExpand +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvExpand [idc, [path]] +%NextRawSyntax% +_ctrl tvExpand [path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvPicture +//KeywordEnd// +DescriptionStart: +Returns name of picture from item pointed to by path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvPicture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvPicture [idc, [path]] +%NextRawSyntax% +_ctrl tvPicture [path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetCurSel +//KeywordEnd// +DescriptionStart: +Sets cursor to given item on given path. IDC means id of parent Tree View. To deselect all items use [-1] for the path param ( available since Arma 3 v1.55.133898 ) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetCurSel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetCurSel [idc, path] +%NextRawSyntax% +control tvSetCurSel path +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [[],"Parent_A"]; +_CT_TREE tvAdd [[0],"Child_A"]; +_CT_TREE tvAdd [[0,0],"Grandchild_A"]; +_CT_TREE tvAdd [[],"Parent_B"]; +_CT_TREE tvAdd [[1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetData +//KeywordEnd// +DescriptionStart: +Sets string data to item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetData +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetData [idc, [path], data] +%NextRawSyntax% +_ctrl tvSetData [ [path], data] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetPicture +//KeywordEnd// +DescriptionStart: +Sets picture to item selected by path. IDC means id of parent Tree View. Name is picture name. The picture is searched in the mission directory. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetPicture +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetPicture [idc, path, name] +%NextRawSyntax% +control tvSetPicture [path, name] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetPictureColor +//KeywordEnd// +DescriptionStart: +Sets the colour of the picture (set via tvSetPicture ) under the specified tree view path. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetPictureColor +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetPictureColor [idc, path, color] +%NextRawSyntax% +ctrl tvSetPictureColor [path, color] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetText +//KeywordEnd// +DescriptionStart: +Sets string text to item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetText [idc, path, text] +%NextRawSyntax% +control tvSetText [path, text] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetTooltip +//KeywordEnd// +DescriptionStart: +Sets the tooltip associated with the specified tree view path. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetTooltip +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetTooltip [idc, path, text] +%NextRawSyntax% +ctrl tvSetTooltip [path, text] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSetValue +//KeywordEnd// +DescriptionStart: +Sets scalar data to item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSetValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvSetValue [idc, [path], val] +%NextRawSyntax% +_ctrl tvSetValue [ [path], val] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(September 11, 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSort +//KeywordEnd// +DescriptionStart: +Sorts childrens of given item by item name ( tvText ). IDC means id of parent Tree View. +Param reversed is optional. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSort +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +_ctrl tvSort [ [path], reversed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvSortByValue +//KeywordEnd// +DescriptionStart: +Sorts children of given item by value from highest to lowest. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvSortByValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +_ctrl tvSortByValue [ [path], reversed] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +%NextNote% +(May 24, 2015) +Seems to only affect sorting of parent tree (path []) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvText +//KeywordEnd// +DescriptionStart: +Returns shown text in the item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvText [idc, path] +%NextRawSyntax% +control tvText path +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +tvValue +//KeywordEnd// +DescriptionStart: +Returns scalar data from item on given path. IDC means id of parent Tree View. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/tvValue +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +tvValue [idc, [path]] +%NextRawSyntax% +_ctrl tvValue [path] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / local +//LocalityEnd// +NoteStart: +(Sep 11 2014) +(A3 1.28)tv command family overview +$Code$ +//tv command family available for CT_TREE (type 12) +private ["_count","_current","_data","_text","_value","_pic"]; +_CT_TREE tvAdd [ [],"Parent_A"]; +_CT_TREE tvAdd [ [0],"Child_A"]; +_CT_TREE tvAdd [ [0,0],"Grandchild_A"]; +_CT_TREE tvAdd [ [],"Parent_B"]; +_CT_TREE tvAdd [ [1],"Child_B"]; +_count = _CT_TREE tvCount []; //return 2 +_CT_TREE tvSetCurSel [0,0,0]; //select grandchild_A +_current = tvCurSel _CT_TREE; //return [0,0,0] +_CT_TREE tvSetData [_current,"I'm grandchild_A"]; +_data = _CT_TREE tvData _current; // "I'm grandchild_A" +_text = _CT_TREE tvText _current; //"Grandchild_A" +_CT_TREE tvSetValue [_current,14]; +_value = _CT_TREE tvValue _current; // 14 +_CT_TREE tvSetPicture [_current, getText ( configFile "CfgWeapons" "optic_NVS" "picture")]; +_pic = _CT_TREE tvPicture _current; +_CT_TREE tvExpand [1]; +_CT_TREE tvSort [[], false ]; +_CT_TREE tvSortByValue [[], false ]; +_CT_TREE tvDelete [0,0]; //remove child_b +tvClear 12; +_CT_TREE tvCollapse []; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +type +//KeywordEnd// +DescriptionStart: +Returns a string of a location's class name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/type +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +type location +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +typeName +//KeywordEnd// +DescriptionStart: +Returns the data type of an expression. +The type is returned as on of the following all-uppercase strings: +" ARRAY " +" BOOL " +" CODE " +" CONFIG " +" CONTROL " +" DISPLAY " +" GROUP " +" LOCATION " +" OBJECT " +" SCALAR " +" SCRIPT " +" SIDE " +" STRING " +" TEXT " +" TEAM_MEMBER " +" NAMESPACE " +They represent the available data types in ArmA. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/typeName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +typeName anything +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +typeOf +//KeywordEnd// +DescriptionStart: +Returns the class name of a given object. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/typeOf +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +typeOf vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 4, 2006) +(CWR 1.90)Try using this on an object pre-placed in the mission editor (such as a house): hint format ["%1", typeOf object xxx] Now place an object in the editor, save the map, and open up the Mission.sqm. Find the line: vehicle = "XXX", and replace XXX with the name of the object that you found above. Save it, and load the map. (this method is no longer available since ArmA) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +UAVControl +//KeywordEnd// +DescriptionStart: +Get array with unit connected to vehicle and position in that vehicle. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/UAVControl +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +UAVControl uav +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +uiNamespace +//KeywordEnd// +DescriptionStart: +Returns the global namespace attached to user interface. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/uiNamespace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uiNamespace +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +variables in uiNamespace are not lost between mission changes, they are carried over. Also take note that the server can make use of uiNamespace. +%NextNote% +(29 September, 2014) +^The same can be said with parsingNamespace. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +uiSleep +//KeywordEnd// +DescriptionStart: +Suspend execution of script for given uitime. uiSleep is a sleep method to delay script execution where script time/simulation time is stopped. uiSleep is basically using the system time (uiTime more specifically) and not simulation time. So in the cases where sleep command would get stuck indefinitely, uiSleep can still be used to effectively delay script execution. For example in a mission briefing or an editor or when simulation is paused in general. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/uiSleep +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uiSleep delay +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 28, 2016) +If the game is paused in SP (via ESC) the sleep command will stop working, to prevent that use uiSleep. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unassignCurator +//KeywordEnd// +DescriptionStart: +Unassign curator (will destroy both sides of connection). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unassignCurator +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unassignCurator curatorObj +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +This scripting command must be executed on the server to work properly in multiplayer +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unassignItem +//KeywordEnd// +DescriptionStart: +Unassigns existing item and tries to put it into inventory. If there is no space in inventory the item simply disappears. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unassignItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit unassignItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unassignTeam +//KeywordEnd// +DescriptionStart: +Unassigns the unit (in the case of a vehicle its commander unit) from his team. This is equal to unit assignTeam "MAIN". +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unassignTeam +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unassignTeam vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unassignVehicle +//KeywordEnd// +DescriptionStart: +Unassigns individual unit from a vehicle, i.e removes assignedVehicleRole of the unit. If the unit is currently in that vehicle, the group leader will issue an order to disembark. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unassignVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unassignVehicle unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +local / global +//LocalityEnd// +NoteStart: +(August 4, 2006) +Notes from before the conversion: +Even though: +{unassignVehicle _x} forEach crew vehiclename +will make all the occupants of a vehicle disembark, if they are the original crew of the vehicle then they will just get back in again. +To prevent this happening also use allowGetIn as in the example below: +{unassignVehicle _x} forEach crew vehiclename; crew vehiclename allowGetIn false +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +underwater +//KeywordEnd// +DescriptionStart: +Return whether object is fully underwater. Works as intended only on objects, not units. For units it returns "isSwimming" and not "underwater" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/underwater +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +underwater object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 21, 2014) +This command name is MISLEADING. It returns true when player is in swimming position and false otherwise. Player can be standing fully underwater and this command would return false or swimming with head above water and this command would return true. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +uniform +//KeywordEnd// +DescriptionStart: +Returns name of uniform. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/uniform +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uniform unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +uniformContainer +//KeywordEnd// +DescriptionStart: +Returns a cargo container of a unit's uniform. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/uniformContainer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uniformContainer unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +uniformItems +//KeywordEnd// +DescriptionStart: +Get array with all items (of any kind, even weapons) from uniform. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/uniformItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uniformItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +uniformMagazines +//KeywordEnd// +DescriptionStart: +Get array with all magazines from uniform of the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/uniformMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +uniformMagazines unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unitAddons +//KeywordEnd// +DescriptionStart: +Returns list with addons the unit belongs to. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unitAddons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitAddons className +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Mar 31, 2014) +1. (A3 1.14) Old BIS function BIS_fnc_unitAddon has been deprecated, please always use unitAddons instead. +$Code$ hint str ([player] call BIS_fnc_unitAddon ) // same as unitAddons ( typeOf player )$/Code$ +2. To return the addon that a weapon belongs to, use BIS_fnc_weaponAddon instead. E.g. +$Code$ +(( primaryWeapon player ) call BIS_fnc_weaponAddon ); //return: "A3_Weapons_F_Rifles_Khaybar" +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unitBackpack +//KeywordEnd// +DescriptionStart: +Returns unit's backpack +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unitBackpack +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitBackpack unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(Apr 29, 2014) +In ArmA3 ver 1.16, we can use either backpackContainer or unitBackpack at present since both of them enjoy same operand type and return value. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unitPos +//KeywordEnd// +DescriptionStart: +Return the unit position rules. +The return value is always "Auto" unless the unit has gotten a setUnitPos command. In that case the value is the last stance the unit was ordered to. +Available modes are listed at setUnitPos. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unitPos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitPos unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unitReady +//KeywordEnd// +DescriptionStart: +Check if the unit is ready. Unit is busy when it is given some command like move, until the command is finished. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unitReady +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitReady unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 26, 2010) +Keep in mind that a) dead units are unitReady and b) that it takes a while until it get's known to group members that a unit is not alive anymore, which leads to c) the current leader of a group might be actually dead (until another group member takes command). +Why this is important? I'll give you an example: if you're using unitReady as a condition inside one of your fsm to advance whatever the fsm/group is doing, you really might wanna check that this unit is actually still alive. Otherwise you might end up with really fast and nasty loops in your fsm, eventually accompanied by a stream of radio commands that will last until finally a living leader is in command again.. and that could take a while... nasty, I tell you :) +%NextNote% +Regarding vehicles, there is only one single unit (from the vehicle crew) whose unitReady-status is affected by giving that vehicle (or that unit) commands. While it's the driver unit for a truck, it is the gunner unit for a mg-jeep or the commander for a tank. Generally it's always the unit "in control" of the vehicle. (because it's only that unit, that is seen as "full unit" to the "outside world". Only he can be adressed with commands.) +In consequence you can't just send vehicles around and check if they've arrived with something like: +waitUntil{(unitReady (driver _vehicle))}; // don't do this! +Because it's not guaranteed, that the driver is in command of the vehicle and only that unit will have it's unitReady status affected. +So in conclusion, if you need to check if a vehicle is ready, try something like this: _vehicleReady = { +private [ _veh, _ready ]; +_veh = _this; +_ready = true; +{ +if (!(isNull _x)) then +{ +_ready = _ready (unitReady _x); +}; +} forEach [ +(commander _veh), +(gunner _veh), +(driver _veh) +]; +_ready +}; +%NextNote% +(November 21, 2015) +To check readiness of a vehicle, don't check it's crew, driver, gunner, commander, etc., but the vehicle itself, e.g.: +$Code$unitReady (vehicle driver _YourVehicle);$/Code$ +Only tested 11/21/2015 by me with A2 1.63.131129 and A3 1.52.132676 but possibly true since 1964. :P +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unitRecoilCoefficient +//KeywordEnd// +DescriptionStart: +Returns recoil coefficient of a soldier. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unitRecoilCoefficient +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unitRecoilCoefficient soldier +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 7, 2013) +If the unit doesn't exist / is null, -1 is returned. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +units +//KeywordEnd// +DescriptionStart: +Returns an array with all the units in the group or group of the unit. For a destroyed object an empty array is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/units +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +units groupOrunit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 24, 2009) +The returned array on MP clients is not updated when team members die (only when they are deleted). ( Tested on VBS2 ) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unitsBelowHeight +//KeywordEnd// +DescriptionStart: +Returns units in group/array below given height Above The Land (ATL). Current unit height ATL could be found with +_height = ( getPosATL _unit) select 2; +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unitsBelowHeight +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +units unitsBelowHeight height +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(Nov 12, 2009) +the height is calculated above terrain level (ATL), not water level or building level. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unlinkItem +//KeywordEnd// +DescriptionStart: +Unassign and delete existing item from its assigned slot. If item does not exist or is not in the assigned slot, command simply fails. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unlinkItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit unlinkItem item +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / global +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unlockAchievement +//KeywordEnd// +DescriptionStart: +Unlock the given achievement. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unlockAchievement +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unlockAchievement name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 10, 2016) +This is an obsolete command used in the experimental Arma 2 Xbox 360 version. +https://forums.bistudio.com/topic/187873-unlockachievment-command/ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +unregisterTask +//KeywordEnd// +DescriptionStart: +Unregister a task type. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/unregisterTask +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +teamMember unregisterTask name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +updateDrawIcon +//KeywordEnd// +DescriptionStart: +Updates the icon to be shown in 2D editor for the specified editor,object. If maintain size is false,icon will not scale depending on the,scale of the map. If maintain size is a number,the icon will maintain,size if map scale is below that number. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/updateDrawIcon +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map updateDrawIcon [object,string identifier,color,offset,width,height,maintain size?,angle,shadow] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +updateMenuItem +//KeywordEnd// +DescriptionStart: +Sets the text and command for the menu item. index is index as returned from addMenuItem command. command is optional. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/updateMenuItem +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +map updateMenuItem [menu item index,text,command] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +updateObjectTree +//KeywordEnd// +DescriptionStart: +Update the editor object tree. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/updateObjectTree +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +updateObjectTree map +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +useAudioTimeForMoves +//KeywordEnd// +DescriptionStart: +Switch between elapsed game time and audio time being used as animation timer. Used for audio/animation synchronization. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/useAudioTimeForMoves +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +soldier useAudioTimeForMoves toggle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorAdd +//KeywordEnd// +DescriptionStart: +Adds two 3D vectors. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorAdd +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorAdd vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = [x1 + x2,y1 + y2,z1 + z2;] +$/Code$ +It is recommended to use vectorAdd instead of BIS_fnc_vectorAdd. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorCos +//KeywordEnd// +DescriptionStart: +Cosine of angle between two 3D vectors. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorCos +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorCos vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = ((x1 * x2) + (y1 * y2) + (z1 * z2))/(( sqrt (x1 ^ 2 + y1 ^ 2 + z1 ^ 2))*( sqrt (x2 ^ 2 + y2 ^ 2 + z2 ^ 2))) +$/Code$ +Given two vectors of attributes, A and B, the cosine similarity, cos(θ), is represented using a dot product and magnitude. The resulting similarity values indicating intermediate similarity or dissimilarity between two vectors. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorCrossProduct +//KeywordEnd// +DescriptionStart: +Cross product of two 3D vectors. +In layman's terms, if you have a polygon (surface) defined by 3 points, you can find a normal to it (just like terrain surfaceNormal ). To invert direction of the normal, swap arguments around. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorCrossProduct +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorCrossProduct vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = [(y1 * z2) – (z1 * y2),(z1 * x2) – (x1 * z2),(x1 * y2) – (y1 * x2)]; +$/Code$ +It is recommended to use vectorCrossProduct instead of BIS_fnc_crossProduct. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorDiff +//KeywordEnd// +DescriptionStart: +Subtracts one 3D vector from another. (vector1 - vector2) +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorDiff +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorDiff vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = [x1 – x2,y1 – y2,z1 – z2;] +$/Code$ +It is recommended to use vectorDiff instead of BIS_fnc_vectorDiff. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorDir +//KeywordEnd// +DescriptionStart: +Return object's normalized direction vector in world space ( [x,y,z] ). +A unit facing North would return [0,1,0] +A unit facing East would return [1,0,0] +A unit facing South would return [0,-1,0] +A unit facing West would return [-1,0,0] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorDir objectName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorDirVisual +//KeywordEnd// +DescriptionStart: +Return object's normalized direction vector in world space ( [x,y,z] ) in render time scope. +A unit facing North would return [0,1,0] +A unit facing East would return [1,0,0] +A unit facing South would return [0,-1,0] +A unit facing West would return [-1,0,0] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorDirVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorDirVisual objectName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorDistance +//KeywordEnd// +DescriptionStart: +Distance between two 3D vectors. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorDistance vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = sqrt ((x2 - x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2); +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorDistanceSqr +//KeywordEnd// +DescriptionStart: +Squared distance between two 3D vectors. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorDistanceSqr +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorDistanceSqr vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = (x2 - x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorDotProduct +//KeywordEnd// +DescriptionStart: +Dot product of two 3D vectors. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorDotProduct +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorDotProduct vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = (x1 * x2) + (y1 * y2) + (z1 * z2) +$/Code$ +It is recommended to use vectorDotProduct instead of BIS_fnc_dotProduct. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorFromTo +//KeywordEnd// +DescriptionStart: +Unit vector, equal to direction from vector1 to vector2. In other words this command produces vectorNormalized between given 2 points. To get a normal vector use vectorDiff. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorFromTo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector1 vectorFromTo vector2 +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(19 Jul, 2014) +(ArmA3 1.26) Algorithm: +$Code$ +Vector1 = [x1,y1,z1]; Vector2 = [x2,y2,z2]; +Result = [(x1 – x2)/( sqrt ((x1 – x2) ^ 2 + (y1 – y2) ^ 2 + (z1 – z2) ^ 2)), +(y1 – y2)/( sqrt ((x1 – x2) ^ 2 + (y1 – y2) ^ 2 + (z1 – z2) ^ 2)), +(z1 – z2)/( sqrt ((x1 – x2) ^ 2 + (y1 – y2) ^ 2 + (z1 – z2) ^ 2))]; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorMagnitude +//KeywordEnd// +DescriptionStart: +Magnitude of a 3D vector. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorMagnitude +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorMagnitude vector +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector = [x,y,z]; +Result = sqrt ((x ^ 2) + (y ^ 2) + (z ^ 2)) +$/Code$ +It is recommended to use vectorMagnitude instead of BIS_fnc_magnitude. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorMagnitudeSqr +//KeywordEnd// +DescriptionStart: +Squared magnitude of a 3D vector. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorMagnitudeSqr +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorMagnitudeSqr vector +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector = [x,y,z]; +Result = (x ^ 2) + (y ^ 2) + (z ^ 2) +$/Code$ +It is recommended to use vectorMagnitudeSqr instead of BIS_fnc_magnitudeSqr. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorMultiply +//KeywordEnd// +DescriptionStart: +Multiplies 3D vector by a scalar. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorMultiply +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vector vectorMultiply scalar +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22)Algorithm: +$Code$ +Vector = [x,y,z]; scalar = a; +Result = [(x * a),(y * a),(z * a)]; +$/Code$ +It is recommended to use vectorMultiply instead of BIS_fnc_vectorMultiply. This is a very useful function, as it can be used with the velocity command to move an object from one position to another. (ie vector1 to vector2 ) - ensure both positions are found using getPosASL. +$Code$ +_obj setVelocity ((( getPosASL _target) vectorDiff ( getPosASL _obj)) vectorMultiply 2); +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorNormalized +//KeywordEnd// +DescriptionStart: +Returns normalized vector (unit vector, vectorMagnitude = 1) of given vector. If given vector is 0 result is a 0 vector as well. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorNormalized +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorNormalized vector +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(19 Jul, 2014) +(ArmA3 1.26) Algorithm: +$Code$ +Vector = [x,y,z]; +Result = [x/( sqrt (x ^ 2 + y ^ 2 + z ^ 2)), y/( sqrt (x ^ 2 + y ^ 2 + z ^ 2)), z/( sqrt (x ^ 2 + y ^ 2 + z ^ 2))] +$/Code$ +In mathematics, a unit vector in a normed vector space is a vector whose length is 1. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorUp +//KeywordEnd// +DescriptionStart: +Return object's up vector in world Position coordinates ( [x, y, z] ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorUp +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorUp objectName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(28 Jun, 2014) +(ArmA3 1.22) Returns the pitch and bank of an object in degrees, use BIS_fnc_getPitchBank instead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vectorUpVisual +//KeywordEnd// +DescriptionStart: +Return object's up vector in world Position coordinates ( [x, y, z] ) in render time scope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vectorUpVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vectorUpVisual objectName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vehicle +//KeywordEnd// +DescriptionStart: +Vehicle in which given unit is mounted. If none, unit is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle unitName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vehicleChat +//KeywordEnd// +DescriptionStart: +Type text to vehicle radio channel. +This function only types text to the list, it does not broadcast the message. If you want the message to show on all computers, you have to execute it on them. +Object parameter must be a vehicle, not a player. +If you are in a crew seat (i.e. driver, gunner or commander), then it will include that role in the chat name output (Eg: Driver (you_name): "Message"). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vehicleChat +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName vehicleChat text +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vehicleRadio +//KeywordEnd// +DescriptionStart: +Send message to vehicle radio channel. Message is defined in description.ext. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vehicleRadio +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName vehicleRadio name +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vehicles +//KeywordEnd// +DescriptionStart: +Returns a list of all vehicles. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vehicles +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicles +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 24, 2007) +(A1 1.08 )This command is returning only vehicles and no soldiers. +%NextNote% +(July 15, 2011) +(A2 1.51)It returns both empty and crewed vehicles. +%NextNote% +(december 22, 2013) +(A3)It will also return "WeaponHolderSimulated" of dead bodies (weapon on the ground). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vehicleVarName +//KeywordEnd// +DescriptionStart: +Returns the name of the variable which contains a primary editor reference to this object. This is the variable given in the Insert Unit dialog / name field, in the editor. It can be changed using setVehicleVarName. +If object refers to a vehicle that wasn't given a name in the editor, the return value is an empty string, "". +Since it is possible to setVehicleVarName individually on each PC, the value of vehicleVarName returned will be local to the PC on which command is executed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vehicleVarName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleVarName object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / local +//LocalityEnd// +NoteStart: +(April 19, 2015) +To get variable names referencing an object in mission namespace: +$Code$KK_fnc_objectVarNames = { +private "_names"; +_names = []; +{ +if ( missionNamespace getVariable _x isEqualTo _this) then { +_names pushBack _x; +}; +} forEach allVariables missionNamespace ; +_names +}; +//example +myGroup = group player ; +aGroup = group player ; +hint str ( group player call KK_fnc_objectVarNames); //["agroup","mygroup"]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +velocity +//KeywordEnd// +DescriptionStart: +Return velocity (speed vector) of Unit as an array with format [x, y, z]. Units are in metres per second. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/velocity +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +velocity vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +velocityModelSpace +//KeywordEnd// +DescriptionStart: +Returns the velocity (speed vector) of the vehicle as an array with format [x, y, z]. Vector is in model space. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/velocityModelSpace +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +velocityModelSpace vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(December 11, 2014) +This function is useful for helicopters as it returns Z vector like an indicator of thrust/load ratio. More or less climb (+) or descent (-) tendency but: +As X,Y,Z vectors are relative to vehicle attitude, this function doesn't return a climb or descend rate (as the attitude of the vehicle can be far from horizontal). You can get negative Z vector, in jets, while climbing fast, peeling off in the sky! +More or less, you can use as a Z accelerometer factor but invert the sign: +G acceleration (negative vector below the jet) is -Z here. +If not "physically" correct, the behavior is sufficient enough for Arma flight model. +%NextNote% +(June 21, 2015) +Previous note is physically incorrect. Velocity can not be used to give information about Thrust/Load ratio or G-Forces/acceleration. To get acceleration you have to create the derivative of velocity after time dv/dt - the difference of velocity between 2 timesteps divided by the time that passed between the 2 steps. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +verifySignature +//KeywordEnd// +DescriptionStart: +Check if file is signed by any key present in game keys folders. Note: On client, it does not check against the keys accepted by server. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/verifySignature +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +verifySignature filename +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vest +//KeywordEnd// +DescriptionStart: +Returns name of vest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vest +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vest unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vestContainer +//KeywordEnd// +DescriptionStart: +Returns a cargo container of a unit's vest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vestContainer +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vestContainer unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vestItems +//KeywordEnd// +DescriptionStart: +Get array with all items (of any kind, even weapons) from vest. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vestItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vestItems unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +vestMagazines +//KeywordEnd// +DescriptionStart: +Get array with all magazines from vest of the given unit. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/vestMagazines +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vestMagazines unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +viewDistance +//KeywordEnd// +DescriptionStart: +Returns the rendering distance. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/viewDistance +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +viewDistance +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +visibleCompass +//KeywordEnd// +DescriptionStart: +Checks if the player has compass opened and visible +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/visibleCompass +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +visibleCompass +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +visibleGPS +//KeywordEnd// +DescriptionStart: +Checks if the player has GPS receiver opened and visible +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/visibleGPS +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +visibleGPS +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +visibleMap +//KeywordEnd// +DescriptionStart: +Return true if the main map is shown (active). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/visibleMap +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +visibleMap +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +visiblePosition +//KeywordEnd// +DescriptionStart: +Returns an object's rendered position (z value above surface underneath) in render time scope. Same as getPosVisual +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/visiblePosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +visiblePosition object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 4, 2015) +Z (visiblePosition select 2) works but if unit/object is in a building, Z remains at ground level. If you need Z depending on building floors/stages, use getPosAtl select 2 instead. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +visiblePositionASL +//KeywordEnd// +DescriptionStart: +Returns an object's rendered 3D position ASL (z value above sea level) in render time scope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/visiblePositionASL +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +visiblePositionASL object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +visibleWatch +//KeywordEnd// +DescriptionStart: +Checks if the player has watch opened and visible +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/visibleWatch +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +visibleWatch +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waitUntil +//KeywordEnd// +DescriptionStart: +Suspend execution of function or SQF based script until condition is satisfied. +This command will loop and call the code inside {} mostly every frame (depends on complexity of condition and overall engine load) until the code returns true. The execution of the rest of the script therefore will be suspended until waitUntil condition is satisfied and the loop is aborted. +Because of this script suspension use spawn or execVM to safely execute code containing waitUntil. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waitUntil +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waitUntil condition +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(September 20, 2013) +In case you have more complex code inside waitUntil loop, to be on the safe side always return boolean at the end of the scope: +$Code$ player addEventHandler ["Fired", { +_null = (_this select 6) spawn { +_p = [0,0,0]; +waitUntil { +if ( isNull _this) exitWith { true }; +_p = getPos _this; +false // -- boolean at the end of the scope +}; +hint str _p; +}; +}];$/Code$ +%NextNote% +(December 20, 2006) +waitUntil suspends both SQF functions and SQF scripts. In functions, the calling script is still in suspension due to waiting for a return from the call command. The game engine will continue, however. See Function for more detail. +%NextNote% +(April 2, 2010) +If WaitUntil uses an undefined call code, WaitUntil won't release, even when this code is separated from other conditions through or. Be warned that this won't cause an error message. +%NextNote% +(Jan 07, 2011) +By default the cycle time for the condition check is per frame. Look at the example 3, how to set it at a lower rate yourself. +Often times one does not need per frame checking. Saves a lot CPU checks; especially when the condition is complex to compute. +%NextNote% +(December 13, 2014) +If you want to use waitUntil together with exitWith, remember that the loop only exits if the code block returns true. +It should look like this: +$Code$ +waitUntil { +// exit loop if the unit gets deleted +if (isNull _unit) exitWith {true}; // has to return true to continue +!alive _unit; +}; +$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waves +//KeywordEnd// +DescriptionStart: +Return waves value. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waves +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waves +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointAttachedObject +//KeywordEnd// +DescriptionStart: +Gets the object attached to the waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointAttachedObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointAttachedObject waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointAttachedVehicle +//KeywordEnd// +DescriptionStart: +Gets the vehicle attached to the waypoint. +A vehicle can be attached to a waypoint by +creating the waypoint on top of the vehicle (in the editor) +using waypointAttachVehicle +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointAttachedVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointAttachedVehicle waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointAttachObject +//KeywordEnd// +DescriptionStart: +Attaches a static object via it's numeric ID to the given waypoint. +The alternative syntax is (at least) available since Arma 2. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointAttachObject +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint waypointAttachObject objectID +%NextRawSyntax% +waypoint waypointAttachObject object +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 20, 2014) +In Arma 3 1.22 only the alternative syntax is working. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointAttachVehicle +//KeywordEnd// +DescriptionStart: +Attaches a Unit to the given Waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointAttachVehicle +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoint waypointAttachVehicle vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(June 19, 2010) +You can attach waypoint only to vehicle inserted from classic editor. Trying to attach it to dynamically spawned ( createUnit, createVehicle ) won't work. Engine will then try to find suitable target by itself, affecting game performance. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointBehaviour +//KeywordEnd// +DescriptionStart: +Gets the waypoint behavior. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointBehaviour +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointBehaviour waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointCombatMode +//KeywordEnd// +DescriptionStart: +Gets the waypoint combat mode. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointCombatMode +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointCombatMode waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointCompletionRadius +//KeywordEnd// +DescriptionStart: +Gets the radius around the waypoint where the waypoint is completed. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointCompletionRadius +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointCompletionRadius waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointDescription +//KeywordEnd// +DescriptionStart: +Gets the waypoint description. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointDescription +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointDescription waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointFormation +//KeywordEnd// +DescriptionStart: +Gets the waypoint formation. +Possible values are: +"NO CHANGE" +"COLUMN" +"STAG COLUMN" +"WEDGE" +"ECH LEFT" +"ECH RIGHT" +"VEE" +"LINE" +"FILE" +"DIAMOND" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointFormation +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointFormation waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointHousePosition +//KeywordEnd// +DescriptionStart: +Gets the house position assigned to the waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointHousePosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointHousePosition waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointLoiterRadius +//KeywordEnd// +DescriptionStart: +Gets the waypoint loiter radius. Waypoint uses format Waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointLoiterRadius +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointLoiterRadius Waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointLoiterType +//KeywordEnd// +DescriptionStart: +Gets the waypoint loiter type. Waypoint uses format Waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointLoiterType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointLoiterType Waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointName +//KeywordEnd// +DescriptionStart: +Gets the waypoint name. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointName waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointPosition +//KeywordEnd// +DescriptionStart: +Get Waypoint 's Position. Note : This function is identical to getWPPos. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointPosition +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointPosition waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypoints +//KeywordEnd// +DescriptionStart: +Returns an array of waypoints for the specified unit/group. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypoints +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypoints groupName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointScript +//KeywordEnd// +DescriptionStart: +Gets the waypoint script. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointScript +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointScript waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointsEnabledUAV +//KeywordEnd// +DescriptionStart: +Checks if the UAV has waypoints enabled. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointsEnabledUAV +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointsEnabledUAV uav +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointShow +//KeywordEnd// +DescriptionStart: +Gets the waypoint show/hide status. +Possible values are: +"NEVER" - never show it +"EASY" - show only in cadet mode +"ALWAYS" - always show it +"ERROR" - when set to any different string +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointShow +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointShow waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointSpeed +//KeywordEnd// +DescriptionStart: +Gets the waypoint speed. +Possible values are: +"UNCHANGED" +"LIMITED" +"NORMAL" +"FULL" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointSpeed +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointSpeed waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointStatements +//KeywordEnd// +DescriptionStart: +Gets the waypoint statements. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointStatements +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointStatements waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointTimeout +//KeywordEnd// +DescriptionStart: +Gets the waypoint timeout values. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointTimeout +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointTimeout waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointTimeoutCurrent +//KeywordEnd// +DescriptionStart: +Gets the current waypoint timeout or -1 if countdown is not in progress. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointTimeoutCurrent +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointTimeoutCurrent waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointType +//KeywordEnd// +DescriptionStart: +Gets the waypoint type. +Type can be: +"MOVE" +"DESTROY" +"GETIN" +"SAD" +"JOIN" +"LEADER" +"GETOUT" +"CYCLE" +"LOAD" +"UNLOAD" +"TR UNLOAD" +"HOLD" +"SENTRY" +"GUARD" +"TALK" +"SCRIPTED" +"SUPPORT" +"GETIN NEAREST" +"DISMISS" +"AND" +"OR" +More details at Waypoint types. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointType +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointType waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 6, 2015) +With the new sling loading in Arma 3, 2 new waypoint types are added aswell being: +Drop Cargo and Lift Cargo. +The names for these 2 waypoints are: +"UNHOOK" and "HOOK". +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +waypointVisible +//KeywordEnd// +DescriptionStart: +Returns the visibility of the waypoint. +Returns 0 ( Number ) for a non valid waypoint. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/waypointVisible +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +waypointVisible waypoint +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponAccessories +//KeywordEnd// +DescriptionStart: +Get array with all items linked to a given weapon. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponAccessories +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +unit weaponAccessories weapon +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(October 26, 2014) +To check if currently selected muzzle has a silencer: +$Code$_silencer = player weaponAccessories currentMuzzle player select 0; +hasSilencer = ! isNil "_silencer" {_silencer != ""};$/Code$ +%NextNote% +(March 16, 2015) +Since revision 129742, this command also returns an attached bipod. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponCargo +//KeywordEnd// +DescriptionStart: +Get array with weapons from ammo box (or any general weapon holder container). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weaponCargo box +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponDirection +//KeywordEnd// +DescriptionStart: +Returns the direction that the vehicle weapon is aiming in. +For addons the weapon name must be an entry in CfgWeapons. +Returns an array in format [x, y, z] +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponDirection +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicleName weaponDirection weaponName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(August 18, 2007) +Works great in multiplayer. +The numbers are representing offset as follows : [X axis,Y axis,Z axis] +The return array can be processed-converted into degrees as follows: +$Code$_array = _this weaponDirection "weapon class" ; +_dir_degrees = (_array select 0) atan2 (_array select 1);$/Code$ +%NextNote% +(November 11, 2007) +WeaponClass can only be the primary turret of the vehicle. For example it is not possible to get direction of commander's M2 on M1Abrams. +%NextNote% +(November 13, 2007) +For an alternative to the weaponDirection command, see the following post on the offical forums. On how to obtain the direction of multiple turrets on vehicles. +Turret Animations - new forum +%NextNote% +(December 9, 2014) +The suggestion above using atan2 and weaponDirection get the direction the barrel of a weapon is pointing, but this is not the same as the direction a shell will be fired (verify this by getting in an M4 Scorcher, parking it on a slope, elevating the barrel "across" the slope and watching the shell come out in third person). +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponLowered +//KeywordEnd// +DescriptionStart: +True if given soldier's weapon is lowered. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponLowered +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weaponLowered unit +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weapons +//KeywordEnd// +DescriptionStart: +Returns array of names of all Unit 's weapons. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weapons +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weapons vehicleName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(12:07, 20 January 2007) +(A1 1.02) this command returns only weapons defined for the primary turret of the vehicle. +for ex. only ["D81", "PKT"] for t72, not ["D81", "PKT","DSHKM"] +%NextNote% +(06:01, 3 March 2007 (CET)) +%NextNote% +(11 March 2011) +Use weaponsTurret to determine the weapons of a non gunner/turret position. +%NextNote% +(25 November 2011) +This command does not include non-turret weapons, such as smoke, flare or chaff launchers which are usually declared in the root of the vehicle's class, rather than in the Turrets hierarchy. (Unsure whether it excludes it because it is not in the turret or because these are not considered true weapons via some property.) +%NextNote% +(18 June 2013) +Lists also weapons in inventory from Arma 3 ver. 0.70. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponsItems +//KeywordEnd// +DescriptionStart: +Returns an array with subarrays contains class names and also names of connected items of all the vehicle's weapons. +Since Arma 3 v1.21.124406 it is possible to query weapon holders and ammo crates with this command. If weapon has no magazine, an empty array [] is returned instead of magazine info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponsItems +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weaponsItems vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 17, 2013) +Be careful with this function. The weapons are listed in the order they were taken by the unit, with the most recent at the bottom of the array. Therefore, do not assume the first one is always the primary weapon, and so on. +Also, here's how the primary weapon looks if it has a grenade launcher with a loaded grenade: +$Code$[ +"arifle_MX_GL_F", +"muzzle_snds_H", +"acc_pointer_IR", +"optic_Aco", +[ +"30Rnd_65x39_caseless_mag", +30 +], +[ +"1Rnd_HE_Grenade_shell", +1 +], +"" +]$/Code$ +%NextNote% +(October 25, 2014) +The output of this command is an array of arrays and is as follows: (If the unit only has 1 weapon, output is an array within an array.) +$Code$[ +[ +((_arr select 0) select 0) //STRING - The weapon's classname +((_arr select 0) select 1) //STRING - Classname of the unit's equipped 'Muzzle/Barrel Accessory' +((_arr select 0) select 2) //STRING - Classname of the unit's equipped 'Side Accessory' +((_arr select 0) select 3) //STRING - Classname of the unit's equipped 'Top/Optic Accessory' +((_arr select 0) select 4) //ARRAY - Magazine information +[ +(((_arr select 0) select 4) select 0) //STRING - Classname of the loaded magazine +(((_arr select 0) select 4) select 1) //SCALAR(Number) - Amount of bullets in the mag +] +] //If unit has more than one weapon, the output will follow the same pattern as above except with a new element +]$/Code$ +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponsItemsCargo +//KeywordEnd// +DescriptionStart: +Returns an array with subarrays contains class names and also names of connected items of all the vehicle's cargo weapons in weaponsItems format. If weapon has no magazine, an empty array [] is returned instead of magazine info. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponsItemsCargo +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weaponsItemsCargo vehicle +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponState +//KeywordEnd// +DescriptionStart: +Returns the current weapon state as an array of strings in the following format [WeaponName, MuzzleName, ModeName, MagazineName, AmmoCount] (AmmoCount is Number ). +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponState +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weaponState unitName +%NextRawSyntax% +weaponState [vehicle, turretPath] +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(February 17, 2012) +The command does not work for a vehicle driver - even if he has weapons. +The command only works for vehicle positions, if there was an unit on the position before. When a position has been occupied once, the command even works when there is no unit currently at the given vehicle position. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weaponsTurret +//KeywordEnd// +DescriptionStart: +Returns all weapons of given turret. Use turret path [-1] for driver's turret. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weaponsTurret +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +vehicle weaponsTurret turretPath +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +global / undefined +//LocalityEnd// +NoteStart: +(11 March 2011) +Use assignedVehicleRole in combination to easily determine the weapons for any vehicle position. You need to check for -1 if the unit is in the driver/pilot position. See example 3 and 4. +%NextNote% +(11 March 2011) +funcGetTurretsWeapons = { +private [ _result, _getAnyMagazines, _findRecurse, _class ]; +_result = []; +_getAnyMagazines = { +private [ _weapon, _mags ]; +_weapon = configFile CfgWeapons _this; +_mags = []; +{ +_mags = _mags + getArray ( +(if (_x == this ) then { _weapon } else { _weapon _x }) magazines +) +} foreach getArray (_weapon muzzles ); +_mags +}; +_findRecurse = { +private [ _root, _class, _path, _currentPath ]; +_root = (_this select 0); +_path = +(_this select 1); +for _i from 0 to count _root -1 do { +_class = _root select _i; +if (isClass _class) then { +_currentPath = _path + [_i]; +{ +_result set [count _result, [_x, _x call _getAnyMagazines, _currentPath, str _class]]; +} foreach getArray (_class weapons ); +_class = _class turrets ; +if (isClass _class) then { +[_class, _currentPath] call _findRecurse; +}; +}; +}; +}; +_class = ( +configFile CfgVehicles ( +switch (typeName _this) do { +case STRING : {_this}; +case OBJECT : {typeOf _this}; +default {nil} +} +) turrets +); +[_class, []] call _findRecurse; +_result; +}; +This call: +"M1A2_US_TUSK_MG_EP1" call funcGetTurretsWeapons +will return all turrets weapons, its magazines and its paths: +[ +[ M256, [ 20Rnd_120mmSABOT_M1A2, 20Rnd_120mmHE_M1A2 ], [0], bin\config.bin/CfgVehicles/M1A2_US_TUSK_MG_EP1/Turrets/MainTurret ], +[ M240_veh, [ 100Rnd_762x51_M240, 1200Rnd_762x51_M240 ], [0], bin\config.bin/CfgVehicles/M1A2_US_TUSK_MG_EP1/Turrets/MainTurret ], +[ M2BC, [ 100Rnd_127x99_M2 ], [0, 0], bin\config.bin/CfgVehicles/M1A2_US_TUSK_MG_EP1/Turrets/MainTurret/Turrets/CommanderOptics ], +[ SmokeLauncher, [ SmokeLauncherMag ], [0, 0], bin\config.bin/CfgVehicles/M1A2_US_TUSK_MG_EP1/Turrets/MainTurret/Turrets/CommanderOptics ], +[ M240_veh_2, [ 100Rnd_762x51_M240, 1200Rnd_762x51_M240 ], [0, 1], bin\config.bin/CfgVehicles/M1A2_US_TUSK_MG_EP1/Turrets/MainTurret/Turrets/LoaderTurret ] +] +denisko.redisko (denvdmj) +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +weightRTD +//KeywordEnd// +DescriptionStart: +Returns weight of RTD helicopter. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/weightRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +weightRTD helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +west +//KeywordEnd// +DescriptionStart: +West side. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/west +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +west +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +WFSideText +//KeywordEnd// +DescriptionStart: +Returns the un localized text value of an object's side / a group's side or a side as: +east, opfor - "East" +west, blufor - "West" +resistance, independent - "Resistance" +civilian - "Civilian" +sideUnknown - "Unknown" +sideEnemy - "Unknown" +sideFriendly - "Unknown" +sideLogic - "Unknown" +sideEmpty - "Unknown" +sideAmbientLife - "Unknown" +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/WFSideText +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +WFSideText param +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(August 17, 2014) +WF stands for Warfare +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +while +//KeywordEnd// +DescriptionStart: +Description: +Repeats Code while condition is true. A part of while do construct. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/while +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +wind +//KeywordEnd// +DescriptionStart: +Returns the current wind vector (in m/s) as array [x, z, y]. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/wind +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +wind +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +In OFP 1.96, wind speed and direction are directly related to overcast. +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +windDir +//KeywordEnd// +DescriptionStart: +Returns the current wind azimuth. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/windDir +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +windDir +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +windStr +//KeywordEnd// +DescriptionStart: +Returns the current wind strength. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/windStr +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +windStr +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +wingsForcesRTD +//KeywordEnd// +DescriptionStart: +Returns force produced by wings. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/wingsForcesRTD +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +wingsForcesRTD RTD_helicopter +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(March 19, 2015) +Advanced helicopter flight model MUST be enabled for this function to work, otherwise it returns an empty array. +Returns a 3x3 two-dimensional array. In the editor while climbing in a little bird, it returned this: +[ [ 0.3993577, 11.72865, -30.21434 ], [ 0.3053164, 11.17272, -30.17695 ], [ 94.33984, 51.3513, -40.4908 ] ] +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +with +//KeywordEnd// +DescriptionStart: +Description: +Executes given code inside given namespace. +NOTE for the reasons unknown, namespace switching might unexpectedly occur inside some scopes ( for, if, try, call ) started in scheduled scripts ( canSuspend true) after small suspension if with was not the main scope. For example: +$Code$[] spawn +{ +with uiNamespace do +{ +for "_i" from 1 to 1 do +{ +systemChat str [ +currentNamespace isEqualTo uiNamespace, +currentNamespace isEqualTo missionNamespace +]; +// result [true, false] +sleep 0.05; // -- small suspension +systemChat str [ +currentNamespace isEqualTo uiNamespace, +currentNamespace isEqualTo missionNamespace +]; +// result [false, true] -- switching +}; +}; +};$/Code$ +However if with used in parent scope, everything works correctly: +$Code$ with uiNamespace do +{ +[] spawn +{ +for "_i" from 1 to 1 do +{ +systemChat str [ +currentNamespace isEqualTo uiNamespace, +currentNamespace isEqualTo missionNamespace +]; +// result [true, false] +sleep 0.05; // -- small suspension +systemChat str [ +currentNamespace isEqualTo uiNamespace, +currentNamespace isEqualTo missionNamespace +]; +// result [true, false] -- NO switching +}; +}; +};$/Code$ +To eliminate possibility of error you can also use setVariable or getVariable with desired Namespace, which is also scheduled environment save. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/with +//WikiPageEnd// + +%NextListItem% + +KeywordStart: +worldName +//KeywordEnd// +DescriptionStart: +Return the name of the currently loaded world. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/worldName +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +worldName +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +worldSize +//KeywordEnd// +DescriptionStart: +Returns config size of the current world. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/worldSize +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +worldSize +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +worldToModel +//KeywordEnd// +DescriptionStart: +Converts position from world space to object model space. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/worldToModel +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object worldToModel position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +worldToModelVisual +//KeywordEnd// +DescriptionStart: +Converts position from world space to object model space in render time scope. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/worldToModelVisual +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +object worldToModelVisual worldPosition +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + +%NextListItem% + +KeywordStart: +worldToScreen +//KeywordEnd// +DescriptionStart: +Converts position in world space into screen (UI) space. If a specified position is not within the current screen view, an empty array is returned. +//DescriptionEnd// +WikiPageStart: +https://community.bistudio.com/wiki/worldToScreen +//WikiPageEnd// +SyntaxStart: +//SyntaxEnd// +RawSyntaxStart: +worldToScreen position +//RawSyntaxEnd// +ExampleStart: +//ExampleEnd// +LocalityStart: +undefined / undefined +//LocalityEnd// +NoteStart: +(august 19th, 2012) +please take safezones in consideration : the returned result can be out of the [0,0]..[1,1] range and can also be a filled array even if the position is not displayed on your monitor - this command thinks of triplescreens configurations as well. [] returned = not rendered +//NoteEnd// +ReturnValueStart: +Nothing +//ReturnValueEnd// + + + +//KeywordListEnd// \ No newline at end of file diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/activator/Activator.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/activator/Activator.java index f183421c..ccff1153 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/activator/Activator.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/activator/Activator.java @@ -3,7 +3,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManager.SQDevPluginManager; +import raven.sqdev.pluginManagement.SQDevPluginManager; public class Activator extends AbstractUIPlugin { diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAnnotation.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAnnotation.java index d9cc450a..e1a29194 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAnnotation.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAnnotation.java @@ -10,13 +10,18 @@ */ public enum ESQDevFileAnnotation { /** - * Defines a file that shouldbe ignored during export + * Defines a file that should be ignored during export */ IGNORE { @Override public String toString() { return "ignore"; } + + @Override + public String getDescription() { + return "Defines a file that should be ignored during export"; + } }, /** * Defines a file that should not get deleted during the clean of an export @@ -26,8 +31,12 @@ public String toString() { public String toString() { return "preserve"; } - } - ; + + @Override + public String getDescription() { + return "Defines a file that should not get deleted during the clean of an export"; + } + }; /** * The values of this annotation @@ -36,7 +45,9 @@ public String toString() { /** * Checks if the given line contains a valid annotation in a SQDevFile.
    - * @param inputLine The line to be checked + * + * @param inputLine + * The line to be checked * @return True if it's an annotation */ public static boolean isAnnotation(String inputLine) { @@ -49,8 +60,8 @@ public static boolean isAnnotation(String inputLine) { String possibleAnnotation = (inputLine.contains(" ")) ? inputLine.substring(1, inputLine.indexOf(" ")) : inputLine.substring(1); - for(ESQDevFileAnnotation current : ESQDevFileAnnotation.values()) { - if(current.toString().equals(possibleAnnotation)) { + for (ESQDevFileAnnotation current : ESQDevFileAnnotation.values()) { + if (current.toString().equals(possibleAnnotation)) { return true; } } @@ -67,6 +78,7 @@ public ArrayList getValues() { /** * Sets the list of values of this annotation + * * @param values */ public void setValues(ArrayList values) { @@ -75,12 +87,19 @@ public void setValues(ArrayList values) { /** * Adds a value to the list - * @param value The value to add + * + * @param value + * The value to add */ public void addValue(String value) { - if(values == null) { + if (values == null) { values = new ArrayList(); } values.add(value); } + + /** + * Gets the description for this annotation + */ + public abstract String getDescription(); } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAttribute.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAttribute.java index 92d05dd5..c43e99c0 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAttribute.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/sqdevFile/ESQDevFileAttribute.java @@ -21,6 +21,12 @@ public String toString() { public String getDefault() { return "false"; } + + @Override + public String getDescription() { + return "The attribute specifying whether the project " + + "should get exported/synced every time a file changes"; + } }, /** * The attribute defining where the project should be exported to @@ -36,6 +42,11 @@ public String getDefault() { // export location has to specified return null; } + + @Override + public String getDescription() { + return "The attribute defining where the project should be exported to"; + } }, /** * The attribute defining the terrain the mission should play on @@ -52,8 +63,17 @@ public String getDefault() { return null; } + @Override + public String getDescription() { + return "The attribute defining the terrain the mission should play on"; + } + }, + /** + * The attribute defining to which profile this mission/project should be + * associated to + */ PROFILE { @Override public String toString() { @@ -66,6 +86,12 @@ public String getDefault() { // project should get exported to return null; } + + @Override + public String getDescription() { + return "The attribute defining to which profile this " + + "mission/project should be associated to"; + } }; /** @@ -143,4 +169,9 @@ public static boolean isAttribute(String inputLine) { // if it coudn't be found it can't be a valid attribute return false; } + + /** + * Gets the description for this attribute + */ + public abstract String getDescription(); } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/FileUtil.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/FileUtil.java index 1055b7e9..57859559 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/FileUtil.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/FileUtil.java @@ -2,14 +2,19 @@ import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Path; import org.eclipse.swt.SWT; +import raven.sqdev.exceptions.SQDevException; + /** * A class containing static util methods for files * @@ -136,4 +141,83 @@ public static File copyFolder(File folder, Path destination) { return targetFolder; } + /** + * Gets the content of the given file + * + * @param file + * The File whose content should be obtained. Has to + * exist! + * @return The file's content + * @throws SQDevException + * If anything goes wrong + */ + public static String getContent(File file) throws SQDevException { + if (!file.exists()) { + throw new SQDevException( + "Failed at getting content of file \"" + file.getAbsolutePath() + "\"", + new FileNotFoundException("The requested file does not exist")); + } + + try { +// BufferedReader reader = new BufferedReader(new FileReader(file)); +// +// String content = ""; +// String currentLine = ""; +// +// while ((currentLine = reader.readLine()) != null) { +// content += (content.isEmpty()) ? currentLine : "\n" + currentLine; +// } +// +// reader.close(); +// +// return content; + + return readAll(new FileInputStream(file), (int) file.length()); + + } catch (IOException e) { + throw new SQDevException( + "Failed at getting content of file \"" + file.getAbsolutePath() + "\"", e); + } + } + + /** + * Reads the complete InputStream into a String. + * + * @param in + * The InputStream to read from + * @param size + * The length of the InputStream or -1 + * if unknown. + * @return The created String + * @throws IOException + */ + public static String readAll(InputStream in, int size) throws IOException { + byte[] bytes; + + if (size < 0) { + bytes = new byte[in.available()]; + } else { + bytes = new byte[size]; + } + + in.read(bytes); + + return new String(bytes); + } + + /** + * Reads the complete InputStream into a String. If the size of the + * InputStream can be obtained + * readAll(InputStream in, int size) should be used for safer + * results. + * + * @param in + * The InputStream to read from + * @return The created String + * @throws IOException + */ + public static String readAll(InputStream in) throws IOException { + return readAll(in, -1); + } + } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ResourceManager.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ResourceManager.java index f691ca8d..eab9428a 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ResourceManager.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/ResourceManager.java @@ -1,5 +1,10 @@ package raven.sqdev.util; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -7,12 +12,41 @@ import java.net.URL; import java.util.jar.JarInputStream; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Platform; + +import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.exceptions.SQDevException; + +/** + * This ResourceManager is responsible for managing the resources + * of this plugin including reading and writing + * + * @author Raven + * + */ public class ResourceManager { + /** + * The extension used for backup resources + */ + private static final String BACKUP_EXTENSION = ".back"; private ClassLoader loader; private URL locationURL; private URI locationURI; + /** + * The path to the resource location of this plugin + */ + private IPath resourceLocation; + /** + * The path to the backup resource location of this plugin containg older + * versions of resources + */ + private IPath backupResourceLocation; + /** + * Creates an instance of this ResourceManager + */ public ResourceManager() { setLoader(this.getClass().getClassLoader()); setLocationURL(this.getClass().getProtectionDomain().getCodeSource().getLocation()); @@ -24,16 +58,21 @@ public ResourceManager() { setLocationURI(null); } + + initializeResourceLocation(); } /** - * Searches for the resource + * Gets the hard coded resource stored directly in this plugin's jat * - * @param path The path within this structure - * @return + * @param path + * The path within this plugin leading to the resource. (has to + * start with "/resources") + * @return The InputStream to this resource or + * null if this resource couldn't be found */ - public InputStream findResource(String path) { - if(!path.startsWith("/resources")) { + private InputStream getHardResourceStream(String path) { + if (!path.startsWith("/resources")) { throw new IllegalArgumentException("Given path has to reference the resource-folder!"); } @@ -56,6 +95,129 @@ public InputStream findResource(String path) { return in; } + /** + * Updates the resource file of the given name with the given content after + * backing up the current content of the resource file.
    + * Note: There's always only one backup for each resource file + * + * @param name + * The name of the resource. If it daoes not contain an extension + * the extension ".txt" will be added.
    + * If no such resource does exist it will be created. + * @param content + * The new content of this resourcefile + * @throws IOException + */ + public void updateResource(String name, String content) throws IOException { + if (resourceExists(name)) { + // create resource + backup + createResource(name); + } + + // backup resource + backupResource(name); + + // write new content + FileWriter writer = new FileWriter(getResource(name).toFile()); + + writer.write(content); + + writer.close(); + } + + /** + * Gets an InputStream to the resource with the given name + * + * @param name + * The name of the resource. If it does not contain an exntension + * the extension ".txt" will be added. + * @return The InputStream to this resource file or + * null if the resource couldn't be found + */ + public InputStream getResourceStream(String name) { + if (resourceExists(name)) { + try { + return new FileInputStream(getResource(name).toFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + + return null; + } + } else { + return null; + } + } + + /** + * Gets an InputStream to the backup resource with the given + * name + * + * @param name + * The name of the normal resource. If it does not contain an + * exntension the extension ".txt" will be added. + * @return The InputStream to this backup resource file or + * null if the resource couldn't be found + */ + public InputStream getBackupResourceStream(String name) { + if (resourceExists(name)) { + try { + return new FileInputStream(getBackupResource(name).toFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + + return null; + } + } else { + return null; + } + } + + /** + * Gets the content of the resource file with the given name + * + * @param name + * The name of the normal resource. If it does not contain an + * exntension the extension ".txt" will be added. + * @return The content of this resource or null if the + * gathering of this resource's content was not possible. + */ + public String getResourceContent(String name) { + if (!resourceExists(name)) { + return null; + } + + try { + return FileUtil.getContent(getResource(name).toFile()); + } catch (SQDevException e) { + e.printStackTrace(); + + return null; + } + } + + /** + * Gets the content of the backup resource file corresponding to the given + * name + * + * @param nameThe + * name of the normal resource. If it does not contain an + * exntension the extension ".txt" will be added. + * @return + */ + public String getBackupResourceContent(String name) { + if (!resourceExists(name)) { + return null; + } + + try { + return FileUtil.getContent(getBackupResource(name).toFile()); + } catch (SQDevException e) { + e.printStackTrace(); + + return null; + } + } + private ClassLoader getLoader() { return loader; } @@ -80,4 +242,237 @@ private void setLocationURI(URI locationURI) { this.locationURI = locationURI; } + /** + * Initializes the resource location + */ + private void initializeResourceLocation() { + // make sure the resource location exists + IPath stateLocation = Platform.getStateLocation(Platform.getBundle("raven.sqdev.util")); + resourceLocation = stateLocation.append("resources"); + backupResourceLocation = resourceLocation.append("Backup"); + + if (!resourceLocation.toFile().exists()) { + // create resource location + resourceLocation.toFile().mkdir(); + + if (!backupResourceLocation.toFile().exists()) { + // create backup resource location + backupResourceLocation.toFile().mkdir(); + } + + // initialize necessary resources + try { + createResource("SQFKeywords.txt"); + + String content = FileUtil + .readAll(getHardResourceStream("/resources/sqf/SQFKeywords.txt")); + + // put content in respective resource files + FileWriter writer = new FileWriter(getResource("SQFKeywords.txt").toFile()); + writer.write(content); + writer.close(); + + writer = new FileWriter(getBackupResource("SQFKeywords.txt").toFile()); + writer.write(content); + writer.close(); + + } catch (IOException e) { + throw new SQDevCoreException("Failed at creating resources", e); + } + } + + if (!backupResourceLocation.toFile().exists()) { + // create backup resource location + backupResourceLocation.toFile().mkdir(); + } + } + + /** + * Creates a resource file with the given name + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + * @return True if the creation was successfull + * @throws IOException + */ + public boolean createResource(String name) throws IOException { + if (!name.contains(".")) { + // make a text document out of it + name += ".txt"; + } + + IPath resourcePath = resourceLocation.append(name); + IPath backupResourceFile = backupResourceLocation.append(name + BACKUP_EXTENSION); + + if (!resourcePath.toFile().exists()) { + resourcePath.toFile().createNewFile(); + backupResourceFile.toFile().createNewFile(); + + return true; + } else { + return false; + } + } + + /** + * Gets the path to the resource with the given name + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + * @return The Path to the resource fileor null if + * there is no such resourcefile + */ + private IPath getResource(String name) { + if (!name.contains(".")) { + name += ".txt"; + } + + IPath resourcePath = resourceLocation.append(name); + + if (resourcePath.toFile().exists()) { + return resourcePath; + } else { + return null; + } + } + + /** + * Gets the path to the backup resource with the given name + * + * @param name + * The name of the backup resource file. If it does not contain + * an extension the extension ".txt" will be added + * @return The Path to the resource fileor null if + * there is no such resourcefile + */ + private IPath getBackupResource(String name) { + if (!name.contains(".")) { + name += ".txt"; + } + + if (!name.endsWith(BACKUP_EXTENSION)) { + // add the backup extension + name += BACKUP_EXTENSION; + } + + IPath backupResourcePath = backupResourceLocation.append(name); + + if (backupResourcePath.toFile().exists()) { + return backupResourcePath; + } else { + return null; + } + } + + /** + * Will write the current content of the resource with the given name into + * it's corresponding backup resource file + * + * @param name + * The name of the backup resource file. If it does not contain + * an extension the extension ".txt" will be added + */ + private void backupResource(String name) { + if (!name.contains(".")) { + name += ".txt"; + } + + try { + if (!resourceExists(name)) { + // create resources if they don't exist + createResource(name); + + return; + } + + // get the content of current resource + BufferedReader reader = new BufferedReader(new FileReader(getResource(name).toFile())); + + String currentLine = ""; + String content = ""; + + while ((currentLine = reader.readLine()) != null) { + content += (content.isEmpty()) ? currentLine : "\n" + currentLine; + } + + reader.close(); + + // write the content into the backup + FileWriter writer = new FileWriter(getBackupResource(name).toFile()); + writer.write(content); + writer.close(); + + } catch (IOException e) { + throw new SQDevCoreException("Failed at backing up resource!", e); + } + } + + /** + * Checks if a resource with the given name and it's corresponding backup + * resource does exist + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + */ + public boolean resourceExists(String name) { + return (getResource(name) != null && getBackupResource(name) != null); + } + + /** + * Checks if the given resource is already accessed as it's backup resource + * (= the content of the resource is equal to the content of it's backup + * resource) + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + */ + public boolean isOnBackup(String name) { + try { + String content = FileUtil.getContent(getResource(name).toFile()); + String backup = FileUtil.getContent(getBackupResource(name).toFile()); + + // compare the two + return content.equals(backup); + } catch (SQDevException e) { + throw new SQDevCoreException(e); + } + } + + /** + * Switches the given resource to it's backup resource (The content of the + * backup resource is transferred to the resource itself). This cannot be + * undone! + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added. + * @return True if switching was successful + */ + public boolean switchToBackup(String name) { + if (!resourceExists(name)) { + return false; + } + + try { + // get backup content + String content = FileUtil.getContent(getBackupResource(name).toFile()); + + // write the content into the current resource + FileWriter writer = new FileWriter(getResource(name).toFile()); + writer.write(content); + writer.close(); + + // all good + return true; + } catch (SQDevException | IOException e) { + e.printStackTrace(); + + // smoething went wrong + return false; + } + } } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevInfobox.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevInfobox.java index 1ea45a49..ebf31b01 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevInfobox.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevInfobox.java @@ -61,7 +61,7 @@ public SQDevInfobox(String message, int style) { * for what went wrong. */ public SQDevInfobox(String message, Exception exception) { - this((exception.getMessage() != null) ? message + "\n\nReason: " + exception.getMessage() + this((exception.getMessage() != null) ? message + "\n\nReason:\n" + exception.getMessage() : message + "\n\nReason: Unknown", SWT.ICON_ERROR); } @@ -89,9 +89,10 @@ public void run() { Shell active = Display.getCurrent().getActiveShell(); - if (!active + if (style == SWT.ERROR && !active .equals(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell())) { - active.dispose(); + // close every other opened window + active.close(); } } }); diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java index 81571d02..fee636a4 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java @@ -15,7 +15,7 @@ import raven.sqdev.constants.SQDevPreferenceConstants; import raven.sqdev.exceptions.SQDevInvalidPreferenceException; -import raven.sqdev.pluginManager.SQDevPluginManager; +import raven.sqdev.pluginManagement.SQDevPluginManager; /** * This class provides functions for dealing with SQDev preferences @@ -273,4 +273,29 @@ public static String getDefaultProfile() { public static String getDefaultTerrain() { return getPreferenceStore().getString(SQDevPreferenceConstants.SQDEV_INFO_DEFAULT_TERRAIN); } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_COLLECTION_STARTCOMMAND + * preference that holds the first command in the BIKI that should be + * processed + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static String getFirstCommand() { + return getPreferenceStore() + .getString(SQDevPreferenceConstants.SQDEV_COLLECTION_STARTCOMMAND); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_COLLECTION_ENDCOMMAND + * preference that holds the last command in the BIKI that should be + * processed + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static String getLastCommand() { + return getPreferenceStore().getString(SQDevPreferenceConstants.SQDEV_COLLECTION_ENDCOMMAND); + } } diff --git a/plugin/Raven.SQDev.Wizards/bin/raven/sqdev/wizards/activator/Activator.class b/plugin/Raven.SQDev.Wizards/bin/raven/sqdev/wizards/activator/Activator.class index 3a7bc8c8b2be1deb7690574151842b347f0e476d..be4f6d81c5fc900e481c3df4ca7d3c6f899e4c02 100644 GIT binary patch delta 79 zcmbQov4ms87Die9qQtV)JpJOrl+-f)f}GOy%sk)3yu|d>+|<01$>$i=6^u1BeefyT JEX2ga1OS%m9HamM delta 36 pcmZ3&F^^-z7Dh&$$$uCn7>g!fWK?G~nEaDb8q5~ntj+Y35dh^J3@QKs diff --git a/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java b/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java index 7e30608d..28743b79 100644 --- a/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java +++ b/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java @@ -3,7 +3,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManager.SQDevPluginManager; +import raven.sqdev.pluginManagement.SQDevPluginManager; public class Activator extends AbstractUIPlugin { diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class index e17c769b8e4aa7abed859e9b9840cb521832b7db..29c6ab3f9cc5ac8179227827acf316aa17af0eb3 100644 GIT binary patch delta 41 qcmeC-oW!|d10$pUX-n)_6h+2 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class index 900ba935a82d77dab660297781f56d95eb94220e..18046867ab4f8958a191cc5dd8b0c694645063a9 100644 GIT binary patch delta 784 zcma)(OHWfl7>1u|ZO@?`lvF`9iV^}+s%?muXiVIYpeDpiP!TqIXb+{(o&%@H0^X{4 zzaYveiuZ*p-N2@xCK$J_{2MOa8{%+@(HIjqUuNE!_j{lD=G)ruRpnpiKg3YphHf!2Roi2gj?8@mR z1vUS0Sa$N){cb_opyOte$DFo=Ygx7+kniS(L<(k>< zbjHfnZEhIay(fWcfs1lf+uLGu$>1{80^M_#dT3k`7>k|L zPP|1Cg&1LQpuGE`K#(1D{Ur;Yc_4iLkY} znpUSiLaOH3DEEZ=YWMS+1H9!RrAn<_@?%h@b{cO;(IY>F))msT^tFD(?ugFPKSMq| zT;yDlg3?AhqBC4Aa&3}8bSivnN?HAjA(d);&_7@@y0Vhb38 K7qCLny!;8pIJe>e delta 614 zcma)&O;1xn6o#L6A(9fH5n*GZv=thHu0%IRRz@Wl65Qw&ZrfXGtMpp2epE%p zZ;(-l|AKBx)x^ZD3m5(Y*DhU}7~>QgqpsYXne%4O`#y8N#lQA-ef;_MJ#df>i6uCy zCq;Zs?5m%Q+xoLTE-vU@vOhMb@E8-=SugO46-ic)%RPfW^OC%vEALj^biplV(^J8M zU(6~BT+|hLs3Sv35$2MhM}M%o!-;8!1^r3xbut8sD^&D%d3YkjqT(8Z0w*Z#cu1}b z)V8xBI&FG`hCtK3r5xNUH}MZX-B1)-tDS%WtdUJd!-rbte^i%oF{^Ip!?$ zO!1r*os6VQ$Vz045SCfShPI;Xopp1wh?-iYU%!dY*N)R+ zy55~PC^}6iS>+t(5k?(g(45k!wYJl6%xyAz;vJcpRFm8m#n|Nru{)b)Fti=mYc>X_u$g2xQw(v2B(>>3@`u~`Hv3uPp2@v$MjXTsk`mw0B!1H@ vwP{A1JZSK=!RlW``ag-f!8LfZ#@FKj8AizIBdTxUpZt+lzTlPNu~`2FrZa%5 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class index 27ccceb521cc42b7451f3f5744f2fa2adcbe41e1..e84ae7f64ea3ed0b4ed4d1dc44895c96cc691da6 100644 GIT binary patch delta 125 zcmaDW{!x5`1Q+AE$&y?T(9}$&K7O005~QO8@`> delta 121 zcmew;{#Ja01Q+9}$&y?CZf4GzIp3Uf<~wJ;egEG7L=>jJWjmQJ;_eMDcfA zaT#*$C&7T`?yC(xY6~59ewsRDsIJ=IMV6s>5R3vp3gp1w=^gOUxR_!n{n~v!lrrc= zoMFoB3tfFgL0c0?Z8Er{AgcC^WT>=aHSl>Di9~Z>9~=Kz^atE%|HaUlSQ2>ZnUKOf zXLwutkD&jGQ{QFCuE%{o4TgdT7Z1JlAiAZlt zO0L$UKx?jDtS~&8FiBLXI~*DpkSP{zy8y+KZ5Dc(85((bWSt>xjn)pyLSyL!vyJ5w z6dRvW`j`SQ)0|5WP*o7&3a#xyg5xT#kz_>1+}PDNA+4?4_=Msq=06~Bwd^S>)|~_E xZZ?gUkh>$4pnr2&9=oijSXLt7JyJ8cj|U{PsG)&n(&owXkfi-;XCjSD>JLTvDOmsj literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..bd94941d10e4c1458710f461cece971824f0ec7e GIT binary patch literal 3584 zcmbVOYkM2T6@JH-v$nEH97CW92{A+jUt(`eNGVnb7}+i&@&(&+a40b=X)JFn?TFo# zFVGv8UZC^}EfB6P@bDFAv6H3`eCJ>Ai4XY!d~0||l5NQj367q}o}Du@XXc#qp7)%u z{{P=E0Njg@4AcqS@7eRxwfv_ua^5O^8%bZu#r3z42k zkAaZD9m>mEGM#e@zO>THla^O>11B%7b1LOqkE)cwwqVxrBR#w;af6pd1&nz+7fA)K zKx?A)qQv zDG-XOjBJ9y4igR7roVQXFwhuAJ$9RDLW{tjw#~}*;av&GmBYn+N_rD^DklY65-M%y zCT-8r^NKK}{V5Q=QPUzlbkX*R?J9REuZsRrea|Lq1?m|}fswWvyK7<`AN5q$lfFNs z=x^mk+pn>AJg|eJA8o{bf!)bM#t!Jz);YPfpuCK~9k-*^z(Ilb>hNCkIum!`PJyPB z%sTFb?av9^auwIc+b0b~1iGuy=eRQ}rgAx%4jknY=Yuho&)aUMB2=D%!vbc>FRl!% z94lrAGON6$-tn~O6ttn!74`mf zpO?3%kA-m;c8Af4E(1pdBGqpz22QS=dFxr1q|8J&EW(6fA9OrFsHhaUxvhP30JZWS z6ZhyNJ9#8wubl|v5bo7rJT7p&;<1X2(anlBOWG&3hWkwX1otyF(`7#joY@*ys%_p7 zkCaV5IaS6+g6@qPAZS}k(QuSC=;Y*S&j}=>^uTJAD)L4=C~z#+YbAZ@`PP_XIt8tL z89Q(FOMfm<1uKv~k5=pN4i~P^8WS+v-#vR73%9d=v=-rx>7B%gR=n7}7-1u%Kf1D^#{~{l zzhfOZal$*L78{WixNXp;yE3hI&|2J>c43U+v^Mu~fsU)>PF3s&7SobYCc$byjNy!l zC-5^;o+?Q41YZ;n<1C&sFfDM?I-jhaGhu5Jb`{8`0ofouH{sc7vSk|5Kt|x;_hx>X zJ50FOy8i!?l%2Lr${KWs^9>jz4zr`{bL{LmvV!JMOFM7k|8VI9 zlafq%Gv~LI=FQl{Fa2xAt@u$%%ULX#8k`46+EI_N~q?;hCw9j{jii3VyzfUv*x@3uLv1PkKYEJATOi(3e}- z{TY7y3EkaJ4XYmSMR1fXQ=NS|rN$KO*fhoH04ED0}?C1O-$3q+=JaGim z=;3%APvHSpnm(45eq>m%B}?ZFHO%s~!yR)Z`W#-s0`GKq(>eT!vbQPwH)R(|rvKyo zE6%^>{2Owh4&X@*2V7nY;AQ-g=h(U70RD`>FqFq(;;;A{-_0fgui`bzM%h#R9si*0 zb)Fu-lVr&3EuF Z#}MAbKk*^I_HpGsj`}Cc1I;M?z60F713mx% literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c240a317f19d601a55b87b357b97d37672061e90 GIT binary patch literal 2080 zcmbVNZBrXn7(F+MY=~P3sjb>#8%j!(Kv|=$6)7sEX-%6@N`MN!%xreA$(FFY?!6o8 zCrAH`pF3lLu`~VvXZ%a8&)q~NfL4>4?A^Wh+2{3~v%kIgv+_ktce6vZ{`or72Q*(s1^4HM{9pp+H5)6}G&@{N!c6`ANu`3NuzN9c} zUMTpYZTgZ23`4Tzh}^prt2$7yc?PXxwsQ^XGGwbqW9~Y3lT*-Jp_HCW#zQw9*O4DH zY~=?G_^KF%4Ti*$XY*k&oYL_chSc4t4h_i^;uzC0j0{6OuS`d)j?0(Bodyrq%to6t zWU8KJwl~bcQO~{2gz6K+++a!PN~%vgs`KkU!&LrQ5r>CUR)d-^Y@~1w;~LI0T=@6C z>Uaki7*c}Eva6D|sRjA1!iI({P37=lL+P}QRW7_Ruz1aM2`@nk7crK^BtueiA!p?i znZ#xCr=GGc0^Ni%xuPSF0>en?+ot4yI$^kyuRbH4*B`hYHXXMMg&hK3S60eh;fSEvgNcq$u}G*O zLicuPF!@41BmS$idDVs`9k)^byOt8eWpa2J>?aqK!UFE<_)In8T)>--ATe8NdxF

    @JZQF70+m!19W&Qf_}~PBjM3N64jUdi8;_z>Jg*wI4bk;fA})YD%ugn%C1Gdq8`<_ zY8 zCf@3~`kewLXm7FjGe+Wjc>6gnZti2EHj}xO$?ak4CnT4z?xFY`#%3{7QfB*j{{SBx z;N}5t?cq*ztvn@%X>xm>geeY{#1v%=+@<_0baJ20Y8b}@s&W-2d{5N-fmrZklwh%& zL@z-~2g_usJeIJ6hg8luS*)T?zSqd>S;SsasJI5EVO=9drFA+%r;q3~hR?A{Yl3*O Rg|Fx?Lwl+P>SuJ9KLC4)Lo)yX literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.class new file mode 100644 index 0000000000000000000000000000000000000000..401b970606a0035dc22120f936a8882b66a620c2 GIT binary patch literal 2827 zcmcImX>-$76g@97$QT2u=>lbmQj%c1*dj4|C`&eK;!sFTXeeD|>%|sPB%>uMpUZ#g z*Df>8OquD&cBVh7^hh>|o!AUtYR_o7@4frpz31F>_0PY5{0ZO^HWUm9Tz2(MX=~mK zLvCsfSFTA{+EwXk4ZX(e@}pU~xoCRThdV3uHqF(z0}0I)SHlWLDKHPT;G4U8)T$sF`*G0v{#uF+LGE>PdfA zdR5nKggN3sy7XM%)HOP)Y0JKA+O=qllLDs}EP$J=X~u0)<`uD>x708G>yZE=p z;us<5k*9pbx%}?o^PaD}{*1G+q1#3r=ZNe0yy<#A1B`4p;usTnRc7XFeM73wT9n1L z&N-@SM@Gx!y7u#QaiK_~?yFwi2`odcF!ioOmV463tHsETD^=4|ZAT5gB+eiXuaXw^UTHslajP3`mhozJHok?d38jffBl1PU@W|R0F7X*&$ zhOsxH0(0s9eBOslu_r1Kqw)eHeSnd+u>;FRl61VJccC&V@Y7yYtd1#ff%u<6QE-XH z*)OZpf$uv}v0X{xDz1@Ut-_dbY+t8;d-H?+ezFBD_>#dm*tOs9Mic>XN9U)DUt>&T=ku3G$eOk zEr-AL!%Q3Ea7p81^dF&cT~c=yiE1Qyv3QQ3=8-=iB&um7-AVNQq*OM8Y3g#WcIT_ zvaM1;yC%{Rvq#Nt^$JRK*UsIIL?GGbNn5#xyC!!st)W!!~DyRya>_oroBnsG2&vXv&+gl(`Vp2~>DG%e_$>?IlPE!vv@pjF`{=)0Mi0oN* z0=FvX$!>wueZEfeVaH_piZ;QSp%8h}!w4Ba$PXX-2x-r!7@zt1!0REt6?hlCAINSa z@hcw&kmNPNJCNq&436+A*_wo-IL0@U0Uz*62V#=WVzj-;rczCOm`$B%;?u?KYn)w8 zsj1IWqZhU@-bAKl$)&W^MBDNjh1F~mmxtopxc(rQy4l37Td_ryR8GXilI2xP;2E6W4yNj_#N}R033{rW6^mC1((!e iwwH`XV|2{~{lYC;knLGP>+@)A9Tx9lLtWyXzyAQBHy&{S literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class index 4b46abe07497d31fd9725b5fb65f4004a2ef7788..5832474ab570d433a6537d5fc8b2cbcd12ff8e3e 100644 GIT binary patch delta 4093 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 xn(CuUV7^E5RO|eZ_C6xY$3 + + diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java index 990f0b4e..dc4d33b5 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java @@ -3,7 +3,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManager.SQDevPluginManager; +import raven.sqdev.pluginManagement.SQDevPluginManager; /** * The activator class controls the plug-in life cycle diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java index 462f9307..0adf76a6 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java @@ -66,6 +66,10 @@ public void initializeDefaultPreferences() { // set autoClean store.setDefault(SQDevPreferenceConstants.SQDEV_EXPORT_AUTOCLEAN, false); + + // set start and end command for keyword update + store.setDefault(SQDevPreferenceConstants.SQDEV_COLLECTION_STARTCOMMAND, "abs"); + store.setDefault(SQDevPreferenceConstants.SQDEV_COLLECTION_ENDCOMMAND, "worldToScreen"); } /** diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java index 292989af..b590bc44 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java @@ -44,7 +44,8 @@ public void init(IWorkbench workbench) { addPreferenceEditor(enableBracketMatchEditor); addPreferenceEditor(new BooleanSQDevPreferenceEditor( - SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY, "&Enable autoComplete:", + SQDevPreferenceConstants.SQDEV_EDITOR_ENABLE_AUTOCOMPLETE_KEY, + "&Enable autoComplete:", "Enables/Disables autoComplete meaning that content assist will insert the proposal automatically if there is only one choice", behaviour)); diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java new file mode 100644 index 00000000..de512222 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java @@ -0,0 +1,134 @@ +package raven.sqdev.preferences.pages; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.net.MalformedURLException; +import java.net.URL; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.PlatformUI; + +import raven.sqdev.constants.SQDevPreferenceConstants; +import raven.sqdev.exceptions.SQDevCollectionException; +import raven.sqdev.exceptions.SQDevException; +import raven.sqdev.infoCollection.SQFCommandCollector; +import raven.sqdev.infoCollection.base.KeywordList; +import raven.sqdev.pluginManagement.SQDevEclipseEventManager; +import raven.sqdev.preferences.preferenceEditors.ValueSQDevPreferenceEditor; +import raven.sqdev.util.ResourceManager; +import raven.sqdev.util.SQDevInfobox; +import raven.sqdev.util.SQDevPreferenceUtil; + +public class SQDevMiscPreferencePage extends SQDevPreferencePage { + /** + * The job used for updating the keywords + */ + private static Job collectionJob; + + public SQDevMiscPreferencePage() { + super(); + } + + @Override + public void init(IWorkbench workbench) { + setDescription("Miscellaneous preferences about the plugin"); + + + Group keywordGroup = createGroup("Keyword collection/updating"); + + addPreferenceEditor(new ValueSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_COLLECTION_STARTCOMMAND, "&First command:", + "The name of the first command in the list in the BIKI that should be" + + " processed. If there is no urgent need do not change this value!", + keywordGroup)); + + addPreferenceEditor(new ValueSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_COLLECTION_ENDCOMMAND, "&Last command:", + "The name of the last command in the list in the BIKI that should be" + + " processed. If there is no urgent need do not change this value!", + keywordGroup)); + + // SQF keyword collection + Button btn = new Button(createContainer(), SWT.PUSH); + btn.setText("Update keywords"); + btn.setToolTipText("Updates the SQF keywords according to the BIKI. This may take a while"); + btn.setEnabled(collectionJob == null || collectionJob.getResult() != null); + + btn.addMouseListener(new MouseAdapter() { + @Override + public void mouseUp(MouseEvent e) { + btn.setEnabled(false); + + ResourceManager manager = new ResourceManager(); + try { + manager.updateResource("test.txt", "test here!"); + //TODO test + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + collectionJob = new Job("Updating keywords") { + @Override + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask("Updating keywords", IProgressMonitor.UNKNOWN); + + try { + KeywordList list = new SQFCommandCollector( + new URL("https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3"), + SQDevPreferenceUtil.getFirstCommand(), + SQDevPreferenceUtil.getLastCommand()).collect(monitor); + + // TODO: store keywords + restart util plugin + Writer writer = new FileWriter(new File( + "C:/Users/Robert Adam/Desktop/tester/KeywordList.txt")); + writer.write(list.getSaveableFormat()); + writer.close(); + + } catch (/* MalformedURLException | */ SQDevCollectionException + | IOException e) { + SQDevInfobox info = new SQDevInfobox("Failed at updating keywords", e); + info.open(); + + e.printStackTrace(); + return Status.CANCEL_STATUS; + } finally { + if (!PlatformUI.getWorkbench().getDisplay().isDisposed()) { + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + @Override + public void run() { + if (!btn.isDisposed()) { + btn.setEnabled(true); + } + } + }); + } + + monitor.done(); + } + + return Status.OK_STATUS; + } + }; + + // make sure eclipse is not closed with this job running + SQDevEclipseEventManager.getManager().registerCloseSuspendingJob(collectionJob); + + collectionJob.schedule(); + } + }); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java index a3598fc5..ed218d8f 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java @@ -13,7 +13,6 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import raven.sqdev.exceptions.SQDevException; @@ -29,9 +28,9 @@ * LayoutManager that lays out the different preferenceEditors. * * @author Raven - * + * */ -public class SQDevPreferencePage extends PreferencePage +public abstract class SQDevPreferencePage extends PreferencePage implements ISQDevPreferencePage, ISQDevPreferenceEditorListener { private SQDevPreferenceComposite SQDevPreferencePageContainer; @@ -60,10 +59,6 @@ protected Control createContents(Composite parent) { return SQDevPreferencePageContainer; } - @Override - public void init(IWorkbench workbench) { - } - /** * Sets the page up */ @@ -193,7 +188,7 @@ public Composite createDefaultComposite(Composite parent) { container.setLayout(layout); container.setFont(parent.getFont()); - container.setLayoutData(new GridData(GridData.FILL_BOTH)); + container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return container; } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ValueSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ValueSQDevPreferenceEditor.java new file mode 100644 index 00000000..1bb14d4a --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ValueSQDevPreferenceEditor.java @@ -0,0 +1,216 @@ +package raven.sqdev.preferences.preferenceEditors; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; + +import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.EStatus; +import raven.sqdev.preferences.util.SQDevChangeEvent; + +/** + * A preference editor for simple String values + * + * @author Raven + * + */ +public class ValueSQDevPreferenceEditor extends AbstractSQDevPreferenceEditor { + + /** + * The text for the value + */ + private Text valueText; + + /** + * The initial content of this editor + */ + private String initialContent; + + /** + * Creates a new SQDevPreferenceEditor
    + * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + */ + public ValueSQDevPreferenceEditor(String preferenceKey, String labelText, Composite container) { + super(preferenceKey, labelText, container); + } + + /** + * Creates a new SQDevPreferenceEditor
    + * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + */ + public ValueSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container) { + super(preferenceKey, labelText, tooltip, container); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public ValueSQDevPreferenceEditor(String preferenceKey, String labelText, Composite container, + ISQDevPreferencePage page) { + super(preferenceKey, labelText, container, page); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public ValueSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container, ISQDevPreferencePage page) { + super(preferenceKey, labelText, tooltip, container, page); + } + + @Override + public boolean needsSave() { + return willNeedSave(valueText.getText()); + } + + @Override + public void doLoad() { + load(getPreferenceStore().getString(getPreferenceKey())); + } + + @Override + public void doLoadDefault() { + load(getPreferenceStore().getDefaultString(getPreferenceKey())); + } + + private void load(String content) { + Assert.isNotNull(content); + Assert.isTrue(!content.isEmpty()); + + if (valueText == null || valueText.isDisposed()) { + initialContent = content; + } else { + valueText.setText(content); + + evaluateInput(); + updateSaveStatus(content); + } + + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_LOADED)); + } + + @Override + public boolean doSave() { + super.doSave(); + + getPreferenceStore().setValue(getPreferenceKey(), valueText.getText()); + + updateSaveStatus(valueText.getText()); + + return true; + }; + + @Override + public void evaluateInput() { + EStatus status = EStatus.OK; + + if (valueText.getText().isEmpty()) { + status = EStatus.ERROR; + status.setHint("Value may not be empty"); + + setStatus(status); + + valueText.setBackground( + new Color(PlatformUI.getWorkbench().getDisplay(), 255, 153, 153)); + return; + } + + valueText.setBackground( + PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_WHITE)); + setStatus(status); + } + + @Override + public int getComponentCount() { + return 2; + } + + @Override + public void createComponents(Composite container) { + // name label + label = new Label(container, SWT.NULL); + label.setText(getLabelText()); + label.setToolTipText(getTooltip()); + + valueText = new Text(container, SWT.SINGLE | SWT.BORDER); + valueText.setToolTipText(getTooltip()); + valueText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + valueText.addModifyListener(new ModifyListener() { + + @Override + public void modifyText(ModifyEvent e) { + updateSaveStatus(((Text) e.widget).getText()); + evaluateInput(); + } + }); + + if (initialContent == null) { + doLoad(); + } else { + load(initialContent); + } + } + + @Override + public boolean willNeedSave(String content) { + if (getPreferenceStore().getString(getPreferenceKey()).equals(content)) { + return false; + } else { + return true; + } + } + +} From 9ddbfd284b8741b12b8a7d149e681e025df3ca63 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Sun, 24 Apr 2016 18:43:38 +0200 Subject: [PATCH 3/4] tweaked command collection; added additional information support; added hover assist; added keyword-wiki-connection --- .../editors/BasicCompletionProposal$1.class | Bin 0 -> 1051 bytes .../editors/BasicCompletionProposal$2.class | Bin 0 -> 1329 bytes .../editors/BasicCompletionProposal.class | Bin 0 -> 4726 bytes .../editors/BasicContentAssistProcessor.class | Bin 4331 -> 4201 bytes .../editors/BasicInformationControl$1.class | Bin 0 -> 1011 bytes .../editors/BasicInformationControl$2.class | Bin 0 -> 1520 bytes .../editors/BasicInformationControl$3.class | Bin 0 -> 1960 bytes ...asicInformationControl$InfoComposite.class | Bin 0 -> 765 bytes .../editors/BasicInformationControl.class | Bin 0 -> 6911 bytes .../BasicSourceViewerConfiguration.class | Bin 5931 -> 6266 bytes .../sqdev/editors/BasicTextHover$1.class | Bin 0 -> 991 bytes .../raven/sqdev/editors/BasicTextHover.class | Bin 0 -> 2989 bytes .../sqdev/editors/activator/Activator.class | Bin 1339 -> 1329 bytes .../editors/BasicCompletionProposal.java | 215 +++++++ .../editors/BasicContentAssistProcessor.java | 14 +- .../editors/BasicInformationControl.java | 342 +++++++++++ .../BasicSourceViewerConfiguration.java | 7 + .../raven/sqdev/editors/BasicTextHover.java | 78 +++ .../sqdev/editors/activator/Activator.java | 8 +- plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF | 11 +- .../bin/raven/sqdev/activator/Activator.class | Bin 0 -> 892 bytes .../sqdev/constants/ESQDevPlugin$1.class | Bin 0 -> 588 bytes .../sqdev/constants/ESQDevPlugin$2.class | Bin 0 -> 585 bytes .../sqdev/constants/ESQDevPlugin$3.class | Bin 0 -> 598 bytes .../sqdev/constants/ESQDevPlugin$4.class | Bin 0 -> 585 bytes .../sqdev/constants/ESQDevPlugin$5.class | Bin 0 -> 588 bytes .../sqdev/constants/ESQDevPlugin$6.class | Bin 0 -> 592 bytes .../raven/sqdev/constants/ESQDevPlugin.class | Bin 0 -> 2625 bytes .../raven/sqdev/constants/TextConstants.class | Bin 557 -> 562 bytes .../exceptions/SQDevSyntaxException.class | Bin 0 -> 1039 bytes .../infoCollection/SQFCommandCollector.class | Bin 17707 -> 17970 bytes .../sqdev/infoCollection/base/Keyword.class | Bin 4182 -> 4199 bytes .../infoCollection/base/KeywordList.class | Bin 5347 -> 5694 bytes .../infoCollection/base/SQFCommand.class | Bin 12045 -> 12707 bytes .../IAdditionalProposalInformation.class | Bin 0 -> 352 bytes .../sqdev/interfaces/IPluginListener.class | Bin 0 -> 212 bytes .../IProposalInformationCategory.class | Bin 0 -> 295 bytes .../sqdev/interfaces/IVersionListener.class | Bin 0 -> 204 bytes ...bstractAdditionalProposalInformation.class | Bin 0 -> 3589 bytes .../bin/raven/sqdev/misc/Pair.class | Bin 0 -> 910 bytes .../bin/raven/sqdev/misc/SQDev.class | Bin 0 -> 6571 bytes .../bin/raven/sqdev/misc/SQDevComposite.class | Bin 0 -> 439 bytes .../StringProposalInformationCategory.class | Bin 0 -> 1904 bytes .../StyledProposalInformationCategory.class | Bin 0 -> 3654 bytes .../bin/raven/sqdev/misc/StyledRegion.class | Bin 0 -> 2188 bytes .../raven/sqdev/misc/VersionChangeEvent.class | Bin 0 -> 1363 bytes .../pluginManager/SQDevPluginManager.class | Bin 3170 -> 4143 bytes .../bin/raven/sqdev/styles/BoldStyle.class | Bin 0 -> 672 bytes .../bin/raven/sqdev/styles/CodeStyle.class | Bin 0 -> 1784 bytes .../bin/raven/sqdev/styles/SQDevStyle.class | Bin 0 -> 3652 bytes plugin/Raven.SQDev.Misc/build.properties | 3 +- plugin/Raven.SQDev.Misc/plugin.xml | 5 + .../src/raven/sqdev/activator/Activator.java | 34 ++ .../raven/sqdev/constants/ESQDevPlugin.java | 119 ++++ .../raven/sqdev/constants/TextConstants.java | 2 +- .../exceptions/SQDevSyntaxException.java | 33 ++ .../infoCollection/SQFCommandCollector.java | 12 +- .../sqdev/infoCollection/base/Keyword.java | 4 + .../infoCollection/base/KeywordList.java | 45 +- .../sqdev/infoCollection/base/SQFCommand.java | 49 +- .../IAdditionalProposalInformation.java | 38 ++ .../sqdev/interfaces/IPluginListener.java | 29 + .../IProposalInformationCategory.java | 31 + .../sqdev/interfaces/IVersionListener.java | 22 + ...AbstractAdditionalProposalInformation.java | 154 +++++ .../src/raven/sqdev/misc/Pair.java | 36 ++ .../src/raven/sqdev/misc/SQDev.java | 296 ++++++++++ .../src/raven/sqdev/misc/SQDevComposite.java | 26 + .../StringProposalInformationCategory.java | 65 +++ .../StyledProposalInformationCategory.java | 134 +++++ .../src/raven/sqdev/misc/StyledRegion.java | 88 +++ .../raven/sqdev/misc/VersionChangeEvent.java | 67 +++ .../pluginManager/SQDevPluginManager.java | 45 +- .../src/raven/sqdev/styles/BoldStyle.java | 23 + .../src/raven/sqdev/styles/CodeStyle.java | 48 ++ .../src/raven/sqdev/styles/SQDevStyle.java | 228 ++++++++ .../bin/raven/sqdev/activator/Activator.class | Bin 1307 -> 1297 bytes .../sqfeditor/SQFKeywordProvider.class | Bin 1219 -> 1308 bytes .../src/raven/sqdev/activator/Activator.java | 8 +- .../editors/sqfeditor/SQFKeywordProvider.java | 4 +- plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF | 10 +- .../raven/sqdev/actions/WikiAction$1.class | Bin 0 -> 1075 bytes .../bin/raven/sqdev/actions/WikiAction.class | Bin 0 -> 1762 bytes .../bin/raven/sqdev/activator/Activator.class | Bin 1021 -> 1015 bytes ...AdditionalKeywordProposalInformation.class | Bin 0 -> 3862 bytes .../pluginManagement/ResourceManager.class | Bin 0 -> 8572 bytes .../SQDevEclipseEventManager$1$1.class | Bin 0 -> 3191 bytes .../SQDevEclipseEventManager$1.class | Bin 0 -> 2327 bytes .../SQDevEclipseEventManager.class | Bin 0 -> 1601 bytes .../pluginManagement/VersionManager.class | Bin 0 -> 4719 bytes .../raven/sqdev/startup/SQDevStarter.class | Bin 0 -> 2201 bytes .../bin/raven/sqdev/util/EditorUtil.class | Bin 1412 -> 1940 bytes .../sqdev/util/SQDevPreferenceUtil.class | Bin 5617 -> 5611 bytes plugin/Raven.SQDev.Util/build.properties | 3 +- plugin/Raven.SQDev.Util/plugin.xml | 11 + .../resources/icons/sqdevExportIcon.png | Bin 0 -> 483 bytes .../resources/icons/sqdevFileIcon.png | Bin 0 -> 323 bytes .../resources/icons/sqdevImportIcon.png | Bin 0 -> 459 bytes .../resources/icons/sqdevWikiIcon.png | Bin 0 -> 515 bytes .../src/raven/sqdev/actions/WikiAction.java | 66 +++ .../src/raven/sqdev/activator/Activator.java | 20 +- .../AdditionalKeywordProposalInformation.java | 137 +++++ .../pluginManagement/ResourceManager.java | 531 ++++++++++++++++++ .../SQDevEclipseEventManager.java | 136 +++++ .../pluginManagement/VersionManager.java | 158 ++++++ .../src/raven/sqdev/startup/SQDevStarter.java | 60 ++ .../src/raven/sqdev/util/EditorUtil.java | 52 +- .../raven/sqdev/util/SQDevPreferenceUtil.java | 2 +- .../sqdev/wizards/activator/Activator.class | Bin 1060 -> 1054 bytes .../sqdev/wizards/activator/Activator.java | 2 +- .../preferences/activator/Activator.class | Bin 1170 -> 1160 bytes .../pages/SQDevMiscPreferencePage$1.class | Bin 2080 -> 1199 bytes .../pages/SQDevMiscPreferencePage$2$1.class | Bin 0 -> 1416 bytes .../pages/SQDevMiscPreferencePage$2.class | Bin 0 -> 4176 bytes .../pages/SQDevMiscPreferencePage.class | Bin 2827 -> 3478 bytes .../preferences/activator/Activator.java | 8 +- .../pages/SQDevMiscPreferencePage.java | 163 +++--- 117 files changed, 3538 insertions(+), 144 deletions(-) create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$1.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$2.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$1.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$2.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$3.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$InfoComposite.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextHover$1.class create mode 100644 plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextHover.class create mode 100644 plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicCompletionProposal.java create mode 100644 plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicInformationControl.java create mode 100644 plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextHover.java create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/activator/Activator.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$1.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$2.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$3.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$4.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$5.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$6.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/exceptions/SQDevSyntaxException.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IAdditionalProposalInformation.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IPluginListener.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IProposalInformationCategory.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IVersionListener.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/AbstractAdditionalProposalInformation.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/Pair.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/SQDev.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/SQDevComposite.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StringProposalInformationCategory.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StyledProposalInformationCategory.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StyledRegion.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/VersionChangeEvent.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/BoldStyle.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/CodeStyle.class create mode 100644 plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/SQDevStyle.class create mode 100644 plugin/Raven.SQDev.Misc/plugin.xml create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/activator/Activator.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/ESQDevPlugin.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevSyntaxException.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IAdditionalProposalInformation.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IPluginListener.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IProposalInformationCategory.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IVersionListener.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/AbstractAdditionalProposalInformation.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/Pair.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDev.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDevComposite.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StringProposalInformationCategory.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledProposalInformationCategory.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledRegion.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/VersionChangeEvent.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/BoldStyle.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/CodeStyle.java create mode 100644 plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/SQDevStyle.java create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/actions/WikiAction$1.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/actions/WikiAction.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/miscellaneous/AdditionalKeywordProposalInformation.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/ResourceManager.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager$1$1.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager$1.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/VersionManager.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/startup/SQDevStarter.class create mode 100644 plugin/Raven.SQDev.Util/plugin.xml create mode 100644 plugin/Raven.SQDev.Util/resources/icons/sqdevExportIcon.png create mode 100644 plugin/Raven.SQDev.Util/resources/icons/sqdevFileIcon.png create mode 100644 plugin/Raven.SQDev.Util/resources/icons/sqdevImportIcon.png create mode 100644 plugin/Raven.SQDev.Util/resources/icons/sqdevWikiIcon.png create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/actions/WikiAction.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/miscellaneous/AdditionalKeywordProposalInformation.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/ResourceManager.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/VersionManager.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/startup/SQDevStarter.java create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$2$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$2.class diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$1.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e282acb8744009af6ff150da170dcc09957462e8 GIT binary patch literal 1051 zcmb7DZEI686n@gyUR$rOPTi(Xr?YCeqFF&fsQSU8Q0S&G8Tc{1&DxaPq$XMCZxTP~ z2N@{%1N>3q$+d{1Y|;zi=A4|D=RA4x^Vhc@03P9fgdD>ID<)EN_r515T=tYV*6|m@ zsib8_<5YTO^c!o&#)-7rh)`gt48=t7ROmi`-5turM<_BhjO}xoq-yLWAMT4paxXu4 z-fruCV@DzsY8maVNn2J5>cdd<1Ldk)grYMCj3y;MRa*Jy3|qCiGB@@Z3N6!zp~8@_g@A>Q(sJiu)Rp$F=%$ikv11aE?g^`cJ#`iWcm_TXfNF!luOwl9 zIm-*fcCGU-jqcF%L)Gg`@A&ROrfGBI*!k%+HzTYt)K6q~7C;%xxE8p$&anPpC`46p zEUeU?VeJ^MS=eoIsRTvQ>&nq8p-kR$w0lB!@RT>} zUlDH};lh_J=3?+=Cn5VI7Rin&CwMR6GW{8@U};+A8Fk6(e#i2=`Vp>vrhptmkz$tg lDJ!t_CumwAz*xl%I?v-~7QaS-fdX#h4(`z|fDA3^`wcFPBy0cx literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$2.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$2.class new file mode 100644 index 0000000000000000000000000000000000000000..a2a5962692ac3d01f100a5b4d2d82f4f71ff0c15 GIT binary patch literal 1329 zcmb7ET~pIQ6g^9;u_Z#OilQJ06Ul&|)7P49(PUD-iH zINI9e@52~ZDr}`OiAx49GEDX2Tf*A#>~Ke_=Ie@yDO_eS>pXlT)!S|EI}L`Je4#G| zQ7ZpGmqsy-s|IF{>mGtk%wmoqO}bBo4m`WVuy8~*Dtu441kqL(R7ztWIRgs}v%NK+ z05x$Piwt8#uXS|Dn`P-q+93=1N`LWv{fR-P6!KU$P+*upn&o&WO%!p1euWyw>q@qK zmtn52Jtt&fNQM8Ff+05;ez;(iq9$9);m<|1gQf=v4go}%mZs< zj{KFN!-Qork;&+7gl+?8D4wFX`!tUt>E+@+JwCzw5M#!pSp0<%?*}q8H;EHPCy=F) z;T+C)RbEk!NF`hRj0<0Ig&~vrh->>;I#kOdNr<16^%uryoWSo`b@G7ORV59qV3l+e eun0ebHQb~ziFG;zWxG_RB}TA literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal.class new file mode 100644 index 0000000000000000000000000000000000000000..e13bede0208f9bd05f42f48abdf2fc599d577be4 GIT binary patch literal 4726 zcmb_fZBrZ96@D%ftdKXvrok8&0(FUlL}EF9Ngd-CY>ZpQU~oln?W8oz>H=#^T6uTH zOVgxpNt3p2`kJ?<-`Y-RI{lE$7&{F!oqlOQWcsy#r|olh7qKhA#+@*X?(XWI=bZDL zXV1C%>_4CW4ZtycsG&(<&@mQeCFkBM%Eg>4TAuB=x$}l=nIm?&T9Te+S0)|1YP&{B zLsDS(4P(*Bm5j=KZesR^G(8P10w-)|J}1qRRdr?V#++fwoF|vPoM~4)S@8_lwOlWk z-wHD&aQ^?b9$hB7%Mg!hNPiwU$2I7m2hOtsj}$GpS~6A&o?}(!1=`0pm5V^L1sB`-Jc z7}W*KbaQ#NgTCAS;w*dl%AD<#jllk7%sUXH-l-4z)z~i|Gs^RXI zQ&z?D&IlYD7>laVqREI|Dp6a6%FP;-)FrvHWIM&7d_FTRkQ}j#GL6U4r=eHi$sJnj z_!15Xr01m<;t4!9kl9?9H2QH+!xJ&J2j$W6BnB9JDJ(!@Ad}aS6*vDZ5_1)kbDADQVi1aivou)w+cZkkhGVJw@L|$huv~$sV{&*vQ=*Wxn}Iq6 zGBL~h2}xkz)?_J06L?NBdQyPp<^3s~(QsOzH~LPQwj*;+t>Rf_nLFpY((!bh#jrrD zsN+$zsjIK)*o{5v>UkaQ z!PS_KF9cVYbv%X+_3fmNM*@ql>)4A<^=wMVK6J4U6+FYdIc`*ak~Lfvcs!cNWgv07ybOc&4x6Sx z=K$5csjX(FHJBW2+rXVSib{N{xr{EGvKlnLR51)m;J|~!7SP#63Nma`0vC3YYYaEW z`=o7=3=P)(isNreV*xjnIw`JZrmtSF4#qN~CT*-C3!Gwe+lGWqgSpX~?^TMh{;(h= z4M?%z*9XdO?!OQpdff_QW4@>$9lJE*NP`Crf#VIZ(V}l_Mw)7D648G9fF9BROd1}R z6l==@hvV(_0k%{qb;dL%9XV$$Z=7JJ$hN@g9n?J^9Wf&dhEtHYYO-RgA-vnHAG6kH z{k|=n@f~*P?ck2Q@vP8AjE%7qoj0nxeNV^t)g(-L_WGgYY#ce(-14-acckl%+Z@=o zGZf9IKF+mr@GW1wnCR{g#X|!_EqE&>S!~cwc1v+AT5?J9j2f7P2PqA2k(|v^-)eIj zZ{jCP3O{Y=&LNiS9zT0XeH}^THkK6fFLeA8zaq6fw)r6n98*ndXR-DBCM1}eOSm52 zka$^w_hYN9D5Z44t~sW>XsP+yz0Dc^km{D~UinHzIwK_>%%!X01Lpfs5prw=q4G$@ zP?1D4G_+zDQfN}Mh(9r!)D-hq&M<%F1oKzUFMs9q@>fnQf91U5+D63v_#!{MdFK%` z$+a&#co#k0J?ir=zAV%#){wb2cn|zP^s$fd3_sib{ihkv8P3PE=*2LO@Od`C!BPJB zQGb0nj%VpbU8xA0{3{h>f=~D3EBsUuEHJNTu5H=D?w*dM;9tyN8}|bRW?2na22E3?p1s>+p~&%wj;TUOWCgGRg7o5T2?WU?b23pCEJx+MM1HafMV^W zU#l{ss4|mVtc-&La2ZdHJT3D3C33lpQLNw+zKtt*1y}JM4)0g}j9&_(t!F$_&v>Su z@k~AAnJ{DKr_L}wTQk0HT2#*J48!`VE2W7PSp^QF<-de#)gUzVvkDscs`hL6hNf5? z7Q2RpKFr@rxQ-VC7FoNb&v55p_6`ZTLq6_c^sjg+2~s)!F}EqfbYM25At>hSeD(%| zc*{?1uP=?xdTO00Lef$N#UIfxXtd_-9Ogr>7wJ{0seKI#*FwjaUQXP@jgR=W$>+Pp zcl~z6L3`and+0!*j7o@^IcSS zT$SfN^gQuTq}1{eKSmW$AfAA=-;<3$K*t{=fP2Dd6jyw$REQ2$6(Ao~kN8FF8oX=N z`C?;ee~uuv*7I7S`~rYsuIlA$5{;I3e9OMz+d8pLA+f3mulTRLpoCv-L`(cdVMfaI z>5kD}tJ8Lbs46+dSK%(c+Zf^BBe|vOxxI!TgwZ_5Rf$LyywGU;58pTtW^+BgX8aJZ z`)=RBk3yIi(c;7OuHj9k#ff|P@z`L3SNS#ER;<5$7e61|a1hk;GuH86=)u1uj(S5! k>IcZL@f$zBcYLPa#d}=$lkN981Am)rW!nz^ZU@W%0E9B90ssI2 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicContentAssistProcessor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicContentAssistProcessor.class index 29db48fd8cfd0502eecc92412ee199f905f6dd42..334b423020dc278a3d4f22fad67a2df14590bf7b 100644 GIT binary patch delta 1103 zcmY+C>rWh27{-5RZ?n4$P`Bv15p~yWbXQn0T8l1UwK!y;SY-23oXgynM1v%}`2e8WW>2G4|h3zxmM+@eClu5AV!-d7k$??|aUlso#?u ze);Fp_rNB;(eMdcWGc{bK7G)q$A?X4(6aaS8@6-djPF-pHBFaJfo?%)XvDBP96=yc z$aY5ALXXZP^a`Si)l;fCTP<6#G1Hmt*>4;+S`Im-a*LO5)96=)^<;-_8tO?WZG%9A4G$T4C_RGIRw*|_ACT}C{TZ~F+ zsM8u9FPl!u8tb>MajRmKJ@}Z8#kg8Z*&G{oMg;y$wh-k2N=}4|;Es$;MzeK=LUxxo z8Pnu72GS&invVHq@rGf7j<6Z zW%+ZsRUA7VX%A_a*O^2ju&Gm8vT9|drgQr-WWKi4PA3s@T@A1A;(8Y-ruc{8M@&O+bR7W>4%?u$v zQuO2+;o~)e=dIw+DEzEKbr4*nStGs34H^SWN<~;hXk4!>tumT=3K~V&yu>Z2SMdLu zcYlIU_*9;+Pvst39?3fyCH%jUd}|~5R!0(?H;u%4W@$nFaPK_lp7T8SIdf)y zuKT6l{QB?HUjn!A+2`i|K(uPqar<)l;ghq0Zv#{7xyvHW-HHl1-{9<;kW`^3mv^0E zMP*Z>V~f4RPHuNI*t?Te7jw66xB<`S$ljm+2iIj)&Bl6@5i%BA{1(hB zUHhG7EgoZBpN}+#wklTXSyiilQ000qTDiv0i(CP570Ei|qwbiPY)Yhky&V=4zFxWL z-Qg65@|mq}CO2-9W0yq0Oeo4_bsJ}N;B~e~h5akv9P4sHLuVm6HwX@l! zd1_^zuIT*VC~wny%(n2FHbu8yW>%j(Z}tUBIw%tr_*36dcKy_i&0i4nNO&YYTIZ2k zk2_Q0c(}!5L(t=%W%lqqJpsBQXE-05f6JjeU$3B*b#J= zXFZ-j$NssH!2Y1GTX|r4FsLdIDkbcmIq54zh3q55wN-x2)Jj@d#|qj>GQdp?(aIz% zIlyWTb1TP4F-IHo5}%daSKQ8btmQ}6^OLOKg!zX&D@AjYOj+I=RaDEAxnGr)`w1+`Plw4kuqIK&a&5;Q5|Z}Scjj*3vTR9&LZTxR;{ z67${5%vnLlq`sZ-MOGLzT%^UIcR`#*4V1xEvgFrm?lt6lGqB+=Iv2Q>$iLIYEYiYz zyswk7dX?7QvD%uYwgQW7DL&vs{k!D5^h~TKcziMHDMlaBRm^QHMj!J@G1}}$#tHEl H;M0EqyQmtP diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$1.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6b68050dbdc3dd1be1283c54f776d7a6e35e9acf GIT binary patch literal 1011 zcmb7DU279T6g`u~#KhI6Rokl7YMVmZpwobY5cR>J5Jg`fq&j z59osw6#N1HDDlo3q$Q|iVc5A}=bkQk>``M{;zaVv?TT zd)b-BXd+G(H45V#zngo_pAF&CkX zszAOT66U(v(5vIa9@#glmyp0hH;q-YudELC#90XB1>`IQYE34;9Eb0xXfN(4 zx)U!?bbmnJ$-N;ZNo(_5{NFOSN>~#y&>jE1r#2M9gEjeyZcCwy-*6LAx z7MUhxJea6s45KB=IdZtmE0X7P0is$Bo5Fuhj!zjC_Fm%KW442*veo#4XzLVLK4&@e z!Iwos^#?4l9dS+YUd1(j3tY$I1m!7r$#B16>22c_H$HJf4gsW?6@APA7JnyA00NB_ a+~#;5ce4CdCJYpKg7;A4TOb))^79KqnHG-# literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$2.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$2.class new file mode 100644 index 0000000000000000000000000000000000000000..b10f9015ba681412f720da00443c91ff39d70f50 GIT binary patch literal 1520 zcmbVM>rN9v6#j-*dSQi9ZeBo9tMmdaqT&T4!NyCIdPy)C`8VATWyp31cc&zM6`w*A zfdrxt;6oYDEY&PpB)CaCGiT2E&gDC2zW+G*2H-9pC(y$%f69DOR_l>W%RlwZ{2t%*l zltFHeoK~X{r+8gtNbPVpC%x^KX2@2z_zt&S?ltV!wJqUjQs`Zhp47_><@}kT*Z&49 ztTDvPsxDGsIB($`dd+UYLITM&Vi>fLLY9>B>qd8=Dn0S4)vO8sEw8!4M5r9@u5n+Q zb4M6Axii>j2`@KKsrBW!r@VGkwF0UfTW1(_RFg^}%3OHJY9EiGMp#rJu; zDg(V(=qjaxuF8hTb<3x4KXx@;Iu@w(wD32$BLch9h1yOe?ZxHp9{(3Cfh!F2(OwDL zZB_fyYy2aQBqkXW&xI#^?xt}axdd)7Wd7_N3pa6#A*t07B*SpNQ?jtXj--oeOdxMq zFEC7XsujJDG*QQ*u$D#%GYL#H4252g6Juc(Hbacp>kK1N$WBWai08BuA$a5jCP$Aq zTYLLg!&SQ({4Ws{%&Kbnj(8?bhmW7|K+Kv{X(XO{j;jLV=%vt`s-D0DhEkNqQ%2sx zBT(xn1EDKNQ{S~lG<{aZBa+K54+0Tjk_I(Kk6TYBW9AmfWX;qX3H?$?(|sT9UeGyC zYo=J*g;ku{MSpR8ADPdg<`Dg-Lkmh9yBMbPXn4+Ggm&i3Ut&MlU_3;Z zTBEQN|h>+_m<~KsUx*glsq(*`j1-mYwp^7B$BDT(rWLWow@hSnKSeIKR-VMFoRE3 zbPz7O#!M=%j_c{y49_et+3SwGY51mN7aZGn9V<1hLLo%&8{39%8Fp2_ zwRT^WeHERA5y!3SqHLL4p3uFAzW&gxRE6*9Mbqgjmrj8`g^9 znsVPXDiS@laY{vkkUZ8^!)cshavDT) z1zMiG8k8ch;w<5E8`P(y1`5vRmgAYeh#-j(4d*aQ=<B2(x%kMT&5)71|>w zgfOn*0@8c}i=$u}9-lCf&J+(d6&UjoWRX)b!S#9VmxhZnzMtb4?6Sqs>}n9BLMKeL zk)G7TB@J(4npqSNYKFyN2Gd8dH1wU93BGkqIhHqsWkoQFcQnl6GNG5j-8NjVc<_t4 z;S^iZ6S#1~W5{cm!&O4~Ae?ain8*WSIXaHM2;Rdr74H+ywz{jK1Pujzz|7i?Z?5m` zHz+4RmR@QJb6=hk=m_D2Xb5`ve*(Ax$~9L~A<^;`E&UI(A*dCnDKEOme2D!*bKQ@W zry&)>(5nr*v$fx}Ctr7-%g%F4_AL8G`HPaV)$HxavQu-*V$qb{f2PIso0K|a(hfvd z68?r$(eR0!B|~M$UN@^XSCpKZC-yldXiGK^zW}LVhI?LVDU9%73h{da6phOH#G|=` z-!LL|!XFeFCkHw*z~Z!a*7bT`A>$`}fz}OQe&JkdjAs{(|^tPcdJ|yK<`@Zubyl zJiX0(>sVNo87hz&uCcB`Dk9W{LE_0s5gtF?$Wjk-)W;nk#Vp0RX$Eke262PpxI+ni zPN!hdX;f$!Ci`vDC~7p0ujm54qcpy!3?5MyKad_UH`8FJ$sF^9MOHq)$ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$InfoComposite.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl$InfoComposite.class new file mode 100644 index 0000000000000000000000000000000000000000..37d18fea9fbddff153166d6dec7a8abaac31bb97 GIT binary patch literal 765 zcmb7C%T60H6g@X2nUV|;9;Gj$fZ!9)HXqURu>f# z3qF94s<@62f<;v#OV>Wf_xN5P`{wV}HGubMMko>Xtr$w3xL>&(CNfvvSeJYfPGzY+ zGPW$xEAgl`bjw}Zg2(580^4RTQ$Us=BJz@0;-4QCz zUxbDzCDgj+%x3b73dGVso_Ft53)bR}s=9WiXj9JVvVkPFW b!1-bI9E-eL!V5+vyu>S>Yom&`sWB<0q) literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicInformationControl.class new file mode 100644 index 0000000000000000000000000000000000000000..ff94c941e74902d81c3d1551c475cb9817e61dc6 GIT binary patch literal 6911 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 TRsP-WUf4pq|NQjlD5(Dfu4!E@ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicSourceViewerConfiguration.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicSourceViewerConfiguration.class index c3118982cf4b40384cb893e181dbfb041426d0f7..b93bd9ce5504649b24d9e5f70835b35e4eb5209f 100644 GIT binary patch delta 1042 zcmZ9JTWpk75XXO~m;JWe)4i4@Yl|X{EnP|L1u#`WV+o2DFR`NQgLcb)w#CgZcGm_B zvBno4G$wkg6(R{BxGG*+g|B6+NJT}f^?m`o;$5HA_(Y64-`cc^ImyhN|D5xm|IF-b zIdx8O>hIzqU@5;^lqt?L4|;0NC8~0?`Cv_>k0Ewz9%rW_VrP=wX}dj}&i31>j%2r; z&ROhLw9b67Ou0Ym-9teW;7N0)zg0i2*~c@ASkBHH<&TX>U#uS5r~=J z{e7MnG%vE>bOlC&TJTPLbN=$|fZeZ1nUhwF`Lilw8UnGJ*~CQ_6K2vg-_^Qo7WGl2 zpeV}?D5^JPGkH6c@7%J13v-^}2k2U#7>@1lLp@;dP7G6mj!gC|;>~ zgQMoYV3YR**_4ziU);Rb$21>lKIRj1 zTBt#NW>$q7mLFGy=DuH=&8F>S#>X)}*L=Za3f=u5wmzA@!*&P%mF8sTY3+3Da9U-gYxyHc(57I&2ovOCx<;AbtfKSo#5xyS5>7ch zk7?DWgg3>7o=iQ_U9UaVHDdN;7wHK6i65_pn&93*EYdBCwgbTtxy0 zI2R@NIvmD?N-@qsu_4J`F(Xt@P@K{7(p*80yn=h@h|#mWnwLww2zH29O1y`eEb-RE z2?5**q@|Nrk5Vxz{>{WXhj&a@bm8EK+i5J&vLyVegT$T!i`-t_$A>xQaKhos0)e>0 zErNYh5CX}^9KIVB((=+c;`k)KUxxC4EbAfZbVwHXFgNljU2K!}?U42DlvV92br2Ov nBFOE){1dg#`jMYR?G1tjvAloLU@=`?9r2wKMDerOGJg3N?kxzx delta 857 zcmYL_|4-C)9LFDT;O=uAAMd#1fDkuDrpUp-G-qtG2{^aDpf<3i)$9XY$KiR$;2>>I z_{I4{iw)llC)B1DUHK(JYcj^T?(>f6$Juq6Q(Q8*s0eDWFX%9t=6l`a zD{)P6+2lvA=uuxu)eKh+epY0+TRm1~)QW{G8xoz7SlHwjepR^Itgg1YcxyVU zIJ-Oa4gZMB)Zv_J-+D4c>!3E{zKvtbv9Kx=PD8M+ZG=cSSFi4D(%+h;&a_72-*<5U4V&o?~vUNmQ4Ta7j6Pd4}zJ z_fM_dvFFFCKak$>ouN$A*80@>zqM>dSYl|LD&H)DG8S<&NN|f`+LZ}Y{d;UPnnbjr;5 zx0fE*|3|io1?fY@9j&Epr@}euaF3jlr*#3WQVE8kKO{%1gfe9>(e4SwAyeLHd`7%+ zf-9dg%+-*~PD1r2<|&S;CS(_Ijou8`QJr*oMpLrBU$OYEae^Bk36Mi*Qp}3BvIf;( gph<&3<2LTlc^-E&{4x;+3b>C4SfyPc8Aj6c6W4nRHUIzs literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextHover.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextHover.class new file mode 100644 index 0000000000000000000000000000000000000000..6841dd80771c630ba47ab68cb55afe76a46cde59 GIT binary patch literal 2989 zcmb_eds7ov96dJ#wk|88R9k!%6g4F3D!y8RsKlr#@ljC}`&^QnxVY@%?gsU%^i#Am zEz~;GKl?{NLcdEpJ$E+=3CtqS6lV5jckl0)+r10B{kj8d3tsd}~#@X7I8q zS4~;9L(dP)87r_WkL2s{j<+g(4QYYFC2Q3(9m}no_ZOFBCDhO-FzWerQ&t>%C6MM) z&8kQQea=%t60vw z<=g7M`7j+mw*!H(Wa75#sMM&-I0hxR<_SE_l(+NDye(fzKcBegp{&!x`SJ2bEayVs zcI#x)Ror3#rEUi_0{zcbdc>##BZ)>$UV(wuaauOFcXXiA`1_zW91}Q_AUY<~F^Vx2 zyAuMvnNmpwwa=^70vQU3lE8tMxPs?~zULHtX|WmvE@hJWRb2dKE2Lk$&GH&@bYx;e zwxc|DUPl&Zl(Mq|r?$z+wn<)T-`$d{B(Mtp|J;b{Jl~HAT-0!Zy&}QEQMJdpW8e}l zGczderdMe!OPAgq+s1*dU8MOOlN!DdIGRKg2hu5b5K%((I&^QVCum=PGF@e|Ll-tfJKTW!HyNzTT$Oy=U2>d|o%w=@*Hx@25g25#ey zfMy59<(2SF)Ha^!_!4CevjWFErFM1SjfQ35F765Jr{t(FGtX*vz2QemCvch0O+=aV z8h%B_q3N>A>v({N8om;k_;70jb9f}Mmy%}Xn^$z?T*Y!-$znN~Ag6mD>F4oO!;^#o z)V0Y&Vp?8bpCvYNE6@GsV8acN)HBnRT9d8xsTHGGxu-3eS=Qx~;>;&eb#c|kSz~e5Ws-Z%?-OSsX8IY*4HE*0-;A&=T{&gpS z&3=%eg-z+Xz;vgCWjm-yhjU$ejljH7<&5MBEN8=aD_&qZ9eqwm9ZRZRy%0Fv-LAHy zj)tg86*U;Qln@83G8VYrmCPTmj-yO_5$B}9&K<*kIu}}%7k90d=AhQ&+PP(`Q9jiD zMRZo_=X5TqoG&<55XgYzh1JdfUT9Ds1}XJjz%Q*{{@#rNUia|s7N4iM>e+P+W^=z{ z=x5%gu%FifS_7XUjS(V@;sEas#JlkcKII+lB2-Q+4C7!E^Ey{$nG!##YlPLuXTZq_ zV4GjGF5})!V3g8&xOosR%WL z@h0j8Vk$+u-XXidv!C7!dM*Mr;!RCZ78=eq0sbaH9|4NFw>Zztdy6Xqzv1dVF_}KI zhQg1?Wq-lY8cJ)pzlO(e@wEV7Sd+cOy?+-V^!hEd2>g5&9~l zHHAT3!w`qWK@>2?zJ8AD1fzC^ewo2+Byu_y(mr{yeez<{pMxBO4wlI=L~9oweL6wx i6})6V_+;#d_y;o@ZfY#26aqd- literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/activator/Activator.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/activator/Activator.class index 4017057ae07e0425ec9a3159a3a32a438d5ff021..13f350d05cadfc010b86ba30a0f5a2225ab697f1 100644 GIT binary patch delta 106 zcmdnZwUKMX5=KUy$!{1X7>gz!WK?G~nEaAa8q5~nEX}ltkx_s0K4vj?HU>rp1_s{A z_nCuuWf)i)WEnUahe#>IW=rCEH GRR#csu@^xA delta 194 zcmdnUwVP|h5=L45qQtV)JpJOrl+-f)f}GOy%sk)3yu|d>+|<01$@>`96^u1BeefyT z%*3>nQOTHr5eOL=Shcn@@NWb%m>2|sBo~loV31&7VUV1Bl{tu4iGh_tnSql*l|g_( zZSq_e*~x({_PqK)c|!(n24kS82~gCP(Pr{v7DHJ#1|gts9CompletionProposal
    based on the given + * Keyword + * + * @param keyword + * The respective Keyword this proposal should be + * craeted for + * @param replacementOffset + * The offset of the text to be replaced + * @param replacementLength + * The length of the text to be replaced + */ + public BasicCompletionProposal(Keyword keyword, int replacementOffset, int replacementLength) { + // create instance according to the keyword + // TODO: add image + this(keyword.getKeyword(), replacementOffset, replacementLength, + keyword.getKeyword().length(), null, keyword.getKeyword(), null, + new AdditionalKeywordProposalInformation(keyword)); + } + + /** + * Creates a new completion proposal based on the provided information. The + * replacement string is considered being the display string too. All + * remaining fields are set to null. + * + * @param replacementString + * the actual string to be inserted into the document + * @param replacementOffset + * the offset of the text to be replaced + * @param replacementLength + * the length of the text to be replaced + * @param cursorPosition + * the position of the cursor following the insert relative to + * replacementOffset + */ + public BasicCompletionProposal(String replacementString, int replacementOffset, + int replacementLength, int cursorPosition) { + this(replacementString, replacementOffset, replacementLength, cursorPosition, null, null, + null, null); + } + + /** + * Creates a new completion proposal. All fields are initialized based on + * the provided information. + * + * @param replacementString + * the actual string to be inserted into the document + * @param replacementOffset + * the offset of the text to be replaced + * @param replacementLength + * the length of the text to be replaced + * @param cursorPosition + * the position of the cursor following the insert relative to + * replacementOffset + * @param image + * the image to display for this proposal + * @param displayString + * the string to be displayed for the proposal + * @param contextInformation + * the context information associated with this proposal + * @param additionalProposalInfo + * the additional information associated with this proposal + */ + public BasicCompletionProposal(String replacementString, int replacementOffset, + int replacementLength, int cursorPosition, Image image, String displayString, + IContextInformation contextInformation, Object additionalProposalInfo) { + Assert.isNotNull(replacementString); + Assert.isTrue(replacementOffset >= 0); + Assert.isTrue(replacementLength >= 0); + Assert.isTrue(cursorPosition >= 0); + + this.replacementString = replacementString; + this.replacementOffset = replacementOffset; + this.replacementLength = replacementLength; + this.cursorPosition = cursorPosition; + this.image = image; + this.displayString = displayString; + this.contextInformation = contextInformation; + this.additionalProposalInfo = additionalProposalInfo; + } + + /* + * @see ICompletionProposal#apply(IDocument) + */ + public void apply(IDocument document) { + try { + document.replace(replacementOffset, replacementLength, replacementString); + } catch (BadLocationException x) { + // ignore + } + } + + /* + * @see ICompletionProposal#getSelection(IDocument) + */ + public Point getSelection(IDocument document) { + return new Point(replacementOffset + cursorPosition, 0); + } + + /* + * @see ICompletionProposal#getContextInformation() + */ + public IContextInformation getContextInformation() { + return contextInformation; + } + + /* + * @see ICompletionProposal#getImage() + */ + public Image getImage() { + return image; + } + + /* + * @see ICompletionProposal#getDisplayString() + */ + public String getDisplayString() { + if (displayString != null) + return displayString; + return replacementString; + } + + @Override + public IInformationControlCreator getInformationControlCreator() { + return new IInformationControlCreator() { + public IInformationControl createInformationControl(Shell parent) { + return new BasicInformationControl(parent); + } + }; + } + + @Override + public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getPrefixCompletionStart(IDocument document, int completionOffset) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public String getAdditionalProposalInfo() { + // does not get called + return additionalProposalInfo.toString(); + } + + @Override + public Object getAdditionalProposalInfo(IProgressMonitor monitor) { + return additionalProposalInfo; + } + + @Override + public StyledString getStyledDisplayString() { + StyledString str = new StyledString(displayString); + + str.setStyle(0, replacementLength, new StyledString.Styler() { + + @Override + public void applyStyles(TextStyle textStyle) { + textStyle.foreground = PlatformUI.getWorkbench().getDisplay() + .getSystemColor(SWT.COLOR_BLUE); + } + }); + + return str; + } +} diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicContentAssistProcessor.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicContentAssistProcessor.java index 5112c9db..02df7042 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicContentAssistProcessor.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicContentAssistProcessor.java @@ -33,7 +33,7 @@ public BasicContentAssistProcessor(BasicCodeEditor editor) { @Override public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { - String prefix = EditorUtil.getWordBeforeOffset(viewer.getDocument(), offset); + String prefix = EditorUtil.getWordPartBeforeOffset(viewer.getDocument(), offset); List keywords; // get the respective list of keywords @@ -41,10 +41,8 @@ public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int keywords = editor.getBasicConfiguration().getKeywordScanner().getKeywordProvider() .getKeywordList().getKeywords(); } else { - List> allKeywords = editor.getBasicConfiguration().getKeywordScanner() - .getKeywordProvider().getKeywordList().getKeywordsSorted(); - - keywords = allKeywords.get(prefix.toLowerCase().charAt(0) - 'a'); + keywords = editor.getBasicConfiguration().getKeywordScanner().getKeywordProvider() + .getKeywordList().getListFor(prefix.charAt(0)); } ArrayList proposals = new ArrayList(); @@ -53,10 +51,8 @@ public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int for (Keyword currentKeyword : keywords) { if (currentKeyword.getKeyword().toLowerCase().startsWith(prefix.toLowerCase())) { // add a proposal - proposals.add(new CompletionProposal(currentKeyword.getKeyword(), - offset - prefix.length(), prefix.length(), - currentKeyword.getKeyword().length(), null, currentKeyword.getKeyword(), - null, currentKeyword.getDescription())); + proposals.add(new BasicCompletionProposal(currentKeyword, offset - prefix.length(), + prefix.length())); } } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicInformationControl.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicInformationControl.java new file mode 100644 index 00000000..388a90cb --- /dev/null +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicInformationControl.java @@ -0,0 +1,342 @@ +package raven.sqdev.editors; + +import java.util.ArrayList; + +import org.eclipse.jface.action.ToolBarManager; +import org.eclipse.jface.text.AbstractInformationControl; +import org.eclipse.jface.text.IInformationControl; +import org.eclipse.jface.text.IInformationControlCreator; +import org.eclipse.jface.text.IInformationControlExtension2; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.ScrollBar; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; +import org.eclipse.ui.PlatformUI; + +import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.interfaces.IAdditionalProposalInformation; +import raven.sqdev.interfaces.IProposalInformationCategory; +import raven.sqdev.misc.AbstractAdditionalProposalInformation; +import raven.sqdev.misc.SQDevComposite; +import raven.sqdev.misc.StringProposalInformationCategory; +import raven.sqdev.miscellaneous.AdditionalKeywordProposalInformation; + +/** + * A basic information control that can show content inside a shell. The + * information control can be created in two styles: + *

      + *
    • non-resizable tooltip with optional status
    • + *
    • resizable tooltip with optional tool bar
    • + *
    + * Additionally it can present either a status line containing a status text or + * a toolbar containing toolbar buttons. + *

    + * Subclasses must either override + * {@link IInformationControl#setInformation(String)} or implement + * {@link IInformationControlExtension2}. They should also extend + * {@link #computeTrim()} if they create a content area with additional trim + * (e.g. scrollbars) and override + * {@link #getInformationPresenterControlCreator()}. + *

    + * + * @since 3.4 + */ +public class BasicInformationControl extends AbstractInformationControl + implements IInformationControlExtension2 { + + /** + * The TabFolder used to display information + */ + private TabFolder folder; + /** + * The additional info that should be displayed + */ + private IAdditionalProposalInformation info; + /** + * The listener that watchs for hover events over the info popup + */ + private static Listener mouseHoverListener; + + /** + * The compsoite uniquely used for this info popup + * + */ + public class InfoComposite extends SQDevComposite { + public InfoComposite(Composite parent, int style) { + super(parent, style); + } + } + + + /** + * Creates a basic information control with the given shell as parent. + * + * @param parentShell + * the parent of this control's shell + * @param isResizable + * true if the control should be resizable + */ + public BasicInformationControl(Shell parentShell) { + super(parentShell, new ToolBarManager()); + + create(); + } + + @Override + public boolean hasContents() { + return (info == null || folder != null); + } + + @Override + protected void createContent(Composite parent) { + InfoComposite comp = new InfoComposite(parent, SWT.NONE); + comp.setBackground(parent.getBackground()); + comp.setForeground(parent.getForeground()); + + parent.setLayout(new FillLayout()); + comp.setLayout(new FillLayout()); + + folder = new TabFolder(comp, SWT.TOP); + + // inherit color scheme + folder.setForeground(comp.getForeground()); + folder.setBackground(comp.getBackground()); + } + + /** + * Adds an TabItem to the TabFolder used to + * display information + * + * @param name + * The displayed name of the TabItem + * @param control + * The control behind the + * @return The created TabItem + */ + protected TabItem addTabItem(String name, Control control) { + if (name == null || control == null) { + // don't add null elements + return null; + } + + TabItem item = new TabItem(folder, SWT.NULL); + item.setText(name); + item.setControl(control); + + return item; + } + + /** + * Sets the info for this control + * + * @param info + * The additional info that will be displayed + */ + protected void setInfo(IAdditionalProposalInformation info) { + this.info = info; + + updateTabFolder(); + } + + private void updateTabFolder() { + String[] categoryNames = info.getCategoryNames(); + Control[] categoryControls = info.getCategoryControls(folder); + + for (int i = 0; i < info.getCategoryCount(); i++) { + addTabItem(categoryNames[i], categoryControls[i]); + } + } + + @Override + public IInformationControlCreator getInformationPresenterControlCreator() { + return new IInformationControlCreator() { + + @Override + public IInformationControl createInformationControl(Shell parent) { + return new BasicInformationControl(parent); + } + }; + } + + @Override + public void setInput(Object input) { + if (input instanceof IAdditionalProposalInformation) { + setInfo((IAdditionalProposalInformation) input); + + if (input instanceof AdditionalKeywordProposalInformation) { + // add the respective toolbar action this info does provide + getToolBarManager() + .add(((AdditionalKeywordProposalInformation) input).getToolbarAction()); + + getToolBarManager().update(false); + } + } else { + setInfo(new AbstractAdditionalProposalInformation(true) { + + @Override + protected ArrayList computeCategories( + ArrayList categories) { + categories.add( + new StringProposalInformationCategory("General", input.toString())); + + return categories; + } + }); + } + } + + @Override + public void setVisible(boolean visible) { + // add a MouseListener + configureMouseListener(); + + super.setVisible(visible); + + configureScrolledComposite(folder); + } + + /** + * Configures the minSize of the first occurance of a + * ScrolledComposite in the children of the given parenr + * Composite + * + * @param parent + * The parent Composite that eventually holds a + * ScrolledComposite that should be configured + */ + private void configureScrolledComposite(Composite parent) { + for (Control currentControl : parent.getChildren()) { + if (currentControl instanceof ScrolledComposite) { + ScrolledComposite scroller = (ScrolledComposite) currentControl; + + if (scroller.getContent() != null) { + Control content = scroller.getContent(); + + // adjust the scroller to the proper size + int border = scroller.getBorderWidth(); + int width = scroller.getSize().x - 2 * border; + int height = content.computeSize(scroller.getSize().x, SWT.DEFAULT, true).y + + getToolBarManager().createControl(getShell()).getSize().y; + + scroller.setMinSize(width, height); + + ScrollBar scrollBar = scroller.getVerticalBar(); + + if (scrollBar != null) { + // if there is a vertical scrollBar adjust the + // scroller's minWidth to make sure the horizontal + // Scrollbar does not have to appear when the vertical + // on does + scroller.setMinWidth(scroller.getMinWidth() - scrollBar.getSize().x); + } + } + } else { + if (currentControl instanceof Composite) { + // pass it through + configureScrolledComposite((Composite) currentControl); + } + } + } + } + + /** + * Configures a MouseListener that processesHoverEvents of the mouse in + * order to activate the respective info popup.
    + * If it has already been configured before it will do nothing + */ + private void configureMouseListener() { + if (mouseHoverListener != null) { + // has already been configured + return; + } + mouseHoverListener = new Listener() { + + @Override + public void handleEvent(Event event) { + if (event.widget instanceof InfoComposite) { + ((InfoComposite) event.widget).setFocus(); + } else { + if (event.widget instanceof Composite) { + Composite currentComp = (Composite) event.widget; + + boolean doFocus = false; + + while (currentComp != null) { + Class enclosing = currentComp.getClass().getEnclosingClass(); + + if (enclosing != null + && enclosing.equals(BasicInformationControl.class)) { + // the defining compsoite has been identified + break; + } + + if (currentComp instanceof Shell) { + if (currentComp.equals(getParentShell())) { + doFocus = true; + break; + } + } + + currentComp = currentComp.getParent(); + } + + if (currentComp != null && !doFocus) { + // the given widget is part of the one for this info + // popup + // emulate mouseClick + event.widget.notifyListeners(SWT.MouseDown, new Event()); + event.widget.notifyListeners(SWT.MouseUp, new Event()); + } else { + if (doFocus) { + ((Composite) event.widget).setFocus(); + } + } + } + } + } + }; + + PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseMove, mouseHoverListener); + } + + @Override + public void dispose() { + super.dispose(); + + if (mouseHoverListener != null) { + // remove the listener + PlatformUI.getWorkbench().getDisplay().removeFilter(SWT.MouseMove, mouseHoverListener); + + mouseHoverListener = null; + } + } + + /** + * Gets highest parent shell of this InformationControl.
    + * If the topmost parent is not a Shell an exception is thrown + * + * @return The respective Shell + */ + public Shell getParentShell() { + Composite comp = getShell(); + + if (comp.getParent() != null) { + while (comp.getParent().getParent() != null) { + comp = comp.getParent(); + } + } + + if (!(comp instanceof Shell)) { + throw new SQDevCoreException("Expected shell!"); + } + + return (Shell) comp; + } +} diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java index e288689d..54fde244 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicSourceViewerConfiguration.java @@ -1,6 +1,7 @@ package raven.sqdev.editors; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.ITextHover; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; @@ -118,6 +119,7 @@ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceVie public IContentAssistant getContentAssistant(ISourceViewer viewer) { assistant = new ContentAssistant(); assistant.enableAutoInsert(SQDevPreferenceUtil.isAutoCompleteEnabled()); + assistant.enableColoredLabels(true); IContentAssistProcessor processor = new BasicContentAssistProcessor(editor); @@ -128,6 +130,11 @@ public IContentAssistant getContentAssistant(ISourceViewer viewer) { return assistant; } + @Override + public ITextHover getTextHover(ISourceViewer sv, String contentType) { + return new BasicTextHover(editor); + } + @Override public void propertyChange(PropertyChangeEvent event) { if (event.getNewValue() == null) { diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextHover.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextHover.java new file mode 100644 index 00000000..d812d36c --- /dev/null +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextHover.java @@ -0,0 +1,78 @@ +package raven.sqdev.editors; + +import org.eclipse.jface.text.IInformationControl; +import org.eclipse.jface.text.IInformationControlCreator; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.ITextHover; +import org.eclipse.jface.text.ITextHoverExtension; +import org.eclipse.jface.text.ITextHoverExtension2; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.Region; +import org.eclipse.swt.widgets.Shell; + +import raven.sqdev.infoCollection.base.Keyword; +import raven.sqdev.miscellaneous.AdditionalKeywordProposalInformation; +import raven.sqdev.util.EditorUtil; + +public class BasicTextHover implements ITextHover, ITextHoverExtension, ITextHoverExtension2 { + + /** + * The editor this assist works on + */ + private BasicCodeEditor editor; + + /** + * Creates an instance of this hover assist that will use the keywords of + * the given editor as a foundation + * + * @param editor + * The editor this assist works on + */ + public BasicTextHover(BasicCodeEditor editor) { + this.editor = editor; + } + + @Override + public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { + // won't get called + return null; + } + + @Override + public IRegion getHoverRegion(ITextViewer textViewer, int offset) { + return new Region(offset, 0); + } + + @Override + public IInformationControlCreator getHoverControlCreator() { + return new IInformationControlCreator() { + + @Override + public IInformationControl createInformationControl(Shell parent) { + return new BasicInformationControl(parent); + } + }; + } + + @Override + public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) { + // get the respective word + String word = EditorUtil.getWordAroundOffset(textViewer.getDocument(), + hoverRegion.getOffset()); + + AdditionalKeywordProposalInformation info = null; + + if (!word.isEmpty()) { + // check if there is a corresponding keyword + Keyword keyword = editor.getBasicConfiguration().getKeywordScanner() + .getKeywordProvider().getKeywordList().getKeyword(word); + + if (keyword != null) { + // create the info for this keyword + info = new AdditionalKeywordProposalInformation(keyword); + } + } + return info; + } + +} diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java index 323d9755..95422f6a 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java @@ -4,7 +4,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManagement.SQDevPluginManager; +import raven.sqdev.pluginManager.SQDevPluginManager; import raven.sqdev.util.SQDevPreferenceUtil; /** @@ -18,12 +18,6 @@ public class Activator extends AbstractUIPlugin { // The shared instance private static Activator plugin; - /** - * The constructor - */ - public Activator() { - } - /* * (non-Javadoc) * diff --git a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF index d199b68f..43cc3925 100644 --- a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF @@ -1,12 +1,13 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Misc -Bundle-SymbolicName: raven.sqdev.misc +Bundle-SymbolicName: raven.sqdev.misc;singleton:=true Bundle-Version: 0.1.0 -Bundle-Activator: raven.sqdev.exceptions.activator.Activator +Bundle-Activator: raven.sqdev.activator.Activator Require-Bundle: org.eclipse.core.runtime, org.eclipse.swt, - org.eclipse.ui.workbench + org.eclipse.ui.workbench, + org.eclipse.ui Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.constants, @@ -15,4 +16,6 @@ Export-Package: raven.sqdev.constants, raven.sqdev.infoCollection.base, raven.sqdev.interfaces, raven.sqdev.misc, - raven.sqdev.pluginManagement + raven.sqdev.pluginManager, + raven.sqdev.styles +Import-Package: raven.sqdev.misc diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/activator/Activator.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/activator/Activator.class new file mode 100644 index 0000000000000000000000000000000000000000..79cb198ee03caecbb9eacd27c751bf0d3465d671 GIT binary patch literal 892 zcmah{O>@&Q5PeFMxD8H1lTtoQ+R~OJWe^8$VVEfeW;zoXm_qN0BaFb6gDji=EiRPd zzz^U@F|6#g6b|^Z(yp}cz5V$4>-!G?4>9miVdxo=NzIc_Q<-rQSd|GI8@_jT^H62j ziA~655UE)rd8+swmIAW;o$5YwB0+xK#P-ke5 zm6k8lZaSV_YI`#86ADFqUDvKXxMHBvkyJ5y$d# zY(DZQsh&o1Kh{>B*pZXecyDk8g4Tz8X2m@O2e>Q z6k0xwyxivGVh0#D%ezElOKd!I^mlx0Ir>Jb&jh&M?D*I~o5F{2Y6AIOxk0whSLVKJ zDgB@=phW{&8WZYdJ@Po6jLzEd6pLTzQbB{Pdj^(piL76IptDIHL8DE-F4MhA-f|9e zK#>YXn#0{wbid)s@GEZqfotX59pdd0%t{WsS|rS2DHT1e6Cf?x{|E}~O~A&OGzeVZ)lO59+Q_IK$?@Zb;d zM~Rb=LqVY~?9R^4oA+kl*Z0RKfOG7ZQDA6Bd?}P2zj$J4yP=8`u9DauO&*3~c^@o% zshZs~bcUn#NQTmtR5H0{XtbOszT|emm2XdyNGiWKZciEXLFfq+8a65@!eqGo3+b#E z>!oZvj#T1q@jMgJBcBC=!E!>E2U8x&G|wOPWG-Wd%=-sJL~?gdJ1~z2lS(& zyW2hp1vW5q?wvXJ+&ky<>-_`3Id=0%G1Pn>3T5f%sR%9GQ##-(&{lu+&=cXkyKtnc zwerX?9Ia+DFwF0s*87}`~4p%p8 zM`~L`sl?r4J`w&SpSXgdJoIetj=3+RJh{vSGpQMl{~=pzwHdOG2nIcdO1<&>8wSb@ z#dyGG>|1j#was9TyoGOz8ySsJT6VA*SwX}0mF;?(thg1y%$qV421*IP>vFAy?i_-V zFVRZT<&7o}vq6;(O!dbf3M!c#RqBbeb`9k65Hdd4Uixuz^iN>WE^ZaYh)urOTxk gf)t|ir~z=WRGLmo)7Xw#73>iHw69WRCNk*Y8`9Q>H2?qr literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$3.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$3.class new file mode 100644 index 0000000000000000000000000000000000000000..2aba4041a8e7a7b374369b07d2f037538e9be542 GIT binary patch literal 598 zcma)2T}uK%6g}gvA8q!bnY|Q5ETu*6gV94q2x=f$6o&7kJL$wWOFQfSu6hc3=m+$p zqPwdPLV*p;oO@@^J@?M}`u_L?aE6^MQVe#$BcUAq;)=)_`AUaeh1%)#@7p4}^QL2| z?0Oa^!@+VUL*`N{8D24zE4?QkamV9o?DWGxs&S)R9WaUdV?W77Gbx|P^wgaexe?*ScNy|sr9{y3 zxYj~9_rb`dc%^8kk)b?G(K*cIK6iYw%ifWDOBkzkS_#u87HLtQCj@d>!#W{##O7S% nlrVlXiiKB#6yox@0dTZXYRpRwY$dD`wh3qL%M@9288q<&gJp}O literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$4.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$4.class new file mode 100644 index 0000000000000000000000000000000000000000..1845aeb46923c14d62337af44a61bdc5e22906d2 GIT binary patch literal 585 zcma)2T}uK%6g}gvx@}f!W-mQNNNAzkgY=LQf*J^06o&8PI_ShUOZ)Y^>M7`Qdc46hjKP5Y6@+;X{ESd-9~YSA0FrVRSPn+p>fHcH6DWVrZ?X|HeA zOVoC3sl;vcG!y;RTrYrORMWyvTRNwM@pStUB09te{~>%5lAbthf>3(wj4s#!3l);PN04LH`hp zd`VW0b{+-FixizhPw$PB(*yPf<27Y$(rKp5HnB*H@)99nU<=!X)Dh)OqfMB+Y1PUL gK@LfI(f~MHDb=!44ZA6;hCRZc_H~NPOa^^?1NNkbZvX%Q literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$5.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$5.class new file mode 100644 index 0000000000000000000000000000000000000000..87a9ec41cd22fb102fd62540cb4e1804b410fbf7 GIT binary patch literal 588 zcma)2O-sW-6r62S8)NxrQfMm_swkD-x5<*O#0@5C1b>yD1P}fI zf0XzVb0{d(z-IRC&YO8VpI`4E08X%zM~0#1^GGN&c(g@iTAm6*uEM|^jBooQx^d@@ zRJB$f8pHl_Cd10PR5H9^sMbgKJmRLym1B-WUn-|FY)lxmo@WaKS*#Y2gTZk27jv}S ztP`tkj-(RT^M|SM@A%Xe45g80ad*Of8Q1Bd7S3eAaPSY=TC2m5b3{1oGgRu0-_Oud zVkjpAHj~_%Px6`jHW?UWZ|+;-QpS@M7ej2uY0$g_Ww~BJXHR96>Jm!*jH(1q%!E@8+*Zr%m4rY literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$6.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin$6.class new file mode 100644 index 0000000000000000000000000000000000000000..2a440bf96e9e51f73437085da3095831fef191b6 GIT binary patch literal 592 zcma)2O;5r=6r6-_`3F=_>580rC!gf!LjR79rjOBHe%DswQp?ThHfn>((o zw+ql1_Legl@~5tJ!!w3z!+PKmH$5&La})-ybUMT4m_h6LQ(+*Bl_GL57*76TTFcEk zvD${^N^w1ZoQU9#Pdvd;wtSm=V;;D1ogQl8%vB8g|B$V>I}ABTgu^~VrP2KT3>{^L zS~6fO$*uJihS752Wq+iW0dJ;mn^h6o*oZpyzR= zgzD~sQ9SXNp_N0P>H_WB(2{fg;Bbe%L4QpctMoS#<~gxQi|QgFpkoc|gye|LRO5&+ lzRQ+NF9aFH?XdxHvCx`LTeH|oSQTs&{@7P(XQVRd;v2VSiE;n{ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/constants/ESQDevPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..eb06eda3ad21655de48b806c87f0decbe91a6756 GIT binary patch literal 2625 zcma)7T~`xV6y2A6%rFcJsURv^uqY&;kqFTWMG-=q5Qv+o~&|M~*J1ilr}#&FTr zs=AqU_O|tEvS68xtC_Bo%qaKf_3CP=QZ!5fVTKcrw5paYX=X8*F)L*TAv2#{Us+Qa zhH`KBF~tyG$|`dV?aI9cA4-31tY>rN>V9@}c5R+qb*!#s7BXv@<+%+1$}Ddz4drKZ z8~p3igVuP&=|agc4R?kiG!oAf%bc~X3y4vqZx3{6Ttq}dH+p3B;xt2aI&juIl6!Lo zifbEYaVi_nw}at~j0mCv&b3C75+O)9iyn@BSBAi`gRNn&ix4FY_}EJ_M2;P94Lc#C zUBYD_J1V1{W3RM^ofIKS81u2?G9-?@-WoP7qC-N;$KH_9fhf=XeHk)38BXR5Q(vx> zw{&}5+bZb{v7A-VN_ovT__z0`gb;eDmhMBtVTcrUH#^U8Y9#*eqEL^~^4*HL&3&Dx zEtXwOT29eO?$}yce`48>lm7CQL~+c?n89rc8GI;Ufnktu*Qtqi9i2wP){}O{bd9o} zTrFwtj%Al++`&f-$zwX=|Hv353M{YNj$xS$7mklCSocE9ai-Z0EMrx`3N_k)W+Eet zj~PVQ@>`Rp%GMpLRHY-hd2F0-p9KnG1NQ~c40RoCeHowNHm`?ml=-$z84vI&u^LXM zyzB0J!?($g_j4Iv;7b~$s#dD#RJ`GlcuS+q!CNx!@!D))TZWDua-;86v=X`LY0he8 z>ych?r{bH$>$o;=p`#I#1PO(TZR@7X(5bju;qj8T>ou2vP6=gL0;nv_sqQ|m~>InGoQJW!YB-sYl9 z8Qf~dy%M2TbTOXi$4L_;DOSZU=nDoPj_ziizsgUH3$#%*HMe5Zdb%kn9>H`gR5KK( zoHb3|_7c;b`9Y!%(WN8YIm3k#AWNd>SrRbMk{EfGgvGNY5Cy0 zuRjr{C-C$T-D>QePy?sx=sUz&HP#<);Cvky4l$s{E=C%7ua2QZTvlTv(FWpmBn~mA z#;yttB4`PUZ!$@EpSLn9AP8yTOET*xD+ceLenDRVuFLciY ziH*}Sc?Xpk?QdZE4M~(XAOOkUyMPb)3DMO|;zetWD@EWYMV9Xu6VGw?0Q1j0Djuxw zXT>A;{fNFF+D`%!;3opSMEJ#Du*7iGL%zv_^x6ZBYTzLmc!=-_j)EUFfg=I99cxem z@Q-vR5eoJOf!7!5p?;4Ddv<`&)LY>fGocTDLf@Hie=0Zn92zYbXnFM6cWtcy{0}ex zVw^7ImF6OK4PcP7$J9q9>L81*&RvXRkBVYp5*06$ULqtq6!DPk0G+epozx@x>OuI# zOF~Bk5+TL}a)s_Tx;shKf_T$Jz^m3|^F~?}dAPqvV9`qy?{X zPEZKEWKxVJ4&eL_FAcxL{Gz?abrBP)0rxO5^I;IYj(Ku?$8fR`zM^Lv_VKl6pW+*` YDax~(EHw``t#1bcdpWRUflc}LA8468!TvWaCw5hG^>0}BHP1Wc}GwC7>n!y3sf5FZ-JBH%FjAY%>yti%Zp delta 33 mcmdnQvX*5-5hG_Y0}BHPcu%fov}b48!y3sf5I^}CV-5g>%m@Jh diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/exceptions/SQDevSyntaxException.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/exceptions/SQDevSyntaxException.class new file mode 100644 index 0000000000000000000000000000000000000000..087ff1c15e0c73121f6d2e4d17f772a1da2f0422 GIT binary patch literal 1039 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 JK4j>@{|EWzC076d delta 7419 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 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/Keyword.class index 763ccd9e8922772a7c3dae8eee2dcf80ba73ffea..c199f1110d786803dfd69ec03934cf83b42336f9 100644 GIT binary patch delta 633 zcmYk3OKgl`6o#L#|8$0#X?2>QLmJbIh7KvAaY;K(nHeILu&|&)L|n$T%%qbdsYqO+ zD1H_$JJmK(f-*K%qjbZfB}GDP&{&`$7AW<0x{)tA@AseYob$f_dj~2Uj8LSyI*BNrRZ;FSv#5eDcH6&tt_qZ`E^Ae(>`=ph0Hpj@)fr8)@ ze8Ch8>lA7)k!|YAgZHVqqc@8p#VI%y<2Xn#o<{OWlFvaVbBJQSOd6X*38nhdM4eH# zYTYeNzOE6%ic^({2#v5PuRKLG!|1X)a5%a$)uVjQOu-TRth+utI!jgdklSB)oLo+b zyM>9I7S|c3bB=kOr;>|ynP;0bx>A1-wQbMV$Q8zMRU)oQN*je-m(X@KbWlzw72HtM zO?h!ky6&=qZq{;-dQ$A*0lSoI)pjLz~H>-8k*m3BCUSid>Ar delta 601 zcmYk3Sx8iI7{!0rJI?6baZICSh@nX>(kU!TtVkvAOhqKsLr@t>M9Z{lGdS5p1#M&- zb%U0dv?M8{ENSS;tf1vVi#Cd0S_o;O=%H1Lj`k84zVqF4?|07kKmXp)(@^_Dv&6u^ zW_diaGQMJStTqwbw9&vETe!rFLBvNn#a^Z|)5k0-4Lq@UbVF^Tp`+1Ex@#7ZrU$aa zx5)^nm@>C0e3gpJqD)4q=HgO~t0u@KiJvXxi5dEDjC>08CIN=iZ&;?@#K=@TgG#5) zJ2+^kh@Qk_w&HTN4SenwcIyw=<}`b&)9rC7Y{#$y!JRVL#US=FgnbfkWHbkv#34#J z;*?se-FB7Mw4D}fRrEL+oRI5jc{dTHS(}~Fz*&lDp_o<;o!9v<5aA+oxWr=Gspbl6 z>0rIMdagP1d^Zi-$<4|ObjtKPBk7cJ7Zu#lTo<#sIs1L6*o)5lRY$M~(p{&3DnbDFa6`~??zi8TNK diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/KeywordList.class index ebdff4e930c3deb2ec6b4542cf880ee840472fe8..5b349ec010af60447f0eb9deb8e9847595017ec9 100644 GIT binary patch delta 2474 zcmY*b4RBP|75?t-+uz)fut^B{S==O;zfD-j0-Y{~aimeB0UQIwShZQm5*9YQG+79- zwu?4aX;rkhe}N*RwP`6WNrg=U@}pL2samjFrC6;^Yg^mOOgnYPnOgeY_ckQVB=?kdLfKj`w?shL$VztB?w5v{| z#MvQnJ3gniM2{tS{A) z=!$L=$nA~xB)3Lyjt=xEd%L_4=$6=kmqgKFa1?6Bq5}Z|ojy@;%OJR%p z#8DmS$AAmm%Qt;)3-Lx$$zF-O@kO=FS?T(xP9ak;tWFC|WE2nOl(=v6OEynT^{sPuJ|y7894toGQZ*e#Lns1@tN?>JqpcIJ3|=TPcJvo(BLSHQb!f6fx| zC-r{L;%aKq%4(qw0tGC;)@hBke~G|SdR3FF$tl(`yUSFG>=C)@0U7X=jlq8yf&5N2 zB0ow$3mfdL>zjk)SQ^aWv-S*b8pnzu6ivUa%J1xI8ivE(RDTG8@(J8#!%55!PN2$$ z_RDbUJ5kS&dWH}Kf@t7VTWhh7 zoGZ9d7Zwm>HLlEBA zF&Nl}QVbx#r{+7y1X^*4Z$*}`&^L*5h34uns8C+{b(DC;FbWzcuvO@+FAp|ka8Enm zw+rmL_(5=l!G?L%95`s-$E*+H3f#|>4HEl<>fyZNx4d2%CI zFRoil+8RR$kC_A)P`+=litHv;jo6yop)TZ?EhfQYx;9{uIRUhgsIDHVD@UDz!#H5q zB3hN~WE3!>uAN<+whqcxfxek+Ox7ks3!p1`hwt01^%;COgI(0_nkns?mmkIM4wmPh zG3@g_mBG`L@<)7R@Z;8*Q$Nl6rbK?u+HB-;-paI{01x@{IT)Q?8H`=F@@RHt(D#(@ zSOzC_0xb#)kVE@0-^Q4UaeN9#a0BgIaE#xo6TFTmnT`|uw!FZr^rESAfYD@=)!EL{ zc>y_7X=ZX&r*E$4R|CG<^fArnL~AhU^JegKJsj!``f_O#Vg@fQZ_to`)e&|cU+l0i zrv9r-oJGdfTKbn(H2Qv>!Pz0?9mVS%WB6^@HH?Zz-ced9Q|Al(C6mBKLUOqvTnJl#g65=}UFa8+ zDpcrCGdv|68;Zr@DZEE$0h-* z?*=dRp&$urdCQQG_szar$;ADImK|wb@gCTH;u92_t@p1?!&I;OfHejF_OM!TuxuQw zuHnG%NTKcoWiuM&h<4bg+U0bC`t;Qi1{}f(N$!5(F+p0*GFUYO<=^oSqRd`FKh1yg Ia2r1SKa;2+VgLXD delta 2131 zcmZ`)YgANK6#nkaoqLDN9T|p!;US6->`KpG-pJ|Gzo6|iAaL}Mx` zHOthK7(OViq!blW2aqCsq=l~}E6vhOU8{GiKmDp`pF4n5tF>mGvuB@k_Wr(a?{jWP z(yat@*I&mv0F1>Q89D)W_M0KDdAwa@)uK(xQ8632Y=;;l<>4_IbJ%e)Qa=~-*mW@{ z+~jtZmM?cb&#cz@T0L86_1Sr=oBiuc%mzB?_WYCSx1xG7gdIRBXo%_KR^`L@joy2*Vg7UK1eD zfm-ZVu?KIki2iXXbna|W@ix*07(M0L9(PGuu@U#1;WoMR7O=5J)R4 zbU2J?6QDCuU?&Wyog96J|!J`0=2loX5SV*w!*kdIUv!^ye27m-6lL~sh~AU6MhW`gD-Xgs@K z%N_;;+4Cs-0;ni}356I97t0T_S^eo8+Frp#8Tl>P5HuwBUt|~Q&`6v7bOupipbU|8 z8DeO@OJ!I;m0{>(Lj6qVtlH_NTg-zemkP*gKuB^Mo)EZ}nf4?fR^-zERRXs6{9tdQ zz2X4ql`x_TL$Qj)t0L&tY`)o+;KkE~cPJ!0gAmH_ES=(l8W9gK*7UE{uzGX2)eQuZ z>p48%4`wavG7lHlvY*X1?>buJVs{fYuGUmd-~ZMKwHnqL9F;+37(aeuJ=^$4{W=?UN=iWMC_a3^ zheP>xi-~N)S^bG3ZmM+&K|asCX~0^vSGbOP3Gl>JZe9i+L@$Sku-~pVanw`fZxPTm7q|0`RzFOV%@wki%T%kwfDyne} zHMD;tZfI9@8f1#SiCnDLoYE?mD#9Euqm~Qccx_KBsBn*FV)S{iNu@d$>RY z^cbRHzD+Oa9eP5(qwm%Cq{EMh!%y@;{HpOv)H>GQ|Mb}Ljm9hrX56I9rlS)9_?9d^ W!g<#RKyMNLgjL`V?JaWXaQkoYtkszS diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class index 3a8ee0976ffefabdb395dc9d72d9d2bdf91cc8a6..6bc64b99560580658c04d00ad1ab85d4392747ef 100644 GIT binary patch literal 12707 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 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IPluginListener.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/interfaces/IPluginListener.class new file mode 100644 index 0000000000000000000000000000000000000000..ff5f00664fa5a64cf3828661b6349e1f992ca1ac GIT binary patch literal 212 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 RE)Q{N1DovT4KVZ2`vQi2YykiO literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StringProposalInformationCategory.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StringProposalInformationCategory.class new file mode 100644 index 0000000000000000000000000000000000000000..b95c1d69a832576b1e087fcd801e70827381b13d GIT binary patch literal 1904 zcma)6ZBr9h6n<_J*sxs@saP#71n?!BO<6_oE!0+`*hoMuG;R2H*<9n=&2GB8LHX9- z(Lc~{opz=sGi9cZU+Rq0-&A|sR)^lI7{Ny}*lF@Vf~Q^?0>j4|6r|?0{ju+^h5ds~Tx}Y$N2>_p7`ap(&X8PZ?v$N%6V}W#$Yg zv-)9O8B{Wm`TL&3u$(P>e%%z7V>bg~22VosiCrU$z$|(VY9Tum1^pd15l%sc4nskX zVd}kb8uIvzVTgj1`L5TZ-k2t){rqB^f&%jha3=yV@A`Hvwo@^SVaaAr!)44_9m;0G^6(;oJ>dB|1Vz~>T}E{T#Y zmA1C@iVXIphFe&o`oB#@S|4c8_!bvpkJ}pV$QD+}Bc`n5u7W0_yEwOCNTYCPz({ff$8cfk$PttDy3Hs3G zrxBcxSD#jSuHpmw*J$@Q?US_TavdBq{(_Q!iBo$RsTwbl9v%G|1EVK9IQ2YdJj0n> z{u#!9i!eT=|LF*C0x3)q))dX6X^hi4iE}uM^Q7VhOpskBjzH%b+EJ{C5sRKArv&)` zOGv#Yn4|)xV4A+bfqfzkjlQpmdXH5yJ|zd4*;$GmXJ*nWV+`be$C+R0ApuExFgi3M zVp?plPmJUx!m;x&L{ZAJVziNcf!UuhZ0upS+QG#(F708VYK+|L;Oc6A4>zjH3H+E! zcCgsS7kLUd-bOJ`p380Alj~X=4-82m8BvIJyGT`-!x*lRDpzp{*Ki#Lx;cv|;bxC+ dD{pmM!6v>Tf*Ba7;M;xODC;pg{4UC{`Y%XR-dF$t literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StyledProposalInformationCategory.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StyledProposalInformationCategory.class new file mode 100644 index 0000000000000000000000000000000000000000..2500559007ec0f864bd96e830f5b71dc31e86c89 GIT binary patch literal 3654 zcma)9YjYdb8Geo=du4f}1Q8nogeVullH~|+N@FXyt?d{qmF)xvgF=eCme%qnvR3S_ z91Oicp+N69+CpgyZE4->4DB>B#509{Av68hpTJC+>BkP=+DzT&>`IDcxd~(Y?AdeP z^Io3!Iq$pv+kY?p1;7#fL4i-;UQ1iiOG*3jyuOlLHtbw-)>$p;`IDAeHf^n#E-jkY zvgR0OX-sqUf@!TP2ng&tr>$toqE;#-XBN)sIY&XKz+kgBqvYt;qL$O`WcnKF1Og>( zSr>?8uIik1ETdFN2`D*}YD$hkcWst2Y`*RCge#6wOv)9CcFh`vlIBz_>N>P#`&hf~ z5gzG0W|RzPMBuKzc7gVl*c_c5GxK@~eneD+aif60FE*#3N8t9W?oU^W#gnEB!0{(? zdRfA!;3k2auF7~Jj#i9fUblkSBe3)Ik{-3odd^rh^n5fLLN9KWR&EpM*~Y=xTo6hS zT~aQpVm}TrBCTB3OL>8T?GChsR5PCn;t(-i)>fk>(}^zV(GnxrFBRXZ;x62*A@fL zl3@!R$uyJbqfwHn+%fBDx${$6+0~}tNDD{nuHUf@DqbvCnIyA3bbYyPDJ4@9>c$XK z3Wf#3Zn_()RUE_pq>ybqNf1b!v=se>icjKGd@txEc28fr8C~ykr6inVDnjTM=*_f% zw_2_Ps8GSQdzC_*jq&1GW>H|GFJoGTq@F7pWm`|$7o6k;BTorCIc6^NmK%dk{G5u1>*gm+OZUu6%~=&^>Y7`3&Z_tf9%JF5 z%NcFetT27sxm!oulOd3w-3G{_t04J+W#m0M1q%ZEwuas$Hm*5Z2paMdZSqO!OQ+AA z@xm#nSc2if;i;3-Tgpg{Tk^y_B3&GcDwa_aP?t5UV3a0xqp-xFL|Sf^RXi>?yS>ea zjl8oY0kTy%s1OE1@7WUA2KFr|NUImXX7U6X-G1Xwjq58ap2So1IcMo?JzigGFjnAb zdur=88d9nDLKU0qqT$c0_yWGjyEr7A9ZfkaR ztDK7GWT}*Vm|+#xtq=zByowj_BGa>?6)XD8qQITa#igEvc1J_J^IuhQ9DP#F*HwH& zDi5$TE(h@~X2op~-;ss?yL7CzZnSh4miLzge8W8O41S>EhjlNDgZ0U;zsTs~yENN0!Q`fSf!X7VKt={ouXx6M)Iemi2Fv~7=uJs{xSjNcg zvGnt=gQHKjPJW&FWaD(7toYnh-T4j#I1ghd$6Z|cz&!(u#Mf~{|9empml5BUs!UF@&Lp8W{1e|)>x6K~@v8S*-I#}odyG2+9! z7$h8P2ufH+B`g6KmcvW|FwVE*bYTK}@Bm?$U_d7bO9rEu!bwcC|IFYKoN9t7+khzB zfG8`QID;9dPL-hna%D#iv=iuT0c~gtXhZlvpbeoFw0)8)EFByrRg!#4TOIK~BmO2Q zJ~y;Zckve)%V$xKETuX7oK%fa+YO)us2xrA%2FR)1wgniC=K$qcuOZ{F37o z%Yrv6!@{p<$4}ickk4f9CESc(bJjuq-CX}IcjYA=K=2BVE10|jMZx^P5x(IH|GoPU Yv`y;suH+=Q literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StyledRegion.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/StyledRegion.class new file mode 100644 index 0000000000000000000000000000000000000000..2b5f74b8f5a65137a869aaf7df6b3fc03e950fa4 GIT binary patch literal 2188 zcmah~T~iZh6n@@>u*tfL1pI2H1}PE}Fa@c#2Bk_$fd&wQwA#;Q_ib1VyK#4e?N8}1 z=#3Zcg>lBtbi8V3`kNf5=j<-BBptZf_v@VJJm+)&ef#P!05jNAkPsMh^?hlVyr-tz zFYQ^LQL6dBG^Dv9>y~3H=n**ACGtSGT!G$M%eMTx0yFt)T*PAluT)#F$o&AUT;0|8 z^-@E(>xAxFcD+2lCD1ePm{LU&84W3@0%Q4@;M(@CH2k<~bi=BBRm+yEt-WpOZtB|& zDUhu?hThoHU5n4rWskpOc>-6C(Cc!tOjMlh-KkE&Za+f7X|~qokwCgG{lH&=;r#d! zo83?<1kP)?fQzBxg5`R?z#u6eLPs7ec&{T-U3da2S)X@oU)o(TQOw!o2O6%h$qaLq zhGUxwh6T*X*H|5Vn=~}+(xb>1W8dlSjCGVMEGFqPR>_r8~QsoeSOvNNh3a(Qi zPt?)y5iScT*BY97iG$E33$1R>K`oJM=cBUH5l_a4lu<8SX2%cY-SciiUYq1X7-_yA&}IC@(N- zg`HW{u!Ln|=tXrFF+3r%AwljMH7J`XA0x+l6$nvdq?@kX4-=Sj!+;#G7+NDmpR&)b zu3$spLT7#5Z&?jfx@l}uEe2(BJEvw;tYeFZ!A;(M&B=QtFd5I;!4QabNoXfRET{2} zfTl*RaDe(9V}0L&b&&sKuzsX8sA+5qB$!?frUr?hsNP)JZ0H6RNF`2hen)p}@@Y%j zhK$dyBlqzZk2tWuI~pEvDXTT7AM{gzAb%SYx+Fxz-K z&mOrB@_xcZzFWpH^-hxh4L~pLQo&cD(-PhCy;3MnyhQpB+9q&{zACMtQP7J)Xtc|P zVmOU6bRq@x;VeP%t{+*F7CboU%dpe5@>{yl#<|zH^gHcCTs9BtVaC)#nFv#GXVXom z{?KdWI`yyquRe{dNPm%5wlhHXKl}$u@;9iwZR6T=x=sczhEyhEPy-Q_JjtYxIJLki z<0wR^ugHfUdYU7s;;%?0pBLMhSSiwRs*M|L;BSnCc0O61oM@x`0&|n$Gi^UFPPXwy z&mn^Xg&8Q5%Xg5$Jqm3F=dpkxEMgSPG#I|bEv(Y(dcd*}ntzvsIeM=Wxigr;N|1z6 zTqOB5@{oPVAdz{48wzqHL7<6i* X-WmLdv51XDToSMdFo9h>3D(AcsB8!B literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/VersionChangeEvent.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/misc/VersionChangeEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..836b3d08617d90ea0f8c4cd998219dfb0c830a30 GIT binary patch literal 1363 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 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/BoldStyle.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/BoldStyle.class new file mode 100644 index 0000000000000000000000000000000000000000..a7519afeb13524a62b18c09a5c0ffa541c38f179 GIT binary patch literal 672 zcma)3%SyvQ6g{^Oo5nsgYU`u*iBJ{H##JjWR0J^yS}Eu*ZO0mki6&{qztV*i6#M`` zO1v{It_pTDId^jIIrrT8{`vRL8{DyQtHp|Mbw+ofD#&@z*Tr54VHmybxQ<+9NMv(W22I^gK~KS8NQPVn5-?39 zG0srPmY?xGZgsfZvMSPd+*a{CJ9Wi%&s)CNcbl=zdgZoi))z4XDan7wYMo1N zU=t73P;F7GvZYd;#!3Z#Wa2Tti~>jPSLj!oxZQXrY)NxLPSfMQaH-1+=lI?zl`2^SP9 z!s0bd(i?drULW%OMQo$A*IpXnjh~QYFOG1zc4IPyL%g+hgxQ*wIK*5*%V^p!xE4OI z=QG*>xg+Fj`N`DgA*@0&lUyF)-AwXV-1-d#D#iex4RAk`Ji=y8*EP~t9$-8Ff?_40 zG_H^;V4C93AdNX(q+GA!8m?mj%Va7mw7P>u+(Qmk@{6Z57Alw3NbfKgQjQ9C!u;BJ nLdX$fs$iG)62!NGuTX7 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/SQDevStyle.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/styles/SQDevStyle.class new file mode 100644 index 0000000000000000000000000000000000000000..5f69fbe9b3a3394652eaa6368bd6492439e85c93 GIT binary patch literal 3652 zcma)9-BTP{760`xWMI+(0wmcayPHWuRv13Un8c5O5tbw-y8~ncVFZI~GjoAvXSyfd zJ!EnH{@7i=bys&y)P3>6mpnvWAZw~zt+G<3PrhiCrDc`>ho%0`?Pi$3=!T(s?!A4_ zIlptx@02?N+4$73C~(lPR74cP%9ZfSS>0)Gx^+kwK6H|1mXtTmaP>l zQ?#7L%*6b%$_ECLlT$O<3(t>@Tz%GnF=}AXsO$KFG3#!cz&HFmS~67Bh-ImVK4UyPnE;6(_JuDl_6U zCV`3fp_{(g{*+fC-u>OPJCXFvCh26_L@)Yycfs{a7SsP!9XEP*N=twSOzc66tln>; zHC%nbL|eEzZDKFlcjJTjZ~`AP(6SYI3A%}o;4D*>cb&kp9pAvdTFW6D2YY4{7&6dP zOB(fJUX=rzqzu_S$^cy0JZl1zeqw4#rTnt87i?8X1=ga^kgAkb^psUtm8e#Hbu@`V z3`^Qaw%Lxz)-x^OM@^g;pbb``Kq3W8HlZGQ4;Hg%CIc(~!kAUo>`379L$wxKNPrb~ zY^wq<7mI4qDvm_iukmTjz!~vLmCC_tiXrm@uaXa3FXb*o3|S3|DpjiZLCSH1)VvZG z3-s|B3>!!+s$g6fRcCjdWU^#=VIrz5S&v4=wbxOq;7>eMVJs=BG26dJ3zwb$5j@SV zPndWPSCY7dS;_Y&N$}bvk1ko>q`Fa2PF^w9!pAuiS8;`ig%>OVk^Qs@OU~kK0wp=f znIL}~^_#Z410ig!(c z8{QW{pE2>00BWLA4Mz??Cmwx%TZwKK$_^V^`4m)OhdxxR^lU>D` zrz9aSo0t%It$7wtplUkpY{7X?q;rz`OiGzm@35yGe*}~CozV4UyvlLNu6cr` zvfaTv3(PHLwyq5};WYz&0&wf_y?{xD>Dz22?VANzJ3&wFIDC}3xr?P_6@8(~k4(Iw zyOuk@{O}}=_`*VwfXcXcD_&k*v}LfhZl!-fsE?yegiQQhIEY3*Sx(%=(1fH6NA7p) zy~#7q0=?!W(BGT``kPaL-z}8sKqn>kao5ZH^0WIs_RnnKv0vfvFSw222|mRP@FYKS z0`3msNGNE;2&a)}bLkDFdLN**?*VrAKR_b>bHp3kkKV)aT)J-qJ!9#9KF8C&Yv@n+ zts#@{U&G1tzW5qW{St@M@8C=fx3K3v24~tox`B_q8=gKLLr$PHXeej359blb1>(Ml z1N=VB_#VY&wwq_shb&HFjB{cfL%6~>SNXYy>&R*Nr$exmx=5Xbt)nFF&B?^n?#;=> z)KQ+3iAh@@=lg?b_z%O?n1GSMrSO+>!^RMW_@_z~$RP@fx)zDYeLOSMp54IsyF3YF znbam`sr0%AWQMmRK!((Iq$$I1(bSlJ8~t~y3c_UMYlIuC!tCvJgfrWPm+K0%&DRk= zxn1~1U14^HI>M*!Y=iw$UEyn(j)ZfJjxg*{Z+acMb*0GY^e7_pK@4bi5@^xF+I=-OaOTa>ePwL`)jgCkG8Czb2rSLX=Sz|f8qgAFtu`22gd>h}PQmWFCk8MVN zFAu+q??v{;BkYmAM&quo_V0_uYScn|zo)$iY-xX}aiJr!C*{bjHuLrC3~emxc|X*h ztV_cH;%pz=H8ZV$KR30KghX%)&y*z8n6Mjy4$qhf)vSckqE@8X2hERg=1_n L{QQImG5qwuIx8X8 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Misc/build.properties b/plugin/Raven.SQDev.Misc/build.properties index 34d2e4d2..e9863e28 100644 --- a/plugin/Raven.SQDev.Misc/build.properties +++ b/plugin/Raven.SQDev.Misc/build.properties @@ -1,4 +1,5 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ - . + .,\ + plugin.xml diff --git a/plugin/Raven.SQDev.Misc/plugin.xml b/plugin/Raven.SQDev.Misc/plugin.xml new file mode 100644 index 00000000..5535690d --- /dev/null +++ b/plugin/Raven.SQDev.Misc/plugin.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/activator/Activator.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/activator/Activator.java new file mode 100644 index 00000000..0929ad54 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/activator/Activator.java @@ -0,0 +1,34 @@ +package raven.sqdev.activator; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +import raven.sqdev.pluginManager.SQDevPluginManager; + + +public class Activator extends AbstractUIPlugin { + + /* + * (non-Javadoc) + * + * @see org.osgi.framework.BundleActivator#start(org.osgi.framework. + * BundleContext) + */ + public void start(BundleContext bundleContext) throws Exception { + super.start(bundleContext); + SQDevPluginManager.getManager().register(this); + } + + /* + * (non-Javadoc) + * + * @see + * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext bundleContext) throws Exception { + SQDevPluginManager.getManager().unregister(this); + + super.stop(bundleContext); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/ESQDevPlugin.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/ESQDevPlugin.java new file mode 100644 index 00000000..f06ff59e --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/ESQDevPlugin.java @@ -0,0 +1,119 @@ +package raven.sqdev.constants; + +import org.eclipse.core.runtime.Platform; +import org.osgi.framework.Bundle; +import org.osgi.framework.Version; + +/** + * An enumeration for the various plugins used inside the SQDev feature. + * + * @author Raven + * + */ +public enum ESQDevPlugin { + + /** + * The editors plugin + */ + EDITORS { + @Override + public String getID() { + return "raven.sqdev.editors"; + } + }, + /** + * The misc plugin + */ + MISC { + @Override + public String getID() { + return "raven.sqdev.misc"; + } + }, + /** + * The sqfEditor plugin + */ + SQFEDITOR { + @Override + public String getID() { + return "raven.sqdev.editors.sqfeditor"; + } + }, + /** + * The util plugin + */ + UTIL { + @Override + public String getID() { + return "raven.sqdev.util"; + } + }, + /** + * The wizards plugin + */ + WIZARDS { + @Override + public String getID() { + return "raven.sqdev.wizards"; + } + }, + /** + * The preferences plugin + */ + PREFERENCES { + @Override + public String getID() { + return "raven.sqdev.preferences"; + } + }; + + /** + * Gets the ID of this plugin + */ + public abstract String getID(); + + /** + * Gets the Bundle of this plugin + */ + public Bundle getBundle() { + return Platform.getBundle(getID()); + } + + /** + * Gets the version of this plugin + */ + public Version getVersion() { + return getBundle().getVersion(); + } + + @Override + public String toString() { + return getID(); + } + + /** + * Gets the ESQDevPlugin that is represented by this String + * + * @param str + * The String whose corresponding ESQDevPlugin + * should be obtained. Leading and trailing whitespace will be + * ignored + * @return The corresponding ESQDevPlugin or null + * if none could be found + */ + public static ESQDevPlugin resolve(String str) { + str = str.trim(); + + if (str.isEmpty()) { + return null; + } + + for (ESQDevPlugin current : ESQDevPlugin.values()) { + if (current.toString().equals(str)) { + return current; + } + } + + return null; + } +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java index 046f23b7..70d20ff7 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/constants/TextConstants.java @@ -22,5 +22,5 @@ public class TextConstants { * An array containing all special characters a valid word can constist of * apart from letters and digits */ - public static final char[] SPECIAL_WORD_CHARACTERS = { '_' }; + public static final char[] SPECIAL_WORD_CHARACTERS = { '_', '@' }; } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevSyntaxException.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevSyntaxException.java new file mode 100644 index 00000000..21024bd0 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/exceptions/SQDevSyntaxException.java @@ -0,0 +1,33 @@ +package raven.sqdev.exceptions; + +/** + * An exception thrown whenever a given format is not respected so that the + * processing can't continue + * + * @author Raven + * + */ +public class SQDevSyntaxException extends SQDevCoreException { + + private static final long serialVersionUID = -6664220779760880244L; + + public SQDevSyntaxException() { + } + + public SQDevSyntaxException(String msg) { + super(msg); + } + + public SQDevSyntaxException(Throwable arg0) { + super(arg0); + } + + public SQDevSyntaxException(String msg, Throwable arg1) { + super(msg, arg1); + } + + public SQDevSyntaxException(String arg0, Throwable arg1, boolean arg2, boolean arg3) { + super(arg0, arg1, arg2, arg3); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java index 39b0dedc..ae7be1c6 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/SQFCommandCollector.java @@ -18,6 +18,7 @@ import raven.sqdev.infoCollection.base.KeywordList; import raven.sqdev.infoCollection.base.SQFCommand; import raven.sqdev.infoCollection.base.SQFControlStructure; +import raven.sqdev.misc.SQDev; /** * A class for collecting all SQF commands from the BIKI. @@ -219,8 +220,13 @@ private SQFControlStructure processControlStructure(SQFControlStructure control, String content = formatCommandPageContent(getSite(commandPage)); String[] categories = categorizeContent(content); + // set description - control.setDescription(categories[CATEGORY_DESCRIPTION]); + String description = categories[CATEGORY_DESCRIPTION].trim(); + if (description.toLowerCase().startsWith("description:")) { + description = description.substring(12).trim(); + } + control.setDescription(description); return control; } @@ -446,8 +452,8 @@ private String formatCommandPageContent(String content) { content = content.replace("
    ", "\nparam:\n"); // keep code markdown - content = content.replace("", " $Code$"); - content = content.replace("", "$/Code$ "); + content = content.replace("", " " + SQDev.CODE.getOpener()); + content = content.replace("", SQDev.CODE.getCloser() + " "); String commandInfoLine = content.substring(content.indexOf("
    ")); commandInfoLine = commandInfoLine.substring(0, commandInfoLine.indexOf("\n")); diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java index c1b899d4..81924cd5 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/Keyword.java @@ -114,6 +114,10 @@ public String getDescription() { public void setDescription(String description) { if (description != null) { description = description.trim(); + + if (description.isEmpty()) { + description = null; + } } this.description = description; diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java index 1c32ca6e..add8960f 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/KeywordList.java @@ -34,7 +34,7 @@ public class KeywordList implements ISaveable { /** * The list of keywords where every starting letter has it's own list. - * Therefor get('b'-'a') will get the list for the starting + * Therefor get('b'-('a'+1)) will get the list for the starting * letter b */ private List> keywords; @@ -44,10 +44,10 @@ public class KeywordList implements ISaveable { * Creates an instance of this KeywordList */ public KeywordList() { - keywords = new ArrayList>(26); + keywords = new ArrayList>(27); // initialize a list for every letter - for (int i = 'a'; i <= 'z'; i++) { + for (int i = ('a' - 1); i <= 'z'; i++) { keywords.add(new ArrayList()); } } @@ -78,9 +78,18 @@ public KeywordList(String saveFormat) { public void addKeyword(Keyword keyword) { Assert.isNotNull(keyword); - keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a').add(keyword); + int listIndex; - Collections.sort(keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a')); + if (Character.isLetter(keyword.getKeyword().charAt(0))) { + listIndex = Character.toLowerCase(keyword.getKeyword().charAt(0)) - ('a' - 1); + } else { + listIndex = 0; + } + + keywords.get(listIndex).add(keyword); + + // sort the list the keywords has been added to + Collections.sort(keywords.get(listIndex)); } /** @@ -97,7 +106,8 @@ public void removeKeyword(Keyword keyword) { return; } - keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a').remove(keyword); + keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - ('a' - 1)) + .remove(keyword); } /** @@ -107,7 +117,7 @@ public void removeKeyword(Keyword keyword) { * The keyword to search for */ public boolean contains(Keyword keyword) { - return keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - 'a') + return keywords.get(Character.toLowerCase(keyword.getKeyword().charAt(0)) - ('a' - 1)) .contains(keyword); } @@ -129,7 +139,7 @@ public ArrayList getKeywords() { /** * Gets the keywordList where each starting letter is stored in it's own * subList.
    - * 'a' is index 0 + * 'a' is index 1 */ public List> getKeywordsSorted() { return keywords; @@ -144,7 +154,7 @@ public List> getKeywordsSorted() { * could be found */ public Keyword getKeyword(String keyword) { - List list = keywords.get(Character.toLowerCase(keyword.charAt(0)) - 'a'); + List list = keywords.get(Character.toLowerCase(keyword.charAt(0)) - ('a' - 1)); for (Keyword currentKeyword : list) { if (currentKeyword.getKeyword().equals(keyword)) { @@ -239,4 +249,21 @@ public boolean isSaveFormat(String format) { return true; } + /** + * Gets the KeywordList for the given starting character + * + * @param c + * The starting character the returned list should correspond to + * @return The respective list + */ + public List getListFor(char c) { + c = Character.toLowerCase(c); + + if (Character.isLetter(c)) { + return keywords.get(c - ('a' - 1)); + } else { + return keywords.get(0); + } + } + } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java index c654b397..1fe18b6e 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java @@ -1,9 +1,11 @@ package raven.sqdev.infoCollection.base; import java.util.ArrayList; +import java.util.regex.Pattern; import org.eclipse.core.runtime.Assert; +import raven.sqdev.misc.SQDev; import raven.sqdev.syntax.Syntax; /** @@ -225,7 +227,7 @@ public boolean hasSyntax() { * examples) */ public ArrayList getExamples() { - if (examples != null) { + if (examples == null) { examples = new ArrayList(); } @@ -255,24 +257,51 @@ public void addExample(String example) { Assert.isTrue(example != null && !example.isEmpty()); - if (!example.contains("$Code$") && !example.contains("$/Code$")) { + String codeOpener = SQDev.CODE.getOpener(); + String codeCloser = SQDev.CODE.getCloser(); + + if (!example.contains(codeOpener) && !example.contains(codeCloser)) { // surround with Code tags - example = "$Code$" + example.trim() + "$/Code$"; + example = codeOpener + example.trim() + codeCloser; } String taggedExample = ""; - for (String current : example.split("$Code§")) { - // put the example part that is not yet in code bracket intop it as + for (String current : example.split(Pattern.quote(codeOpener))) { + // put the example part that is not yet in code bracket into it as // a comment - String comment = "\n// " + current.substring(current.indexOf("$/Code$") + 7).trim() - .replace("\n", "\n//"); - taggedExample += ((current.startsWith("$Code$")) ? "" : "$Code$") - + current.substring(0, current.indexOf("$/Code$")) - + ((comment.equals("\n// ")) ? "" : comment) + "$/Code$"; + + if (current.isEmpty()) { + // don't process empty parts + continue; + } + + // get the part that might has to be put into a comment + String comment = "\n// "; + if (current.contains(codeCloser)) { + comment += current.substring(current.indexOf(codeCloser) + codeCloser.length()) + .trim().replace("\n", "\n//"); + } else { + comment += current.trim().replace("\n", "\n//") + "\n"; + + current = codeCloser; + } + + // reassemble the example so that everything is contained in code + // tags + taggedExample += current.substring( + (current.startsWith(codeOpener)) ? codeOpener.length() : 0, + current.indexOf(codeCloser)) + ((comment.equals("\n// ")) ? "" : comment); } + taggedExample = taggedExample.trim(); + taggedExample = taggedExample.replace("\n ", "\n"); + // make sure the example is surrounded by code tags + taggedExample = ((taggedExample.startsWith(codeOpener)) ? "" : codeOpener) + taggedExample + + ((taggedExample.endsWith(codeCloser)) ? "" : codeCloser); + + // add example if it has not been added yet if (!getExamples().contains(taggedExample)) { getExamples().add(taggedExample); } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IAdditionalProposalInformation.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IAdditionalProposalInformation.java new file mode 100644 index 00000000..a093bab6 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IAdditionalProposalInformation.java @@ -0,0 +1,38 @@ +package raven.sqdev.interfaces; + +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +/** + * An interface for an addtional information of an ICompletionProposalExtension5 + * + * @author Raven + * + */ +public interface IAdditionalProposalInformation { + + /** + * Gets the amount of categories this information consists of + */ + public int getCategoryCount(); + + /** + * Gets the category's names for this information. + */ + public String[] getCategoryNames(); + + /** + * Gets the category controls of this information. Each Control is meant to + * contain all the wished display information for the respective category. + *
    + * The order of these Controls has to correspond to + * getCategoryNames().
    + *
    + * The created controls will usally overtake the color scheme (foreground + * and background color) from the parent composite + * + * @param parent + * The parent of all the category controls. + */ + public Control[] getCategoryControls(Composite parent); +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IPluginListener.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IPluginListener.java new file mode 100644 index 00000000..04270e66 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IPluginListener.java @@ -0,0 +1,29 @@ +package raven.sqdev.interfaces; + +import raven.sqdev.constants.ESQDevPlugin; + +/** + * An interface describing a plugin listener that will handle events occuring to + * plugins + * + * @author Raven + * + */ +public interface IPluginListener { + + /** + * Gets called whenever a plugin starts + * + * @param plugin + * The started plugin + */ + public void started(ESQDevPlugin plugin); + + /** + * Gets called whenever a plugin stops + * + * @param plugin + * The stopped plugin + */ + public void stopped(ESQDevPlugin plugin); +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IProposalInformationCategory.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IProposalInformationCategory.java new file mode 100644 index 00000000..10e5f7c3 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IProposalInformationCategory.java @@ -0,0 +1,31 @@ +package raven.sqdev.interfaces; + +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +/** + * An interface for a information category used in the + * BasicCodeEditor-framework + * + * @author Raven + * + */ +public interface IProposalInformationCategory { + + /** + * Gets the name of this category + */ + public String getName(); + + /** + * Gets the Control representing this category.
    + *
    + * The created Control will usally overtake the foreground and + * background color from the parent + * + * @param parent + * The parent of the created control. This Control + * is meant to directly group widgets on it + */ + public Control getControl(Composite parent); +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IVersionListener.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IVersionListener.java new file mode 100644 index 00000000..b9706157 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/interfaces/IVersionListener.java @@ -0,0 +1,22 @@ +package raven.sqdev.interfaces; + +import raven.sqdev.misc.VersionChangeEvent; + +/** + * An interface describing a VersionListener that will be notified when + * something with the versions within the SQDev feature happens + * + * @author Raven + * + */ +public interface IVersionListener { + + /** + * This method gets called whenever a change in the version number occured + * + * @param event + * The VersionChangeEvent describing this change in + * more detail + */ + public void versionChanged(VersionChangeEvent event); +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/AbstractAdditionalProposalInformation.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/AbstractAdditionalProposalInformation.java new file mode 100644 index 00000000..aa92d2de --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/AbstractAdditionalProposalInformation.java @@ -0,0 +1,154 @@ +package raven.sqdev.misc; + +import java.util.ArrayList; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +import raven.sqdev.interfaces.IAdditionalProposalInformation; +import raven.sqdev.interfaces.IProposalInformationCategory; + +/** + * An abstract implementation of an IAdditionalProposalInformation + * that provides a framework for subClasses + * + * @author Raven + * + */ +public abstract class AbstractAdditionalProposalInformation + implements IAdditionalProposalInformation { + + /** + * A list of categories this info consists of + */ + private ArrayList categoryList; + + /** + * Indicating whether the categories are computed or not + */ + private boolean isComputed = false; + + + /** + * Creates an instance of this + * AbstractAdditionalProposalInformation + */ + public AbstractAdditionalProposalInformation() { + this(false); + } + + /** + * Creates an instance of this + * AbstractAdditionalProposalInformation + * + * @param compute + * Whether or not this constructor should directly invoke the + * computation of categories + */ + public AbstractAdditionalProposalInformation(boolean compute) { + if (compute) { + doComputeCategories(); + } + } + + @Override + public final int getCategoryCount() { + checkComputation(); + + return (categoryList != null) ? categoryList.size() : 0; + } + + @Override + public final String[] getCategoryNames() { + checkComputation(); + + String[] names = new String[categoryList.size()]; + + for (int i = 0; i < names.length; i++) { + names[i] = categoryList.get(i).getName(); + } + + return names; + } + + /** + * {@inheritDoc}
    + *
    + * The Controls returned by this implementation contain a + * ScrollableComposite whose minSize has to be set properly + */ + @Override + public final Control[] getCategoryControls(Composite parent) { + checkComputation(); + + Control[] controls = new Control[categoryList.size()]; + + for (int i = 0; i < controls.length; i++) { + // create the parent Control for the categories + ScrolledComposite scroller = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); + + Composite comp = new Composite(scroller, SWT.NULL); + + // set GridLayout as the default Layout + comp.setLayout(new GridLayout()); + comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + if (parent.getLayout() instanceof GridLayout) { + scroller.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + } + + // inherit color scheme + comp.setForeground(parent.getForeground()); + comp.setBackground(parent.getBackground()); + + scroller.setContent(comp); + scroller.setExpandHorizontal(true); + scroller.setExpandVertical(true); + + categoryList.get(i).getControl(comp); + + comp.computeSize(parent.getSize().x, SWT.DEFAULT); + + scroller.setMinSize(comp.getSize()); + + controls[i] = scroller; + } + + return controls; + } + + /** + * Forces the computation of the categories representing this info + */ + public final void doComputeCategories() { + categoryList = computeCategories(new ArrayList()); + + isComputed = true; + } + + /** + * Checks whether the categories have yet been computed. If not it will + * compute them. + */ + private final void checkComputation() { + if (!isComputed) { + doComputeCategories(); + } + } + + /** + * Computes and creates the categories for this info + * + * @param categories + * The list to be filled with the created categories + * + * @return The list of created categories + */ + protected abstract ArrayList computeCategories( + ArrayList categories); + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/Pair.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/Pair.java new file mode 100644 index 00000000..8290139b --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/Pair.java @@ -0,0 +1,36 @@ +package raven.sqdev.misc; + +public class Pair { + + private T object1; + + private S object2; + + /** + * Creates a new Pair + * + * @param obj1 + * The first component of this Pair + * @param obj2 + * The second component ofthis Pair + */ + public Pair(T obj1, S obj2) { + object1 = obj1; + object2 = obj2; + } + + /** + * Gets the first component of this Pair + */ + public T getFirst() { + return object1; + } + + /** + * Gets the second component of this Pair + */ + public S getSecond() { + return object2; + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDev.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDev.java new file mode 100644 index 00000000..69749362 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDev.java @@ -0,0 +1,296 @@ +package raven.sqdev.misc; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; + +import raven.sqdev.styles.BoldStyle; +import raven.sqdev.styles.CodeStyle; +import raven.sqdev.styles.SQDevStyle; + +/** + * The SQDev base class holds various constants and utility methods for those + * that are used throughout the plugin + * + * @author Raven + * + */ +public final class SQDev { + + /** + * The code style + */ + public static final CodeStyle CODE = new CodeStyle(); + /** + * The bold style + */ + public static final BoldStyle BOLD = new BoldStyle(); + + /** + * Checks whether the given content uses SQDev-styling + * + * @param content + * The content to check + */ + public static final boolean isStyled(String content) { + for (SQDevStyle currentStyle : SQDevStyle.getStyles()) { + if (currentStyle.isUsedIn(content)) { + return true; + } + } + + return false; + } + + /** + * Gets the SQDev styles used in the given content + * + * @param content + * The content to check + * @return A list of found styles + */ + public static final List getUsedStyles(String content) { + List usedStyles = new ArrayList(); + + for (SQDevStyle currentStyle : SQDevStyle.getStyles()) { + if (currentStyle.isUsedIn(content)) { + usedStyles.add(currentStyle); + } + } + + return usedStyles; + } + + /** + * Display the (styled) content on the given parent + * + * @param parent + * The parent Composite that will hold the content + * @param content + * The (styled) content to put on the given parent + * @throws IOException + */ + public static final void createStyledComposite(Composite parent, String content) + throws IOException { + // make a layout with 1 column + GridLayout layout = new GridLayout(1, false); + layout.marginHeight = 0; + layout.marginWidth = 0; + + parent.setLayout(layout); + + if (isStyled(content)) { + // get the different regions + ArrayList regions = getStyledRegions(content); + ArrayList textComposites = new ArrayList<>(); + + int currentStyledText = -1; + boolean needsNewStyledText = true; + + // create the composite according to the styled regions + for (StyledRegion currentRegion : regions) { + if (currentRegion.needsOwnComposite()) { + Composite createdComposite = currentRegion.getStyle().createComposite(parent, + currentRegion.getContent()); + + createdComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + + // indicate that further content must be placed in it's own + // styledText + needsNewStyledText = true; + } else { + // create a new styledText to display information + StyledText styledText; + + if (needsNewStyledText) { + // create new StyledText + styledText = new StyledText(parent, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); + + styledText.setBackground(parent.getBackground()); + styledText.setForeground(parent.getForeground()); + + styledText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + + // add to list + textComposites.add(styledText); + + // update index + currentStyledText++; + needsNewStyledText = false; + } else { + styledText = textComposites.get(currentStyledText); + } + + currentRegion.addToStyledText(styledText); + } + } + } else { + // simply create a Text and fill it with the given content + Text text = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); + text.setText(content); + text.setBackground(parent.getBackground()); + text.setForeground(parent.getForeground()); + + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + } + } + + /** + * Gets the SQDevStyle the given content starts with (= + * The content starts with the opening tag of the respective style and the + * content contains the respective closing tag) + * + * @param content + * The content to process + * @return The starting SQDevStyle or null if none + * could be found + */ + public static final SQDevStyle getStartingStyle(String content) { + for (SQDevStyle currentStyle : getUsedStyles(content)) { + if (content.startsWith(currentStyle.getOpener())) { + return currentStyle; + } + } + + return null; + } + + /** + * Gets the last unstyled part of a String + * + * @param content + * The content to to process + * @return The last unstyled part of the given content + */ + public static final String getLastUnstyledPart(String content) { + int index = content.lastIndexOf(String.valueOf(SQDevStyle.STYLE_MARK)); + + while (index > 0) { + String fragment1 = content.substring(0, index + 1); + String fragment2 = content.substring(index + 1); + + for (SQDevStyle currentStyle : SQDevStyle.getStyles()) { + if (fragment1.endsWith(currentStyle.getCloser())) { + return fragment2; + } + } + + // fragment1 doesn't end with a style tag closer + index = fragment1.substring(0, fragment1.length() - 1) + .lastIndexOf(String.valueOf(SQDevStyle.STYLE_MARK)); + } + + // no styled region in the content -> the complete content is the last + // unstyled part + return content; + } + + /** + * Gets the first part of the goven content taht is styled with the given + * style + * + * @param content + * The content to process + * @param style + * The style to searh for + * @return The styled part or null if the style is not used in + * the given content + */ + public static final String getStyledPart(String content, SQDevStyle style) { + if (!style.isUsedIn(content)) { + return null; + } + + String styledPart = content.substring(content.indexOf(style.getOpener()), + content.indexOf(style.getCloser())); + + // remove opener tag + styledPart = styledPart.substring(style.getOpener().length()); + + return styledPart; + } + + /** + * Seperates the given content in different styles regions + * + * @param content + * The content to process + * @return A list conatining Pairs of a SQDevStyle + * (null if unstyled) and the content of this styled + * region + */ + public static ArrayList getStyledRegions(String content) { + ArrayList regions = new ArrayList(1); + + // gather the different styled regions within this String + int currentIndex = 0; + + String styleMark = String.valueOf(SQDevStyle.STYLE_MARK); + + String transfer = ""; + + while (content.substring(currentIndex).contains(styleMark)) { + String fragment1 = content.substring(currentIndex); + fragment1 = fragment1.substring(0, fragment1.indexOf(styleMark)); + + String fragment2 = content.substring(currentIndex); + fragment2 = fragment2.substring(fragment2.indexOf(styleMark)); + + // check if fragment2 starts with a style tag + SQDevStyle style = getStartingStyle(fragment2); + + if (style == null) { + // the discovered styleMark is just part of the text + // reassign the index of the next styleMark + currentIndex = currentIndex + fragment1.length() + 1; + + transfer += fragment1; + } else { + // get the previous unstyled part (taking an eventual transfer + // into consideration + String unstyledPart = transfer + getLastUnstyledPart(fragment1); + + // reset transfer because it's now processed + transfer = ""; + + if (!unstyledPart.isEmpty()) { + // insert unstyled region + regions.add(new StyledRegion(null, unstyledPart)); + } + + String styledPart = getStyledPart(fragment2, style); + + if (!styledPart.isEmpty()) { + // add styled region + regions.add(new StyledRegion(style, styledPart)); + } + + String styledPartWithTags = style.getOpener() + styledPart + style.getCloser(); + + // reassign the index of the next styleMark + String remaining = fragment2.substring(styledPartWithTags.length()); + currentIndex = content.length() - remaining.length(); + } + } + + // add eventual rest of content that is unstyled + String lastUnstyledRegion = content.substring(currentIndex); + + if (!lastUnstyledRegion.isEmpty()) { + regions.add(new StyledRegion(null, lastUnstyledRegion)); + } + + return regions; + } + + private SQDev() { + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDevComposite.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDevComposite.java new file mode 100644 index 00000000..9a52f8ac --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/SQDevComposite.java @@ -0,0 +1,26 @@ +package raven.sqdev.misc; + +import org.eclipse.swt.widgets.Composite; + +/** + * A composite used to determine a GUI element to be part of SQDev + * + * @author Raven + * + */ +public class SQDevComposite extends Composite { + + /** + * Creates an instance of this SQDevComposite + * + * @param parent + * The parent composite + * @param style + * The style of this composite. Can be any defined in + * SWT + */ + public SQDevComposite(Composite parent, int style) { + super(parent, style); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StringProposalInformationCategory.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StringProposalInformationCategory.java new file mode 100644 index 00000000..142cf9e1 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StringProposalInformationCategory.java @@ -0,0 +1,65 @@ +package raven.sqdev.misc; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Text; + +import raven.sqdev.interfaces.IProposalInformationCategory; + +/** + * An information category for displaying a plain String as an + * InformationCategory + * + * @author Raven + * + */ +public class StringProposalInformationCategory implements IProposalInformationCategory { + + /** + * The category's name + */ + private String name; + /** + * The category's content + */ + private String content; + + public StringProposalInformationCategory(String name, String content) { + if (name == null || content == null) { + // don't allow null values + throw new NullPointerException( + (name == null) ? "Name may not be null!" : "Content may not be null!"); + } + + this.name = name; + this.content = content; + } + + @Override + public String getName() { + return name; + } + + @Override + public Control getControl(Composite parent) { + if (!(parent.getLayout() instanceof GridLayout)) { + // make sure parent uses a grid Layout + parent.setLayout(new GridLayout()); + } + + // create a Text showing the content of this category + Text text = new Text(parent, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP); + text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + text.setText(content); + + // inherit color scheme + text.setForeground(parent.getForeground()); + text.setBackground(parent.getBackground()); + + return parent; + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledProposalInformationCategory.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledProposalInformationCategory.java new file mode 100644 index 00000000..1d1f8aea --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledProposalInformationCategory.java @@ -0,0 +1,134 @@ +package raven.sqdev.misc; + +import java.io.IOException; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.interfaces.IProposalInformationCategory; + +/** + * An information category being able to display a styled text that may contain + * code that is encapsulated in between the respective tags + * + * @author Raven + * + */ +public class StyledProposalInformationCategory implements IProposalInformationCategory { + /** + * The name of this category + */ + private String name; + /** + * The (styled) content of this category + */ + private String content; + /** + * A list of (styled) contents of this category + */ + private List contentList; + + + /** + * Creates an instance of this infoCategory + * + * @param name + * The name of the category + * @param content + * The content corresponding to this category. May contain styled + * elements using the tags specified in {@linkplain SQDev} + */ + public StyledProposalInformationCategory(String name, String content) { + if (name == null || content == null) { + throw new NullPointerException( + "The specified " + ((name == null) ? "name" : "content") + "may not be null!"); + } + + this.name = name; + this.content = content; + } + + /** + * Creates an instance of this infoCategory + * + * @param name + * The name of the category + * @param contentList + * A list of contents corresponding to this category. May contain + * styled elements using the tags specified in {@linkplain SQDev} + * .
    + * Each element will be prefixed with the category's name plus + * it's index + */ + public StyledProposalInformationCategory(String name, List contentList) { + if (name == null || contentList == null) { + throw new NullPointerException("The specified " + + ((name == null) ? "name" : "contentList") + "may not be null!"); + } + + this.name = name; + + if (contentList.size() == 1) { + this.content = contentList.get(0); + } else { + this.contentList = contentList; + } + } + + @Override + public String getName() { + return name; + } + + @Override + public Control getControl(Composite parent) { + Composite base = new Composite(parent, SWT.NULL); + base.setBackground(parent.getBackground()); + base.setForeground(parent.getForeground()); + + if (parent.getLayout() instanceof GridLayout) { + base.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + GridLayout layout; + if (parent.getLayout() == null) { + layout = new GridLayout(); + } else { + layout = (GridLayout) parent.getLayout(); + } + + layout.marginHeight = 0; + layout.marginWidth = 0; + + parent.setLayout(layout); + } + + try { + if (content != null) { + SQDev.createStyledComposite(base, content); + } else { + // process contentList + for (int i = 1; i <= contentList.size(); i++) { + String prefix = SQDev.BOLD.getOpener() + getName().trim() + " " + i + ": " + + SQDev.BOLD.getCloser(); + + String currentContent = contentList.get(i - 1); + + // create the respective composite prefixed by name and + // index + SQDev.createStyledComposite(base, prefix + currentContent); + } + } + } catch (IOException e) { + // rethrow + throw new SQDevCoreException("Failed at creating styled composite", e); + } + + return base; + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledRegion.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledRegion.java new file mode 100644 index 00000000..e59d9297 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/StyledRegion.java @@ -0,0 +1,88 @@ +package raven.sqdev.misc; + +import org.eclipse.swt.custom.StyleRange; +import org.eclipse.swt.custom.StyledText; + +import raven.sqdev.styles.SQDevStyle; + +public class StyledRegion extends Pair { + + /** + * Creates a new StyledRegion + * + * @param style + * The style of this region (null if unstyled) + * @param content + * The content of this styled region + */ + public StyledRegion(SQDevStyle obj1, String obj2) { + super(obj1, obj2); + } + + /** + * Gets the SQDevStyle of this StyledRegion ( + * null if unstyled) + */ + public SQDevStyle getStyle() { + return getFirst(); + } + + /** + * Gets the content of this StyledRegion + */ + public String getContent() { + return getSecond(); + } + + /** + * Indicates whether this styledRegion has to be displayed in it's own + * composite or if it can be displayed in a StyledText + * + * @return True if it needs an own composite + */ + public boolean needsOwnComposite() { + return (getStyle() == null) ? false : getStyle().needsOwnComposite(); + } + + /** + * Adds this StyledRegion to the given StyledText + * if possible + * + * @param styledText + * The StyledText this region should be added to + * @return True if the content of this + * StyledRegion could be added to the given + * StyledText. False otherwise (when this + * StyledRegion needs it's own Composite) + */ + public boolean addToStyledText(StyledText styledText) { + if (needsOwnComposite()) { + // this is not the proper way to display this region + return false; + } + + // add the previous content of the styledText + String prevText = styledText.getText(); + + // apply the new text + styledText.append(getContent()); + + if (getStyle() != null) { + // apply the styleRange if there actually is a style + StyleRange range = getStyle().getStyleRange(); + // set the actual range + range.start = prevText.length(); + range.length = getContent().length(); + + // add styleRange + styledText.setStyleRange(range); + } + + return true; + } + + public String toString() { + return "Style: \n\t" + getStyle() + "\nContent: \n\t" + getContent().replace("\n", "\n\t"); + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/VersionChangeEvent.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/VersionChangeEvent.java new file mode 100644 index 00000000..d8231c21 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/misc/VersionChangeEvent.java @@ -0,0 +1,67 @@ +package raven.sqdev.misc; + +import org.eclipse.core.runtime.Assert; +import org.osgi.framework.Version; + +import raven.sqdev.constants.ESQDevPlugin; + +/** + * A VersionChangeEvent that contains information about the change + * + * @author Raven + * + */ +public class VersionChangeEvent { + + /** + * The old version + */ + private Version oldVersion; + /** + * The new version + */ + private Version newVersion; + /** + * The ID of the plugin whose version has changed + */ + private ESQDevPlugin plugin; + + + public VersionChangeEvent(ESQDevPlugin plugin, Version oldVersion, Version newVersion) { + Assert.isTrue(plugin != null && oldVersion != null && newVersion != null, + "Null arguments in VersionChangeEvent"); + + this.plugin = plugin; + this.oldVersion = oldVersion; + this.newVersion = newVersion; + } + + /** + * Gets the plugin this change occured on + */ + public ESQDevPlugin getPlugin() { + return plugin; + } + + /** + * Gets the old version of the plugin (The version before this change) + */ + public Version getOldVersion() { + return oldVersion; + } + + /** + * Gets the new version of the plugin (The version after this change) + */ + public Version getNewVersion() { + return newVersion; + } + + /** + * Checks whether this version change is an update (The old version is less + * tha the new version) + */ + public boolean isUpdate() { + return oldVersion.compareTo(newVersion) < 0; + } +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManager/SQDevPluginManager.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManager/SQDevPluginManager.java index 2febcbfc..69b04348 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManager/SQDevPluginManager.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/pluginManager/SQDevPluginManager.java @@ -1,6 +1,7 @@ package raven.sqdev.pluginManager; import java.util.ArrayList; +import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Platform; @@ -8,8 +9,10 @@ import org.osgi.framework.Bundle; import org.osgi.framework.BundleException; +import raven.sqdev.constants.ESQDevPlugin; import raven.sqdev.exceptions.SQDevCoreException; import raven.sqdev.exceptions.SQDevException; +import raven.sqdev.interfaces.IPluginListener; /** * An manager for all running SQDev plugins @@ -24,6 +27,11 @@ public class SQDevPluginManager { */ protected static SQDevPluginManager manager; + /** + * All plugin listeners + */ + private List pluginListeners; + /** * The list of all registered plugins */ @@ -33,12 +41,13 @@ public class SQDevPluginManager { * Creates an SQDevPluginManager instance. It's not meant to be * done manually */ - public SQDevPluginManager() { + private SQDevPluginManager() { pluginList = new ArrayList(); + pluginListeners = new ArrayList(0); } /** - * Gets the PLuginManager holding all the references to running SQDevPlugins + * Gets the PluginManager holding all the references to running SQDevPlugins * * @return The SQDevPLuginManager */ @@ -137,6 +146,11 @@ public void register(AbstractUIPlugin plugin) { if (!pluginList.contains(plugin)) { pluginList.add(plugin); } + + // notify listeners + for (IPluginListener current : pluginListeners) { + current.started(ESQDevPlugin.resolve(plugin.getBundle().getSymbolicName())); + } } /** @@ -147,5 +161,32 @@ public void register(AbstractUIPlugin plugin) { */ public void unregister(AbstractUIPlugin plugin) { pluginList.remove(plugin); + + // notify listeners + for (IPluginListener current : pluginListeners) { + current.stopped(ESQDevPlugin.resolve(plugin.getBundle().getSymbolicName())); + } + } + + /** + * Adds a plugin listener if it has not been added before + * + * @param listener + * The listener to add + */ + public void addPluginListener(IPluginListener listener) { + if (!pluginListeners.contains(listener)) { + pluginListeners.add(listener); + } + } + + /** + * Removes the given plugin listener + * + * @param listener + * The listener to remove + */ + public void removePluginListener(IPluginListener listener) { + pluginListeners.remove(listener); } } diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/BoldStyle.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/BoldStyle.java new file mode 100644 index 00000000..f133ff08 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/BoldStyle.java @@ -0,0 +1,23 @@ +package raven.sqdev.styles; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyleRange; + +public class BoldStyle extends SQDevStyle { + + /** + * Creates an instance of this BoldStyle + */ + public BoldStyle() { + super("bold", "Bold", "/Bold", false); + } + + @Override + public StyleRange getStyleRange() { + StyleRange range = new StyleRange(); + range.fontStyle = SWT.BOLD; + + return range; + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/CodeStyle.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/CodeStyle.java new file mode 100644 index 00000000..0f13f853 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/CodeStyle.java @@ -0,0 +1,48 @@ +package raven.sqdev.styles; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; + +/** + * The style used for Code + * + * @author Raven + * + */ +public class CodeStyle extends SQDevStyle { + + /** + * Creates an instance of this CodeStyle + */ + public CodeStyle() { + super("Code", "Code", "/Code", true); + } + + @Override + public Composite createComposite(Composite parent, String content) { + if (!needsOwnComposite()) { + return null; + } + + Composite base = new Composite(parent, SWT.BORDER); + + GridLayout layout = new GridLayout(1, false); + layout.marginHeight = 1; + layout.marginWidth = 1; + base.setLayout(layout); + + Text code = new Text(base, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); + code.setText(content); + + code.setBackground(PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_WHITE)); + + code.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + return base; + } + +} diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/SQDevStyle.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/SQDevStyle.java new file mode 100644 index 00000000..7fe55489 --- /dev/null +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/styles/SQDevStyle.java @@ -0,0 +1,228 @@ +package raven.sqdev.styles; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.swt.custom.StyleRange; +import org.eclipse.swt.widgets.Composite; + +import raven.sqdev.exceptions.SQDevCoreException; + +/** + * This class represents a String pair with an opener and a closer.
    + * Subclasses must either override createComposite() or + * getStyleRange() + * + * @author Raven + * + */ +public class SQDevStyle { + + /** + * A character that that is placed before and after the style tag + */ + public static final char STYLE_MARK = '$'; + + /** + * A list with all different instantiated SQDevStyles + */ + private static List styles = new ArrayList(); + + /** + * The name of this style + */ + private String name; + /** + * The opening sequence + */ + private String opener; + /** + * The closing sequence + */ + private String closer; + /** + * Indicating whether this style needs to be displayed in it's own composite + * (otherwise it has to be displayable in a StyledText widget) + */ + private boolean ownComposite; + + + /** + * Creates a new Pair + * + * @param name + * The name of this style + * + * @param opener + * The opening part of this pair. Must not be used by another + * SQDevStyle + * @param closer + * The closing part of this pair. Must not be used by another + * SQDevStyle + * @param ownComposite + * Indicating whether this style needs to be displayed in it's + * own composite (otherwise it has to be displayable in a + * StyledText widget) + */ + public SQDevStyle(String name, String opener, String closer, boolean ownComposite) { + Assert.isTrue(name != null && opener != null && closer != null, + "Null argument in SQDevStyle"); + + opener = format(opener); + closer = format(closer); + + this.name = name; + this.opener = opener; + this.closer = closer; + this.ownComposite = ownComposite; + + if (styles.contains(this)) { + // don't allow duplicate of tags + throw new SQDevCoreException("The speified tags are already in use!"); + } else { + // register this style + styles.add(this); + } + } + + @SuppressWarnings("unused") + private SQDevStyle() { + // don't allow to use this constructor + throw new IllegalArgumentException("The empty constructor of SQDevSytle must not be used!"); + } + + /** + * Gets the name of this style + */ + public String getName() { + return name; + } + + /** + * Gets the opening sequence for this Pair + */ + public String getOpener() { + return opener; + } + + /** + * Gets the closing sequence for this pair + */ + public String getCloser() { + return closer; + } + + /** + * Indicates whether this style has to be displayed in it's own composite or + * if it can be displayed in a StyledText + * + * @return True if it needs an own composite + */ + public boolean needsOwnComposite() { + return ownComposite; + } + + /** + * Checks whether the given content uses this pair (opener and closer) + * + * @param content + * The content to check + * @return True if the opener and closer appear in this + * content at least once + */ + public boolean isUsedIn(String content) { + return content.contains(getOpener()) && content.contains(getCloser()); + } + + /** + * Make sure the given tag is not empty and sourrounded by the proper + * STYLE_MARK + * + * @param tag + * The tag to process + */ + private final String format(String tag) { + tag = tag.trim(); + + Assert.isTrue(!tag.isEmpty()); + + if (!tag.startsWith(String.valueOf(STYLE_MARK))) { + tag = STYLE_MARK + tag; + } + + if (!tag.endsWith(String.valueOf(STYLE_MARK))) { + tag += STYLE_MARK; + } + + return tag; + } + + @Override + public String toString() { + return "SQDevStyle - " + getName(); + } + + /** + * Creates a Composite representing the given content in this + * style.
    + * The layoutData for the created Composite will not be set! + * + * @param parent + * The parent to the created Composite + * @param content + * The content that should be displayed in this style + * @return The created Composite or usally null if + * this style does not need to be displayed in it's own + * Composite + */ + public Composite createComposite(Composite parent, String content) { + if (needsOwnComposite()) { + throw new SQDevCoreException("The composite creation has not yet been implemented!"); + } + + // does not need it's own composite + return null; + } + + /** + * Gets the StyleRange for this style.
    + * The start and length of this range are not set! + * + * @return The respective StyleRange or null if + * this style needs it's own composite + */ + public StyleRange getStyleRange() { + if (needsOwnComposite()) { + // needs own composite + return null; + } + + throw new SQDevCoreException("The StyleRange has not yet been implemented!"); + } + + /** + * Get all the SQDevStyles that have yet been instantiated + */ + public static List getStyles() { + return styles; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof SQDevStyle)) { + return false; + } + + SQDevStyle comp = (SQDevStyle) obj; + + if (this.getOpener().equals(comp.getOpener()) + && this.getCloser().equals(comp.getCloser())) { + // the opening and closing tags are import + return true; + } + + return false; + } + +} diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/activator/Activator.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/activator/Activator.class index 5210dd453550d424cd74147bf0820b717eb3da07..084488edc7f50f177c5ebba4bd0a0f66968fceae 100644 GIT binary patch delta 102 zcmbQuHIZvW4dI&{`7n#2tQ&(6P&W_QU={{ppb7>c+Z;$TF<1Zqnlu>% diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFKeywordProvider.class index 187be7334126a90728a92002b337323eb803824e..55a7139180b5c001bcc9f2b7d5077cb2e557aa66 100644 GIT binary patch delta 532 zcmb7=Pft@(5XFDf2e#b4S}mngY%3Pfwv@IiSn*Hdii8LxN`hf$LvI=rc*VA$uGp|* zN8T3pZrQX35<|km#4n&*zJZ@W9inR!HfQe4opa{QoDCcp^X=F17hsyl`(}5?5GE4D z6^gCew)M*GcXhj6-dx{my!94qUaes_tk)^OvhC(pYt8;GwOpi+{#ArZF28UY zjVB?lr-bP8%efc!1Rxo@-v=ZF{GJrxx-zdueoVG!O7+44GFUTn?N&D`may_Jn%`X{+_eE z^BspiJ=U{AkI-k#!es1Pm)K(QE1ALxiPav%U6LoHS7Wz&++LdMGXDDL;-}anw^YzP zd87gkdBulB6yqv6L`dC48D@|q8C@$&igArO&88To#29N;CU~lg6qGitE2s5-g@978aF6>stg5dE%5by`V#sf8a)L;Za8PZayhn-wX8!;W>~C2B delta 444 zcmZ9IOHW!+6otRdwIauhkIO?v1;lCvQLIHBm>8Xy_)OG9KcKVz1a&)gvR`Yjb=E%j=6A?EJpTLz6j`}5x7$H_g>Q(KdzgMc1&itCe5bB{%=s!Bx-0{DCsn*K%`Nr4A3o_s`h-b61 zE>U|S3*iVMgD~VW%!vIin=)$uOGd`+V4&QaAm#Fgv=Fl!5*b}oe)21V zGn3siL`d0Ypz39IUmLV*&JQWtf6md(UmUvhpp9Ico(|@;jk`PRgAi|O%@(NF+L94aT(ms)|n~(Eqzdo zCjJ0_l=04XRicS#lWp&uJ@@R{b8o+X`}76CU2FsxVVF1KSZZ!xcjYk`iBq|@{JDCi z9u{?TGeDJLB{wOTNv8T%@}rj`k=#g|4-6HZo=D{*X%nORE;kIL?oiq025HBC7jF~y zzS7D)U|4LOMUM6vs#|$ij)UQRh;taNp@It`0$gOMv^-%VR$A^1dI!=x6$hDQXvBFU zvVCEcKbK(DTVz-`3~Q&u>Su#g>20AY+n&^p@0M{7Ars;nt~1ogTZu4ikhA~MXpdozJpP=dJX`w}`y?FM(4Sd&NRNQGVF z^KO7OhPl&${ki_$;yS}*X;DkZpY6tN?=9?TEzMRYtd$n?w38M3Td{iGFD6wZbOjhA ze4MI#boNMXW%WIMogjQya3(xf++ozWggTu=>hb6#8uZI>371QiT~rHh<1?mSe8iQ; zjSskag2j0CEip&n)f&VBB6{`;DMh5XR;W%7J4@9%otAN%bSr2Ty%F(2y{otbPF0QW Ic^~xo4lBbJ$^ZZW literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/actions/WikiAction.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/actions/WikiAction.class new file mode 100644 index 0000000000000000000000000000000000000000..448039c2dc80482c715b3a5b12e82ebddcc6fb0f GIT binary patch literal 1762 zcmah~+fv(B6kW%5B1cgYaN?9E!3YS6FBCNm&81E#6yjE`fdm^<=vCMUM?pxcbZp2k z^bh(4dCp90m@?DO1h+~L}s?{iNmxQI)H!St(Mi!)r#ZbTp~!)|I7;hA=` znAzH6j5fFWc&@XVm?wPJ|JO(XWelxX1*=c!{;}hoOkl{kvwE0qNXOnwX zW7DFLrpiv;uxf^92J7x-LOeBnV)TC)8O~LNQQuxP-0-G^Nd~1~K_m%EsSFLbBz(v) z5FQ%4LL(yE!f_RRgxdte^t&6Cmg_p6;EhmC8^P6&72LsH2D!;a*NWj%HWz83&skAM z0rwSr0#fcN;jFIc^yHCYBx;?EG(1!=gHK6XQPNM!Tc>DAm}8je&l2COb2lon%991& zesr`>VxD2L+7p%9aJaA9j!^xGO(?iV#8{nstWyol;!&W5YZ5+Z818?jB}_{TAJFYB zXVckBf@qAC4AbHb)ex#f`X=RvPJ6PJQNmY&N2=odTU6RtI6d5<$VymJu#Cr4&Vl1F z?7D;%hKpgcOh?m~dsie>sk-}8tXH1f!r1E>P&erk4a9Xa-INzbs!P8W4IwazF>yU6 zyf@-el<@5ly08%Y9+xYj`b!imlKbnfGZi2qaq70sy?M)^{^DblDlAUjlpz*$51Pej zE+I+d8Cv~}1nmHY{66HuUyu?nkcg+w9gydI;Wwo7srNc~KYxhfbut<0VC*HC$8m$k zE1|;-xfr1~Hi{vPBZCR#Nq#r!{Bq$L%kAx5?c{CqH>|ZE|NnjEkV3xv$4`?UC z^@^MZxTg;=^$XGmm@XIczarhiy$&9{K;{s$>#5K7vG8a45T*6h7lnO%xj5Ou;@Zpb z<`~9EfuL~=PrBbq7x;~k`!vD70~vRb#ytXmpDc?+;UT7|bZ*n_fJB~<1ph`62^nXx viW;FDryjqCuW2?#wAQgfWCLPJ#D_>+-we?DJ6gx^J$|5X(CdcjOTYgB0ByJz literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/activator/Activator.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/activator/Activator.class index 3ec68bffeee72bdd8fa5c552eb040529fdc49f8c..58dbdf2aa11be72d6d139e3527896e05bb855552 100644 GIT binary patch delta 80 zcmey%{+)fp5=KUy$!{1X7>gz!WK?G~nEaAa8q5~nEY0M`$Scmk${@kO$solbz#u(2 fk2!`{g@J`Zje(m%11O>i6p?4wWME)mV$cErRaX!E delta 119 zcmey){+E5j5=L45qQtV)JpJOrl+-f)f}GOy%sk)3yu|d>+|<01$@>`96^u1BeefyT v%)}JQ$Scag${@zT$soZXz#uvKBD4JDc4k{%1qK!dB?fK=6`-gpP*e>7z^fx0 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/miscellaneous/AdditionalKeywordProposalInformation.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/miscellaneous/AdditionalKeywordProposalInformation.class new file mode 100644 index 0000000000000000000000000000000000000000..68da4260fb939e731ae8dea1b14f908d05119103 GIT binary patch literal 3862 zcmbVOYj+dJ8Ggo=Sy?Qx5dmyUi4y`?7I=$8A;E+q8)F=VWo$4tv`yC1U@xq-%I?Y+ zlIGG&nxxkxZCcZNn>M{SBtfQeo6D!3)8Ei9{TDqa=cIjRwTjn9r=hWqcV}nbd2i42 zzBB*$;H|d-9Kbso8U&8I=Bz9l-lGLMYs^?)UfQ-C(x3$igLI-Gb!D(=A|3^xab0sEYk7We zs_v{n^O!YNH2t#6P_Nb9dSq3QL4Fmuo-tI1N?|S+dXLt(_;HmbupK*f+>2cTcTAh! zap~n#*)l1FMI8p-ZBkGi;w2r;lM@v)Ek1Pq?*%{_B zVBDDRTE(f}1a`wv#QYSo3sV?fuVy|vlNwK;2M09VM;_KeOUI{ika3xX0tp*cnVY=K zTI@|R-unf*qVd+N)v+@t25dPai+%!!a9Bq#jxbz?b)Ka=VonkD)>=$O=^N)pvy6w` zNXKVzY=vP;yjJNOLx*besucTf&ly(Sj9Dziaa;fiWROl^5JMVH(vOu=t|nH;Lpa5z zVawu_KOMkK$+bC(2m*UR6nm?V(Jm_qUFnv{nq zE6fHluH!sD%d+vxsXc1x5I)e1OsT+Zs4hQ&VGm&-EqJ62V+ zr%J>#`W(9uR15LHf*B3A!1k!NwQ@R&%9&=8DaYWX8%K$R8F4(%VyEoz7K*+(f4D=b zb9Hz%;eOlk6jm9Ob4wZ_ObJxmqNf{v?-6*14c$|Io%kL&m% zo*+A@L?O2dim+Vbc#6e5D%s|W9pj1^%B>8(q~puVt-yg`_3T24S_kn}9nYv=3i;k2h3%J&o%Ul!O^hcH!pL2|0SJ+Srz9gBg>v^MPcH1$KKNsW}9AM5yu zvJE{7lEs)fSyw0ss_Zar}}l^Rr_tKu`((O2@C2U^4})vlPik&dtpcpH>bX zhAOM=he!S@(*5sd#dA^P(WY9(ZEg%33pchnAxQlWuL4DKA{oIaEIGoq`dBCI;nAM0 z7sDZ6=j!czC4)XG&dbhXYkpj&ll+)bw% zdBttukGHR2L=X9H;z~0Q0P>z+bAbe~t!oK-`tMl3jFyQdY<#CHeFMp^3hum4sYYz& zb6cS29>lPdn(jp__Fyx*(2g|PxW0wDlvF$a)!(+jvcM-eZh`m@H#BGv8c%sp$qwAb z4ILae&|Nyy@B$4q0pe=cn@Co0&m!8=%h)}U?5s}E$L6$$W&0C)cQWn%{v( z?Xe2Jat)i(jX^rT)*cHo@f=NjV-cIHN%}UwURc6+RfahH{)Y?K`1PZeg`a-7@Cz>Z zD+{ljPrnu*qrkq#MhNUDQF@5YeFU+GcpXHFmzn)|fWKb!;|NaivXWz)x`;kJ!I`IV zoZW5^H*pg0VF>@^_+ONIA6c=Ur$;M>MH_Nr8%D$~zB_s78#pHpVq84PcLo#UBrb>{ zTof002Agr%s7|_&xqW^5#Se zf5e~2xj!=|ol@i&Yf$Z*E1C z;+D!(Lr@m$g2__gRiK-mRZE~jUF5>e7pY8@N0LPryWX{oHzv|cxN!qZD+QLM4DcAA xk5k8!*odbhg_W$uiX{Gmx2RY7-Uy*8dKrHW4Mn|NTI=OAb-Wb#TM*0J{{`996d(Wq literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/ResourceManager.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/ResourceManager.class new file mode 100644 index 0000000000000000000000000000000000000000..34478333dcc4f96b242c8ca2d3a4255a8fecdade GIT binary patch literal 8572 zcmbVR33yc3b^gz2nbGJ;$dUjd774Ho8VLZLF_nO3Q>LkUDX#!qGIN(r{+Hu^ZG+nYdNo%)FYd2n+CT{A~Oa6P`doyo@ z2u;3EpWeIgo_p?p_H*w%|L*6%0AQ^Qd*Kl@CBlczSTK2L#5^3Fil)aRv953|JZ4Us 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 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager$1$1.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/SQDevEclipseEventManager$1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e10f76f7161e2381cb8021658b0733783807357b GIT binary patch literal 3191 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 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/VersionManager.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/pluginManagement/VersionManager.class new file mode 100644 index 0000000000000000000000000000000000000000..d3fbb3ce8ee10bcfc2e6f5b84a0f518290e7be2e GIT binary patch literal 4719 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 literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/EditorUtil.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/EditorUtil.class index f813edb46f9715b3169bd7d84c833837ac3cd35b..5370e7ae58faddca9cafb9d1b755a968ee69de15 100644 GIT binary patch delta 458 zcmYk2+e!ja6o$X;j9Jsr0m&{Dp#%}3gyw7xQ+uY#lD;EW1+g)uMra zg;c@LTZ@IlY2G%7uxb)zP06DEvR>lvO?}9sW8M8zybE8z{C+mR%KM$7F(C zMPF?0ICq{)oa9Qy#ENYlm5ReoTnjnxT1@GWx_+SsTHKJNeV{yOGz;)SyiSKAc!y8F zN7rfuvQi35smh9TrKc|Y9>k|%$lKeBy*xP$%mMioX(;+`|-Aos!!=R`{-0YBF?TiTxena7hP<+41nMZ sq0M-(Mz+St6ERnAR@ttSaEUz);wIS&+YPF~ckGWU_(P?H+x72%0r+rFl>h($ delta 52 zcmbQj-@?sx>ff$?3=9k=3?UP_mU9TFrWs#db6BLo+|3;<$$|j#@e9@f diff --git a/plugin/Raven.SQDev.Util/build.properties b/plugin/Raven.SQDev.Util/build.properties index 3ca12925..cc05bf7a 100644 --- a/plugin/Raven.SQDev.Util/build.properties +++ b/plugin/Raven.SQDev.Util/build.properties @@ -2,5 +2,6 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ - resources/ + resources/,\ + plugin.xml src.includes = resources/ diff --git a/plugin/Raven.SQDev.Util/plugin.xml b/plugin/Raven.SQDev.Util/plugin.xml new file mode 100644 index 00000000..a22a6ead --- /dev/null +++ b/plugin/Raven.SQDev.Util/plugin.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/plugin/Raven.SQDev.Util/resources/icons/sqdevExportIcon.png b/plugin/Raven.SQDev.Util/resources/icons/sqdevExportIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6662b2527eb54774a44c14d3b89cf43fe1bcda GIT binary patch literal 483 zcmV<90UZ8`P)CfkKxuZlPu|NpXg%Ap3?2=Nt7ZMbS0ppyXrqk&)-}lRmG21YV%~68P0F=^;e!u@v zDwUwBDilQ-)5r{FY}>xJENijb?Ox^c`4>V+R5mn3q*yGr8;yprEUOJb(RJN4P4jFL zxeUM?$%&1 zcx|;>D**0fV&Ll%c`})dXqpyyo_8Ds!M#K`2Vft-Mrd#oi^Y~X=R+aH)Xd+o^9$}D Z;T_#fW#Ox{-oyX^002ovPDHLkV1fgN%$ooJ literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/resources/icons/sqdevFileIcon.png b/plugin/Raven.SQDev.Util/resources/icons/sqdevFileIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..8dbd1c5890164f90a9def935898844f34fc8ef00 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngc!3HE{ZXRg@QY^(zo*^7SP{WbZ0pxQQctjQh z)n5l;MkkHg6+l7B64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1SJc)B=- zNK7p~w_odMq0F(5)8$W9Oww`jj8xflGhoS_lbqd?deU}s=sBfZ%srP-z^*3#;C#YQ zNr?{b0GqbYvO0FZe}Ao+p!ZY7_(@OAgxDgdtfF`Gr4O+@`_SyHv$$PP?}Acy#8L5i zh5c!v4RXf_o0=ldg7rYZ OFnGH9xvX2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4UL8SG({#2okf6h)SY(XB66C68Oj9Mmm8Xq~h&}m_kChPnK{14wfNbYFf z9o!~VFva1_BPF*vTehe!+utoX(d)9(yr)I{-*-Ph#QHCIlFD2Ysou{^69Pr}XPr%Z z_q&cQVeyCXQwN$9BDUqm3pxq3JydL1e(9vm`TXDe?DMup1xHTn7q^=I*y8HvJ=@E6 zpA~U^sn5bJ5PQA$Wr>wf=+(`YhuIp==KtOG*rNY#-t^2_WroT7m=eSfL?xz7xx~`I z(O~Rr{O)Vjnz;4x|AaJ{6Bxc}wJLKoB}HDVowba=E%Ak;z#SFOB9r%D)|(q0i;y`U za(T<#g9!!Vt`pf4c3o&XnbM@uwcz!yu(e^u&kr&<*kuD*^EH=>I-RgM|2fA*YA;{= z;cSNY#ujo8@(1cRJ`g*QHS>tPRczDG6@qlY^gF7AY3t zs&ITr`L?i>xyowyDKeyword
    + * + * @author Raven + * + */ +public class AdditionalKeywordProposalInformation extends AbstractAdditionalProposalInformation { + + /** + * The Keyword this info will correspond to + */ + private Keyword keyword; + /** + * The action for taking the user to the wiki + */ + private Action wikiAction; + + public AdditionalKeywordProposalInformation(Keyword keyword) { + if (keyword == null) { + throw new NullPointerException(); + } + + this.keyword = keyword; + + // directly computes the categories + doComputeCategories(); + } + + @Override + protected ArrayList computeCategories( + ArrayList categories) { + // Description + if (keyword.hasDescription()) { + categories.add( + new StyledProposalInformationCategory("Description", keyword.getDescription())); + } + + if (keyword instanceof SQFElement) { + SQFElement element = (SQFElement) keyword; + + computeWikiAction(element.getWikiPage()); + + if (keyword instanceof SQFCommand) { + SQFCommand command = (SQFCommand) keyword; + + // create overview page + String overviewContent = ""; + + if (command.getDescription().length() > 100) { + overviewContent += command.getDescription().substring(0, 99) + "...\n\n"; + } else { + overviewContent += command.getDescription() + "\n\n"; + } + + overviewContent += SQDev.BOLD.getOpener() + "Possible syntax: " + + SQDev.BOLD.getCloser() + + command.getRawSytaxes().get(command.getRawSytaxes().size() - 1) + "\n\n"; + + overviewContent += SQDev.BOLD.getOpener() + "Return Value: " + + SQDev.BOLD.getCloser() + command.getReturnType(); + + if (!overviewContent.isEmpty()) { + categories.add(0, + new StyledProposalInformationCategory("Overview", overviewContent)); + } + + + if (command.hasExample()) { + categories.add(new StyledProposalInformationCategory("Example", + command.getExamples())); + } + + if (command.hasNote()) { + categories + .add(new StyledProposalInformationCategory("Note", command.getNotes())); + } + + if (command.hasRawSyntax()) { + categories.add(new StyledProposalInformationCategory("Raw Syntax", + command.getRawSytaxes())); + } + + if (command.hasSyntax()) { + // TODO: add syntaxes + } + } + } + + return categories; + } + + /** + * Gets the Keyword this info corresponds to + */ + public Keyword getKeyword() { + return keyword; + } + + /** + * Computes the WikiPage that can be used in a respective + * toolbar + * + * @param wiki + * The URL to the wikiPage + */ + private void computeWikiAction(URL wiki) { + if (wiki == null) { + return; + } + + wikiAction = new WikiAction(wiki); + } + + /** + * Gets the Action that should be added to the toolbar + */ + public Action getToolbarAction() { + return wikiAction; + } + +} diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/ResourceManager.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/ResourceManager.java new file mode 100644 index 00000000..09589c58 --- /dev/null +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/ResourceManager.java @@ -0,0 +1,531 @@ +package raven.sqdev.pluginManagement; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.jar.JarInputStream; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Platform; + +import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.exceptions.SQDevException; +import raven.sqdev.util.FileUtil; + +/** + * This ResourceManager is responsible for managing the resources + * of this plugin including reading and writing + * + * @author Raven + * + */ +public class ResourceManager { + /** + * The extension used for backup resources + */ + private static final String BACKUP_EXTENSION = ".back"; + + /** + * The ResourceManager itself + */ + private static ResourceManager manager; + + /** + * The name of the resource containing info about the versions of the + * plugins + */ + public static final String VERSION_RESOURCE = "versions.txt"; + /** + * The internal path to the icons folder + */ + public static final String ICON_FOLDER = "/resources/icons"; + /** + * The internal path to the wiki icon resource + */ + public static final String WIKI_ICON = ICON_FOLDER + "/sqdevWikiIcon.png"; + /** + * The internal path to the project icon resource + */ + public static final String PROJECT_ICON = ICON_FOLDER + "/prj_obj.gif"; + /** + * The internal path to the export icon resource + */ + public static final String EXPORT_ICON = ICON_FOLDER + "/sqdevExportIcon.png"; + /** + * The internal path to the import icon resource + */ + public static final String IMPORT_ICON = ICON_FOLDER + "/sqdevImportIcon.png"; + /** + * The internal path to the sqdev-file icon resource + */ + public static final String SQDEVFILE_ICON = ICON_FOLDER + "/sqdevFileIcon.png"; + /** + * The internal path to the SQF icon resource + */ + public static final String SQF_ICON = ICON_FOLDER + "SQF_image.gif"; + + private ClassLoader loader; + private URL locationURL; + private URI locationURI; + /** + * The path to the resource location of this plugin + */ + private IPath resourceLocation; + /** + * The path to the backup resource location of this plugin containg older + * versions of resources + */ + private IPath backupResourceLocation; + + /** + * Creates an instance of this ResourceManager + */ + private ResourceManager() { + setLoader(this.getClass().getClassLoader()); + setLocationURL(this.getClass().getProtectionDomain().getCodeSource().getLocation()); + + try { + setLocationURI(new URI(getLocationURL().toString().replace(" ", "%20"))); + } catch (URISyntaxException e) { + e.printStackTrace(); + + setLocationURI(null); + } + + initializeResourceLocation(); + } + + /** + * Gets the ResourceManager + */ + public static final ResourceManager getManager() { + if (manager == null) { + manager = new ResourceManager(); + } + + return manager; + } + + /** + * Gets the hard coded resource stored directly in this plugin's jar + * + * @param path + * The path within this plugin leading to the resource. (has to + * start with "/resources") + * @return The InputStream to this resource or + * null if this resource couldn't be found + */ + public InputStream getInternalResourceStream(String path) { + if (!path.startsWith("/resources")) { + throw new IllegalArgumentException("Given path has to reference the resource-folder!"); + } + + InputStream in = null; + + switch (getLocationURI().getScheme()) { + case "file": + in = getLoader().getResourceAsStream(path); + break; + + case "jar": + try { + in = new JarInputStream(getLoader().getResourceAsStream(path)); + } catch (IOException e) { + e.printStackTrace(); + } + break; + } + + return in; + } + + /** + * Updates the resource file of the given name with the given content after + * backing up the current content of the resource file.
    + * Note: There's always only one backup for each resource file + * + * @param name + * The name of the resource. If it daoes not contain an extension + * the extension ".txt" will be added.
    + * If no such resource does exist it will be created. + * @param content + * The new content of this resourcefile + * @throws IOException + * @throws SQDevException + */ + public void updateResource(String name, String content) throws IOException, SQDevException { + if (!resourceExists(name)) { + // create resource + backup + createResource(name); + } + + // make windows compatible + content = content.replace("\r", "").replace("\n", "\r\n"); + + // backup resource + backupResource(name); + + // write new content + FileWriter writer = new FileWriter(getResource(name).toFile()); + + writer.write(content); + + writer.close(); + } + + /** + * Gets an InputStream to the resource with the given name + * + * @param name + * The name of the resource. If it does not contain an exntension + * the extension ".txt" will be added. + * @return The InputStream to this resource file or + * null if the resource couldn't be found + */ + public InputStream getResourceStream(String name) { + if (resourceExists(name)) { + try { + return new FileInputStream(getResource(name).toFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + + return null; + } + } else { + return null; + } + } + + /** + * Gets an InputStream to the backup resource with the given + * name + * + * @param name + * The name of the normal resource. If it does not contain an + * exntension the extension ".txt" will be added. + * @return The InputStream to this backup resource file or + * null if the resource couldn't be found + */ + public InputStream getBackupResourceStream(String name) { + if (resourceExists(name)) { + try { + return new FileInputStream(getBackupResource(name).toFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + + return null; + } + } else { + return null; + } + } + + /** + * Gets the content of the resource file with the given name + * + * @param name + * The name of the normal resource. If it does not contain an + * exntension the extension ".txt" will be added. + * @return The content of this resource or null if the + * gathering of this resource's content was not possible. + */ + public String getResourceContent(String name) { + if (!resourceExists(name)) { + return null; + } + + try { + return FileUtil.getContent(getResource(name).toFile()); + } catch (SQDevException e) { + e.printStackTrace(); + + return null; + } + } + + /** + * Gets the content of the backup resource file corresponding to the given + * name + * + * @param nameThe + * name of the normal resource. If it does not contain an + * exntension the extension ".txt" will be added. + * @return + */ + public String getBackupResourceContent(String name) { + if (!resourceExists(name)) { + return null; + } + + try { + return FileUtil.getContent(getBackupResource(name).toFile()); + } catch (SQDevException e) { + e.printStackTrace(); + + return null; + } + } + + private ClassLoader getLoader() { + return loader; + } + + private void setLoader(ClassLoader loader) { + this.loader = loader; + } + + public URL getLocationURL() { + return locationURL; + } + + private void setLocationURL(URL locationURL) { + this.locationURL = locationURL; + } + + public URI getLocationURI() { + return locationURI; + } + + private void setLocationURI(URI locationURI) { + this.locationURI = locationURI; + } + + /** + * Initializes the resource location + */ + private void initializeResourceLocation() { + // make sure the resource location exists + IPath stateLocation = Platform.getStateLocation(Platform.getBundle("raven.sqdev.util")); + resourceLocation = stateLocation.append("resources"); + backupResourceLocation = resourceLocation.append("Backup"); + + if (!resourceLocation.toFile().exists()) { + // create resource location + resourceLocation.toFile().mkdir(); + + if (!backupResourceLocation.toFile().exists()) { + // create backup resource location + backupResourceLocation.toFile().mkdir(); + } + + // initialize necessary resources + try { + createResource("SQFKeywords.txt"); + + String content = FileUtil + .readAll(getInternalResourceStream("/resources/sqf/SQFKeywords.txt")); + + // put content in respective resource files + FileWriter writer = new FileWriter(getResource("SQFKeywords.txt").toFile()); + writer.write(content); + writer.close(); + + writer = new FileWriter(getBackupResource("SQFKeywords.txt").toFile()); + writer.write(content); + writer.close(); + + } catch (IOException e) { + throw new SQDevCoreException("Failed at creating resources", e); + } + } + + if (!backupResourceLocation.toFile().exists()) { + // create backup resource location + backupResourceLocation.toFile().mkdir(); + } + + if (!resourceExists(VERSION_RESOURCE)) { + try { + createResource(VERSION_RESOURCE); + } catch (IOException e) { + throw new SQDevCoreException("Failed at initializing reosurce location!", e); + } + } + } + + /** + * Creates a resource file with the given name + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + * @return True if the creation was successfull + * @throws IOException + */ + public boolean createResource(String name) throws IOException { + if (!name.contains(".")) { + // make a text document out of it + name += ".txt"; + } + + IPath resourcePath = resourceLocation.append(name); + IPath backupResourceFile = backupResourceLocation.append(name + BACKUP_EXTENSION); + + if (!resourcePath.toFile().exists()) { + resourcePath.toFile().createNewFile(); + backupResourceFile.toFile().createNewFile(); + + return true; + } else { + return false; + } + } + + /** + * Gets the path to the resource with the given name + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + * @return The Path to the resource fileor null if + * there is no such resourcefile + */ + private IPath getResource(String name) { + if (!name.contains(".")) { + name += ".txt"; + } + + IPath resourcePath = resourceLocation.append(name); + + if (resourcePath.toFile().exists()) { + return resourcePath; + } else { + return null; + } + } + + /** + * Gets the path to the backup resource with the given name + * + * @param name + * The name of the backup resource file. If it does not contain + * an extension the extension ".txt" will be added + * @return The Path to the resource fileor null if + * there is no such resourcefile + */ + private IPath getBackupResource(String name) { + if (!name.contains(".")) { + name += ".txt"; + } + + if (!name.endsWith(BACKUP_EXTENSION)) { + // add the backup extension + name += BACKUP_EXTENSION; + } + + IPath backupResourcePath = backupResourceLocation.append(name); + + if (backupResourcePath.toFile().exists()) { + return backupResourcePath; + } else { + return null; + } + } + + /** + * Will write the current content of the resource with the given name into + * it's corresponding backup resource file + * + * @param name + * The name of the backup resource file. If it does not contain + * an extension the extension ".txt" will be added + * @throws SQDevException + */ + private void backupResource(String name) throws SQDevException { + if (!name.contains(".")) { + name += ".txt"; + } + + try { + if (!resourceExists(name)) { + // create resources if they don't exist + createResource(name); + + return; + } + + // get the content of current resource + String content = FileUtil.getContent(getResource(name).toFile()); + + // write the content into the backup + FileWriter writer = new FileWriter(getBackupResource(name).toFile()); + writer.write(content); + writer.close(); + + } catch (IOException e) { + throw new SQDevCoreException("Failed at backing up resource!", e); + } + } + + /** + * Checks if a resource with the given name and it's corresponding backup + * resource does exist + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + */ + public boolean resourceExists(String name) { + return (getResource(name) != null && getBackupResource(name) != null); + } + + /** + * Checks if the given resource is already accessed as it's backup resource + * (= the content of the resource is equal to the content of it's backup + * resource) + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added + */ + public boolean isOnBackup(String name) { + try { + String content = FileUtil.getContent(getResource(name).toFile()); + String backup = FileUtil.getContent(getBackupResource(name).toFile()); + + // compare the two + return content.equals(backup); + } catch (SQDevException e) { + throw new SQDevCoreException(e); + } + } + + /** + * Switches the given resource to it's backup resource (The content of the + * backup resource is transferred to the resource itself). This cannot be + * undone! + * + * @param name + * The name of the resource file. If it does not contain an + * extension the extension ".txt" will be added. + * @return True if switching was successful + */ + public boolean switchToBackup(String name) { + if (!resourceExists(name)) { + return false; + } + + try { + // get backup content + String content = FileUtil.getContent(getBackupResource(name).toFile()); + + // write the content into the current resource + FileWriter writer = new FileWriter(getResource(name).toFile()); + writer.write(content); + writer.close(); + + // all good + return true; + } catch (SQDevException | IOException e) { + e.printStackTrace(); + + // smoething went wrong + return false; + } + } +} diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java new file mode 100644 index 00000000..72c824f7 --- /dev/null +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/SQDevEclipseEventManager.java @@ -0,0 +1,136 @@ +package raven.sqdev.pluginManagement; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.MessageBox; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchListener; +import org.eclipse.ui.PlatformUI; + +/** + * A manager for general eclipse events where certain behaviour patterns can be + * registered for a certain event + * + * @author Raven + * + */ +public class SQDevEclipseEventManager { + /** + * The manager instance + */ + private static SQDevEclipseEventManager manager; + + private List jobs; + + private SQDevEclipseEventManager() { + jobs = new ArrayList(0); + + PlatformUI.getWorkbench().addWorkbenchListener(new IWorkbenchListener() { + + @Override + public boolean preShutdown(IWorkbench workbench, boolean forced) { + AtomicBoolean shutDown = new AtomicBoolean(true); + + for (Job currentJob : jobs) { + if (currentJob != null && currentJob.getState() == Job.RUNNING) { + // inform about currently running jobs and + // offers to terminate them + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + @Override + public void run() { + MessageBox box = new MessageBox(PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getShell(), + SWT.ICON_WARNING | SWT.YES | SWT.NO); + + box.setText("Running Job"); + box.setMessage("The Job \"" + currentJob.getName() + + "\" is still running!\n\n" + + " Do you want to cancel this job now?"); + + int result = box.open(); + + switch (result) { + case SWT.YES: + boolean running = false; + + for (Job current : jobs) { + running = !current.cancel(); + } + + // if one job is running then + // kill all after 3 secs + + if (running) { + try { + currentJob.getThread().join(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // kill Thread after max. 3 + // secs + for (Job current : jobs) { + current.getThread().interrupt(); + } + } + + break; + + default: + // don't close + shutDown.set(false); + } + } + }); + + break; + } + } + + return shutDown.get(); + } + + @Override + public void postShutdown(IWorkbench workbench) { + } + }); + } + + /** + * Gets the SQDevManager for eclipse events + * + * @return The + */ + public static SQDevEclipseEventManager getManager() { + if (manager == null) { + manager = new SQDevEclipseEventManager(); + } + + return manager; + } + + /** + * Adds a job to the list of jobs being checked when eclipse is closed.
    + * If any running jobs are registered while closing eclipse a popup will + * appear asking if these jobs should be terminated. If so a cancel request + * will be send to them and then the jobs have 3secs to terminate themselve. + * After this time their Thread will be interrupted + * + * @param job + * The job to register + */ + public void registerCloseSuspendingJob(Job job) { + // add the job + jobs.add(job); + + // check for null jobs and remove them + while (jobs.contains(null)) { + jobs.remove(null); + } + } +} diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/VersionManager.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/VersionManager.java new file mode 100644 index 00000000..82347912 --- /dev/null +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/pluginManagement/VersionManager.java @@ -0,0 +1,158 @@ +package raven.sqdev.pluginManagement; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.osgi.framework.Version; + +import raven.sqdev.constants.ESQDevPlugin; +import raven.sqdev.exceptions.SQDevCoreException; +import raven.sqdev.exceptions.SQDevException; +import raven.sqdev.exceptions.SQDevSyntaxException; +import raven.sqdev.interfaces.IVersionListener; +import raven.sqdev.misc.VersionChangeEvent; + +/** + * A manager dealing with the plugin versions inside the SQDev feature + * + * @author Raven + * + */ +public class VersionManager { + + /** + * A list of listeners + */ + private List listeners; + + /** + * The manager instance itself + */ + private static VersionManager manager; + + private VersionManager() { + listeners = new ArrayList(0); + } + + // TODO: check versions on start + + /** + * Gets the manager instance + */ + public static VersionManager getManager() { + if (manager == null) { + manager = new VersionManager(); + } + + return manager; + } + + /** + * Registers an appropriate listener if it has not been before + * + * @param listener + * The Listener to register + */ + public void addVersionListener(IVersionListener listener) { + if (!listeners.contains(listener)) { + listeners.add(listener); + } + } + + /** + * Removes the given listener + * + * @param listener + * The listener to remove + */ + public void removeVersionListener(IVersionListener listener) { + listeners.remove(listener); + } + + /** + * Checks whether the current plugin versions are the same as listed in the + * respective resource and if not it will update them after notifying the + * IVersionListeners that a new version of a plugin has started + */ + public void checkVersions() { + ResourceManager manager = ResourceManager.getManager(); + + String content = manager.getResourceContent(ResourceManager.VERSION_RESOURCE); + + String versionContent = ""; + boolean versionHasChanged = false; + + if (content.isEmpty()) { + // versions of all plugins have changed + versionHasChanged = true; + + for (ESQDevPlugin current : ESQDevPlugin.values()) { + // assume that the fictional version 0.0.0 was the old version + versionChanged(current, new Version(0, 0, 0), current.getVersion()); + + versionContent += current.getID() + ": " + current.getVersion() + "\n"; + } + } else { + for (String currentLine : content.split("\n")) { + currentLine = currentLine.trim(); + + if (!currentLine.contains(":")) { + // the colon has to be present + throw new SQDevSyntaxException( + "Wrong syntax in resource: " + ResourceManager.VERSION_RESOURCE); + } + + String id = currentLine.substring(0, currentLine.indexOf(":")); + Version storedVersion = Version + .valueOf(currentLine.substring(currentLine.indexOf(":") + 1)); + ESQDevPlugin plugin = ESQDevPlugin.resolve(id); + + if (storedVersion == null || plugin == null) { + // these values have to be resolvable + throw new SQDevSyntaxException( + "Wrong syntax in resource: " + ResourceManager.VERSION_RESOURCE); + } + + if (storedVersion.compareTo(plugin.getVersion()) != 0) { + // version has changed + versionChanged(plugin, storedVersion, plugin.getVersion()); + + versionHasChanged = true; + } + } + } + + // store current versions + if (versionHasChanged) { + if (versionContent.isEmpty()) { + // gather new versions + for (ESQDevPlugin current : ESQDevPlugin.values()) { + versionContent += current.getID() + ": " + current.getVersion() + "\n"; + } + } + // update the versions file + try { + manager.updateResource(ResourceManager.VERSION_RESOURCE, versionContent); + } catch (IOException | SQDevException e) { + throw new SQDevCoreException("Couldn't update version list!", e); + } + } + } + + /** + * Notifies the listeners that a version has changed + * + * @param plugin + * The ESQDevPlugin this change occured on + * @param oldVersion + * The old version + * @param newVersion + * The new version + */ + private void versionChanged(ESQDevPlugin plugin, Version oldVersion, Version newVersion) { + for (IVersionListener currentListener : listeners) { + currentListener.versionChanged(new VersionChangeEvent(plugin, oldVersion, newVersion)); + } + } +} diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/startup/SQDevStarter.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/startup/SQDevStarter.java new file mode 100644 index 00000000..bb654ac3 --- /dev/null +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/startup/SQDevStarter.java @@ -0,0 +1,60 @@ +package raven.sqdev.startup; + +import org.eclipse.swt.SWT; +import org.eclipse.ui.IStartup; + +import raven.sqdev.interfaces.IVersionListener; +import raven.sqdev.misc.VersionChangeEvent; +import raven.sqdev.pluginManagement.VersionManager; +import raven.sqdev.util.SQDevInfobox; + +/** + * The SQDev class that gets loaded when the workbench is initialized + * + * @author Raven + * + */ +public class SQDevStarter implements IStartup, IVersionListener { + + @Override + public void earlyStartup() { + // check the versions + VersionManager.getManager().addVersionListener(this); + VersionManager.getManager().checkVersions(); + } + + @Override + public void versionChanged(VersionChangeEvent event) { + // perform compability operation and/or notifications + switch (event.getPlugin()) { + case EDITORS: + break; + case MISC: + break; + case PREFERENCES: + preferenceVersionChange(event); + break; + case SQFEDITOR: + break; + case UTIL: + break; + case WIZARDS: + break; + default: + break; + } + } + + private void preferenceVersionChange(VersionChangeEvent event) { + if (event.isUpdate()) { + // inform the user about possible additions in the preferences + SQDevInfobox info = new SQDevInfobox( + "The preferences where updated.\n\nMake sure you check them " + + "out in order to make the plugin work properly", + SWT.ICON_INFORMATION); + + info.open(); + } + } + +} diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java index b8f00f54..af778243 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/EditorUtil.java @@ -12,8 +12,8 @@ public class EditorUtil { /** - * Gets the word(part) in this document that occurs directly before the - * given offset. It will take all characters that are considered valid by + * Gets the wordpart in this document that occurs directly before the given + * offset. It will take all characters that are considered valid by * TextUtil.isWordPart(char c) * * @param document @@ -21,9 +21,9 @@ public class EditorUtil { * @param offset * The offset the search should use (has to be in range of the * document!) - * @return The found word(part) + * @return The found wordpart (may be empty) */ - public static String getWordBeforeOffset(IDocument document, int offset) { + public static String getWordPartBeforeOffset(IDocument document, int offset) { Assert.isTrue(document.getLength() >= offset); // get relevant content in reverse order @@ -46,4 +46,48 @@ public static String getWordBeforeOffset(IDocument document, int offset) { return word; } + + /** + * Gets the wordpart in this document that occurs directly after the given + * offset. It will take all characters that are considered valid by + * TextUtil.isWordPart(char c) + * + * @param document + * The document to search on + * @param offset + * The offset the search should use (has to be in range of the + * document!) + * @return The found wordpart (may be empty) + */ + public static String getWordPartAfterOffset(IDocument document, int offset) { + Assert.isTrue(document.getLength() >= offset); + + String relevantContent = document.get().substring(offset); + + String word = ""; + + for (char currentChar : relevantContent.toCharArray()) { + if (TextUtils.isWordPart(currentChar)) { + word += currentChar; + } else { + // word has ended + break; + } + } + + return word; + } + + /** + * Gets the word the given offset corresponds to + * + * @param document + * The doument to search in + * @param offset + * The offset to search for. Has to bein range of the document! + * @return The found word (may be empty) + */ + public static String getWordAroundOffset(IDocument document, int offset) { + return getWordPartBeforeOffset(document, offset) + getWordPartAfterOffset(document, offset); + } } diff --git a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java index fee636a4..521bdf82 100644 --- a/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java +++ b/plugin/Raven.SQDev.Util/src/raven/sqdev/util/SQDevPreferenceUtil.java @@ -15,7 +15,7 @@ import raven.sqdev.constants.SQDevPreferenceConstants; import raven.sqdev.exceptions.SQDevInvalidPreferenceException; -import raven.sqdev.pluginManagement.SQDevPluginManager; +import raven.sqdev.pluginManager.SQDevPluginManager; /** * This class provides functions for dealing with SQDev preferences diff --git a/plugin/Raven.SQDev.Wizards/bin/raven/sqdev/wizards/activator/Activator.class b/plugin/Raven.SQDev.Wizards/bin/raven/sqdev/wizards/activator/Activator.class index be4f6d81c5fc900e481c3df4ca7d3c6f899e4c02..3a7bc8c8b2be1deb7690574151842b347f0e476d 100644 GIT binary patch delta 36 pcmZ3&F^^-z7Dh&$$$uCn7>g!fWK?G~nEaDb8q5~ntj+Y35dh^J3@QKs delta 79 zcmbQov4ms87Die9qQtV)JpJOrl+-f)f}GOy%sk)3yu|d>+|<01$>$i=6^u1BeefyT JEX2ga1OS%m9HamM diff --git a/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java b/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java index 28743b79..7e30608d 100644 --- a/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java +++ b/plugin/Raven.SQDev.Wizards/src/raven/sqdev/wizards/activator/Activator.java @@ -3,7 +3,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManagement.SQDevPluginManager; +import raven.sqdev.pluginManager.SQDevPluginManager; public class Activator extends AbstractUIPlugin { diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class index 29c6ab3f9cc5ac8179227827acf316aa17af0eb3..0337910543c657df62a592c037db0ef68db92504 100644 GIT binary patch delta 113 zcmbQl*}=JC10$o(dI<>-D`9P6+cHHnYD6)njEKQPOgUv{cVA2)x%venZ4cugV8$W)$Q5Ck-!b28YF# z|KZ(nyV0psDp7}7!#(aRY~k(s??XkdwDrb&>s61u;IO(IwuL0lquP?89BHIZyn0KM zXU;HBI<{!V9v6F`hUR;#)_U?WOTCZQ(^KU*(VX%t3E4Jj89gJ>io7F4yK_I~_=Wi% z*NjG3oKeEt#F4iVPJ~`#Om4+>#s^)3K^NEkf&NV{+2{5k9GmWQ*KJ?nsXh;`aQDAV yUIgGdSza)~HZ$zVe7mt^KDOWvB*En&6%kER6;6T$7UfRKA3UNak(OL!Qr16MH%|}% literal 2080 zcmbVNZBrXn7(F+MY=~P3sjb>#8%j!(Kv|=$6)7sEX-%6@N`MN!%xreA$(FFY?!6o8 zCrAH`pF3lLu`~VvXZ%a8&)q~NfL4>4?A^Wh+2{3~v%kIgv+_ktce6vZ{`or72Q*(s1^4HM{9pp+H5)6}G&@{N!c6`ANu`3NuzN9c} zUMTpYZTgZ23`4Tzh}^prt2$7yc?PXxwsQ^XGGwbqW9~Y3lT*-Jp_HCW#zQw9*O4DH zY~=?G_^KF%4Ti*$XY*k&oYL_chSc4t4h_i^;uzC0j0{6OuS`d)j?0(Bodyrq%to6t zWU8KJwl~bcQO~{2gz6K+++a!PN~%vgs`KkU!&LrQ5r>CUR)d-^Y@~1w;~LI0T=@6C z>Uaki7*c}Eva6D|sRjA1!iI({P37=lL+P}QRW7_Ruz1aM2`@nk7crK^BtueiA!p?i znZ#xCr=GGc0^Ni%xuPSF0>en?+ot4yI$^kyuRbH4*B`hYHXXMMg&hK3S60eh;fSEvgNcq$u}G*O zLicuPF!@41BmS$idDVs`9k)^byOt8eWpa2J>?aqK!UFE<_)In8T)>--ATe8NdxF

    @JZQF70+m!19W&Qf_}~PBjM3N64jUdi8;_z>Jg*wI4bk;fA})YD%ugn%C1Gdq8`<_ zY8 zCf@3~`kewLXm7FjGe+Wjc>6gnZti2EHj}xO$?ak4CnT4z?xFY`#%3{7QfB*j{{SBx z;N}5t?cq*ztvn@%X>xm>geeY{#1v%=+@<_0baJ20Y8b}@s&W-2d{5N-fmrZklwh%& zL@z-~2g_usJeIJ6hg8luS*)T?zSqd>S;SsasJI5EVO=9drFA+%r;q3~hR?A{Yl3*O Rg|Fx?Lwl+P>SuJ9KLC4)Lo)yX diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$2$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$2$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e1441b2c547a42ccf3f095e13eb348b00934c48b GIT binary patch literal 1416 zcmbtUTTc@~6#k~IEUc^4DtJSzTD2|6S_A=0cn~l)X$38k$lJ0zmW8sr&PDYBAsM$;Fo7`0fdKgk2?t?}U zIO}!J(4#hdnJG}na+fiS637H(*1B68d< zYSF5qv*JYUo-?aqL%95oucvD0FB3YZBNNcYz^#XpB3HQD2t5k}m|GE5^engDWWa1(cI%WK_}G}$+nm0q^V`4{0CTj z7~I3qSIl*YU0isFu@0TOx{F+gOzh&?0ji)u#Gye9Qh4Ac_46x?;x%sJ4esLYZ-7c| jKog`#iGC+>9Fs)Ea1&E>CTOOo$q-}|qx=5Scxn9vEoXrk literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$2.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage$2.class new file mode 100644 index 0000000000000000000000000000000000000000..7354fd9951b091e918127672bce7e964274e2e5b GIT binary patch literal 4176 zcmbtXS#uoK75=V9QjbP0ED760AaL83gBDBUC59k57&Df_;E^n}Ms|YIGjpYBYo>eL z-J>NySj?7S1K9(Hkc1?>DpZhdTt!~;l*)g|Q>v)^f;`3fZqMS8WFy;=s?_(Md(OG% zp7WhWfB*02UjX<9KG9Gk@ThApN;~SEOUuP*-j#FGm3B&c(Y!g&zvIuGkc-2Xml~}c zjq;%5kcL`;-HtmSm8q%cH9!?d zE!*-R7f5v8rH;f|bJ2`uO?y5%?z@&fKhQNLP#bg7vH=2(I_gj#K?qGcG~6Swqx0q> z+Y**7M+&*5bSKPYRtmHxoRpcJGF?mUOT=3BXo1J>&fJbed~{=nX*>2x&MA0wUh8Ia z1VZ$-z^Tr}EyEBWb)9)vdfu=@4?6BZ*H`e4`=(#;2EzE7K+9x4ZTfVSu^?BL95?MX z;(oMictD`*wy)FiARZEENXmK3o-n-yft@#TY`kkqgCWpY4G_zob7D?5D^tGZ*aYHG z%*o|UJ6$3=u7*7VdJtJ#`q9a;L>L_cLmA)Cd;L)YGM6jx*(-fX%kv9q%jqL2x@0X_ z(U|GWdB;1l>EJ@bRdQZ{jh5h~>phR*|es6Q!M9 zr!^4K4_2$Y;lelrophGN_?E!O6B$`XoKa8^lt#w%jHHydVcEWP-9p}%>AuJb$5?R+ z#**b_4Bs(4f?FCsrBel$70fSd@s1gt6HG>OX0wK~NDWqcBc}qmk>x84;>*aHD@Inz zw9;#;Yl)hCR?-y3(iK5Jj;Yu@q*ljuJc$@Gw$=UIV;}etP0(-Vj&)_a3V#{?!BVCp?#dHJllBCvOZR&U8?lBLPwMN3Qr5lmx7 z!*@3LH5j(5E^MMsNnts(8%`9KFj1!iua?Y8s}FBvJxl zZ^cdxE=w-&tFCBc1>07Afb1$Eq>eev6CG*CX0ISRroylU?j0vytE+2YUta_Z$Z5z5 z>|giRY=Omd*tFSpa|CvDOnOeiP01q3)nUUaMx;a$IKYV9i4NBMb1Yk|v89am`ut@- z0uKcZzCcg4vMmaMjzv|_S{VLujuy%pLxiMBbqiS5v4S74+!b@X{1kzQtDRVC(Kjn= zVLUG|9k&f;taJ^6JxF?6E>#jt+FP|iN;S=G->;4}#W&H~)BlZ^4H=h$34{E>=p(@aRiz&TNp^eBIv{PBfBanxspK(}E zKju_X4U^lhr#k+quv$vra`V=Sn>#yMHs~8nn!_@oOS>9d4nVIg(_}&`6PbC~}+Ui$}i=Ng@@!l&q zJJQ>l-@gWT4NJid&(%?Xe{EYWZS3boXcXDfgUD>9sEUf$M zZF2J6tBh3xN0L9_$8hnx;9J~ZDD5u<=U*}mF1~>JhJv7d&M6jnmZwQHA;rK*w6XQI zbH9teaPSD%{WwQ7c)ar>rtl6de83Zr+L!sef|v0eUc>V|c@aOu zOZWv|!7sVKgjZ?b>qO%lSjC(8j22(TTeRsS{z2}4QqRA*{}LDQZ_@sQcSIwzxdk7J z?W~e}xIe=E06q#pHb!g`K4p+`^)|I|>cxe7~kg&Le!CkJ2;<4fkvCG%6xg-vh4m%20)__6Jc@+$-ku*U4FtJHKA8 zito~O>_L4=PN}|BR9$9)(HzEy_)RJG_VFudSY7vD5LxA-m~{04v6yfw{X+DMI{PiX W45r%eiG@FL)k>NYS3hTppZ@__A+wJF literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.class index 401b970606a0035dc22120f936a8882b66a620c2..59a3c15078472ed1ff960f737770efcca4b7471a 100644 GIT binary patch delta 1519 zcma)5-%}e^6#j0q$u8>xVG9%}Sg3&}frdhxQb^@j2~`RT5~`tC3CWs9LXu_^TC^Ig zR;hi^c-04|Z#pvLlhqnj9DP&ANB;mF{{UzF3#{jEXwm75`*6;=XU}(jeCOVqjUOIR zfBE~{?*Sag&64_=rWLaBXxwBz$8?4W{Uqcg``7PGX z4)CAZA!nP0hjEbq#U`Z=hKZ7^ng408<8fOndxT%Jc^W$zYP%+rIWylL%dD+M)A1n% zhxre-8%jI8BE65#+GEZh4M*VT-`JPgQQjhTv3@=#?PJIJg0#s_@ZY3P=SdBN7~)lq zQ%V4*1oTlpm-u+qVbh8W^}RK8VTJ)e)pR%fEwuxL}pDx>YZBR4x`tTD9l zKcpr;tH=#CmEE4*ZAwO#S#><_eg!#(x(E7JkwIRRFEC77~;0 z#N8w9pa6OCu3o)QKep!yM0{loxRh-KzrwKZ4ufq`v|pG^gXypA_^D|C{s+y^4^a{}8e@|>2_ZGq`#5ac?RAAoG*&As9lqz8-l WFqCQ2%69{Alh*0HL|S~AiuwnL11|3X delta 1015 zcmZ8fTTc^F5dKbgySuCll$Dz|u5E1>ij;B}DK}BMDijn&bZM(rz@lxUKJ~>!jSpB( zfCrwQBkN6_5K8Uj|#^`P`bLN{fGvCadjRTL$)i1x^e*n;mm8|-r zO6p16NThoi1fPGFK^#oR;wl8}(I7+NB3oyB`4bkD$~2Utf`4NTY#;y0>ZAi24&o56 za}0~s3`1GhK3*-B@D0a7v6i8pPl^@%tD~sAo}t(~oVb-r*F=*mE9Q+@w*n8}c0AOo zaM&*6W0?2xr-FyS6uKotLjxN5ci}Q?;$xz>teK(6J7)e9-@@;U4_GUAIXzOlh7NS{ zqs|^Bgl;?GQJ!%cjS7xY>6z7-nU2>i#qZuu-ioDEgb>!yhYAKc6;DUvchU+5xaAya z3SmgYaoba5dy>iJNMhB#PymJ#8k~?+oWiJ#5r*3A<65VNF^uzw)JByjHJrv7o|Q@^ z8Pg0MSyx-JJE&p`Gd3xj?s@)0>EfnR$=6g_^UvC3&S{t<$GZGX5Ej$fkKU5P>9iSL z8aG!X=HhZ(MwEw@Di-GpN?n0sMx*gm%H7Pj3;ZsIKX#D8ec zL$9>3f85wY)tp|V*Xi!YO?a&g{COy#AJKz32>vaE<_rsME@cy469K))LT^Ctw=fuZ zi{Vdjk+g8~Gi2d8MA5=TU<*@oMqm>W3ukS%LXPbSbUFv9y=G$DLRN@gW-BVuP7ksL z)yQYJP<9kk0Sm9ftqzK+1uh q93k2Ug7)At*PJ*kWU diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java index dc4d33b5..e518777e 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java @@ -3,7 +3,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; -import raven.sqdev.pluginManagement.SQDevPluginManager; +import raven.sqdev.pluginManager.SQDevPluginManager; /** * The activator class controls the plug-in life cycle @@ -16,12 +16,6 @@ public class Activator extends AbstractUIPlugin { // The shared instance private static Activator plugin; - /** - * The constructor - */ - public Activator() { - } - /* * (non-Javadoc) * diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java index de512222..efa2d7f8 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevMiscPreferencePage.java @@ -1,10 +1,6 @@ package raven.sqdev.preferences.pages; -import java.io.File; -import java.io.FileWriter; import java.io.IOException; -import java.io.Writer; -import java.net.MalformedURLException; import java.net.URL; import org.eclipse.core.runtime.IProgressMonitor; @@ -20,13 +16,12 @@ import org.eclipse.ui.PlatformUI; import raven.sqdev.constants.SQDevPreferenceConstants; -import raven.sqdev.exceptions.SQDevCollectionException; import raven.sqdev.exceptions.SQDevException; import raven.sqdev.infoCollection.SQFCommandCollector; import raven.sqdev.infoCollection.base.KeywordList; +import raven.sqdev.pluginManagement.ResourceManager; import raven.sqdev.pluginManagement.SQDevEclipseEventManager; import raven.sqdev.preferences.preferenceEditors.ValueSQDevPreferenceEditor; -import raven.sqdev.util.ResourceManager; import raven.sqdev.util.SQDevInfobox; import raven.sqdev.util.SQDevPreferenceUtil; @@ -35,6 +30,10 @@ public class SQDevMiscPreferencePage extends SQDevPreferencePage { * The job used for updating the keywords */ private static Job collectionJob; + /** + * The button corresponding to the update function + */ + private Button updateButton; public SQDevMiscPreferencePage() { super(); @@ -60,75 +59,111 @@ public void init(IWorkbench workbench) { keywordGroup)); // SQF keyword collection - Button btn = new Button(createContainer(), SWT.PUSH); - btn.setText("Update keywords"); - btn.setToolTipText("Updates the SQF keywords according to the BIKI. This may take a while"); - btn.setEnabled(collectionJob == null || collectionJob.getResult() != null); + updateButton = new Button(createContainer(), SWT.PUSH); + updateButton.setToolTipText( + "Updates the SQF keywords according to the BIKI. This may take a while"); + updateButton.setEnabled(collectionJob == null || collectionJob.getResult() != null); + + // set text according to status + if (!updateButton.isEnabled()) { + updateButton.setText("Updating keywords..."); + } else { + updateButton.setText("Update keywords"); + } - btn.addMouseListener(new MouseAdapter() { + updateButton.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { - btn.setEnabled(false); + // change button status + updateButton.setEnabled(false); + updateButton.setText("Updating keywords..."); + updateButton.pack(true); - ResourceManager manager = new ResourceManager(); - try { - manager.updateResource("test.txt", "test here!"); - //TODO test - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } + updateKeywords(); + } + }); + } + + /** + * Schedules the keyword update Job + */ + private void updateKeywords() { + collectionJob = new Job("Updating keywords") { + @Override + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask("Updating keywords", IProgressMonitor.UNKNOWN); - collectionJob = new Job("Updating keywords") { - @Override - protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask("Updating keywords", IProgressMonitor.UNKNOWN); - - try { - KeywordList list = new SQFCommandCollector( - new URL("https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3"), - SQDevPreferenceUtil.getFirstCommand(), - SQDevPreferenceUtil.getLastCommand()).collect(monitor); - - // TODO: store keywords + restart util plugin - Writer writer = new FileWriter(new File( - "C:/Users/Robert Adam/Desktop/tester/KeywordList.txt")); - writer.write(list.getSaveableFormat()); - writer.close(); + try { + // gather keywords from the wiki + KeywordList list = new SQFCommandCollector( + new URL("https://community.bistudio.com/wiki/Category:" + + "Scripting_Commands_Arma_3"), + SQDevPreferenceUtil.getFirstCommand(), + SQDevPreferenceUtil.getLastCommand()).collect(monitor); + + if (monitor.isCanceled()) { + // ask whether to save the list + SQDevInfobox info = new SQDevInfobox( + "The keyword update has been interrupted.\n" + + "Do you wish to store the current keywords?" + + " (This will override the current keword list and may" + + " leed to an incomplete list)", + SWT.ICON_QUESTION | SWT.YES | SWT.NO); + + if (info.open() != SWT.YES) { + // don't save + return Status.OK_STATUS; + } + } + + // save the keywords + monitor.done(); + monitor.beginTask("Storing keywords...", IProgressMonitor.UNKNOWN); + + ResourceManager manager = ResourceManager.getManager(); + manager.updateResource("SQFKeywords.txt", list.getSaveableFormat()); + + // tell the user to restart + SQDevInfobox info = new SQDevInfobox( + "In order for the new keywords to take effect" + + " you have to restart all respective editors", + SWT.ICON_INFORMATION); - } catch (/* MalformedURLException | */ SQDevCollectionException - | IOException e) { - SQDevInfobox info = new SQDevInfobox("Failed at updating keywords", e); - info.open(); + info.open(); + + } catch (IOException | SQDevException e) { + SQDevInfobox info = new SQDevInfobox("Failed at updating keywords", e); + info.open(); + + e.printStackTrace(); + return Status.CANCEL_STATUS; + } finally { + if (!PlatformUI.getWorkbench().getDisplay().isDisposed()) { + // reset buton status + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - e.printStackTrace(); - return Status.CANCEL_STATUS; - } finally { - if (!PlatformUI.getWorkbench().getDisplay().isDisposed()) { - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - - @Override - public void run() { - if (!btn.isDisposed()) { - btn.setEnabled(true); - } - } - }); + @Override + public void run() { + if (updateButton != null && !updateButton.isDisposed()) { + updateButton.setText("Update keywords"); + updateButton.setEnabled(true); + updateButton.pack(true); + } } - - monitor.done(); - } - - return Status.OK_STATUS; + }); } - }; - - // make sure eclipse is not closed with this job running - SQDevEclipseEventManager.getManager().registerCloseSuspendingJob(collectionJob); + + monitor.done(); + } - collectionJob.schedule(); + return Status.OK_STATUS; } - }); + }; + + // make sure eclipse is not closed with this job running + SQDevEclipseEventManager.getManager().registerCloseSuspendingJob(collectionJob); + + collectionJob.schedule(); } } From 92e61a60d06e4b03de2335708e8d113e6f95fd07 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Tue, 26 Apr 2016 16:36:36 +0200 Subject: [PATCH 4/4] final tweaks --- .../Raven.SQDev.Editors/META-INF/MANIFEST.MF | 2 +- .../editors/BasicCompletionProposal$1.class | Bin 1051 -> 1051 bytes .../editors/BasicCompletionProposal$2.class | Bin 1329 -> 1329 bytes .../editors/BasicCompletionProposal.class | Bin 4726 -> 5465 bytes .../editors/BasicCompletionProposal.java | 17 +- plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF | 2 +- .../infoCollection/SQFCommandCollector.class | Bin 17970 -> 18085 bytes .../infoCollection/base/SQFCommand.class | Bin 12707 -> 13008 bytes .../infoCollection/SQFCommandCollector.java | 9 + .../sqdev/infoCollection/base/SQFCommand.java | 19 + .../META-INF/MANIFEST.MF | 2 +- plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF | 2 +- ...AdditionalKeywordProposalInformation.class | Bin 3862 -> 4327 bytes .../pluginManagement/ResourceManager.class | Bin 8572 -> 8648 bytes .../bin/raven/sqdev/util/SQDevInfobox$1.class | Bin 1814 -> 1863 bytes .../bin/raven/sqdev/util/SQDevInfobox.class | Bin 1894 -> 1894 bytes .../resources/icons/SQFCommandIcon.png | Bin 0 -> 381 bytes .../resources/sqf/SQFKeywords.txt | 7891 ++++++++++++++--- .../AdditionalKeywordProposalInformation.java | 15 + .../pluginManagement/ResourceManager.java | 6 +- .../src/raven/sqdev/util/SQDevInfobox.java | 9 +- plugin/Raven.SQDev/feature.xml | 12 +- .../META-INF/MANIFEST.MF | 2 +- plugin/SQDev/SQDev_0.4.0.zip | Bin 0 -> 167073 bytes plugin/SQDev/SQDev_0.5.0.zip | Bin 0 -> 583538 bytes plugin/SQDev/artifacts.jar | Bin 678 -> 686 bytes plugin/SQDev/content.jar | Bin 2495 -> 2579 bytes plugin/SQDev/features/raven.sqdev_0.5.0.jar | Bin 0 -> 1266 bytes .../raven.sqdev.editors.sqfeditor_0.3.0.jar | Bin 0 -> 10411 bytes .../plugins/raven.sqdev.editors_0.3.0.jar | Bin 0 -> 38740 bytes .../SQDev/plugins/raven.sqdev.misc_0.2.0.jar | Bin 0 -> 68523 bytes .../plugins/raven.sqdev.preferences_0.3.0.jar | Bin 0 -> 46001 bytes .../SQDev/plugins/raven.sqdev.util_0.4.0.jar | Bin 0 -> 420462 bytes .../plugins/raven.sqdev.wizards_0.2.0.jar | Bin 29079 -> 29079 bytes plugin/SQDev/site.xml | 2 +- 35 files changed, 6900 insertions(+), 1090 deletions(-) create mode 100644 plugin/Raven.SQDev.Util/resources/icons/SQFCommandIcon.png create mode 100644 plugin/SQDev/SQDev_0.4.0.zip create mode 100644 plugin/SQDev/SQDev_0.5.0.zip create mode 100644 plugin/SQDev/features/raven.sqdev_0.5.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.editors.sqfeditor_0.3.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.editors_0.3.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.misc_0.2.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.preferences_0.3.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.util_0.4.0.jar diff --git a/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF index 72853b37..cbca83ec 100644 --- a/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Editors Bundle-SymbolicName: raven.sqdev.editors;singleton:=true -Bundle-Version: 0.2.0 +Bundle-Version: 0.3.0 Bundle-Activator: raven.sqdev.editors.activator.Activator Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$1.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$1.class index e282acb8744009af6ff150da170dcc09957462e8..aeeb1092b436f7558fdb17f1c082ff8fa50d8fdb 100644 GIT binary patch delta 19 bcmbQuF`HwqIFm9fFo7n*XM-vAc delta 19 bcmbQuF`HwqIFs_+=o7n*XMxzG| diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$2.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicCompletionProposal$2.class index a2a5962692ac3d01f100a5b4d2d82f4f71ff0c15..aede9c5758e97c3d6444ac23a3dffb44b02f9168 100644 GIT binary patch delta 31 ncmdnUwUKMXBo@ZYlP9xy@?K})WVpe=$8eoNkm2U!mnR delta 31 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 diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicCompletionProposal.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicCompletionProposal.java index 578712ee..1855a723 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicCompletionProposal.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicCompletionProposal.java @@ -14,6 +14,7 @@ import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.TextStyle; import org.eclipse.swt.widgets.Shell; @@ -21,11 +22,18 @@ import raven.sqdev.infoCollection.base.Keyword; import raven.sqdev.miscellaneous.AdditionalKeywordProposalInformation; +import raven.sqdev.pluginManagement.ResourceManager; -public class BasicCompletionProposal implements ICompletionProposal, - ICompletionProposalExtension3, ICompletionProposalExtension5, - ICompletionProposalExtension6 { +public class BasicCompletionProposal implements ICompletionProposal, ICompletionProposalExtension3, + ICompletionProposalExtension5, ICompletionProposalExtension6 { + /** + * The image for all the SQF commands + */ + private static final Image SQFCOMMAND_IMAGE = new Image(PlatformUI.getWorkbench().getDisplay(), + new ImageData(ResourceManager.getManager() + .getInternalResourceStream(ResourceManager.SQFCOMMAND_ICON))); + /** The string to be displayed in the completion proposal popup. */ private String displayString; /** The replacement string. */ @@ -57,9 +65,8 @@ public class BasicCompletionProposal implements ICompletionProposal, */ public BasicCompletionProposal(Keyword keyword, int replacementOffset, int replacementLength) { // create instance according to the keyword - // TODO: add image this(keyword.getKeyword(), replacementOffset, replacementLength, - keyword.getKeyword().length(), null, keyword.getKeyword(), null, + keyword.getKeyword().length(), SQFCOMMAND_IMAGE, keyword.getKeyword(), null, new AdditionalKeywordProposalInformation(keyword)); } diff --git a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF index 43cc3925..18967047 100644 --- a/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Misc/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Misc Bundle-SymbolicName: raven.sqdev.misc;singleton:=true -Bundle-Version: 0.1.0 +Bundle-Version: 0.2.0 Bundle-Activator: raven.sqdev.activator.Activator Require-Bundle: org.eclipse.core.runtime, org.eclipse.swt, diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/SQFCommandCollector.class index a68dab00c73765fe97f51fe4d89437ae842a8545..8a90933ae84ba363857858caaa9c9e73feab6e6d 100644 GIT binary patch delta 1664 zcmZ8hS!`5g6#o8m?yMc4WvF&a2TMgPohd?F8?2GijwOJlHc*xpR0cXN19VDzhaDZ2 zeMhfSTV$zhF(?ScTLQ82peAaJOJXo2O29jc%t1+331IN6~JnRtj1_}v?G>`b?aj2R!~p5C~2gEd5t=)^Ll<>VMw_P~%Ut%phmPs}8taw`~1lE(CwZ!(bQ{Q!v`o!UW ze8wsz-3K;q))c6AF-NFknPg!rCuxB2Hp-2 z?@Y-???y52MHwGJ1s_C}$Z9rF&xd4BdoWLA3m=wF9+55{!)88?T_X2zKl=D2PV*^T z%)U8%jeoBZW?(0`gG>oDQI9X$a-j7L=h3WuWcA%(PM- z4#-O=MdTob@(uw)_|QU_5{ZNu{m>u8#E_U^lth31BAS>u?sHouCVt$r*IoPUb@n-D zoh!ZS<`Fgeo4-E02VfRmvOx;d^v~7=y~Xkm%$*s~J%L)bX}NwJD9JQA)J&@t@>(`V zli{?2Rk3JF#7A$_TASWc@NbHCMW?q#J6fklWJa_l9ZNbCrF9B+JT*Vw8h2|VQ<}WA zUSY)2Sh_RW5nK^%>x|WSX@kPJ;D5MaeImUv-qGr%jSAk(v)@gk*wEdPj&75>Hid#E zvRr#i)=LS|p`hm2wB?_UI@9sC>EUED+Fchxib~U9sSh zrVom`99o5xLE9YaMoM9nep*`SP0$X9cG50Avh4ZQ8HaY8)aVU~WP3FItO-;1zC(LW zvT!Ilv@v(Dri1;Wg6|AE=+Fl^FNc|mZ;u(`utPm`ME8~jWwoOYeMrY{-7c$D>g=sQ zCN>502f*;kg;nY1*Fu>AL5w$K90!lUsmS9HN_ZN|C5E^fi_GPk9ICJmEfNK(JY_=} zL=7kfArF&j87&vB5_o9^ieO>A_{2b5JNTz+t?|5xm0lF_#x&DZh?ZehXW9F?R40?B}Jp$PE~f zc$-(@TW-XU5}$B0ewFVjuT~bXQO|L+3h-K0%~2KRO}aEPUNz{KBUJ^7Mr)9^E|&FE zx;;|t>#V;^iN-wP^s&e!)uL}ks$~2rQl5D?OWTWWYie=+Aid{e&(vbyAng$xDz>w< zZ{N1U3Lf)SDmn!5dOI-Sq__Z9D>9}x=8PKGKvoQ|`#JQ#NI-0PVP6*0J4{GRRK|VafY&z*W z{0F>5ed2hFPRVx1iQ16vX+cA3{i0^vUkxiKPr$ZA#{S~{gz>(T=KjQu9LB=qz6+C( z7a{NI1$h$P`jZ7klg{|n%&f|a|LQ8usgirDK8fJl7|DbBmjx5mZtYoE;rT+W_odD( d9G`zqT2-R4*X17w|IqNG&bz##3r2}9{tbtASN#A0 diff --git a/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class b/plugin/Raven.SQDev.Misc/bin/raven/sqdev/infoCollection/base/SQFCommand.class index 6bc64b99560580658c04d00ad1ab85d4392747ef..a94bdc5b7fc5fc0984ceeaf0721ed7965db5b944 100644 GIT binary patch delta 3322 zcmaJ^d303e6~DimNoF$h$TC@mkU+vDA<0Z&2#p{VFknCeA&@{7kS&r4M6*CL>`ROS zQWjZ0WM5K5f*1^&6UtJs2vIyJqLh}ZoWp75Xepkydg?hnCB1K!6p{9yxxf3}efi#d z^ZJadZu8~)r+!03xoA0R-W-vYP*FFecIMnFceSUmW=3gcg=b;DyS$>>U1lc0q``nt zGmWP^YFC8AZmXypR$lI&@hII04Hkr|_af2^F&ZM(-H43v&Kl)YmLP8*`TOdrFHr4x*4?< zvpp3x)qdq(8eG%>iuke6Oh=HT(JAx+C1p-hpP0LJGa(mb5xsE>t39O){Puk{+DHv1 zJg)Mh;zkV6kgjtBL7hZ#*n-lk*_G}(zv^I(e$a(^l9~vMYCJ*7Pz`aqBuP(yn1&>^ zAiX)oTrQmp+ALNL*69&1X?T%t>*H9iVTJnE8rS6&4c)0&Kl-IcTXi%ZYc#CII@K*^ ztbM&k|EBx8c%ufhA1Mvdev{WUB&rQDjaYs>C$xhS4Na-O>u?pl^hz? zUs7@qt-5ya)yL}e(yAS#NhLa5`^?df0^%uD@;E34hbRHfl!n996D?|KcUxSnue=&x znIW-xut~yk3f*EER&}m>BHmF$5|aBOo^}U%Rv=XGnbmOuwl)fnK|&K5b>>J%M1RZ9 zs@`_{=tL?GSk97ev*>hjULv#PxJP;|)`bGM6*`>n!1i#?ZDhgw6p0Th7FQ(qkJMg! zR^OyYHngj_^3qrTYkr^k8k($ z)wR@Kuq&j+J^l}A;`frsKgo_Cd|u*xC8Y+u5Tzomqotw5(o*SYy1%1#Uq|mtM^jW| znz?(PY?$7VyVenfr|HN<=Se!&O5Pas@X|>cWTyHyBf%o=(V3oJ^j10P@s^+Y`Nx8M zKR@3;$p75W4+`>6`1v6LzWzx+pD(=ihF~w9DRk>pm2d96vCmD#$hy!ja1Gi zdWFO3Ae-p}w$L}+>4Do`4ViEYynrm&0KEcHnylt$+Oa@4 z$0F5|8HcXo(561mOsHoo**K1}Ii7~FjV5zvnj?4-ccJB+L@T)~Z4$bLlj$wC(|Jy% z>zqb^<#aHo!onGd<1E+`{E$?!wI1$xj(M( zK-AynL2Ty1oG3JzpWs}6k_$MWr}8kK$HRGz;LSXO_wYz=Z6|7{on#0wM*Ku9msws=fz{qGi`_{ct#=&GRy1rU zi^J)~%j$q*6IQDJ&T&|!);UX3R$n4Zg7G9)w^3+Fvm+r)pck(?d}m&4Q0>kFY*Gc; zx%Hd>``$qjjgyNwk)n7KS*3y)o<_+$ozewo3Uvz2=I1D%%cy|MsYvhyuB3@vMbo&N z%7nVPhF*}fYN2z4*76)$!*w$6xwM1lQKRsOc(KfV2_5C7_2d=M%FF1i9G(|?LFh$( zk#6xz^c63sd%S|a6aGH0rgmO~P+kkOPz$d^G_OXiP@B*MUXMiHfGnX--iV&O3AwD$ zU+5s-j669T%3Cm!x1xl%VLb1^6t3SX8?^^Bc`xd?5eo$`5n3;_f%jo2@5eqqfJ5Ab zBf_8JW}N23c$eSCC82HHA{*C?t3p2&dYzBr3qFQhd;)*wR^I}>N)h_Rg3oK*!4}^F zW#crqmg##V-@Inu28B>9=3<+ih0q#`!*)Rix(GXV_|Ppmll_ucLIQn+oj&BGGuS04 z3`6M+>=tB11C?WsAd~3C$r?`Wb+hw|;1coE5>Zb{mZueakB@bU${8~8Su*o^O5%5A z;J>9_e1ZD$dz8l)W!RUfgxly@eqV)zDle36I##LXe)n8d-*eJ z;_KAHzmvJ%pmY3tYU4l9$9$7+@E>KaU(nzAOBneU!uhtpMe0wzqwD?mY8AbVM*K>0 zTu)1|Pf&<_gn96~AOr2CO6(UDN=;OTHw1-Ii+s!;5M-oQ`BG~VWTJCah=YQ{sg3gS orXVwYOapO9kcDo@-^OS(JZJF)hJI+rtz@;R>Ir=0lY2;y8r+H delta 3106 zcmaJ@c~F$+8GnAyF6^@V$+6s`uq+@f3#X{iARhZT@^1BRz$0=M58ty zL|^NHq9&SZjjb4UF`h)LCfe4t8OM$@8K-t){;}yaF>R(Zl|J9@Le)R|&pyBBdY|)s z_xr+oc$VeX)AN^!s2Crfvh0jjpGW7Z#2ANB(_mIZVsfM6G%BS?Gvd{P7`HK5LyS5Q z)8E)bLyEc=li{(0A}c(Lyd`!E0S*mW)B>{1_4>wnS1hloooz-AD0ZHwuGCvMtG0TH zuexS&$T(L+9yNlZpI2I_75N&ShYQprZ>svErF*&=g&?cgRjpX;^E8C~-5PDDMl<@T zrr5+G{WPTOTz^nEF&y3CS+r!Kw=QHlP@^ApGlK zk;)#I5cv}gr5LSB;(FP~qRfPsLALpxdXIaVuX>@o%;&B3_-bl3yn=CRZCsAOLZaqW zcpH471amA_jKxF^lk@^jdPvb(XgaDiOr}49jCIv3y=J^B<-6S>r_qaNyWJKuUYCAV zdX|TTRX$IxuSBF%MH-CIrOFZMbWohzU8%BdvHlryR=DggubCnXdW99b&s(4vw>vE8 z3_4qc8&H z&F$8?PN${nE8EOr4I1j{p}sXMHT;Yoidl7Cm8af2rlxk0N16q!*3g|M>Bz6qZXHcV zqlUM!POXfe=y*q?|Ikxiy-`DC2>o1xCFHVMLxOr7e+Vm2Z%ydSu%B*E8WW{vW+baR zdrG&(6oDFw!cvMxt=gaAgh^es=b=IUJtI+;|8i9@{if(-u&5kIk!E!TXj3z3`2kqfn~ua`yTo7*rJ|X#v5yMTLKSk!l8EKEh$hfP zp@PtjA_-I@IFbwrBake$M5|MdL^-E1wL9amYD&)-fEa2KyRl+dCKN(#`DYM&lcM5b zJ4z;0U(7Sxw_Hy|JYMtUbM<2IQARZY3Iw$kVR6U%j*6a||D*&g; za3)y`LVQst-#f(j?c|F?{D3g;9~9zCgty%j9H5KkE`0zT9Dsw&Qr1GFK4Q58pNSm7ra18S$$q!>sZNNi zM|T}OEA0AA;$qZckP&!A6^}XcYjbu%U1`*ndTE#!3_m}7hJFoS2%oYrta~N}-KbI> zaXPR#=)NRu@>~i?Qr|gy`_Vzk%v8Vz8p%eQ&Jna!@Jcq(dXAzEY@r=Ocd*&~w}i zzh@`>4>_ML?BX<`8C<}{+?&g|56|GfT+jV@v*4ZFpAYarKE#9ggwR$l;p;q%@AGi} zfnPF2@yOuT4VN90eF|?~GCx6WaO*}=Z`9Fyvcq@f$*L0>V~!vnMS6&NhQMXIF!)}r zA+3W3lF>vk(O!8YWmgAxP&P?Nf)eVW;^)-^{-0Vky3&i~jOUHyw#$D+_$C~Yd(chp z)i?RBHZ0#u)_hk0E7X^+9ayF26jWi2I$uy}UwebBsit#Sdy^szC-PGx1qQG_KPU@e zgDNO2!zNWaarmV(W)XcN!knqQOo~%eUo#Od^3J7T9 z1$0S-?Lw~!z0Qm10oTwYUP|9`Ej$Qzf6FX?#|O9H2$qM)iD-{Cu7o`4Vm7 z%hbeIXg9ahLH?AE@>M#?*JQ50r7L`$Zt@Mf!#C+3ey;ya-h`9leH z^~f5&kDF*6c44<9+(fIeN0322f_&I3$VdliA({n6&{3L=eS#wCq 0) { + // add return type + String returnType = syntaxes[0][SYNTAXPART_RETURN_VALUE]; + + if (returnType != null && !returnType.isEmpty()) { + command.setReturnType(returnType); + } + } } /** diff --git a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java index 1fe18b6e..c76f0a88 100644 --- a/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java +++ b/plugin/Raven.SQDev.Misc/src/raven/sqdev/infoCollection/base/SQFCommand.java @@ -356,6 +356,15 @@ public ELocality getArgumentLocality() { return getLocality()[0]; } + /** + * Checks whether this command has a defined argument locality + * + * @return True if an argument locality is defined + */ + public boolean isArgumentLocalityDefined() { + return !getArgumentLocality().equals(ELocality.UNDEFINED); + } + /** * Sets the locality of the command's effect * @@ -376,6 +385,15 @@ public ELocality getEffectLocality() { return getLocality()[1]; } + /** + * Checks whether this command has a defined effect locality + * + * @return True if an effect locality is defined + */ + public boolean isEffectLocalityDefined() { + return !getEffectLocality().equals(ELocality.UNDEFINED); + } + /** * Gets the notes of this command */ @@ -502,6 +520,7 @@ public String toString() { representation += "hasRawSyntax: " + hasRawSyntax() + "\n"; representation += "hasExamples: " + hasExample() + "\n"; representation += "hasNotes: " + hasNote() + "\n"; + representation += "hasReturnValue" + hasReturnValue() + "\n"; return representation; } diff --git a/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF index 650b04a5..f3bdcab9 100644 --- a/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: SQFEditor Bundle-SymbolicName: raven.sqdev.editors.sqfeditor;singleton:=true -Bundle-Version: 0.2.0 +Bundle-Version: 0.3.0 Bundle-Activator: raven.sqdev.activator.Activator Bundle-Vendor: Raven Require-Bundle: org.eclipse.ui, diff --git a/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF index b12a64ae..2d4f37b5 100644 --- a/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Util Bundle-SymbolicName: raven.sqdev.util;singleton:=true -Bundle-Version: 0.3.0 +Bundle-Version: 0.4.0 Bundle-Activator: raven.sqdev.activator.Activator Bundle-Vendor: Raven Require-Bundle: org.eclipse.core.runtime, diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/miscellaneous/AdditionalKeywordProposalInformation.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/miscellaneous/AdditionalKeywordProposalInformation.class index 68da4260fb939e731ae8dea1b14f908d05119103..674a07f5dd06e4165e53fae1b79e3bd37a1df252 100644 GIT binary patch delta 1282 zcmZWoTWl0n82 z9(2IFpxnlyi&AcKzxBo}Qb9ljxhnABi-|EN>WgnakTjzIne9TXFXz8}-~XL&=A5(r ziQk`8uiZa$4#3m6JE&?dT}2S<1lD5)!5i)f#+o}@^=LfQ)}Teg@!oR1DIC=s6}&~r zOM|}1I6B`a$KMfn7w<9NtjE)o^gN-YcxK4F?erB?q=1omKELA*V)eA)7~1aBXip|CPl^2<(tPTIL}bAnRcrN_F$dbf&F^b0(LU4;DN zs!)s8r3E5dv^h|{x`j^DLth2N&&LSrXPMJxCL4hGDps;}K@pKR)0;lAN;E@`w z`=#D!T=&{^}>tbSLC1tWnnbG^tfebYky5E?D4<%EH^ zExhku&AEkD^PSw-m_Vi1>F_!&R63cr+%$ye(M=P^w(ywQEqsPK0q9FhNr6vyAkXg@ zMNz%`Gp{p=ITm*E7P}L8%x`!1akW2*Ll)+(;PmJN-~?9#4}swafW<)kA@IoQ75)K! zKTZ_zdJX}zDBEu=;>-Lz-at7&qzd$-3a9Y`E?^0M;`|pZ#UH4q3@oDpj)kb9X{e=A zET<6aNaNUqmuVeV(iV<=c!hT2RoaDBbcEw^G|&hdX%sqLt<8 delta 857 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 L7a8KvC)WP~@%1(y literal 8572 zcmbVR33yc3b^gz2nbGJ;$dUjd774Ho8VLZLF_nO3Q>LkUDX#!qGIN(r{+Hu^ZG+nYdNo%)FYd2n+CT{A~Oa6P`doyo@ z2u;3EpWeIgo_p?p_H*w%|L*6%0AQ^Qd*Kl@CBlczSTK2L#5^3Fil)aRv953|JZ4Us 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 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevInfobox$1.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevInfobox$1.class index 830e69dd188a83f257eb1a6b62f27983e0782e3d..d4b89e4404a5ce74464425803ef2137316801781 100644 GIT binary patch delta 428 zcmXYsOD{t~7>1uYJ$0HoX-eV}b!`t4+K5ZVHLOV7B1*(v)uDuqiml%ulUT5^@CO=l z+!9L?8}T2kEv*or)J*cu_f6jC{bo)>&!OxbME1!o6DuQ z-5}1@v~NtQm_9f6?c#LiaOcQPW!=3!J>YkAz~8Oc{ZGdqn6e>rOO;3cMC&tV{sCv9 zwdI=7HBC3fC*!4U9_{hMP12)Rs&L$6z+azR=OZ>54t=`11E#i@iH u6;B33C`XvI406R$g7JkdzHjC%oIk)PafoqSBB9KrnL&1>3`&lYQ`Rpw3sN5d delta 429 zcmXYr-%1-{5XFDNXc zk`{XHwWREOTm{+NQ37;~ff>#T-=fYa8x)FK=Kj)q2BK`It_Stn-zkC;Ry4hL3+*THvt83d^ zJ7N8H-S1P=-yi>o;ppGXzX{%)(iPD=cueA${0YU`!h_+6kwSwhMT{$IFGM_zm}-dU z{;Ok$q>HCKJ7ZQjicUneIaXQ2u&#U@xuxO~xN6}LDrNY{hSnI5nPgLur)#2B;~tXn BPbUBX diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevInfobox.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/SQDevInfobox.class index 649f3013a25d8957dfbd9b552ca2d2f84d5b53d2..a14dab87fdad76017d98673f78ad82a43b539c4e 100644 GIT binary patch delta 13 UcmaFH_l$3YDm!D&WHojN03(P5G5`Po delta 13 UcmaFH_l$3YDm!E9WHojN03&4tD*ylh diff --git a/plugin/Raven.SQDev.Util/resources/icons/SQFCommandIcon.png b/plugin/Raven.SQDev.Util/resources/icons/SQFCommandIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d179aebc705f610ba7321f64ce8842f33c1f7e GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4zWSjJM%JpsbHzoT{y2h|c#fzM)$a=rcLv_exyk8<~6wW-B+Y)rSbj71}y^bQug{B1d=@c+jb-ers? VN*cHP_<*6n;OXk;vd$@?2>@D

    -h*%k2E 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 literal 0 HcmV?d00001 diff --git a/plugin/SQDev/SQDev_0.5.0.zip b/plugin/SQDev/SQDev_0.5.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..0383dd7750914d4bfece060505486bc32a79617e GIT binary patch literal 583538 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