#arma3_scripting
1 messages · Page 370 of 1
Nope.
just ask me $beingpolite
🤔 ?
I'd rather have people be honest than polite.
honesty is not directly related to politeness
@tough abyss The reason was there was too many problems with ArmA 3 hating instant weather changes
and there was no feasible way to simulate rate of change in a way that didn't cause frame-skipping.
in other words: you dont have to be honest to be a dick
So it got written to the point of the A3 engine screwing me over a few times.
skipTime -24; skipTime 24; and all that hacky crap
But you have to be not-honest to be polite.
not necessarily
I can say "this and that is wrong" without saying "you suck because you did it wrong"
I could even say "most of it is pretty nice, but that one detail is wrong"
There is no answer to why use
select
try to work in a corporate env for some time, you'll get to know the workarounds of communication pretty quickly
The wiki has an example thats it.
Nothing about GeekGuys code was pretty or nice.
The one you posted then.
the wiki tells you pretty exactly what the differences are I'd say
@tough abyss Already told you forEach would be better for what you are doing
all the nested selects don't make it pretty commy2
This is also why optimization afterwards sucks. Double the work, if not more to replicate the same behaviour.
if !( ( _itemType select 1 ) isEqualTo "VehicleWeapon" ) then {};
I could make it so much easier by just moving that to 1 other line
and give it meaning.
Why don't you do that?
still going on about the same thing? 😁
No. We solved it 16 minutes ago
I get the feeling you don't work in Software Development. No offense.
@tough abyss I kinda remember you saying that you work in software development but that's not showing either
might be confusing you with someone else but in any case it's not showing 😛
@still forum
looks better
But fnc_linkedItems now does something completly different from what it did before
before it pushed the items into an array using pushback. Now it only returns the items.
You still need to put them into the array they were pushed to originally
you can just use append for that now
Although....
No.. I don't think append works.. You have an array of configs now. You still need to run configName on them to get the classname
easiest way "(isText( _x >> 'Item' )" configClasses _this) apply {configName _x;}
What's the point of line3?
Same for 8
what is a "Catagory" ?
A category in a catalog.
so a catagory is a catalag ?
It is now.
is apply forEach?
No, apply is apply and forEach is forEach.
True. Both are loops.
Both execute a code block for every array element and put that in _x.
apply has a return value that is different from forEach.
Ah yeah that little detail
what would you think an apply syntax for forEach would look like?
Still why not just make forEach behave like apply?
there are a lot of these and they're all a bit different
what if you dont want to modify the original array?
just choose the one that fits best
forEach
Still why not just make forEach behave like apply?
Because forEach already has a return value and you'd break old code.
Hmmm odd little bit triva that one.Return Value:
Anything - will return the value of last executed statement
It's true.
And because different things serve different purposes.
Why not just use a Spork for everything?
What is love? I can't find it anywhere but I know that the variable is there in global.
apply Array - resulting array
So 1 returns the array
one returns on the final element in an array
private _return = {0} forEach [""];
_return // 0
@icy raft wut? Baby don't hurt me?
forEach does stuff with the elements of an array, apply makes changes to the elements in the array itself
So fashing forEach into apply would involve a lot of other commands at once
apply is more commonly known as “map”. you loop an array and return a new array based on what the code returns for each element
so apply simply reduces the amount of instructions
not really, array set [_forEachIndex, _x*2];
Or pushBack
itll still be faster
allPlayers apply {name _x} // array of all player names
get it?
Yeah 1 performs operators on the array
yes and it will return a copy of the modified array instead of modifying the original one, cuel
as well as chnage it
the other just loops through the array
ofc
We should just combine apply, count, forEach into one!
applyCountForEach. Returns array of the new array that apply would create, the number of elements in that new array. and the return value of the last execution
I don't know
You forgot select
also the code block must return nil or a number
it something about not reading the wiki
could have just used forEach ["mode",[array]];
and having it explained here instead
😛
lul
could have just used forEach ["mode",[array]];
But that's hideous.
Not that that has ever stopped anyone.
^
refer to the stuffing code in the configClasses string earlier today
Being nested probably is much slower too
apply I guess ensures it's not a double nested operation
if you need to include a mode keyword you might aswell make that keyword... a command
fullCrewDriver
?
I think I need to focus on my scripting in terms of bread and butter
what commands are the bread and butter of the SQF language.
=
arrays.
!
setDammage 😃
arrays
dammage
haha
data manipulation is a key one.
setPosASL2
dammage
data*
the real thing
setPosASL2 is hilarious
Yeah I know commenting from studying C
they could’ve called them map and filter which most languages call them. but I guess map is easy to mistake for the ingame map
Yet some people argue for it.
how else would you write comments in init boxes 😉
i use its side behaviour to modify my external script behaviour
if my custom parser reads comment it shuts down my pc
which i need since my power key is broke
Same way you do it with the comment command, just without the comment command, cuel
yea they recently allowed normal //comments in those boxes
oh cool. it was a joke btw
QS, you could just have the string by itself
dont argue silly with me in an arma scripting channel
/*
***********************************************************
Filename: Some_interesting_fnc.sqf
Author: GG
Date: 10/10/2017
Description: Does something I haven't throught of yet.
***********************************************************
>>>-------Parameters -------<<<
*/
But you don't need the comment command in the first place. Just put the string there and you get the same result
comment ""; used to be the only way for comments to be accepted in Debug Console, dont hate what you dont understand
That's wrong.
Thats the most horrible header I've seen in my life 🤣 @tough abyss
dont make this a challenge
private _a = 1;
"add random amount";
_a = _a + random 5;
private _a = 1;
comment "add random amount";
_a = _a + random 5;
Literally useless.
Looks cluttered
@indigo snow = is technically not a command.
@cedar kindle you also have to keep in mind that new command names break all code that uses the same name as variables map is IMO a name that would probably be used as variable name by some people.
But I think the engine doesn't even care if you have variables called the same as commands
@rotund cypress Agreed
besides nular's
@still forum Don't hurt me, no moar...
silent error?
It complains about using a reserved variable, dedmen
Maaan, this is fun to read. Yall end up killin each other
On screen error with enableScriptErrors.
It complains yeah..
?
arma scripting is srs bsns
But if you disable that error.. Might it actually work?
No.
/*
*************************************************************
* Filename: Some_interesting_fnc.sqf *
* *
* Author: GG *
* *
* Date: 10/10/2017 *
* *
* Description: Does something I haven't throught of yet. *
*************************************************************
>>>-------Parameters -------<<<
*/
Better ?
Yes.
[] call BIS_fnc_error
Using a script command for a variable will most certainly cause a syntax error.
are we seriously going to discuss file header styles? 🤔
Anyone know if you can #define reference script commands?
Also, >>>-------Parameters -------<<<, why?
@tough abyss yes, shouldnt be a problem
The engine knows something that doesn't have two arguments can't be a binary command.. A variable would have 0 arguments.. So technically the engine could let you use the names of binary commands as variable names
what’s the point of having the file name as a comment?
@tough abyss you can #define anything
preprocessing happens before evaluation
#define DOBAD(t) skipTime t
sure
what’s the point of having the file name as a comment?
Punishing yourself by having to write down redundant information
It's essentially(almost) the same preprocessor as in C @tough abyss
Nah just copy paste them.
@little eagle easy to find
Make a header file with all your headers
copy pasting is a form of writing
But @tough abyss don't see why you have a semi colon at end of your define.
which will auto-generate headers
oh yea thats bad practice, the semicolon
easy to find how? you’d just search the file name
Defines shouldn't end with a ;
doesnt break it, just bad practice
So you could effectively remap
or the old guard will make snide remarks
yes
to obscure shit?
yes
even make macros generate macros that turn into commands
go wild
thats how most obscuration stuff in arma works
except the one where they modify the PBO header
Should I start lighting up the pires?
@tough abyss Take a look at OOP script.
It's just a FUQTON of macros to make scripts look like OOP
Sounds dirty
it is dirty
had a fun time reading that thread
but some people like it that way
some people say that about the CBA / ACE macro situation, too i guess
although that isnt obfuscation
Shooting yourself in the foot when using something like that 🔫
theres probably a very niche application for it that you technically would never need in arma
arma AI is pretty smart, just a lot gets demanded of them
and they dont deal well when the server is under a heavy load
Walking through a door...
Is impossible for them.
Ever played with as a kid one of the bump bots?
is that the ai being dumb or a bug?
both?
always
Runs into the wall then randomly selects a redirection and tries again.
Thats arma 3 AI in buildings
ill give you that they cant handle buildings very well
They can't handle anything well, exploring a roadblock script I wrote
worked beautifully aligned all the roads correctly
etc.
Guess what.
The pathfinding is really bad in this game too.
The dumb Tigris drove into them.
depends what you ask. theyre hard to wrangle into specific behaviour, but easy to do well on a broad scale of tasks
not sure how to english that correctly
And the AI goes, oh look a wall.
"Bump" select random direction
"Bump"
Ruins a lot of arma 3's experience.
I feel if BI was to implement neural net AI
the A3 engine probably wouldn't handle it as they need multi-threading
far more than what the A3 engine is capable of at this time.
neural net AI would demand their own channel on discord to flame about how stupid the players are
They need better pathfinding, one that doesn't get them stuck or make them walk through walls. and especially one that handles driving.
current AI tries the same but their only way of expressing that is by putting a bullet in your face
People also like to glitch into walls.
A3 is terrible at that.
Just get on the right angle and glitch through a wall and shoot someone.
Yes, but AI walks effortlessly through walls you can't vault through yourself.
v?
ACE3 should have new movement animations
Climbing should be built into ACE3 instead of Enhanced movement
There is climbing in ACE.
Not as op as in enhanced movement though, but you can climb on hesco barriers easily.
ctrl v by default I think.
That makes it look smooth for the player : )
Should be using AGLToASL to not be jittery on rough terrain...
that would be abused to no limit
camera doesn't move when changing to 3rd person.
camera beiing the model selection
All I need is the change of that position. It's like a definite integral, where the integration constant doesn't matter in the end.
Both in 3rd and in 1st person mode the change of position of the animation is the same as the camera moves during that animation.
I could make it relative to the feet too, but then the camera would jump and the feet were smooth...
Can anyone help me flesh out some errors on a script?
:scream:
@subtle wigeon show us your script
ok, its over 2000 charactiers, trying to find a way to host
pastbin, hastebin, gist github
what's your error ?
_allaiUnits is no declared
_x is not declared
_actioned is not declared
sa_fnc_getnearenties may be used before assigning a value
And the script doesnt work
i see the first one being defined, and _x does not need defining
without knowing your actual error, im guessing SA_fnc_getNearEntities returns garbage
there is no hoisting in sqf, you should move SA_fnc_getNearEntities before the spawn
im assuming from the tag setup that the function actually lives in cfgFunctions?
jsut to be sure
otherwise, yea
and as cptnnick said, SA_fnc_getNearEntities might return a tree or a house
not ia only
wouldnt necessarily spawn no declared errors, by which im assuming he means errors with nil
Originally the SA_fnc_getNearEntities was not in the scripts, but a functions folder
linking it via config.hpp
config.cpp? is this an addon?
im updaing our game template and trying to streamline stuff
no addon
// SA: Squad Join
[] execVM "SA\scripts\sa_squad_join.sqf";
missions use description.ext, not config.hpp, you know this right? e.g. your function is defined in game?
in the init.sqf
do you have your exact error, btw?
what you gave doesnt help a whole lot
aggresively debugging values in the script to your .rpt file also works wonders with debugging
17:11:34 |============================= Leqa intel =============================|
17:11:34
17:11:34 No speaker given for
17:11:34 Error in expression <squad_action_id",nil];
};
};
} forEach _allAiUnits;
sleep 10;
};
};
};
17:11:34 Error position: <_allAiUnits;
sleep 10;
};
};
};
17:11:34 Error Undefined variable in expression: _allaiunits
17:11:34 File C:\Users\Jason Reed\Documents\Arma 3 - Other Profiles[SA]Reed\mpmissions\SA%20Ghost%20Template%20Tanoa%209%2e5%20Reed.Tanoa\SA\scripts\sa_squad_join.sqf, line 48
17:11:42 Mission id: 5381f18895dfa8a461f27a027342ccc6f7ef985a
17:11:43 Empty word in sentence ''
17:11:43 unable to connect anim. source "Hit" to hitpoint "HitGear" in O_Plane_Fighter_02_Stealth_F
17:11:43 Array tex in bin\config.bin/CfgVehicles/Plane_Fighter_01_Base_F/Damage/ not even
17:11:43 B_Plane_Fighter_01_Stealth_F: gear_f_hook_down - unknown animation source hook
17:11:45
and if it's not a lot of values systemChat even
Hey all have any of you had a problem in arma with moveinDriver before? It seems ever so often when players get out of the vehicle they no longer have an option to get back into the drivers position rolling_eyes
you should use a class to filter, this will even grab bees and footprints
_allObjects = nearestObjects [_position, [], _radius];
shouldnt really cause a nil issue though
So much wrong in that code 😭
Please start using params for beginning... Rest cannot help due to mobile and horrible structure
sure its objectively horrible but that doesnt matter because the error happens before that ever runs 😛
🤔 I have a feeling it will be more than that down the line
Wait whaaa? An error on line 35? Oh wait, there is one giant fucking if statement
For whatever it's worth (the above not a good example) constructive criticism is essential to learning
Should extract missing commands out of that and add them in next release of sqf-vm
Will provide better information on the subject
is there a decent alternative to initPlayerServer to getting a connecting player (since the wiki goes on and on about how using it is a Bad Thing™)
What I'm doing wrong.
//Double check
if (_bad == 1) exitWith {};```
It shows the hint message
But executes the rest of the script
Even when I have it exitwith underneath.
Prob either variable scope or case sensitive issue with classnames. SQF IN is case sensitive
But it popped up with the hint.
So it found the item in my inventory in and said can't smuggle.
Yet it executes the actually teleporting of the player.
Which is shouldn't ...
It should abort the script when the person has explosives on him.
Perhaps I should exitwith the foreach aswell
Show the full thing.
"NLAW_F",//Pcml missile
"ATMine_Range_Mag",//Explosive
"APERSMine_Range_Mag",//Explosive
"APERSBoundingMine_Range_Mag",//Explosive
"SLAMDirectionalMine_Wire_Mag",//Explosive
"APERSTripMine_Wire_Mag",//Explosive
"ClaymoreDirectionalMine_Remote_Mag",//Explosive
"SatchelCharge_Remote_Mag",//Explosive
"DemoCharge_Remote_Mag",//Explosive
"IEDUrbanBig_Remote_Mag",//Explosive
"IEDLandBig_Remote_Mag",//Explosive
"IEDUrbanSmall_Remote_Mag",//Explosive
"IEDLandSmall_Remote_Mag",//Explosive
"IEDUrbanBig_Remote_Mag",//Explosive
"ClaymoreDirectionalMine_Remote_Mag",//Explosive
"HandGrenade",//Explosive
"MiniGrenade",//Explosive
"SmokeShellBlue",//Explosive
"HandGrenade_Stone",//Explosive
"RPG32_F",//Explosive
"RPG32_HE_F",//Explosive
"RPG7_F",//Explosive
"1Rnd_HE_Grenade_shell",//Explosive
"3Rnd_HE_Grenade_shell",//Explosive
"TrainingMine_Mag", //Explosive
"APERSMineDispenser_Mag" //Explosive
];
diag_log format["Uniformitems: %1",uniformItems player];
diag_log format["Vestitems: %1",vestItems player];
diag_log format["Backpackitems: %1",backpackItems player];
/* outdated
{if(_x in _deletelist) then {hint"You can't smuggle explosives on the bus... are you crazy?!";_bad = 1;};} forEach Items player;
*/
{if(_x in _deletelist) exitWith {hint"You can't smuggle explosives on the bus... are you crazy?!";_bad = 1;};} forEach uniformItems player;
{if(_x in _deletelist) exitWith {hint"You can't smuggle explosives on the bus... are you crazy?!";_bad = 1;};} forEach vestItems player;
{if(_x in _deletelist) exitWith {hint"You can't smuggle explosives on the bus... are you crazy?!";_bad = 1;};} forEach backpackItems player;
//Double check
if (_bad isequalto 1) exitWith {};
if (life_spawn_point isEqualTo []) then { /////
other teleportion code ```
_bad is undefined.
That is a child scope. It's undefined in the main scope.
So if I'm correct my exitwith scope in foreach is only 'local' to the foreach entity.
// main scoe
call {
// child scope
_var = 1;
};
_var // undefined
So when it finds an explosive it stops the foreach but executes the rest.
The problem is not with exitWith, it's with the variable being undefined.
So if I define it in the start as _bad = 0;
You should really look at that link. It describes your problem etc
does the setCaptive is supouse to make a unit being hand cuffed?
No.
So that _bad is a private special variable within the foreach
Which only exists in that scope
Unless I define it as a private in the start of the file
so i am missing a command?
It only exists in the child scope, because it was never defined in the main scope.
mmm
That's how SQF works and it's retarded. Welcome to Arma.
Private vars travel down but not up
Not retarded at all
And then there's people defending it.
Alot of stupid stuff with SQF, but variable scope really isn't one of them.
It's the same in C++ and other scripting languages.. private variables do not travel up in scope. Because that's the whole sense behind private variables
or local variables
Lack of a mutex lock & natve hashtable variable type is slightly annoying
Don't have a background of other coding languages. 😉
can easilly make your own mutex tho. I use waitUntil for it in TFAR.
native hashtable? #Intercept!
Was there actually some good documentation out for your basic.cfg network settings?
dick
dico
Have noticed issues with remoteexec and trying to implement a mutex lock. When client sends multiple in same frame.
Yeah best part of intercept imo, is ability to add new sqf commands (on my todo list)
Wiki is not really what I would call specific nor precise...
I just call unscheduled scripts via remoteExec.. No race conditions..
@frank ruin for network settings #server_admins But basically.. Leave them default unless you have specific problems
Dedmen had it happen in unscheduled enviroment, can repo when client disconnects network to spam requests & reconnects before gets booted from network.
😮 wtf
But anyway doesn't matter
Well not specific problems ... was more looking for better optimization wise ...
If there was an obvious way bis would just implement it
@brazen hazel Just mentioning you to bookmark your name. To remind me tomorrow to check that you have been banned
Evidently.
You guys are even gonna go as far as helping here?
Dunno, depends on your script. I guess you messed with the mission and deleted an important object or something.
@brazen hazel Some people are actually really too mentally retarded to see that the message says that the variable is undefined. And you seem to be one of them.
Mean.
D-did you just edit this message just to add the dot?
yes
@little eagle & @tough abyss Cheers for the info, it's working as it should now.
Did you write the script, Hyper?
You should contact the person that wrote the script.
WHY
Lifer ¯_(ツ)_/¯
QUICK GET HIM
🚒
At least... i know what the Problem is and how to fix it and ... erm... you ... don't
Maaaan.. I want to go to bed.. But I know I won't be able to read up on this because that idiot is gonna end up being banned :/
Dscha has arrived its already too late
i'll help you if you paypal me #350
#350 to Chirs!
i am chirs
I am Chirs!
enjoy ban scrub
no i am spartacus
And there goes the typical "I am a lifer, i got no idea from anything and won't help anyone else but i want that problem solved for me because i am a simple minded derp"
Who's Mari?
Mari-Jane
@jade abyss Can you ban people or do we need to wake up the allmighty?
honestly why would someone help you lol
🤢
I blame this on Trump.
Bye Bye
what an asshole
😂
Actually autistic
Witch hunts are bad
Just call for the Allmighty
Thank you. Now I can go to bed
🙇
Huh? FM is allmighty 😮
No!
Nah, just Omnipresent
🔨 time
189.2 hours in the last 2 weeks
13 and a half hours of Arma a day, anyone would go insane.
normal
😂
Only 13? 😉
5am
See what I mean... 5 more minutes...8 hours later...
😄
o7
o7
What is o7
o7 = o7
salute
?! \ ?!
8===D
\(O_O)/
\o7 - Dab on them lifers
hahahaha
That's an affimritive 'sir
Good girl
if(getMentalState commy2 == "boring")then{for "_i" from 1 to 100000 do {slap Commy2}};
better?
if (getMentalState commy2 == "boring") then {while {alive commy2} do {slap commy2;}};
missing params
if (getMentalState commy2 == "boring") then
{
while{alive commy2 } do
{
slapWithLargeTrout commy2;
}
};
😄
reminds me of something that starts with m and ends in IRC
converts to 4 spaces
i see, discord
Would I die first or would the while die first after 10k iterations?
I’m still awake....
That question is too meta
5am
me too
Same here, also awake
mirc?!
Macrommy2 also
almost
Tell your Brother to get ya a Coffee 😄
_name = "commy"; // 1000 seconds
//vs
#define COMMY (["commy"] param [0,"commy"])
private _name = COMMY; // 0.0000000000000000000000000001 ms
Can you notice a difference ?
using macros and param will increase script execution time
hmm coffee....
thats more zeros than floating points allow
You need parenthesis around your macro if you use a binary command like param.
Badummmm
bedankt
🤦
superior language strikes once again
Missing my Wehrmacht soldier emoji from Slack.
how do i chage the music of the call BIS_fnc_endMission;?
i followed the wiki but the song still playing
["win",true,false,false] call BIS_fnc_endMissionServer;
this is my endind
can't
why...
¯_(ツ)_/¯
["win",true,true,false] call BIS_fnc_endMission;
this works
but this dosent
["win",true,true,false] call BIS_fnc_endMissionServer;
but what happens if i use the frist one only in a server?
dont hurt your face, i know i suck
Local versus Server
endMissionServer ends it on the server for everyone
the endMission ends it for anyone who is local to where it's being executed at
so if i put that on a trigger that means it going to work to everyone?
god damn it, again with the triggers? 🤦
they work ¯_(ツ)_/¯
You know that's a lie
Hey all! So I have a script that spawns an AI unit and assigns waypoints for it to move around, but when the AI unit makes contact with an enemy, the AI unit will shoot a couple times, then continue moving to next waypoint. Question: How can I get the AI unit to advance/prosecute enemy contacts, then resume previous waypoints? I have set the AI unit's behaviour to "open fire" but that doesn't seem to change contact behavior.
Does it not already do that automatically? If there is any issues on the way, it deals with that and then carries on? @wispy lynx
I don’t know a terrible amount about scripting, but you could check out mods like VCOM AI and see how they’ve built it. They’ve done a decent job at beefing up the AI. @wispy lynx
Too bad there is no AI eventhandlers 😦
The AI unit moves around, but when it sights an enemy unit (player or another enemy AI) it will fire a couple of shots, then continue moving to next waypoint. It does not continue to engage or advance (unless the target is in the same direction as it's next waypoint). The assigned waypoints are Search and Destroy. Essentially it acts like it's more interested in waypoints than enemy contacts, despite having all behaviors directed at engaging any contact it encounters (setCombatMode "RED").
what about their group behavior?
usualy when they are on aware they already do that
behavior and combat mode are set to "aware" & "RED".
is there a way to script a new waypoint for the ai unit when it makes contact, where the new waypoint is at the last known location of the enemy contact, I'm thinking a SAD waypoint, and then the AI unit returns to original waypoints when enemy is killed or the "inserted" SAD waypoint completes?
you mean the actual file?
@astral tendon Line 81:
_musicList = if (isnull curatorcamera) then {["EventTrack02_F_Curator","EventTrack01_F_Curator"]} else {["EventTrack02_F_Curator","EventTrack03_F_Curator"]};
Anyone got any ideas for a performance friendly way of parsing a string and replacing this with _target
Gday all 😃 I am looking for a good music intro script any one know of any?
playMusic "cfgMusic class"
add this to the init line correct>?
well you need to add the cfgmusic classname
@GeekGuy884 wait a sec... in your example, why not use a ternary op instead of if else ?
or wait, maybe I forgot that... oh dear, SQF does not support ternary op??
It doesn't need it, "if" is already an expression.
it's crappy in terms of syntax and takes way too much space for simple conditionals such as his
imagine this:
!!curatorcamera ? {["EventTrack02_F_Curator","EventTrack01_F_Curator"]} : {["EventTrack02_F_Curator","EventTrack03_F_Curator"]};
If it makes you feel better, "if" is actually a noise word; the engine could just take "BOOL then CODE" and "BOOL then ELSETHINGY".
or his example could be simplified to even:
_musicList = {["EventTrack02_F_Curator", isNull curatorCamera ? "EventTrack01_F_Curator" : "EventTrack03_F_Curator"]};
@Inlesco#5178 SQS has ternary op
@still forum amazing.
I never understood SQF's then keyword usage... is it because it's easier for the parser/interpreter or it's just a design choice for no actual reason other than making things different from most pop langs and practices?
It is required
Game has nulary,unary,binary commands.
so command variable variable
as if (condition) {code}
would be doesn't work.
binary commands are variable command variable
"would be doesn't work" ... What a genius
binary commands are named like that because [var comm var] is basically [0 1 0] where var = 0 & comm = 1 ? 😄
oh yeah, forgot. thx for the reminder.
Too bad there is no AI eventhandlers :frowning:
Oh god, that would be so helpful.
there kind of is
if you look at the danger.fsm there are 9 "EventHandlers" which can be used to execute whatever you like based on what threat the AI is in
also there should be other stuff in the formation.fsm i think
@tough abyss but these EHs aren't exposed for any use externally, right? or can you somehow subscribe to them while they're inside Danger.fsm and others?
you can open the danger.fsm and add whatever you like to it
but agreed, some hooks would be neat in there, placed by BI so not every mod modifying the danger.fsm is overwriting the other
well, I guess @cunning nebula had public EHs in mind, not those isolated in some obscure AI behavior file
yea
I guess you can expose those private EHs from danger.fsm by only having access to C++ code of the game or can there somehow some hooks to be made by mods?
fsm contains just sqf and some structure markup stuff
one sec
one could add a small snippet in the danger.fsm that reads from a class where ppl could register their functions they want to be executed
@tough abyss so basically you have a class AiBehaviorHooks in ai_behavior_hooks.cpp which registers some methods which, if they exist, will be executed by danger.fsm if placed inside in its respective "states"?
that would be sort of the idea
but then, every mod that wants to use this system would need to be dependent on that AIhook mod
How would I add a HighCommand programatically in SQF?
not sure how would that work, I'm not a CPP programmer, but it'd be an interesting approach to try.
I'm not sure how callbacks would work in this case, passing all of the args to the external class method...
for arma we can just define parameter classes which can be expanded upon by any addon, it's not really executable code in there
there is a predefined set of params those EH can deliver, it would make sense to pass all those to the called functions no matter if they need it
the functions then can define their inputs depending on what they need
@little eagle @tough abyss I had wanted to try and replicate the missileIncoming EH for AI to players to also fire for players firing a lock on rocket. Right now I can't find a solid method without bogging down with loops. Hence maybe being able to modify the EH with extended eventhandlers via CBA but I don't think it would be that cut and dry
are you sure its not only a locallity problem?
Same code works for ai but not players
i've never heard of EHs threating AI or players diffrently
with players you are always in MP and the player firing is never local to your machine
Ill give it another shot tomorrow but it specifically says AI in EH description
while AI can very well be
Triggered when a guided missile locked on the target or unguided missile or rocket aimed by AI at the target was fired.
e.g, would this work?
hc1 = "HighCommand" createVehicle [0,0,0];
hc2 = "HighCommandSubordinate" createVehicle [0,0,0];
hc1 synchronizeObjectsAdd [hc2];
hc2 synchronizeObjectsAdd [hc1];
player synchronizeObjectsAdd [hc1];
hc1 synchronizeObjectsAdd [player];
player hcSetGroup [squad];
Seems odd that its AI only though - Hence why I was wondering if there was configs somewhere
That I could look at the eh code
i think EHs are pure engine c++
Thought so
Besides scriptedEventHandlers
i think it could be worth, it would baffle me if it was for AI locks only
nothing AI in there tho
You can just insert your own scriptedEH's into danger.fsm and just call them though
but you will need to overwrite danger.fsm
see a few messages above 😛
👍
Ill have to recheck it
I hope I got it wrong vs not working for players
Would make it easier lol
i mean isn't the incoming sound played for player fired missiles too?
and shown on the radar aswell
Ticket for AI EHs:
https://feedback.bistudio.com/T126911
comments ?
Looking for a solution for all vehicles
@torn juniper what are you trying again ?
missileIncoming EH for players
to warn the player of missiles ?
@cunning nebula may add those "EHs" from the danger.fsm
comment "1 DCFire";
comment "2 DCHit";
comment "3 DCEnemyNear";
comment "4 DCExplosion";
comment "5 DCDeadBodyGroup";
comment "6 DCDeadBody";
comment "7 DCScream";
comment "8 DCCanFire";
comment "9 DCBulletClose";```
oh now i get it
Wiki says its AI only, I tested and it only worked for AI, hope it was an error vs not working
an EH that fires when a player uses missiles ?
hmm you just need a command to know what the weapon is locked on to
to add a minor explenation, those "EHs" are DangerCauses (DC) which can be used in the danger.fsm to make AI react diffrently to those situations
would be neat to expose those to nativ SQF
interesting
So you can receive the EH's inside danger.fsm but not in normal sqf?
I am getting an error in the High command module when I change the side of the player. How would I read the code of the HC module to understand if there is anything I can do to fix it?
@tough abyss perhaps you've got some time to make a prototype for the aforementioned extended AI EH hooks from danger.fsm?
pseudocode would surely be enough, so others can follow and maybe contribute themselves
If you get an error it probably shows you the file the error is in right? Just view that file @thick sage
A3\modules_f\hc\data\scripts\HC_GUI.sqf. How would I go to this file? Is it on a pbo, or just somewhere on the computer?
@still forum they are not real EHs in the danger.fsm but the danger.fsm gets the dangercause as input by the engine which then can be used inside the danger.fsm
this is a very bad example of me trying something in the danger.fsm :P
https://cdn.discordapp.com/attachments/216215205959434240/357610852372840450/unknown.png
but you can see how its setup here
@timber ridge could you remind me in the evening? currently in the office
@tough abyss sure, but I guess there's a functionality on discord to set a reminder in X hours just like on Slack, no?
no idea 😄
oh yeah, this one seems suitable - https://discordbots.org/bot/290947970457796608
You can just create your own server for free and have all the bots there
There's actually some decent music bots etc. So you can listen to youtube on the phone with screen off
@timber ridge my idea would be to get a array of functions defined in a new class lets say class AIHooks with https://community.bistudio.com/wiki/getArray
that would be inside the danger.fsm
inside that class are functions listed which are executed, any mod can add functions to that class
the input params are just given into those functions as they come by the engine from the danger.fsm
that would enable AI mods to coexist
right now any AI mod changing the danger.fsm is killing the one loaded before
Help! I'm freaking disabling serialization but it still gives me error and controls don't get created (?)
file: fn_diag_SelectionScreen_init.sqf
called by: onLoad
`
#include "..\IDD.h"
#include "..\IDC.h"
disableSerialization;
_display = (findDisplay IDD_SELECTIONSCEEN);
_policeOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_POLICE;
_civOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_CIVILIAN;
_medOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_MEDICAL;
ctrl_policeExtraGlow = _display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 1];
ctrl_civExtraGlow = _display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 2];
ctrl_medExtraGlow = _display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 3];
ctrl_policeExtraGlow ctrlSetText "glow_single.paa";
ctrl_civExtraGlow ctrlSetText "glow_single.paa";
ctrl_medExtraGlow ctrlSetText "glow_single.paa";
ctrl_policeExtraGlow ctrlSetPosition (ctrlPosition _policeOverlay);
ctrl_civExtraGlow ctrlSetPosition (ctrlPosition _civOverlay);
ctrl_medExtraGlow ctrlSetPosition (ctrlPosition _medOverlay);
ctrl_policeExtraGlow ctrlSetTextColor [1,0,0,1];
ctrl_civExtraGlow ctrlSetTextColor [0,1,0,1];
ctrl_medExtraGlow ctrlSetTextColor [0,0,1,1];
ctrl_policeExtraGlow ctrlCommit 0;
ctrl_civExtraGlow ctrlCommit 0;
ctrl_medExtraGlow ctrlCommit 0;
`
What the hell am I doing wrong?
It still give me the NAMECONTROL doesn't support serialization error
Jelp
is that the whole scriptfile?
That's the whole script file
It's called from a Display with an onLoad EH on it's root
Called from onLoad = "_this call PL_fnc_diag_ScreenSelection_init";
the IDC_WHATEVER are macro defines in the headers
Just in case. It theoretically passes the caller Display, but it passed a controlNull for whatever reason (display still gets created with everything correct though)
"just in case"
Yes.. it passes a display. And you can't do that without disableSerialization
Also.. if you don't pass _this.. it will still pass _this. But without error
I have disableSerialization put in there, but gets ignored and gives error on any control.
no it doesn't
You pass a display to the call before you call disableSerialization
the _this is a display
Do you know how variable scopes work in SQF?
Yep
_myVar = "test";
call {
//you can access _myVar in here
};
right?
But I'm not getting the error in the function params params
My first error is in _policeOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_POLICE;
Sorry
No
It's in ctrl_policeExtraGlow = _display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 1];
_this = "test";
call {
//so.. can you access _this here?
};
@still forum _this get's overriten with nil
no it doesn't
The thing is, I'm not using _this for anything
Good. Step 1 done 😄
Because I was using it before, not anymore
I think your problem is that you are saving into a global variable
Not any impact....
Do you really need these as globals ?
I prefer them that way, so I can manipulate them more easily
uiNamespace set/getVariable thing then?
Gonna give it a go to the array thing
Alrighty, serialization problem dealt with
Now... Not a single control gets created
Updated file:
`
#include "..\IDD.h"
#include "..\IDC.h"
disableSerialization;
_display = (findDisplay IDD_SELECTIONSCEEN);
_policeOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_POLICE;
_civOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_CIVILIAN;
_medOverlay = _display displayCtrl IDC_SELECTION_SCREEN_OUTLINE_MEDICAL;
ctrl_selectionScreenGlow = [];
ctrl_selectionScreenGlow pushBack (_display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 1]);
ctrl_selectionScreenGlow pushBack (_display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 2]);
ctrl_selectionScreenGlow pushBack (_display ctrlCreate ["RscPicture", IDC_SELECTION_SCREEN_OVERLAY_GLOW_EXTRA + 3]);
(ctrl_selectionScreenGlow select 0) ctrlSetText "glow_single.paa";
(ctrl_selectionScreenGlow select 1) ctrlSetText "glow_single.paa";
(ctrl_selectionScreenGlow select 2) ctrlSetText "glow_single.paa";
(ctrl_selectionScreenGlow select 0) ctrlSetPosition (ctrlPosition _policeOverlay);
(ctrl_selectionScreenGlow select 1) ctrlSetPosition (ctrlPosition _civOverlay);
(ctrl_selectionScreenGlow select 2) ctrlSetPosition (ctrlPosition _medOverlay);
(ctrl_selectionScreenGlow select 0) ctrlSetTextColor [1,0,0,1];
(ctrl_selectionScreenGlow select 1) ctrlSetTextColor [0,1,0,1];
(ctrl_selectionScreenGlow select 2) ctrlSetTextColor [0,0,1,1];
(ctrl_selectionScreenGlow select 0) ctrlCommit 0;
(ctrl_selectionScreenGlow select 1) ctrlCommit 0;
(ctrl_selectionScreenGlow select 2) ctrlCommit 0;
`
Execute (while display shown): hint str ((ctrl_selectionScreenGlow select 0) isEqualTo controlNull);
Output: true
hint str (ctrl_selectionScreenGlow select 0);
Output: No control
FIXED!!!
Someone posted a script that automatically makes connecting players curators if their uid's are in a whitelist. Was pretty broken, but I repaired it:
https://gist.github.com/commy2/d112f77e9fd32980fc112914bd3952ff
Everything works 😄
Making it public helps 🤦
@little eagle A select in line 26, and check if array is not empty, can make it more optimized ?
You mean L16?
Inside the waituntil
Which array can be empty? I don't follow.
When you checking if the player are connected in game with the allPlayers variable,You using a forEach
I think a select is a little bit more fast
I guess checking if the array is empty. Instead of forEaching. Which no. It's not faster. forEach does that internally too.
private _unit = allPlayers select {getPlayerUID _x == _uid} select 0;
!isNil "_unit"
Like this?!
Yeah for example
Imo this one looks prettier, but it doesn't have the exitWith, so it always iterates through all players and doesn't stop when it finds one.
It's scheduled, so meh.
anyone here used ZBE caching script before? know how to get rid of the debug in top right corner?
3. Set desired options in userconfig (\Arma 3\userconfig\zbe_cache\zbe_cache.hpp)
i'd look there
@cunning nebula I am using the script version
so ?
that doesn't make the variables any different
zbe_aiCacheDist = 1000; //At what distance is AI cached/uncached?
zbe_cache_debug = 1; //Debug hint/RPT? 1 on 0 off
zbe_vehicleCacheDistCar = 100; //At what distance should empty cars be cached?
zbe_vehicleCacheDistAir = 1000; //At what distance should empty aircraft be cached?
zbe_vehicleCacheDistBoat = 1000; //At what distance should empty boats be cached?
zbe_minFrameRate = -1;//If the FPS drops below this number, then prevent AI from uncaching. -1 is for suggested setting (if (isDedicated) then {_fps = 15} else {_fps = 30};).
set zbe_cache_debug to 0
cheers
But does yours work, @cunning nebula Curator_F is no class in A3, modules need createUnit, not Vehicle and you have waitUntil in unscheduled environment.
Also _player is an array and not an object. It seems to me that your code has the right ideas, but doesn't work atm.
could be, i wrote it at work a while ago, havent really tested it
See? I tested mine and it works.
I based it on yours.
don't need no module
But the curator logic is required and it is a module. I don't see how you can circumvent these hard coded requirements.
far as I know, zeus just needs a curator entity
I never had to create a module for that
and that part I have tested before
The curator entity / logic has the classname ModuleCurator_F and doubles as the editor module.
What about the other issues? sleep in unscheduled?
Mine works, maybe curator_f also works. Will test and report later.
im sure yours works
curator_f however does work
that much I know for sure
the rest is the result of a lack of coffee
😉
Yeah, there would be two ways and I like curator_f more (no group).
zbe_aiCacheDist = _this select 0;
zbe_minFrameRate = _this select 1;
zbe_debug = _this select 2;
zbe_vehicleCacheDistCar = _this select 3;
zbe_vehicleCacheDistAir = _this select 4;
zbe_vehicleCacheDistBoat = _this select 5;
thats the whole point of the script-version, right ?
if (isServer) then {[1000,-1,true,100,1000,1000]execvm "zbe_cache\main.sqf"};
good, then simply change true to false
my brain farted, i forget how to make this script work, can you guys help me in this one?
Use _x ?
i did, still gives error
the hole code is this
_car = _this select 0;
if ({!alive _driver}) then {moveOut _x forEach _crew;}];```
im trying to figure it out
where is _crew defined
or _driver...
or the end } on ur foreach
({!alive _driver}) why the {}?
if expects BOOL, not CODE.
forEach needs CODE.
_crew undefined
_driver undefined
3 opening { and only 2 closing }
ok i have gotten rid of the function with the help of pierremgi
if (!isDedicated) then {
[] spawn {
while {true} do {
_allAIUnits = allUnits select {_x distanceSqr getpos player < 900};
if (count _allAiUnits > 0) then {{
if( side player == side _x && alive _x && group _x != group player && leader player == player && _x isKindOf "Man" && vehicle _x == _x && (leader _x != _x || count (units group _x) == 1) ) then {
if(isNil {_x getVariable "sa_join_squad_action_id"}) then {
_actionId = _x addAction ["Join My Squad", {
if(isNil {(_this select 0) getVariable "sa_original_group"}) then {
(_this select 0) setVariable ["sa_original_group",group (_this select 0)];
};
[_this select 0] join player;
(_this select 0) removeAction (_this select 2);
(_this select 0) setVariable ["sa_join_squad_action_id",nil];
}, nil, 0, false];
_x setVariable ["sa_join_squad_action_id",_actionId];
};
} else {
if(!isNil {_x getVariable "sa_join_squad_action_id"}) then {
_x removeAction (_x getVariable "sa_join_squad_action_id");
_x setVariable ["sa_join_squad_action_id",nil];
};
};
if( side player == side _x && alive _x && group _x == group player && leader player == player && _x isKindOf "Man" && vehicle _x == _x && _x != player ) then {
if(isNil {_x getVariable "sa_leave_squad_action_id"}) then {
_actionId = _x addAction ["Leave My Squad", {
if(!isNil {(_this select 0) getVariable "sa_original_group"}) then {
[_this select 0] join ((_this select 0) getVariable "sa_original_group");
(_this select 0) setVariable ["sa_original_group",nil];
} else {
[_this select 0] join grpNull;
};
(_this select 0) removeAction (_this select 2);
(_this select 0) setVariable ["sa_leave_squad_action_id",nil];
}, nil, 0, false];
_x setVariable ["sa_leave_squad_action_id",_actionId];
};
} else {
if(!isNil {_x getVariable "sa_leave_squad_action_id"}) then {
_x removeAction (_x getVariable "sa_leave_squad_action_id");
_x setVariable ["sa_leave_squad_action_id",nil];
};
};
} forEach _allAiUnits;
sleep 10;
};
};
};
};
still getting a not declraed error
use code tags or even better pastebin
_car = _this select 0;
if (!alive driver _car) then {{moveOut _x} forEach crew _car}
}];
now i made that work
god i hate when my brain decide to stop working
All you need is practice for 1 to 36 months.
And allot of coffe
_x distanceSqr getpos player
Why not:
_x distanceSqr player
?
Seems unnecessarily complicated considering you could just add the action to the player and avoid the removeAction and the loop all together by checking the cursorTarget.
example? trying to improve this script, as it stopped working after last update
I'll write something...
thank you very much
here is another version Pier and GOM helped with but still couldnt get to work
@astral tendon dont use moveOut, at least not alone
also unassign them from the vehicle
why?
because otherwise they might try to get back in
its still assigned to them
in your situation a simple leaveVehicle command would probably do
the truck is locked
if that is quick enough
ah
I'd still do it
@subtle wigeon that just a script to allow you to recruit units ?
Yes, correct. It allows you to recruit and dismiss units
its much more complex than necessary and rather bad for performance.
addAction allows you to include a condition
that way you wont need that loop
aye, that is a much cleaner solution
I just cant figure how to make it work, meaing I am not sure if i out the bits of code in the right places
commy2 Thamks going to test now. If i understand.
// postInit / initPlayerLocal.sqf
this means place in player local init, must be ran post init?
You put it either in initPlayerLocal or any postInit = 1 function.
Dun't matter. All it needs is player to be not null still.
this will work with mulitplater and dedicated sever, as that is where it will be going
Yes, it's supposed to work in MP.
As I said, untested, cause this laptop doesn't run Arma. :/
lo,l, testing right now
hmm @little eagle I think your version would allow him to recruit buildings 😉
Didn't know there are buildings on WEST side.
don't see any side checks there
Right. Oh, well forgot about it.
what is the isNil for btw ?
How do I add a module to zeus? (#arma3_config?).
Hatred and the will to dominate (unscheduled environment)
isn't the condition unscheduled by default ?
The statement in addAction is scheduled, the condition is unscheduled.
ah right, looked at the wrong part of it
side check should be added, as well as isKindOf CAManBase to not have the action show on vehicles. But doing that is easy once the thing is working.
though im not sure if that is needed
why does the action have to happen superfast ?
I don't trust doing group checks, then have the script suspend for a second and then have the join when the condition could've been flipped to false already.
This is why the arsenal mission errors on low fps and why the config viewer errors on low fps... You get tired of unreliable code after a while.
oh yeah, in case the soldier suddenly turns into a building when you use the action. good point
Haha, I like you.
you never know 😉
Exactly!
and I thought I had addActions completely figured out by now ^^
no
addMissionEventHandler ["entityRespawned", {
_unit = _this select 0;
if (local _unit && isPlayer _unit) then {
call "function of choice"
};
}];
needs to be used
What for?
dedicated and mulit enviroment
What does it do?
it would call the squad join script or function when plyers respawned
as of now when I die with your script it doesnt work when i respawn
You mean add the action to the respawned player?
yes sir
addactions die with you
will test
So it seems that ACE added garrison modules to Zeus yesterday... https://github.com/acemod/ACE3/commit/bb03f55c5c3e1c570d39aa85ed7041cf1f82c0aa
Just as I was about to add my own 😄
Don't trust the Frenchie.
+scopeName "Main";
+private _fnc_errorAndClose = {
+ params ["_msg"];
+ deleteVehicle _logic;
+ [_msg] call EFUNC(common,displayTextStructured);
+ breakOut "Main";
+};
breakOut lol
dirty cba developer
About a week ago @cunning nebula posted some code for spawning Zues mid game, but I'm getting an error with it.`
18:47:27 UnExpected call of CreateVehicle for 'curator_f', pos(0.000000.2,10.005997.2,0.000000.2). Vehicles with brain cannot be created using 'createVehicle'!
This was the Code:
addZeusEH = addMissionEventHandler ["PlayerConnected", {
params ["_id","_uid","_name","_jip","_owner"];
private ["_cur"];
if !(_uid in zeusuids) exitWith {};
waitUntil {
sleep 1;
({_uid isEqualTo getPlayerUID _x} count allPlayers) > 0
};
_player = allPlayers select {_uid isEqualTo getPlayerUID _x};
_cur = "curator_f" createVehicle [0,0,0];
_cur addCuratorAddons activatedAddons;
_player assignCurator _cur;
_cur addCuratorEditableObjects [allMissionObjects "all",false];
_player setVariable ["cur",_cur,true];
}];
removeZeusEH = addMissionEventHandler ["HandleDisconnect", {
params ["_unit","_id","_uid","_name"];
deleteVehicle (_unit getVariable ["cur",objNull];)
}];```
I'm currently just testing with ``testCur = "Curator_F" createVehicle [0,0,0];`` But I'm getting the above error. Am I missing something or?
Thanks.
It can't honestly. He's using sleep and waitUntil in unscheduled environment.
_player = allPlayers select {_uid isEqualTo getPlayerUID _x};
And this line reports an array, not the player.
true... didn't see that...
Yea I just gisted it last week and wanted to test it today so xD
but thx for your gist
I really like the idea of perpetuating repetitive tasks like this in gists and building a knowledge of SQF howto's.
I think it's ModuleCurator_F, not Curator_F, but I have no explanation of why both exists as game logics.
ah yea ModuleCurator_F
The code I posted spawns them on the server and they then get transferred to the client by using assignCurator.
yea and when client disconnects he removes them
Curator logics are always local to their assigned player.
Yup, cleanup.
You could also create one at the start of the mission for every white listed id. But I guess this is better? I don't know. It shouldn't really matter.
idk if they will appear on the role sheet?
The modules? Doubt it. They're sideLogic and not civilian or any other playable side.
true yea.
They're also not playableUnits or whatever the command is.
ah Target Exec doesn't like // just noticed.
Yeah, it also doesn't report the return value. TargetExec is from CBA and was made before the recent changes to the debug console.
Yea but the server exec was from BI them self right?
same for global
so I thought you guys use the same mechanics.
Yea but the server exec was from BI them self right?
Yes.
so I thought you guys use the same mechanics.
Well Pabst did, until the BI ones were changed.
How do I make a unit play an animation? never mind, google did what community.bistudio.com didn't
you should always ask <INSERT PREFERRED SEARCH ENGINE> first anyway. 😜
but now I am having a different problem
I want a soldier to sit on a wall with the "InBaseMoves_SitHighUp1"
but he just hovers above the wall
any idea how I could fix that?
setPosASL him further down
no easier option?>
when I place him into the wall in eden editor he just pops back up
this setPosASL ((this getPosASL) vectorAdd [0,0,-0.2])
Don't know how to disable snapping.. But I'd guess there is some way
now he falls to the ground
attachTo?
would require finding the wall first
too much work for just one animation
I guess I'll just remove that guy xD
thanks for the help anyway
if he sits still -> disableSimulation
I didn't expect it to look that awkward
😄
<cFC8932>Commanders Intent:<-co> Prevent any disturbances that may interrupt food delivery. Prevent civilian casualties.
<cFC8932>Concept of Operation:<-co> Platoon 3 will deploy by boat along with UNOSOM personnel to the food distr. point where they will secure a perimeter and maintain order.
<cFC8932>Coordinating instructions: <-co> Command will coordinate with UNOSOM Cmdr.```
what kinda of text is that?
those code and stuf?