#arma3_feedback_tracker
1 messages · Page 12 of 1
source=tank instigator=player? 👀
yeah that would make sense, but might break stuff backwards compatibility-wise
even back when there was no source/instigator separation roadkill damage always showed driver
but might break stuff backwards compatibility-wise
instead of having player himself as source you would have vehicle and instigator...hmmm
roadkill damage always showed driver
dunno If I changed that
The idea is following to detect if damage is a roadkill:
if ammo=="" and vehicle source != source
Noted to check how it looks in latest beta
But again for this kind of non-broadcasted damage (roadkills are calculated locally for victim), I wish HandleDamage recieved a flag that it is roadkill damage
other local-originated damage sources could benefit from it too
so you can instantly tell where engine got this damage from without having to have PhD in Real Virtuality 4
There are hundreds of calls for all sorts of damage local and not in the engine, adding context like this would mean editing all those calls
just that fake head call is about 25 calls + different types of objects
easy to overlook something and spend weeks trying to fix it
not happening
_dude addEventHandler ["KilledByPhysics", {}];
So https://community.bistudio.com/wiki/create3DENComposition works with CfgGroups but not with Cfg3DEN >> "Compositions" 
Worth a ticket?
is the window for next A3 update closed now given 2.18 is used in the wiki?
stuff is getting rejiggled around between 2.16 and 2.18 iirc
Some questions/requests (will make ticket if it's deemed reasonable):
- Could
doArtilleryFirereturn true/false depending on success or failure of fire mission? Currently the way i'm checking this is by waiting unitunitReadyreturns true. However, sometimes the artillery may not fire and become ready again -- i believe this is to do with the slope gradient on which the artillery vehicle is parked. So then i need to check ifmagazineTurretAmmoreturns an empty/emptier magazine. Would be useful to just havedoArtilleryFirereturn a boolean and skip all this extra work. - Could we get a
FiredArtillery(or something else) EH which is similar to theFiredEH but just triggers once the first shot of a barrage is fired from an artillery unit? Right now i have to make the EH delete itself after the first time, then re-add it later. (desired effect -- I just want to do stuff the moment the first shell is fired and not on subsequent fires in the same fire mission/barrage)
it might have to be an eventhandler if anything because when the AI 'fail to fire' when given this command/order you can see the gun elevate/rotate into position - stop - return to its previous position
so it seems it 'tries' to fire but then fails, and the failure happens way after the command execution
+1 actually. Not sure P3D updates are good to go nowadays but sometimes having either no config or no selection make me to pull my hair. One thing I realize recently is Persian head cannot retex the eyes
Also US Parade uniform lacks some selection IIRC
Also... why Bohemian heads don't have proper bones for facial expressions? 🤔
bit of feedback on the HashMapObject, had an idea concerning how to better handle _this arguments spanning the #create #constrList array.
https://feedback.bistudio.com/T178906
Is there a good reason why group event handlers are local to group?
Can't it be global as these events are broadcasted anyway?
Unless its different enough to be triggered local-only?
At least the basic stuff like UnitJoined and UnitLeft
Hmm that's true 🤔
theyre not necessarily broadcast right away i think
simulation bubble stuff like fired event
Never seen a delay in group syncronization, don't think its the case here
HandleDamage context is 2.18 😢
2.16 is small update
Sad, really wanted to have it soon on stable. These fake HeadHit and bleeding HandleDamage fires cause me a lot of trouble
Hmm, apparently instigator is empty if source unit has no brain (fully dead) 
Mine damage by alive unit => source=unit, instigator=unit
Mine damage by dead unit => source=unit, instigator=null
I guess it checks if instigator is live unit before adding it to EH or something?
Pls fix this config errors
- SPAR and Katiba interior tails dupe https://feedback.bistudio.com/T178139
- Iron sight of .50 M2 machine gun blocks unit use night vision goggles
https://feedback.bistudio.com/T172106#2439788
instigator is Person so it should not matter if dead or not, can you give me a repro?
on it
Did testing, found the issue
Looks like shot broadcast doesn't include instigator
Local: source, instigator
Remote: source only
So when mine owner leaves, locality transfers to server which only has source as parents
what do you mean leaves, leaves server?
- Client places a mine and leaves
- Server now owns the mine which doesn't have instigator
no need to leave even, looks like projectile creation message doesn't have an instigator right away
only broadcasts the source
why would it, he left the server there is no more reference to him
The unit is still there (AI/corpse)
no, instigator can be any unit that "pulled the trigger"
accidentaly maybe
No, instigator has nothing to do with players specifically
Its just a unit that did the shooting while source is whatever vehicle produced the shot
Anyway same issue would happen if AI would place a mine and their owning client leaves
in any case I need a repro to see if instigator is assigned correctly
Yeah, seems to happen with any global projectile
Only broadcasts the source, no instigator
Where projectile is local:
source=vehicle, instigator=unit
Where projectile is remote:
source=vehicle, instigator=null
so when projectile switches locality instigator info is lost
Gonna make a repro for it
yes please
mostly, unless you have something very important
Afaik there are no local checks in code. If the code runs, the event triggers.
If the event is broadcasted and happens on remote machines, the event will also trigger.
If its not then its not broadcasted. Or atleast not in a way that the code responsible for handling it, is executed.
Just tested to find out that at least UnitJoined fires only where group is local.
Actually not sure what will happen if remote client is going to add a unit to remote group 🤔
Either way it is definitely not global
If remote stuff doesn't call the group.AddMember() then 🤷
Just tested it, its a mess
some work and some don't?
createUnit into remote group fires UnitJoined where you create the unit
joinSilent into remote group fired UnitJoined both where you did the command and where group is local
So you can't say that UnitJoined always fires where group is local, its not the case where you create unit into remote group
There is no BOOL = local GROUP 
No way to tell if group is local if its empty and you're not the server?
Speaking of groups, I was thinking about these issues where groups didn't broadcast properly and you ended up with players without a group issue that been there since dawn of time. If you ask me this kind of issue could use more attention, it has a potential to be the case of a lot of unreliability that is often associated with Arma multiplayer.
It got alot of attention. I was on ita couple months ago.
half dozen custom builds with extra logging and days of debugging/searching. No results. If we hada reliable repro for it..
We have it happening pretty much every round in KotH, maybe we can try there?
I need to reproduce it myself, multiple times.
Debugging and freezing the server while doing so
I already had a guy that had it regularly that helped me with it.
Can't call it a reliable repro, but it happens all the time
Hmm
I'm also seeing a lot of cases where public variables and setTerrainHeight data doesn't arrive from the server. You randomly end up without some server-sourced public variables in a strange way, they are not nil for some time but then become nil again?
This seems to happen fairly reliably when somebody plays through VPN
But can randomly occur under normal conditions for stable connection
So I thought maybe group messages are missed the same way this stuff is?
setTerrainHeight not arriving + public variables missing producing scripting errors even though there is a check that all essential PVars aren't nil before finishing loading
yes could be. But they are "reliable" messages, so they are supposed to go through..
That stuff was built in the very early 2000s. If that is the issue its not gonna be fixed
Eh?
local object
Parameters:
object: Object or Group (since
Arma 3 logo black.png
1.32
)```
Are you the same guy that does mission scripting for KotH?
19:21:49 source = B Alpha 1-2:1 (KK_DEV (2)) (B_RangeMaster_F)
19:21:49 instig = B Alpha 1-2:1 (KK_DEV (2)) (B_RangeMaster_F)
19:21:49 local = false
19:21:49 source = B Alpha 1-2:1 (KK_DEV (2)) REMOTE (B_RangeMaster_F)
19:21:49 instig = B Alpha 1-2:1 (KK_DEV (2)) REMOTE (B_RangeMaster_F)
Same guy that is supposed to know all that is to know about scripting commands?
I don't think I ever claimed that 🤔
Goes with territory
Anyway I added missing instigator to a few places related to shot/missile handling, and hitpart/ ammohit EHs, incomingmissile as well
Oh, its there. No idea why I thought it wasn't yesterday, I was messing around with groups and missed something.
By adding I mean just passing existing shotInstigator param down the chain
Entity HitPart? Is instigator at the end of array now after _isDirect?
yeah
The instigator missing when unit killed via mine by a respawned player, can your fix also fix this issue?
Its not an issue because respawned player is separate new entity
You can script fix that, save array of all player mines, setShotParents them when player respawns
This is a issue because I am respawnable player not AI I was actually respawned as same unit
I can't fix this by playing e.g. Warlords
I would like to know all my frags as a player

Well, another mission you could respawn into different unit or of different side. Maybe it could be a description.ext option alongside respawn stuff though.
as it requires bit of advanced scripting to implement
Not sure if bug, after you respawn why the mines should automatically get assigned to you? If you can script it, then thats ok, but as default mechanics? I'm trying to remember what game gives you your mines back on respawn
any FPS I can think of where you can place mines will assign you kills from them after a respawn
that's the mentioned issue, not "giving back mines".
My friend said 'yes' on question for Battlefield games
In Squad AT mines kills also go to my scoreboard even after multiple respawn
Do we also give mine parents to respawned AI units?
And c4 charges? can you trigger them after respawn?
No
I seem to remember you had a finite number of mines so after respawn placing new mines would remove some old mines
seems yes but don’t see link with placed mines, owner respawn and kill count for owner
I just remember newbies triggering own mines “what a beautiful red diamond” again and again or Sgt.Adams cosplayers
If weren't this bug the mine owners would have received a lot of sanctions
Trying to script correct instigator missing from everyone but shooter and it seems that setShotParents doesn't broadcast at all?
Its server only, but does it do anything network-wise?
Parents change on server but nothing happens on clients, nor for JIP
Yeah, the command does nothing for clients
Did nobody use it over 8 years or checked if it actually works? 🤔
Or it broke sometime over this time
Looks like it never worked in the first place
the github issue seems resolved
Probably didn't test enough to check if it did anything on client
it has own message so it does something
Gonna make a repro
placing mine broadcasts parent and instigator on its own fine
setshotparents action however doesnt broadcast, gonna look at what it does
Yeah, I tested it without your yesterday's fix for missing instigator
So since the command was added no one bothered to test it properly?

Works in SP
[QC pass]
Does it not work at all or is it just mines that have a problem? I know there have been some issues with mines not doing updates properly (setPos* didn't work on them, for example) so this could be another case of them being uniquely wonky
At all. I tried other shot simulations and its the same.
Speaking of it, why is setShotParents server-only? Security concerns?
I've seen cheaters shoot their guns and kills being attributed to random players to frame them, they clearly already do that and don't need a scripting command for it (it doesn't work anyway)
Batman wouldn't allow
Looks like he fears it so much he made it not work on server either
Arma 3, © Wayne Industries
Unless there is a good reason, I'd make setShotParents executable everywhere. There is also CfgDisabledCommands now so you can limit it yourself.
Or maybe it doesn't matter as its solveable through a server-bound RE call anyway
Would be when its fixed
setShitParents
🤣
ERROR: DAD: undefined variable at L16
projectile Penetrated EH. Can anyone confirm it is working in stable/dev? it is old EH
params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle"]; _projectile addeventhandler ["Penetrated", {systemchat str _this}]
}];```
So make it a feature?
I see no problem making the command work everywhere. Plus you kinda need it for non-global shots (shotBullet and such) as you won't be able to have server change the parents for them for you, as they're local for each client.
Works in stable
Wow, didn't know this existed
neither did {insert player}
why would you want to setShotParents for bullets when they are set automatically
Dont need it personally but maybe somebody will need it for their script or mod
Like trigger some invisible AI to shoot and attribute the shots to the player
Dont think it has JIP thingy set either so something to look at
Only updates for current clients?
at the moment it is broken
If this command worked on clients you could fix that through script
JIP joins, goes through list of all mines, fixes their parents to whatever was scripted for them
only for themselves (but I guess it will also broadcast again)
the only thing that works correctly it rejects non server execution, thats all
setShotParents [source, instigator, local] maybe?
what just for server? why
no, if it worked on all clients
it wont be, I am not enabling this
To fix JIP issue you could manually go through all shots on join and fix their parents to scripted parents
all relevant shots*
I don't need this personally but I see how it could be useful to others. I don't see any real reason why its a problem either. Cheaters already create shot messages with fake parents to frame innocent players, it not a security concern.
I am not doing it, you can try making a ticket with request and then it will go for a discussion and then maybe (not really) the security feature will be cancelled
Mod use idea: Imagine a vehicle with several autonomous turrets with UAV AI in them that shoot shotBullet. You then script it to attribute all these shots to vehicle's effective commander unit instead of turret AIs.
WH40k or something like that (not sure if they have autonomous turrets there)
Not something I'd use personally
Sure, gonna make a ticket as this command is being looked at
It's not set automatically for script-created bullets.
Cases where bullets might be created by script and need parents (not exhaustive):
- simulating fragmentation
- simulating cook-off
- replacing bullets fired from a weapon with a different type
- faking a sniper shot without dealing with the actual AI
Mod melee weapons also use non-global shots, being able to create the shot and instantly set its parents for engine-driven damage attribution could be useful.
I think they actually shoot the bullet now so its properly attributed to the shooter?
Haven't looked how its done in say SOG:PF CDLC
Ticket first. Dont forget to list all the cons as well
Eg CAS module/feature and you want to attribute kills to person that called it in.
Did you make a ticket for that createShot command you mentioned a while back, that would handle setting velocity and parents at the same time as creation?
I didn't since I don't really need it, but it makes a lot of sense to have.
https://feedback.bistudio.com/T178981
Done. @devout wave @uncut briar Please have a look and comment if you have more things to say about it.
So this is how setShotParents work at the moment. You can change shotParents from the server for a global projectile that is created by remote player. Say I throw a grenade, you can change shot parents for this grenade from the server only on my client, so when it explodes the hit event on my client will have a new pair
Very limited questionable use
I think the idea was when you alter shotparents on the client from server it somehow syncs it back fro everyone, but it doesnt work like this
Maybe just have it AG EL?
If you dont need to broadcast just do it locally, if you want it global, do remoteExec
and RE has JIP covered
Basically only change the parents where command is called
It would be nice if the end result led to existing server exec implementations working
Yeah, not very backwards friendly
Having a local flag as third argument could help here
Huh, so it does indeed work
when you execute it on server it gets applied on client but not in server
yeah
no jip of course as expected
We used setShotParents to give a parent side to "fake" airstrike bombs that didn't otherwise have one.
I also just tried to use it on mines, so if a player dies/respawns/relogs he still the "owner" of the mine (Client latest dev build / Server latest prof build)
Worked without any problem so far ^^
had this idea concerning HashMapObject, #create, and its _this arguments
There's addOwnedMine for that, although given that they're ammo objects, maybe it does exactly the same thing :P
I don't think that one needs server exec though.
Server exec was fine for my case, easy logging if needed, can also add the deleted EH to remove the mine from hashmap after it triggered etc.
Just catch the mine in the Fired EH and send netID to server to handle the rest ^^
Good to know that it works to some extent, wont have to wait till 2.18 and can use it now
Still, making command more broadly useable wont hurt
good things are coming to those who wait
nearestObjects [player, [], 5] does work with script placed simple objects but if you put in the classname of the simpleobject nearestObjects [player, ["Classname"], 5] to only search for it , it doesent work. is that intended?
simple objects dont have classnames
is it normal then I can use typeof cursorobject on it ?
and it gives a classname? thats odd then - didnt think that'd work
yea it does, atleast on the my basebuilding objects
Perhaps simple object stores class name that was used to produce them which typeOf checks but search commands dont?
Also explans why allSimpleObjects can search by class name but not inheritance
Its not class name in the same sense as normal objects has classes
just a string stored alongside the object to remember which class was used to make the object
And this means there is no way to easily search simple objects, you'll have to setup the data yourself or use allSimpleObjects which is probably fairly slow with either approach
nearSimpleObjects could be useful
yea that would be great
the only thing I could do rn is use nearestObjects [player, [], 5] and then check each object with typeof and then filter
Yeah that would be your only easy way for now
Also isKindOf works on the created simpleobjects which is funny
Super Simple do not (p3d path instead of class provided for creation)
Damn fake hit head and bleeding mess everything up by being fired before HitPart 
One frame before HitPart even
What a mess
Really hope 2.18 comes sooner so this can be fixed.
Wish there was server-only Local event
I wonder if https://community.bistudio.com/wiki/getEntityInfo could return if a unit is group leader.
Use case would be to get all unique groups immediately from an array of units.
Currently we have to get all units, then loop over all units and pushBack the unique groups.
private _uniqueGroups = ((units _side) inAreaArray _area) select {_x getEntityInfo 15};
ARRAY = allGroups ARRAY
```to extract relevant groups out of array of entities?
What do you mean?
Suggesting alternative mean to solve your goal
Guess you meant
private _uniqueGroups = ((units _side) inAreaArray _area) select {_x getEntityInfo 15} apply {group _x};
Which you can already do with
private _uniqueGroups = ((units _side) inAreaArray _area) select {leader _x == _x} apply {group _x};
Instead I suggested a command to extract groups out of any list of entities you give it
You'd feed any units\vehicles into allGroups new alt syntax and it'd return you unique groups that these entities are in
single command execution
Your example code would've returned group leaders and not groups so I added apply
Yeah, true. My mistake.
How it would've looked with my suggestion:
private _uniqueGroups = allGroups ((units _side) inAreaArray _area);
I had a need for such command myself some time ago
Hmm, this command would've returned groups even if their leader wasn't in the area 🤔
So its not quite what you wanted with your example code
Result:
0.0605567 ms
Cycles:
10000/10000
Code:
private _units = ((units independent) inAreaArray "marker_0") select {alive _x && not captive _x};
private _groups = [];
{
_groups pushBackUnique group _x;
} forEach _units;
_groups
Result:
0.0507473 ms
Cycles:
10000/10000
Code:
((units independent) inAreaArray "marker_0") select {alive _x && not captive _x && leader _x == _x} apply {group _x};
So I guess filtering it directly in the select instead of pushBackUnique isn't that much faster.
yeah, the less scripting commands you do the better
probably can speed it up by changing condition order and adding lazy evals
leader player == player
Is already very fast. So no need of getEntityInfo
leader _x == _x && {alive _x && {not captive _x}}
probably can speed it up by changing condition order and adding lazy evals
Gonna test that now.
depending on your mission
I wonder how SimpleVM would affect
select {alive _x && not captive _x && leader _x == _x}
```vs
```sqf
select {alive _x} select {not captive _x} select {leader _x == _x}
Result:
0.0237605 ms
Cycles:
10000/10000
Code:
((units independent) inAreaArray "marker_0") select {leader _x == _x && {alive _x && {not captive _x}}} apply {group _x};
@desert trench For awareness as we use that quite often I guess
Will doing single selectors be faster than single big condition selection?
As I understood it works only for single command selectors
Result:
0.026912 ms
Cycles:
10000/10000
Code:
((units independent) inAreaArray "marker_0") select {alive _x} select {not captive _x} select {leader _x == _x} apply {group _x};
Ah wait, we need to turn condition arround I guess
Are you testing in 2.16? Is SimpleVM active there?
Wasn't simpleVM active for ages?
Not sure 🤔
No
I see. Changing to dev then.
Gonna continue that in #arma3_scripting
If you're using perf branch it should be there
It's not in stable tho 
So this means single selectors is almost as fast as one selector with lazy evals
Unless SimpleVM also optimized that big selector with lazy evals too? 
GIB DOCS
It's slightly faster
Result:
0.0259134 ms
Cycles:
10000/10000
Code:
((units independent) inAreaArray "marker_0") select {leader _x == _x} select {alive _x} select {not captive _x} apply {group _x};
Looks like OnUserSelectedPlayer is unreliable if selectPlayer is done on the same frame as selected unit creation
Event fires with null entity on server
Adding 1 frame delay doesn't help
Frame 1: createUnit
Frame 2: selectPlayer
still random null entities in OnUserSelectedPlayer
Wonder if its a bigger problem or just EH being unreliable
Doing selectPlayer on existing units never fails
Also wonder if this could be related to group issues 🤔
selectPlayer related stuff executes before client finishes sending associated unit\group stuff they created
unreliable message order something-something
yeah ive found selectplayer to be erm
interesting
i use it for respawn without killing your previously controlled character
Player identity isn't always there in time either
Creating and selecting the unit in the same frame\next frame:
Very unreliable, sometimes no unit, sometimes no identity
Wondering if this could be related to groups randomly not arriving to players. Message order issue perhaps?
Same issue when doing forceRespawn, randomly no entity, randomly no identity, even randomly no group
some do
{_unique pushbackunique group _x} foreach _units
Yeah. We've been doing that.
Sa-Matra worked out a good solution.
Do you mean the Note on BIKI is actually true??? Creating and immediately selecting player into newly created unit could cause all sort of problems due to possible delay in unit initialisation. Give the unit some time to propagate properly on the network before using this command on it.
have unit ready on back burner for the next player, instead of creating it on the spot
But this also happens with usual respawn
what do you mean by that
Normal player respawn results in same picture
I dont understand. selecting player right at respawn?
No, normal player respawning also triggers this, in the same faulty way
onUserSelectedPlayer not updating problem, or which problem
Normal respawn (ESC->Respawn, death+respawn) behaving the same way as scripted, onUserSelectedPlayer entity being at random states
"could cause all sort of problems due to possible delay in unit initialisation" means these problems also happen during normal gameplay
which one is the second message?
Both are ESC->Respawn
with 3 second respawn timer delay
so the first is immediate respawn and second 3 sec countdown?
best out of five?
null entity, unit without identity, unit but not player, proper player unit
null seems to be the rarest to happen
i can have a look if it can be made more reliable
but need a ticket so I won’t forget
Null happens very rarely (testing setDamage 1 here) but it does happen
Gonna make a repro tomorrow
I wonder if this unreliability is related to that issue with player groups missing
@solid marten regarding
[BUG] Garbage collector and respective SQF commands are bugged
https://feedback.bistudio.com/T171981
Tested with minPlayerDistance = 0; again - same.
Added both versions of the mission.
However I found a few of the issues.
- As best I can tell only one dead is removed per group per checking cycle.
Not sure if dead are still handled as groups. Still if you create just one unit groups before killing them, they get clean up as expected.
By default the mission creates all AI in one group - as result they get removed only one by one. Can be toggled via TEST_CreateNewGroups = true; now.
-
While for wrecks the check cycle seems to be once per second, for dead infantry it seems every ~ 30s. So cleaning up a group of 6 takes 3 minutes.
-
There must be also awareness that an unit is dead first - Not 100% if limited to player lead groups or how that works with AI lead/player in a group/single unit groups/units from the group not close. So for a player lead group (can toggle via 0-0-6 to be crated in the player group), either you need to wait for the automated status check "X whats your status" - seems to happen after 15? seconds. So another delay. Or you do the 5-report status for potentially quicker awareness. Reveal/visibility/etc may play into that too.
Doubt 3 can be fixed but 1 and 2 seem not intentional or poor design.
Another element that may play into all that is locality. Both for unit creation, group ownership. Yet also with the SQF commands. The BIKI states global, but should be verified.
Tried to nail down the issues we had with the sqf commands (wrecks deleted despite excluded, dead bodies not removed that cannot be explained by above), yet not success so far.
To debug the issues, more info would help a great deal - whats in the garbage collector and the order (if FIFO ordered), or their timestamps. To get that info via sqf and the query the status of a wreck or dead body.
the garbage collector works in mysterious ways and I think I also found flaw in removal logic. Locality is something I need to understand as well.
But yeah, it adds value to every dead depending on what they have. weapon values + magazine values. most valuable removed last
Flag carrier removed never
@solid marten https://feedback.bistudio.com/T179027
Made the repro for onUserSelectedPlayer
The whole this is super weird, sometimes you get no null for 100s for tries
Then I restarted both games and I had nothing but nulls
Some weird stuff is going on, reminds me of that old bug with turrets where it was breaking in similar streaks
Wondering if this could be to the same cause (message order mess up)
Looks like getUserInfo is pretty slow command, I wonder if it can get getEntityInfo treatmeant so you can only get value that you care about?
ANY = STRING getUserInfo NUMBER
"2" getUserInfo 10 to get playerObject
You could always store what you need on the player object instead.
I'm assuming that you're not spamming this pre-connection...
Ah never mind, I can't imagine what you'd do with getUserInfo that needs to be fast, but maybe there is something :P
diag_codePerformance [{getUserInfo "2"}] => [0.0142608,70123]
Its not THAT terrible but I still thought getting only a thing that you need could be useful
Not really a bottleneck, but seeing how unreliable onUserSelectedPlayer is, I remade it into a per frame handling that checks getUserInfo until player unit from that client is fully initialized (isPlayer, getPlayerUID, has group) before proceeding with other stuff.
I worked around that by requesting from the client instead. Client at least knows when it's ready.
Now curious whether getPlayerUID works when local player does.
Yeah I had client do a RE call to server once they're ready, before this event handler was a thing, but I really enjoy having server setting everything up without back and forth REs with the client
Couldn't they fix onUserSelectedPlayer instead :P
Checking for getPlayerUID player not being empty is my loading marker
if(_uid in ["", "_SP_AI_", "_SP_PLAYER_"]) exitWith {};
I've seen it being _SP_PLAYER_ in multiplayer few times over the years thus the check
not sure if it turns into proper UID after _SP_PLAYER_ though
The order of this stuff is never documented, which bugs me a lot. You have to do printf debugging and hope that your results are universal.
Seeing how unreliable onUserSelectedPlayer is, I wonder if there is even any order at all, or if its just random depending on latency, network load and packet loss
Is there much to document, or its just "pray and wait until everything is in order"
From my testing, remoteExecCalls arrive in order, but I'm just hoping that's guaranteed.
If publicVariable doesn't arrive in order then all our shit is fucked, but again this isn't documented behaviour :P
REs and PVars seem to be reliable
The only issue I've seen are JIP, they almost arrive but then dont
Along with setTerrainHeight data
Hmm, JIP going missing entirely?
Weirdest proven thing I've seen with remoteExec is them arriving on the server from the previous session.
Randomly it seems, I do isNil checks on all essential variables, check passes and then you end up with these variables being nil somehow
Seen this with PVars many times over the years
Not sure if Arma just lacks mission/session barriers in the networking or it's a bug.
My guess would be message reaching you when next mission already began so it can't be dropped because its still in loading phase
#arma3_feedback_tracker message
Here is me encountering it myself
setTerrainHeight failed and you get boats floating through land, missing public variables resulting in error spam even though there is isNil check for each during loading
I don't think we do anything critical with JIP, it's mostly action-adding.
I also remember encountering absolutely bizzare situation back in OA, I joined my own server and it was full singleplayer mode - saving instead of respawn in ESC menu, simulation paused in ESC menu, isMultiplayer returned false
And the most bizzare thing, BE logged my client broadcasting EVERY public variable as empty values (null objects, 0s) to everyone
I think I did screenshots so they're somewhere
Maybe its that UID being _SP_PLAYER_ I've seen on other players
but this broadcast of every pvar I haven't seen since
Then there's this just a few months ago
Just had an idea why this JIP thing could happen
I noticed that during round change sometimes mission restarts twice or even more times in a row
Maybe empty PVars, REs and setTerrainHeight data from first mission attempt arrive a bit later into second but succesful mission attempt overwriting valid data
That's why isNil check passes but then ghost data from previous attempt arrives and nils good values again
So it could be same issue of data from previous session messing things up
I might be able to pull logs from around time of that screenshot to check this theory
Really wish there was server-executed "Local" event handler
You said it twice already still have no idea what you mean
like "when an entity changes locality "between clients", it fires?
An event handler added to entity that fires on server when the entity changes locality
Right now Local fires only on old and new ownership clients
so you want mission eh local that is server side
pretty sure server knows
is there a ticket already?
I think per entity would make more sense as you can add it only to needed entities
No ticket, don't want to shift attention from more important stuff, I can manage with existing Local
would make no sense or more sense?
more sense, no idea how I managed to type a completely different word 
🍺 ?
@gaunt depot have you ever seen "Server: OwnerChanged of xxx arrived from non owner xxx" rpt?
2022/12/14, 18:06:07 Server: OwnerChanged of 2:135442 arrived from non owner 1139237078
Some random log I had at hand
2022/12/14, 18:06:07 Server: Object info 2:135735 not found during Changing Owner
2022/12/14, 18:06:07 Server: OwnerChanged of 2:135442 arrived from non owner 1139237078
2022/12/14, 18:06:08 Server: Update of object 2:135827 arrived from nonowner
2022/12/14, 18:06:08 Server: Update of object 2:135827 arrived from nonowner
2022/12/14, 18:06:08 Server: Update of object 2:135827 arrived from nonowner
```nearby
2022/12/14, 18:04:59 Starting mission:
2022/12/14, 18:04:59 Mission file: KingOfTheHill_RHS_by_Sa-Matra_for_CODE4 (__cur_mp)
2022/12/14, 18:04:59 Mission world: Altis
2022/12/14, 18:04:59 Mission directory: mpmissions\__cur_mp.Altis\
```Very soon after mission start
2022/12/14, 18:08:19 Unexpected network message, possible hacking attempt id=1139237078, name='Sithos', steamid='76561199110127435', msgType=237
```some line with that client id
Intredasting
Otherwise player is normal
Exact same pattern
2024/02/09, 12:21:28 Server: Object info 2:2905 not found during Changing Owner
2024/02/09, 12:21:28 Server: OwnerChanged of 2:2858 arrived from non owner 1483966756
2024/02/09, 12:21:29 Server: Update of object 2:2990 arrived from nonowner
2024/02/09, 12:21:29 Server: Update of object 2:2990 arrived from nonowner
2024/02/09, 12:21:29 Server: Update of object 2:2990 arrived from nonowner
...
2024/02/09, 12:22:01 Unexpected network message, possible hacking attempt id=1483966756, name='dimam', steamid='76561199062233889', msgType=238
2024/01/15, 9:28:28 Server: Object info 2:31512 not found during Changing Owner
2024/01/15, 9:28:28 Server: OwnerChanged of 2:31218 arrived from non owner 1977627041
2024/01/15, 9:28:29 Server: Update of object 2:31592 arrived from nonowner
2024/01/15, 9:28:29 Server: Update of object 2:31592 arrived from nonowner
2024/01/15, 9:28:29 Server: Update of object 2:31592 arrived from nonowner
2024/01/15, 9:28:41 Unexpected network message, possible hacking attempt id=1977627041, name='Andrey', steamid='76561199154184644', msgType=238
2024/01/19, 18:22:21 Server: Object info 2:7376 not found during Changing Owner
2024/01/19, 18:22:21 Server: OwnerChanged of 2:7021 arrived from non owner 609029020
2024/01/19, 18:22:21 Server: Update of object 2:7494 arrived from nonowner
2024/01/19, 18:22:21 Server: Update of object 2:7494 arrived from nonowner
2024/01/19, 18:22:21 Server: Update of object 2:7494 arrived from nonowner
...
2024/01/19, 18:22:44 Unexpected network message, possible hacking attempt id=609029020, name='[AXIS]İlhami', steamid='76561198137267799', msgType=238
...
2024/01/19, 20:11:26 BEServer: cannot find channel #609029020, users.card=76
2024/01/19, 20:11:26 "Player 76561198137267799 (609029020) left"
Server: Update of object 2:X arrived from nonowner is very common, lots of it everywhere for different net ids through every game
All cases are 1-2 minutes after round start
pending messages from old session?
Yeah, could be
Need to check if there is a queue that doesnt get cleared on mission start
It is well 2 minutes past mission start though, there is scripted AO voting, then team selection, etc.
So the message had to be stuck for a looong while
2024/01/19, 18:22:21 "PlayerConnected: id=6.09029e+008 uid=76561198137267799 name=[AXIS]İlhami owner=141"
Looks like this happened right after they finished loading in (they didn't leave the server since last round)
100% null for me @gaunt depot
For respawn the unit is created on the client, the message sent to the server but the object is not yet known, only net id. So it is understandable it might first be null, engine doesn't care about the object at this point. So I will make it try until the object is known for max of 10 times? the number of attemps will be passed to EH
Yeah its really weird, sometimes you get no nulls at all, sometimes rare nulls, sometimes all nulls
First time I was doing this repro I was doing my usual stuff for hours before that and I barely had any nulls
But if you fresh start the game its mostly nulls
Managed to get non-null after launching random scenarios before going into repro
them sneaky basterds
How would you deal with un-ignoring the target?
should reveal script command, turn off the ignore?
reveal would be meh though, because like TFAR AI hearing uses that. So that means units would auto-unignore and hear targets, that were set to be ignored.
Maybe (like reveal command), also let it take array with second value being bool?
It does optimize lazy evals too yes 😄
There is that diag command diag_testSimpleVM CODE
that will print you what it does to your code
diag_testScriptSimpleVM {leader _x == _x && {alive _x && {not captive _x}}}
["Success",360,"
0000:const any
0010:unary leader (variants 3)
0060:const any
0070:binary == (variants 2)
00C8:jmpIfFalse 0160
00D8:const any
00E8:unary alive (variants 1)
0108:jmpIfFalse 0160
0118:const any
0128:unary captive (variants 1)
0148:unary not (variants 1)
0160:ret(implicit)
"]
Isnt it possible to either extent setCaptive to support A-to-B relation or otherwise with a new command set the state _source ignoreTarget [_target,true/false]; ?
I already have
_grp ignoreTarget _target
So could add bool there to turn it off yeah
alright. i wouldnt have it interact with reveal - too complex potentially and may impact existing systems in an undesired way
if a system should take an ignored target into account, it should be updated to make use of it
i guess a getter would be useful alongside (bool = _source ignoresTarget _target;)
lol I didn't know you could heal enemy units 😄
Never had one not run away
ugh adding more commands 😢
yeah you can 😄 tested & approved (…& shot)
it's helpful if you want to heal a prisoner, otherwise not really 😬
what about adding to that new AIO command KK introduced - could it be added to that?
sure but that feels worse
getEntityInfo i mean
Ah no can't because its a A-B relationship
true
The ignore is stored in the target list, so if somehow an AI forgets everything, it will also forget its ignores..
I made sure its not deleted normally (like it does when a target is irrelevant for too long).
Also I found where a target is switched to "known" state. Maybe that can be used for target EH 🤔
But its in a pretty bad spot I think
https://community.bistudio.com/wiki/targetKnowledge
Well this would make sense? To add it into here?
All the other variables it pulls are from the same place where the ignore flag is at.
Ofc a bit perf inefficient if something needs to check many units for ignore 🤔
Well is it some percentage points less efficient or in an significant way?
Possible to test the difference for say 50 groups / 250 units?
IIRC targetKnowledge was kinda slow
ok no I remember wrong. it's not slow 😅
(it's still a bit slow because it has to return an array, but it's insignificant)
0.010ms in debug build.
I also optimized it a bit, it was filling the array twice
Someone might want to Throw the latest Ticket we got spam :spam:
What if there no unit even after max attempts? It still fires but with null, right?
awesome
only tweak id request is for <array> ignoreTarget <target>
(groups EAST) ignoreTarget player
{_x ignoreTarget player} forEach groups east
``` wont this get optimized by SimpleVM?
yes
in my experiment it fires on 7th attempt on respawn , or on the 1st when player joins server, would be interesting to see your stats
I still wonder why current result depend on how long game was running. When I was writing that repro It took me like 100 tries to get null on first fire\frame. Then after restarting the game it was nulls almost all the time.
Wondering if something funky going on under the hood
Old turret bug was associated with message order messing up and you ended up with turrets creating before the vehicle and failing making turrets non-networked
the onuserselected player pulls object from identity information, there is an expected delay between when identity of the player is known but the body has not yet been assigned
allusers getuserinfo work with identity
how do you know when new features come to dev/stable? Like for example when does https://feedback.bistudio.com/T120107 come?
The revision number and biki
It's already in dev
ok thx 👍
are there commands for setting/getting how long unit has left to breathe underwater? 
nvm yes there are, setOxygenRemaining -- literally the next thing i tried in my google-fu 
_isHeadless = _id getUserInfo 7; // 0.002ms```
https://feedback.bistudio.com/p/johnbabu00123/
Another business man 
He just wants to entertain some base defenders
so the select sqf operation adds 3500% overhead vs the c++ handling? 🤯
The less scripting commands you call the better
Though I wont what getUiserInfo _id profiled to in that example
The select's probably ~0.0005ms
I guess getUserInfo just has to go around the houses a bit to collect all the data.
oh yeah true. getUserInfo gathers quite a lot of info. that new syntax probably just does "one operation" needed to return the result for the given option chosen
The bottleneck will be allocating all these script values that go into the array.
There are more efficient ways to do it, but nothing uses the efficient ways as they are hard and require more code (and afaik there is no example of it anywhere).
Maybe I can make that easier some day so we can use it more often. (Actually probably I can't while we're limited to C++14)
targetKnowledge command has the same issue, even worse there because it first fills the array with default values (6 allocations) then when it succeeds, it deletes these values, and allocates 6 new ones with the correct contents 🙄
Is there a way to force steam to install vc redist 2017 or newer after a game update?
made a feature request for destroyable doors, don't know if it's possible: https://feedback.bistudio.com/T179109
a few years too late 😛 or decade
asked before?
probably more than once
well maybe they take it seriously this time ;D JK
is it worth a ticket that the chat layout setting is not respected while player is in camera/cutscene view? I move it way to center and actual in-game chat is adequately moved, but the cutscene one just keeps displaying in lower left no matter what, has a higher width too
It can install the 2013 redist without problem. Don't see a reason why 2017 wouldn't work
So why not update to C++17 or newer? 
There was an api break in windows.
Change was in 2015+
What did they lose support for then?
possible to check the implementation of https://community.bistudio.com/wiki/CfgAmmo_Config_Reference#aiAmmoUsageFlags please
we thought to remember reyhard stating it was never fully implemented or "not doing anything at all even" 😬
Please note that the functionality is heavily WIP and some flags may present no change in the AI behavior. Connected to a behavior or decision making are - concealment, countermeasures and offensive
by oukej at: https://forums.bohemia.net/forums/topic/150500-development-branch-captains-ai-log/?page=3&tab=comments#comment-2869173
see a future SITREP for more details
Can only find this a few days later:
Senior Programmer Krzysztof Bielawski has assumed the role of Drill Sergeant for our Artificial Intelligence soldiers. He's added a new parameter for ammo configuration: AIAmmoUsageFlags. This flag does not force AI behavior, but it let's it know how the ammunition can be used. Our initial motivation for this was to train the AI to throw smoke grenades appropriately to mask their movements while suppressed. This has since led to a broader re-factoring with the help of other developers.
The Encoding department has already set the parameter for most vanilla ammunition types. Modders can start doing so as well. A little more information and values were shared on the forums by Designer Ondřej Kužel. Not all usage flags are currently checked in the engine (only Concealment, Countermeasures and the various Offensive flags are). This is still a work-in-progress. And there's more, as Krzysztof reports: "Along with adding a new parameter, we took the opportunity to clean up some older ones. allowAgainstInfantry will still be read, but internally the engine converts it to the corresponding new flag. The airLock param will not be used for AI decisions anymore, but it still is used to define whether the player has the ability to lock the ammo onto a given type of target (ground or air)."
airLock is still used by AI AFAIK. not sure if allowAgainstInfantry still works tho..
to my knowledge so far cost, hit, reload time, xxxRange are the only ones to influence with airLock to restrict altogether (irLock supposedly no longer does anything - same seemingly with allowAgainstInfantry and AIAmmoUsageFlags)
(aside from special stuff like NV and laser ammo)
to have functioning influence on AI weapon use would help a great deal - thanks!
pinging the almighty @little kindle (who can DM me for wiki edits)
fwiw ive been hit by AT ordnance as infantry with base game ai
aaand perhaps mods
back in ArmA AI was changed to use RPGs against infantry… it was reverted a couple of patches later because balance and "destroy the tanks" missions
i checked it in vanilla iirc and was able to repro
i just cant remember which launcher as i think it was multishit
Wasn't IRLock causing issues between IFA and Spearhead?
irTarget
irLock does work - its (half) the reason IFA3 tanks cant shoot spearhead ones
as the ifa3 tank shells (incorrectly) have irLock set meaning the ai cannot 'lock' the tanks
airLock I'm pretty sure is still used yeah
it generally seems to tell AI whether to use a weapon vs. aircraft
it doesn't seem to stop them using it against other threats though
a part of me thinks the aiammousageFlags stuff is implemented partially and only on infantry
as AI throw smoke grenades when suppressed and I'd like to think its using those flags to determine that
The SPG-9 at least can't -- it doesn't even switch to its HE rounds
sad
it is yeah
oh well 😅
Kerc found reyhard's statement again:
context starting at: #dev_rc_branch message
Well I've tested C++20 and I didn't find any issues
There are compilation issues at first but once you fix them everything seems to work fine
C++20 build works because it disables advanced helicopter simulation. Which doesn't work starting with Visual Studio 2015
Ah right I forgot 
Actually C++17 worked, not 20.
But now 20 works too. We just can't use it 😄
Throw rotorlib away
90% of the content aka mods can't use it properly anyway due to no docs/simulation software xD
hey, I like to have rotorlib in some missions to prevent pilot-wannabes taking the role :p
Well use 17 then 
At least you can make some stuff constexpr
Why tho, 20 works now.
And 17 we still can't use because rotorlib, it ends at 14
I thought by "works now" you mean rotorlib works too?
Well no, without rotorlib
If rotorlib is a closed binary why it's not possible to have some sort of glue that works no matter of cpp version?
Possible yeah. I trialed one way. So far just a huge wall of "ugh" but no blocker.
Also another way that's "ugh".
It takes a lot of time to do that.
Depends how desperate I get.
Have you tried with clang?
It actually might give you less headaches.
Downside is building it on windows. I think vs 17, 19, 22 have an option for clang building tools
I don't see how clang would help me?
Ah. Yeah nevermind. Rotorlib would have needed to be built with clang.
You could try to rip rotorlib and replace it with https://github.com/JSBSim-Team/jsbsim
But JSB only supports one simulation vehicle at a time.
And that's a lot of work.
would a lod factor graphics option be out of the question at this stage of development?
(would be nice if its settable by script too so you can increase the tighter the zoom 😅)
If something already changeable exists in engine, making it configurable would be doable
adding it if it doesn't exist no
i assume you dont know off the top of your head if it exists in engine?
are you using dev branch?
Nope - using currently the normal stable one.
I guess the ticket can be closed - I am extremely confused (added more detail in a comment under the ticket). Arma genuinely got me more confused than ever right now 
Sorry for any possbile time wasting!
It won't be fixed for 2.16, maybe for 2.18
Any updates for Jets DLC function fixes? Eject effects for example? 
I do want to see function updates. I mean that also requires a lot of QAs but, yeah like eject function is very broken and poorly written
How it broken? I was found that sound and visual FX won't work on dedi server, rest works well 
If it receives a bit amount of damage that won't trigger the ejection (damage < 0.1) it won't trigger the event but the trigger will be removed thus they will never execute the ejection, they will stick to the plane forever untill they die
Made no ticket about it is my fault tho
Also IIRC it doesn't care if the vehicle is locked despite every vehicles don't let you to eject if they are locked
@solid marten Is there a timer for HitHull self-destruction in the engine? Maybe it can be added into getEntityInfo too?
This time seems to be random, I wonder if we can get it
Or maybe even change it to say postpone vehicle's death or cancel or or make it instant
its a config variable
but I guess a 'getter' for the actual value its assigned would be nice (depending on when its rolled)
Oh nice
Would be cool to have a getter and setter for it
ENTITY setHullExplosionDelay NUMBER, NUMBER = getHullExplosionDelay ENTITY
For example you'll be able to bump up the timer if there is player or units nearby, or have it end early if they just left so avoid killing them
So the plan is to cram everything into that command?! 
It's already a huge mess imo
Scripted and in non-simulation spirit? Yes, but so it random timer and nuclear explosion from a hatchback that kills a tank.
I'd have it all separate but apparently its easier to have one command
What I'd do is split ammo stuff into getShotInfo at least
It's starting to have too many irrelevant info
Like what's shot stuff doing in there? Shots are not even "entities"
Well I don't think anyone would use main syntax anymore, so its kind of a substitute for separate commands
Sure but at least the returned parameters should be consistent
E.g. a separate command like getShotInfo made more sense
Yeah, shot info stuff could be moved to maintain better grouping
Speaking of hull explosions, really wish there was an easy way to tell if vehicle will explode or just burn down
There are some strange checks going on for having no fuel, no explosive magazines in inventory and such
Still not sure about exact conditions
Being able to ask the engine would be useful
I have a real use to know if vehicle's death produced an explosion right in the Killed EH (_useEffects = true doesn't mean there was an explosion)
BOOL = willVehicleExplode ENTITY or something like that
its based on ammo and fuel yeah and the amoutn of damage it does depends on how much ammo/how powerful the ammo is
for example the nashorn in spearhead doesnt explode as violently as some of the other tanks as it carries a lot less ammo
Huh, is explosion damage really depends on something? I thought it was flat\random.
NUMBER = getVehicleExplosionPower ENTITY then?
I see there is fuelExplosionPower in config
Well it seems that fuelExplosionPower = 0 guarantees no explosion
Wonder what negative value does
Guess the same as secondaryExplosion logic?
only Tank and Zamak Water Cistern have it set to -1
I cant remember what negative does
positive is a multiplier I know that
same with secondary explosion, its why ammo and fuel trucks have large values
Added 1000 grenades into its inventory, no explosion but plenty of seconradies
i think its based on the vehicles magazines (for their weapons ie tank cannoin etc) not the cargo
hence why ammo trucks need their values inflated
Added Tigris weapons and magazines to it, still no explosion
C_IDAP_Truck_02_water_F
fuelExplosionPower = -1
oh yeah that disables it Im pretty sure
trying to find the documentation for it
cant find it but im pretty sure that disables the fuel/ammo detection
// value<0: calculate from fuel/ammo cargo + tanks and multiply with abs(value)
// value>0: use value directly as hit in FuelExplosion
secondaryExplosion=-1;```
binarize used to have commented configs
unfortunately at some point in A3 (after APEX), they started to purge them
very useful source of info was "lost"
@gray wharf please fix 🙏
huh?
you are the docu master, arent you?
not the source code/data master yeah
yes sure - but your voice matters, right? 🛐
ie the purge was done by mistake or the decision can be reversed
C:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\Binarize\bin
used to have source configs split into hpp
now only rapified cpp and bin sits in there with all comments purged
commented configs is not the way to go, the data should be centralised on the wiki and losing that data is not welcome
@jaunty narwhal please advise on such purge / data / knowledge (bikb ^^) and what would be doable to get it back?
Doxygen for Arma 3 
no
please no
Yes, please
getEntityInfo also has the same issue. It fills the result array twice.
It allocates all the values that go into it twice.
Yeah we still have these files.
Maybe it would make sense to put them on github separately instead of only in tools.
The config.cpp inside the tools package. Seems to be a AIO config generated from all game data.
Whereas the old files, were only our manually created base "root" configs. that go in dta/bin.pbo
So the new config.cpp for binarize contains much more stuff than the old things did
We can re-add the hpp's, but for binarize they serve no purpose to be there. And they also wouldn't match up with the .cpp as they come from different sources
If we put them up somewhere tools or github, we likely wouldn't keep them updated with latest changes.
Already for years new config entries weren't added/commented into these. So they're already out of date.
GitHub might make more sense, we could accept PR's to add documentation or missing entries?
checking out the rating.log file generated by the game, why does it not include actual mission name but this __cur_sp thing? Bug?
aaah, it must be targeting briefingName and not that other, later property (~2.10?)
Is it a good idea to post that stuff accessible to everyone?
Arma 3 tools are already accessible to everyone I think
It's just that we are not even allowed to post full code in the feedback tracker. That's why I am wondering.
It also checks for the new one.
Post source code then asap
probably random by design
Yeah, got pointed at config value
yep
Separating shots info into own command is a good idea though, more coherent grouping
Or instead of using number for all the things, use strings. And you get grouping by the name?
Also makes it easier to see what it does when reading code
so new command + return array so you can select from it for the expense of performance vs fast access to the value you need
case number > string icmp
you don't need to have stringcompare to parse a string
Meant SHOT getShotInfo NUMBER for shot-specific info. Honestly maybe not even bother with array return
It would probably be 2 or 3 steps instead of one step. But still very fast
you need to select the operator to return
Speaking of shots, is there a command to return explosive charge timer at all? Maybe it can be added into getShotInfo too.
you want new command of 3 values in array AND alt syntax?
because somehow current system is not neat?
No, move indexes 11-14 from getEntityInfo into separate command getShotInfo (making them indexes 0-3 there)
It is fine, but separating entity and shot infos in their own commands feels even neater
if you can find more return values for shots justifying new command then why not
switch(string[0])
{
case "E": // EntityX
switch (string[6])
{
case "M": // EntityMan
return entity.IsMan();
case "A": // EntityAnimal
return entity.IsAnimal()
case "D": // EntityDeadSet
return entity.DeadSet();
}
case: "S": // ShotX
switch (string[4])
...
}
Sure that means EntityMogobble also returns IsMan, but its fast and whats not documented doesn't exist, so EntityMan is the only option
so we are limited to 26 letters
What I posted already has 26*2
So no.
The first letter is limited to 26 letters yes. But.. yes text.
because small and big letters?
i dont see a problem with index when you know what index it is in all array
CD Key validation vibes
"when you know" yeah thats the annoying thing.
That means everytime you see someone use getEntityInfo in code, you need to open up wiki.
Or everyone will create macros for it because they cannot keep track by themselves
logically also make sence if you select N the same N you can pass to alt syntax
And numbers also don't let us group things by categories, like sa-matra wants
you make new commands to group things, the values that do not really justify new commands but are nice to have, all can go there
Numbers also means if now we find a new Entity thing, we have Entity things, followed by Shot things, followed by one entity thing, followed again by a shot thing
If it was up to me, I'd create a separate command for each value
As I said, if there are more values fro shots to return they can be separated into getShotInfo
If we find more values in a couple months. Then it makes sense to add getShotInfo.
But we already have them in getEntityInfo, and its already been released, so we can never remove them again.
So do we then have duplicates?
Why you need more, the time you're writing here you would add it already xD
2.18 is not gonna happen tomorrow there is time
I mean what if we find new things after 2.18
This opens maintenance hell
then we better think of them now
Not to mention that someday we'll end up with hundred element array
you are too optimistic
How about we instead do
entity getEntityInfo "NameOfProperty"
entity getEntityInfo ["NameOfProperty", "NameOfProperty2", "NameOfProperty3"]
most of the time you want just one.
But just in case you want multiple, we also offer that
Now we can group things, code is readable, no huge arrays to worry about (the user gets just what they want)
dunno, then you have to "select" from multiple because you will always want one value in the end
entity getEntityInfo "NameOfProperty" returns one value
yeah i got that, talking about multiple
Doubt you'll ever need more than 2 values from there in a real life scenario, most use cases will probably be single value (mine at least)
(entity getEntityInfo ["NameOfProperty", "NameOfProperty2", "NameOfProperty3"]) params ["_1", "_2", "_3"]
vs
getEntityInfo entity params ["","","","","","","_1","","","","","","_2","","","","","","_3"]
Shot info idea:
- Is it real or fake shot (shotBullet created for show on other clients)
@untold sky please use your autoban tool? 😅
and from "NameOfTheProperty" you only use one letter to decide which one?
Can be useful as you can't figure this out after Fired has happened (local will be true on all clients)
That is the autoban tool doing its job
it's not closing tasks here
Ugh I fear its brokey
Not one letter. See my switch above.
If it starts with E we know it can only mean "Entity", so no need to waste performance scanning the "ntity" part
So we skip ahead to the first letter after "Entity"
Category, subcategory, ...
So if someone write "E-cigarette" it will got to "Entity"?
Yes.
Entity and then next letter r
maybe there were just too many tasks for this one user, I could purge easily yesterday today
Hash it so people can come up with their own names that would produce same hash, GTA:SA passwords style 😎
EntityMan
EbogluMebble
would produce the same result.
But doesn't matter? Only documented ones on wiki are valid, everything else is implementation detail that noone needs to know about
player getEntityInfo "ThisIsMySecretPropertyhgjl34hgkj3h4lkj"
``` => `isMan`
As I said I see no problem with index, but you can add another alt syntax with string arg if you feel so strongly it will improve things
Or we can take the simple route indeed of just hash it and switch on the hash
I don't think adding another one or two alt syntaxes improves much. Rather makes it worse and more messy
(Joke reference explained, you can input every password in GTA:SA with only WASD keys in a right combination)
you need case sensitive input for hash?
no
how do you go around it for strings?
tolower each character before hashing it
Every script variable has been doing that since ever
thats +1 operation index doesnt have
But atleast that makes the code readable.
There's a reason enums exist and magic numbers are bad
to lower the whole word could be costly
nanoseconds costly yes.
My bool optimization already gave us back 10x that cost
Another shot property idea:
- Is bullet a tracer (I guess there is no way to tell otherwise?)
yeah I think there is a property
shame cannot really reuse getShotParents
though parents could have gone to getshotinfo
3 new shot info ideas so far:
- Mine timer (setter could be useful as well, to stop the timer, for example)
- Is bullet real of fake
- Is bullet a tracer
If bullet is real one that will do the damage (created on shooter machine) or a one just for show that other clients create (they're local and non-networked)
Just did, no way to interact with timer it seems
you can always define your indexes like it has been done even in our scripts
But then everyone who wants to use that command, should add their own #define's for everything they want to use?
I just don't get why we would do that. When it might just aswell be a string enum and have readable names by default, potentially with logical grouping integrated.
But this is non existing problem in my opinion, and letting mission maker make own defines for readability is a valid option if they want their mission modded by other or people to learn from their code.
we do have other commands that take string names, perhaps you can improve those
We could if we find out that it matters
Pretty sure there are some, though not sure about how much matters
But these we can atleast improve.
Bad stuff we cannot remove ever again. dammaged forever
basically checking if shooter is local then?
Yes, but what if there is no instigator or shooter anymore (Say they're deleted during bullet flight)
shot contains reference so I would expect the reference is alive for the life of the shot, can you check if shooter becomes null if you delete one while shot is still alive?
How can't it be not null if its deleted?
because nothing is deleted immediately
Bullet flight takes a lot of time and frames, can deleted entity live few more frames after deleteVehicle?
it can be removed from the world immediately but the object might still exist
Yeah you can also solve this by adding Fired to shooter and then doing setVariable by instigator locality to the shot itself, but I think pulling the info right from the engine is more straight-forward
IF there is such info, which I am not sure there is
HitPart doesn't trigger for fake shots (but I think it still triggers HandleDamage for bleeding and produces world effects like bullet holes)
...
21:45:02 ["6522967",1781625: tracer_red.p3d,[B Alpha 1-2:2,B Alpha 1-2:2]]
21:45:02 ["6522968",1781625: tracer_red.p3d,[1bbbeb4d380# 1781596: b_soldier_01.p3d,1bbbeb4d380# 1781596: b_soldier_01.p3d]]
21:45:02 ["6522969",1781625: tracer_red.p3d,[<NULL-object>,<NULL-object>]]
...
```Shooter deleted mid bullet flight
[frame, shot, getShotParents]
https://community.bistudio.com/wiki/setMissileTarget
The target has to be inside the missile's configured targeting cone for the command to work.
````BOOL = SHOT isInTargetingCone OBJECT/POSITION` ?
not a fit for getShotInfo though, but a thought for a potential command
This probably can be calculated off config values though
missile is shot too but with additional properties
Shots are not even "entities"
class Shot: public Entity
bool _submunitionTriggered I suppose this would be useful @gaunt depot
The usefulness depends on deleteParentWhenTriggered param from config I expect
What is this? A shot can release submunition but keep flying?
i guess
We don't call them entities in SQF
Engine implementation is irrelevant to SQFers
Entity = what you get using nearEntites/entites
imo a new command is better
Cramming shot info together with something like "isMan" just makes no sense
Using a string doesn't solve that issue
As for the issue of indexes, you can just #define macros for them
@untold sky No way to sneak _context for HandleDamage into 2.16? These fake bleeding and HitHead damages mess with my code a lot.
Here we go again, you just like to pick up an argument about semantics, please don't
Ok. But do you agree that isMan, etc. and shotInfo are mutually exclusive?
And thus don't need to be together?
both Entites to the engine, so no
Doable
You mean you can have a man that gets triggered with triggerAmmo? 
All the time
Sure 😂
If its possible, I'll really appreciate it. I'm working on thorough damage tracking and excluding fake damage will stop false damage from being counted and throwing damage attribution off.
GetLockConeCenter good enough?
What is it though? Vector?
Isn't it the same as vectorDir?
position?
On the ground?
Sorry, no idea how this works, I just thought having a command that will tell if setMissileTarget will work could be useful
dunno seems something that could be calculated from config value and missile position/direction
probably not needed
there is a property for the locked target of the missile
but in general missile has tonnes of properties so not sure
yeah thats the one
Speaking of missiles, is there still an opportunity to get the PCML to not suck if people are willing to submit feedback?
not "stuck"?
you want the game to communicate with the Feedback Tracker and adapt the PCML's accuracy depending on the amount of tickets?
suck*
for some reason I read it as not get stuck 😅
It does tend to hit the ground so that works too 😄
IIRC the main issues are the top attack generally being useless (I think the submunitions tend to miss the target) and the oscillating flight trajectory often hitting the ground mid flight
is there any chance we could get handanim support on binoculars
what's that?
the hand moving thing per weapon
weapon ik?
no handanims arent ik (somehow) its an rtm
i mean get handanims like weapons have on binos
as atm you only have that one handanim for binos
well it is possible but it was a lot of work
(I'm using the weapon bone for this screenshot which is why the hands are grabbing the weapon)
also risky should be backward compatible
but I'll forward them to Dedmen anyway
the probem is, man skeleton doesn't seem to have a dedicated bone for binoculars. so I guess it just uses RightHand?
It's LeftHand but true for pistol as well, and it can have one
ya
oh thats awesome no more hoverhands binoculars
also means you could raise the binos when looking through them 😅
uhhhhh are you supposed to be able to mix sides in a group
thought the unit's side is automatically changed to the group leader's and it stays like that
you do that to convert groups from one side to another in a mission after all

dont know what the reproduction steps are i just know it involves selectplayer
How? 
You can't raise weapons when you aim either
not within scope for base game but just swap to a different binocular model which is raised and handanim is adjusted accordingly
doable but probably a pain in the backside
You can just make a gesture I guess 
Instead of swapping weapons
But you can already do that without hand anims
yeah idk much about anims so there is probably a better way to do it
youd be able to do the same thing with a gesture for a raised weapon anim wouldnt you? 🤔
I guess so yeah
maybe i need to learn anims then lmao
I was going through a problem yesterday with the Ai feature TARGET being a bit funny. If I tried to disable the targeting on the ai in its init through the editor, the ai will still shoot targets
Would it be possible to verify this others?
#arma3_scripting message this was the conversation with images
https://forums.bohemia.net/forums/topic/281946-run-arma-3-with-dlc-disabled-for-testing-purposes/
Since DLCs are the things in this game, and mission makers may want to check how it is without, I think we want to have this once again
Im not sure if this is the correct forum, but Id like run the game with DLCs disabled, to see how players without DLC experience my mission. Is it even possible? Ive tried removing the checkbox from the DLC in steam library, but it didnt seem to change anything.
Had to buy another Arma 3 on another account for that 😬
Having it as option sounds like a good idea
Without satisfying Lou's wallet it is good
To selectively disable DLCs
I do believe/recall it was possible via Steam DLC options but hmm
Of course for Debug purpose but a Launch Parameter for it?
your other cheater account?
No that's yet another one Kappa
I bought another copy long time ago for running HC
Speaking of DLCs, let Tanoa and Livonia be useable without DLCs! Having usual DLC nagging in place when you play there, of course. I bet if BI has some metrics on time played on islands, both these are probably <0.1% of time played. Feels like wasted content potential.
I know its a business decision, but maybe others share same thought about it as I do.
Not sure if it is going to happen in A3's lifetime, most unlikely but one way is to make Apex and Contact cheaper
Cheaper wont help it, having a server on Tanoa or Livonia mean you're missing out on half of casual players, switching from Altis/Malden to Tanoa/Livonia means half of the players will be just yeeted of the server, both are unacceptable if you're running public casual servers like we do, not with todays player counts.
And speaking of sales, having people play on these islands would be a good incentive to actually buy the DLC
(Again, yeah I know nobody here makes these decisions)
Wish we were tracking DLC ownership on our servers, I'm certain people end up buying DLC as they play, to get rid of the nagging effects, I've seen people talk about it many times. Same would've happened with Tanoa and Livonia
Livonia is criminally underplayed for such an amazing map... I guess it is the same for the Gabreta map. Some MP focused games eventually just add the DLC content to the base game when the purchases of the dlcs are below a certain threshold. The other model is the Squad model where they incorporate everything to the base game and the new maps and factions are released so that the price of the base game can be kept high and to attract new players. That is an option for A4 perhaps
Keeping too many DLCs as DLCs for too long just confuses new players and making the base game less apealling due to it looking "barebones" which is an issue with A3 in its current DLC form
Apex should be the base game by now. Which should cost more and when on sale cost 14 USD instead of 7....
All the other DLCs should be put into a single extra DLC so that new players only need to buy one DLC and get all the content A3 has to offer (other than the CDLCs)
Can't you just run a game instance off same account for HC? (Haven't tried it myself)
This is a magnitude larger decision, even harder seeing this happen anymore. Letting people use Tanoa and Livonia with DLC nagging is much milder action.
Speaking of CDLCs, Western Sahara fits base game so well that it should've been turned into official DLC.
Indeed, whatever option fixes the underusage of such amazing maps is fine for most players I guess
Every A3 player and their mothers think the same! I just which that because I would love to see Extraction ported to the other CDLCs
By the way, are there any tickets for ```sqf
nearestDoor
nearestWindow
extremely unlikely as theres nothing in the game that says 'this is a window' and 'this is a door' specifically
the only thing close to that is if people keep to naming conventions - and theres no such thing for windows other than the hitpoints
I wonder how bullets know they hit a windows
Ok, so perhaps finding a windows is as easy as finding the closest glass material with Hitpoints
yes but not 'nearestWindow" worthy as it could be a glass bottle, a glass cabinet, etc
Those have hitpoints? I think I've never seen a glass prop breaking
they can if theyre made to break
_nearestBreakableGlassyObjectThatCouldBeAWindow (just kidding, thank you for your imput) back to using my script which only breaks the nearest windows if God whishes to
Yeah that's not what TARGET does IIRC
If you're correct we might want to expand/correct BIKI
I think it just controls the group functionality where the leader sends individual squad members out to investigate threats.
but of course none of this shit is visible to script so you have to sit there watching the useless idiots in zeus for hours and then guess what's going on.
Well I'd ask that, what exacly is your goal? Why you want to use it?
literally enable an ais ability to detect enemies and fire
like indiviualized careless behaviour
Not sure, this was long time ago and it was a sure way of having extra power for scripts
No need to run Steam for a server/HC, just download them via steamcmd with the account you already own Arma 
@desert trench about deleting of vehicles by remainscollector vs bodies. Vehicles over the limit are deleted immediately and corpses are every second is because corpses deleted via HdeBody and I suppose it does it one body at a time
I mean the engine HideBody method not the remains collector, remains collector marks those over the limit all at once. I can switch to immediate deletion but dont think this is necessary
@solid marten one body per second would be OK i guess. however it seems rather once every ~30s (seems 20-40 range) within a group - which is way to slow
haven't tested mp but on sp it now works as it should
"now" as it whats in 2.14?
now as in after i made some changes as per ticket
good question i don't think I modified any network messaging so should be good for prof but will ask dedmen
on second thought, gonna make it delete just like vehicle, the reason being is that hide body checks ragdoll state and it could be buggy, but we want guaranteed deletion
this means instant removal of the body even when close to players? (depends on the distance setting ofc)
imo instant deletion even when player close is fine. the sinking into the ground is something especially people from OFP days are used to (from hiding bodies as player as stealth element). however its been also a frustrating element with body removal if you wanted to "loot" while it is "slowly" disappearing in sight - aka probably best to ditch the hide body altogether for garbage collection
no, distance check if > 0
Perhaps a long shot, but Intel has this APO software for 12-14th gen Core CPUs. I don't know how they get around to deciding which games should be prioritised for optimisation, but I suspect Arma 3 might benefit from it. Is there scope for BI to work with Intel to enable A3 support with APO? And if so, does this warrant a FT ticket?
https://www.intel.com/content/www/us/en/support/articles/000095419/processors.html
it says 14th gen only (also only K/KF/HX variants)
also
it works by changing the way specific games run and are scheduled by Windows.
since A3's main problem is cache, I doubt it'll make a huge difference
maybe it could make a difference in reforger tho because it's way more multithreaded than A3
That is out of date, if you read the FAQs below it says they've committed to bring it to 12th and 13th (not sure but I heard that version is already out, but I may have misunderstood)
From what I understand, APO makes it so that games are only scheduled on P cores and not E cores, which would further affect which caches are hit, if I'm not mistaken. But more than that it would ensure Arma is always running on the highest frequency cores, and Arma is definitely sensitive to clock speed as well.
Given that I've heard reports of the 13700K dropping to 35 fps in some parts of Livonia... May be worth it
Livonia
Well, Livonia has some issues, or rather its assets
Yeah that is true but... In contrast my 7800X3D never dips below 60 fps, typically 70+... So I suspect there's more going on with the 13700K
Posted the repro: https://feedback.bistudio.com/T124694
@desert trench this seems to be the issue we are having with our revive system putting the player on top of the tank.
@calm smelt for awareness
new record
https://feedback.bistudio.com/T179283
This seems out of place xD
Splash, out!
(+ 2 others)
My 7950X3D would always run at 240 FPS no vsync
was pretty incredible especially for Arma Standards and this is in combat with 70 mods
Somewhat having trouble believing that — with what settings and what map?
Although #hardware_vs_arma is more appropriate for this
So the animation is part of the update position message but once you are a gunner your position doesnt update and you are stuck in either this weird position or soometimes in proper position. Try setpos of the gunner just to force position update and the gunnwer will resync into proper animation. Interesting
why is this cracking me up
Why is it only an issue with vehicles that have one-frame (I assume) getInAction? Two updates at the same time and one gets omitted?
I can try making a more reliable repro, I originally was freezing other client during entry to mortar, maybe it will be more reliable
its not yet in the latest prof branch update from Tuesday, right?
https://forums.bohemia.net/forums/topic/160288-arma-3-stable-server-214-profiling-performance-binary-feedback/?page=104
Cleared, thx
the collector tweak requires all clients to run the same build so no profiling this time. try next dev
Warlords server EU01
Vehicles being deleted while player /ai inside ( OPFOR , BLUFOR )
https://feedback.bistudio.com/T179303
v15 perf it seems
is it possible Eden and/or Zeus has different waypoint completion radius handling vs scripted and normal waypoints?
we are seeing AI to halt with tank way further away than the precision value from config
Actually, why screenshot command can generate a white-balanced shot? It is annoying and never figured out how I can avoid it
Oh is that a wrongly made postprocess?
Out of curiosity. Is it possible to have an alt syntax for spawn that doesn't require 2 arguments?
I guess a binary command cannot have unary syntax as well, right?
call manages 🤔
Right.
why not
I remember there was a discussion once. Maybe it was about nular commands? 🤔
Out of curiosity. Is it possible to have an alt syntax for spawn that doesn't require 2 arguments?
Is this a yes then 😬 ?
yes
Let me know if a ticket is needed for that 🙂
nular
Specific tank or not?
I had issues with the Marshall sometimes stopping outside the completion radius. I think it's because the vehicle tries to brake to hit the waypoint but the calc for the braking distance is not matching the physics.
I think the completion radius check is entirely separate. The AI isn't aiming for the radius.
wtf id this/
That's part of Discord, not Arma
https://feedback.bistudio.com/p/evistaavis/
Ban hammer for that person, please
he said please ...
indeed, sorted
@gaunt depot Is this still happening? https://feedback.bistudio.com/T79026
10 years ago 
I barely remember what it was, tried the repro again and I can't reproduce it
Close it as resolved, the engine changed so much over they years its obsolete now
8:53:36 Tried to create group while group limit is reached on side Game Logic
8:53:36 ➥ Context: [] L36 ()
[] L24 ()
[] L27 ()
[] L28 ()
what does it mean if it cant get the script context?
vs
8:37:10 Tried to create group while group limit is reached on side Game Logic
8:37:10 ➥ Context: [] L31 (A3\functions_f\Modules\fn_initModules.sqf)
[] L19 (A3\functions_f\Modules\fn_initModules.sqf)
[] L22 (A3\functions_f\Modules\fn_initModules.sqf)
[] L23 (A3\functions_f\Modules\fn_initModules.sqf)
you executed ad hoc from debug console?
hm should not as far as i can tell (did only execute a pure sqf command setPos beaming)
The "refresh" button doesn't appear to refresh the microphone device, would be nice if it could do that too
I think there's a reason for that, mainly changing microphone while Arma's running will make it crash most of the time.
Then fix the crash
windows bug
it doesn't crash, i did it today (win 10, X670E chipset, perf binary from steam)
windows had incorrectly set the mic to my USB DAC, so it wouldn't work in Arma
Changing the default mic did not affect game stability, but it continued to not work -- even after trying to refresh it using that option
I think dedmen fixed something related to that. Not sure if it was a crash though.
@sinful kettle If you are looking at unit animation stuff, can you have a look at https://feedback.bistudio.com/T177832 ?
KK already claimed that
also I don't look at anything anymore. I'm just cleaning up my current tickets
I'm not sure how this stuff works exactly, but maybe it could be possible to calculate unit velocity value with collision shape instead of entity center
so far it looks like a sanity check is the only way as it is encoded in matrix on the client and then matrix is sent over. It does what it supposed to so can't really break it
When building that transformation matrix, can the velocity be calcuated using collision shape instead of entity center?
Though what's gonna happen when collision shape shifts, huge speed jump? 🤔
if(collisionShapeThisFrame == collisionShapePrevFrame) then {
/* calculate velocity by collision shape movement */
} else {
/* calculate velocity by entity position*/
}
```in SQF-speak
I wonder if usual Arma 3 remote player unit floatiness also happens due to this issue
I will come back to that ticket but not now
What I meant by floatiness
(bit from some random reddit video that reminded me of this issue again)
If velocity was never jumping during rotating movements maybe prediction wouldn't overshoot that much for this floatiness to happen
collisionShapeThisFrame == collisionShapePrevFrame but the crazy swing hapens during the movement
collisionShape should be the same during same movement isn't it?
what do you mean
I thought you meant there will be swing during collision shape shifting