#arma3_tools
1 messages ยท Page 22 of 1
Aha, you're wrong though, = isn't a command.
Never said that
You said everything other than literals are commands. And literals aren't constants either.
SQF;0;8;_pi = pi
ASSIGNMENT;0;8;
VARIABLE;0;3;_pi
NULAROP;6;2;pi```
thingy = rad + 60 produces a constant.
but never let the obvious get in tha way of <bamboozle speak>, or sheer common sense.
Never said that in the meaning you try to insinuate @dapper pivot
But I guess dogs are also just barking cats
Mayyybe, but literals definitely aren't constants.
What X39 means is the difference between a value that is directly in the assembly aka push 1 or puish "string" which is very fast.
And something that needs a command call like callNular pi.
push 1 are the closest thing to real constants.
and yeah = is a command on assembly level
๐ฟ
callNular pi.
as if anyone not delving into the inner workings of the sqX interpreter gives a damn what it's called.
the sqrt of 9 is 3, it doesn't matter which language is chosen, it has no association with nullar values, and doesn't need further explanaion. In ANY language, that the value is a constant.
The result is a constant yeah. But it is still dynamically retrieved. And I could easilly change it to return 4.
who cares?
X39
how this discussion degenerated from a simple, informative piece of text about only constants can be used in config.cpp., boggles the mind.
Yeah what X39 started talking about is not related to the config talk
well, the people who would have benefited greatly by using exec eval in their configs will have lost interest almost instantly. Very few examples exist of how to because it's coded out by the pre-processor, but bis use it for almost all hud configurations and thermal progressions. This message will have been lost in the noise about nothing.
So,,, for anyone still brave enough, read the documentation that comes with my tools on the use of use of exec eval and it's limits. I wont bother here again.
Sqf does not knows constants and even if you do not bother, terms are wrong
does not know*
Anyways
You called a literal a constant though, so I'm not sure what your definition of constant is. It isn't the one programmers use.
Where the hell i did that again?
Is it the same way I called it that way as when you took a sentence out of context?
Just that there is only one constant in sqf and that is a value
I assume you actually meant literal there, because values can be mutable, which makes them even less constant.
Values are compiled into the assembly. They are not mutable
Why are you calling them values?
That's not the terminology for a literal.
If we're going to hammer Mikero for calling a constant a constant we can at least call literals literals.
guys... ๐
Don't even know what they are called. A assembly push instruction with a constant passed to it. push 1 instead of push eax or something like that.
How's that called?
Is that a constant or a literal or a value?
The most helpful thing about exec eval is contained in the following example:
#define THINGY sqrt(6)
var = THINGY;
simply cannot work in a standard c compiler. sqrt is a function.
var = _exec(THINGY);
is what many of you folks have been wishing for.
"Push immediate" in Intel-ese at least. But how that's implemented under the covers really doesn't change the nomenclature one uses to describe the language. Python for example wouldn't have constants either (or M_PI from C wouldn't be one) otherwise.
well,, being nular value ian, it's astonishing how most of the world copes with M_PI in just about any trig(function);
In C++ in fact there's a whole bunch of things that don't look like constants but compile that way (especially now with complex mathematical expressions being marked constexpr).
ah, but then again, it could be a scalar, as if that matters one brass razoo
it's like someone telling me 3.1417... is a tomato plant.
so i better stop using M_PI and try desperately to remember it's actual value, remembering of course to always put (float)3.1417 for the terminally anal retentive
You're trying to trick someone into telling you that PI's slightly different from that number, right? ๐
haaaaaaaaaaaaaaaaaaaaaaaaaaa
what number? apparently it's not a constant, it's a scalar_float, so get your jargon right please
someone better tell bis to change their biki and stop using the word too.
Woah... I tried to understand this whole today's drama :O
Isn't what X39 is trying to say is that if you use the constant M_PI in C++, it will always be M_PI and can thus be optimized by the compiler (i.e. if someone uses 2*M_Pi, the asm for that will be push 6.28) whereas with SQF you will always have a function call getting the pi value, which incurs a massive time penalty each time? (In which case he's right)
More or less
no matter which way you swing the cat, the result of 2*M_PI is a constant, and consequently, it too, allows it to be 'optimised by the compiler' into binary code via the use of exec eval. (in model.cfg's exec eval is always implied, hence no requirement to state it literally)
it's pointless arguing that becuase it's a series of function calls in sqX (not just sqf btw) it's not really constant and can could change. The result at the time of the compile is known, and that is all that matters.
the end result is that the compiler produces push 6.28 for that sqX expression.
2*pi is a bad example to use since there's no need to use exec eval at all. 'sqrt 9' in exec eval produces push 3 because the result is known at compile-time There is NO equivalent in a c compiler for that expression.
and the 'time penalty' for using sqX is not relevant to baking code except in so far as the crunching will take a little longer.
please bare in mind, that you will never, can never, see these sqX statements in config.bin, they have been replaced with constants
...and before someone shouts, ah but init="some sqX expression". That aint sqX, it's a "string"
bis did a tremendously good job with this. First introduced in OFP when they knew a thing or two. By the time of model.cfg's they realised that the exec and eval calls weren't even necessary. The pity of it is, they did not follow thru with that and modify the other paramfiles such as rvmat and config.cpp to react similarly. A much larger audience would be aware of this inbuilt functionality of the bis compiler if they had. (including btw, some of their own devs)
@dawn palm as I already said: in Config context that May be true but not in sqf context
Which was the whole thing to begin with
without wishing to increase the argument, you mean paramfiles in general, not just 'config.cpp' The same rules apply, even to fsm files.
and neither, in your context, are any sqX statements. sqF, sqS or 02script.
one tends to get myopic about sqf, it's a larger subject than that.
tools Update
deFxy and Eliteness re-coded to handle the shiny new fxy 1.02 fonts
full unicode (or utf8) listings to NameOfFxy.txt for all displayable glyph characters. Their kerning properties, widths and etc
Ofp's codepage850 is fully supported and displayed 'properly', including the russian and korean codepage kludge replacements for this font.
Stunning new noto CJK font introduced with version 1.02 that supports 15, 845 glyphs of Korean AND chinese AND Japanese AND us-ascii, all in one font. Remarkable, and well worth a look.
well bloody done, bis.
The result at the time of the compile is known, and that is all that matters. It's not though. I can change the pi function to return something different. And because it's a dynamically called function and not a constant. I can do that.
:kappa:
then whatever you change it to, becomes the baked in constant or is irrelevant if already baked. exec evals, aka sqX statements are replaced with constants. in the binarised bin. How difficult is it to understand that basic.
You can change the page flags on a .text section memory page in a C program and start changing constants. Doesn't mean the C reference manuals meticulously avoid calling them "constants" because there's a way to hack them to different values.
rad +30 produces a float. it's ridiculous to make comments that you can 'change it'
I rarely encounter so much bullshit coming from otherwise very clever people.
You've just never had the pleasure of working with an office full of programmers before.
i've run an office of programmers.
indeed they do. I wont tolerate blabble.
you want to talk nonsense. go to the pub, at work, work.
always put your money where your mouth is.
I mainly care from the performance viewpoint.
A command call is way more expensive than the push of a constant
writing the value of pi in your SQF code is faster than using the pi command.
here we go again, 'performance' has almost no relevance to simply crunching a config.cpp. Real time performance in game is a different story, but let's not twist the plot dedmen to make this nonsensicel argument rational.
And if you want fast you could probably just "#define pi" in the preprocessor.
for all that it matters, you can:
#define PI "my mother's underwear"
THAT produces a constant,. so let's move on please to something a little more educational and informative .
No reason you can't do it with the lowercase pi token. ๐
Mulle also discovered something amusing about Enfusion, it has constant folding but only one level; i.e., "1 + 2 + 3" becomes "3 + 3".
#define pi 6 *angstroms
produces a constant. What the hell is so difficult to understand about that?
Yeah. But X39 and I were mostly talking about SQF and not configs. Which we both told you before ๐ And you keep arguing about config.
the discussion was about configs.
if you want to talk about the inner workings of sqf, join the sc ripters channel where it will be appreciated.
...and he (Mulle) also discovered that the VM isn't that slick.
The argument was started by there is no constant Known at compiletime in sqf Talking about SQF right from the beginning.
thing is still: sqf does not knows constants
They May be baked by executing it in Configs
But they are not actual constants
The discussion was never about configs. Except that X39 talked about SQF and you swung back to config every time
Why does it matter if you're talking about SQF or configs?
this might not be relevant to the question,. but there's another category of sqf. 'Apparent' constants known only at game/engine load time, vs constants known at compile time.
this started the sillyness.
Because they are different. What X39 was talking about is true for SQF. But completly false for baked configs.
Didn't Mikero say that the engine's normal SQF evaluator is used to evaluate the config?
anyone who needed to take advantage of sqX constants in configs has already done so and already looking at the documentation for exec eval. So i've nothing more to add.
yes it does
Sure it does. But for baked configs that doesn't matter. As the final result will always be a constant that's compiled into the baked config.
hoooray!!!!!!!!!!!!!!
nothing but nothing beats, being able to say IN A C COMPILER
thingy = _eval(sqrt 22);
bis should be congralutaed for this bit of cleverness.
I find it a bit sad that you can't compile the expression into the binarized config. So that it get's evaluated at game start instead of config pack.
Could be way more useful that way. But can still just pack unbinarized config to get around that
There's some experimental versions of C that do neat things like that. They're designed for embedded systems. Some of the code gets run on the desktop, and then the results are "frozen" and the rest of the code runs in the little memory starved chip.
yes to above dedmen. productVersion is one such example of what you talk about
Doesn't using the proprocessor during binarization do exactly that?
(Compile the result of an expression into a binarized config)
in the case of product version it is only known at engine load time (not game time)
As is anything to do with screen size.
it's that 'time' in the process where the engine is desperately building the master config.bin anyway
another excellent example Ian
but, in fact, this is the reason why desc.ext can never be (pre) binarised
there is in fact one more 'type' of variable that was last used in xbox elite:
thing= rad +60; // produces a string
var=@thing;
replaces var with the contents of thing
cfgConvertFileChange and it's friends still support that syntax, but it's never been documented (by me, anyway)
just updated pbo project https://gyazo.com/0b3b940482d1dfce7d127a9698892427
Ok fixed that one, but its still not letting me use postInit = 1, I can pack with pbo manager, and it all works fine.
post your full config where you have the problem
Line 33 missing semicolon
i have tried
class houseInit{
postInit = 1
};
``` and
```cpp
class houseInit{postInit = 1};
have tried that too.
sure
moving it up one line won't fix a missing semicolon
i have tried with a semi colon
welp, I did try with a semi colon, .. now it worked just to prove me wrong -.- ty
See. I told you it's #arma3_config and not a problem with pboProject ๐
๐
also the 1st url you posted had nothing to do with the problem of missing semi colons, that was a mismatch between the dll version and the pboProject version. Since then, obviously corrected.
@dapper pivot enscript gets weirder and weirder with the second
yep
X39: If you go back a bit in this channel I mentioned how you can write your own Enscript and have DayZ or ToM dump out the bytecode.
Mulle has found quite a few new features in the DayZ version of the script engine so that's probably the best reference.
There's also a reference .chm in both and of course all of the DayZ/ToM code that can be used as a language reference.
i do know that @dapper pivot ๐
question was just if somebody already did the efford to actually figure out the different instructions
but already got in contact and enfusion looks more like confusion right now so no custom VM yet
There is custom VM
mhh?
Have seen that somewhere
but there is a custom VM behind that
Or what do you mean?
custom, open-source, community-made VM
pretty much my SQF-VM project but for enscript
If you enjoy that kind of work have you ever considered working on a non-game language VM or an emulator?
already thought about creating a VM language myself
but i lack ideas for useful languages
SQF-VM was my last project but it lacks contributors
Have you played with parser generators and grammars?
i used to use them
but nowadays i just use a generic pattern to write them myself
Yeah, SQF doesn't really lend itself to a parser generator as well as something like C.
C would neither do good in that regard
but would be simpler to implement as you do not have to solve the pred. yourself
C's fine for LALR parsing..
but could introduce rules for it
From what I recall C is strictly LALR(1); C++ not remotely.
but btt: i lack ideas for a custom lang
was thinking about some useful scripting language that allows easy async work
simple threading, all working etc.
but i cannot come up with a useful syntax
or actual specs
You might want to spend some time learning older languages then, they're a treasure trove of good and abandoned ideas.
i may just do another dive into the graphics world as next project
OpenGL or DirectX
not sure
Like Smalltalk (people say Java is like Smalltalk but that's a joke if you've ever learnt Smalltalk).
Yeah, or do that. ๐
last time did not ended so well ๐
had massive FPS problems when actually rendering simple scenes but with shaders etc.
and my font rendering was horrible too
but it was just to learn a few things
thus it was ok
In OpenGL?
yeah
Read more about how GPU's work internally and use the GPU performance tools to capture and time frames.
But yeah, Arma VM's are a bit limited in usefulness because there's only a small number of people writing SQF serious enough to warrant testing it outside of missions.
@tawdry gazelle is useful for testing small expressions
Although a good lint'er is always popular. ๐
You could look into how the LLVM static checker works; it executes the program in a kind of VM but instead of having regular values it tracks the set of possible values a particular variable has in time.
Small teaser to my next ArmaScriptProfiler version
https://s.sqf.ovh/Brofiler_2018-03-27_17-03-14.png :3
That is looking pretty tasty
Maybe I can add the diag_captureFrame stuff to that too later.
This feels much better to use than the ingame viewer
Also I can't take credit for the UI ^^ I only made the Arma side backend of that and some minor tweaks on the UI.
This can also profile over network. meaning you could now profile unscheduled scripts on server
Looks fantastic, how'd you get it going? Does it tap into existing profiling support in the engine?
Intercept
redirects the compile and compileFinal commands and injects custom VM instructions
They set a local variable. And start the measurement. And when the variable goes out of scope the measurement stops
Neat, how much slower do scripts run under profiling?
don't know yet
Would it possible to do line based profiling?
(Assuming the overhead doesn't swamp the line timings)
Though I suppose with SQF it's more about finding hotspot functions when you've got 100's of scripts running rather than looking at line level performance.
"test";"test"; profiler loaded but disabled 0.0024ms 0.0024ms 0.0023ms
It's a bit hard to measure that low. I think that's getting into the precision limit.
profiler enabled 0.0032ms 0.0041ms 0.0038ms
Though this is running two profilers now. My custom one and the brofiler one for the UI.
Gonna change it later to only run the one that's wanted
Yes line based is possible. But i don't see use. Right now it profiles every call and there are scripting commands to create custom scopes wherever you want
I also thought about profiling every script command call. But that's overkill and would most likely kill performance
What if you did it for each scope. (i.e. for fnc_blah it spent a total of 4 seconds doing 20 calls of setPos)?
What do you mean?
Accumulate the time spent in setPos?
Yeap, in each scope.
would still need to measure each setPos call then
unless they all happen to be next to eachother
Yeap but that's not really different from a C++ profiler.
C++ profilers are usually sampling profilers. This is event based
I suppose one issue with profiling too is it changes how much work the scheduler does per frame if you make it too slow.
no
I only profile unscheduled
Because scheduled would pause the script in middle of a scope. And I only measure start/end time
That would make a scheduled script show up as running over multiple frames
Couuld you hook into the scheduler and somehow pause the timers?
Unscheduled is the hotspot though given that it's the one that can drop framerates.
And what you're doing now is? ๐
And it's the most interesting for everything I have to do with CBA/TFAR/ACE/etc
I am not hooking anything. I'm just calling engine functions and doing "legit" stuff
I know battleye can detect hooking. So that's not an option.
I'm planning to make a non-battleye version that also displays everything from diag_captureFrame
How are you hooking compile though?
Intercept RSQF.
replace the function pointer in the SQF command table
And that doesn't upset Battleye?
nope. Atleast not that I know
Battleye can't know who added/changed something in that table
Is Intercept whitelisted?
Is Intercept statically linked with the code that uses it? Or does it LoadLibrary the actual application?
Intercept core loads the plugins.
And the plugins have the clientside library statically linked
Yeah, so the plugin would need to be whitelisted too?
yeah
Wouldn't hooking an SQF function be the same as replacing compile?
That's why I'm quite sure that intercept itself will be whitelisted. Because it cannot be used to do bad stuff. Unless the plugins do bad stuff, which also need to be whitelisted
No
Function hook writes into Arma's read-only memory
Oh, we were talking about the scheduler though, where you would have to mess with other things.
replacing a pointer in a dynamically allocated array on heap is undetectable
Yeah. I already did that in my Script debugger which also had a profiling function
Does anyone know why Buldozer would try to start normal arma 3 even with params
Sure it isn't grouping -buldozer with some other part of the command line?
(maybe you've got unclosed quotes?)
"P:\buldozer_x64.exe -buldozer -name=Buldozer -window -noLand -exThreads=0 -noLogs -noAsserts -cfg=buldozer.cfg"
pulled from Object Builder
it possibly ? can't find buldozer.cfg.
you are also an accident waiting to happen using P:\buldozer. Use arma3(x64) directly. If you don't know how to set that, use arma3p to do it for you.
I'm assuming thats the "Use Buldozer from the install directory of the game" option in configurator?
I do not know why bis persist with this unless it's deliberate and intentional gotcha.
yes
I am unaware of how bis setup anything
hmm still no joy
E:\Games\steamapps\common\Arma 3\arma3_x64.exe -buldozer -name=Buldozer -window -noLand -exThreads=0 -noLogs -noAsserts -cfg=P:\buldozer.cfg
check there is, in fact, a p:\buldozer.cfg
it may be worth noting I originally had an issue with it saying "Operation takes a long time" everytime I tried to open Buldozer
E:\Games\steamapps\common\Arma 3\arma3_x64.exe
"E:\Games\steamapps\common\Arma 3\arma3_x64.exe"
so I tried completely reinstalling
does it need to be in quotes inside Object Builder?
irrelevant. spaced filenames need to be in quotes. always
(sorry, it is relevant of course, but the above is generic to everything)
well fine. but that aint your original problem is it.
of course you'll 'allow game launch'
well the problem i was having was everytime I tried to open Buldozer it would time out and say "OPERATION takes too long"
so I reinstalled
now it does that
and just launches normal arma 3
no luck
well it needs someone cleverer than me, because your launch line looks fine.
not if they can do anything to stumble you.
sure seems that way
it is that way. They aint your friend, they don't want you modding their game, but they have to give the appearance of providing (what turns out to be) bullshit tools
That steam popup breaks buldozer for me
is this a newly introduced thing?
just wondering if latest game update has caused this panel to happen, or, if it's beeen around for some time.
I had it for a few weeks and couldnโt use buldozer
Then it disappeared and buldozer worked fine again
I usually get that steam popup when I forgot to start steam / run steam before trying to use buldozer. (Steam would start itself, the popup gets shown but on confirmation it does nothing) But I am sure you can't have missed that right.
yeah no am running steam
Hey ๐ I want to query the mods that are installed on a arma 3 server but i cant get it working :/
https://pastebin.com/V27Z5ECP
the response for mod ist always null
@Natu#8573 probably better ask in #server_tools
Ok i will do that thanks
Why aren't you using already implemented and proven to be working libraries instead of implementing one yourself?
And even if you really don't want to use libraries, you could probably take a look at them and compare with your code
I found querymaster but mods return there also as null
Name Players etc works fine but mods dont
could be that they just don't work then
I know I used that before to get playercount and missionname
but I don't remember if mods worked
i found this : https://community.bistudio.com/wiki/Arma_3_ServerBrowserProtocol2 so it seems to work somehow
Slowly but steadily making my self hostable api.. annoying work ๐
{
"errors": [],
"isValid": true,
"body": {
"arguments": "+login --- --- +workshop_download_item 107410 779552248 validate +quit",
"status": 1,
"result_code": 0,
"result_standardout": "Steam Console Client (c) Valve Corporation\r\n-- type 'quit' to exit --\r\nLoading Steam API...OK.\r\n\r\nLogging in user 'ij1andv56og1Hr0RpjXR' to Steam Public...Logged in OK\r\nWaiting for user info...OK\r\nDownloading item 779552248 ...\r\nSuccess. Downloaded item 779552248 to \"H:\\Dev\\CSharp\\XSV\\XSV\\bin\\Debug\\netcoreapp2.0\\Components\\Instances\\steamcmd\\BLK5Z6PAYQ\\Bin\\steamapps\\workshop\\content\\107410\\779552248\\433861180661208955_legacy.bin\" (1826750 bytes) ",
"result_standarderror": ""
}
}```
๐
I hope you sanitize your input
@nocturne basin The normal way is to use specific endpoints for specific tasks, this one is just for direct access if you need it for some reason
but yeah I do
Dear friends! Today we show you result a long and hard work - unofficial patch ArmA Resistance 2.01 by [4RTech] OFP Clan!
We went to this event for a ...
quite risky
certainly seems to be, but anything restoring the marvellous first game is worth a look
the campaigns, for ofp, especially by mod authors are better than anythng that's ocurrred since. It's become just play for the stupidly named blufor with an american flag attached.
bis have forgotten that what made this engine something other than a 'me too' shoot em up is their European heritage where you wanted to play on the Russian side.
Back to basics bis, if you dare, instead of just another 2035 storyline with BFG
I bet most of them don't even know who viktor troska is because he never drove a sci-fi tank.
oh, and while on that subject, i bet it never occurred to you bis to make civilians something other than a 4th side with same weapons. If you need a lesson to learn try any of the Bardosy missions of ofp.
Bardosy incidentally took one look at the mess you made of your own game and left.
Ah I was wrong about the civilans, bis have misogny++ where the females can only carry handguns. And you wonder why you lost half your audience. I'm betting you never heard of the Israeli sgt Maam (The AvonLady), who provided you with the first, uniform addon manager, She took her female squads to other games that 'allowed' her to be who she is.
i wait for the day Bis where you just go away, so that a revamped flashpoint, waiting in the wings, can be released. I might even call it Dragon Risen,.
Iโm torn between wanting JIP or not for OFP
If it had JIP I wouldnโt have bothered with Arma 1 at least
But it was quite charming to not have JIP too
Starting a game of cti / bastige island an early weekend morning
If you didnโt arrive in time then you had to wait until next event or a ctd restart ๐
oh, yes, how well i know that feeling. In that galaxy far away and a long time ago, we all assumed arma = ofp+ jip. It took being part of arma1 beta to dissolution all that took part in that fiasco.
They did not even know who Kegetys was, nor the galaxy of stars that ran like hell.
dll update. another layer of obfuscation added to keep the parasites screaming in frustration.
Well, you would be surprised then - there are still quite few veterans from ofp in BI
There is even some internal back up of a von lady faq ;)
this is #arma3_tools, keep it so please
Mikero isn't a tool maker?
You might have missed the now deleted messages
Aww, what happened?
small rant about how crap Arma 3 is ๐
Everyone's getting restless being that it's the silent time just before the Arma 4 announcement.
...When they should be reverse engineering DayZ to get a head start on Arma 4 tools.
I would if I owned DayZ ๐คท
restless already? well, guess everyone needs to learn to keep their feet still for another 2 years at least^^
True that ๐คท
Meanwhile, you can help by filling #community_wiki ๐ ๐
I have even done that today ๐
@normal wigeon nevar
Will have an emulator ready when arma 4 Releases
Not filled with arma 4 Infos but the full Script lang will be Supported!
rly need to start memorizing the terms for shit ...
currently need something that acts like this:
magic = circlemagic(5); // 5 --> size of the circlemagic
magic.push(1);
magic.push(2);
magic.push(3);
magic.push(4);
magic.push(5); //circlemagic is full, internal array index is set to 0
magic.push(6);
magic.push(7);
//magic--> { 6, 7, 3, 4, 5 }
//magic[0] --> 6
//magic[6] --> error```
pop etc. not needed
current implementation i use for it:
#pragma once
#include <array>
template<class T, size_t size>
class circularbuffer : public std::array<T, size>
{
size_t curindex;
public:
inline void push(T val) { if (curindex >= size) { curindex = 0; } (*this)[curindex] = val; curindex++; }
};```
maybe this gives better imagination of what i am seeking for
What is the problem with the implementation?
insert. Then curIndex = curIndex >= size-1 ? 0 : curIndex+1
Buit that's essentially what you just wrote
It's a circularBuffer yeah. What other naming? ^^
c++ std standard would be push_back/emplace_back instead of push
just that it would not "push_back" but rather push where the index is ๐
currently fiddle around with vulkan and that is why i need to floor eg. frames
thats why i need those "fancy" things
https://www.boost.org/doc/libs/1_61_0/doc/html/circular_buffer/example.html That's also using push_back ^^
which is horrible ... push_back simply does not makes sense here :/
why?
though
that can do more stuff
and you need push_back to be standards compliant
that is the point
it moves around
i guess i need to ... not happy with it
but well
will alter ๐
I guess alternative is what std::map uses.. aka insert but that's not really.... Like.. usually insert takes iterator
y
push_back is part of the SequenceContainer concept which needs a lot more than just that to be satisfied.
Hey! Any param to open a map to the Eden Editor from the exec?
Ignore me, found it
what is it?
SQDev plugin v0.7.5 is out:
https://forums.bohemia.net/forums/topic/202181-sqdev-sqf-developing-in-eclipse/?page=2&tab=comments#comment-3282085
I just released version 0.7.5 of the plugin which ships with the new parser I have written from scratch. This brings enormous speed and stability improvem...
Just put the mission directory and it opens in EDEN, for example arma_x64.exe "C:\Users\user\Arma 3\mpmissions\SomeMissions.Stratis"
Is there a way to access what profiles a player has from a external program?
Yes. They are by default stored in my documents/Arma 3 or My documents/Arma 3 - other profiles
If the user is using a different profile directory via a custom start parameter that you don't know.. then no.
hmm ok
@broken anvil Python 2.7 code that does that for you: https://github.com/overfl0/Bulletproof-Arma-Launcher/blob/next/src/third_party/arma.py#L114-L146
Although I'm not using the Arma 3 directory (without the - other profiles suffix) because I've never seen any of my (test) profiles end up there.
Do you know when that directory is ever used to store profiles, actually? @glossy inlet
Fun fact: the profiles are saved on disk utf-8-encoded and then urlencoded.
...and the official Arma 3 launcher reads them wrong ๐ (try having a + in your profile name, for example, AFAIR)
Only the main profile is in Arma 3 directory. Aka the one with your username
Good to know. Might have to fix my code, then. Thanks
Thanks Stack, however I am doing a similar project towards use but using C# D:
Look at my pm for an invite link
@dawn palm your skype is sending out dodge links
thanx 4 heads up
np
As a note, many of you have been asking for a 64-bit version of Binarize and also the return of the sources of the core configs. These will arrive in the Tools Dev-Branch in the upcoming weeks. We just need a little more time to polish them.
nice update to name sections in this last update
note also re the 64 bit version, new mapinfo icons have been introduced for minForestSquares/Rocks on the 2d display of maps. They are used in conjunction with the existing shaded areas and are a new wrinkle in the wrp format. (credit snakeman)
@dawn palm but no change in the config definitions (cfgWorlds or otherwise) right?
Correct. None. The new mapinfo icon 'types' are only relevant to the Glandscape code of the engine (which generates the 2d map). The types themselves are a new wrinkle, only when decoding the wrp format. This alteration is pure bis binarise which will do the same thing to old, or new, maps & configs.
It remains to be seen however if the engine itself has been updated too. Snakeman has not reported any visual differences.
@vague shard some params were added in January, not sure if you are aware of them
minTreesInForestSquare = 3;
minRocksInRockSquare = 3;
minObjInTownSquare = 1.4;
The first two have been around for longer than january (been using them for 1-2 years). The thrid one is new. What does it do (as Towns are have no special marks on the map besides keypoints)?
Btw this might be more a topic for #arma3_terrain to discuss further.
How to get Mikero's MakePBO to find my include path properly?
I have folder:
myAddon\main\config.cpp
myAddon\main\$PBOPREFIX$ with the line z\IRG_WW2\hotfix\main
myAddon\main\script_component.hpp
myAddon\main\script_mod.hpp
In script_component I have: #include "\z\IRG_WW2\hotfix\main\script_mod.hpp"
Yes when I pack I get an error it cannot find script_mod.hpp
Also later I also plan to include #include "\x\cba\addons\main\script_macros.hpp"
Note I run MakePBO on myAddon\main
Alternatively can I get it to not verify include paths?
I temporarily get around it using -NG but would still like to know a proper procedure
#include "\z\IRG_WW2\hotfix\main\script_mod.hpp"
answer is simple. That file does not exist at "p:\z\IRG_WW2\hotfix\main\script_mod.hpp"
you've convinced yourself it does, but file P:\file\refere\rences\cannot\lie
i asked about this a bit back, but anybody ever seen this error when starting Buldozer?
https://i.imgur.com/NVE27HR.png
@dawn palm No it does not. I am not even using a P drive. But it does exist when Arma loads it (the pboprefix-ed paths)
What about CBA then, or other addons? Will I have to unpack every dependency onto P drive?
And then my dependencies, dependencies and so on.
ok well now buldozer just crashes on "Processing Command Line..."
so progress...i guess
alrighty I fixed my issue with Buldozer by setting it to run from the a3 install in the configurator
Will I have to unpack every dependency onto P drive?
of course. my tools are never going to accept your word for it that you have no typos in your file paths.
My tools go much deeper than the simple test of seeing if you know\what\your\talking\about. They inspect the p3d to 'see' if it's the right type, ditto, rtm files for static cargo poses, ditto rvmats. and, especially, wrp, fsm, and model.cfg's
They also ensure that the addon you think you need, is in fact 'there', and will add to that list if you've got it slightly wrong.
If you ever move into terrain making, you have a snowball in hell's chance of creating a wrp that works, unless the P:\drive is fully populated. Bis binarise relies on that as a fact.
Unkown to you, binarise silently populates p:\temp\folderS (plural), with every addon you have ever made, and every addon.config you accessed from your addon. (and every rvmat too)
@Muzzleflash#7409 makePbo -N
he's already using that and was asking how to avoid doing so.
is it not possible to view textures in buldozer when running from the install directory of the main game?
I get this error "SteamAPI initialization failed. Steam features won't be accessible!" whenever running it from P Drive and it launches fine when running from game install but textures dont display
running from the game is the correct method. you have an issue telling buldozer where the p drive is. probably it's cfg. either that or your p drive doesn't exist in admin mode etc.
hmm
object builder or terrain builder?. look at your cmdline settings
yep. we all wear the same Tshirt
and BIS takes every opportunity to splash mud all over it ๐ข
wherever possible, avoid the temptation to be a super user. the drives vary from non-existent, to different, to possibly the same. PLUS admin mode is not what you think it is. It is 'microsft office use only', not, a super user like linux, and has several restrictions on what you are able to do in that mode.
most people think it's a go-anywhere, do anything you like mode, when, in fact, it severely restricts what gui dialogs are allowed to do. drag n drop for instance is disabled.
... and for almost all installs of anyone's software, the registry settings for that software don't exist.
@dawn palm Thanks for the explanation. Certainly appreciate the effort you have put into detailed error handling in your tools.
For me, right now, I am only doing config and script addon so I will probably stick to -N for now. Not sure I understood the parameters properly, is -NG in effect different from -N?
for some reason my work drive only extracts DLC game data. Anyone know why?
use arma3p
good point
is -NG in effect different from -N
almost all error checking options have no effect with -N. -G is ignored.
it is about as close as you can get to addon breaker's behaviour.
My tools are notably quite weak with sqX script and you are probably as good with -N as without. Note however that with -N the resulting pbo does not have my signature inside and hence users of your addons will trust them less.
oh and your comments are appreciated. thank you.
Not sure I understand some of the optiosn then. So what does -B do then? It says Rapify, but that is already default?
yes
i'll have to check the code, i think the config.cpp remains as a config.cpp, perhaps not.
does not have my signature inside and hence users of your addons will trust them less.
because users check for that shit obviously..... riiiiight
not all of them. but it's increasingly being used to look elsewhere (not blame the addon), when the user strikes trouble.
So, what is your "signature"?
mikero=depbo.dll version 1,2,3
why? it's a very standard addition to the properties field of a pbo, which, incidentally you can do for yourself with a pboprefix.txt
version = 123;
which, incidentally you can do for yourself with a pboprefix.txt
that's the entire point i'm making here
author= I am famous.
I have no idea what you're objecting to alganthe, i've simply stated what my dll will do.
There's plenty of folks who are unaware of how to add property pairs to a pbo, and there's equally, plenty of folks who do, and also check what made that pbo.
he suggests ppl can fake the signature
And saying people won't trust addons as much because they weren't built with your tools...
they don't
I especially don't trust addons that were built with your tools. If they are also obfuscated.
ok, time to mute this channel again. I'm tired of the pettiness.
Is this a bad time to ask how to fix "failed to create P:\a3.txt"? ๐
@dawn palm any idea on crashed with pbo projects latest update ?
like some other tool makers I won't respond in this channel. it's too poisonous. PM me if you have issues. That way the kids can't have inane sniping contests
who dosnt respond here?
I can answer about Megadeth's issue, he didn't have Arma 3 installed when trying to run arma3p lol ๐
When launching the game using steam://rungameid/107410// is there a way to skip the launcher and just pass the application parameters from your launch. (Just need the launch bit not the params)
Lol, i feel like a total dick
Thanks, I am at school and they blocked BI website
no probz! ๐
my uhh arma 3 tools does this thing where it starts for a second on steam, and then it closes
i've tried uninstalling it and reinstalling it, verifying game cache
FYI the Intercept Getting started wikipage was updated.
https://github.com/intercept/intercept/wiki/Getting-Started
If you know how to pack a PBO and you have the latest Visual Studio installed it shouldn't take more than 5 minutes to get up and running with a basic Intercept plugin.
๐
I was thinking about adding the intercept library as a cmake dependency, would that be relevant/interesting for the template?
instead of using git submodules
//New scope to allow the thread_lock to lock and release each cycle
you mean to release it before the Sleep happens?
because to me that sounds like some "magic" that is happening here
I changed all the "here is a 10 minute step by step tutorial on how to set up your visual studio project" into
"Download the template and open the CMakeLists in VS"
Yeah. I don't know how cmake dependencies work. Would like it alot.
Already have to make a release with a packed up zip file. Because if you just "Download .ZIP file" on github it doesn't include submodules
@nocturne basin sleep lock is released after the block ends
since the variable is released
Yes. That's what's meant. I actually didn't write that code. I wouldn't comment that much and I personally prefer a lock.unlock() before the sleep. Instead of adding a level of indentation
alright, I'll look into it
@scenic canopy talking about the actual client::invocker_lock that would get deallocated
because the comment "chain" reads like it is some vodoo, SQF-like scope magic
looking into migrating from stuff to intercept, might as well have a simple project to reuse
since that would also remove the dependency on git entirely
not that it matters to me but hey, might make intercept adoption easier ๐
I'm going to be a PITA, but invocker and not invoker?
The packed up zip download already removes the dependency. But I really don't like it.
Also currently.. Or atleast till today it was said everywhere that you need to compile the intercept_client.lib yourself and link it into your project which is a absolute chore.
Now it just adds the sources into the project and turns that half an hour job into a 2 minute job
then it's just the question if it should use a tagged release or master branch I guess... ๐
probably can have it as a variable in CMake
and have it default to master
yeah. Atleast currently release is quite a bit behind. And later when we only release stuff after battleye whitelist it might be even more
@nocturne basin I would guess on destructor
it is @scenic canopy
there is no scope-magic in c++
but the usage looks weird due to the extra scope and the comment
sure is, when variable goes out of scope
which suggests something like that
invoker_lock works just like a c++ lock_guard. Most c++ programmers now what that is.. So the commend is kinda useless. But also no real need to remove it
would just reword it tbh
though ... not like ppl could not work around
if they are using intercept, they should already know what is happening there
yeah. The head of that page also says that it requires a basic c++ knowledge
great work with the sample and docs @glossy inlet , now I might finally get going ๐
I think github should allow you to edit that wiki page. So feel free to make any changes that makes it more clear
yep!
I'm not really a good tutorial writer
still ... ppl may walk into this without prior c++ knowledge
i may edit it at some point to something more clear
github wiki works a bit weird ๐
i personally now focus more on my very own EBNF-code-generator
for fun
If you need more samples https://github.com/dedmen/Intercept_CBA is probably the biggest and best organized project so far.
Using signal/slot to distribute events throughout the subsystems. And examples on the more advanced stuff like registering functions or own datatypes.
super ๐
CBA will be replaced with an intercept version, or this will be only an another project on side of CBA one @glossy inlet
side
Intercept_CBA can make CBA faster and give more additional features
but it won't replace it
Almost got the template working now with automatic fetch
How does it grab the files from github without git? using the zip file download?
zip/tar.gz
@glossy inlet intercept is not compatible with clang? ๐
I only tested GCC and MSVC ^^
guess I have some more work to do then ๐
Don't use clang personally so.. I'd say not yet
just a few errors
Also I don't know if it will even work after you get it to compile. Because the memory layout needs to match. And it seems like the Arma linux server was compiled using gcc where the layout matches nicely
Or MSVC on windows. Clang works on Windows too right?
yeah
yes
fair enough
got it working nicely now but I'm unable to build the example project with either gcc or clang
seems like gcc mixes up static with shared
PM me error messages. I'll try to fix it tomorrow. GCC builds were working with master branch 2 weeks ago. I updated the CMakeFiles today on a seperate branch but not on master.
oh.. but I did these changes in the template project too.
Hi there,
ย
Today I am making an official release of my internal usage mysql/mariadb plugin for Arma 3 dedicated servers, it can be used for bot...
@vague shard link not working
...which is strange since Discord has shown me the preview text above
probably thread was deleted or moved
Grr, does somebody know if ArmA somehow magically blocks HTTP Requests made by extensions? I get DB results, I get requests to other applications or system information, but HTTP requests? No chance. Not even with workers / async ๐ก
Calling the same DLL via my debug console gets the request results without problems
works fine in ours using boost asio
means outside of Arma
If it's the case, then Arma is simply blocked by your firewall and your curstom application isn't
And also... people are still writing ArmA in 2018? It's what... "only" 9 years since BI changed that ๐
I got too used to "ArmA" ๐ฌ will probably never change xD oh, yea... and I noticed it worked in 32 bit mode all the time while I was testing (in ArmA) with x64 xD that explains everything... wrong compilation of cUrl
@karmic niche my ide nobody uses also is named "ArmA.Studio"
And people continuously complain about that mistake
that's why no one uses it ^^
It is no mistake
if you did it on purpose, it's just that much worse ๐
Doubt that that is the reason @pearl beacon ๐
๐
How do you guys copy the RVExtension() call data back to Arma?
The wiki suggests to do a strncpy which is ridiculously stupid because:
destination is padded with zeros until a total of num characters have been written to it.
...so each call to RVExtensions is then basically almost a memset(output, 0, 10240).
Using strncpy_s helps with that but works only on Windows.
How to do that in a portable and way and also with good performance in mind?
Uhm.... Strncpy
strncpy_s in TFAR
Oh wait.. portable way ๐
just strcpy and manually set the nullchar at end
also the incoming buffer shouldโข already be nulled
It isn't in debug mode. But it should be in release
@nocturne basin destination is padded with zeros until a total of num characters have been written to it.
Congratulations ๐
@karmic niche just pass the length you need +1 to strncpy. And it will only add atmost 1 null
Exactly
it won't truncate then. But you can just do that yourself std::min(maxLength, stringToCopyLength+1)
If I pass the length I need +1, then I don't need strncpy since I've most probably spent the time to count the bytes I have in my string
If you use a "anonymous" char pointer which you don't know what's inside then... Well.. u dun goofed
Strlen
Mental shortcut:
If I know the length of my string, I can cut it myself. Hence I don't need strncpy at all because I know that the length is alright
strncpy also calculates the length of the string internally anyway. It has to look for the null byte to know when to stop
Yes but I'd assume it uses some SSE magic or other stuff that will perform better than me implementing it by hand
Seriously... What are you trying to do?
I generally prefer to keep the length of my strings
because then you don't even have to think about that
There barely is a Situation where you do not know the string length
Actually, you may be right and I just should rewrite stuff to not use strncpy_s at all
Btw Arma strings don't store length and call strlen everytime
so... Your implementation will probably not be worse than Arma's
Yeah but why add additional microseconds to what's already slow? ๐
Strlen is not taking that much time tbh... It is literally an empty for loop
But as I said, you're probably both right
Still. Doing nothing will always be faster than calling strlen ๐
Unless you got huge strings and count thousands of times, you will not get any Problems with strlen
Question still remains why you got no string length
Actually, looking at my code, I DO have those lengths, hence I'm saying that you're right
๐ as said
Barely there are Situations
A classic example of the X Y problem ๐
How would i go about seeing if a word exists inside a string? (Cpp)
std::string::find
No way ๐คฆ , im dumb. Thanks!
I also hear a lot of people using boost for operations like this, is it worth utilizing a library like boost?
things like this probably not
@toxic nest try not to use boost when ever possible. It's bloating your project and build time by alot
Only when boost offers alot of solutions that are helpful for you then use it
@elfin oxide i'm not, i was just curious if i should or not
@glossy inlet how much is different and how much the same in terms of data formats in DZ SA 0.63?
In Addons folder everything is the same as before. Probably just legacy.
dta folder has FBX models. dds/edds/tga textures. c for enscript files. I don't see config.cpp anywhere
Animations seem to be proprietary anm format.
rvmat requivalent seems to be emat
Here the water one
material "Materials/water/dayzwaterpond.emat": MatWaterPool
{
Color "0.12 0.12 0.06 0"
ZWrite 0
WaterExtinction 2
DepthScattering 0.8
NormalMap "{00043BD4DA5F1244}Graphics/Textures/Water/dayzwater1_no.edds"
NormalPower 0.1
NormalMapping 0.1
SunPower 256
SunInfluence 4
RefractScale 0.5
ChromAberation 0.2
EnvironmentMap "{001392F222D3EC22}Graphics/Textures/Water/envForest_co.edds"
ReflectionColor "0.2 0.3 0.4 0"
CausticMap "{EA764AD7A6112284}Graphics/Textures/Water/caustic.edds"
Caustic 0.5
WetFloor 0.5
WindInfl 0.2
FoamMap "{CF1EAFEB98ED672B}Graphics/Textures/Water/foam_ca.edds"
FoamTerrainBlend 0.5
FoamMapping 2
FoamMove 0.5
FoamPower 1
FoamColor "0.6 0.6 0.5 0"
TimeMul 0.7
}
UI layouts seem to be proprietary .layout format in config style.
TextListboxWidgetClass PlayersListboxWidget {
position 0 10
size 0.95 0.95
halign center_ref
hexactpos 1
vexactpos 1
hexactsize 0
vexactsize 0
style Default
"title visible" 1
colums "#players_name"
lines 25
}
dds/edds/tga textures
Yes
UI elements can apparently backed by a script class which takes care of functionality.
scriptclass "Bouncer" in UI config and
class Bouncer
{
reference float amount;
reference float speed;
protected float m_orginal_width;
protected float m_orginal_height;
protected Widget m_root;
protected ref AnimatorTimer m_anim;
// -----------------------------------------------------------
void Bouncer()
{
m_anim = new AnimatorTimer();
}
// -----------------------------------------------------------
protected void Update()
{
if (m_root)
{
float p = amount * m_anim.GetValue();
m_root.SetSize(m_orginal_width + (m_orginal_width * p), m_orginal_height - (m_orginal_height * p));
}
}
// -----------------------------------------------------------
void OnWidgetScriptInit(Widget w)
{
m_root = w;
m_root.GetSize(m_orginal_width, m_orginal_height);
m_anim.AnimateLoop(speed);
}
};
The class behind that.
Seems like OFPEC tags will have to stay and we won't get namespaces. Atleast currently looks like that.
how is that supposed to work?
Bouncer being a control?
Bouncer is the class behind that specific control. In this case taking care of animating it to bounce
control is of type ImageWidget
is there some service to check how much a mission or terrain is used/played? (similar to https://arma3.swec.se/game/statistics or https://a3.launcher.eu/stats)
There are currently 4093 servers online with 132 different maps.
The most common in descending order Altis, tanoa, Malden, chernarusredux, Statis, Takistan, Chernarus, lythium, Jackson County.
Most played missions in descending order Exile, Altis Life RPG v5.0.0, [SP/CO]- Antistasi 1.8.0 Altis Blufor, Epoch Mod, Tanoa Life RPG v5.0.0, Altis Life RPG
3735 serveres on windows. 358 servers on Linux.
Currently 9249 players on these servers.
3723 servers require v1.82 and host 9236 players.
321 v1.80 6players, 26 v1.76 0players, 7 v1.72... 1 server is on 1.63 (dev branch??) with 7 players on it.
Something like that?
That 1.63 server is a russian DayZ server.. Oh that's Arma 2. Didn't even notice there is Arma 2 data in there
There are 34 servers with 396 players on the latest perf/prof branch. and 41 servers with 626 players on the older perf/prof
Using SteamAPI I get 5001 servers.
Weird.. latest perf/prof is 144709. There are 36 servers on that. And there is one server on 144710. 0 players on chernarus... Why is there a server on a version that was never publicly released. ๐ค It's the server of a reddit community..
There are actually 2 servers on 144710. The one above was from steamapi.
swec has a german exile server with 0 players running 144710
1720 servers without battleye out of which 1519 on current game version.
@vague shard Is it such data that you wanted?
I used two datasets. One is the xml you can get from swec.se and the other is steam query api.
steam query has more servers. But it seems info like mission name is queried manually by swec. Steam doesn't return that data by itself
@glossy inlet thanks buddy for looking into it ๐
overall the main interest would be about historical data/for different time frames - like last (maybe week), last month, last 3/6/12 months and i guess why not total (probably pointless now though)
I could set something up to record the data from when it starts into the future. swec stores past played missions per server. I guess that could be scraped if really needed
like bit similar to workshop stats but based on actual "use"
especially for not top 10-100 mod/mission maker this seems insightful to get a better sense how people actually make use of their work
atm you have only downloads/subs and feedback basically
ofcause would only work if the server actually displays that mod as being used. But I think serverbrowser shows a list of all loaded mods right?
Besides the buggy arma launcher workshop mod detection?
Thanks for making me look into that. I updated https://community.bistudio.com/wiki/STEAMWORKSquery#Table in case anyone cares.
That research was fun
is the world/terrain name returned by the steam API, or does swec query this from the mission somehow too?
Address: 213.181.201.130:2332
Server version: 182144647
Required game version: 1.82.141764
Map: Takistan
Mission: ExileHydraPVE
Players: 2/40```
this is from the A3 launcher
(copy server info)
for mods there is a button "more details"
There are 116 servers without battleye, without signature verification and with filepatching enabled ๐ Sadly I cannot query passworded status. So far my own servers are also in that list.
SteamAPI doesn't return that. But Arma's own query thingy does. I'll look for the documentation about it. I used that myself already.
Okey I think https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol might return them. But steam web API doesn't.
it appears this is not limited, but probably does a direct server query
Are there any good resources for learning the cpp structure? How did you all learn? I understand only the most basic functionality and i want to learn more. The ms documentation is slightly confusing, and their tutorials it seems to be of the most basic.
If that's not it then I don't know what the other thing is called. But wireshark and time can give you all you need. I think for my last implementation of that I was basing it off of reversed wireshark captures
I learned by.. Eh.. Looking at code and understanding it... Eh...
So a gift was bestowed upon you to just "understand" :D
For maybe better examples http://en.cppreference.com/w/ or http://www.cplusplus.com/
Well. Question is.. C++ or Arma config structure? you referenced microsoft documentation so I'm guessing you don't mean arma configs
C++ . Cpp as in the format arma config is plenty understood
Do you "like" video tutorials? that walk through things with explanations and stuff? I have a couple
Whatever works. Text, video. I can learn from both
I have a very nice c++ video learning thingy on one of my servers ๐ Only need to find it...
English only? Or german too?
English pref. German if i can translate it.
Good website for beginners (and not) here (goes into quite a lot of depth at times): https://www.geeksforgeeks.org/c-plus-plus/
Sweet. :+1:
Dedmen: Okey I think https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol might return them. But steam web API doesn't.
Yeah, I was about to say that you should be able to fetch the number of players, their names, etc... by querying the servers through the UDP steam protocol
I used this lib to do that for me: https://github.com/serverstf/python-valve
@vague shard Yes, world name is provided by steamquery.
More specifically, this is what is returned
"IsObsolete": false,
"Address": "195.2.253.152:3090",
"Protocol": 17,
"Name": "WOG ArmA 3 Server #1",
"Map": "ProvingGrounds_PMC",
"Directory": "Arma3",
"Description": "WOG 78 ะัะฐัะตั 1.1",
"Id": 0,
"Players": 0,
"MaxPlayers": 64,
"Bots": 0,
"ServerType": "Dedicated",
"Environment": "Windows",
"IsPrivate": true,
"IsSecure": false,
"GameVersion": "1.82.144647",
"Ping": 67,
"ExtraInfo": {
"Port": 3089,
"SteamId": 90114418614151171,
"SpecInfo": null,
"Keywords": "bf,r182,n0,s1,i3,mf,lf,vt,dt,g65545,h3d0a416b,f0,c38-56,pw,e0,j3.40282e+038,k3.40282e+038,",
"GameId": 107410
},
"ShipInfo": null,
"IsModded": false,
"ModInfo": null
}}```
what are the keywords?
ty
is there some dll extension already out there to read a text file and pass it onto sqf land?
in what sense?
Why not just enable -filePatching at that point?
reyhard's DebugSuite makes use of diag_loadTextFile; he wants to release it but needs a replacement for the cmd
he uses it to support mergeConfig multiple configs in one go and functions
??
!?
@X39#2180 what confuses you?
what exactly is the problem?
merging configs during runtime?
or loading files during runtime
that stuff @vague shard
diag_loadTextFile [...] needs a replacement for the cmd
@nocturne basin
aka parse a file and hand over the strings to the game/sqf land
the input file/format: https://pastebin.com/zfG3JUKZ
what exactly is that doing?
the handling of the "parsed" text
private _input = call compile (diag_loadTextFile _debugFile);
private _config =_input select 0;
private _functions = _input select 1;```
so it is just a loadFile?
recommendation then is indeed, file patching and loadFile
otherwise i doubt there was an extension already written
though ... not like the task of doing so is a hard one
in case one wants to use intercept, a simmilar command could be added too
__declspec(dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function)
{
unsigned int read;
FILE *file = fopen(function, "rb");
if (0 == f) return;
read = fread(output, sizeof(char), outputSize, file);
fclose(file);
output[read == outputSize ? read - 1 : read] = '\0';
}```
there is your replacement, error checks skipped
besides ... now that i am looking at it, the whole extensions page in the biki looks like it could use some major rework
It could
Like the missing x64 define in the c# example
Which is used, but never actually defined
What? The WIN64? That is defined automatically
Oh no. Actually it is _WIN64 the underscore is missing
c# ANY CPU is not automatically doing 32 and 64
it is using 64 if your windows is 64
and 32 if it is again, 32
one of the more common problems one can experience
It's essentially important to use threading to prevent errors. If the extension is taking too much time to process a request it will be abandoned by Arma with an error code.
Yeah. Good example why that page should be atleast a little reworked.
And References could be example projects on Github
Arma now abandons callExtension's?
Extension existence/version checking doesn't even mention RVExtensionVersion
no. It never did.
Well, docs do mention that if the call takes too long to respond it will be abandoned
But never bothered to test that one out
Arma call's it in it's main thread. It can't just force unwind the stack and jump back. I guess technically that would be doable on a very low level.. But they aren't doing that.
It's insane to do it at any level.
Currently reworking the page
It isn't even safe to do it on another thread.
though ... that relates theoretically to #community_wiki
thus will continue talking in there
If the other thread locks some resource and you kill it in an uncontrolled manner you get a lock.
i.e. if you're using a malloc that happens to take out a lock on some part of the heap and you happen to kill the other thread in that malloc then it's bad news.
The Arma eh.. Don't have the real name in my head. The "freeze watchdog" will throw a exception and throw you into the debugger. Or if you don't have a JIT debugger it will crash your game. Maybe that's what that comment meant.
anybody knows the exact locations arma will look at to find the DLLs?
====Where to put Extensions?====
Windows default. Plus loaded mod directories
Does it look in A3 too?
Main directory yeah. Next to arma executable
Iirc yes
and yeah. The DLC's and stuff are also normal mods
loaded like the -mod parameter. Though internally.
the limit of how much can be outputed by extension might be a limiting factor for reading files
might have to read one line at the time etc
The plugin knows how much it can return, you can have it return more than a line at a time.
Just cheat and write into the input string ๐
Sure, but if the file is bigger than allowed output youโll need to call it more than once
You could of course calculate how many times in the initial call to open the file
Assuming that the file is not greater than, let's say 10MB and that the SQF script is not malicious (i.e. it won't try to make the extension eat all the available memory purposely), you can just read the whole file in one go in the extension (and keep it in memory between the calls) and then return it in chunks.
The SQF side reads and concatenates the received chunks as long as the extension doesn't return an empty string. Then it assumes the file ended.
Sure, as long as itโs handled
Need entries for FAQ section: https://community.bistudio.com/wiki/User_talk:X39
rewriting https://community.bistudio.com/wiki/Extensions
further suggestions are also appreciated ( all of that please in #community_wiki )
Are there any pbo tools for a mac?
You should be able to compile armake on a mac
But there is no precompiled binary for mac afaik
Ah, great, that should do just fine. Thanks!
Is there anything for the Mac? Now that it's app store only I can't imagine anyone is bothering to get A3 tools signed.
Mac is app store only? Ewww
Yeah, it's gross. You can switch it to allowing an app but then it times out after some fairly short period of time and you have to dig around in the control panels again.
Windows will go the same way, they're just warming up to it a bit slower.
They'll continue to experiment by doing things like making newer API's store only.
can you run a console program (compiled for mac ofc) downloaded somewhere?
just wanted to get that app store only thing clear
@dapper pivot i hope windows wont go that way
The threat of windows going that way is why Valve has been looking more into linux
...to the extent that they're contributing funding to Vulkan's development.
@hollow granite armake works fine, I made some Finder integration for macOS as well, https://i.imgur.com/ibZU2uM.png and preview https://i.imgur.com/5NY6EN8.png
@dapper pivot no, gatekeeper won't block cli applications by default
@smoky halo most popular tool for managing CLI tools is Homebrew, https://brew.sh/
I have a formula on my GitHub to include armake in their list of apps to install, I should probably submit that PR ๐
the current stable release of armake differs a lot from current dev so I might wait until next release though
Dahlgren: So clearly it's to protect the app store's profits rather than protecting your PC from trojans?
no, most users won't open terminal apps, it's to block execution of apps when double clicking them basically
there is also a quite hard guard against modifying the FS
you need to boot into recovery mode and flip a switch to write to root FS except for /Applications, /Users and /usr/local (probably some more)
so unless your shell is modified (PATH) to run cli apps from other locations you're quite safe
for average joe it's quite good
the Gatekeeper blocks all unsigned applications unless you override it by rightclicking and opening the desktop app that way
and since apple can revoke certificates from malicious apps that are properly signed it makes it quite hard for users to run bad stuff
not impossible of course
but my grandma probably won't do it at least
They've changed it from last time I played with it then, you couldn't right click from what I remember.
it's been that way since mountain lion at least
by right clicking and pressing open you'll get a prompt if you want to run the unsigned app anyway
Also how does a granny even get a dodgy .app? They're folders that usually ship in .dmg's. ๐
like when downloading a signed app from Internet where you have to approve it
dmg or pkg
scam emails
"click here to download your invoice" etc
That's for noobs. Real men use "click here to enable excel macros". Let me find that talk by mikko hypponen...
auto unzip? That sounds nice... I guess...
https://youtu.be/xVBaPZqoLkc?t=15m27s @scenic canopy
Cool talk. Worth a watch beyond the related 10 seconds
nice ๐
@glossy inlet since that's what you would do in most cases yeah, not sure if they check the archive for bad stuff first
@karmic niche someone asked me if I would consider browsing the Internet harmful and dangerous to your computer and if you should be scared that you might be infected by malware, virus etc ๐
Malvertising is probably the easiest way to get fucked today
don't even have to visit phisy sites
totally relatable to arma tools ๐
Btw. this talk is actually about the 2016 (2015?) attack on the Ukrainian power grid (see at the end) and... spoiler alert: the button "enable content" has played a big role in that ๐
So it's not like a purely theoretical problem that the guy is discussing ๐
there is a really nice presentation about hacking printers, basically the update mechanism for the printer is contained inside postscript code... but that can be embedded inside a normal PDF... but it has safeguards with recovery firmware and fuses! which is also exploitable from postscript
TL;DR; send your CV to HR, get access to entire network from installed backdoors into printers which can't be removed without replacing the hardware
you can easily become a serial killer using IoT devices today ^^
smart ovens or stuff like that, with barely any protection
oukej
And sadly I gotta say anyway that the engine development has more or less come to a conclusion :/
@dawn palm your time has come finally ๐
no. never saw that
RVExtensionArgs what exactly is that returning int for?
@nocturne basin https://community.bistudio.com/wiki/callExtension
Need wiki feedback on rewrite of https://community.bistudio.com/wiki/Extensions <-- original page
please check: https://community.bistudio.com/wiki/User_talk:X39 <-- rewritten in here
I think some words about getting your extension whitelisted would be cool ๐
never did that simply because i never needed my extensions getting whitelisted
thus cannot add that information
or more: cannot add it reliable
Also thought about that. Thought to just link to the battleye page about whitelisting in the FAQ.. But there is no battleye page about whitelisting ๐
https://dev.arma3.com/post/sitrep-00109 it is contained in here
in case somebody already did that, would be neat if you could write some paragraph about it
otherwise i will just take the info from there
https://community.bistudio.com/wiki/User_talk:X39#Getting_your_extension_whitelisted_by_BattlEye added a section about it
maybe Torndeco or the ACE guys know more about the process?
already anotated torndeco in #community_wiki
Since Arma 3 1.46, extensions need to be whitelisted in order to get loaded.
"...when BattlEye is enabled"
Using strncpy in the C++ / Visual C++ example is a bad idea because it will zero the bytes at the end. We've had this discussion already, I know, but it's easy to just copy/paste the example code and then forget about it for the next year ๐
Feel free to suggest something better @karmic niche
For Visual Studio, IIRC strncpy_s works correctly. It was used in an old revision of the wiki page @nocturne basin
That or you can reuse the strncpy_safe from the C example
Only viable on Windows
Yes, that's why I said in the C++ / Visual C++ example ๐
Strncpy safe Was kinda rejected by Dedmen
Strncpy with output minus is enough though
Will work
It's supposed to be a minimal example. Thus I would rather keep it minimal than top performance
While I understand that and fully agree, people will assume this is the right way to make calls; they will copy that code to check if a "hello world" extension works for it, and then probably move on to extending it, without remembering to replace strncpy with something else because if it ain't broken, don't fix it!
And if the other examples either for C or C++ with GCC have the strncpy_safe used instead, there is no point in having strncpy just for Visual Studio there
And it's good to have overflow bugs in whitelisted extensions.
It's even better to have backdoors in signed Windows Kernel Modules! cough Capcom cough
Also I just "got" your username.
could you please make up your mind now @glossy inlet @karmic niche
I'm on the "give an example that is safe AND performs well, even if more complicated, because that's not much code anyway in this case" team.
it is safe
though ... now i also added the missing dest[num] = '\0'
which means now it really is safe for usage
That's why I said AND performs well
same thing here
strncpy + a single write at the very end
anyways, https://community.bistudio.com/wiki?title=Extensions now contains the rewrite
The strncpy(num -1) will do a memset(0) for the whole 10239 bytes on each call because num will be 10240
Well, not literally but you get what I mean, I hope
That's the padding at the end that I was referring to, when I was talking about performance
feel free to replace it with something better which is available in the std library
for me, that page now is pretty much done simply because i moved it into the Extensions page
ohh ... crap
forgot something ๐คฆ
strncpy requires an additional include
remember to check the "minimal edit" checkbox
For Intercept I ended up using std::copy/std::move for everything. But MSVC doesn't want you to use that with raw char pointers.
@nocturne basin the something better is strncpy_safe if you don't want to use strncpy_s, I already said that
you can argue about it with @glossy inlet
i personally do not really care if i use one or the other
That's why I don't understand why you're using strncpy_safe in C but insist on using strncpy in C++ examples
we already talked about that a couple weeks ago ^^
that actually all belongs to #community_wiki
btw.
- as i said: do not care, tell me what i should use and i will use it
@nocturne basin great improvement! the examples are a lot cleaner than before
#community_wiki please @scenic canopy and ty ๐
sure!
did not wanted to start discussion about it in here but rather get people who are not commonly looking into the #community_wiki channel to look into the page to give feedback there or edit it directly
anybody remembers when RVExtensionVersion got added?
it's available on callExtension I believe
the info
saw that right now
for reason: https://www.gizmodo.com.au/2014/05/programming-sucks-why-a-job-in-coding-is-absolute-hell/ in case somebody needs a rant about programming
That's any job at any large company.
I'm guessing there's no way to stop RePbo from being able to de-obfuscate pbos? @dawn palm
I don't discuss anything in this channel, Telling you repbo does not work as advertised, and the reasons why, is just an invitation for the snipers in here to start a pointless war (and let the world know how clever they are). The intent being to write so many walls of contradictory text that the original message and the information it contains is lost to the people who might benefit from it.
noticed KK posted this http://killzonekid.com/arma-3-extension-tester-callextension-exe-callextension_x64-exe/
I prefer to have a executable build for my extensions and then just test them from the main function
that way I also immediately have the debugger attached.. Much faster that way
You can have a debugger attached to a DLL by specifying the hosting .exe.
yeah. But build, run callExtension binary, attach debugger, copy-paste callExtension line.
versus press F5 and done
No as in you can make F5 run a completely different executable.
I Still should get that Method into sqf-vm
@onyx helm don't bother with the obsfucation ;)
or, you can build sqf-vm yourself as i just added callExtension support to it (and the most updated release has no callExtension added to it)
thus you can now even test possible SQF methods that utilize callExtension in one go
without ever starting arma
Hello
Recently I have decided to pursuit the great art of modding in arma 3
Yet one obstacle I have encountered is lack of good, recent guides
Would love if someone pointed me towards some nice guides that are mostly still relevant and the best tools for the job
For now I'm mostly interested in retextures etc, you know, lighter modding although in the future I might try doing some bigger projects
I have IT and programming background and extensive knowledge of C++.
@stoic cove https://pmc.editing.wiki/doku.php is a good starting place - note also the Video Tutorials at the bottom. what setting are you interest in? modern, WW2, etc?
@vague shard I will probably make all kinds of stuff
for now I'm just messing around, making ahegao uniforms etc 
okey, thanks a lot
@stoic cove you May then want to first understand how sqf works
Talking About binary unary and nular operators and that sqf is nothing but a gigantic "math" expression with extra datatypes
He wants to do retextures and light modelling... You don't need SQF for that at all
Ohh.. Indeed
Just saw the c++ stuff and made assumptions
SQF is the one for scripting in arma, right?
I might do some bigger mods in the future that might include scripts, I don't have any real plans of what I want to do.
For now my plan is to just go texturing -> moddeling - > maps etc
And even if I need to learn SQF...it's just another easy langauge, only some syntax is changed. And it's ugly ๐
Sqf confuses at Start due to no actual language structures exist but rather operators that do the job
It's all a command
except the private keyword. And = is technically not a command but you can still call it that.
Can anyone think of more things that do stuff but are no commands? I think private is the only one.
private not a command? How do you define command?
a command that takes a parameter on right or left&right or none
private is a modifier of = and the equal is neither left nor right of the private
Agreed, but the "old" uses of private is still command?
Or rather. It's a pack of three private _var = belong together. But _var is not a command
private array and string are commands of course
which is why I specifically said keyword ๐
Sure, but that has low signal-to-noise ratio, since you would still have said that did you believe all instances of private to be a keyword ๐
Profiling how long the whole EachFrame EH takes using the profiing branch is not enough for you?
Profiling each script function seperatly is not enough for you?
Profiling each scope seperatly is not enough for you?
Then welcome to the world of profiling every single SQF script VM instruction seperatly! (now also displaying time to the nanosecond)
https://s.sqf.ovh/Brofiler_2018-05-18_22-50-16.png
anyone know why WorkDrive would just fail to mount? .rpt claims "tasks were executed"
@glossy inlet Who wrote that article about random positions on sqf.ovh?
@dim phoenix
Interesting.. The layout doesn't show the author. Gotta fix that. Thanks
resolved my issue, WorkDrive.exe was running as admin when it shouldn't have been
OPTiX, I did. Anything wrong with it?
@dim phoenix All good, I read it and liked it.
I'm amazed by the donut
*oblong ring
Writing this made me learn one new thing.
That "oblong" is a word and what it means.
@glossy inlet looking great ๐
@onyx helm you can replace workDrive exe functionality with simple .bat file with subst p: "Z:\ArmAWork" in it
where of course you put your own path for your work folder
I just took the time to refactor our BattlEye Golang Library to, well... be better in terms of go code structure and quality which will directly benefit our ongoing gorcon rewrite.
If anyone here is either currently using this or was looking for BE Go Bindings, check the changes and feel free to get back to us: https://github.com/playnet-public/battleye
Hi together,
I made a Discord Bot which starts /stops / changes config /etc. from my Arma 3 Server.
It is written in Java and works. However I want to know if there is a way of grabbing the Console Output of the Arma 3 Server?
on linux the console output goes to stderr for RPT and stdout for normal log that would show in the UI on windows
Thanks. Will have a look on it later
and for windows you can read the RPT file
Windows console output is in a different file though
Although, its easier to parse rcon output, if BE is enables and you need the console log
@hollow granite how can you parse the rcon output
because I could read the rpt log but I want it to be "live"
and then I would have to keep to rpt log open
Well, use an rcon client implementation and connect to the rcon port of the server
As for how you do that - there are a lot of ready libraries available
There is a list along with the protocol description here
But, plenty of implementations not mentioned here, so if you simply google something like "java rcon" i guess you will find plenty more
BE RCon is different tho
But idk what is send via this RCON port. Do you know if all Console output is sent through it?
@hallow rapids never.
Selfbot detected ๐ @glossy inlet
I deny all claims made
You must be telling the truth, obviously!
you're not a furry @glossy inlet !
๐ข
@glossy inlet hmm? I typed vim in to the browser instead of the console, if that's what you're on about? ๐
yush
removed it pretty much immediately though so either you have a very quick eye or you're caching something ๐
I have two eyes. One is always ready to catch anything that I might miss
hehe ^^
//--- Upload
_uploadData = format [
"action=update-wounds&mise=%1&hrac=%2&data=%3",
_missionName call bis_fnc_filterString,
profileName call bis_fnc_filterString,
_missionResults
];
["Uploading '%1'",_uploadData] call bis_fnc_logFormat;
diag_radioHttpPostLog [
"http://splendid.bistudio.com/wounds.php",
"application/x-www-form-urlencoded",
_uploadData
];```
seems like BI did some tests with stats logging (from fn_diagHit.sqf)
also some ingame issue reporting to their jira instance along with screenshot upload ๐
never saw that diag_ command in Intercept.
They already had direct reporting to their bugtracker in a BIS_fnc for a long time. I guess that's for QA
well above isnt new. so you may refer to the same. another approach in their functions seems via htmlLoad
guys, is there any tool like Silent Map Converter up to date and working?
Anyone know any reason why the exported EMF files create a font resource and then do not use it?
Apparently it also creates a gazillion brush/pen resources that are not used either.
Anyone here interested in integrating my debugger into VS Code? I'm currently rewriting parts of my Debugger to work with Intercept. But as Arma.Studio development is at halt while noone interested in using it, my debugger would go to waste. And a Debugger without a Interface isn't that useful.
The API to the debugger is JSON encoded strings via a NamedPipe.
Example of such a API message for when a breakpoint is hit: https://gist.github.com/dedmen/b3079dbd22d761c0c98e1b957432672e
I don't know JS enough to make it on my own. And I also don't have enough time for it.
Sounds like an interesting project, I've never written an VS Code extension but I do have some nodejs knowledge. Do you target into some release date? Liberation takes most of my after work dev time currently.
No targeted release date. Just don't want to let my debugger rot away unused
Maybe dev of vscode-sqflint will be interested.
can it be combined with Eclipse too? ๐
sure. As long as you can do JSON over NamedPipes
Maybe TCP in the future. But not soon
@sick verge are you interested?
If anyone is interested I made a Discord server for development questions https://discord.gg/vbFje5B There is no wiki for the API and I don't have time to make a good one :x
The sqflint dev is looking at implementing it into VS code. Thanks for the tip
Awesome ๐
@vague shard yeah I'm going to look into this
@vestal jewel if you still need help with Rcon feel free to get in touch.
We got an open source implementation for speaking to be rcon and are building a solution to manage server using it. Depending on what exactly you need i guess we can help
should be a fairly easy read to figure out how it works if you want to write your own
oh yeah... not my idea, blame Vipeax ๐
Blizzard sueing it already :D
@hallow rapids I don't why I always had some issues with your library
Maybe its not the library but the rcon protocol thats producing some weird behaviour
well I don't know what the issues are that you're talking about ๐
all of the issues that were ever reported to me have been fixed in it's almost 6 years of existence
the protocol implementation should be pretty much flawless but some extra stuff like connection loss detection and reconnecting might be a little bit flaky at times
i think the only real big thing was the stackoverflow stuff
but i see that has been taken care of now
oh yeah, the fix that's in is mostly just a quick hacky fix someone contributed but it works I guess ๐
yeah seen the commit lol
but i mean if it works
better than a crash
ill try it out again when i need some be implementation ๐
well you have your own implementation now so you should just use that ^^
i do? oO
oops.. I assumed that you meant you moved to something else with the had some issues
past tense and all ๐
nah, just fixed it in a different way back then ^^
not going to reinvent the wheel if your solution is working
OPTiX: i think the only real big thing was the stackoverflow stuff
Don't drag me into this, okay? ๐
would anyone like this released? i got sick of looking up all the arguments and their format for making addactions when i or mission makers needed them so i made a generator tool https://puu.sh/AzprT/4475e8d3e9.png
@harsh steeple pretty sure people find it useful. however #arma3_scripting and the forum is probably more the audience
Looks more like it could be a web-tool.
@glossy inlet aren't you supposed to advocate for C++? ๐