#arma3_tools
1 messages · Page 34 of 1
I'm having a hard time seeing where UDP calls fits within a Django app 
seems like something you would want to run within a worker application
It's two separate apps. Don't mind the django part (for now)
And it's exactly what I'm doing
if it's a separate worker, do you even need asyncio?
Why not? Asyncio is supposed to be used with programs that do many things concurrently and which are IO-bound, which is exactly the case
6k independent UDP queries, parsing and acting upon the result at the end
And it's just after I started that I've noticed the overhead so now I'm trying to figure out the real cause. If there is no workaround, then I'll probably rewrite it synchronously +epoll 🤷
One thing that I know not to do is to spawn 6k threads 😄
Maybe the cost of 6k objects is more than the cost of the underlying system's socket thing, maybe it would be more benefitial for lower numbers 🤔
Basically the part creating 6k udp endpoints, running all the constructors, etc seemed to take most of the time.
So... maybe you could make some pool/cache of such objects (not sure if it's possible) in advance
I think that's what I did and it was slow nevertheless (I mean: I did have the pool of connections but I'm not 100% sure what part of that pool I did benchmarks on before disabling the pool for testing purposes).
I'll redo the tests in the near future
@karmic niche it's official now, https://www.scaleway.com/en/object-storage/
Anyone know of anything to replace R3 (AAR web thingy)?
not sure if this is the right place to put it, but im trying to pack all folders in mytag folder using my build batch, but im getting https://gyazo.com/c203386eed945769d22c9bd20cf08739
set tag_folder=mytag
set /p pack_client=Pack Client [Y/N] :
if /I %pack_client% == y (
for /d %%i in (P:\%tag_folder%\*) do (
echo %%i
pause
"C:\Program Files (x86)\Mikero\DePboTools\bin\MakePbo.exe" -P!Z=default %%i E:/@%tag_folder%/addons/%%i.pbo
)
)
why u batch, y u no powershell :U
I already have a batch file i made a while ago that does mission / servermods, just trying to add the clientside mods into it now
I can build with pboproject by just selecting the folder, but can't seem to get it working with makepbo
well it seems that pboproject is complaining about wrong options being passed
maybe it prefers backslash over slash?
set tag_folder=mytag
set /p pack_client=Pack Client [Y/N] :
if /I %pack_client% == y (
cd /D P:/
for /d %%i in (%tag_folder%\*) do (
"C:\Program Files (x86)\Mikero\DePboTools\bin\MakePbo.exe" -P!Z=default %%i %%i.pbo
)
)
``` works .. but
```sqf
set tag_folder=mytag
set /p pack_client=Pack Client [Y/N] :
if /I %pack_client% == y (
cd /D P:/
for /d %%i in (%tag_folder%\*) do (
"C:\Program Files (x86)\Mikero\DePboTools\bin\MakePbo.exe" -P!Z=default %%i E:\@mytag\addons\%%i.pbo
)
)
``` doesn't.
have tried with and without quotes for the path
@glossy inlet
this is what I use for packing my mission + server. and it works fine.
for /d %%i in (%dev_dir%\server\*) do (
for /d %%* in (%%i) do (
call pack.cmd %obf_type% %%* %active_dir%/@Server/addons/%%~nx*.pbo %obfusqfkey% mod
);
)
for /d %%i in (%dev_dir%\mission\*) do (
for /d %%* in (%%i) do (
call pack.cmd %obf_type% %%* %active_dir%/mpmissions/%%~nx*.pbo %obfusqfkey% mission
);
)
cls
I tried using the call pack.cmd into my client mod. with some extra debugging
set tag_folder=mytag
set /p pack_client=Pack Client [Y/N] :
if /I %pack_client% == y (
for /d %%i in (P:\%tag_folder%\*) do (
echo %%i
for /d %%* in (%%i) do (
echo %%*
echo %%~nx*.pbo
pause
call pack.cmd OBF1 %%* "E:\%tag_folder%/addons/%%~nx*.pbo" %obfusqfkey% mod
);
)
)
``` it seems to show what I need it to. but same issue
P:\mytag\mytag
P:\mytag\mytag
mytag.pbo
Press any key to continue . . .
MakePbo x64UnicodeVersion 1.99, Dll 7.29 "mytag.pbo"
-$
-P
-Z=default
-\mytag\mytag
Syntax: MakePbo [-option(s)] pbofolder [FolderAndOrFile[.pbo|.ebo|.xbo|.ifa]]
I'd say just use powershell 😄
would have to get my head around it first >.>
-\mytag\mytag maybe something to do with this ?
set tag_folder=mytag
set /p pack_client=Pack Client [Y/N] :
if /I %pack_client% == y (
for /d %%i in (P:\%tag_folder%\*) do (
for /d %%* in (%%i) do (
call pack.cmd OBF1 %%* E:\@%tag_folder%\addons %obfusqfkey% mod
);
)
)
``` got it with this
"C:\Program Files (x86)\Mikero\DePboTools\bin\MakePbo.exe" -P -! %input_dir% %output%
why are you going with some filtering batch?
is there a PBO/Signature limit?
like can A3/Steam no longer handle it when you have too many at some point? (in one modfolder)
A multiplayer server might have issues displaying its mod list if it has too many, but idk about the game itself
like checksignatures even with deep returns clean
but the game on multiple servers complains
the reason i am asking about the limit is the rpt log has some sig overflow messages next to it - otherwise ive seen them only at the top of the rpt
one notable thing about this very one pbo is that it has no prefix set in the pbo header
if someone knowledgable with c++ could help would be appreciated, I have my extension working, just trying to allow split returns if the input is to much for arma
void _EXTENSION_STDCALL RVExtension(char* output, int outputSize, const char* function)
{
std::string test = "some long string";
std::string tester = "----START----" + test + "----END----";
#ifdef _DEBUG
std::string tester = "----START----" + test + "----END----";
std::cout << tester << std::endl;
#else
std::string tester = test;
#endif
auto nMaxReturnConsumption = (A3::DataTypes::uint64)(0.8 * outputSize);
auto nParts = tester.size() / nMaxReturnConsumption;
bool bIsMultiPart = (nParts != 0);
if (!bIsMultiPart)
{
std::strncpy(output, tester.c_str(), outputSize - 1);
return;
};
std::vector< std::string > results;
while (tester.size() > nMaxReturnConsumption)
{
results.emplace_back(tester.substr(0, (size_t)nMaxReturnConsumption));
tester = tester.substr((size_t)nMaxReturnConsumption);
nParts--;
}
#ifdef _DEBUG
for (auto i = results.begin(); i != results.end(); ++i)
{
std::cout << *i << std::endl;
std::cout << "================================================================================================= = " << std::endl;
}
#endif
std::strncpy(output, "test", outputSize - 1);
}
``` the
std::cout << tester << std::endl;
auto nParts = tester.size() / nMaxReturnConsumption;
You are ignoring the rest.
tester size 5 with nMaxRetCons of 2. 5/2 == 2. Now you send 2 packets of 2 characters. but where is the 5th character?
So if you have just a few characters too many, nParts might be 1, and IsMultiPart might be false.
nParts--; is that just for debugging? it might go negative
results.emplace_back(tester.substr(0, (size_t)nMaxReturnConsumption));
tester = tester.substr((size_t)nMaxReturnConsumption);
you are creating copies of the text here, which is probably not a good idea. If you have c++17 you can just store the long string once, and do all operations with string_view's
for (auto i = results.begin(); i != results.end(); ++i) c++ has a foreach loop.
for (auto& i : results)
it deletes some of the output
what parts? I assume end?
Yeah both in your nParts and in your while loop you are always skipping the end
while (tester.size() > nMaxReturnConsumption)
Lets again take my example with 5, and maxConsumption of 2.
First time this loop runs, you take two away, 3 left.
Next run you take two away, one left.
Then the while condition checks while (1 > 2)
Thats false, while doesn't execute. And it just skipped your last character
also why only 80% of outputSize? You can use the full space
no
then you check 1 >= 2
is 1 == 2 ? no
size_t nMaxReturnConsumption = static_cast<size_t>(outputSize) -1;
std::vector< std::string_view > results;
std::string_view tempString = tester;
while (tempString.size() > nMaxReturnConsumption ) {
results.emplace_back(tempString.substr(0, nMaxReturnConsumption ));
tempString = tempString.substr(nMaxReturnConsumption );
}
if (!tempString.empty())
results.emplace_back(tempString));
#ifdef _DEBUG
for (auto& i : results)
{
std::cout << i << std::endl;
std::cout << "================================================================================================= = " << std::endl;
}
#endif
This is how I would do it. But you'd need to make sure that tester stays alive until all parts of it are returned, as you are not creating copies of it
ill be putting it in a map
then getting the map entry by id
wouldn't it be outputSize - 1 just thats what the example I have uses on the output.
Yeah that would work.
If you use my variant you need to make sure that
std::string_view tempString = tester; the tester is a reference to the string stored in the map.
wouldn't it be
outputSize - 1just thats what the example I have uses on the output.
yeah, the null char at the end, maybe. Not sure how arma handles that I didn't go to the limit yet.
There I edited above with the -1
so take tester get the max text i can from it, then replace the tester with the remaining string.
no?
probably better if i rewrite that.
std::map<uint64_t, std::string> waitingMessages;
void _EXTENSION_STDCALL RVExtension(char* output, int outputSize, const char* function)
{
std::string test = "some long string";
std::string tester = "----START----" + test + "----END----";
size_t nMaxReturnConsumption = static_cast<size_t>(outputSize) -1;
std::vector< std::string_view > results;
std::string_view tempString = waitingMessages.insert({123, std::move(tester)})->second;
while (tempString.size() > nMaxReturnConsumption ) { ....
}
->second returns the value which was just inserted into the map, a reference to the value inside the map. Making sure it stays alive
what i was going for was something like
private _id = "someExtension" callExtension ["request", ["args"]];
private _response = "";
for "_i" from 0 to 1 step 0 do
{
private _res = "someExtension" callExtension ["fetchResponse", [_id]];
if (_res isEqualTo []) exitWith {};
_response = _response + _res;
}
```obviously accounting for the array return from RVExtensionArgs
for "_i" from 0 to 1 step 0 do you mean... while {true} ?
same thing >.> one is slow, the other is not
I could always pre split the strings into a vector, and then pass back the vector.length, and loop _x times.
std::map<uint64_t, std::vector> waitingMessages;
then remove 0 on each fetchRequest
thanks for all the help though @glossy inlet I shall try a few things today.
There was a discussion here about publishing mods to Workshop on linux but I don't think anyone gave any answer eventually (can't find it, anyway).
So is there a consensus on how to publish mods to Workshop, directly from CI? (preferably on linux)
@feral nova I didn't wanna recommend you that as that only comes with the next update. but.. the update came 30 minutes ago.
https://community.bistudio.com/wiki/callExtension
You can just use a extension callback to send all the data back
Is there any information regarding the memory guarantees with the new extension callback? Does the engine copy the values you give it or does it free them? Also, does the outputSize limitation apply to data sent back with the new callback?
@glossy inlet just been looking at that, what does the decorated name need to be for the 32bit version ,couldn't find it on the wiki
_RVExtensionRegisterCallback@4
``` nvm i got it.
@lethal salmon
Does the engine copy the values you give it
yes
Also, does the outputSize limitation apply to data sent back with the new callback?
I don't think so actually. Wiki says nothing about it.
19k chars so far, still going.
after some testing, I think the limit is going to be way out of normal usage, if there is even one at all.
started with 1million chars increased by 1,000,001 each time.
Just have an extension call where you request x bytes and it callbacks with that.. Then run a binary search for the permitted size from sqf
and it was still returning the right length after 30million characters.
yeah as I said, afaik there is no limit
limit will be 32bit signed int max.
I wonder what happens when you go over that :D
But I guess you're not gonna try to allocate a 4GB string
@glossy inlet thanks for the info
@Sparker instead of a switch, bake it into your pbo Pipeline using sqf-vm
What do you mean @nocturne basin ?
@karmic niche steamcmd or steamworks can be used on Linux
@cinder meteor preprocess then Pack
bake it into your pbo Pipeline using sqf-vm
ArmaScriptCompiler is already doing that using sqf-vm. It preprocesses and precompiles. Sadly my optimizer is a bit broken so the precompiled bytecode is not bug-free when optimizer is enabled
Not sure if such increase in complexity is worth the benefit
Also ATM I have lots of code tied to macro _SQF_VM, it will probably need some change because then SQF-VM will be used both for tests xor precompilation for arma
I don't think programming languages deal with OOP objects/structs belonging to different memory address spaces?
I'm asking because I'm trying to implement the concept of a class being in a missionNamespace or uiNamespace, but it brings lots of problems. I think that the problem of having two variable namespaces in arma would be equivalent to having for instance two separate RAM devices in a computer. 🤔
they are just different classes at different memory addresses?
thats what "two seperate RAM devices" in a computer are too
hmm... problem is more like, I have an object ptr, but I have no idea if it's a pointer to a struct in uiNamespace or missionNamespace 🤔
Add it to the pointer
make it an array of [namespace,address]
in normal programming you just stick it into the higher bits in the pointer
Yeah I guess so, adds more overhead but uh, what else can be done 🤷
well in fact since my ptr is a string, then I can use a certain character as indicator of in which NS it is
nice, thx
well no, then I would have to resolve namespace every damn time I want to get a variable value, too much overhead for SQF... probably if I had a proper compiler (like @nocturne basin has with his OOS) instead of that macro shit I am using, this would be possible to be resolved at compile time :/
Skipping mods and signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.
Skipping mods and signatures due to overflow flag being set.```
does the amount of the msg display indicate how many mods cant be transmitted?
@cinder meteor you may appreciate some upcoming "feature" of SQF-VM for your _SQF_VM trouble
CLI: Added --define NAME[=VALUE] (-D NAME[=VALUE]) allowing to add definitions to the PreProcessor
Yay \o/ that's cool, don't remember if we discussed that before but I certainly recall wishing for such a feature!
You may appreciate me starting to dig the VSCode API to implement extension which provides SQF VM tasks 😉
kinda :D
problem is that i already can feel the PITA that may arise due to the bugs this could potentially surface 🙈 🙈
enough for a lazy-tuesdaynight half-hour dev-time
More bugs than our project has found? I doubt

@vague shard I'm pretty sure that message happens once for each overflowed server.
hm i was using direct connect - could be i started out in friends tab
anyhow sadly the far too common meaningless/pointless rpt message
SQF-VM by @nocturne basin now has a VSCode extension!
Over the time SQF-VM has helped us with our project a lot, so I thought that other developers should also have this feature in the editor.
https://marketplace.visualstudio.com/items?itemName=Sparker95.sqf-vm-vscode
Big thanks to @fickle void for setting up the tasks, I only ported the tasks.json into VSCode task provider format 🙂
@cinder meteor in what ways did it help you most? (vs other similar IDEs and tools)
@vague shard because it can run SQF right in IDE. We have also set up some validators at CI.
so live typing code to test?
are your validators available?
No, there is no live typing ATM, I would have to implement the vscode language server for that, maybe some other time. Instead now one needs to re-run the task manually (press F1 and select it from the list). Still if there are errors, they will be highlighted in the editor's screen as vscode parses sqfvm's output.
You can look at how our validation stuff works at my github, there are a bunch of unit tests organized with #ifndef _SQF_VM macro
But thinking more of it, currently cfgFunctions won't be recognized by the tool unfortunately, still it's possible to compile and run an individual file
so live typing code to test?
Actually, I don't quite understand what you mean. I would understand live typing to see syntax errors, that's what I meant in my reply above. But live typing to test? Would it have to re-run the script periodically?
Big update to subscriber tools
Many upgrades to be compatible with (and take advantage of) win10
Too many fixes to list here, they are documented in the appropriate fixes.txt
Many thanx to the large number of people who offered suggestions, improvements and fixes for this release.
Again, too many to list here, (and if I missed someone, it would offend) you are all credited in the appropriate fixes.txt
Enjoy
will do a clean CI build to check for any issues on our SFP mods 🙂
Anybody else got the problem that a lot of custom units increase the delay to get into Zeus by several seconds? I got a patch deep in the engine that kinda fixes that but also creates small mem leaks. Anyone interested or is interested in improving it? Maybe @glossy inlet?
lot of custom stuff always means the game has to load lot more stuff so Id guess its to be expected that it loads longer
also its possible your custom stuff has all kinds of errors that make it take more time
I am completely aware of that, but jumping into Zeus with RHS and CUP takes me around 7s. With the Patch I am currently down to 0.5s by just reusing the already parsed list.
I have seen your message somewhere else already, and I have not replied because I don't know. Please no ping thonx
I am also working on a patch for the zeus lag, without memory leaks
Has been laying in my dumppouch for 2 weeks tho
What is your approach to it? Any hints?
Probably doing same as you do
Violating the EULA will get you banned here, so I'd be careful about your wording
I won't give any more details about that.
Latest version of Mikero tools appears to be flagging ```class Throw : GrenadeLauncher
{
muzzles[] += {"ML700_frag_grenade_muzzle","ML700_krak_grenade_muzzle"};``` as an error, when previous version allowed it. Any idea if this is a new bug or something on my end?
error itself
Warning: cannot find inherited array `muzzles` ML700_Weapons\Grenades\config.cpp has errors. See (noisy) output for reason.
same issue here
I posted same thing on Mikeros thread. Should we ping him?
I've been speaking to him for a few hours now 😄
I think this is the last quirk since the latest release which isn't hotfixed yet
Okay, just wanted to make sure hes aware. Im sure the reports will come flooding into the poor guy
just have to pack with....addonpacker for the moment shudder
😱
make sure to get the latest fixed version, some nasty bugs in the initial one
but if you're blocked by the muzzle thingy it won't help 😦
I literally just updated 5 minutes ago
you missed the worst ones then 😄
Oof what happened?
rapify threw a fit on model references lacking .p3d in end of string. 64bit binarize died. addons with a source folder crashed the application 🙂
those are all fixed now, great and quick feedback from mikero
I dont fully understand all of it, but sounds bad 😄
all i know is i hit the button until the errors stop and then confetti happens
🎊
Exactly 🙂
just have to pack with....addonpacker for the moment shudder
just keep backups of the previous mikero tools version 😄
@thorny nimbus did you try to turn off ”warnings are errors”?
won't help 😦
obfuscated pbo now crash client, or it's just for me?
haven't heard about that yet, but sounds reasonable
Think I need to revisit armas fsm Editor
Iirc, the User experience was horrifying
FSM is terrible for AI, maybe you could make some <any other AI type> editor work and generate SQF code?
Like behaviour tree or utility AI or what other stuff is there around?
People keep using FSM because it's the only thing which has some graphical editor right now. Well and because the engine has some support for that, but really anything can be scripted.
Hearing FSM editor gives me Vietnam flashbacks.
You want to avoid that evil place at all costs.
I am not sure if a FSM is generally speaking faster or slower than an for "_i" from 0 to 1 step 0 loop.
An FSM should be better for something like a decision tree by the design idea.
Where better is "better to maintain / create". Not knowing the performance differences, I can not judge what's technically better
@nocturne basin FSM is an architecture which is commonly known as hard to maintain the bigger it grows, now there are better things available to guide AIs.
i think you can connect a text/code editor to the BI fsm editor, but overall its UI design is not great indeed
well ... FSM as a concept is perfect for AI actually ... but i really just mostly talk about the editor here
because
i created some state machine editor for work just recently
would be nice if such an editor could export both Arma FSM and CBA scripted FSM
but can't really parse scripted FSM reliably, as script doesn't really have a structure, such as the normal FSM
yeah export sure.
@nocturne basin if you check any article about AI, FSMs are not favored anywhere right now, except for super primitive things. FSM might sound good for you, until you try to create one and it becomes a mess.
theoretically, i do have to agree with you
however, on a practical level
no
FSM is far superior
but it needs to be boiled down for that
literally to the point where FSM decides about everything
Question is not if it can do things, but how to organize it in a modular way which can be reused and easy to maintain for developer.
I've spent some time with GOAP AI and it's quite pleasant to work with. But my implementation doesn't really need a GUI editor.
Another thing is a behaviour tree AI, but I personally haven't tried that, but other people claim that it's also OK.
@nocturne basin I think with "anywhere right now" he's referring to the whole industry, I too haven't heard of anyone going for FSMs like this, I wouldn't know why the industry would move away from FSM if it's as superior as you're saying
FSMs are everywhere :P
just that one might not immediatly notice that you have one
that is the fun part
a switch that does different things on different inputs already can be such a thing
i mean ... if one boils it down to the very end ... the thing we type on right now are also just state machines
ones and zeros that decide wether something is being displayed or not
and with only horrible toolsets (and there are no nice tools that allow easy integration for everything ... not even simple graphical planning) or PlainText formats ... then that ain't no miracle that all hate FSMs
I think this discussion has shifted into pedantic domain. Sure the total amount of states and transitions is finite, otherwise it would not be computable. And that's true for any AI architecture. It doesn't mean that any AI architecture is organized as an FSM. When we are talking about FSMs we have in mind something more like BI's FSM editor.
yup
in which case the question again is: would the FSM system in arma benefit from some editor that is actually usable
I think it could, BUT what would you improve? For me one of the problems with is is that I must type my code not in <my editor of choice> but in those edit boxes
something that btw. could theoretically be solved by just adding a simple "OpenWith" and a FileSystem Watcher
@thorny nimbus issue with muzzles should be resolved with last update btw 🙂
Oh did that drop last night/morning?
I got a couple of test versions yesterday and was able to finally confirm a fixed one
I saw that it's available on the updater tool now at least
you might have to disable "warnings are errors"
okay thank you 🙂
@nocturne basin RV engine exposes only very limited access to AI
one can do some with danger.fsm, maybe also things with formation.fsm and otherwise using plan sqf with waypoints, skill adjustment, movement and such
I think this discussion has shifted into pedantic domain
😎
you might have to disable "warnings are errors"
No. Not for this item anyway, it is only a heads up warning now that the += could not be converted to straight = so the binarised version of += is inconsistent and might not work for your particular inheritance tree. Also, thank you @scenic canopy for the effort you put into this.
oh, cool, time to change back to warnings are errors on our ci then 😄
as for fsm files, the gui code embedded within /comments/ is no issue for a rapfile compiler with the sole exception of some naughtiness they've done with linefeeds.
(and bis binarise will fall over, if it has any reason to look in an fsm file (sometimes masquerading as an include) because of the 'accepted' c convention of allowing trailing commas in arrays.
@fossil glacier Expanding on the minimum viable wiki example to add callback (C#):
https://paste.ubuntu.com/p/7RpydjhzYq/
Usage:
callback("test", "test", "test")
im getting a mikero error when extracting data http://prntscr.com/purz9c @dawn palm how can I fix this issue?
?
this be #arma3_tools
looks like mikeros tools can't open that file that it says it cant open
no
okay
solved.. btw. needed to unpack to P
😎
very strange system message to talk about privelage levels then, if that was all it was.
limit will be 32bit signed int max.
I wonder what happens when you go over that :D
But I guess you're not gonna try to allocate a 4GB string
Probably will tell you that you are over the limit https://community.bistudio.com/wiki/String
it should not be possible to do from SQF. But there is mooost likely some missed thing that still makes it possible. Also extension stuff might not check it.
I would much prefer if it was unsigned int, not signed. Its so aggrevating
At least the engine will work correctly with strings of negative length 🤓
hm 🤔 never tried what actually happens if you do that
Altho I too find it 'inconvenient' , the signed quality of an int allows for relative offset addressing. And offset addressing applies equally to memory (strings eg) as it does in the more usual form of file freads() and fseeks(). It is exceptionally useful to work backwards in a file, or a memory address, relative to where you are at the moment. The practical limit of a 32 bit system is 2gig, not 4gig, because of this. The c(++) function themselves have signed address ranges. So, no mater what you do, you hit that barrier.
You can of course apply the 64bit versions in the std library for functions that use offsets to get round this, but that generally opens a can of worms.
You don't use a negative offset for a string "length"
You don't say ;)
This chat makes me angry inside
Using Mikero tools is there a way to pack different files in a batch process? Aka I have folders
P:\Myaddon2
P:\Myaddon3``` and i want to pack them all at once.
of course. pboProject does that naturally. the pbo folders themselves should be in a containment folder, not, at the root of the p: drive
when you have a large number of your own pbos (as indicated above) it makes no sense to have them at root of P. they should, instead, and at the very least be using:
p:\mytag\pbo1,2,3
similarly, mutliple mods would normally be arranged in a sensible manner such as:
p:\mytag\thismod\pbo1,2,3,,,,
pL\mytag\thatmod\pbo1,2,3,,,,
it's eye watering and disorganised to have all pbos starting at root of a p: drive. After all, bis use p:\ca and p:\a3 for that reason
with the above arrangement of p:\mytag, you prevent others from overwriting your address space with pbonames of their own.
and pboProject will quite happily make every pbo in a mytag folder in a single crunch (if you let it)
@thorny nimbus you can also create a bat file with a list of folder to pack
@scenic canopy As far as im aware if i moved everything into a central folder id have to redo all the pathing across everything, would that assumption be correct?
unless you previously had a pboprefix which would enabled it, yep
i.e. if you have P:\souza with a $PBOPREFIX$ file that has Zephyr\Souza you could just move it to P:\Zephyr\Souza and it would work. Otherwise you'll have to change all paths
but I'm guess you don't have a $PBOPREFIX$ file
it's a way to declare the "virtual" paths inside pbos without having equal folder structure
yep
altough my examples would probably not work with pboproject anyway 😛
tl;dr; either change your folders+all paths or use a custom bat script to build
I don't think that would solve pboproject sadly 😦
it would probably only help hemtt and addon builder
for %x in (ml700_ace_compat ml700_avenger ml700_boxes) do (
pboproject -Engine=Arma3 -Key -Workspace=P:\ -P +Mod=P:\@ml700 P:\%x
)
something like that as a starting point
you'd probably want to add some error handling
and perhaps a pause at the end
for %x in (ml700_ace_compat ml700_avenger ml700_boxes) do (
pboproject -Engine=Arma3 -Key -Workspace=P:\ -P +Mod=P:\@ml700 P:\%x
if %errorlevel% neq 0 (
echo "Error building %x"
pause
)
)
pause
you could also add mounting of P: drive as required
in case you forget to run mapdisk.bat or so
and signing etc
more parameters in pboProject.DosMode.htm inside mikero docs
np!
some output might be missing since it only appears in pboproject's separate console
either run the gui manually or remove the -P flag to see it
is it possible to make buldozer/object builder load dta folder from another custom path?
like usually one is to repath it to the game dir
you still need to extract some files right?
you can always make a junction to somewhere else
i.e. P:\dta -> D:\Games\Arma 3\data
Profanity removed
profanity?
Think they meant me. I said I'm gonna mess with something but used a F instead
Wasnt aware profanity wasnt allowed since it's used alot in the discord but alright
Doesnt mean its being enforced until now I guess 😛
nah, has been enforced for atleast a year
I mean i can search choice wording and plenty come in for results, but alright no problem
It's good thing that i dont post here often.
I have a problem with my profanitys :)
obfuscation has been updated (credit @torpid narwhal)
to be complete here, obfuscation is now also available for DayzSA
+beta only. my tools now accept relative file addressing, saving you a great deal of bother. (under the covers they convert them to hard addresses for the engine)
BETA ONLY
obsfucation is sad
obfuscation is so much fun
If you say so
I haven't goofed around with windows api for soooo long, and constantly learning new stuff. Like my PE packer messing up the characteristics in the import table
It's the BI wiki "Code Best Practices" page, talking about obfuscation
that's relevant why?
It's indeed best practice to not obfuscate, but to "prevent" people from stealing your assets/scripts it has to be used...
And I put "prevent" in quotes because it doesn't encrypt it, which means people can still gain access to stuff if they really want to (and have the skills for it)
A actual encrypt method may soon™️ be a thing
How's that going to work? Is the Evo format to be published? Or do you have plans with intercept?
you mean ebo, no. And not intercept either.
Will be a extension thats loaded at game start and teaches the game how to read the encryption
I already built that for my unit a couple years ago. Last week I started extending and upgrading it to be useful for others too
Its actually less invasive than obfuscation. Pbo's can still be unpacked, and configs can still be looked at/learned from
teaches the game how to read the encryption
Heh, so many questions... :)
Is this going to be client-side as well? (or just to protect code on the servers)
If client-side, does this assume the "attacker" knows the encryption method but not the key? (i.e. the source is available because it's open source or has leaked somehow)
If so, how are you going to prevent grabbing the encryption keys on the client-side and replaying everything in a controlled environment? (by issuing direct calls to the dll by a program impersonating arma3.exe in order to be "taught")
Sharing too many details on it would make it easier for the attacker.
I'm using standard encryption methods, and different ways of retrieving the keys. And different keys too.
Technically you could have each file inside the pbo use a different key and encryption method
There will be two variants, a battleye compatible one to be used for public modpacks, and a private variant for modders who are just sharing beta testing content and the likes without battleye support.
Every build is special such that if you crack one, you don't crack the others and need to start anew.
So its not possible to just make a tool that's able to decrypt everything
Sharing too many details on it would make it easier for the attacker
Sure, I was just curious. So it depends on the the attacker not knowing what your extension is doing? (meaning showing the source would defeat the purpose of the tool)
Ah, okay. I kinda get what you mean
Yeah. Same as battleye, if people knew exactly what battleye is doing, it would be easy to circumvent too.
If you had the source, you could just jump in where the encryption key is passed to the encryption algo and just write it to a file.
Yeah, but battleye is doing something else than obfuscation so it doesn't really apply here
battleye is just raising the bar with packed/encrypted binaries running in kernel mode with tamper detection and all that shiz
I can give you a beta build if you want a reverse engineering nut to crack 😄
I think that tamper detection is the part that's more important in BE. It's meant to prevent cheating, not peeking into the code (but I may be wrong)
What you could do (but would be an overkill and a huge amount of work, I think) is to implement some kind of VM (like VMprotect worked AFAIR but for SQF) that would interpret the code and just call the C++ functions in the engine. Doing this, coupled with a VM generator would mean that you could create unique encrypted languages along with the respective VMs, per build, as you stated above.
Also since the VM would be tightly coupled with the engine, effectively just executing the code in that unique language/"architecture", there would be no actual thing to read prior to the execution of the code. 🤔
@glossy inlet client extension?
yeah
Meh
Meaning that even if you knew the decryption key used, you'd only be able to steal the code (you'd have the decrypting extension on the client-side anyway) and run as is but not to modify it
My main focus was to prevent model/texture ripping, where a script VM doesn't really help
If I wanted I could also just let people provide their scripts in sqfc format, that is pre-compiled bytecode. Would have a hard time modifying that too.
Also hiding scripts feels more like preventing people from being able to learn. So.. meh. I want to prevent stealing, not learning
I can give you a beta build if you want a reverse engineering nut to crack 😄
Open invitation ❤️ ?
yeah. PM me tomorrow
tidy
@glossy inlet what became of your live particle editor - is there a test version available or still WIP?
Its currently in use for a DLC project
That’s racist
@glossy inlet nice to hear its in use 👍
what is the scope/feature set so far? live tweaking of all/most params? based on config FX or also scripted FX? import/export?
one reason for asking is if its worth to start another project for this or not
live tweaking of all config params, with config export
only config FX, but scripted FX has the same or less params as config afaik
yeah scripted FX is less, but not sure if scripted has anything config dont
no import, or do you hold a setup in profileNamespace or sth - aka how to tweak one FX between game sessions?
It auto imports every FX from CfgCloudlets
there is currently no quicksave/restore implemented, but I wanted to do that
@glossy inlet if you look for a new challenge by chance, how about improving the mission loading from Eden so it doesnt take seconds, even with fast SSDs, each time for it to parse again all the folders for missions 🙏
you mean mission list loading? main factor is loading all the description.ext's and mission.sqm's to search for mission titles.
Its also TERRIBLE on servers with many missions. I'd love to, but I .. mh.. shouldn't be that hard, but I don't think I'll do it. Already have enough crap I burden myself with as it is.
wouldn't have any idea. last time i llooked you could use both via a hotkey i think?
there's no difference i am aware of or can remember, between 2d and 3d editing.
there is a difference it the config.cpp between the two. 2d uses cfgVehicleClasses and 3d used the superior CfgEditorCategories
to make them both compatible, you put in your config, the following:
{
blah,blah,blah
}:
class cfgVehicleClasses : CfgEditorSubCategories{};//2d ```
He's asking about converting the mission.sqm format (different format versions) for the old 2D editor (which you can only access via some hotkey combo in main menu I think)
I don't understand why anyone would want to do that 🤔 And I don't know of any converters
2d editor is way faster (even with SSDs)
if you dont need 3d placement or preview, (and script/configure most anyway) you dont need Eden editor
Anyone know how TFAR (and similar) take data from the game to be used in external software?
gone a bit flight sim crazy and it's the next logical step
Anyone got an idea why a javascript call to a certain IP and port would work fine when run on windows but not work when run on an ubuntu server?
Define: "call".
Ubuntu server? So that thing is not done with a browser? Again, define what you mean by that
I'm using a node module called gamedig
await Gamedig.query({
type: server.serverType,
host: server.serverIP,
port: server.serverPort,
maxAttempts: 3,
socketTimeout: 5000,
attemptTimeout: 5000
})```
That's the querry I use, serverType is TS, IP is the correct IP, port is the correct port (obviously otherwhise it wouldn't work on windows)
So you mean that you're using nodejs
yup
Maybe you have a different version of the gamedig library 🤷♂️
Since it's not an SSL connection (I guess?) you could try running wireshark (or tshark) and checking what is actually being sent on both OSes, if you like (kinda) low-level digging
problem is that I only have access to my windows system, the linux one is under someone else's control but it's my discord bot that's not working
🔮
Your guess is as good as mine, if you can't debug yourself. Maybe give that person a minimal version of your code, even without the bot at all. Just something that will init stuff, do the query and print the response and let him run that
But if it's someone else's computer and you have no idea what's running there it literally may be anything. Even something as dumb and simple as a firewall blocking the connection ¯_(ツ)_/¯
yea, firewall was my first guess as well but it turns out that the firewall isn't even turned on
and it's not the version, just downloaded the newest version that's also running on that linux server
Check if you (or that guy) can telnet and send anything to that IP and port. Again, back to the "minimal version that does X"
we can telnet to the ts server that we can't connect to but via a different port because ts
At this point it's more of a debugging issue than of a software issue
Mikero's tools:
obfuscation:
two new levels added to keep the thieves awake at night for dayz and arma both. (Credit Thurston)
1st level 'fixes' bankrev it can't decompress
2nd level improves ADDON shattering considerably. (not missions)
60% reduction in pbo size from previous versions.
detex:
improved syntax screen
added -brief and -noisy listings
you folks really need to use this tool. Binarise (as usual) ignores errors here.
makepbo (dll)
added fsm & texheaders.bin to non compressible by default
rapify (dll)
improved relative file addressing
improved missing file detection for some rarities.
dll:
improved several error messages for context (continuing w.i.p)
Enjoy
@subtle smelt await is only supported with newer node versions
Just a little extension I wrote over the weekend. Not ready for release. Friends only: http://steamcommunity.com/sharedfiles/filedetails/?id=778372491 Benefi...
is there something along these lines available?
Seeing that video is 3 years old, before the extensionCallback, it should be much easier to make something like this and better now
would be quite useful to have the console (execution and display) separated from the game. should make it always ways easier to do things outside a running mission
is there something along these lines available?
I have a web based one
what dont you have?
A good job
https://discordapp.com/channels/105462288051380224/105464579600977920/546539640308367372
Works in desktop browser, or on phone/tablet if you want.
But currently the remote exec stuff isn't working correctly I think, need to do a big refactor on it.
and do something to the design 🙄
maybe I should add some basic css framework to that 😛

Why would you use a framework? You can write perfectly good code all by yourself! - said no pentester ever
pboProject update:
+AppID can now be baked into p3d or wrp. It is also available on the cmdline version of this tool. If you don't make dlc, it's not that interesting, but the big arma teams are, already. No reason why others won't be following their lead.
(credit @vague shard)
+Sounds now (optionally) play at end of crunching. (credit @azure silo)
if you've wandered off to make coffee while a wrp is being processed, you'll be pretty damn pleased you're getting called back.
is there a way to force Eliteness to pack .hpp files into my PBO? reason I ask is because, while it replaces #include commands in config files just fine, it doesn't do it in script files - and due to my .hpp file not getting packed into the PBO, the scripts can't find it and end up missing a ton of vital macros, causing them to break
alternatively, if it could just process #include commands in SQF files, that'd also be great
pboproject (one of mikero’s other tools) has a default list of files to exclude based on extension, hpp is one of those
good point, that works; I'm guessing there's just no such setting for Eliteness then?
try renaming them to .inc
I assume eliteness just uses the exclude list from registry.
aka change you settings in pbo project, then go back to eliteness and try
@wind elm yeah I ended up with that solution, I initially went for .ext for syntax highlighting, but after some investigation I noticed BI used .inc too, so I did aswell
also just a fyi, but Eliteness doesn't seem to share the registry, at least not with pboProject @glossy inlet
Why even use eliteness for packing, thats not what it was made for
Hi, wrote a smol script to convert a .xyz into a .asc ready for TB and TP https://github.com/zgmrvn/xyz2asc
My current workflow is World creator 2 > Terrain Processor > Terrain Builder and WC2 doesn't export asc so I needed something to do the job between WC2 and TP
because it's easy to use (GUI wise) and doesn't require a P drive to be mounted 😛
All comments re hpp and eliteness and registries are correct. Eliteness is simply a dumbed down wysiwig. Support for eliteness pbo making will be removed in the near future. The last time it was useful, was for flashpoint.
hpp is normally associated with cpp. unfortunately sickboy, the sqf expert of the time, began calling sqf includes hpp too, (obvious only in hindsight, he should have used sqH).
To ameliorate this, and yet satisfy the general case of includes of any type are totally useless in a pbo (having been binarised out of existence), pboProject gives you a choice, of excluding hpp, OR, h, or none, or both. Which strategy you choose to use is up to you. If, for instance, you choose to use hpp for sqf, (really not a good idea), then you can reserve (and exclude) .h for cpp purposes. The exact opposite, incidentally, of what it should be, because, unfortunately, hpp is almost always used for sqf out of bad habits.
removing sqf based hpp, is almost impossible. too often, that same include is used by another pbo.
You can of course (and probably should) exclude (dot)inc under the same constraints as above. Nothing is hard-wired, everything is a preference choice for your kind of workflow.
similar comments, incidentally, apply to description.ext, except no included file can ever be excluded. for that reason, good workflow says, call the included file anything else but. h or hpp
extractpbo update:
extractpbo will (now) refuse to extract a pbo whose destination folder already exists.
This will remove the nightmare scenario of over writing your source folder on the Pdrive. It also has the added benefit of ensuring that the destination only contains data from the pbo. Not, that + any crud that might be left in there.
This was a fix, a long time coming, because it's actually quite difficult to determine what the destination folder is. (it's only known after extraction begins, and changes on each relative address in the pbo)
I'm having a problem with ARMA 3 Tools Add-On Builder. I updated my mod folders, but the compiler isn't recognizing that the new folder is present - it keeps compiling with said new folder missing...it's done this to me in the past and the solution was to rename my main mod folder...but now not even that is fixing my issue...
wait...might have fixed it...needed to define specific file type to transfer over...my .ogg audio files...
yup - that was the issue; needed to define .ogg as specific files to transfer in ARMA III Tools Add-On Builder options
Addon breaker is a bit risqué to use
BinPBO.exe here - old school
of historical interest to some, binPbo is and pboProject was (initially), written in 02script
holy mother of getSelectedFaces
yeah, the 02script has a useful collection of pre-built dialog panels plus a few more sqf commands that .sqf/.sqs lack. I stopped using it due to bugz never getting fixed. Prolly the same reason vbs changed to their own with terrain builder (alias visitor4).
proxy p3ds are now obfuscated (credit @limber moss & @vernal pivot )
Mikero's Dos Tools:
The free version has been updated to the latest subscriber snapshot.
Enjoy
@dawn palm is everything ok with detex or dll after latest update?
http://prntscr.com/q8xyp2
well, depbo was reinstalled already
i have depbo64.dll with version 7.30.0.1 and it's from latest depbo installer 7.47.0.17
how can it be 'installed already'? @scenic canopy has told you what the problem is.
Use the bytex updater. anything in red is stale
@dawn palm
Ok, I'm really out of ideas.
How do I properly run the latest mikero tools when I'm not on logged in as admin on win7?
I replaced the mapdisk.bat with the one from here: https://pmc.editing.wiki/doku.php?id=arma3:tools:setup-p-drive
I ran mapdisk normally and as admin.
I installed the latest mikero tools.
PBO project does not run unless I start it as administrator. If I try to run it normally it just gives me program has stopped working message.
When I run PBO Project as administrator then it starts fine, but it does not see the P drive.
I wrote an e-mail to you, responded to your automated anti-spam message, but I never got any reply.
No, I will not do my modding on admin account. I would sooner go back to the crusty old version of mikero tools that at least worked, even if it means I will be unable to pbo some stuff
I never got an email. sorry. my anti spammer has worked like solid gold for several years, so i have no idea what happened there. Normally if you respond to that spammer, there's no problem ever again.
And yes, you are absolutely right not to use admin mode to run any app, not just mine. The idea of doing so is terrifying.
The fact you are not 'seeing' a p drive in admin mode means mapdisk did not run AsAdmin.
put another way: Admin is simply just another user on your pc. and each user, without exception, has a different virtual drive (by convention, it's p: but need not be)
This last symptom you describe of running pboPro as admin, is a classic instance of there simply isn't a p: drive for admin. So i'd start right there and figure out why not.
This is the simpler of the troubleshooting you can do, and once fixed, will probably fix the basic error of 'stopped' working.
I'm not in front of your pc, i don't known what User Access Controls you have, nor the file and drive permission you have for each user. All of that, is down to you.
i can't remember anyone else mentioning any problems running under win7. Subscribers have been running these new installers for about a month now.
and it often helps me if you mention these are subscriber or free tools.
Free version
YES! Finally got it working. I had to completely disable the UAC and install the tools as the user (changed from standard to admin). Now it works as it should, P drive and all.
Funny thing is, now the tools "stop working" when I tried to run them as admin (just to see what will happen).
Also, the P drive was invisible even when I logged in as admin, ran the mapdisk and switched back to my normal account.
Oh, and I didn't mean that I'm afraid of running programs in admin mode, I meant that I use my standard account most of the time and all of the programs and stuff has settings saved on that one, so it would be annoying having to migrate it, or have to switch account every time I wanted to build a PBO.
I did change my standard account type to admin and reinstalled the tools using that, but it still didn't work. It only worked when I completely disabled UAC and installed the tools as the user.
Well, it does not matter now, as it works fine
Fug, the crunch button is now disabled
usually means one path is bad
or missing tool
the console window usually tells why
It was missing detex, I missed it as the pboProject started without it installed, usually when something was missing it just didn't start.
Ok, so to install the tools properly I have to completely disable the UAC then install it, otherwise they are not detected.
interesting. uac should be fine, but it will be a permissions issue on files and folders. notably c:\program files probably has a block on it
Funny thing is, now the tools "stop working" when I tried to run them as admin (just to see what will happen).
my tools have code that detect if they're running as admin and block if so.
There's ways of defeating that block, but i just try to never let my tools scribble just anywhere.
I added the permissions first without changing the user or UAC, same problems. It was only after I disabled UAC where I install stuff as the user instead of admin
unless I install stuff as the user the tools are not detected. Due to UAC I essentially installed the tools for the admin instead for the account I'm using
@quiet talon
thank you for the heads-up re 7.30 in the dll's properties. (i didn't understand that was what you were referring to, language barrier). It turned out to be the new version of visual studio compiler, since fixed. You are credited on next release.
As for texheaders.bin. yes, it was uploaded fixed but you closed the ticket on bytex before i could reply to you.
MoveObject will get similar treatment. So thanks
@dawn palm 👌
we are looking for some advice/ideas/creative thinking on protecting an extension against abuse
how to avoid ppl spam the call or remote execute it (like to ping an ip, or to query a backend server for a json server list file)
spam the call, just add a internal rate limiting.
store number of calls in the last 10 seconds or so. and if too many, don't answer
was using Arma3p and got this
execution of code can't continue because VCRUNTIME140_1.dll wasnt found.
check if you have latest latest version of mikeros tools
I just downloaded them
we talked about that stuff 3 times this week already 😄
oof
ah you can't see #veterans
here's where you need to be:
https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads
Or you can just grab it directly here.
https://aka.ms/vs/16/release/vc_redist.x64.exe
This article lists the download links for the latest versions of Visual C++.
that seems to have solved it
thanks @glossy inlet
now to sit and wait for the next error...
how to avoid ppl spam the call or remote execute it (like to ping an ip, or to query a backend server for a json server list file)
Add callExtension to remote exec block list
thanks both of you! is there a way to detect in what context arma is via/by an extension? (SP/MP/game state)
does arma open ports at game start or only when going in MP?
Just tell the extension at Start 🤔 🤔
I'd say when going mp
what does that help? a client could still trigger the extension on other clients
Why 2 Extension? Doesn't make sense
To detect if executed via Client or Server
If Client executing on Server is the concern, remotexec Filters are the solution
i think the extension kju is talking about is clientside only
initially client side, yet probably also server side to allow direct channel to the backend from there too - could be done in a separate extension true
however i dont see why client vs server abuse is worse? getting the IP banned from flooding? but that needs to be made impossible in the first place
You cannot make flooding impossible
Plus you should not ban the IP
Flooding is prevented via rate limiting
ofc we wont ban the IP, yet ISP/hosters might
so you need to prevent excessive udp pings or http requests to happen in the first place
Define excessive? If you are talking DDoS kind of excessive then you won’t solve it by some restrictions
are you talking about arma connections?
@stray galleon more than once per second?
@smoky halo no custom server browser dll extension
that's nothing, it should be able to handle 100x that easily
The Server, maybe. The Backend is another thing :/
@vague shard regarding detecting what context the arma process is, what is your goal there? If you want to know what the game is you could at least check of the arma process parameters and see if it is -server or the server executable is started. Then it should be a safe bet that this process is a server. Anything else could simply be considered SP then?
Besides using SQF and feed that info into the extension from within the game, this is the easiest way on my mind right now
he wants to prevent hackers from using remoteExec to let other players call the extension, and basically launch a botnet attack
Basicaly, yes.
Best solution would be, if the extension can't be called, when outside of MainMenu.
(of course, giving params over to the ext. is not possible.. can easily be faked)
I recon if someone is able to execute sqf on somebodies pc you have a whole different issue. I can simply HTML load and botnet with that. No need for an extension
htmlload has a url whitelist
So could have the extension. that does not prevent an attack on the sites that are whitelisted.
The extension could also use an internal cooldown to avoid spamming. Prevent remote execution from SQF/arma side and maybe do some sanity checks in the extension. But generally the extension should not worry about any of it
"Rate Limiting"
Anyone have any idea why CRUNCH is greyed out in pboProject? All the file directories are sleected correctly etc.. It says 'no binarize tool' when i start up arma 3 tools, is there something I am missing?
usually means your PATH variable from windows is bugged
and thus it cant find BI A3 tools
how would you change the path @vague shard
Bi tools aren't in PATH.
@drowsy flame there's usually more info in the pboproject console window as to why it's disabled
i fixed it dw
but i reset windows, and didn't actually launch arma 3 tools from steam before i tried to pack something 😂
strcat scans destination every time you append to it until it finds '\0'. What a waste
What would you prefer it do? Overwrite?
no return offset maybe so that you can pass dest + offset
https://code.woboq.org/userspace/glibc/string/strcat.c.html dest + strlen(dest) 😩
And what stops you using strcpy directly..?
I didnt write that
strcat scans destination every time you append to it until it finds '\0'. What a waste
You don't need to use strcat, when you can use strcpy, and handle the offset yourself?
In a way that isn't a waste
maybe if it was returning offset it would have been a little more useful and I could use it, so yeah waste
or returning the pointer to the terminating 0
If it doesn't suit the use case, use strcpy (i.e, you already have the offset/want it)? strcat is perfectly valid. And strlen is incredibly optimised (dependent, naturally)
most of the strxxx functions are done in asm to take advantage of hardware architecture.
str(n)cat is normally done by registers in the cpu
with modern hardware, the worst performer, and cause of great angst is strcpy (or _tsctrcpy() for unicode compatibility). comon approach which causes hell to break loose on most cpu's is
strcpy(str, str+1); // eg you're truncating by one char.
most compiler manufacturers warn you against doing so because the hardware can't copy destination into any part of the source.
Microsoft do a damn good job with above. Under the hood, they silently copy to temp buffer and back again if they detect the above condition.
Nothing to do with hardware, it is part of the pre-condition. Memory is not allowed to overlap for strcpy.
So of course the implementation is allowed to assume they don't.
strcpy(str, str+1); this is undefined behaviour in c++
strcpy(here, from); // is less glaringly obvious
in actual fact, NONE, of the code i ever write uses strcpy, it is replaced with:
#define _tstrcpy(a,b) _tmemmove(a,b,_tstrlen(b)+1) // overlap solved forever
Sure that is one way.. Of course then you push a performance penalty on all 'proper' uses of strcpy on all usages following the definition (or is that your define versus msvc internals?). I am guessing you often shift the contents of buffers.
yes
#define _tmemmove (TCHAR*)wmemmove```
the performance issue is far less of a concern to me than my sanity.
since, like most of you, i know the modest list of stdlib functions backwards forwards and upside down: to avoid memorizing the sometimes perverse wchar equivalents, everything i write uses a header...
#define _tstrchr ....
#define _tatof ....```
etc etc
I have zero interest in what microsoft , and separately, gcc call these things. It's there in the define if i'm fascinated with them
Makes sense. MSVC won't even allow you to use standard C functions without defining some _CRT_something .
#define _CRT_SECURE_NO_WARNINGS
goes at the top of every file of mine. I don't need msoft to tell me their view of the world.
Yeah, that's the one. Put it in my CMakeLists
yep. and since most of what I write is targetted for the penguin, it, and the _tXXX defines are a little redundant, but a great habit i've learned, thru pain and suffering
Despite being specified "as if" a temporary buffer is used, actual implementations of this function do not incur the overhead of double copying or extra memory. For small count, it may load up and write out registers; for larger blocks, a common approach (glibc and bsd libc) is to copy bytes forwards from the beginning of the buffer if the destination starts before the source, and backwards from the end otherwise, with a fall back to std::memcpy when there is no overlap at all.
pretty neat
That description is memmove not strcpy right?
yeah
I think compilers also checks the size and uses word-moves rather than bytes moves if it detects the buffer is aligned and etc... Which is convenient because it is UB for us to do it, but not for the compiler...
they use up to 128 bit boundaries on an intel cpu
ever since, (if my memory hasn't gone awol) intel introduced the MMU? unit on intel pentiums.
is there way to teleportation in infistar with helicopter without dieing ?
🤣
@olive rover no, don't cheat. That's just the worst.
$PBOPREFIX$ description is extremely confusing.
The namespace is saved as part of the PBO file itself.
What saves it? I guess the tool which makes the PBO? Also, then arma itself doesn't care about the file being in the .pbo? Then which tools do this? I guess mikero's tool does for sure. I am building with gulp-armapbo and it seems to not care. Any better explanation to this except for my observations?
The prefix is added as a header in the pbo file which is used by the game
That file is just an easier way of setting that header
Yes, so the implementation of that thing is pbo build tool dependant, right?
Or absolutely every pbo build tool is supposed to treat the file right?
Yeah thx, then it is just a limitation of the gulp-armapbo
Although, gulp-armapbo lets add some 'pbo extension fields', maybe prefix is one of those? Any idea?
Type: array of {name:<string>, value:<string>} objects, e.g. {name: 'author', value: 'Author Name' }
Default: undefined
Required: no```
Yes
Yeah actually if I open another .pbo in text editor I see prefix\0z\thePrefixFromPBOPrefixFile\ 🤔
Yeah cool! I think this is where it gets put to:
struct ProductEntry
{
Asciiz *EntryName; // = "prefix"
Asciiz *ProductName; // = "<AddonFileName>"
Asciiz *ProductVersion; // = ""
};
Yep!
Well... I hope that this will be added to biki some day, also clarifying that $PBOPREFIX$ file is not accessed by arma at all, also linking to this struct...
anyone remembers that website that checks if your key has been already used?
oh thats the one, thanks
better safe than sorry
Not many no, but there are still a bunch of them there so chances to make an unique one are better if none of those are used.
Hello!
I hope this is the right place to ask
I've been using Mikero's free tools for a few months now and they worked just fine so far, I can't have a bad word on them.
Today I decided to buy the "premium" tools on bytex and after I installed the latest versions of everything, PboProject stopped working
It says it can't find DeTex even though it is installed, and is in the correct folder
Does anybody have any idea of why this may happen?
Thanks in advance
locating rapify...found version 1.83
locating makepbo...found version 2.05
locating detex...not found
Tried installing detex again?
Did
Multiple times
Even tried wiping everything and doing a fresh install
It didn't help
@dawn palm ^ subscriber in need of halp
@pearl prism check your mikero bin folder if detex.exe exists
@pearl prism for reasons unknown, when you installed it: a) it failed to set the registry for where-it-is, or b) genuinely failed to install in c:/program files (x86)/mikero/depbotools/bin
there have been no reports from others having issues with this.
since the other tools are detected I guess b)
yep,. all tools 1st check they are 'registered' and then check the file is where the registry say they are. This, to prevent some Komrades from purchasing one set, and copying the bin file for their frendz
Well
The DeTex.exe is in the bin folder
It opens up normally if I try to launch it on it's own
How should I check if they are registered?
@cinder meteor
$PBOPREFIX$ description is extremely confusing.
this file was 'invented' about 12 years ago by Kegetys and myself when we were wrestling with the new pbo file formats for arma (vs Flashpoint).
it is, a very unfortunate name for this file, as the prefix = inside it is rarely stated and should almost never be used.
a far better name would now be pboProperties. It is heavily used by teams stating:
author=My Great Team;
version=Think of a number;
Peter=wrote this;
THE prefix is auto generated these days simply by the location of P:/where/the/folder/is
+it plays no part at all in a config cpp, the engine would never see this file.
+it plays no part at all in 'forcing' file references to look anywhere else but P:\where\they\say\they\are
+it's sole purpose is to over-ride the p:\temp folder when files have been binarised into there
+>>>>future releases of the dll will; completely ignore prefix=<<<<<<
It's basically just a shorthand to set per-pbo properties, which you otherwise would have to give to some tool via command line params or something. That the file isn't actually used by Arma itself should become immediately obvious once you see that no pbo actually contains a $pboprefix$ file
^this (said much better than my long winded answer)
How can I check if they are "registered" as you said?
regedit
but it should not be necessary
drop to a dos console:
type the magic words:
detex
you either get a response. or, you don't
That's what makes me confused
The detex exe works
ok, then win10 is blocking changes to the registry for reasons i can't know.
if you care to, using regedit, you should see an almost identical structure of the bin\folder in HKCU\software\mikero
I see some folders
So then I should have a DeTex one right?
yes
Oh wait
@&#!*ing hell
I think I know why this is...
I feel so stupid rn
better than me pheeling stoopid
It's even worse because I had an issue as well when I first installed your tools and I think the same thing causes this now
And I forgot about it...
well, when u fix it, let me know so i can tell others with same problem in the future
trust me on one thing, detex solves a range of broken issues with the bis binarise version of same thing
they are all in the rusty razor blade category where nothing you do to your files or paa's will change the outcome.
Well
I think I can say my memory is indeed as short as a gold fish's
So when you mentioned that something seems to be blocking the changes registry I realized that my account is not the admin on the laptop it just didn't came in mind when I ran the installers because they asked for the password of the admin account and I know it
But now realized that I had the same issue with the free tools last fall
So changed my account to admin temporarily and it fixed it
Sorry for bothering and thank you for your time
Oh god
This alleluia scared me for a second
after you've waited for a map to bake for 3 hours, that sound is most appropriate😎
I can see that 😄
That the file isn't actually used by Arma itself should become immediately obvious once you see that no pbo actually contains a $pboprefix$ file
Yes also noticed that. Except for gulp-armapbo which packs that file.
Thanks for the explanations!
shiny new tool for you ladies (subscriber & free)
consolidates all my tool shortcuts into a small window, rather than splatter so many of them all over your desktop.
the free versions list the subscriber tools too, but have no effect.
Enjoy
Wee
Woo 🚒
Neat.,
Did anyone make an addon which adds a big button somewhere which opens the arma rpt folder? :D
Explorer favourites ftw
VSCode plugin for "open last rpt"
Yeah I meant something for users
Because it takes so much effort to explain for everyone where the .rpt file is
win+r, copy paste what Dscha wrote, enter
You can open RPT folder from Eden but I doubt it can be achieved via scripts as It's hardcoded most likely.
Sure, I implied a .dll addon
callextention
I should try to do that when I get bored, never did a callextention .dll yet anyway
Not sure if it is useful to you but: https://forums.bohemia.net/forums/topic/189554-a3log-a-lightweight-logging-extension/
─────── Structure ─────── Motivation Introduction Features Benchmarks Installation Usage Final words Changelog Requirements Download Screenshots ─────── Motivation ─────── Hello there, first I want to talk about why I ma...

Too much dependencies just to write a file imo
I did a small app that just uploaded the latest RPT to pastebin and added the link to clipboard
Cool thing @elfin oxide , what a shame I missed it somehow and wrote my own 🤦
Well at least I played with intercept
It's always fun to write something. If you were able to create exactly what you were looking for on your own then thats better than using anybody elses pre-made content
Yes but I searched a lot and somehow didn't come across it 😦
@scenic canopy Imagine if you could invoke that from a button in arma
just an exec call 😛
@elfin oxide How did you make your addon output data to file so much faster?
Compared to diag_log
do you write to files asynchronously?
Probably just not flushing after logging a line would be enough to make it fast.
So you have figured the automated WS uploads @neon flax ? Congratulations! Hope it will save lots of time for you!
@cinder meteor async only makes sense when you write to multiple files, otherwise it will be restricted to one thread at a time anyway. Basically everything will be faster than diag_log, cause the arma procress has to handle everything + internal rpt fileio + scripted diag_log commands ...
Worth mentioning is that the library i use is hella fast (spdlog), and that A3Log is build upon @fallen stone's and mine extension framework that is quick when it comes to communication with the game and handles all of it's task multithreaded in the background without bothering arma.
If you just open the file stream each extension call, write to it and then close it again that will signifincantly reduce effeciency. Depending on what you to, make sure you keep your file handles open as long as possible and as Dedmen said, if possible do not flush on every entry but maybe only every 0.5 seconds or what ever. If you write a lot of logs in a short amount of time, you can not read that fast anyway. If you do only write every once in a while and want to see it instantly, then of course you need to flush the file stream after each write.
That's cool, thanks for the info, so to explain it short, you offload i/o to another thread which makes sense
yeah cause otherwise arma will not be able to continue until you leave the blocking RVExtension call. Unless you use intercept anyway, in which case all of that communication is being deal with anyway.
arma can fire and forget as fast as it can and the extension deals with it when ever it feels like it
nless you use intercept anyway, in which case all of that communication is being deal with anyway.
I assumed that calling a custom SQF function registered with intercept tis blocking though?
@glossy inlet would be the one to answer that. Even if so, you could once again just queue your input for a seperate thread to be picked up later so that that call instantly returns back to arma 3
Yeah I get that, thx
Intercept is using spdlog as well, FYI.
I've noticed a noticeable speed difference when using the asynchronous spdlog logger (over the synchronous logger) - it basically does the logging in another thread and that's all, AFAIR)
@elfin oxide nah... Async can make sense for the logging, as buffering always will be faster, and manual buffering especially can ignore certain overhead "Killers"
https://stackoverflow.com/questions/12997131/stdfstream-buffering-vs-manual-buffering-why-10x-gain-with-manual-buffering
What does that have to do with async?
Re the flush conversation, it's usually good to let libc/win equiv handle it
@nocturne basin I was thinking more about two threads one file in that regard. I followed up with that the actual write is async to the extension call etc
I assumed that calling a custom SQF function registered with intercept tis blocking though?
it is.
Btw windows already buffers file writes @elfin oxide, so as long as you don't flush, you basically have a somewhat async write already.
There needs to be a distinction here, there is more than one layer of buffering/caching
Flushing on the libc side (this is dependent on which API you use on Linux, I assume equivalents on Win32 exist) should be flushing to the OS, which as you said, buffers. There exists a system call to flush the OS pages, but this is just out of scope now
I don't think async and buffering should be apart of the same sentence though
Well... Can tell ya that if the amount of logs you generate gets large enough to exceed the buffer on a regular Basis, separating the flushing to another thread can help to reduce latency a lot
At work, I had to separate the logging entirely to allow the whole application to have Response times in the low ms Ränge
Logging messages to a queue and having another thread print the queue to whatever target is desired was the solution in the end
~200ms
Though... We log everything, incomming/outgoing data, background noise and SQL queries
Has anyone in here ever googled something like state machine editor during development? (arma tooling related excluding FSM + non arma programming related)
I never googled that specific term no, but I have the feeling you want to ask something else with that question?
not really, just testing the waters here
I took a blueprint like graph editor and turned it into a statemachine debugger a few weeks ago
blueprint like editor?
unreal engine
https://user-images.githubusercontent.com/1197433/60053458-2f2b9b00-96d8-11e9-92f9-08aff63b2023.png
drag and drop from point to point to connect dots basically
would just need ability to click onto the lines, and add conditions/events to then, boom statemachine editor
that hing the screenshot is from... eh.. cmon google
Code is here https://github.com/dedmen/CBAStatemachineView
Only planned it as a viewer, but theoretically, you could turn it into a live editor
neat
it probably would have helped me back when i started the editor for work 😅
though ... probably would have been more work then doing what i am doing now
I wonder if people who build statemachines with a GUI instead of doint it in-code would write clearer statemachines with less crossing lines 🤔
https://s.sqf.ovh/arma3profiling_x64_2020-01-03_18-00-46.png
more like organize it in a better way
hey guys is there any tool around for creating structured text in form of WYSIWYG
I know I can do it without the tools but a shortcut would be really helpful, have lots of text that need to be structured to fit stringtable
Im not sure but there was something around in a2 days, some multi tool for missions that had all in one functions, iirc it had option for structured text but cant remember how it was called
I don't understand why arma complains that a .pbo is not signed. I just signed it with DSUtils, it says all is signed, then I checked it with 'Check signatures', no errors there, yet arma complains about a single .pbo file.
that .pbo happens to be built with gulp-armapbo ...
bisign filename matches the name of the key which was originally created?
theres a bug in dsutils where it doesn't check that, but arma does
ok let me check!
oh I am an idiot I didn't notice wrong file name 😄
thx!
ah no wait... 🤔
You mean if it matches the .bikey and private key file names? Yeah it does. I sign several .pbo files with DSUtils, so I think it should right?
bikey and bisign name need to match
mod.bikey -> pboname.pbo.mod.bisign
mod.bikey ! -> pboname.pbo.modv1.bisign
Yeah I see they are different then:
vindicta_v0_24_174.pbo.vindicta_1.0.0.0-1.bisign
vindicta_1.0.0.0.bikey
Weird that it complains about one .pbo though. Can I rename them manually and see if it works or is file name also in the file somewhere?
vindicta_v0_24_174.pbo
vindicta_v0_24_174.pbo.vindicta.bisign
vindicta.bikey
Weird, still complains about that only pbo... could it be that gulp-armapbo does not build a proper .pbo somehow?
could be
maybe it only signs binarized pbo files properly?
So I have packed same folder with arma's standard pbo tool and then signed, gives no issues
or you could use pboProject and be done with it.
all the above to avoid using a tool, not toys
thanks but then I will have to make another build script. I wouldn't call it a toy, it works in game though. Maybe you know exactly what causes the game and signature check utils behave like that?
well, I use your tool to build the project, partially, but i have a weird setup rn and I have to first build mission pbo then build addon pbos 😄
maybe it only signs binarized pbo files properly?
there are no binarized pbo's.
or rather no unbinarized pbo's? the statement "binarized pbo" makes no sense
hmm, I meant the birarize flag when building the pbo, I guess it binarizes config.cpp and other things
anyway it's not the issue I assume
yes yes
the contents of a pbo are irrelevant. the typeOf pbo is irrelevant too. The only item of consequence is the 20byte sha key at the end of the pbo file. It is used to generate the bisign.
i have no idea what a gulp-armapbo is, and it shouldn't matter, to DsSignfile all pbo's are born equal providing the sha exists.
if these other tools don't generate the sha, that's normal too. because it is only relevant for mp sessions.
(badly generated sha btw is only detected at game time, and generally results in an 'incompatible bisign' message)
I have had no reports from anyone using pboPro cmdline, or gui, ever having an issue. Irrespective of the type of pbo they make.
from memory only<<< dsCheckSignatures only valiates the bisign against the pbo content or sha (i forget which), it does NOT verify the sha itself is a good one
Thanks a lot! I guess the sha is incorrect then. WIll be thinking of using better tools then.
if you prefer or need to use scripting (as many do) use the cmdline version of pboPro. It's syntax is in the readme's
Afaik, most use python as the weapon of choice. But bat file yields the same results too.
https://github.com/headswe/SwiftMissionDeRap
Tool for derapifying mission.sqm in C#
^Also can read "normal" sqm now.
@orchid shadow could you add a LICENSE file, please?
Also, congrats!
wouldn't it work as a generic arma config file parser?
well missions don't have array append, or inheritance.
Sure, but i don't support it. made really only to solve some stuff in the community i play in.
Sure, but i don't support it
That's a great reason to actually add a license file. This way someone can legally fork your repo and continue your work. Otherwise, it's a "look but don't touch"-type of license
Neat
I did. 👍
Does anyone know which Dev was/is responsible for the Arma 3 tools package? Specifically the game/ server updater.
BI tools is done by tom, but he's on other projects now.
Why?
Wizard did some too
Oh right, forgot about Wizard (pls no hurt)
✍️
@glossy inlet having trouble with redirecting steamcmd standard output in .NET but BI have it working perfectly in their updater.
I don't think BI are using steamcmd but steam dll directly, instead
@kindred pike you'll probably need both stdout and stderr, it's also buffered
@karmic niche the "game updater" uses steamcmd, you can tell since you're logged out from steam when using it like any other non steamapi clients
or rather, steam looses its connection and you have to restart it manually
it could be some other steam cdn client but I'm quite sure it was steamcmd last time I checked
@native kiln could probably help you
output is buffered to 4k afaik
you can change to line buffering instead
or run some kind of fake pty / tty etc
pty was the most successful I managed
supposedly ConPTY should work, https://devblogs.microsoft.com/commandline/windows-command-line-introducing-the-windows-pseudo-console-conpty/
alternatively I made a library to download from steam using steamkit
using steamapi (steam client) or third party steam cdn client is a lot easier than steamcmd 😛
shameless self advertising ^^
i like using e.g. steamworks when steams running anyway on the box, but hate it that steams Autodownloads subscribed mods for example
you can download stuff using steamapi without subscribing
only issue I have with steamkit is the not so great CPU performance on download
yeah, some of the crypto takes quite a toll
I switched out the lzma library on a JS client and got more than 10x perf
hm but I assume you're not speaking any of the .net libraries available or?
the facepunch one is super clean but lacks your mentioned ability
(sadly)
no, I use that 😛
just download without subscribing
it's supported in steam api
it's even mentioned in their docs 😄
yep
anything steam api requires a steam session
If the user is not subscribed to the item (e.g. a Game Server using anonymous login), the workshop item will be downloaded and cached temporarily.
I usually just make an abstraction layer deciding on whether steam is available or not
so either steam api or steam cdn directly
since its a bit annoying to be thrown out on the desktop while deving other parts of the applications 😛
SteamCMD starts and stops Steam automatically
steamcmd uses a different session than the desktop client
Yes. When I do a SteamCMD update on my dedi it tells me that it is available for streaming on my desktop though. For the length of the SteamCMD run
Used to use anonymous but that does not work the way it did before for mods.
That said at least on a dedi you don't run Steam client other than when SteamCMD runs
Neither does Steam need to be installed
Thats because it has its own session and logic instead of using steam api
And only one session can be active depending on some paramaters such as internal ip etc
I'm happy to use something else if it's out there - it all works right now for Workshop items and the game in SteamCMD. Just annoying that the progress output lines seems to stay in the buffer so you can read until it's at 100% which is weird because it used to work.
you can use for example https://github.com/SteamRE/DepotDownloader which is a third party client without many of the steamcmd quirks
or integrate the main library if you want a tighter integration
there's a bunch of different steam api clients
so same connection that the arma launcher uses
which is the other alternative
but that requires main steam client to be running
DepotDownloader (and other third party steam cdn clients) uses the steam cdn directly
steam api is generally faster and more future proof
many third party clients does not implement delta patching as one example
Yeah no SteamCMD or something like DepotDl would be the way. FAST works fine with steamCMD atm (once the hotfix goes out) but would be nice to replace it with DepotDl for future proofing.
or just using steam api directly
Oh, same he Dahlgren... did not know that existed... Thanks!
steam cdn changes sometimes, changes auth, moves base api resources etc
and libraries have to keep up
Would help if I took the time to actually switch to C# too.
with steam api all that is handled by the main steam client
and valve has to keep backwards compatibility for older games
I don't think I've ever had to update any of my steam api stuff except for new features etc
whereas steam cdn maybe changes 2-3 times a year and requires rewriting stuff
so if you can require / depend on desktop steam client to be running, definitely use steam api
it also removes all auth handling etc, super nice
no username, no passwords, no steam guard
Yeah not really preferable as its a server tool, very few people install the steam client on the server from what i've encountered.
depends on if it's a headless tool or not 😉
and platform support
like web based server manager compatible with all platforms and optionally docker based 😄
Ah yeah makes sense in that case. Nope, for me FAST is a good old fashioned desktop app for windows based server hosting. 😄
@scenic canopy now this is an option too 😛 https://github.com/BytexDigital/BytexDigital.Steam
😉
I wonder how many steam related repos I have on my github 
but it's more focused on server provisioning, workshop metadata, CI testing etc
id assume many more private than public ones
what tools support setting appId to PBO/P3D/WRP?
yeah it does. is there any other?
binarize has this:
-appId sets the appId of the asset to given value (game/DLC). This ID is later used by the game to check ownership of the asset
anyone have experience writing extensions in c#? i went off some stuff in the forums but can't get mine to return anything but an empty string
i'm a pure bred c++ man. For various reasons i barely understand C# but i think almost everyone here uses it in preference.
First, if you have not got it already, download Visual Studio Community 2013 from here (if you dont have VS): Once installed, start a new C# “Class Library†project. Next step is to download a NuGet Package called “Unmanaged Exports“. To do this goto the...
or more in depth, https://community.bistudio.com/wiki/Extensions
yeah, that thread is what i went off off. I'll post my code in a bit
empty string could also mean that the extension isn't loaded
check rpt for info regarding that
should there be anything about the extension getting loaded? i did check the rpt and the addon was loaded but i didn't see anything about extensions in particular
@mod/extension.dll for 32bit and @mod/extension_x64.dll for 64bit
arma did have a lock on the dll while it was running though
interesting, i think i checked after calling it and didn't see anything get logged so something must be up
maybe it's because to test the extension i made an empty file with a .pbo extension in the addons folder so arma would accept it? should i have a real pbo there?
Does you extension have Dependencies on other DLLs?
no, it's basically one of the string manipulation examples in the thread
a zero byte pbo file will trigger and error / crash, at least last time I tried
as it's not a valid pbo file
I'll try a real one
oh i also wasn't building the 32 bit dll, so i just had the _x64.dll version. i figured arma wouldn't look for the 32bit dll if it's running in 64bit but i suppose it is nonstandard
64 bit arma will only use 64 bit dll
so i shouldn't worry about building for both platforms if I'm just testing?
yes
cool thanks
using a proper pbo didn't do it. still no log output when i try calling the extension
here's the code, in case i'm screwing something up:
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
using System.Text;
namespace MyExtension
{
public class DllEntry
{
[DllExport("RVExtension", CallingConvention = CallingConvention.Winapi)]
public static void RvExtension(StringBuilder output, int outputSize,
[MarshalAs(UnmanagedType.LPStr)] string function)
{
outputSize--;
output.Append("TEST OUTPUT! " + function);
}
}
}
silly question but mod loaded, dll name in sqf code correct?
8:51:16 @TestExtension | @TestExtension | false | false | GAME DIR | cd7d2c0336dd1844edde92c1ed1d64dddf500c01 | c60d483c | D:\ArmA\@TestExtension
and yeah i'm using the dll name minus the _x64 in callExtension
could this maybe be it?
Warning NU1701 Package 'UnmanagedExports 1.2.7' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
hm i just opened the dll up in a dll export viewer and there's no RVExtension export listed
and there is if i open up a known good extension like one from ace, so something's up
try changing the library to netcore instead of netstandard
the target framework you mean? i only get .net standard options, even after installing a devpack for .net framework 4.6.1
(i am definitely way in over my head when it comes to .net environment stuff like this, it's all greek to me)
thank you!!
ohhh crap that's probably it huh, i didn't consider there could be multiple templates for different frameworks
again this is uncharted territory for me lol
yup now it works like a charm. i feel silly but i guess that's how you learn
thanks so much!!

Still arma should error something
I have a problem with pboProject, It cannot find ANY .paa within my mod and I have no clue as to why. I have tried looking it up on google but couldn't find anything that pertains to my problem.
dont use pbomanager
maybe there is no paa in your mod
There definitely are many .paa in my mod.
And I keep hearing that I shouldn't use whatever I use and use something else instead, what should I use now?
<dumb idea>maybe paa is in excluded files?</dumb idea>
@strange osprey do you have a config.cpp in the folder you are packing
are you packing from P: drive?
Yes and yes to HorribleGoat, .paa is not included in excluded files.
if you unpack the pbo you make are the files there?
there is no pbo, I try to make a pbo.
ok so you get some error message then?
Yes, the error message tells me that the .paa files are not there, when I check however, theyre right where tehy are supposed to be and the config file links to them properly.
post the whole error message.
@strange osprey
if you have come from a mission making background, pboManager is an excellent, intuitive, easy-to-use tool for the purpose. making >addons< is a different ballgame. pboManager will not debarinarse the data in a pbo, nor can it rebinarise it. And, more important., it can't create the pboPrefix.
It's a mod adding a whole bunch of stuff. not a mission.
that's not what i said above
you have no hope in hell of using pboMangler to >make< addons
If it's about me saying I use pboManager, I misspoke, I use pboProject.
""D:\SteamLibrary\steamapps\common\Arma 3 Tools\Binarize\Binarize.exe" -texheaders "PSO\addons\pso_foxhound" "PSO\addons\pso_foxhound""
21:48:04: Extensions:
"MakePbo.exe "-PgFW" "-X=thumbs.db,*.txt,*.h,*.dep,*.cpp,*.bak,*.png,*.log,*.pew, *.hpp,source,*.tga" "PSO\addons\pso_foxhound" "P:\@PSO\Addons""
<adding entries:...>
config.cpp :compiling...rapWarning: **********missing file(s)***************
paa\foxhound_exterior_pso_black_co.paa :scanning
paa\foxhound_exterior_pso_olive_co.paa :scanning
paa\foxhound_exterior_pso_tan_co.paa :scanning
paa\foxhound_exterior_pso_white_co.paa :scanning
texHeaders.bin :scanning
</end entries>
Missing File Summary
config.cpp : pso_foxhound\paa\foxhound_exterior_pso_black_co.paa
config.cpp : pso_foxhound\paa\foxhound_exterior_pso_olive_co.paa
config.cpp : pso_foxhound\paa\foxhound_exterior_pso_tan_co.paa
config.cpp : pso_foxhound\paa\foxhound_exterior_pso_white_co.paa
missing file(s)
"pso_foxhound.pbo not produced due to error(s)"
That's the outlog for one of the mod parts. However if I try to do it seperately it will give me the exact same error.
look at your doubled up prefix\
it's telling the truth
there is no such thing in the game as P:\paa
is your config.cpp in the PSO folder?
P:\PSO bares no relationship to P:\paa OR p:\pso_foxhound
no, it's inside a file inside of addons which is inside of PSO
paste a folder screenshot please,. this is easy to sort out
youre not making a modpack are you?
and don't worry I have full premission for all of these.
lets hope so
he's trying to repack a mod folder
Looks just like the contents of the PSO Mod
pso_foxhound belongs at the root of the p: drive
Thing is, this is a unit specific mod that used to be done by someone who left, but who did give premission to continue it. THis is taken straight from the Github and he failed to give much explanation.
as do all the other folders
the mod.cpp and the addons folder itself is NOT the pbos that need to be made
all those pbos needto be in P:\blah1, 2,3
I.e. Move all the contents of addons one level up for the sources
How do I make them all one mod then?
Yeah 🤦
you kinda dont I think? 👈 could be wrong 👇
So do them all seperately inside of the same mod output?
they must ALL be at the root of p:\
Alright, got it, thanks.
All of the individual folder's contents get built to the same destination folder
but also the ones that are on the workshop would likely be better to be used from there
Thanks for the help again, turns out the mod wasn't created pboProject-friendly so I'll have to go over it, but from here on out it should be smooth sailing.

What is the right tools for building our addon (which includes missions) on a CI system? i.e. we won't have all arma content, or a P:. We just want it to make and sign the add-on (and upload to steam but there is a github action for that already).
You can certainly use Armake to build entirely from the command line along with signing. Depending on how reliable you want errors out you could just then wrap that with a script or a bit more robustly make or something else that your CI gets on with. We just do a script/bat wrapped over armake.
oh cool thanks
i am looking at hemtt, i like how it looks but can't get it to work yet
it wraps armake afaik
it fails cos it can't find includes for cba, but of course it can't, cba isn't part of our add-on and we are building it not running it :/
yeah nm i see it
with hemtt philosophy you should have these includes in your project
thanks, i worked out they were in the template thing, but the docs are out of date and don't mention wtf the template is for. took me ages to work out it was a submodule and I do NOT want submodules in my git repo
idk what submodules, I think you're talking about hemtt 0.7 which is unfinished.
0.6 which is somewhat stable does not use them.
And it's only needed if you want to use addon templating functionality
yep it just says "latest release" its not marked as alpha or anything, so annoying :/
The tool is very much in WIP state but it's awesome after you'll learn it.
No p drive etc. feels a lot more modern that lot of other tools 😛
yeah definitely it looks much more modern than other tools i have seen, just hate when docs and versions aren't clear :/
hemtt is fine for CI
pboproject does a lot more validation though
if you're doing anything related to p3d or wrp, go with pboproject for now
I'd stick to building with pbo project on personal computer. In fact, maybe we can keep both scripts? @fickle void
I certainly remember that pboProject's strict validation of every holy thing has helped with paths to files and everything related to that.
dude pboproject is terrilbe, its not letting me pack my mod!!!!
/s
it just complains that this path is wrong!! 😦 addonb uilder works finejlk1kj1j
It's totally cool that it verifies such things
Addon builder will pack anything :D
Sqf-vm for unit testing
(shameless self advertisement)
already doing that bit 😄
For bikeys is it good idea to just regen them for every release? hemtt recommends this so different versions aren't compatible, it makes sense to me and makes deployment a lot easier
I assume keys are installed automatically by server management software?
okay no one has an opinion so i'm going with the easy route!
I assume keys are installed automatically by server management software?
Probably not, iirc you need to "install" them manually but those who know will update them and those who don't probably don't run with sign ver anyways. Per-version seems to be the must used method amongst well known mods so I'd go that way
the server used to look also in MODFOLDER\keys
but this may no longer
new key per release ofc
the server used to look also in MODFOLDER\keys
It was? I wonder why it's not like that anymore, it would make it soo much easier to manager servers.
and would make it easier to run multiple instances from same install
indeed, the need to copy keys manually has confused me so much
it's like doing mod setup, twice
It was? I wonder why it's not like that anymore
because bis forgot they had such a thing is why. They've done this before. notably during arma one.
just mount whichever folders are needed into the arma server container, no need for duplicated folders or weird symlinks 😄
I guess the same could be done for the key files as well 🙂
container orchestration is cool stuff 😛
also helps with the limitation on linux that only supports paths relative to cwd/server root
^
bis don't understand relative addressing so you're fairly safe that they can't break it.
the only relative addressing they've ever used was in the original mod.cpp. And, by incredible stupidity has now been moved to a single pbo.
(and the only reason it moved into a pbo is because they didn't know how to make / use a mod.bin)
I just have a script to use SteamCMD to update mods... part of the process is copying the new keys and removing old ones.
\Steam\steamapps\common\Arma 3 Tools\Binarize>binarize_x64.exe
15:58:19: Warning: memory usage limited by a page file. Current limit 12030 MB, wanted 12199 MB.
15:58:19: Increasing your page file size might improve game performance.
for some reason it always ask for more page file size
anyone knows why that is?
out of RAM? 😛

hot damn
