#enfusion_scripting
1 messages · Page 28 of 1
This is also wrong, as it would also cause a memory problem which is why ref IEntity throws a compile error
As IENtity is created by CPP and owned there, so it must never have a ref in scripts
The issue is not a memory problem with the array, it is something else
@minor agate what is with AI being jank on dismounting?
I would upload a video but discord no perms
I have no idea. I do not work for AI on AR
Ask in #enfusion_ai
yeah i did #enfusion_ai message
Your best bet is to stay there for AI questions. As the AI devs often only check that channel
how would you declare a local variable dynamic array?
I have never seen an AI dev talk in #enfusion_scripting actually 😅
ref has nothing to do with dynamic array
ref just creates a smart pointer of sorts
creating an array through the array class itself is dynamic new array<int>()
Doing it C style with int someIntArray[5] = {0, 1, 2, 3 ,4}; creates a static one
btw whats the deal with these:
They are just aliases of the array with those types
They are more passed like that then to become compiled with those types from the get go
so that VM introspection and reflection can make use of them without issues if they were never used
Mostly for internal purposes
It's just so that the VM knows and creates those array classes right away
Whenever you use a templated class, each new type you add to their arguments creates a new class
They do not exist until you do that
That is what those are doing
so i can use TVectorArray foo = {}; ?
That translates to TVectorArray foo = new TVectorArray();
Using {} does not define if dynamic or static
{} on dynamic array type just creates a new object
If you have it as a member, and the class is the owner of the array then you need ref
But again refs for local variables (Method variables) is always wrong
This is also why you see it for map, set, etc
Does Enforce Script have turnary operators?
e.g.
Vehicle vehicle = Vehicle.Cast(vehicleEntity);
CarControllerComponent carController = vehicle ? CarControllerComponent.Cast(vehicle.GetVehicleController()) : null;
if (carController)
{
carController.SetPersistentHandBrake(true);
VehicleWheeledSimulation wheelSim = carController.GetWheeledSimulation();
if (wheelSim)
wheelSim.SetBreak(true, true);
}
no
Need generic/extensible vehicle sim!
Vehicle controllers, sim components, compartment managers, and nwkmovement components operate mysteriously and depend on eachother in ways extremely difficult to work around. I know that it was talked about to potentially open this up for A4 - but please ensure this happens!
But if you want an easy crash, give a helicopter two main rotor configs in the simulation component. Instant crash.
Hello! I heard a while back that there was potentially someone with a script that allowed reloading/racking a bolt while ADS?
Is there an alternative to TraceParam.TraceMaterial? That seems to only give one material when a couple may be overlapped. I'd like to get all overlapping materials instead of a single (random) one. I'm trying to determine if a pos has a hard surface vs dirt, and some positions have both overlapped, but it only gives me the dirt one.
but then I cant be lazy and just use if (foo.Contains("str_foo")); to see if an array has something in it 
Whats with the vomit? Its rather annoying having to re-acquire a target after every shot with a bolt action
No idea some kid trying to be funny, although this is not really the channel to ask for information about mods.
Ah okay, not necessarily a mod I figured, more of a script to be implemented into a rifle AFAIK
Afaik the animation are really hardcoded in AR so doing anything via script for that will be really challenging, also you're very unlikely to have anyone just write a whole mod worth of scripts just for you like that
Can happen, just unlikely
Kk, wasn't sure if it already existed, heard some talk a while back that someone was developing/had developed something like that, thank you!
https://reforger.armaplatform.com/workshop/69472988BC0445FA-MMRubberChicken
Is anyone familiar with the ragdoll script? I'd love to add a ragdoll effect after getting hit similar to CEO Of Bacon's mod if anyone can point me in the right direction it'd mean a lot to help me elevate my mod!
Because auto-reload while ADS is unrealistic with how weapons actually work. Even with a quick release bolt there's slight movement that makes you reacquire the target when ADS
No, not auto reload. I'm meaning the fact that every time you have to rack another round, you have to fully come off what you were mounted on, then mount the bipod again, then reacquire after every shot
As compared to just staying ADS while reloading
Having to remount with the bipod after every shot, then reaxquire completely as it often resets the view to the default compared to what you were looking at, rather than being slightly offset target after reloading while ADS
Hey folks! A quick question here.
Does GenericEntity object have an impact on performance? For example, if I'm using GenericEntities as position helpers, and I have a lot of them - could it decrease the performance?
Is there information being replicated per entity to client? You'll have to think about the impact on replication if there's a lot of updates/checks happening
it's a SP mission
Generic entity should be lightweight enough
Especially in a single player mission
thanks!
Usually what cost the most is initializing all of the content, rendering the entity, replicating it accross all clients, etc.
Almost none of those apply to your case so it should be fine.
Btw, can I change user settings using scripts? For example, if I want to set user's music volume?
I'd advise against doing that
You can alter user settings via scripts but you'd be better off sinply giving them a pop up advising them to have their music settings turned on for a better experience
yep, that makes sense, thanks!
some things I can't really handle. Adding action listener is one of them =(((
I have pseudoUnix system with pseudoVim, that could even save newly created files in pseudoFileSystem (json file actually
)
But I had to add this ugly Enter button, because I don't understand how AddActionListener works. I've added PcEnter to chimeraInputCommon.conf in CharacterGeneralContext. But nothing happened =((
Is this UI a menu?
Try putting your action in MenuContext and see if it triggers then
thanks! A good idea!
Also did you add an action listener?
you mean AddActionListener func?
Yup
I did but I can't understand how to assign an input
I believe it should be done somewhere else 🙁
And I've also added GetGame().GetInputManager().AddActionListener("PcEnter", EActionTrigger.DOWN, ExecuteCmd);
thank you anyway! You gave a good lead about menu context related things
hi,
is there a destruction component which makes the parent prefab collapse when its children break?
I dont think a DestructibleMultiphaseComponent does what I want and I havnt really understood how the DestructibleBuildingComponent works yet.
I made this Tunnel Netting prefab and I'd like to use the vanilla woodlogs holding it up and when they break the mesh collapses.
so the way i set my keybinds is like this, under Actions i set up the bind and then under ref of the context i want it activated in i write it down there
Then it's your typical
m_inputMgr.AddActionListener(OPEN_STATS_MENU_ACTION_NAME, EActionTrigger.DOWN, OpenPlayerStatisticsMenu);
oof, any changes in chimeraInputCommon could cause a freeze
😭
the workbench sometimes cause my lapbottom to be hard stuck and i need to restart it using the power button
ok, adding it to MenuWidgetActiveContext doesn't do anything
👺
can you send me the full code of the class that add the action listener ?
and also make sure the component is referenced in the playercontroller entity
😮 what does it mean?
class KUZ_PcCommandHandler
{
//------------------------------------------------------------------------------------------------
void Prepare()
{
s_sOpenedVimFileName = "";
s_FileSys = new KUZ_PcFS();
s_FileSys.SetCurrentDir("home", "dwarden");
s_bIsInVim = false;
s_iLineNum = 0;
Widget w = GetRootWidget();
array<EditBoxWidget> cmdLines = {};
for (int i = 0; i <= 25; i++)
{
cmdLines.Insert(EditBoxWidget.Cast(w.FindAnyWidget(string.Format("CommandLine_%1", i))));
}
foreach (int i, EditBoxWidget cmd : cmdLines)
{
if (i == 0)
{
continue; // skipping the first line
}
cmd.SetEnabled(false);
cmd.SetVisible(false);
}
RichTextWidget prompt = RichTextWidget.Cast(w.FindAnyWidget("Prompt_0"));
prompt.SetText(GetPrompt());
GetGame().GetInputManager().AddActionListener("PcEnter", EActionTrigger.DOWN, ExecuteCmd);
}
do you instanciate KUZ_PcCommandHandler somewhere ?
yep, it's bind to my ScriptedUserAction
could you show me the code that instanciate this class ?
class KUZ_GenericInteraction : ScriptedUserAction
{
[Attribute()]
string ActionName; // yep I forgot to follow scripting conventions =(
override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity)
{
KUZ_GameMode gm = KUZ_GameMode.Cast(GetGame().GetGameMode());
IEntity m_Player = GetGame().GetPlayerController().GetControlledEntity();
switch(ActionName)
{
case "turn_on_pc":
MenuBase myMenu = GetGame().GetMenuManager().OpenMenu(ChimeraMenuPreset.KUZ_PcID);
KUZ_PcUI myMenuUI = KUZ_PcUI.Cast(myMenu);
ref KUZ_PcCommandHandler pcCmd = new KUZ_PcCommandHandler();
pcCmd.Prepare();
//delete(pcCmd);
break;
}
}
and in my Pc entity I've added ActionsManagerComponent
well the issue here is that for example, the ActionName is never assigned any value
so KUZ_PcCommandHandler is never instanciated
and your action listeners are never set up
but
is ok. And it execute the code
as I said everything works just perferctly well, except the fact that I had to use Pc enter button
he means that you use ActionName in your switch since its never gets a value you never go to the case
yeah i'm not very good at multi tasking sorry
but, for example
s_FileSys.SetCurrentDir("home", "dwarden");
it sets curr directory to /home/dwarden
and it works perfectly
it's an attribute
so I have this set up in the ActionsManagerComponent settings.
And everything works, except action listener 🙁
idk
could also be that you need to activate the inputcontext but i am not sure anymore been a while since i did something with keybindings
that's not the issue
Scripted user actions and keybinds are completely unrelated
you can probably achieve this with multistagedamagecomponent and create 2 stages and change the prefab (model) thats displayed
I believe that I'm missing playercontroller part
Sorry but i don't take disrespect very kindly when trying to help out
have a nice evening
you have been very helpful, for that i'm giving you my best regards! I was just frustrated, because I thought these things are related, so I hope screaming smile 😱 hasn't offended you!
I'm oftenly using this emoji if I'm getting excited by something
No meant disrespect at all ofc!
So my recommendation right, is that you want to listen to that action while the menu is open, you can assign a custom menu context to the menu, or essentially piggyback off of menu context. Assuming you are piggy backing, you need to register an action listener from within your menu instance on menu open, binded to that action under the menu context. It should be pretty easy to test. Don't do registration on the use of the action, because it is not very reliable and a bit confusing to debug. Register and unregister the action from inside of the menu code, basically.
Thank you!
class KUZ_PcUI : ChimeraMenuBase {
override void OnMenuOpened()
{
super.OnMenuOpened();
GetGame().GetInputManager().AddActionListener("PcEnter", EActionTrigger.DOWN, PrintTest);
}
void PrintTest()
{
Print("test");
}
};
Done this, but it doesn't work 🙁
Ok, and your action is called what in the chimeraInputCommon.conf?
what context is that assigned to?
it's in
MenuContext
And I also added
and I've made a debug print if MenuContext is active and it is
Is the action here in Contexts?
yep
things get really wierd with this and action refs, I need to see more than your screenshot, where the action is in chimera input common
is it also a base action?
since an action ref needs an action (think of it like a simple mapping)
like here:
Have you restarted WB yet?
just did, nothing changed
Also, did you duplicate or override that file
because typically all of those should not be bold, it means they are new
which they aren't
it doesnt allow to override it
since you already made a duplicate of it
go to your version
see if you right click it
does it say "navigate to original"
I'll try to recreate it
Yeah basically means your file wasn't doing anything
because you didn't override to add the actions to the one the game is actually using
you just made a copy with changes, lol
after overriding, you will need to restart WB to have changes take effect
Thank you!!
finally
just make sure to remove the action listener on menu close
so it doesn't try triggering on broken instance
Also your action is very generic, might be collision with another mod adding same reference, might not hurt, but could help to label it something custom, or make your own menu context using the refs you want and point the menu config to your context
that was a tough one!
it's a single player mission. I doubt someone will add another mod to this, but thank you for pointing on that, I will take a look what could be done.
Why does enums method in [Attribute()] decorator has to be static?
What I'm trying to do is make a drop down list to select from items defined in array before
[BaseContainerProps(configRoot: true)]
class TestConfig
{
[Attribute(defvalue: "")]
protected ref array<string> m_aLines;
[Attribute(defvalue: "", UIWidgets.ComboBox, enums: Testest())]
protected string m_sBestLine;
static ParamEnumArray Testest()
{
ParamEnumArray params = new ParamEnumArray();
ParamEnum p = new ParamEnum ("Testest", "Value");
params.Insert(p);
return params;
}
}
Trying to populate m_sBestLine selection list box from m_aLines values
Trying to access non-static member 'Testest' from static method '#CreateAttributesTestConfig'
if I remove static in hopes to be able to use this to access config class instance itself
I guess there is no way to achieve this?
Maybe declare static ref instance?
Because attributes are processed during compilation
They are processed statically, they do not know about your instance. It's on per class basis, right after compilation. But before the main function of the script module runs
Sad, could've made configuration so much more agile
Custom attribute titles, custom attribute enums, etc.
Custom attribute titles are possible
Even dynamic
How? BaseContainerCustomTitle is for classes.
Ah for variables, yeah those are fixed names
Its possible from CPP, the dynamic list thing too
But not from scripts
Really hope this becomes a thing
for scripts*
Would make configs so much more readable
What's not readable about them that needs to be "more readable"?
Could use some guidance on this:
I want to do something similiar to WCS backpack dpeloyment that requiers a teammate to be near by.
I want to make the requirement to be group based.
What class do I start with?
How do I get a player's group?
And how do I get the players or specifically their character from the group?
Look through the player prefabs and find which component is associated with groups and find where they are defined in code. You can right click and click search for “definition in code” or something like that
Or it might be in the GameModeComponent itself
I didnt think to check components. Good shout
SCR_GroupsManagerCompoent
Its on GameModeComponent
Everything in game is built through prefabs pretty well so its always worth digging through them and checking components as their values also give you additional clues and its just easier
I came from dayz and at first it was such a game changer. Finding stuff in dayz script was hell
When this is folded, it shows nothing
And its folded by default
Is there any way to maintain AI persistence? I want that in Street Fighter with dynamic despawn, if the server restarts, the AI that died doesn't reappear and doesn't duplicate.
check #1430828753717559430 , 1.7 is in exp rn with a ton of fixes to the current persistence system, you might find an answer there
I have never gotten the player ID before. I found an example, but I am hoping someone can clear this up for me before I get through testing.
I am modifying a Action script.
I need to get the player id. Does the action script run from the client or server?
If I try to get the player id from the action CanBePerformed script, will it run on client?
You mean the UUID?
CanBePerformed is client side.
As for the action itself, it's configurable
But I think the local client knows its ID
You should be able to get it from the player controller
Depends on the action though.
My question is answered. Now im curious. Do you mean you can configure it to run server side?
The action you're modding may or may not be client only
How do I see if it is client/server?
You can look where HasLocalEffectOnlyScript is overwritten. I think inventory is client side.
Check in inherited classes
PTSD triggered 😭
But for instance, SCR_InventoryAction overrides it to return true
Why?
trying to get uuid on client action lol
Oh
So should I assume this runs on both client and server? I already am, but that means I should be extra careful to guard against null player manager references?
You just add a component to the player controller that stores it when they connect
No, only client when HasLocalEffectOnlyScript returns true
Correct. That is not overriden for the backpack deploy action; it defaults to false. Which means it runs on client and server, right?
yes
Does the server care about actions?
Can the CanBePErformedScript run on server without a character/ui?
CanBePerformed is client only
So its for other parts. Gotcha! Thanks yall!
if HasLocalEffectOnlyScript == true then PerformAction is only called on client
if it's false PerfromAction is called on server and client
That was kinda the issue that took me like 6 months to figure out. I was doing loadout things on connection and I had to RPC the UUID to the client. It was a huge pain, but I finally got it working.
Unless you disable clients via making CanBroadcastScript return false.
Yes, in this instance I don't think he'd be doing that.
We are past what I am trying to do. This is all good knowledge for me!
I am attempting to make the radio backpacks require a certain number of group members in order to be spawned on.
Both the deploy action and spawn request will require X amount of players.
So looking at the group data, I found this:
Any chance yall know if disconnectedPlayerIds is held for a longer time, or until a player reconnect timeout ends?
Or rather, should the total group member count include the disconnected player ids?
Test it to see?
BuT i HaTe tEsTiNg
sucks to suck
I figured I would have to.
How do you think we know all the things we know?
Testing is a fundamental tool of modding 😅
Not from asking people, that's for sure.
One could assume since players and disconnected players are stored separately then, the group defines it's current members or count as the player ids count and disconnected players aren't included.
Otherwise a server that runs for 40 hours straight would have groups with player counts in the hundreds...
GetPlayerCount() may help you for your use case, as it returns m_aPlayerIDs.Count() - only connected. The disconnected list I don't see anywhere where it cleans up, so you may have stale entries.
but hopefully you may never have to deal with the disconnected list
You shouldn't have to.
Not sure why you would really.
If all the members of a group disconnect the the group count would be 0.
And if that's the case there isn't anyone to spawn on anyway.
fedora confirmed what I expected, so just GetPlayerCount() of group and if less than x don't allow the thing to happen.
Pretty simple.
What's the best way to find out which entity spawned a vehicle using IEntity foo? I'm trying to find it and access its Fuel Manager component.
If this is conflict related, the fuel depots have a SCR_FuelSupportStationComponent, the vehicle itself has a SCR_FuelManagerComponent
yea trying to see if I can pull the the amount of gas the vehicle depot (Example) has that spawned a jeep so I can set fuel level of the veh depot and jeep
not sure if i can pull that info (spawning entity) from the vehicle itself
looks like in SCR_FuelSupportStationComponent there is a variable for that ```cs
protected SCR_FuelManagerComponent m_SupportStationFuelManager;
oof guess getting that gonna be a pain, was hoping to just grab the entityID and query its gas level lol
Worst case just query the entities near the vehicle, check if it has SCR_EditableEntityComponent and then check the labels for SERVICE_FUEL 
i could, that way players can decide what depot to remove the gas from for their vehicle. Maybe also change the color of the vehicle placement thing to yellow if it's outta gas
or i can be evil and just have the vehicle have a gallon of gas from the get go and make them manually refuel it every spawn
Hi, what is the best way to check if a "BaseInventoryStorageComponent" is on a Character? Do i need to check the whole Hierarchy? Because the storage can be child from another storage.
Asking the characters storage manager for all storages it knows, if the count is above 0 it has some somewhere. but that does not tell you much, the storage might not accept the type you are looking for. find empty slot tells you if it can be stored somewhere in the chars hierarchy
its on an invoked method. Its now working with a "WHILE"
//------------------------------------------------------------------------------------------------
void OnParentSlotChanged(InventoryStorageSlot oldSlot, InventoryStorageSlot newSlot)
{
// Check if the newSlot owner is a Character
if(!Replication.IsServer()) return;
if(newSlot) {
// Get the root slot/root storage
InventoryStorageSlot cSlot = newSlot;
while(cSlot) {
newSlot = cSlot;
cSlot = cSlot.GetStorage().GetParentSlot();
}
SCR_ChimeraCharacter newSlotOwner = SCR_ChimeraCharacter.Cast(newSlot.GetOwner());
if(newSlotOwner) {
if(m_itemComp) m_itemComp.m_OnParentSlotChangedInvoker.Remove(OnParentSlotChanged);
GetLayerTask().REAPER_SetTaskState(SCR_ETaskState.COMPLETED);
}
}
}
the better approach would be to listen to item removed event on chars inventory manager
if you want to do it from items pov, you can still do that but the event is fired after it happened. so keep that in mind with the logic. you can also make use of getrootparent of the entity which will then be the char
@torn bane
Is there ANY script API current or planned to enumerate roads in a loaded world and read their geometry (splines / vertices / segment endpoints)?
For modders building custom in-game map UIs that need road rendering, what’s the recommended approach?
I am not sure, but have forwarded your question
Is the .ent (EBIN) binary format documented anywhere external modders can reference? Parsing .ent offline would let us extract road entities without any runtime API.
Nope no parsing that, it will change from update to update
If you wanted to extract them all then a workbench plugin would be the way, no never to ever load files manually
all data is accessible in workbench editor apis
Yes but that’s not what I’m trying to do
What i mean is you can always grab data in workbench, process it, and write some custom data into file shipped with your mod, if you need to compute some road network data. anyway i will let you know if i hear back
does the editor expose RoadEntity spline data via a method like GetSplinePoints() / GetVertices(), or is it a different accessor pattern?
I got it
So to be quick
I am basically scanning the data for maps at runtime
I don’t want to have json for data in my mod
Buildings and map image are ok for now
Yes I understand, i suggested it because you mentioned reading and parsing mod files, which you can not do from the the client exe, only in workbench
Ok one more if you don’t mind can the engine MapWidget be mounted as a sub-widget in our own UI tree (off-screen / RTonly) and configured via MapRoadProps to render JUST roads to a render target we control? If yes, id composite the engine’s own road render under our canvas at runtime no data extraction needed, fully runtime, works on any map. If the engine MapWidget can’t be invisible / RT-only, that path’s closed too.
Sorry I’m looking at options and for now all I tried is a dead end
No that is not possible
Ok thanks a lot!
I’ll wait for your api response if anything comes out. I honestly digged a lot and I couldn’t find anything
Basically no API, no proper custom map widget for now. not with all the data unless loaded manually in the mod files.
This is where I’m at
tl;dr from our engine team: No and will never exist, because future technology planned to optimize games further may result in parts of the world not existing if nobody is there, so you can not even know any road entities that are there. Pre compute it or scrap the feature, as harash as it sounds.
Ok so how will u guys let modders create their own map widgets ? Especially because your vanilla widget is difficult to work with if not impossible sometimes
If and what settings might be there for maps in the future we will see. You could make a modding feedback ticket and ask for options to e.g. show only roads, not sure if it can be implemented.
I understand, I will thanks
Does anyone know of a fix for the command truck deployment issues?
Issues:
Supply not pulling from iteself (known)
Supply resources saying 0/0 even when beside external depots
Spawn point not showing on map
i wished my ui would look half as good as that
im sure u can do better than me!
lmao
Nope, but the spline is just a Bezier curve with 4 control points (though there's some hacked-in magic constant applied to control points), so you can "reverse-engineer" it.
What i mean is you can always grab data in workbench, process it, and write some custom data into file shipped with your mod, if you need to compute some road network data. anyway i will let you know if i hear back
This is exactly what FF does for its custom road network system, but as far as I remember almost all the data can be also pulled at runtime. Very early FF did that, I only switched to offline generation because road network construction in script was way too slow (linking junctions and splitting/merging segments to ensure a clean graph).
You can look up FF sources as a learning material.
Thanks a lot this is very helpful!
Is there anyone who could help me finish setting up my shop system in my server and my zeliks character mod?
How does this work? Is this displayed in game or the website?
thats the in game layout. app will show same data but with its own styling.
And you want to display road data?
yes but not through normal export
i wantit scanned at runtime
no mod files for maps
otherwise my mod would need to be 300mb
oh wow
would u be willing to explain? i can give u my scripts for buidlings and map picture
so u can complete yours
Yea tomorrow I can talk more about it
That looks amazing tbh
Yea go ahead use whatever you need
thanks a lot!
GetRoadsInAABB

so basically RoadNetworkManager + rpc
bro this is so good
@amber moat I was gonna mention the road network manager earlier and got sidetracked
I know you can get the points of the road and even the width
RoadNetworkManager.GetRoadsInAABB + BaseRoad.GetWidth/GetPoints
Hopefully that's all you need to do what you're trying to do
Should be a good starting point! Hopefully I can get as close as vanilla as possible
For map image I gave up. I will do a procedurally generated grid so it will be like Minecraft 💀
this is the result, but it kills performance at 256, even with all sorts of optimizationsi tried max is 128. i scrateched that and decided ill go with no image
just curious, but what was the deal with having to get RplId with GetEntity from RplComponent when there's FindItem and FindItemId? It seems like the latter is used for ChimeraCharacter. Is that a central config thing or is it the prefab config? The RplComponent on the root of prefab is standard.
So it depends right, GetEntity is a helper method similar to GetOwner, if you have the RplComponent on hand - yes it can be used for that. But let's say you only have a RplId - and no component, because you don't really know if that item is streamed in for the client, then FindItem will help figure that out.
What exactly are you trying to do, because your message reads multiple ways lol
I just didn't get why FindItemId is -1 at least early on. I'll try with a character instead. Server should be able to send RplId early in game setup. But maybe RplComponent is more reliable than other ways of getting RplId directly from Entity.
what am I looking at here? Script obfuscation or something else? 
Honestly can't blame them lol
If that can secure their work from being yoinked then so be it
Pretty sure obfuscation is against the rules? A green guy will have to confirm though. Not much reason to do that unless you stole someone's code and are trying to hide it.
They said they didn't like it, usually when you obfuscate your code it means you have something to hide, but the rules aren't explicitly banning it.
And considering how easy it is to get your stuff yoinked if that can allow modders to protect their work then i support it lol
Is there a way to dynamically resize storage volume while preserving items? I would like to let rp players upgrade a safe to have more storage.
Please ping me if you can help at all
@hybrid veldt lol
What mod is this from?
^^^ I now want to find this mod just for the sole purpose of de-obfuscation. 😜
So like, if the KOTH or Narcos Life mod (idk if they come the open source life mod) obfuscated their stuff to prevent rips and copy cats, i would understand. But the majority of scripted functionality is patch mods and simple. I think they should be open sourced for the community.
Thats my hot take.
In 95% of cases people obfuscate to hide things that they have stolen not to "protect their work".
Your license exists to protect your work. Do your due diligence and enforce your license like every other software developer in the world.
What really blows my mind is there is an RP server that was able to monetize even though they obfuscate and have already had numerous strikes for misconduct.
Theoretically against the rules, practically idk
As long as your server is bringing in players it's okay to break the rules? That's how it seems from a bystanders point of view at least.
What makes it worse is the monetizing rules, or atleast awareness of them came from those A3l servers making money hand over fist all those years ago
Obfuscation is just stupid and lazy. Also (oh Zelik beat me to it xd)
#enfusion_scripting message
That didn't stop a few modders from yoinking my work and nothing was done about it in over two months lol.
That's why i feel like licenses are useless, if i want to protect my work i should do it myself, it really feels like that the only ones who get things their way are those who don't even bother to ask or care and the license
It's YOUR responsibility to enforce YOUR license
You're the one that's supposed to do something about it
Not B.I.
If anything, DMCA B.I. for hosting your stolen IP. It will get handled real quick then, I promise.
BI surely has a massive backlog, and if it’s not a straight copy/paste en masse it’s not a black and white issue to them that requires analysis.
At the end of the day, you could enforce yourself but that doesn’t seem like an advisable route
That's 110% advisable as that's what B.I. expects. They've literally said they aren't gonna enforce modders licenses.
dmca bohemia, u need to have proper license
If it was a straight rip, it probably would’ve already been taken down. It’s a decent indication that they might not agree with you, and your DMCA will be ignored. Which is a waste of time, we waste enough time on this game as it is. The yoinking in question has never been defined to begin with.
Ok, which button do i click to remove the mod?
I've made the reports, given them documents with code comparisons with explaination on why using my method is way less efficient in their case and all I've gotten in return was "next week bro trust me" for 2 months.
It's a straight rip with AI renaming variables and methods.
And shuffling a few lines
a dmca is a legal action, it cannot just be ignored by BI. unless they want to lose the safe harbor
They may disagree, or may be over the threshold for infringement
DMCAs can literally be ignored, the same as any other civil legal actions, until you are court ordered. The onus is then on YOU to counter. In which case, you better have your ducks in a row and capital to burn
Then again, I have no idea and don’t really care how Europe works either 😂
europe is worse dont worry u are not missing anything lol
Oh I’m aware 😂
I mean i'd rather have a "yeah we've investigated the case and we don't believe it's a derivation of your work" rather than "next week bro i SWEAR"
They’ve been legendary non communicators for a long time, and are definitely showing clear signs of being stretched too thin
in my personal experience with dmca and gdp stuff i have seen multiple cases of companies ignoring dmcas, did not end well if theip right holder is serious and has docs all set
companies not enforcing can lose benefits
If you have clear evidence, absolutely. Which is why they kill model rips instantly. Code is a much murkier water.
Agree! Yes that’s what enforcing the policy means
There’s a massive body of case law about this in the US
I don't think most modders are willing to go to court over that, especially for non profit work like in reforger modding
Legal actions over a video game are silly, people are going to steal your stuff
Something flattery but I get it. As above a license is only as good as your abilities to enforce it
I'm just disappointed that I was fooled by their license wiki, explaining how you own the IP of your work and that BI would be there to deal with case like these
I was under their impression that they kind of cared about it since modders are basically what makes arma what it is, but ehh
I think even if you go all the way to court for something as petty as modding they won't care
I am lol
Intellectual property is enforced by law in most countries
Well good for you, if i had a j*b and money to lose on it I'd definitely do it lmao
U can mod so im sure u can get a good job man
i hear alot of folks use ai for lawyer 🤣
I'm studying data science, so maybe.. but i still have a few years to go
Oh yeah i should definitely hire GROK premium to handle this case for me, i love it's no-bullshit approach 😎
dont let shit get you down though man. people will always take its in their nature
I mean i won't i'll move on.
But i likely won't be updating those mods as i'm not trying to give that specific team more code to yoink and train their llm with
I still laughed when i saw the AI-written comments of it struggling to implement my codec
see small things
That's like saying legal actions over movies, TV shows, music, paintings and drawings is silly. Art is art, it deserves protection like anything else.
Where I’m from that means the police are coming to your door, which is not the case. Purely a civil matter which reverts to previous convo. Hopefully BI scales their team to handle this stuff though.
probably worded poorly but if you are being sued you bet someone will come serve you if court action ends up being taken though
We will never agree on this front, I view these as silly video game pixels, made on someone else’s tools for someone else’s game usually based on stuff other people created. That said, fully support people’s ability to enforce their rights. There are realities to it, though.
Too bad the law disagrees and that's all that really matters.
Great thing no one is getting sued, either
Because it’s a video game
If you don't think there have been lawsuits over video games then you're definitely mistaken.
One of the most convoluted areas of law, and somehow everyone thinks it’s black and white
Unless you're explicitly speaking about modding.
I mean i still feel like taking someone else's work is incredibly messed up.
It's so disrespectful to other people who have spent time making their mod what it is.
ESPECIALLY considering that for most modders you can just ask them "hey i was interested to know wether i could yoink that feature/those lines of code from your mods" and 95% of them will say yes.(unless you're asking to yoink their whole entire mod)
These new kind of rips are a losing battle. I've seen similar cases with additionally identical GUIDs of some configs, but it wasn't deemed enough either.
Of course I’m talking about mods. It’s frivolous, there are no damages. I’m sure a case out there could be found where a community was taking in boatloads of cash and got shafted x
LMAOOOOOO
THIS IS COOKED
Take your offtopic elsewhere, this channel is about scripting.
Isn't copy pasting someone else's code related to scripting? It says anything related to scripting
Yes but, it turned into IP/law discussion.
Fair
I'm more than happy to continue the discussion in another channel.
I don't believe they have channels for this kind of discussion so.. I'm guessing it will likely die here.
Sounds about right for any IP conversation
Hi, i currently have an issue with GroupManager:
const int playerID = SCR_PlayerController.GetLocalPlayerId();
Print(playerID);
SCR_GroupsManagerComponent groupsManager = SCR_GroupsManagerComponent.GetInstance();
if(!groupsManager) return;
Print(groupsManager);
Print(groupsManager.IsPlayerInAnyGroup(playerID));
SCR_AIGroup playerGroup = groupsManager.GetPlayerGroup(playerID);
if(!playerGroup) return;
If the player in SP dies, the GroupManager will no longer return any group, But, if check the Group Manger UI on deploy menu, im still in "Aplha" also, if i start a fresh game and do not have any controlledEntity yet, i still have a group. So why i do not have a group after death?
I'd say you're automatically put in a group when you first join, when you die you're probably not in a group until you actually deploy?
The deploy menu shows you in a group but you're probably not actually in it until you take control of your character?
But why should you removed from a group when you die?
So when you deploy you can join a new group if you want to?
Or to not take up a group slot for when a new player joins?
When staring the game, you join "Alpha" then GRPMgr return such group, even you still not have a contolledEntity. Now you deploy and die, you do not have a group.
Yes, so when you first join it forces you to a group, when you die it removes you from the group, so at the deploy menu you can choose to join a new group. But, who knows why it actually works the way it does.
It does not force me in a group, i join it
"if i start a fresh game and do not have any controlledEntity yet, i still have a group"
Yes, because you first join a group and then selecting the Player
We only remove players from groups on disconnect. Debug the method you are asking and see where it returns false
My first thought is that somewhere in the chain of a getting a player's group, it fails to retrieve it due to the player being dead.
Just simply that. So do what ark said. It could just be simple faulty condition that never caused a bug, and you might be the first person to notice it.
@serene fox ^
currently checking the methods
modded class SCR_GroupsManagerComponent : SCR_BaseGameModeComponent
{
override SCR_AIGroup GetPlayerGroup(int playerID)
{
SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
if(!factionManager) return null;
Faction faction = factionManager.GetPlayerFaction(playerID);
if(!faction) return null;
array<SCR_AIGroup> playableGroups = GetPlayableGroupsByFaction(faction);
if(!playableGroups) return null;
for (int i = playableGroups.Count() - 1; i >= 0; i--)
{
//---------------------------------------------------------------------------
Print(playableGroups[i].GetPlayerIDs());
// m_aPlayerIDs will hold my playerID, when i die, its also in the array.
// But when the respawn menu opens, the array gets empty!
// ---------------------------------------------------------------------------
if (playableGroups[i] && playableGroups[i].IsPlayerInGroup(playerID))
return playableGroups[i];
}
return null;
}
}
SCR_AIGroup -> RemovePlayer() -> This method will never be called! But the array will still loose my playerID
U can take a look at the approach I use for my mod
I basically just move players once they are in a group. Not before.
They can spawn in any group and they will automatically moved to the one assigned
But why are you trying to steal my code?)
You could have asked me on Discord why my code looks like this.
But you decided to do it behind my back; essentially, you're just trying to steal someone else's work.
That's why me need to obfuscate work; you sitting in my Discord, trying to pull out my code behind my back 😄
? I’m not trying to steal it, was actually looking to figure out what could be the reason why I wasn’t spawning into your server lol. Trying to help, actually
As I’ve given you scripts that I’ve posted in the discord, Id think you’d realize that I’m trying to help with your mod and am capable of doing my own script work, I don’t need to steal lol
That's why you came here instead of asking directly on Discord.
Cool, keep up the good work!
Literally irrelevant to the point lol. Modders help modders, every one looks at each other’s code. I’d question why you’re so secretive of your code to obfuscate it?
You can look up my mods and see my code is not obfuscated, everyone is free to open and look at them
yo cashew link the mod
https://discord.com/channels/105462288051380224/1499084979832094830 here’s the thread
There’s a ton of mods with obfuscation… one of them is extremely popular and is monetized
So if that one doesn’t get taken down for it it’s safe to say that obfuscation is allowed
Well done, I'm happy for you.
We will destroy anyone who tries to protect their code and develop the Arma community, all so that others can steal your work.
I don't care that one of these closed mods runs servers with 500+ players and generates some income for the game developers, I don't care that they popularize the game among the community.
Anyone who wants to spit on those who make content for the game, I invite you to my thread https://discord.com/channels/105462288051380224/1499084979832094830
If someone steals your code and you can prove it, report it
If i were you i'd keep your code obfuscated
Unless told to change it
WELCOME TO THE DARK SIDE /sarcasm
Thanks
I'd rather be in violation of Bohemia's tos than have my work stolen again.
They won't act on it tho
Lmao
@heady sphinx mind if i dm you?
Stop promoting people to break the tou or eula or you will also get a behavioral ban
I don't remember reading anything regarding code obfuscation in the tos or eula tho ? mind pointing out to where I can find those rules ?
Read your message again. The warning is not relating to obfuscation
And yes. On the changes to EULA and ToU this year. Obfuscation will be officially banned.
For now its tolerated but people unfortunately have abused it
i mean i wasn't promoting breaking the tos tho ? I just said that if i had to choose between being in violation of the rules or have my work stolen again i'd rather be the one in the wrong than have my work taken again.
I f your work is stolen, and can be protected then a report should do it
i did 2 months ago
If in game report is taking too long then send it to me or horrible goat
Game reports take longer because we have to filter through many of them, and research them
As we do not ban without investigation
Only case where a ban is done directly is when a DMCA is issued
I've dmed horriblegoat two documents with side to side comparisons. all i was told is "yeah next week we'll handle it, trust trust" and from my perspective nothing has moved since
On which you are in legal problem if thr DMCA is not proper
But normal reports get investigated
Send me the stuff. It probably went into backlog. Not ignored most likely
Sure
I am trying to understand the entity budget system for campaign and how to make a vehicle XP cost and individual/category vehicle cooldown.
Where is the method that defines whether an entity can be spawned based on budget?
Can I get any tips on how to integrate this into the building/budget system?
Or here is a question, anyone know what class/method I can put a breakpoint in to start investigating the call stack when clicking a rank locked vehicle here?
im looking for a scripter for 3 projects if your intrested in more details hmu it should not be to time consuming for you
oops mb so many channels forgot abt that
Cooldown is in a config file and related to rank (BaseMilitaryRanks.conf). XP cost meaning rank required? If so that is in the vehicle prefab under Campaign budget cost in the SCR_EditableVehicleComponent. If that's all you need to edit, you don't need to do any scripting.
I specified my vehicle cooldown a bit more above.
Definitely do need to some scripting
There is no XP cost budget in the game. Rank requirement != XP cost
My bad! The way you worded it, I thought you just wanted to adjust the rank (xp) required to get the vehicle. As far as cooldown, I mentioned where you can set the values. Cooldown is set per rank, not per vehicle. But you'll probably have to write your own system to make it per vehicle/category instead of rank. I don't remember what exact class handled this, but I do remember the whole system being quite complicated.
It worded poorly. I have made some progress already... but, im not seeing any changes yet
With high modularity comes a high requirement of knowledge
I think I have started to figure it out. These systems are spread out so much
What is the difference between GetOrigin and GetTransform?
search them in script editor in class IEntity, you can store an origin in a transform.
examples in comments
🤔
Origin should be identical to the fourth axis of the global transform (index 3).
Transform just stores a lot more like a basis set for the orientation and scaling in the first three components.
Question about the Update method.
I want to modify the radio backpacks to automatically destroy themselves if they run out of supplies / respawns.
I am currently looking at the Update method to add this functionality. Does it run on server and client? If I want to destroy the object, I should only call it once and from the server, right?
You don't need to call update after you destroy something.
I would check for the respawns and destroy from the update method
Thats my current implementation that I am working on.
So does the update method run on server and client? It runs on client.
How do I make the behavior server only so I dont have multiple clients attempting to destroy it?
I don't know where the update method runs, test it to find out.
One would assume since the server is the authority that it runs on the server and maybe replicates to the clients engine side.
/*!
Updates entity state/position. Should be called when you want to manually commit position changes etc
before trace methods etc. Entity is updated automatically at the end and the beginning of simulation step,
when it has EntityFlags.TFL_ACTIVE flag set.
\returns Mask with flags:
- EntityFlags.UPDATE - hierarchy has been updated
- EntityFlags.UPDATE_MDL - model hierarchy has been updated
*/
proto external int Update();
I assume youre talking about the update for IEntity
I wasn't sure
But, that update runs on server and then client, if i'm not mistaken.
Or a better way to put it, is, the server calls Update then that update is replicated to the client.
class TestAction : ScriptedUserAction
{
override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity)
{
if(Replication.IsServer())
pOwnerEntity.SetOrigin(Vector(0,1,0));
else
pOwnerEntity.Update();
}
};
simple confirmation
Standard OOP antipatternmaxxing
Hall of fame kind of screenshot haha
This is only to replicated entities wtih network movement components
Or simulation components
do we have unsigned int in enforce ? idk if i'm rarted (i am) or if i'm doing something wrong
Damn
Thank you btw*
Could anyone please advice me on what could be the best method to find out whether a player have weapon?
Held or in slot, or anywhere in inventory?
Could use a inventory search predicate if last one
First two are easier
Thanks, well, that is a bit complicated, but for starter, for primary weapon, being held or on sling.
Im trying to determine whether a player is threat, meaning the gun is visible and not hidden in inventory, like in backpack or clothing.
BaseWeaponManagerComponent -> GetWeapons()
m_HandSlot = CharacterHandWeaponSlotComponent.Cast(owner.FindComponent(CharacterHandWeaponSlotComponent));
Why is this always null? lol
Custom playermanager kick/ban reasons when?
Would there be a vanilla script component i could open to look how this is done please? 
give me one sec i'll see if i can write you a simple method
I have used GetCurrentWeapon(), but it always return null
GetCurretWeapon return the weapon held be the player and i assume your threat system wants to know about any weapon that the user is carrying right ?
Yes, thats correct
Regardless here is a basic method :
bool IsCharacterArmed(notnull SCR_ChimeraCharacter character)
{
BaseWeaponManagerComponent weaponMgr = character.GetWeaponManager();
array<BaseWeaponComponent> weaponsComps = {};
weaponMgr.GetWeapons(weaponsComps);
foreach(BaseWeaponComponent wpnComp : weaponsComps)
{
string weaponType = SCR_Enum.GetEnumName(EWeaponType, wpnComp.GetWeaponType());
Print("Weapon found : " + weaponType);
if(wpnComp.GetWeaponType() != EWeaponType.WT_NONE)
{
return true;
}
}
return false;
}
Usage :
void DoStuff(notnull SCR_ChimeraCharacter character)
{
LogKittenEye("IsCharacterArmed : " + IsCharacterArmed(character));
}
You might want to add other "non threathening" weapontypes such as smokegrenades for example but this code will let you know if a character (player or AI) is armed
feel free to also remove the log statements etc
Thank you very much good sir 🫡
You're welcome !
why not this
bool HasAnyWeapon(notnull SCR_ChimeraCharacter Char)
{
array<IEntity> weapons = {};
return Char.GetWeaponManager().GetWeaponsList(weapons);
}
Empty slots come back as WT_None weapons
What I posted just returns true or false if any of the weapon slots have a weapon in them
No need to iterate the slots and check they "type" of each
honestly only thing i can say to defend myself is if they want to allow certain items that count as weapons (eg : smokes)
that's the only defense i have left lmao
No need to defend yourself lol
Just showing you that what he was trying to do could be a two liner
fair
i think your solution might be wiser
unless they're trying to whitelist some weapon types... idk how i didnt notice getweaponlist it's right below getweapons 😭
one weird thing I just learned
You can't define arrays like
array<IEntity> Weapons();
if your function doesn't exist within a class
That's odd lol
class HelperThing
{
bool HasAnyWeapon(notnull SCR_ChimeraCharacter Char)
{
array<IEntity> Weapons();
return Char.GetWeaponManager().GetWeaponsList(W);
}
}
vs
bool HasAnyWeapon(notnull SCR_ChimeraCharacter Char)
{
array<IEntity> Weapons = {};
return Char.GetWeaponManager().GetWeaponsList(W);
}
I guess you probably just can't do it in the main scope
also i had a bit of a weird question zelik,
I doubt you remember but you kind of initiated me to scripting back when i got started in 1.2, and I was wonderring : Out of the people you start getting started (or you've seen start) if you had to guesstimate how many gave up within a few weeks vs how many actually learned to script in enfusion.
What would the numbers be ?
95% give up unless they had some prior scripting experience
that's a shame
Yeah, glad to see that you stuck around.
kind of insane that after all this time you're still helping out newcommers.
One of the big problems when I try to get people started is, they expect me to be involved in their entire learning experience and to just endlessly answer questions and I unfortunately just don't have time for that, especially with numerous people.
from my limited experience helping out people i've noticed that redirecting them to the bootcamp video / wiki pages is often very poorly taken by them.
That's also an issue with the current culture of the world.
Everyone thinks that they are entitled to direct answers for every question.
Because they've had google at their fingertips their entire lives.
Yes, how dare you expect me to watch a video and do anything when you can just explain it all to me right now.
getting slowly worse with AI, feels like a lot of people feel entitled to not need to learn / spend time
If you're not gonna put in the effort to actively do the hobby, you should just stop tbh.
it was better when stackoverflow would be your best friend
embrace the future old man...
The future of humans having no knowledge and needing a robot to do things for them. Imagine, being the only person left that knows how to write scripts when AI dies. lol
We're on a tangent lol
I assume you're not studying anymore but you should see the current technical debt in our universities...
feels like an idiocracy skit
On the subject of scripting though. It's pretty hard to teach people these easily comprehendible concepts.
I can explain it all day but, I can't understand it for you.
at the end of the day it all comes down to effort, time and practice.
Yes
And when you finally get to where you can do something without actively thinking about what you're doing, that's when you're actually good at it.
it's also very enjoyable to feel independant in the workbench.. knowing where to look at, developping the intuiton etc.
it was such a liberating feeling when i started "feeling like i could do anything". of course that's an exxageration there is still a lot of things i haven't even touched when it comes to scripting or the workbench,
But when i realized that i could start swimming on my own it felt very liberating.
I've had some decent luck doing point oriented workshops, but I think for most people getting super into modding is a bridge too far
The actual problem is no one that gets into modding(that has 0 experience) takes into consideration the prerequisites for it.
If the company requires the skill set for you to be hired, it's a skill set that is required for modding. Because they are the same thing. Modding == Game Development.
I feel like that isn't necessarily the candidate's fault, i have this feeling that the workbench tries to advertise itself too much as "beginner friendly" or "for everyone" while for example in scripting you will likely need some oop / c# experience.
at least that's how i felt when i started. but i had already toyed with c# / asp.net quite a lot in the past so for me the hardest part was mostly learning replications, where to look for and engine specific ways of doing things.
Most people have family and lives and don’t have the time to learn coding. Ai to save the day 🙂
If you don't have time for your hobby, find a new hobby that you actually have time for?
lol
At least respond with common sense
The workshop itself is very enticing to garnering interest, though. Seeing what is easily possible and changeable, gives a decent look into how the things are setup. I'd take a guess that the majority of modders are not doing code related stuff, or very little.
did you just come here to rage bait ?
or do you actually mean what you say ?
I'd agree, but its not exactly required to start, since there is no barrier to entry
Oh I actually mean it, ai is a tool nothing more but I’m not going to give up time with family and friends to learn something when I don’t have to.
The barrier to entry is general knowledge about what you're doing.
Real life comes first, always.
Yeah, and programming isn't a real life skill that can be used elsewhere.
I mean there is a reason most serious scripters are working in computer science as their job, they mod reforger as a hobby and to give to the community.
I'm not trying to argue this a closed mind vs closed mind issue, all i will say is that it has some prerequisites, you can try to bypass those using AI but eventually it will usually backfire.
The problem is the gate keeping when people ask for help. Yes one of my buddies is an actual programmer but I didn’t go to school for it I work in construction but wanted to start a community on arma with friends I know what I want at point a and point b but I need help getting there. If that makes sense
I have 0 formal education in programming and also work construction but, I've put forth the effort to learn the things i'm passionate about.
You don't need a formal education to learn any of this.
Everyone has different opinions my guy
by gatekeeping, you mean this ?
you could look up zelik's chat history, this guy has been helping newcommers get started with scripting for years now
Me included.
Not everyone is the same I have seen you help people in here for months.
sure there are a few gatekeepers but trust me when i tell you this : The AR modding community is one of the most generous one you will ever come across
Guess it depends on who you ask
Not giving other people knowledge that you've put years into learning isn't gate keeping.
Yeah re-read what you just said. I’m out
Entitlement is the big problem, especially with a lot of new comers.
i've experienced my fair share of those, i can only imagine how bad it can get
We’re a hell of a lot better off sharing information now for reforger than we ever were for a2/a3, that was actual bad gatekeeping
i was 11yo when i started playing a3 a bit too early to mod i think :)
Naaa never to early 🤣
gaaa gaaa gooo goo ?
To be fair some folks come in asking for help expecting someone to teach them programming from scratch in 5 minutes, then get upset and call it gatekeeping
There is no tutorial "Learn to code with Reforger script", but if you already know how to code, it's a very quick and simple language to learn.
So best way to help these people is probably to tell them to go learn coding with another language that actually has resources for learners.
Stop gatekeeping 😠
Nowadays C# nearly as bloated as C++. Like, endless features to get lost in. Maybe Unity C# a better option; Unity is some ancient much more simple version of C#.
Step 1: learn python
Step 2: dive right into enfusion script(skip the bootcamps)
Step 1.1: Struggle and ask ChatGPT
Step 1.2: become entirely dependent on chatgpt
Is there a slick method in enf script to truncate a vector, like <123.03 557.11 167.23> into <100 500 100>?
Embrace AIIIIIIIIIIIIII DUDE !
step 1.3 : it doesn't compile because the modding community is gatekeeping !
Quit gatekeeping the compiles! I know you have them!
oh chatgpt, can thou tell me, what is causing this unknown exception error? Make no mistakes.
Thats ancient the og's just copy paste the errors
You're right to ask questions about your code, this is the key to Arma Reforger scripting 👉
Why it works 🚀
As you requested I've added a command to send a chat message and refactored 953 million lines of things not related to commands or chat in any way
RESOURCES (E): Wrong compile/name for resource @"{A7C69A3FCFF7420E7}Prefabs/stuff/emoji/rocketship/blastoff.et" in property "m_sEntityPrefab"
but hey at least it doesn't compile 😭
this it the last thing you see before ending up with the CommandProcessor
Tools are only as good as the user using them, though ChatGPT is a blunt tool, not really well suited. Claude on the other hand can be pretty intelligent with reasoning and troubleshooting.
Looking at the Primitive Types in the wiki: Do I understand correctly that there isn't a byte data type or similar?
So if I only need 4 bits of data I would still just use an int?
Yes, unfortunately. Or 4 bools.
Ok thanks for confirming. I had the same idea with the bools, but since they are also 4 bytes it would be more hassle then it would be worth, I think.
It doesn't really matter though unless you're dealing with huge amounts of data, these are basically micro optimizations.
I've done something like that for my Map Drawing mod, I basically packed a lot of different data together into 2 integers for transmission over the network.
This theoretically improved the efficiency significantly, but I highly doubt it would have mattered if I hadn't done that.
Yeah, it doesn't really matter. It just feels weird to use ints for that, coming from other languages 😅
I am playing around with slope recognition in Forest Generators (with dynamic outlines around big cliff areas) and a cliff generator. So even if a generator is 4x4 km, I would only save like 13 MB of temporary data. So ints should be fine ^^
Thank you very much for the help Zelik and HideoutKitty ^^ Its working now. I didnt give up, i rarely do. ^^
I would have appreciated at least a byte datatype as well, they have been a couple of situations where I wished for one
well done
geez who would ever do that. crazy...
This is my personal method, asking questions is my second attempt at finding an answer, but I dont just stop and wait for it either. I often end finding the answer myself before someone does answer.
I cant really talk much about "scripting" since my scripting knowledge is from A3's goofy code, but sadly I notice that people are less eager to learn than back when i was teaching Nurse students how to do their stuff.
Right now in terrain making, when I try to help someone I notice a lot of backlash because I send them for example the Atlas 2 (the holy bible of map making in enfusion basicly).
They simply do not read said help or just do "a" part of it and skip steps, causing them to fall in even a deeper hole than they are in, even with explaining that they need to follow step by step, this goes wrong a lot of time.
Due to the "luxery" of people needing to learn less to go around has sadly it's negative spire that people sadly do not want to use effort to learn or understand something and when help is given its 5/10 times with people getting anoyed cause you dont explain every bit of detail to them while they can perfectly find that intel themselves within the link(s) that were just provided, or even worse, when I litterly state: google this ect, they go 1 sec after saying it: "cant find it", there is just no effort a lot of time.
OR you have the scenario when people complain about "doing work" and want always an "easy out option" wich isnt there always and moan when they actually need to do some "developping" , this just hurts, since modding is about passion in my eyes and not about: who can push out the most stuff within the least amount of time.
But on the positive note, this is not for everyone, there are also a good amount of people that just need a small push into the right direction and they start to "fly" on their own.
They do their own research and developthemselves.
I saw plenty of nice screenshots of people working on their project(s), I got to met plenty of cool and amezing talented people this way, from scripters to modelers to map makers.,
And I do think, still having the group out there, willing to do effort, hard work and dedication, for the love of their hobby, is still worth it (to some degree) to try to help someone out when they ask for it.
Sounds like gatekeeping you should embrace ai
"reaperdrone has been send to your location"
All jokes aside, I am very much anti AI, mostly because I do think artists deserve money for their labor, also an artists puts out more quality than AI.
Same as scripting, a scripter can script way better than AI.
So am i don't worry
Is there a way to forcefully load a specific area on the map using a vector for examplev (on the client's side)
What do you want to load, specifically?
Just entities in an area of a map(players, vehicles) , entities impacted by the network view distance.
I read that thing front to back before touching the terrain editor.
Try reading the replication docs before knowing what doxygen is 
I dont know either 😁 what is doxygen
🥺
look up MPObserver stuff
Thanks
Is there a class that can truncate whole numbers? floor() in Math.c only does float
You can always cast it to int to get rid of the decimal
Yea did that, looking to make an int like 263 become 200
if:else if chain it'll hafta be
https://community.bistudio.com/wiki/Arma_Reforger:Multiplayer_Scripting
Why do you even need the doxygen docs?
At what point is using a Case chain more advantageous than an if:elseif chain, >50 conditions?
What kind of rounding are you actually trying to do? Rounding 263 to 200 is odd, you're rounding down when you should be rounding up.
im not set on down, it can be up as well but ceiling and floor only work on float
down then, making backup coordinates: if you're at coord 2141 160 500, it should turn into 2100 100 500
i just made a long if:elseif chain for it
Why are you "making backup coordinates"?
in case the map being played returns Null for support station calls to get the base name. The coords get turned into a string and take place of what would be a base name
Why do you need to round those?
If you're storing a vector as a string as a name, why not just keep it what it is?
what does Math.Round(5.5) do? up or down?
up
Why wouldn't you just come up with a generic name for these stations, like FIA_SupportStation_01?
You're just overcomplicating things for no reason at this point.
because if the condition is hit >1 and has FIA_SupportStation_01, itll already be in the array and it changes what should happen
so giving it general coordinates based off of position is more accurate and less likely to appear more than once
but precise coordinates are too precise, Im basically defining an area around the entity coord
There's 0 reason your generic naming should ever be the same for any of them though.
in testing, it happens where a boundary is named the same as another boundary elsewhere so I need a way to make sure theyre treated correct
You iterate the 01 at the end each time
FIA_SupportStation_01,FIA_SupportStation_02,FIA_SupportStation_03
i could, but it wouldnt work right. truncating the coords to general coords makes it so i know if a entity was built around location xyz already
It would work right if you did it right.
it is right as-is, these are a backup so it doesnt return Null
These stations should be build for factions bases, it only makes sense that they would be named for the faction they were created for.
thats not how the logic works, especially if GM places them around
And when they are built by a gm they still have a faction don't they?
the faction is irrelevant
Maybe if you're not naming them accordingly
Regardless, do it however you want. But giving the coordinates as names and having to do >50 else ifs is a horrible design.
it doesnt have >50 elseifs, more like 10. that was a general performance question
it makes sense for what the mod does, and it's only if something goes wrong with getting support station info
Naming them coordinates makes no sense regardless, that's not a good design.
The only thing that should matter in this case is which faction it was made for and how many they have.
hints the generic name FIA_SupportStation_01
that wouldnt accomplish what the mod is supposed to do
If you say so. I'm just trying to point you in the right direction by pointing out good game design vs bad game design. If the coords of the thing are so important, you can get the coords of the thing from it, regardless of its name.
If you're just trying to stop one from being created to close to another one store them in a static array and then check to see if any are too close, use the tag system, or a grid map.
whats a grid map, map coord blocks? edit: nope, needs to be relative coordinates to ensure spacing
Why do you need this? I read it in workbench
Originally it wasn't in workbench.
and the doxygen docs didn't exist.
Get with the program old man, we read green text in workbench to solve all problems
The only spacing you need to worry about is in world space. This stations world space coords vs this other stations world space coords.
yea I already have that with closestbase, but there are instances where it doesnt trigger correctly in HQC. So if my truncating is used for entity X coordinates that resolve to <800 400 100>, then entity Y is placed and its coordinates also resolves to <800 400 100>, entity Y will trigger a different condition.
i see what ya mean, Im just gonna be lazy and use my method 😄
There is no need for if conditions, just divide and multiply by 100 using integers
if it's int then value / 100 * 100
another version of that is
value - value % 100
Is it possible to use out on a static array of a object?
Example: protected bool TryGetTilePoints(int x, int z, out int tilePointIndices[4], out DAB_TerrainObstaclePoint tilePoints[4])
I get the error even though the passed in parameters match:
.../DAB_TerrainObstacleGrid.c(113): error: Cannot convert 'DAB_TerrainObstaclePoint[]' to 'DAB_TerrainObstaclePoint[]' for argument '3' in method 'TryGetTilePoints'
(Or am I missing something obvious?)
Does the signature match?
I call it like this:
DAB_TerrainObstaclePoint tilePoints[4];
int tilePointIndices[4];
if(!TryGetTilePoints(x, z, tilePointIndices, tilePoints))
And function signature is this:
protected bool TryGetTilePoints(int x, int z, out int tilePointIndices[4], out DAB_TerrainObstaclePoint tilePoints[4])
The problem does not exist with dynamic arrays.
why is it not updating?
ImageWidget rowBackground = ImageWidget.Cast(m_wPlayerRowWidget.FindAnyWidget("Background"));
rowBackground.SetColor(m_Row_ColorA);
rowBackground.Update();
It's white...
protected ref Color m_Row_ColorA = new Color(111, 168, 220, 1);
How do entities behave in ItemPreviewManagerEntity.ResolvePreviewEntityForPrefab? Do they auto delete somehow? I see that SCR_LoadoutRequestUIComponent.SetLoadoutPreview creates preview entity (character) but never deletes it
The entity gets created in the preview world
Am I missing something, does it endlessly creates more and more preview characters?
not the main world
Yes, but all I see is entity creation over and over with no cleanup afterwards
So I wonder how they're cleaned up

No manual delete in SCR_LoadoutRequestUIComponent
it's handled by CPP iirc
So entities in preview world delete as soon as you lose variable reference to them?
I have no idea on that. IIrc they were not deleted but reused
But I might be wrong. I recall this from long time ago when we were dealing with virtualization
I would need to check what is the current impl. Or find someone that knows
The entity is spawned using ItemPreviewManagerEntity.ResolvePreviewEntityForPrefab in this case, same resource used each time
Would love to know for sure, to know how I should deal with the cleanup myself
ResolvePreviewEntityForPrefab does create entity
And when you call it again on the same resource
Then it searches for the already previously created entity with the same prefab GUID
If so, then it just returns it again
If not found then it creates it again
That's what is in the cpp impl
Aha, so this explains it a bit
It has a hash map that it fills upon entity creation
If created then it inserts it as map["ResourceNameGUID"] = Entity
Got it, so it is safe to just summon same assets over and over and have the engine handle it rather than keeping track of loose entities and delete them myself
Yes. but they are are stored as weak pointers. So deletion is not done by the system
It seems it waits until preview world itself deletes
Unless you created thousands of entities for some reason then there is no concern to delete them
You will actually cause the UI to lag a bit when dealing with the item previews each time
Looks like Arsenal does just that, ResolvePreviewEntityForPrefab everything you have in the catalog
As it will need to stream in all the resources again if they were flushed and what not
Speaking of this, I was wondering if there is a reliable way to preload the asset before making it appear in item preview widget on UI. Arsenal doesn't solve this, you open it and items in the list are missing textures and materials for a bit before they're streamed in.
There is like PreloadEntity method or so in Game class iirc
GenericEntity::Preload
I guess that?
But I am not sure if this preloads assets
Looks like its not used anywhere in the vanilla scripts, I guess I'll have to experiment
In 1.7 can we pass functions as arguments yet?
Im not caught back up on my script knowledge, but don't we have a script evoker something something?
That's not what he's talking about.
I thought they said they'd never let us do it
The probably wont
Would be sick if we could have await and get a return from an rpc call
[RplProp(onRplName: "MethodToCall")]
MethodToCall is called on proxies when the prop is updated through replication
That's about as close as it gets.
I mostly wanted it for the other way around, server getting a value back in return, and afaik onrplname does not trigger on the server so i kind of always need to rpc to the owner and then back to server which is annoying imo
What?
If the owner rpcs a value to the server, to have the server change the value for them, the server knows the value.
I'm not available to vc rn.
My use case that i had in mind is when the server want to get a client's value that isnt replicated.
For example : i want the server to know a player's screen resolution i'll have to rpc to the owner so that it can rpc it back.
If it works with a dynamic array it still smells like a Type issue.
Oh, something like that can be kinda weird depending on where you're handling it.
Nope
(I got auto moderated
)
It's a remote call, not a request call
But maybe an util for that might be interesting
If you're around can you explain why the touch component no longer works? Or what changed to make it work correctly?
Hey, if i change the Transform of a "PointInfo" with:
"proto external void Set(IEntity owner, string boneName, vector matInOwnerSpace[4]);"
The attached Entity will not updated. Can i force a Update?
Set the transform directly of the entity
Enfusion scripters yearn for node JS
No thanks
I'd rather get shot than script in JavaScript
Reminds me how there is a minecraft server framework for bedrock which allows people to create plugins in JS, python, C#, C++ and all of it is compatible with the game
Obviously what we have makes more sense - but projects like that are always fascinating
No they don't
It was a joke about await
Suuuuuuure it was lol
I'll await myself out
Error 404
I heard a rumor : if you ask for JS one more time BI will take you out back and SHOOT you
But speaking about this kind of thing, imagine that websocket connections probably out of scope due to engine limitations (single thread), but it would be nice to be able to subscribe to events, etc. from a web api, so polling is less necessary. With my API I am polling repetitively for updates - and maybe I am missing something, but it is not as efficient as I would like it to be.
Definitely would love to be able to use web socket feeds
But wouldn't it be a security vulnerability to open an arbitrary connection port port for scripting? I thinks its already somewhat a security vulnerability to allow making requests.
But then practically speaking, what if you have a middileware api that handles events and websockets, and the server sends and retrieves data to the middleware, and any event subscribers use the middiles?
Also also, I think the game server just mainly handle game server things. It probably shouldn't handle things such as IoT and non-game web requests.
any mod that can communicate is a vulnerability, yes, but the community and BI has been exceedingly efficient at banning people that use it for bad things
My logic is not to allow a remote request to the server, rather the server opens a connection to the api, which allows at will communication, to avoid the polling issues,
I've got bunch of "Unhandled exception" server crash logs,
i'm trying to pinpoint issue
On current 1.6 patch Arma reforger,
When 2 cars frontally collides between each other, sometimes it causes server crash
I was passenger two times in vehicle in that situations
My ai found something useful or its just hallucination?
SCR_FlammableHitZone flammableHitZone = SCR_FlammableHitZone.Cast(GetDefaultHitZone());
Instigator fireInstigator = flammableHitZone.GetFireInstigator(); // <-- CRASH
if (fireInstigator && flammableHitZone && IsOnFire(flamma...
When two cars collide frontally and take damage, the damage system attempts to update the instigator.
This calls ShouldOverrideInstigator.
GetDefaultHitZone() returns a regular HitZone (not always a SCR_FlammableHitZone).
SCR_FlammableHitZone.Cast() returns null.
The vanilla code calls GetFireInstigator() on null before the if guard ever runs.
Result: Server hard-crashes with NULL pointer to instance exactly when the collision processes its damage.
Fix
modded class SCR_VehicleDamageManagerComponent
{
protected override bool ShouldOverrideInstigator(notnull Instigator currentInstigator, notnull Instigator newInstigator)
{
SCR_FlammableHitZone flammableHitZone = SCR_FlammableHitZone.Cast(GetDefaultHitZone());
if (flammableHitZone) // <-- null guard
{
Instigator fireInstigator = flammableHitZone.GetFireInstigator();
if (fireInstigator && IsOnFire(flammableHitZone) && flammableHitZone.GetFireInstigator() != newInstigator)
return false;
}
if (newInstigator.GetInstigatorType() == InstigatorType.INSTIGATOR_NONE)
return false;
return true;
}
}
do you have a minidump file? Don't post it here, but it can have valuable data on what the error line is, I was able to identify an issue with the heli rotor damage manager using a similar methodology
Moment of server freezes then insta crashes after few seconds
ok, i'll try to get them next time
base logs are good, the minidumps only post iirc. on the diag versions like workbench or diag version of the game
How/where do I find these strings?
string editor in workbench. Never found anyone that can display them
Okay. Thank you for confirming. I thought I was just looking in the wrong spot.
Engine is not single threaded
Script is single threaded
But everything else is not
Thats why you have some features that are heavy specifically in cpp
Yeah, that's what I meant - since I assume listening to such events would not be free in script
I don't see why single thread would be a problem?
In Arma 3 we handled messages from extensions, which can be multithreaded, by putting them into a queue, and every frame processing everything thats in the queue.
Should be able to do the same with websocket?
Also for polling repeatedly, take a long at "long-polling", still bad, but not as bad.
How is security solved here?
I don't know how Reforger does it, I plan to implement HTTP API and Websocket into Arma 3. My plan is to enforce preflight-CORS on the requests, to prevent abuse, you can only contact webservers that state they want to be contacted by Arma.
Can't have a game script asking my router to backdoor itself 
Does reforger allow it only on server side?
@storm bobcat There is a tool created by Icebird that lets you see the vanilla stringtable
On pure vanilla 1.6 crashes(0 mods), i hopes that 1.7 fix that issue
Or it might be caused by network
my ural 2 players, all other bots(passengers),
another ural 2 players, all other bots(passengers)
1(moddded)
2026-05-19 10:10:44 (UTC) : Version: 1.6.0.119 - Report Result: - SUCCESS - Crash GUID: 424889a9-0d0b-4567-abd8-0b5eef355ab7
2(pure vanilla game master)(on video)
2026-05-19 12:12:51 (UTC) : Version: 1.6.0.119 - Report Result: - SUCCESS - Crash GUID: e8f906d1-93cb-40c2-9865-2c9174fb111e
Is there an easy way to find what is breaking the autocomplete in a script file (not the plugin)? Last time I had this problem, it was a { in a string, but this time I just cannot find what the problem is, and it is getting annoying to type every variable name out.
God dont mod dayz then… its notepad++
ive had problems when a script gets too big, the autocomplete doesnt work after a certain line, it'll work above it tho
modded class Vehicle {}
Unknown type
Vehicle
modded class BaseVehicle {}
Engine class 'BaseVehicle' cannot be modded.
How am I supposed to mod all the vehicles? I want to add an action to them all.
Does Vehicle inherit BaseVehicle? Try this if so
modded class Vehicle : BaseVehicle {}
Inheritance part on modded gets ignored
Thank you, was unsure about that, have always just added inheritance just incase
This would be great and would help on a lot of surfaces
I agree but u can mitigate in both cases.
Fair enough. Security isnt a strict argument against it.
Still something to keep a sharp eye on though. People are creative
@minor agate is there a trick to see the string table in String Editor so we know what entries like #AR-foo actually say?
No need to tag MarioE, downlosd the string tool by Icebird through the workshop and extract it like i said..
You only need to load that mod once as it exports the readable string table to your profile
BI needs to build it into WB so it's easy and fast to reference when typing it out
its 2026 my guy
we have more than 1 core now
imagine when youre forced to make the next arma game work on ARM based systems
doesnt take much foresight to see the direction everything is heading
so much has changed in just the past 4 years, the rate of advancement in tech\software is outpacing the time needed to make a complete product. by the time you finish something it could potentially be obsolete.
i havent really seen any companies talking about this publicly
all the BI devs should be watching the youtube channel: 'two minute papers'
Feel like you have never written multi-threaded software, or you would not be making such comments. Making Reforger scripts multi-threaded would raise intracatable problems
nope i haven't, but to see the direction of the market, all u gotta do is get out from under that rock
Most mods on the workshop are already vibecoded monstrosities , as much as i'd love to see multi threading for mods i can't even imagine how bad it can get with our 2026 enthusiasts 😭
Two Minute Papers is awesome. Saw a cool paper on there recently called "Fire-X", vibe coded it into a demo (try edge if it dont work on chrome): https://play.unity.com/en/games/53eb2211-e0f0-4d45-b5d6-9b2ab8d5b44e/webuild
its an amazing channel, showing the bleeding edge of computing
Most don’t, for good reason.
It's not big problem if scripts is used only for "scripting" and not for inventing new physics for thousands entities.
Bigger problem in my opinion - we lost scheduler from sqf 🪦
That’s definitely not the case.
Its not about the tech
But illiteracy of the end user with how to handle multi threading
Also I’d like to see some of your mods
Which unfortunately is even problematic for some experienced programmers
If you have worked on multi threaded systems in considerably big projects with multiple developers you would very easily find yourself into the pains and struggles of trying to keep multithreading actually be useful
if people weren't yoinking my code left and right i would've shared it with you now.
that's completely fine if we disagree but if you want to visit a haunted house i'd suggest you sort the workshop by new
Now imagine that on with modding. All the random modders that might or might not know anything about this topic
Using it freely
make multi threading an unlocked feature frfr
If you do not find yourself with data races or hard crashes, you will find yourself with managing the main loop with the other logic be more time consuming and sluggish than if it was single threaded environment
Multi threading is not a silver bullet for "free performance". If badly used it can very easily be worse for it
reforger is already a veritable helter Skelter of data races... still awaiting
Anything that needs to be multithreaded in AR and Enf is already like that
Big majority of engine and game is not done in scripts.
And the part of the game done in CPP has access to multithreading and is using it
cpu architecture is peaking currently, we cannot make transistors any smaller than they currently are.
it might mean that we are hitting the ceiling for single core performance, and the only answer now is to add more cores.
this is probably the main limiting factor to single threaded systems, is the ceiling has arrived, now its about making the software as efficient as possible, and once that is achieved theres no other route than to multithread that system.
I dont think you understand these things 😅
Research it, its good topic but its not what you are thinking it is
honest question, why do you think most games limit server size to 128?
Even comms between cores is slower for many things
We’re in the same place we were 10 years ago tbh, people think we are reaching the end of the rope and something new is around the corner. GAA just went production, 2D channels are promising and in R&D. Architecture is literally maximizing the work per transistor, not the physical size.
That alone if used badly is worse than single threaded impl of something
Multithreading would not solve this
thats not what im getting at, i genuinely want to know what you think is the limiting factor
why have very very few games ever gone above that 128 mark?
The problem is not multithreading
If that is what you will try to point to
data-per-player
Games are more full of resources, hardware is maxed. But this wont be solved by multithreading
at 128 players thats half a gig per second depending on the game, some less, some more
1 thread 128 instances 2-4mb per instance
a system is constrained to its slowest moving part
But how it gets processed and the orchestration behind it, or scheduling if you may
Plues the hardwarwe limits of working with multiple cores
A single core well used is better than randomly used cores
And data between cores does not pass around free
For games you need things in specific times, in order
Schedules, blocked, resumed
At the end it has to land on main loop, that is main thread
Many processes will have dependencies
Which block each other
Which causes a halt to everything else
Then it becomes worse
Its not that common when you will have processes in a game that do not depend on each other
so in your opinion where is the limitation, physical cpu design? OS design?
im learning here.
Trying to max out games nowdays, and developers not developing the game with low level spexs
Yes but multithreading
Games done by engines that abstract things bring problems here and there
But what if two cores instead of 1, thats double the fps
lol bruh
You will see older games from old days using hardware very smart
But that part of game development is not too common and used anymore
yeah its insane sometimes. i loaded up deadspace 3 and got 4000 fps on modern hardware(not kidding)
If you use 10 cores maybe you can have lumen
Its just development trends and pushes in marketing
Somehow reminds me of inverse square root magic in quake 3
You need to develop games fast, you now have time to update later on
People on n64 or so before could not do that
For example
game devs in the 90s were pioneers of their craft
There is more leeway on the market now, and in development trends
its crazy the lengths they went to to get their games small enough to fit on a disc, while also being a complete game with no way of ever patching it
today, lots of games are 100gb+
It reminded me of that too 😅
But there are other examples bigger than that
But that is like the popularized example
It was funny because it was magic, but SSE outperformed it (the algorithm) on chips released in 1999 already
But respect for coming up with it
Cornered desperate developers are something else
Everything? I don't know how true this is, but I was under the impression that e. g. reliance of lots of AI behavior on that one script thread was still quite a limitation, and that at one point it was tried to avoid this? It's been a while though so I might be misremembering.
Tbh the game slows down from other things before AI brain becomes the bottleneck
so the shit part about using multithreading is synchronizing them all?
That really depends on the gamemode
Misuse of calllater and script invokers is a good example of the most common thing that blocks ofher threads in AR 😅
The global calllater is bad
Individual ones are fine
Ok but I will use global calllater to tick my own callqueue 
It always freezes the replication threads
wdym ?
Calllater and scriptinvoker misusage ususlly cause an explosion in calls
When badly used by own game plus mods
And this freezes the main thread
Which freezes the replication threads because they depend on it
like i create my own callqueue, calllater for many various reasons, each one of them freeze rep thread or you are talking about using calllater in some cases/events or whatever that it makes replication wait for it
ha ye ok
so using it in wrong places basically right ?
?
The problem with call later we have is with people using the one in game class for everything
They should create their own and tick it
At some point it ends up with huge list of things to tick and check
arf ok koth r doing this since many montheses since when you said sometimes, because of mods, callqueue explode
And the whole thing when processing uses a main mutex that lasts until finishing it
i thought i could find another way to fix more replication issues in koth
yep make sens
So anything relying on scripts or things relying directly or indirectly from scripts has to wait
Its a tool, the bad part is just misusing it
Its not a savior tool. It has good and bad usages
What problems are you experiencing?
about ~110+ players, replication stalls start to hit hard
As in, you get the rpl error that specifically says STALL in logs?
but afaik and talk with arkensor, its more an engine network/gamemode issues (everyone being in same bubble network constantly spawning, shooting ect)
its way better than a year ago tho we could not go past 80ish players
That error gets shown when rpl system finds itself in a very corrupted state that it stops itself. And then crash the game
It can be caused by scripts. Specislly if you are dealing with codecs and so.
i track disconnection reasons and we had 5 to 10 to 20 to 40 players getting disconnect from server
The more players, the more the error can corrupt the state
Does it happen only with your mod?
pretty sure i can just bring a koth reforged vanilla only server on a beauregard scenario, make it 128slot and players will get stalls issues
Can you share me the source of the project?. I can take a peek right now
sure, share github nickname ?
When thread execution docs? You're just casually dropping straight ball knowledge rn Mario
I will get to pc and send you a dm
How expensive would a check like this be to run every frame (the player wouldn't be touching his game, just watching it atp)
m_targetWeaponMgr = m_targetEntity.GetWeaponManager();
if(m_targetWeaponMgr)
{
m_targetSightComp = m_targetWeaponMgr.GetCurrentSights();
}
Currently the way i have it is that i have this if stament before
if(!m_isTargetAiming && isPlayerAiming)
to basically only set m_targetSightComp when the player aim in/out but i want to now check for scope switch and i'm wondering wether i can run the check every frame or like every 2 seconds ?
Does anyone know if it's possible to change the report of a rifle depending on the ammo fired? I am trying to add subsonic rounds, and for the bullets configuration i can just remove the supersonic Crack audio, but I can't find anything in the config to change the actual report depending on ammo type. Im assuming its either a config or a script solution but I've got no clue
isn't the bullet crack noise handled by bullet velocity ?
i think you'd have to make your bullet go slower than the speed of sound if you want it to be "subsonic"
i could be wrong
Im more meaning the report of the rifle, since I believe that supersonic crack is also played when firing, not just from the bullet?
Ive edited my rounds to be subsonic upon leaving the barrel, but the supersonic crack still plays
Id like it to play for supersonic rounds, but not play for subsonic
Its easy to change for downrange, but from the rifle is what I'm having issues with
So for example, I fire with a subsonic. The observer hears the subsonic audio as the bullet goes past, but the rifle still plays the firing audio as if its still firing something supersonic. I could go in and change the audio for firing to not include that crack, but then it wouldn't play when firing a supersonic round AFAIK
might wanna ask in the wcs discord modding channel
they toy with guns a lot
Negligible, even per frame
thanks


