#arma3_tools
1 messages · Page 2 of 1
hm still nothing. Is it possible that you can't launch using the arma3.exe but you have to launch through steam?
yes
SHELLEXECUTEINFOA ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = program.toStdString().c_str();//path to arma3.exe
ShExecInfo.lpParameters = startparameterConnected.toStdString().c_str();//startparameters
ShExecInfo.lpDirectory = MU->GlobalVariablesO->ArmaPath.toStdString().c_str(); //workdir
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL;
ShellExecuteExA(&ShExecInfo);
I fixed it xD
nice ^^
I thought I had set the window style to normal....but it actual read hidden facepalm
Too lazy to make an installer lol. Who needs that
@plush copper what language are you using for your launcher?
C#
not thought about using process.start to launch it?
I actually did switch it to that now
it's easier and takes two seconds to get it working
yea its not that bad
I have the extra tabs for a mod that I will probably convert it over to eventually
i had fun when doing the wasteland launcher
I just made this one up this morning xD
When I create it for the mod in the works I will create a custom tabcontrol and all that good stuff
https://www.epm-gaming.co.uk/screenshots/20151026183342688.png
Need to fix some things in ours
Yeah there is always something lol. Same language?
yea c#
I’m trying to get cupcore2p to work but it keeps telling me I don’t have cup terrains core installed which I do. I deleted and reinstalled both cup core and cupcore2p and it’s still saying I don’t have cup core
My path to cup terrain core is “drive\steamlibrary\ steamapps\ workshop\ content\107410\ 583496184”
Setting path to steam workshop for cupcore2p is “WSPATH=$steampath$\steamapps\ workshop\ content\107410
So on my launcher it will only detect a mod if the folder is named "@ModName" it can't just be "ModName" any way around that?
I haven't come up with any work around other than making them select each mod folder
so you want it to auto detect anything wit @ in the folder?
I already have it set to autodetect. But I was wondering if there is anyway to make it detect any mod folder even if it does have @ in it
when you have a cut on the tip of your finger and are coding...really sucks
@orchid shadow that's actually a really good idea with switfy :P
How many people are using it currently for their mods?
check if it has an addons subfolder containing .pbo files
I suppose I could, I would just have to make sure I exempt the default arma folders that are configured that same way.
@full drift 1tac, Folk Arps, Shacktac and some other smaller communitys
you can extract cup pbos manually too just like any other pbo. seems like its not working anymore
I’ll do that, thank you
Is it known what AVGCTAGG (average color tag) is used for in PAA textures? Is it used for background? 🤔 Or is each pixel multiplied by this color? 🤔 Is it used to detect anything else?
I'm crafting custom PAA renderer (OFP compatibility oriented for now only to keep it simple), wondering about this tag currently 🤔.
damn good question
http://germanforces.ovh/#mods My Launcher/Updater/Stuff if anyone wants to admire ^^
It seems useful to detect transparency of the texture only in OFP. 🤔
=> useless for texture renderer if I understand it well
that's a little surprising since transparency is handled by the dxt1 or 5. Perhaps it's only useful for the non dxt mipmaps
(if i remember correctly tho, AVGC is a mandatory tagg. (I can check that if you need that info)
my better guess is dxt mipmaps can only have (up to) 4 colors. it might be the biasing shade.
it is not mandatory per my understanding, I have valid testing greyscale paa (PAA_8080) with offsets only tag
but maybe PAA 8080 is the only exception (as on wiki mentioned)
paatool assigns just 0xFFs -> non-transparent if I understand it well
well, as you prolly know, pal2pace and texview have not changed since ofp. So Bis probably don't know either.
https://github.com/SnakeManPMC/ofp-PAATool/blob/336638db40f121c5b9eecdcd92bc47f7a57731fb/PAAFile.cpp#L39
from @empty kindle , damn our bot sucks
got muted for 10 minutes for GitHub link 🤦
anyway thanks for some hints @dawn palm, I'll explore original OFP files to get more info
at least for now it seems only AVGC, FLAG and OFFS tags are supported in OFP
you can use my tool depax to rapidly scan thru folders looking for specific TAGGS or lack of them
I do have fun creating custom tools. That's all about the fun.
I'm trying to learn and understand the OFP file formats and document them finally. It is finally time 🙂
the biki for paa files is accurate. it was written by T_D with some help by me too. As mentioned, it hasn't changed since ofp times so bis haven't broken it.
I'm still a little lost sometimes, like currently with AVGCTAGG :/
and it mixes all versions together
it can of course always to with further examples
but indeed, it is super useful source
all bis engines understand the formats with the sole exception of ofp's pallet index if .pac
it depends on what "understand" means, OFP ignores unknown tags in PAC for example
true. I was thinking forward compatibility
its used for "no mip loaded yet" default color
its basically 1 pixel resolution mipmap
could also be used for transparency detection, not sure
Clear, but is it really used in OFP?
For this default color?
thanks for this info, it all finally makes sense btw 🙏
Don't you love when your power goes out...
In A3 it is, and Mikero said it didn't change since OFP so maybe
But in general the 1 pixel mip is basically never visible so does it matter much? eh
I think I seen that few times in crCTI OFP when engine is having hard time to load thingies quickly when there is a lot of different objects on scene. Some surfaces are just one color for short amount of time.
Let me know if this is cross-posting but I thought this "smart" CfgFunctions generation Python script might be (more) useful to link on this channel: #production_releases message
Example output: #production_releases message
imho it is
What do you think, should I rather remove the original post and just link it here or delete the message above?
I'm not sure which channel is the better one
I don't think I will count it a crosspost if the initial post is there and you're just referring to it
And also the #production_releases is not a place to discuss yeah, so carry on
all i can tell you is this is a centralised funnel for all tool makers so we each get an idea of what tools are happening. Many if us probably mute (most of) the other channels. I 100% agree with @dense cove
I rarely rarely post in other channels but if a major update has happened for maps (or p3d), I am likely to cross post
Anyways the thing is you can generate CfgFucntions one click? I think that's cool addition
damn right
Yes, just run the file and it will generate it automatically. There's support for nested folders too
Since CfgFunctions is really straightforward to generate automatically, nice to have it in PboProject as well maybe
I should add a license to it tbh, but not sure since the original script is 7erra's, I just modified it (quite a bit though)
Yeah, I just have pinged him because of that many times already so I'm trying to avoid it lol
Probably making him annoyed already 😄
Oh well, once more. @blazing needle can you add a license to the original script so that I can license my own script? I would like to let others do whatever they want with it, but it's yours originally so it's up to you 🙂
if i were ferra i would not agree with that. his intention was different. simply credit him with the original and leave the rest alone.
without being too rude, most licences are ego instead of commons sense.
it does have the MIT license already 😁
I'm blind... Sorry 😄
Also there is a little flaw with the config format. When trying to view CfgFunctions in the config editor it throws an error about not being able to read empty classes, e.g. class MyFunction; (no brackets after classname). not sure if this is an issue with Arma, the config or the config viewer...
It's fixed in the version above
I usually add permissive licenses to my work bc they are used by other developers to make content for Arma. Getting my stuff stolen or misused is just less likely since the reach usually includes members of the community who use it to improve said community. if that makes sense.
@glossy inlet obviously it is a launcher I know that but what is the updater? Does it just update the launcher or mods or the game or what?
Update our groups Modpacks
Everything needs webapp nowadays 👀
CLI ftw 💪
As much as I like CLI too, I prefer some GUI apps like GitKraken (especially). It gets bugged in some rare cases but it's such a pleasure to use Git with it. It's just not nice to have 10 Electron apps running at the same time 
I mean, Webapp because you don't need to download any script, you don't need to install python on your system.
You open a website in your browser, click a button that opens a folder select. Select your folder with scripts.
Boop website now displays your CfgFunctions config.
And ideally the website also offers you the option to download it as a single html file which you can then run offline too (Very hard if it includes things like jquery, but.. technically you can merge it all into html with a bit of effort)
And because its html, you already have the webbrowser to execute it, no need to install anything extra
Ah, you meant it like that
I think in browser file processing is a awesome possibility that I only see veeeery rarely used.
Lou did it with https://save.arma3.io/
That loads a file from disk, and spits out a edited file all inside a single webpage and offline without uploading your file to some server.
(technically its 3 files, html, js, css but they could be merged into one html)
Sadly I don't really have projects that could use this approach
But for little tools like yours, that would easily fit into such a format.
But then you have to write it in JS 😢
While things like https://pyscript.net/ do exist, I'm not sure you can use them offline
SQF has messed up our brains already, the damage has been done
Speak for yourself! 😆
Actually, I guess you could just host the js files of the python installation locally and pyscript would then do the trick 🤔
Python is available in Microsoft Store nowadays btw, it's quite handy
Yes, but we're talking about python-in-the-browser-for-lazy-genZ-people 😛
Something like this: https://demoapp1.pyscript.jhanley.com/
The script fits in a single discord message.
Converting to javascript is probably easier than trying to run python inside javascript 😄
Ah not sure why the message duplicated.
Well, it depends on what you want to do.
But for some people out there, that would entail learning how tf JS handles IO in the browser 😛
And some people out there have been avoiding JS like SQF the Plague 😛
cough
cough
Stop it! It's contagious!
And also, as you can see in that demo I posted, both numpy and matplotlib are used, so you can do pretty advanced mathematical computations (and you can do image manipulation as well)
Would be handy as VSCode plugin
Not a bad idea. Will/would just have to learn how to create VS Code plugins 😄
wasm
That's precisely why I'm mentioning pyscript: wasm 😏
We'd love to use swifty, but rehosting mods is the sticking point for us
Just have chatgpt convert it from python to js and watch as it refers to a non-existent library it just made up that has feature parity with python
hmmmm I am currently trying to get into web development 
(There's a magnificent completely free hands-on MOOC about modern full stack development offered by my uni. I can send you a link via DM, as I guess linking it here might be considered as spam maybe (?) It's quite a deep dive for a single course and oriented towards already at least somewhat experienced programmers, so I thought you might like it)
oh hell yeah, I've been looking for some good introduction. either the tutorials online are only about front/backend or it wants to sell some product
Would you have to rehost the mods?
aloha
^ that's btw something I have plan to do (at least for OFP)
Anything that equals the intuitive nature of pbo manager is winner, The app itself is quite useless because it doesn't de/binarise param files. To modernise it into web space (and fix it's short comings) would be heavily used.
we'll see, first I have to learn a lot about web development. and in this case about Arma's file formats too
I think I have a WIP one somewhere with working file tree
Can anyone please send me an invite to Mikero's Tools discord , thanks 🙂
@dawn palm Maybe the man himself
can be found from Mikerotools wiki
^
not really honestly ... C#, rust, c/c++, ... all compile to wasm nowadays
Heck ... just wrote a basic cfg parser for my webapp recently to be able to create a list of all slots in a mission
it is horrible code
but it works and thats, in this case, enough
learning js is still a pretty safe bet given that almost all websites rely on it
And i'd argue that js is fairly similar to sqf
but using wasm for already existing pbo libraries would be useful
And i'd argue that js is fairly similar to sqf
god help us all then.
writing the pbo library in js was easy, writing paa to image not as much 😄
easier to go down the wasm route there, even more so since there are already paa wasm libs
it is not a rocket science in the end once you break the barier and understand how to parse binary file format
the disappointing thing with wasm is it can only be run on a server. This adds some additional annoying steps when you want to test something, or, just look at the appearance of the 'page'. Not a biggie but a definite irritation.
It's also questionable how much use binarised code is when internet/lan speeds are no where near as fast as the cpu. You generally just end up waiting a lot faster.
what do you mean? you can run wasm in the client browser
Right. The whole point of wasm is running "native" code safely in the browser. It's just VM.
there are also local wasm environments like wasmtime
it's a binary like any other, it just needs some runtime love
wasmer as well
if that's the browser, your hypervisor or some runtime process that's all the same to the wasm binary
seems quite flexible these days
just like running a jvm
https://paa.gruppe-adler.de works with WASM and runs everything 100% on the client
and works 100% offline, after you've visited the page once
Still: WASM is usually not quite as fast as a desktop application, or at least it's way harder to optimize WASM
yup, there are sources as well on github for this
especially when talking about multi threading, but that's getting a lot better over the last few months
just use a service worker 
Wasm relies on the same basic mechanics as Javascript does for optimizations
And multithreading is pretty much depending on the browser thanks to some pending standardization
jep
although since SharedArrayBuffer are widely supported (again), multithreading is at least (kinda) possible
through web workers
which isn't as easy and as performant as just OS threads
but doable
There's no good channel, so i'll ask here: is there any valid case where there exists an ambiguity regarding which pbo contains a given directory path? In other words, can two pbos have the same prefix?
Required addons array would dictate the load order I think
But would two pbos with the same prefix, or two pbos with nested prefixes actually get loaded?
no you can't. the 2nd pbo will obliterate ALL content of the first.
you can of course have
pbo1 prefix=a\b\c
pbo2 prefix =a\b\c\d
IF pbo1 had, by error, a subfolder called d, all 'd' contents would be destroyed by pbo2.
load order is important here that pbo1 must happen first
Thanks. This is just the information i was looking for.
to add one small wrinkle, addons with addon are common. In this case, one pbo is involved which includes d, but the d\folder contains it's own config.cpp (and consequently it's own cfgpatches). This technique is used to publish one, single big pbo, but provide 'hot patch' pbos which only overwrite d (eg)
The game never unloads an addon after loading it, right?
so I have some PoC for Rust/WASM PBO metadata reader
notice I'm Rust/WASM total noob, this is my first Rust and also WASM project
it took me ~6 hours to craft together, not bad IMHO
@fiery hemlock no it can't be. You can use file patching to overwrite it
(operates in the same manner as a pbo with same prefix was loaded after initial one)
similarly the config,cpp is 'fresh' because cpp's aren't (despite appearances) merged into one big one
Question how would I auto detect the ArmA 3 directory for my launcher?
Either first or last one will win, dunno. I'd expect last one
They will get loaded, trigger an assert in internal build, and one will win
pbo prefixes are put in sorted array, longest matching path is looked up (binary search) to find the pbo the file is in
But that was changed only recently, late last year I think, before that it was without binary search just iterating all pbo's
correct
._.
it unhappi
nothing in console logs
Firefox 1112.0a1 nightly in incognito mode
Chrome 110.0.5481.180 in incognito or normal also nothing
But that's exactly the kinda app I meant.
I'd love to see more "you don't have to install this, it can just run in your browser, but if you want you can also download it" kinda applications like this. I'm kinda stonished that there are so few.
VS Code in browser is probably the biggest example, and its amazing
HEMTT 1.0 is out!
https://github.com/BrettMayson/HEMTT/releases/tag/v1.0.0
Thank you for everyone that provided testing, feedback, or code contributions.
I think HEMTT is now in a state where most projects can start migrating over. There are still improvements and features than can be done, so continue to provide your feedback and bug reports!
Does it do A2?
with minor differences in flashpoint, pbo structure is universal.
Yes, but presumably this tool does more than just pack PBOs.
it could wash dishes and mow the lawn too. the answer to your question is all arma pbos are universal hence a2 = yes.
As for extra goodies, the code comes from Armake by koffien flummie. A tool that was overly ambitious. I know nothing about any 'extra' features. So best bet is for you to try it.
In my never humble opinion, the code is not part of the C family of languages. (perl, Java, dotnet eg) so won't be well supported by a host of coders.
It was tested only with OFP vanilla PBOs for now.
I thought PBO format didn't change 🤔
Oh the tags at the start maybe
tags are indeed not supported in there, but the are after "index" part if I understand it well, it should not be affecting this
I'll check on that file.
The things that didn't change between A2 and A3, yes.
So preprocessor yes, PBO signing no, PBO packing yes, config rapify probably yes if you don't use array append
cwc is the only pbo that does not have a properties list in the first entry
No they're at the start, and you indeed don't handle them
https://github.com/ofpisnotdead-com/rust-pbo-wasm/blob/master/src/lib.rs#L95 they would be before here
cool, I'll add support for them
Or after,
See https://github.com/BrettMayson/HEMTT/blob/v1.0.0/libs/pbo/src/read.rs#L33-L36 for ex
First file name is sreV then tags
ALL pbos have an unchanged series of header entries, followed by a data block followed by an optional checksum/sha
three header entries are special having no filename
the first, the last, and the optional checksum
the first entry is same as all the others but has concatenated property strings "value","something", after the 21 byte entry itself. strings in bis are utf8 encoded.
the last is almost always zero filled but except for vbs, it's values are ignored.
the optional sha key (or 4 byte checksum for Xbox elite) is only used for MP. it is ignored for SP and has no meaning filled or otherwise
cwc specifically does not have a 'first' entry. and neither it nor Resistance have the optional checksum.
Well i need at least p3d binarisation, which afaik is different between A2 and A3. I use pboProject, but i'm not entirely happy with it. The incremental builds are lacking, and i think it doesn't allow custom build steps.
p3d binarisation is not too sensible. Bis can and do change the format quite often. Leaving you with a tool that (probably) won't be updated.
if you meant for HEMTT to call bis binarise, that's a fairly advanced and elaborate step.
Either is fine by me, as long as i get the output i need.
The first pbo header entry (The Vers one) is also optional
HEMTT supports p3d binarization by calling A3Tools Binarize.
It may be able to do that for A2 too you probably need to adjust it a bit to find the A2 tools variant though
it can only be optional when no prefix is required. In this case the NameOF..pbo is substituted.
thought HEMTT wont verify that all assets required by binarize is present
so you might end up with wrong face properties i.e. transparency
The BIS binarize doesn't give any dependency information, does it?
So you wouldn't easily be able to do incremental builds on top of that?
it supplies a dep file
i have no idea what an incremental build means.
bis don't rebinarise p3d if it's already in p:\temo
this has it's own drawbacks because they don't detect if an rvmat or texture has been modified
Only building when something changes.
I get this error, I'm making a custom grenade for the grenade launcher and i cant figure out what might be causing this
Idk if it's pboProject or bis binarise, but a build with no changes still takes an eternity with lots of assets.
@fiery hemlock check the time taken between a full build and not. Should be around 4 times faster
pboProject gives you two elapsed times in seconds. one for bis binarise and one overall
having 'noisy'' set affects speed considerably
if you haven't done these things already, you don't have much to complain about.
is this channel best to ask about mission.sqm data structure with 3den or another channel?
trying to figure out why a tank commander isnt effective commander of the tank but the driver..
it seems either flags=6; (highest value per crew) or class CrewLinks (but this isnt set always for vehicle crew)
Is that mission.sqm?
I'd expect that to be config
the slot defines if you're the boss? And mission just stores what slot you're sitting in?
@uncut whale It's kinda the point of swifty to be in control yourself.
The HEMTT pbo library can be used on it's own in other projects if you'd like, or to use as a reference. https://github.com/BrettMayson/HEMTT/tree/v1.0.0/libs/pbo
Very little of current HEMTT has code from armake. It's either been rewritten or very reworked
As has been said, it does use A3's binarize. You could create a feature request to add support for A2, but it'd be pretty low priority for me.
You could also just pack without binarization, but that's not in the current release, will be in the next
It's funny how difficult launching and stopping sub processes can be... But I think I managed to do so now with what I did
@plush copper Use registry keys. Once Arma 3 is launched in Steam - some records (incl. install path) are made.
HKLM\SOFTWARE\Bohemia Interactive\ArmA 3\Main
@plush copper Also, dont forget about executable selection (mainly because of perf builds).
Something like this:
https://github.com/X39/UnitedTacticalForces/blob/master/source/X39.UnitedTacticalForces.Api/Services/GameServerController/Controllers/SteamGameServerControllerBase.cs#L193-L210 this is what i came up with for now ... fingers crossed that this works
because otherwise i wasted a few days on this crap
@plush copper
@plush copper ups sorry ;D take a look at my c# code: http://pastebin.com/ZXFxH168
hmm lol ur right
just replace it with the key you wrote in the chat
@small vault 32 bit is dying
I would say that's a punishment for running C# on Linux.
Linux ain't the thing here that concerns me
if anyone would be using 32bit os...they wouldn't be running arma
i haven't found the right chat to ask but my mod signs just do NOT work and i have zero clue why
Why not?
What tool are you using to pack pbo
addon builder
how do you know they don't work
check signatures tool says they don't, server says they don't?
Check signatures says there is servers say they don't.
i tried making different keys, i tried packing with PBO project
no luck.
for pboProject you either have a pboname.bikey in the @mod\keys folder or you don 't check that first and ask again
The problem isn't that I didn't receive the keys, they just don't work on servers
I have zero clue what I've done wrong
i don't know what that means. either the bikey is there, or it isn't
Have you put the bikey into the server's keys folder?
what other keys are in that folder
Just the one i made, no others
as @glossy inlet says, it needs to ALSO be in >your mod folder on the server
no it doesn't as far as I know
Server reads keys from
Arma 3 Server/keys
folder, thats where they need to be in. Not in @mod/keys
ouch
damn lol
that's a very new wrinkle for me
I've had commenters on my mods say they do not function
Also experienced it myself, Literally have zero idea why its doing this
your possibly using an earliy version of dssignfile
it should be next to a3.bikey file
Maybe the commenters also did it wrong?
I just checked, a commenter said other mods worked fine, it was just mine.
this might be it though
i dont think i have any public keys there.
you certainly won't have private ones
In the server, all keys are there
including the ones for my mods
my public keys are all located inside the keys folder inside the mod, and everything was signed. I've remade keys several times to see if i just borked it some how but everything has been fine.
Regarding my setup atleast
looks like bis reverted to arma1 making a mods folder pointless.
this, together with a cfgMods class that should never have happened
What specifically does the server say?
not signed by a key on the server smth smth
yeah
precise, im gonna launch my game with the parameter check for signatures
and for another test ill remove that file to single it out
To confirm a second time, 100% sure that pbo was packed with Arma 3 tools (Like Addon Builder) ?
These Error 0x22 that pretends like it tells you something useful, but actually doesn't tell you anything because there are 3 different things that all print 0x22
taking @glossy inlet 's other valid commnets. THE message doesn't acutally state it a signfile problem. could be sth wierd./ wonderful in your config/p3d etc
try making a simple hello world config.cpp to sort this out
Yeah with this problem, its a bisign vs pbo issue (I don't think bikey is involved at all at that point)
Public key must be in server’s keys folder, it wont read from mod folders
My idea would be invalid file order in pbo. But that is fixed if you use addon builder (that's not 2+ years old)
Other idea might be bad dssignfile version? Kinda unlikely.
Or you're hitting some extreme edge case that noone hit before and that our tools cannot handle.
In which case, I need a feedback tracker ticket with the pbo that shows this issue
and you can probably workaround by adding some dummy empty sqf file into your pbo
What do you recommend i do
try the lasrt thinh, add dzmmmx filrs
My idea would be invalid file order in pbo
pboProject (texheaders) sensitivity also fixed a long time ago. 😎
i'll back out of this as I'm causing too much noise
No worries at all my friend, i tried pbo project and addon builder similar outcomes
why would anyone choose 32 bit windows 7 over 64 bit
windows 10 is only 64 bit either way
and btw, you can switch between 32 and 64 bit on the same license for win 7
you can switch W10 32bit to 64bit , after update to 32bit version ... you do full reinstall using 64bit version with the same code
but i really dont know any arma3 player who is using 32bit
is there a 32b windows 10, reallt?
pufu yes, 32b windows are usable if you have 1,2,3 GB memory
@toxic relic The thing is that W10 is designed as a multi-platform OS including tablets, phones and etc
i can't be bothered to updated yet my PCs to windows 10. i forsee some fuckups
will have to do it during the winter vacation
regarding my question about 64b, i was sure that they said windows 8 is suppose to be the last 32b os from microsoft
hell, my phone is running a 64b platform...
does someone knows a way to get the amount of players on a side on a server by using Query or Rcon?
@small vault i got so far but i cannot see the playerside of a player
HEMTT 1.2.0
https://github.com/BrettMayson/HEMTT/releases/tag/v1.1.0
- Added
--no-bintohemtt buildandhemtt release, to pack objects without going through BI's binarize. - Added
--no-raptohemtt buildandhemtt release, to pack configs, rvmats, and exts without being processed by HEMTT. - Added
--no-signtohemtt release, and a config option under[hemtt.release]. - Show when there is a new release of HEMTT, checks once every 12 hours on run.
@orchid shadow Wasn't intended as a critisism :) I just meant it's unfortunately not practical for our unit right now, but that the tool itself looks much better than other options out there atm
updates for pboProject:
+fixes mistakes made by bis binarise when processing p3ds
+dos consoles now fully international with it's character displays irrespective of your local language settings.
+improvements tp the d;ll
+updates to the sdk for those brave enough to use it.
mistakes made by bis binarise
We're these reported to feedback tracker?
i don't
i don't remember any time bis fixed anything significant like the classic mistakes in p3d properties or road snap points or.....
you personally are an exception to this
They fixed the hardcoded sleep 🙂
Wasn't that also me?
yep 😛
@uncut whale hah, didn't take it as such, just merely started its why i made it.
@dawn palm any idea why .hpp files would suddenly start getting deleted from all the pbos I pack despite my exclude list having them listed?
*.h,*.hpp,*.png,*.cpp,*.txt,thumbs.db,*.dep,*.bak,*.log,*.pew,source,*.tga,*.bat,*.psd,*.cmd here's my full "Exclude From Pbo" line (its just default)
I've tried reinstalling my entire tool suite and the issue still persists
oh ya this is in regards to pboproject since i forgor to mention
I was under the impression that meant it was being excluded from binarization (similar to addonbuilder's exclude list)
ok for w/e reason the third reinstall resolved it
no clue why
none of those files would ever be binarized anyway 😄
🍤
well, it does say exclude from pbo !!!!!
Muh team balance system is finally working properly (I think)
You should join OPFOR
Now if only people were doing what they should be doing... 😄
anyone here who has an idear?
It forces it anyway, the bot just helps to avoid joining to wrong team (and getting kicked back to lobby) 😛
This is how it looks when you try to join the more skilled team
if i uncheck "clear temp folder" in the addon builder, will it skip copying the files that are already in the temp folder when i rebuild my mod?
no. Addon builder has no such fancy features as far as I know, fi you want fancy, try pboProject
thanks
it does not copy, it binarises. the difference being if the file is already present, it won't rebinarise again. This you may think is wunderbar, but, it doesn't account for any changes you made to rvmats or paa, nor, if my memory is correct, does it recognise that the binarised file is staler than the unbinarised. (for a3 i can easily be wrong about that)
Hi! I've improved GrueArbre's PboExplorer tool to view/extract pbos. Maybe someone find it useful, any feedback appreciated!
https://github.com/rvost/PboSpy
yes mission.sqm and seems class CrewLinks does influence effectiveCommander (adding/changing the order fixed it for DS env)
well ticket then i guess, dunno
You could have them join the team not in use, or civilian, then change their side with scripts, rather than show that screen
Arma doesn't support that AFAIK, not Arma 2 at least. The mission is full of legacy code written to assume existence of BLUFOR and OPFOR as players' sides unfortunately 😛
I.e. it would be a huge amount of work
Ah Arma 2
hehe ... some open-source community management web-panel might be comming soon
got the game-server installation done for the most part and event creation + slotting already done
only installation is a bit wonky right now ... thanks to a few problems still remaining (to name it: it ain't just copy paste and be done)
Some screenshots: https://github.com/X39/UnitedTacticalForces/tree/master/.github/screenshots
arma-actions/hemtt is updated!
https://github.com/arma-actions/hemtt/tree/main
Easy to use, and works for both linux and windows runners!
- name: Setup HEMTT
uses: arma-actions/hemtt@v1
- name: Run HEMTT build
run: hemtt build
Its not necessarily a bug, is it? Usually Eden creates class CrewLinks - not sure when it does not.
I would assume its from messing with vehicles and their crew (ie changing type, moving in and out).
Anyhow dont think this needs "fixing" - rather to share some docu on the mission.sqm format if available internally would be nice to have.
There is no docu besides the code itself
@smoky halo you can't use the rcon for that
you'd have to pull the information from the game it self
and pass it to what ever tool you're making
@full drift any idear how to pull the information out of the game?
@smoky halo you'd need to make a mod which polls every player in the game (https://community.bistudio.com/wiki/allPlayers) and sends that information to an extension (https://community.bistudio.com/wiki/callExtension) then have that extension send the information wherever you want it
Alternatively, instead of polling the information you could have the extension only scan for players and return that information when you ask it to
Which is probably the better option
@silent trellis thank you very much. This is something i can work with :)
You could even use some kind of caching if you plan for this to be a public API, so you don't hammer the game engine
np
What programming languages do you use btw?
i use c# for all my projects
mk one sec, extensions for arma are in C++ but you can use c#
I have a guide somewhere give me a sec
Just make sure you compile with Mono and don't use any WIN32 API functions if you plan to use this on a Linux server
?
na forgett it
I assume you mean getting info out of the extension
I mean, if you want it to be accessable to the internet you're going to need a socket of some kind :D
thats what i thought^^
but i will simply use txt documents with the last time of update
for the first trys
Help guys. I am doing A soldier in arcenal, and i wanna use balaclava and glasses together, but they are in one category "Face protection", so i can't use them both. Who knows any mods who let me use a couple of things from 1 category together.
please
You can not.
Unless you get a mod which has those things together (as in, their own model of that, not a mod that combines them)
important fix to obfuscation at release 9.34
sadly 😦
Would anyone happen to know how to integrate IPS.Board forum accounts into my launcher?
I am working on a launcher for a community and I am trying to make it so that they have to log into their forum account on the community website to use the launcher.
v4
You want a slave
Scroll to Handling Logins
You fire off a HTTP GET request to the board's ipsconnect.php file with a few params (I extremely highly recommend you send over HTTPS considering it handles unsalted MD5 hashes of passwords) and it responds with JSON of the result
Including some basic data of the user
If you need any help beyond that just give me a prod, done quite a bit of work with IPB
I have never used done anything with IPB xD other than use the forums like a normal person.
Swifty is only for A3. They need a launcher that supports all of their games
Which community is it?
A3 is one of them.
Reminiscence
I have a personal project as well :) secret for now. Because it could turn out a complete failure.
I must be a fool or something. Something that should be super simple and I can't figure out why it is not working.
I wan't to make the username Capitalized right. But it is still lowercase?
ToUpper returns the capitalized version
it doesn't modify the variable
string userName = Enviroment.UserName;
userName = userName.ToUpper();
That'll make it capitalized
See rubbish mistake. Always something simple that you forget.
Yeah that one used to get me quite a bit : )
What if I later decide to make just the first letter of the name capitalized?
just remember that C# strings are immutable. you simply cannot change them
If you later want to make the rest of the name lower case
string str = userName.Substring(0,1) + userName.Substring(1).ToLower();
(Someone is going to come along and tell me why that's horribly inefficent)
Object builder seems broken, I consistently crashes after 50 seconds
what do you try to do with it?
It freezes and shuts down after a delay no matter what I do, even if i do nothing at all
did you try reseting all arma 3 tools settings?
Hey I need some help. Im following this tutorial on a basic addon (https://www.reddit.com/r/armadev/comments/hzcnb3/tutorial_creating_a_simple_mod_following_the_cba/) and when I run pboProject I get the follow error and I have no idea why
***warning***:Argument 'MESSAGE' is not used in macro LOG
any warning is an error
.preprocessing files produced an error
failed
Any ideas?
Ill try that
you can tweak the warnings and errors in pboproject settings to exclude that one
Hmmm... I'll try that thank you
Done that, now the viewer has stopped working & it crashes after 50 seconds. Got an error at least.
...aaaaand? 😄
and I can't find out how to bypass Chrome wasm file caching 🙂
but it is at https://ofpisnotdead-com.github.io/rust-pbo-wasm/, I just had to clear browser cache to load new file
it supports A3 files finally
or any with headers
@scenic canopy?
it is probably related to GitHub Pages 🧂
I guess just the usual cache busting mechanics
like adding file hash to file name / query
now I need to learn how to structure Rust project better and continue to "pax" (I have already greyscale aka PAA_8080 "previewer" ready)
the url you refer to is only good for flashpoint files. and possibly only for the original cwc. resistance adds some structures and arma, even more. refer to the biki instead, it's not difficult to comprehend.
Are you using latest version @dawn palm ? I was able to read PBOs with headers (properties).
a pbo is nothing more than the equivalent of a zip container.
Or is there more to support? I acquired random A3 file from https://www.ofpec.com/.
Resources for editors of Arma3, Arma2, Armed Assault, Elite and Operation Flashpoint
sure
then the above is probably fine if it supports resistance
I think there is still more to support regarding reading. There is file compression and checksum/signature. I'll see how useful that is for OFP/OFP:R over the time.
what you pasted is only good for the original cwc
Is it?
and yes, it doesn't cater for compressed filles
I'm able to read properties + header entries for various PBOs I tested from OFP to A3.
there are still new addons being developed lol
not that i am aware of. missions? sometimes
Are people really still playing OFP? For realsies? 😱
ofp lan parties yes
I mean, I ran it a year ago, goofed around for a bit in the map editor but then left because... well... it's an old game 😄
(most are co-op0
We're playing crCTI each Thursday.
and also Battlefield is played in 20 players over weekend evenings usually
that's PvP mission name (like team DM capturing places for score)
huh?
Any thought on this?
I guess you should check the logs, if you have any
Otherwise, we've all left our crystal ball in our other pants, today 😢
switching to dresses doesn't help either
the balls fall off?
What would i be looking for in the logs?
You tell me.
Anything that looks like a warning message, an error or something that should not be happening
Nope, gets to
WELCOME TO ARMA 3 ADDON BUILDER
VERSION: 1.5.146305
then just stops
iwhat's object builder? is it bi's p3d editor??
yeah
if so the answer is pretty damn simple, your'e trying too look at a binarised p3d]
But its my .p3d and it crashes even if nothing is opened
but since you don't give any info on what your trying to do, we have to use crysal balls.
Object builder crashes after ~50 seconds no matter what I do]
my cat mews no matter what i do too. why?
Oh the .log says buldozer keeps on failing, it wasn't doing that earlier
step 1: verify bis tools
step2: 'play steamtools ONCE
step3: never EVER open that gui again (use shortcuts0
Its that bad?
Does it crash if you open any other p3d? Does it crash if you don't open anything? [I don't remember how it works, just blindly trying to help troubleshoot the problem]
If yes / yes, then as mikero said, verify the tools in Steam. Maybe consider reinstalling
It crashes after ~50 seconds irrespective of if I try to open a p3d, the p3d I do have doesn't cause a crash but simply wont open, likely cause im new to trying to import/export them
what about not opening anything?
Still crashes
Like, literally, you open the program, wait and it crashes?
reinstall, play ONCE, use shortcuts to open object builder
do NOT use that gui. bis dont. so why should you?
Yes
I think I need to sleep good lord
Just did that, still no buldozer and still crashes
Perplexing. Is the program responsive? Does memory keep increasing for some reason? [otherwise why would it crash after some time 🤔 ]
why? bis......
No memory increase, remains a stable 4.6mb then just disappears
Program seems to work fine otherwise
Antivirus issue? Try turning it off for 10 mins
do NOT use that gui. bis dont. so why should you?
I guess because it's there so it ought to be working? 😄
One would think
haaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Does it do the same on another computer, at home?
try to get DX view mode turned on in settings so its default
a bit of a long shot maybe but the other render mode is not exactly stable anymore
Tbh I'm out of ideas at this point. I'd look at what events AddonBuilder is generating using (I think) one of the Sysinternals tools, but I've forgotten which one that was
Process Monitor it was, I guess...
But my gut feeling tells me that it's just something stupid that we've all overlooked 😄
object builder is well known not to work if invoked from the gui. Shortcuts only to it and terrainbuilder and addon breaker
the only reason why that gui exists at all is to set the registry entries
hence 'play' once
It seems to have cleared the buldozer install again
https://pastebin.com/XGs7Z1GU this is a new one
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
well this looks same as mine when I just close it
if you're not usingg short cuts you are wasing everyone's time here.
pasting logs is NOT comunicating btw
you are expecting us to figure out what you are doing.
this is not the exe name btw
dunno how it then tries to run buldozer exe instead after that
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
its arma3_x64 with underscore
Im not opening through the GUI, i was getting buldozer reinstalled since it cleared it when I verified the install for some reason
am gonna find the ignore button. why you couldn't state that in the first place defeats me.
retrying that method
Has two attempts due to me trying to restart buldozer in OB
noticed the missing .exe
OB Has stopped bull buldozer still refuses to start
does OB still crash?
been 9 minuets without a crash
maybe odd question but have you started Arma3_x64.exe before? 😅
that is a silly question, guess i should start it up now
once when testing things I could not get buldozer to start with the 32biit arma3.exe but turned out I had never ran it
after I did, it worked
Booted it up all the way to the menu, made no difference to the external viewer or OB
On startup OB is now throwing out
00:31:21 - 2B50 Loading D:\Steam\steamapps\common\Arma 3 Tools\common.dll
00:31:21 - 2B50 Invalid module. Missing link to InitPluginModule function (127)
repeated for 7 other .dll that are present at the location.
Also D3D throws out an error
00:39:16 - [0DD4]ERROR! D3DCall fail line 972, d3drenderer\d3drenderer.cpp <D3DERR_INVALIDCALL>
The d3d error seems normal I get that too
So this is all running on start with no clear cause for the crash that comes 60 seconds later
D3D does need to be on and autosave is causing the crash after 60 seconds due to that being the autosave delay. Im going to leave the settings alone now that everything is kinda working. Thanks a ton for the help
I've had coffee gotta love it. I do very much enjoy spending late nights when there is no activity going on around me with some quiet music just going to town. But I can't get the simplest things done for some reason.
I literally have created a single button within the past hour xD
Btw. is there any reason why "MimeType" in PRO PBO entry is little endian? 🤔 And is just reversing the string enough to get it in proper order? Or do I totally not understand the problem?
What is example MimeType what u mean?
What is a PRO entry
as described at wiki
struct standard entry
{
Asciiz filename; // = 0
char[4] MimeType; // 0x56657273 'Vers' properties entry (only first entry if at all)
ulong OriginalSize; // = 0
ulong Reserved; // = 0
ulong TimeStamp; // = 0
ulong DataSize; // = 0
} // end of 'standard' entry
reading MimeType as stored gets sreV actually
sorry, typo, PBO entry
The real (our) name for that is "Magic"
They are written in C++ as uint32 = 'Vers'
and int's are little endian
They are not "MimeType" nor are they a readable string. They are a magic number, and setting it this way was just convenient when it was created. Them also being readable as strings is a coincidence/accident
So better to read and compare as uint32?
Also originalSize/Reserved/TimeStamp/DataSize are not ulong, they are signed 32bit int
yes, engine also reads as int
#define EncrMagic 'Encr'
#define CompMagic 'Cprs'
#define VersionMagic 'Vers'
int magic = stream.getil ();
if ( magic != 'Vers' )
unsigned ones
you have no chouce mimetypes are not 0 terminated
I mean, they are not unsigned (which tbh was a stupid mistake but hey. Every number is signed int #YOLO)
Yes
Tho
main.c:15:20: warning: multi-character character constant [-Wmultichar]
15 | return test == 'Vers';
not recommended nowadays
my preference has always been
#define VERS 0x...
#define CPRS 0x....
#define ENCR 0x...
Since I have seen some special handling of those for Linux (GCC) like casting to int manually somehow.
So TL;DR best is to define constants with 0x56657273 like value and don't try to use those as a string/char[] to keep it portable?
thanks all 🤝
introduced in linux as a preference to using file.ext, a genuine mime type is always in the first 4 bytes of a file. Bis use it in their binary files (ODOL MLOD RAP\O 8WVR .....)
I use mimetype as a convenient phrase to describe any four byte entity that has this characteristic
Vers="Resistance" was originally intended to define which engine the pbo was intended for. It has since grown a little larger😎 and alters the 1st entry of a pbo to a non standard format from the rest of the header contents since after the standard 4 byte entries (20 bytes) it has catenated strings which can be as long as. (well) a piece of string.
yup, let's say it is a little wild 🙂
maybe, but look how carefully crafted it is. every engine from resistance ->vbs and dayz can read the same pbo without crashing. Usable, no, but crash? never
The problem is that the value of a multi character literal is implementation defined.
huh?
So they write 'XYZ' and it ends up as \0ZYX in the file because they happened to use MSVC.
Well it is the reason that the value in the file seems reversed.
so what?
And also why it doesn't work the same way on Linux.
nonsense
Which part is nonsense?
you;re confusing apple mac big endian with windoze
No, i'm just familiar with the standard. See here:
http://eel.is/c++draft/lex.ccon#3
A non-encodable character literal or a multicharacter literal has an implementation-defined value.
anyone who intends to use (the equivalent of) a unix mac is already aware of taking special steps. OUR MacOS compatible tools have no issues with this
it's the cost of doing business on a multi platform OS
you can run ExtractPbo Makepbo On a mac as easily as an Intel
Well sure. I'm just explaining how the use of multicharacter literals is problematic and how it lead to the situation that the original question was about.
Here's a better way to deal with these magic numbers:
template<std::unsigned_integral T = uint32_t, size_t Size>
consteval T magic_number(char const(&string)[Size]) requires (Size == sizeof(T) + 1)
{
std::array<uint8_t, sizeof(T)> data;
for (size_t i = 0; i < Size - 1; ++i)
{
data[i] = string[i];
}
return std::bit_cast<T>(data);
}
constexpr uint32_t vers = magic_number("vers");
It's Vers not vers and i'm not sure why you're accounting for a non-existent fifth character
C++ string literals contain a null terminator.
the code above is useful
We do a far far less convoluted method:
write_uint32_tLE(uint32_t str);
But where does the value come from?
from macos
I mean the the 'Vers' that you write.
#define VERS 0x......
Right. I would just spell that as constexpr uint32_t vers = magic_number("Vers") instead.
But, it does work the same way on linux.
The same code is compiled in GCC and works there
It may not work in some compilers. But it works in all compilers that are relevant, and if it wouldn't you'd notice instantly
this is the same guy who complained that our tools were not 'incremental'.
I was sure there was some case where MSVC and GCC behaviour differed even on x86, but i cannot find an example now. Still, i find it's best to avoid depending on implementation defined behaviour when there exists a simple well defined solution.
O.M.G. 😱
All that just so that you don't have to do type == 0x56657273? 🙈
C++ is beautiful
Do you think it's unreasonable to want incremental builds? That is for the build to do nothing when no input files have changed.
haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
I mean... it's neat, in some way.
But... ugh...
But it seems like it's needlessly overcomplicated and people will be spending their time trying to figure out what that code does first, instead of just going "ok, that's a magic number comparison, moving along!"
Compiletime comparison for both too
the build does nothing when things haven't changed, but you haven't taken the trouble to discover that @fiery hemlock
I mean yes true but.. come on.. We have things to get done
On the other hand, I have to admit I'm genuinely [somewhat positively] surprised you can even implement such a thing in C++
Modern constexpr stuff is A-MA-ZING
I'm not going to die on this hill. I'm just offering a well defined alternative that i think also reads better. And an explanation for why that magic number appears reversed in the file.
Btw. my original question wasn't C++ related. I'm writing my tools using Rust. I was just wondering why is file format defined this way.
Recently implemented a helper, instead of adding a parameter in literally 7 places.
Just create a compile time bobble that lets you put all parameters in one compile-time "array", and in the 7 places iterate over that array at compiletime.
Same resulting assembly code as if you had put the parameters in multiple places, but now you only need to put it in one.
It crashed MSVC compiling.... I reported it, they refused to fix because VS2017 is out of support and VS2019 has it fixed already
That has not been my experience, but perhaps i'm doing something wrong.
E.g. when i run pboProject twice in a row on the same addon with no changes, it will delete and recreate the output each time after spending quite a bit of time on all the P3Ds.
Maybe you check full build?
No.
And the answer is that they defined those magic numbers using multicharacter literals which have implementation defined values. They just happened to come out reversed.
You'll have a hard time with "Why", cuz that decision was made like.. 23 years ago
back when a 32bit signed int could address all the ram and game files you had
once unbinarised p3ds have been binarised in temp the code only checks the file date. 2) if ANY rvmat or paa is out of date, ALL p3ds are deleted from temp.
That's actually good answer as well. If that's related to time how things were done 23 years ago and there is no real meaning of that today (it is just kept that way to keep it compatible), that's ok IMHO.
I've always assumed that "magic numbers are just magic numbers" and there is no point in trying to figure out why their value is set to such and such 😄
Should've made them 0xB00B1E50
...because they could have used 0x72f41277 instead 😄
Oooo... you'd be breaking Rust code of conduct, then! 🤓
Who cares about that in your code 🤔.
There was a twitter drama not long ago about someone who wanted to add sth like 0xcafebabe to unit tests and it was rejected 😄
Srsly 😄
Everyone should care and you should be canceled for even thinking otherwise! 😛 /s
I've always assumed that "magic numbers are just magic numbers"
which is why 'Vers' has no meaning. It's there only as a convenient, self documenting tag on what the magic does. That's it.
That's clear to me now. But I wasn't able to get this info reading https://community.bistudio.com/wiki/PBO_File_Format.
I'm going to do my own writeup later once I'll get full PBO lib done. I can donate some parts to biki if welcomed.
sure. go for it.
Btw. I was looking for some standard way of describing binary file formats, but I found out there is none (except some kind of proposal by some unversity students).
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuurghhhhhhhhhhhhh N@)($+)+U+@%%+#
omg, no YAML please 🙏
Not sure if it's flexible enough to declare everything in that yaml, without adding custom classes for some parts
hell i even detest xml as a waste of space
There are some DSLs to build binary parsers. I started originally with https://github.com/dmendel/bindata since I'm Ruby based.
Welp, not a fan either, but generating optimal parsers for several languages at once is quite a big advantage of Kaitai
What was that binary format reverse engineering tool I used
I think it used some XML
https://github.com/dedmen/ArmaScriptCompiler/blob/master/sqfc.grammar whatever this is
It has a GUI tool, forgot name
even bis have reverted to stringtable.csv in dayz. xml has no other sane use in the engine
You can then get away with ugly (but fast) code because it's been auto-generated, and you can iterate writing your parser much faster
Sadly, Kaitai only supports reading (and not writing) files at this time (but there is some discussion to change that)
wasn't that for Hexinator?
Ah! yes that sounds right
and Kaitai is not using YAML 🤷 , but custom KSY file format, which seems to be limited structured YAML 🤦
You may be right - I never actually looked into what that was, I just used it
Rust support is marked as WIP, maybe that's why?
I was looking in generic tool, not Rust related.
I found only this https://ceur-ws.org/Vol-2406/paper8.pdf called FlexT.
rust colleagues all praise nom
Does anyone here use Mahapps UI toolkit?
Fun fact, I just realized that there's a PR from 2 weeks ago, with 163 commits to implement Rust support almost fully 🙂
and nobody cares 😨
Welcome to Open Source development! Make yourself comfortable! 😄
I spent last 10 years doing OSS, I'm feeling comfortable already 🤗.
I realized that, don't worry; that was just a joke 😉
But ooooh... I also just realized that they have added support to Python serialization! 😮
I might write a PBO format .ksy file and port my yapbol library to that, instead of implementing everything manually 😮
Well... I'm not going to play the Kaitai Evangelist (because I'm not one). I just happened to use both python-construct and Kaitai to write a parser for the steam server browser (used by Prairie Fire's backend) and "it just worked", so I didn't actually need any support nor maintenance of anything from the Kaitai developers 🤷♂️
Clear, I'm in process of learning how to deal with (read/write, specify) binary formats. So I'm trying to keep as low as possible.
And I really liked the idea of generating "ugly" but performant parser code, while keeping the description of the format clean 😄
That's on eof the biggest problems of "old-school" Bison-like generators.
no idea if anyone understand what's happening even in the definition
called grammar properly in its terminology if I understand it well 🤔
🤯
Created some installation guide for the web-interface i developed: https://github.com/X39/UnitedTacticalForces
Only fully tested on linux as of now (hence the lack of documentation for windows ... if somebody owns a windows server license and wants to give it a shot, feel free to send me the steps :D)
The server management part should work on windows without any issues* too tho (*logs are not working for the arma server due to different ways of running this)
step 3. in Linux-SystemD install steps 😨
Mhh? Links to the Microsoft Page on how to install dotnet on Linux
Feel free to ask me any question about what is unclear so I can improve upon the Readme
(also @ me if you want a quicker answer 😄 )
provide a docker image 😛
Installing web apps manually, what is it? Early 2000`s? 😛
installing .NET to Linux 😿
Well, it's open source and cross-platform now... Don't see any problem with it (anymore) 😛
I run all my web services in .NET since I discovered blazor. it's just too simple and powerful ;3
Don't you know that Micro$oft is bad because... well i don't know... but it just is??!1?
it's a monoculture. That, makes it deadly
The Web app is a blazor application🤪
And I highly agree on the versatility of blazor
Honestly... Never did
And docker started kicking out open source creators of small size, so not really an option
The image wouldnt be docker exclusive, anything supporting OCI can use it like Kubernetes
Also not sure how that would affect the arma installation and upgrading capabilities 🤔 tho... Should work
hello fellows i have been directed here -- has anyone managed to get a DLL working in A3 using .NET 5.0+? Only progress I've been able to get over it doing nothing when using UnmanagedExports has been Arma crashing when using a repackaged version
using .NET 4.7.2 to target future versions of .NET doesn't work sadly
did you try making a separate dll?
not yet but I'd imagine I'd run into the same issue due to it being framework versioning though?
Currently looking at UnmanagedCallersOnly in .NET 7.0 but can't figure out how that'd work with the biki example etc so I'm stumped there
I don't think so. at least in C++ you can do that
I'd imagine .NET is even more lenient 
It'd be using dllimport wouldn't it? 
no how would that be any different? 
I think .NET has its own version of "dll linking".
oh you can just add dll reference ignore that
time to figure out how to reference them 
I get how to link them to pre-built .dlls -- but how do I do it once they're built? 
i.e one version is now built with reference to one dll, but that'd have to be an older version of the other surely?
helpful diagram for what i mean (im probably wrong)
can't you just do that via the reference option?
actually why do you even bother with C# for this?
build the Arma interface using C++
then just export an interface and import it in your .NET 6 extension
have to reference already built dlls 
havent a clue how to use c++
time to learn it then 
i can barely use c# 
i however have got progress
callback debugs are showing up 🙂
you don't need to do much in C++. just use the wiki example to export the RvExtension stuff. then export another function for your own interface with the .NET extension
then you won't need any DllExport mess in C#
Oh you mean still do the DLL in c# but all the dllexport stuff in c++?
yes
actually you still need one DllExport to run your C# extension from the C++ one 
and even then that's still a circular reference thing
I have the dllexport bits working fine now
i.e i have callback ingame where it should be
just misunderstood the entry point
exporting this is a bit of a pain though 
was that even the problem?
well its got export working fine
i didnt put the call to the other dll in the right place so im finding that out now
crashes the game 
and rpt has nothing useful, it's to do with the call to the other dll most likely seeing as thats all that changed
to confirm I'm not doing anything wrong, the function parameter is literally just a string and I can do whatever I want with it, right?
As soon as I introduce Worker.WorkerClass.EngineHandler(function); it crashes arma
Sadly, you're right, every input and output to and from CallExtension is just a string 😢
(this includes the arguments to the RVExtension function)
not really sadly in my case as it just means its not the issue I'm having 🤔
odd thats the issue
engine strings are utf8 char character streams.
windoze is widechar UTF16LE
yeah so long as its a string its not the issue
crash only occurs when using another dll from the called one
called one is .NET 4.7.1 and other one is .NET 6.0
Write your own testing exe that will load your original dll
This will allow you to debug and iterate much quicker, without the need to reopen Arma
I presume that'd identify any issues with exporting it causing it to crash? The code in isolation works fine
That simply should replicate your Arma environment, but without actually using Arma.
If you're serious about developing extensions, you'll write one such exe anyway to do tests, so better write it right away and save yourself the trouble of debugging from Arma already
Gotcha, thanks -- I'll give that a try soon but don't have much of a clue where to begin as I've never done it (loading dlls myself) before 😅
I'm on a phone until Monday so I can't really help much.
But maybe learning about calling functions from DLLs by yourself would be a good idea? 🙂
From a self-improvement pov 😄
ya this is mostly a learning experience for myself (and i wanted to be able to talk to arma with my voice 😄 )
In C++ you basically call one function to "open" a dll, then another one to get a pointer to function X from an opened dll (and another one to close the DLL when you're done) and you just call that function then
Gotcha, I'm using c# but would imagine principle is the same, using DllImport or something if needed
Will be able to figure it out soon
Please don't steal my ideas, okay???
(btw I seem to recall that there may have been such an extension, years ago)
I think there might've been but I'm making one for the sake of learning and couldn't find it before 🤷
But i think that the guy did it with an external program and autohotkey, or something similar
I'm hearing impaired so idea would be to be able to have subtitles over players who're talking and so on
As well as ability to talk to npcs blah blah blah
Duuude... Last warning 😜
this is when you're using the cortana recognition engine too
Nah, I was thinking about that thing from openai. But that literally was just an idea. Didn't implement a single line of it
I've got the recognition shit working fine, my issue is just getting it working in arma as can't export .NET 5.0 projects as far as I'm aware
Ah, fair -- next project idea would be text to speech but that tech isn't quite there yet for this imo
Why don't you Google tutorials about that? After all, it's just standalone dlls
I have done, but the issue as far as I can see is there's just nothing for exporting dlls with c# for .NET
The way to correctly do it with .net should be universal
been trying to for the past 2 days 😅
oh it's in c# i forgot to mention
i think
unmanagedexports doesn't work in .NET 5.0 and above and dllexport doesn't either as far as I can tell
I'm not a .net guy so I can't help you with that
Yeah that seems to be a recurring theme in when I've been trying to get assistance 😅
Don't worry, being a Python developer makes you feel even more lonely, around here. Speaking from experience 🥲
ouch, i gave up with python after trying to make regex tools 😅
yes it works with the unmanaged export in AOT mode since .net6
however you will lose almost all reflection features
i had it working for a couple of things, also callback is working fine
Would you be able to share an example of that perchance? I've been unable to get the BIKI example of c# w/ callback to export and get called from ingame without crashing it
public static class Extension
{
public static Mediator _mediator;
public static unsafe delegate* unmanaged<string, string, string, int> Callback;
[UnmanagedCallersOnly(EntryPoint = "RVExtensionRegisterCallback")]
public static unsafe void RvExtensionRegisterCallback(delegate* unmanaged<string, string, string, int> callback)
{
Callback = callback;
Console.WriteLine("Loaded Callback");
}
[UnmanagedCallersOnly(EntryPoint = "RVExtension")]
public static unsafe void RVExtension(char* output, int outputSize, char* function)
{
var method = Marshal.PtrToStringAnsi((IntPtr) function) ?? "";
var result = "";
switch (method)
{
default:
result = "Method not implemented";
break;
}
byte[] byteFinalString = Encoding.ASCII.GetBytes(result);
Marshal.Copy(byteFinalString, 0, (IntPtr) output, byteFinalString.Length);
}
[UnmanagedCallersOnly(EntryPoint = "RVExtensionArgs")]
public static unsafe int RVExtensionArgs(char* output, int outputSize, char* function, char** argv, int argc)
{
var method = Marshal.PtrToStringAnsi((IntPtr) function) ?? "";
var parameters = new List<string>();
for (int i = 0; i < argc; i++)
{
var tmp = Marshal.PtrToStringAnsi((IntPtr) argv[i]) ?? "";
tmp = tmp.Replace("\"", "");
parameters.Add(tmp);
}
var result = string.Empty;
switch (method)
{
default:
result = "Method not implemented";
break;
}
byte[] byteFinalString = Encoding.ASCII.GetBytes(result);
Marshal.Copy(byteFinalString, 0, (IntPtr) output, byteFinalString.Length);
return 100;
}
[UnmanagedCallersOnly(EntryPoint = "RVExtensionVersion")]
public static unsafe void RVExtensionVersion(char* output, int outputSize)
{
Application.BuildApplication(Callback);
Application.ReadConfiguration();
var scope = Application.ServiceProvider.CreateScope();
_mediator = scope.ServiceProvider.GetRequiredService<Mediator>();
byte[] byteFinalString = Encoding.ASCII.GetBytes(Constants.Version);
Marshal.Copy(byteFinalString, 0, (IntPtr) output, byteFinalString.Length);
}
something like this
I had another project more refined but i am not finding it anywhere right now
Ah, thank you -- I thought unmanagedcallersonly would've been the avenue of approach but I couldn't figure out how to make it work for the life of me. I'll take a proper look once I've got time but looks significantly different to how I had envisioned it which probably leads to my issue lol
you need to enable unsafe code and compile with the commandline though with setting the flags for aot
Oh right, slightly more of a ballache but shouldn't be completely unreasonable; should be able to avoid splitting into 2 dlls then and having to jump across .NET frameworks 
why would you want to use .net framework?
windows voice recognition api
should be available in .net6/7 as well
ya -- i was using 4.7.1 to handle the exported dll then call a method in a .net 6.0 dll prior but that also caused crashes 😅
maybe you need to get the package from nuget and it make the code windows plattform dependent
I think I've possibly got terminology with framework wrong there; one dll (the one called by arma) was in 4.7.1 and the one with the voice recognition was in 6.0
here is the .net6 version https://www.nuget.org/packages/System.Speech
Wrong api but yeah I've got it working isolated in .net 6.0, just arma integration was being a ballache
Now should (hopefully) be much easier, thanks 🙂
it does however have some interesting results but tbf I've not trained it with my mic yet
either way; shall update on progress once I have the energy to give it another shot
Would you mind explaining to us (or better yet: posting a recording of it) how you pronounce "eleven"? 😆
🐟
i was giggling after seeing it said sex as i have the maturity of a turn year old
nice one
hello, when i want to pack with pboproject i have this error
creating a texHeaders.bin...
data*ðºð│ÐØð»ð┐ð«Ðòð║.paa: Error. AlphaFlag value is not 1 or 2. is -255
failed: detex module found an error in (one or more) paas
Looks like corrupt texture. Dunno what that stuff before .paa is, is that supposed to be a name 
yes have do not know the name of picture
What would be the simplest way to put a twitter timeline in C#?
probably a dumb question, i'm just getting into this, but is it possible to make a http request to a web api from within a mod running on a server?
e.g. after someone gets a kill/triggers some event
I beleave OCAP is doing something simillar to that. Here is a github rep:
https://github.com/OCAP2/OCAP
Ah perfect, thanks
Here's the function you want in C++, initiated by SQF calls below
https://github.com/OCAP2/extension/blob/7bdc05d3a2e2d38c20548acc3eaafaa98cff3d34/OcapReplaySaver2/OcapReplaySaver2.cpp#L702-L766
https://github.com/OCAP2/addon/blob/9bf85531f89f78c906df15c5c7af304b81fcd38c/addons/%40ocap/addons/ocap/functions/fn_exportData.sqf#L71
https://github.com/OCAP2/addon/blob/9bf85531f89f78c906df15c5c7af304b81fcd38c/addons/%40ocap/addons/ocap/functions/fn_extension.sqf#L30
If I can ever get cgo to compile, it'll be replaced by that, but in the meantime it's native C++
All attempts with Go > .dll to this point have worked fine in the callExtension tester but Arma itself calls a runtime abort breakpoint & crashes everytime I call it
Have tried numerous variations on this template which has been brought up in this Discord back in 2019
https://github.com/code34/armago_x64
Taking the opportunity to mention/ask since I've been banging my head against a wall for a few days on it
AFAIR if you don't care about the return value from the API and just need a one way function to log things, you can directly use https://community.bistudio.com/wiki/htmlLoad directly from SQF, without resorting to extensions
Thank you, I will certainly understand all that at some point 💀 As someone who doesn't play and has never modded arma this is going to be an experience
https://github.com/code34/armago_x64
And if we start advertising things, then let me remind you that there's also https://github.com/overfl0/Pythia for the Average Python Enjoyers 😉
Nothing for the average javascript fan then 🫠
Actually, now that you mention it, I find it strange that there's not been any extension to write JS extensions in Arma that I know of and that feels... well, strange 🤔
Maybe when I inevitably ditch this current side-project..
Yeah, good call! Make it your main project, instead! 🙃
either or
Well just google.
xD I already finished it. Just made one small error like usual so it wasn't operating correctly.
I am prone to making stupid errors in everything I make. And when I am looking for the error I usually look right over it more times than I'd wan't to admit.
So I switched to Windows 11 and in Windows 11 it does not give you the option to pack folders into PBOs when you right click with PBO Manager v1.4 installed. Anyone know a way to get this working?
I dont like mikeros or arma tools and I already know about them before we get off topic about why im using pbo manager
pboManager is always not the tool to pack one
It always have the chance to break anything and not efficient
I understand all that. But the other options require way too many steps to get something packed. Im not making complicated stuff that im worried about the disadvantages of pboManager
I get the point, but... not sure what would satisfy you in this usecase, since I really doubt pboManager has an up-to-date version
Wait a min there is 🤔
https://github.com/winseros/pboman3
Is this what you try?
let's see what this one does
Yes, this one works a lot better with W11. Thank you very much. I didn't find that github page in my searches for some reason
Well, something in the Go runtime must have changed with newer versions that Arma doesn't like. DLL compiled with Go 1.16.4 runs fine as advertised.
Someone, please submit a PR that changes that to "Arma" 🙄
If only I'd have time to finish PboExplorer 😢
Just imagine clicking on a pbo and opening it like a zip.
Just for your whole explorer to crash when you try to look into a subfolder
With arguably the best ever "pack pbo" menu action, not constraining you to anything
Sadly seems like all but FileBank are broken 
Addon builder starts but isn't autofilled with correct folder, Same for pboProject. MakePbo refuses because no mission.sqm found and PboExplorer does nothing 😢
Any idea what's powering Launcher UI? Is that WPF?
The best would be if official PBO library would be extracted from game and open sourced. 🤔
WPFSnoop says yes
But with some weird modifications done at least (the window created is acting weird ... which should not happen)
One of the essentials when working with WPF imo
Pretty much
tho technically there is loads of other frameworks too
and if you would ask me personally, go the web way instead (using Blazor WASM to use a proper language)
I need some system calls like scanning disk and running new processes.
Same for pboProject
pboProject/MakePbo will only ever work when the full path on a 'Pdrive' is specified. There is no circumstance for that ever changing because the tools must know where to find external references.
Bis rely on the exact same mechanism when crunching maps to find land classes, (some) proxies, most rtms all fxy fonts and any p3d that has almost any model.cfg worth bothering with.
filebank is a unique case where it (quite properly) only packs the already massaged files.
pboManager is an excellent, intuitive, gui that let itself down by not debinarising/rebinarising param files for the user, and troubles with a pboprefix.Presumably, these shortcomings have been fixed in version 3.
The games pbo parsing is worse than i could write in a 3rd party library 😄
The game was written in the late 90s and had crud added ontop of it since then
Nah, actually works just fine without pdrive path. Atleast on my old version of your tools. (Probably newer versions broke useful features like that, which is why I stopped updating)
But as a user you gotta know what you're doing. (If you're not referencing Files, it doesn't matter)
It's just my code that passes start parameters and puts the settings into registry isn't working right.
I give you the choice to use every tool easily. That doesn't free the user from knowing how the tool works and how to use it correctly.
Most people who are fine with a quick right click->pack, are probably not packing a terrain
but it is the one being really used under hood, it can work both ways and being used back with improvements
What's the purpose of having 110% quality packed PBO when game can't read it. 🤔
If game can’t read it then it’s not 110% quality
@smoky halo, the pbo structure is fixed in concrete irrespective of which code is creating it. Dedmen is saying the way the 1990s code does this is a spider's web of spaghetti. It also got mangled when bi introduced a 20 byte sha key at the end of the pbo file, + another mangle dealing with prefixes. There's nothing that my code, or, I have to assume, anyone else's, can or does deviate from the pbo concrete structure. (I'd hazard a guess I do it quicker).
what you might be thinking about is binarising configs, and here, yes, my code does differ from bis, where i accept syntax that the bi compile should do, but doesn't. That's more of a case of improving the compiler to 100% rather than bi's 90%. It does make (some) config.cpp's incompatible with addon breaker, BUT, at the end of the day, the binarised output is also rigid concrete and compatible.
wrong Retro 
$+)+@%%U+_)U+)^+^^)(#
I do follow, but this is thing where OSS usually shines when done properly. All this could be fixed already if opened.
but thanks for the insight, it is interesting and informative as usual 💪
I have hard time parsing old OFP configs since the game parser is really (let's say) "benevolent".
array[]={one;two;three}; is one of them
This... Parsing configs is no fun at all thanks to everyone doing random crap because the game accepts it and interprets those as strings
Did you ever put this on GitHub btw?
Maybe I should just put my pbo library on bohemia github, and then community can improve it
It is yes but as private project.
Intention was to get the barebones working, rip out all the stuff i don't want the public to see, and then publish it
That would be handy only once the game will use the same lib as well.
I don't want to write any more C++14 code than I have to
that won't happen
I think if it works the same as the game, its good. Doesn't need to be same as the game uses
Especially, because game has several encryption thingies support, which the game needs but the public shall never get
as usual, that's nothing blocking this request, you can keep that part private
You mean ebo support?
also yes
"keep that part private" that would mean I either have to write two separate libraries, one with private parts and without. Which doesn't match your idea of the game using the same lib.
or I have to rewrite all the pbo handling in the game to be more modular to allow for these parts to be more easily separated out, which isn't gonna happen
not really
@glossy inlet how about a __has_include to solve the dual needs?
And split each of the dozens of code sections into separate include files so we can put them where we want them? 
Or macros i guess
Which would make our internal code very unreadable
well i was thinking more along the lines of simply separating the code you want to hide
Well thats basically what I already answered above.
ok
i think i lost the plot here,would this 'lib' be for bis binarise? If so, don't lose hair follicles over it. The code as it is is unreadle with dreadful, impossible to read, <templates>
no, pbo
ok
A simple format that is somewhat well documented and for which dozens of libraries already exist where most of them are better written than the code the game uses
the original reason for depbo.dll <grin> The difference being i would only release an api to prevent 6,004 variations
you can bet your arse 6000 of them break something
if you released a dll api for people to use different outcome imho
any shortcomings get fixed by you, not 4,000 others
and that way you get total consistency for everyone who uses it.
2 cents deposited
Any ideas on what I need to change to make this work?
So I have a entry for like maxMem and all that good stuff. I take the inputted value by the user and change it to an integer and then save it to an XML. But since I have tried to save them as integers it quits actually saving them to the XML?
:P finally realized that I used a domainUpDown and not a numericUpDown
Looking directly at this issue right know...
Also trying to find info/maybe somebody has already written an object builder script to duplicate the corner sections and rename them appropriately.
got it.
For the way I created it?
Is there any reason why PBO format has actually no magic/signature at the beginning of the file?
Clearly it is not needed to make PBO format work, but in theory, it is not needed for any format 🤔.
Maybe the designer flipped a coin and it landed on tails.
If it weren't for the Asciiz filename; at the start I guess you could be checking for the Vers (sreV) MimeType? 🤔
Vers (sreV) is optional and not present in OFP PBOs.
Asciiz filename; is too generic IMHO
Yes, by that I meant that you'd have to skip it first, to check for Vers, but if you're saying that even that one is optional, then 🤷♂️
Let me ask the other way, what's the best way to check if file is PBO? Check for first entry? Check for whole index first? Check if entries and files sizes matches? ...
Or at least, is there any best/unwritten practice for this?
\0sreV is about the best you'll get. an unsafe check for cwc pbos would be to check for another filename 20 bytes after 1st
I'd say just check for file extension to find out if its pbo 😄
Why else would you try to see if a non-pbo file is a pbo
HEMTT 1.3.0
https://github.com/BrettMayson/HEMTT/releases/tag/v1.3.0
- Adds
gitproperty to all PBOs when a git repo is present - Adds
--no-archivetohemtt release, and a config option under[hemtt.release]. - Adds
folderconfig option to specify folder name under[hemtt.release].
@rancid relic
Sorry for the ping and I'm not 100% sure this is the right channel as there's a bunch in here but none are specially about it..
In regards to 02 scripting I've seen you and a few other's git repos about them, and various snippets in here as well but would you happen to know of any old documentation about it in general?
Been sent here from the enfusion discord in search of as much info about it as possible, and it's seemingly a not very well documented thing.
(My use case is dayz tools object builder. Not quite sure what other things specifically use it as well.)
originally intended for maps and made obsolete at arma3 time since maps are generated by vbs 2 who will NOT share their 02script
there's a complete folder of 02script tools and docs in arma2's personal tools. I don''t have them loaded to give you nameIOF folder.
fyi: addon breaker was originally written in 02script (and pboProject too!)
02script was the precursor to sqf . it is mostly compatible with it with extended functionality to create windoze gui dialogs (not to be confused with rscDialogs)
it has some minor, but, irritating bugz, which, as usual never got fixed
Thank you very much for a direction to head, and the information. Very helpful. 🙂