#arma3_tools

1 messages · Page 34 of 1

karmic niche
#

This is a c++ channel
No, this is a channel about:
Discussion about all the great Tools which ease life of creative community

Which is what we're talking about - building such a tool

summer isle
#

Is Python really easing your life in this instance?

#

Oh wait, you edited ABlobHaha

scenic canopy
#

I'm having a hard time seeing where UDP calls fits within a Django app thinkinghuh

#

seems like something you would want to run within a worker application

karmic niche
#

It's two separate apps. Don't mind the django part (for now)

#

And it's exactly what I'm doing

scenic canopy
#

if it's a separate worker, do you even need asyncio?

karmic niche
#

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 😄

cinder meteor
#

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

karmic niche
#

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

scenic canopy
orchid shadow
#

Anyone know of anything to replace R3 (AAR web thingy)?

feral nova
#

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
        )  
    )
glossy inlet
#

why u batch, y u no powershell :U

feral nova
#

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

glossy inlet
#

-P!Z=default what is that?

#

Shouldn't that be -P -Z=default

feral nova
#

i was just using what the output of pbo project used

#

well, with less options.

glossy inlet
#

well it seems that pboproject is complaining about wrong options being passed

#

maybe it prefers backslash over slash?

feral nova
#
    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]]

glossy inlet
#

I'd say just use powershell 😄

feral nova
#

would have to get my head around it first >.>

#

-\mytag\mytag maybe something to do with this ?

feral nova
#
    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%

nocturne basin
#

why are you going with some filtering batch?

vague shard
#

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)

winged cedar
#

A multiplayer server might have issues displaying its mod list if it has too many, but idk about the game itself

vague shard
#

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

feral nova
#

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;

glossy inlet
#

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.

glossy inlet
#

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?

feral nova
#

yeah

#

seems like it, just testing with kkids callExtension right now

glossy inlet
#

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

feral nova
#

safety net i guess.

#

so i need >=

glossy inlet
#

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

feral nova
#

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.

glossy inlet
#

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 - 1 just 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

feral nova
#

so take tester get the max text i can from it, then replace the tester with the remaining string.

glossy inlet
#

no?

feral nova
#

probably better if i rewrite that.

glossy inlet
#
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

feral nova
#

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
glossy inlet
#

for "_i" from 0 to 1 step 0 do you mean... while {true} ?

feral nova
#

same thing >.>

#

I dunno why I just prefer for loops over while {true}

glossy inlet
#

same thing >.> one is slow, the other is not

feral nova
#

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.

karmic niche
#

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)

glossy inlet
lethal salmon
#

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?

feral nova
#

@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.
glossy inlet
#

@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.

feral nova
#

there is a buffer limit

#

that what is says.

glossy inlet
#

where?

#

Can't find anything about a character limit

feral nova
#

oh wait, thats the input buffer

#

i shall do some testing

feral nova
#

19k chars so far, still going.

feral nova
#

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.

keen owl
#

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

feral nova
#

and it was still returning the right length after 30million characters.

glossy inlet
#

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

lethal salmon
#

@glossy inlet thanks for the info

cinder meteor
#

@Sparker instead of a switch, bake it into your pbo Pipeline using sqf-vm
What do you mean @nocturne basin ?

scenic canopy
#

@karmic niche steamcmd or steamworks can be used on Linux

nocturne basin
#

@cinder meteor preprocess then Pack

glossy inlet
#

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

cinder meteor
#

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

cinder meteor
#

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. 🤔

glossy inlet
#

they are just different classes at different memory addresses?

#

thats what "two seperate RAM devices" in a computer are too

cinder meteor
#

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 🤔

glossy inlet
#

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

cinder meteor
#

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 :/

vague shard
#
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?
nocturne basin
#

@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

cinder meteor
#

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 😉

nocturne basin
#

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

cinder meteor
#

More bugs than our project has found? I doubt

nocturne basin
winged cedar
#

@vague shard I'm pretty sure that message happens once for each overflowed server.

vague shard
#

hm i was using direct connect - could be i started out in friends tab
anyhow sadly the far too common meaningless/pointless rpt message

cinder meteor
#

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 🙂

vague shard
#

@cinder meteor in what ways did it help you most? (vs other similar IDEs and tools)

cinder meteor
#

@vague shard because it can run SQF right in IDE. We have also set up some validators at CI.

vague shard
#

so live typing code to test?
are your validators available?

cinder meteor
#

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?

dawn palm
#

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

scenic canopy
#

will do a clean CI build to check for any issues on our SFP mods 🙂

vital yoke
#

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?

sly skiff
#

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

vital yoke
#

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.

glossy inlet
#

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

vital yoke
#

What is your approach to it? Any hints?

glossy inlet
#

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.

thorny nimbus
#

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.

scenic canopy
#

same issue here

thorny nimbus
#

I posted same thing on Mikeros thread. Should we ping him?

scenic canopy
#

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

thorny nimbus
#

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

scenic canopy
#

😱

#

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 😦

thorny nimbus
#

I literally just updated 5 minutes ago

scenic canopy
#

you missed the worst ones then 😄

thorny nimbus
#

Oof what happened?

scenic canopy
#

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

thorny nimbus
#

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

scenic canopy
#

🎊

thorny nimbus
#

Exactly 🙂

glossy inlet
#

just have to pack with....addonpacker for the moment shudder
just keep backups of the previous mikero tools version 😄

scenic canopy
#

@thorny nimbus did you try to turn off ”warnings are errors”?

scenic canopy
#

won't help 😦

vernal pivot
#

obfuscated pbo now crash client, or it's just for me?

glossy inlet
#

haven't heard about that yet, but sounds reasonable

nocturne basin
#

Think I need to revisit armas fsm Editor

#

Iirc, the User experience was horrifying

cinder meteor
#

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.

elfin oxide
#

Hearing FSM editor gives me Vietnam flashbacks.

#

You want to avoid that evil place at all costs.

nocturne basin
#

@cinder meteor why is it Bad?

#

Only remember that Bad Editor ux

elfin oxide
#

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

cinder meteor
#

@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.

vague shard
#

i think you can connect a text/code editor to the BI fsm editor, but overall its UI design is not great indeed

nocturne basin
#

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

glossy inlet
#

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

nocturne basin
#

could be done

#

quite easily tbh

#

the export part*

glossy inlet
#

yeah export sure.

cinder meteor
#

@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.

nocturne basin
#

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

cinder meteor
#

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.

native kiln
#

@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

nocturne basin
#

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

cinder meteor
#

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.

nocturne basin
#

yup

#

in which case the question again is: would the FSM system in arma benefit from some editor that is actually usable

cinder meteor
#

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

nocturne basin
#

something that btw. could theoretically be solved by just adding a simple "OpenWith" and a FileSystem Watcher

scenic canopy
#

@thorny nimbus issue with muzzles should be resolved with last update btw 🙂

thorny nimbus
#

Oh did that drop last night/morning?

scenic canopy
#

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"

thorny nimbus
#

okay thank you 🙂

vague shard
#

@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

dawn palm
#

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.

scenic canopy
#

oh, cool, time to change back to warnings are errors on our ci then 😄

dawn palm
#

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.

fallen stone
#

Usage:

callback("test", "test", "test")
lapis star
#

?

glossy inlet
#

looks like mikeros tools can't open that file that it says it cant open

nocturne basin
#

@lapis star sry...

lapis star
#

it was all good

#

@glossy inlet do know anyway to fix it ?

glossy inlet
#

no

lapis star
#

okay

sly skiff
#

solved.. btw. needed to unpack to P

dawn palm
#

😎

#

very strange system message to talk about privelage levels then, if that was all it was.

stray galleon
#

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

glossy inlet
#

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

karmic niche
#

At least the engine will work correctly with strings of negative length 🤓

glossy inlet
#

hm 🤔 never tried what actually happens if you do that

dawn palm
#

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.

glossy inlet
#

You don't use a negative offset for a string "length"

#

that makes no sense

dawn palm
#

of course not.

#

char *here=strchr(haystack,needle);
if (here)
{
ptr=here[-6];
....

karmic niche
#

You don't use a negative offset for a string "length"
You don't say ;)

glossy inlet
#

pls no

orchid shadow
#

This chat makes me angry inside

thorny nimbus
#

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.
dawn palm
#

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)

scenic canopy
#

@thorny nimbus you can also create a bat file with a list of folder to pack

thorny nimbus
#

@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?

scenic canopy
#

unless you previously had a pboprefix which would enabled it, yep

thorny nimbus
#

All my stuff exists in ML700_X folders

scenic canopy
#

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

thorny nimbus
#

Ive never heard of a $PBOPREFIX$ file before.

#

Nerp

scenic canopy
#

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

vague shard
#

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

scenic canopy
#

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

thin rose
#

Profanity removed

orchid shadow
#

profanity?

thorny nimbus
#

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

glossy inlet
thorny nimbus
#

Doesnt mean its being enforced until now I guess 😛

glossy inlet
#

nah, has been enforced for atleast a year

thorny nimbus
#

I mean i can search choice wording and plenty come in for results, but alright no problem

orchid shadow
#

It's good thing that i dont post here often.

#

I have a problem with my profanitys :)

dawn palm
#

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

orchid shadow
#

obsfucation is sad

glossy inlet
#

obfuscation is so much fun

fallen stone
#

If you say so

glossy inlet
#

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

glossy inlet
#

@smoky halo #rules no links without description

smoky halo
#

It's the BI wiki "Code Best Practices" page, talking about obfuscation

glossy inlet
#

that's relevant why?

tawny island
#

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)

glossy inlet
#

A actual encrypt method may soon™️ be a thing

sick verge
#

How's that going to work? Is the Evo format to be published? Or do you have plans with intercept?

glossy inlet
#

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

karmic niche
#

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")

glossy inlet
#

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

karmic niche
#

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

glossy inlet
#

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.

karmic niche
#

Yeah, but battleye is doing something else than obfuscation so it doesn't really apply here

glossy inlet
#

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 😄

karmic niche
#

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. 🤔

stray galleon
#

@glossy inlet client extension?

glossy inlet
#

yeah

stray galleon
#

Meh

karmic niche
#

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

glossy inlet
#

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

fallen stone
#

I can give you a beta build if you want a reverse engineering nut to crack 😄
Open invitation ❤️ ?

glossy inlet
#

yeah. PM me tomorrow

fallen stone
#

tidy

vague shard
#

@glossy inlet what became of your live particle editor - is there a test version available or still WIP?

glossy inlet
#

Its currently in use for a DLC project

stray galleon
#

That’s racist

vague shard
#

@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

glossy inlet
#

live tweaking of all config params, with config export

#

only config FX, but scripted FX has the same or less params as config afaik

vague shard
#

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?

glossy inlet
#

It auto imports every FX from CfgCloudlets

#

there is currently no quicksave/restore implemented, but I wanted to do that

vague shard
#

@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 🙏

glossy inlet
#

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.

vague shard
#

fair enough

#

is there any Eden to 2d editor mission.sqm converter?

dawn palm
#

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 ```
glossy inlet
#

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

vague shard
#

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

steep mesa
#

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

glossy inlet
#

Extension

subtle smelt
#

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?

karmic niche
#

Define: "call".
Ubuntu server? So that thing is not done with a browser? Again, define what you mean by that

subtle smelt
#

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)
karmic niche
#

So you mean that you're using nodejs

subtle smelt
#

yup

karmic niche
#

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

subtle smelt
#

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

karmic niche
#

🔮

#

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 ¯_(ツ)_/¯

subtle smelt
#

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

karmic niche
#

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"

subtle smelt
#

we can telnet to the ts server that we can't connect to but via a different port because ts

karmic niche
#

At this point it's more of a debugging issue than of a software issue

dawn palm
#

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

scenic canopy
#

@subtle smelt await is only supported with newer node versions

vague shard
#

is there something along these lines available?

stray galleon
#

Seeing that video is 3 years old, before the extensionCallback, it should be much easier to make something like this and better now

vague shard
#

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

glossy inlet
#

is there something along these lines available?
I have a web based one

timid aspen
#

what dont you have?

glossy inlet
#

A good job

scenic canopy
#

maybe I should add some basic css framework to that 😛

glossy inlet
#

frameworks

scenic canopy
karmic niche
#

Why would you use a framework? You can write perfectly good code all by yourself! - said no pentester ever

neon flax
#

slap bootstrap on it

#

it works for everything 😄

dawn palm
#

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.

faint void
#

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

scenic canopy
#

pboproject (one of mikero’s other tools) has a default list of files to exclude based on extension, hpp is one of those

faint void
#

good point, that works; I'm guessing there's just no such setting for Eliteness then?

wind elm
#

try renaming them to .inc

glossy inlet
#

I assume eliteness just uses the exclude list from registry.
aka change you settings in pbo project, then go back to eliteness and try

faint void
#

@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

glossy inlet
#

Why even use eliteness for packing, thats not what it was made for

safe slate
#

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

faint void
#

because it's easy to use (GUI wise) and doesn't require a P drive to be mounted 😛

dawn palm
#

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

dawn palm
#

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)

atomic stratus
#

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

sly skiff
#

Addon breaker is a bit risqué to use

amber heart
#

BinPBO.exe here - old school

dawn palm
#

of historical interest to some, binPbo is and pboProject was (initially), written in 02script

dusty imp
#

holy mother of getSelectedFaces

dawn palm
#

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).

dawn palm
#

proxy p3ds are now obfuscated (credit @limber moss & @vernal pivot )

dawn palm
#

Mikero's Dos Tools:

The free version has been updated to the latest subscriber snapshot.
Enjoy

quiet talon
scenic canopy
#

outdated dll probably

#

make sure to update dependencies

#

probably depbo

quiet talon
#

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

dawn palm
#

how can it be 'installed already'? @scenic canopy has told you what the problem is.

#

Use the bytex updater. anything in red is stale

toxic berry
#

@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

dawn palm
#

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.

toxic berry
#

Free version

toxic berry
#

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

scenic canopy
#

usually means one path is bad

#

or missing tool

#

the console window usually tells why

toxic berry
#

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.

dawn palm
#

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.

toxic berry
#

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

dawn palm
#

@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

quiet talon
#

@dawn palm 👌

vague shard
#

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)

glossy inlet
#

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

young plaza
#

was using Arma3p and got this
execution of code can't continue because VCRUNTIME140_1.dll wasnt found.

glossy inlet
#

check if you have latest latest version of mikeros tools

young plaza
#

I just downloaded them

glossy inlet
#

we talked about that stuff 3 times this week already 😄

young plaza
#

oof

glossy inlet
young plaza
#

that seems to have solved it
thanks @glossy inlet
now to sit and wait for the next error...

stray galleon
#

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

vague shard
#

thanks both of you! is there a way to detect in what context arma is via/by an extension? (SP/MP/game state)

glossy inlet
#

not without intercept, no

#

all you get is the string of the command you give it

vague shard
#

does arma open ports at game start or only when going in MP?

nocturne basin
#

Just tell the extension at Start 🤔 🤔

glossy inlet
#

I'd say when going mp

nocturne basin
#

Or deploy two extensions

#

One for clients

#

And one for servers

vague shard
#

what does that help? a client could still trigger the extension on other clients

wind elm
#

Why 2 Extension? Doesn't make sense

nocturne basin
#

To detect if executed via Client or Server

#

If Client executing on Server is the concern, remotexec Filters are the solution

glossy inlet
#

i think the extension kju is talking about is clientside only

vague shard
#

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

nocturne basin
#

You cannot make flooding impossible

#

Plus you should not ban the IP

#

Flooding is prevented via rate limiting

vague shard
#

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

stray galleon
#

Define excessive? If you are talking DDoS kind of excessive then you won’t solve it by some restrictions

smoky halo
#

are you talking about arma connections?

vague shard
#

@stray galleon more than once per second?

#

@smoky halo no custom server browser dll extension

stray galleon
#

that's nothing, it should be able to handle 100x that easily

wind elm
#

The Server, maybe. The Backend is another thing :/

smoky halo
#

windows has ping limits too

#

think its default pretty low

#

connection limits

elfin oxide
#

@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

glossy inlet
#

he wants to prevent hackers from using remoteExec to let other players call the extension, and basically launch a botnet attack

wind elm
#

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)

elfin oxide
#

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

glossy inlet
#

htmlload has a url whitelist

elfin oxide
#

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

nocturne basin
#

"Rate Limiting"

drowsy flame
#

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?

vague shard
#

usually means your PATH variable from windows is bugged

#

and thus it cant find BI A3 tools

drowsy flame
#

how would you change the path @vague shard

vague shard
glossy inlet
#

Bi tools aren't in PATH.

scenic canopy
#

@drowsy flame there's usually more info in the pboproject console window as to why it's disabled

drowsy flame
#

i fixed it dw

#

but i reset windows, and didn't actually launch arma 3 tools from steam before i tried to pack something 😂

stray galleon
#

strcat scans destination every time you append to it until it finds '\0'. What a waste

fallen stone
#

What would you prefer it do? Overwrite?

stray galleon
#

no return offset maybe so that you can pass dest + offset

fallen stone
#

And what stops you using strcpy directly..?

stray galleon
#

I didnt write that

fallen stone
#

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?

stray galleon
#

I dont use strcat

#

I was curious how it is written

fallen stone
#

In a way that isn't a waste

stray galleon
#

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

fallen stone
#

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)

dawn palm
#

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.

keen owl
#

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.

stray galleon
#

strcpy(str, str+1); this is undefined behaviour in c++

dawn palm
#

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

keen owl
#

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.

dawn palm
#

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

keen owl
#

Makes sense. MSVC won't even allow you to use standard C functions without defining some _CRT_something .

dawn palm
#

#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.

keen owl
#

Yeah, that's the one. Put it in my CMakeLists

dawn palm
#

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

stray galleon
#

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

keen owl
#

That description is memmove not strcpy right?

stray galleon
#

yeah

keen owl
#

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...

dawn palm
#

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.

olive rover
#

is there way to teleportation in infistar with helicopter without dieing ?

fallen stone
#

🤣

sly skiff
#

@olive rover no, don't cheat. That's just the worst.

cinder meteor
#

$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?

scenic canopy
#

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

cinder meteor
#

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?

scenic canopy
#

cpbo also supports it

#

But far from all tools

cinder meteor
#

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```
scenic canopy
#

Yes

cinder meteor
#

Yeah actually if I open another .pbo in text editor I see prefix\0z\thePrefixFromPBOPrefixFile\ 🤔

scenic canopy
#

That’s what the prefix file is used for

cinder meteor
#

Yeah cool! I think this is where it gets put to:

struct ProductEntry
{
  Asciiz    *EntryName;      // = "prefix"
  Asciiz    *ProductName;    // = "<AddonFileName>"
  Asciiz    *ProductVersion; // = ""
};
scenic canopy
#

Yep!

cinder meteor
#

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...

young plaza
#

anyone remembers that website that checks if your key has been already used?

neon flax
#

You mean the TAG?

#

Ofpec

#

But not many people use it these days afaik.

young plaza
#

oh thats the one, thanks
better safe than sorry

sly skiff
#

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.

pearl prism
#

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
glossy inlet
#

Tried installing detex again?

pearl prism
#

Did
Multiple times

#

Even tried wiping everything and doing a fresh install
It didn't help

glossy inlet
#

@dawn palm ^ subscriber in need of halp

scenic canopy
#

@pearl prism check your mikero bin folder if detex.exe exists

dawn palm
#

@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.

scenic canopy
#

since the other tools are detected I guess b)

dawn palm
#

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

pearl prism
#

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?

dawn palm
#

@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=<<<<<<

glossy inlet
#

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

dawn palm
#

^this (said much better than my long winded answer)

pearl prism
#

How can I check if they are "registered" as you said?

dawn palm
#

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

pearl prism
#

That's what makes me confused
The detex exe works

dawn palm
#

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

pearl prism
#

I see some folders
So then I should have a DeTex one right?

dawn palm
#

yes

pearl prism
#

Oh wait
@&#!*ing hell
I think I know why this is...
I feel so stupid rn

dawn palm
#

better than me pheeling stoopid

pearl prism
#

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...

dawn palm
#

well, when u fix it, let me know so i can tell others with same problem in the future

pearl prism
#

I should stick a post-it on my screen

#

Yeah yeah
I'll check if it fixes now

dawn palm
#

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.

pearl prism
#

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

dawn palm
#

after you've waited for a map to bake for 3 hours, that sound is most appropriate😎

pearl prism
#

I can see that 😄

cinder meteor
#

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!

dawn palm
#

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

sly skiff
#

Weerotatingparrot

glossy inlet
#

Woo 🚒

orchid shadow
#

Neat.,

cinder meteor
#

Did anyone make an addon which adds a big button somewhere which opens the arma rpt folder? :D

wind elm
#

%LOCALAPPDATA%/Arma 3 in a folder?

#

Or... shortcut on the Desktop?

glossy inlet
neon flax
#

VSCode plugin for "open last rpt"

cinder meteor
#

Yeah I meant something for users

#

Because it takes so much effort to explain for everyone where the .rpt file is

glossy inlet
#

win+r, copy paste what Dscha wrote, enter

cinder meteor
#

Haha ok

#

pretty cool yeah

#

I made a system variable for the .rpt folder xD

neon flax
#

You can open RPT folder from Eden but I doubt it can be achieved via scripts as It's hardcoded most likely.

cinder meteor
#

Sure, I implied a .dll addon

#

callextention

#

I should try to do that when I get bored, never did a callextention .dll yet anyway

elfin oxide
neon flax
elfin oxide
#

Too much dependencies just to write a file imo

scenic canopy
#

I did a small app that just uploaded the latest RPT to pastebin and added the link to clipboard

cinder meteor
#

Cool thing @elfin oxide , what a shame I missed it somehow and wrote my own 🤦

#

Well at least I played with intercept

elfin oxide
#

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

cinder meteor
#

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

scenic canopy
#

just an exec call 😛

cinder meteor
#

@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?

glossy inlet
#

Probably just not flushing after logging a line would be enough to make it fast.

cinder meteor
#

So you have figured the automated WS uploads @neon flax ? Congratulations! Hope it will save lots of time for you!

elfin oxide
#

@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.

cinder meteor
#

That's cool, thanks for the info, so to explain it short, you offload i/o to another thread which makes sense

elfin oxide
#

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

cinder meteor
#

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?

elfin oxide
#

@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

cinder meteor
#

Yeah I get that, thx

karmic niche
#

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)

nocturne basin
#

@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

fallen stone
#

What does that have to do with async?

Re the flush conversation, it's usually good to let libc/win equiv handle it

elfin oxide
#

@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

glossy inlet
#

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.

fallen stone
#

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

nocturne basin
#

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

nocturne basin
#

Has anyone in here ever googled something like state machine editor during development? (arma tooling related excluding FSM + non arma programming related)

glossy inlet
#

I never googled that specific term no, but I have the feeling you want to ask something else with that question?

nocturne basin
#

not really, just testing the waters here

glossy inlet
#

I took a blueprint like graph editor and turned it into a statemachine debugger a few weeks ago

nocturne basin
#

blueprint like editor?

glossy inlet
#

would just need ability to click onto the lines, and add conditions/events to then, boom statemachine editor

nocturne basin
#

kk

#

what have you been using as base?

glossy inlet
#

that hing the screenshot is from... eh.. cmon google

nocturne basin
#

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

glossy inlet
nocturne basin
#

more like organize it in a better way

south canopy
#

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

cinder meteor
#

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 ...

glossy inlet
#

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

cinder meteor
#

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?

glossy inlet
#

bikey and bisign name need to match

#

mod.bikey -> pboname.pbo.mod.bisign
mod.bikey ! -> pboname.pbo.modv1.bisign

cinder meteor
#

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?

glossy inlet
#

manually should work

#

the name is inside the bikey file too.

cinder meteor
#
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?

glossy inlet
#

could be

cinder meteor
#

maybe it only signs binarized pbo files properly?

cinder meteor
#

So I have packed same folder with arma's standard pbo tool and then signed, gives no issues

dawn palm
#

or you could use pboProject and be done with it.

#

all the above to avoid using a tool, not toys

cinder meteor
#

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 😄

glossy inlet
#

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

cinder meteor
#

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

glossy inlet
#

yes yes

dawn palm
#

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

cinder meteor
#

Thanks a lot! I guess the sha is incorrect then. WIll be thinking of using better tools then.

dawn palm
#

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.

orchid shadow
orchid shadow
#

^Also can read "normal" sqm now.

karmic niche
#

@orchid shadow could you add a LICENSE file, please?
Also, congrats!

scenic canopy
#

wouldn't it work as a generic arma config file parser?

glossy inlet
#

well missions don't have array append, or inheritance.

orchid shadow
#

Sure, but i don't support it. made really only to solve some stuff in the community i play in.

karmic niche
#

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

nocturne basin
#

Neat

orchid shadow
#

I did. 👍

kindred pike
#

Does anyone know which Dev was/is responsible for the Arma 3 tools package? Specifically the game/ server updater.

glossy inlet
#

BI tools is done by tom, but he's on other projects now.
Why?

narrow bough
#

Wizard did some too

glossy inlet
#

Oh right, forgot about Wizard (pls no hurt)

obsidian sluice
#

✍️

kindred pike
#

@glossy inlet having trouble with redirecting steamcmd standard output in .NET but BI have it working perfectly in their updater.

karmic niche
#

I don't think BI are using steamcmd but steam dll directly, instead

scenic canopy
#

@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

karmic niche
#

@native kiln could probably help you

scenic canopy
#

output is buffered to 4k afaik

#

you can change to line buffering instead

#

or run some kind of fake pty / tty etc

native kiln
#

pty was the most successful I managed

scenic canopy
native kiln
#

alternatively I made a library to download from steam using steamkit

scenic canopy
#

using steamapi (steam client) or third party steam cdn client is a lot easier than steamcmd 😛

native kiln
#

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

scenic canopy
#

you can download stuff using steamapi without subscribing

native kiln
#

only issue I have with steamkit is the not so great CPU performance on download

scenic canopy
#

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

native kiln
#

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)

scenic canopy
#

no, I use that 😛

#

just download without subscribing

#

it's supported in steam api

#

it's even mentioned in their docs 😄

native kiln
#

thonking hot damn

#

but still requires steam running no?

scenic canopy
#

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 😛

dull parrot
#

SteamCMD starts and stops Steam automatically

scenic canopy
#

steamcmd uses a different session than the desktop client

dull parrot
#

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

scenic canopy
#

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

kindred pike
#

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.

scenic canopy
#

or integrate the main library if you want a tighter integration

kindred pike
#

Ah ok nice. Didn't even realise this existed.

#

Thanks.

scenic canopy
#

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

kindred pike
#

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.

scenic canopy
#

or just using steam api directly

dull parrot
#

Oh, same he Dahlgren... did not know that existed... Thanks!

scenic canopy
#

steam cdn changes sometimes, changes auth, moves base api resources etc

#

and libraries have to keep up

kindred pike
#

Would help if I took the time to actually switch to C# too.

scenic canopy
#

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

kindred pike
#

Yeah not really preferable as its a server tool, very few people install the steam client on the server from what i've encountered.

scenic canopy
#

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 😄

kindred pike
#

Ah yeah makes sense in that case. Nope, for me FAST is a good old fashioned desktop app for windows based server hosting. 😄

native kiln
scenic canopy
#

😉

#

I wonder how many steam related repos I have on my github thinkank

#

but it's more focused on server provisioning, workshop metadata, CI testing etc

native kiln
#

id assume many more private than public ones

scenic canopy
#

yes 😄

#

ah yeah, our community's launcher as well

vague shard
#

what tools support setting appId to PBO/P3D/WRP?

wind elm
#

pboProj afaik

vague shard
#

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

glossy inlet
#

Conversation cleaned up, too dangerously close to #rules

royal root
#

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

dawn palm
#

i'm a pure bred c++ man. For various reasons i barely understand C# but i think almost everyone here uses it in preference.

scenic canopy
royal root
#

yeah, that thread is what i went off off. I'll post my code in a bit

scenic canopy
#

empty string could also mean that the extension isn't loaded

#

check rpt for info regarding that

royal root
#

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

scenic canopy
#

@mod/extension.dll for 32bit and @mod/extension_x64.dll for 64bit

royal root
#

arma did have a lock on the dll while it was running though

scenic canopy
#

it will be further down in the logs

#

it won't be loaded until you call it

royal root
#

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?

native kiln
#

Does you extension have Dependencies on other DLLs?

royal root
#

no, it's basically one of the string manipulation examples in the thread

scenic canopy
#

a zero byte pbo file will trigger and error / crash, at least last time I tried

#

as it's not a valid pbo file

royal root
#

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

scenic canopy
#

64 bit arma will only use 64 bit dll

royal root
#

so i shouldn't worry about building for both platforms if I'm just testing?

native kiln
#

yes

royal root
#

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);
        }

    }
}
native kiln
#

silly question but mod loaded, dll name in sqf code correct?

royal root
#

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

native kiln
#

try changing the library to netcore instead of netstandard

royal root
#

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)

native kiln
#

hmm ok

#

I'll try making a DLL after breakfast, maybe I can figure out what's wrong

royal root
#

thank you!!

scenic canopy
#

yeah, you'll probably want netframework and not netstandard

royal root
#

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!!

native kiln
nocturne basin
#

Still arma should error something

strange osprey
#

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.

dusky dune
#

dont use pbomanager

glossy inlet
#

maybe there is no paa in your mod

strange osprey
#

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?

dusky dune
#

Are you trying to pack a mod? makePbo / pboProject

#

unpack = depbo / eliteness

strange osprey
#

Oh, I apologise, I use pboProject

#

And I am trying to pack it.

cinder meteor
#

<dumb idea>maybe paa is in excluded files?</dumb idea>

glossy inlet
#

<dumb idea>

#

the things people often do wrong, are usually dumb

sly skiff
#

@strange osprey do you have a config.cpp in the folder you are packing

#

are you packing from P: drive?

strange osprey
#

Yes and yes to HorribleGoat, .paa is not included in excluded files.

sly skiff
#

if you unpack the pbo you make are the files there?

strange osprey
#

there is no pbo, I try to make a pbo.

sly skiff
#

ok so you get some error message then?

strange osprey
#

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.

sly skiff
#

post the whole error message.

dawn palm
#

@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.

strange osprey
#

It's a mod adding a whole bunch of stuff. not a mission.

dawn palm
#

that's not what i said above

#

you have no hope in hell of using pboMangler to >make< addons

strange osprey
#

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.

dawn palm
#

look at your doubled up prefix\

#

it's telling the truth

#

there is no such thing in the game as P:\paa

strange osprey
#

what?

#

I don't see what you mean.

dawn palm
#

paste a screenie please of your project folder

#

or the front panel of pboProject

strange osprey
sly skiff
#

is your config.cpp in the PSO folder?

dawn palm
#

P:\PSO bares no relationship to P:\paa OR p:\pso_foxhound

strange osprey
#

no, it's inside a file inside of addons which is inside of PSO

dawn palm
#

paste a folder screenshot please,. this is easy to sort out

strange osprey
sly skiff
#

youre not making a modpack are you?

strange osprey
#

and don't worry I have full premission for all of these.

sly skiff
#

lets hope so

dawn palm
#

he's trying to repack a mod folder

dull parrot
#

Looks just like the contents of the PSO Mod

dawn palm
#

pso_foxhound belongs at the root of the p: drive

strange osprey
#

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.

dawn palm
#

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

dull parrot
#

I.e. Move all the contents of addons one level up for the sources

sly skiff
#

2

#

he has them in P:\PSO\Addons\

strange osprey
#

How do I make them all one mod then?

dull parrot
#

Yeah 🤦

sly skiff
#

you kinda dont I think? 👈 could be wrong 👇

dawn palm
#

pboProject makes the mod for you

#

the big button says MOD folder destination

strange osprey
#

So do them all seperately inside of the same mod output?

sly skiff
#

the mod folder can and usually does contain muplitple pbos

#

yes

dawn palm
#

they must ALL be at the root of p:\

strange osprey
#

Alright, got it, thanks.

dull parrot
#

All of the individual folder's contents get built to the same destination folder

dawn palm
#

no pso

#

no addons\

sly skiff
#

but also the ones that are on the workshop would likely be better to be used from there

strange osprey
#

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.

scenic canopy
fickle void
#

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).

smoky halo
#

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.

fickle void
#

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

neon flax
#

with hemtt philosophy you should have these includes in your project

fickle void
#

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

neon flax
#

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.

fickle void
#

i just downloaded latest release

#

ah okay i will do that then thanks

neon flax
#

And it's only needed if you want to use addon templating functionality

fickle void
#

yep it just says "latest release" its not marked as alpha or anything, so annoying :/

neon flax
#

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 😛

fickle void
#

yeah definitely it looks much more modern than other tools i have seen, just hate when docs and versions aren't clear :/

neon flax
#

join the Discord and bother @rough grove so he'll finish it bloblgrimace

#

or contribute 🙈

scenic canopy
#

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

cinder meteor
#

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.

dusky dune
#

dude pboproject is terrilbe, its not letting me pack my mod!!!!

#

/s

#

it just complains that this path is wrong!! 😦 addonb uilder works finejlk1kj1j

cinder meteor
#

It's totally cool that it verifies such things

#

Addon builder will pack anything :D

nocturne basin
#

Sqf-vm for unit testing
(shameless self advertisement)

fickle void
#

already doing that bit 😄

cinder meteor
#

Did you try the new sqf vm?

#

I didnt have time to try it

fickle void
#

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?

fickle void
#

okay no one has an opinion so i'm going with the easy route!

low gyro
#

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

vague shard
#

the server used to look also in MODFOLDER\keys

#

but this may no longer

#

new key per release ofc

neon flax
#

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

cinder meteor
#

indeed, the need to copy keys manually has confused me so much

#

it's like doing mod setup, twice

dawn palm
#

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.

scenic canopy
#

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

dawn palm
#

^

#

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)

dull parrot
#

I just have a script to use SteamCMD to update mods... part of the process is copying the new keys and removing old ones.

vague shard
#

\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?

scenic canopy
#

out of RAM? 😛