Jump to content


  • Content Count

  • Joined

  • Last visited

  • Medals

Community Reputation

24 Excellent

About chris5790

  • Rank
    Private First Class

Profile Information

  • Gender
  • Location

Recent Profile Visitors

620 profile views
  1. chris5790

    GRAD Trenches

    This is intended as Lythium has neither suitable clutter nor would it make sense to camouflage your trench in the desert.
  2. chris5790

    GRAD Trenches

    Sadly it is not possible for us to fix this without big afford. We will try to find the error and submit a pr to ACE. Edit: PR was created and will probably be included in an upcoming ACE version. Edit2: Has been merged and will be included in ACE 3.12.0
  3. chris5790

    GRAD Trenches

    You need an entrenchment tool (which is basically a shovel) in your inventory. On some maps you are not able to place trenches because the ground config is misconfigured. This also applies to Prei Khmaoch Luong for example. But on all other maps listed in the first post it is definitely possible.
  4. chris5790

    GRAD Trenches

    Mainly because it's a PITA doing this. Took some time until there was a (more or less) reliable solution to get the ground texture paths. This could be integrated into ace at a certain point but I need to discuss this with the ACE team as this is not a really clean solution. But hey, at least it works and it looks fancy.
  5. Could you disable the suppression when being in the Zeus interface?
  6. chris5790

    [How To] C# ARMA Extension

    Normally they are documented here: https://community.bistudio.com/wiki/Extensions If not, the general naming rule for the decorated name is for 32 bit: _<functionName>@<argsLength> Args length is the length in bytes. A char pointer is 4 and an int is 4 too so the decorated name should be _RVExtensionVersion@8 I added a sample demo code and some instructions to the BI wiki. I will extend it in the future if new entry points are added or a detailed instruction is needed.
  7. chris5790

    [How To] C# ARMA Extension

    Hi, memory leaking is a general concern when writing an extension in C#. You have to aware of the performance loss compared to a native extension/dll written in C# or C. C# handles this memory garbage with the inbuilt garbage collector which is different to C++ which hasn't one and has to be handled on your own. This also implies that you can't (or shouldn't) affect this garbage collector directly or indirectly. Direct calls to the garbage collector should be prevented when it is possible as this is affecting the whole garbage process and mostly has more negative effects than positive effects. Memory management is a huge topic when developing a C# app/library and can't be handled in a few sentences. There are a lot of techniques that ensure that memory is not leaking somewhere. The problem you will be facing is that a C# extension is going to leak a tiny bit of memory, you can't change this behaviour. When exposing your extension to a native program you have to handle the native types that it is passing to it. This is done by marshalling (the MarshalAs part) which of course consumes memory. The C# garbage collector is build on top of a classification (heap) of memory usage and unused objects: Generation 0: Short-lived objects like temporary variables. Generation 1: The buffer containing objects that survived the first generation. Generation 2: Long-lived objects like static data or big objects. If an object is not used any more it will be marked as unused (disposed) or the garbage collector finds it. It is cycling through the whole memory that is allocated by the process and searches for dead objects that are not referenced any more. Any object that has been found this way goes to the first heap. There it is processed. If it is a generation 2 type it is then moved to the third heap. Any object that survived the first garbage collection process goes to the second heap. There it is processed another time. All objects in the third heap are processed like usual. Such a process results in two different types of memory: freed memory which can be reused by the system and committed memory which can only be reused by the process. In the second case this memory is still used by the application but free for any internal use. You can't manually affect which case is going to be happen. On top there is the LOH which contains any object that is equal or larger than 85,000 bytes. This could be a large array for example when downloading a file via the `WebClient` class (which is definitely not recommended as it results in memory leaks). This LOH is (normally) processed less frequently than the other garbage collections and is btw the only process you can force to run. But in general you shouldn't store big data on the heap (Streams are used to prevent such a heap). Any other process is done when needed. Of course you can force the garbage collector to run now but as I already outlined this is not recommended nor needed. When trying to understand this whole procedure you have to be aware of the general memory usage. The memory usage will rise to a certain level. This is completely normal. If the usage of memory reaches a certain point the garbage collector will intervene and trying to restore memory. If you are more interested into this process you can have a look at this msdn documentation. Be aware, this is a wall of text! tl;dr This behaviour is completely normal. Only if the memory usage climbs a unusual manner you have to intervene and search for a potential leak. Static objects are known for using more memory than others because they are handled differently than normal objects (Generation 2 - shown above). Therefore they will lay in Generation 2 until they are not used any more. I'm quite sure that the memory consumption of your extension is just about some megabytes which is neither much or alarming. There are some simple tips for reducing/managing the resources used by your application on the internet. They begin with simple things like using the StringBuilder for strings that are changing and end with complete high end solutions for smart memory managing. If you face any memory problems after implementing any features do a profiling to check what this is causing. And the leading tip: use a VCS! With it you can go through your changes and find the problem much easier.
  8. chris5790

    [How To] C# ARMA Extension

    As of Arma v1.67 there are some adjustments that have to be made when developing an extension. First of all you have to make sure that the .dll is build with the prefix _x64.dll when the x64 platform is used. You can do this in the Post-Build event with this code IF $(PlatformName) == x64 ( RENAME "$(TargetPath)" "$(TargetName)_x64$(TargetExt)" ) The signature of the entry points are also differing. When using the old RVExtension call you have to adjust the DllImport directive to make sure that the decorated name matches with the x64 version. #if WIN64 [DllExport("RVExtension", CallingConvention = CallingConvention.Winapi)] #else [DllExport("_RVExtension@12", CallingConvention = CallingConvention.Winapi)] #endif public static void RvExtension(StringBuilder output, int outputSize, [MarshalAs(UnmanagedType.LPStr)] string function) When using the new RVExtensionArgs call you have to use this signature #if WIN64 [DllExport("RVExtensionArgs", CallingConvention = CallingConvention.Winapi)] #else [DllExport("_RVExtensionArgs@20", CallingConvention = CallingConvention.Winapi)] #endif public static int RvExtensionArgs(StringBuilder output, int outputSize, [MarshalAs(UnmanagedType.LPStr)] string function, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr, SizeParamIndex = 4)] string[] args, int argCount) The args are passed as a string array and can then be checked and parsed for further use. Please note that the return value is an int which represents a status code that can be defined by yourself.
  9. Indeed it is for a cutscene. However, the player is already in an restrained animation loop so it wouldn't be possible to use a other animation. To be more clearly: The player (and it's fellows) are getting caught by AI and brought to a camp where they get restrained (AmovPercMstpSnonWnonDnon_Ease). Then a cutscene is following in which the player shouldn't be able to turn his character but his camera. Edit: I didn't realized that it is only possible to turn with Shift and Q and E. I just made an KeyDown evh overriding this keys. So this is solved. Thanks for advance.
  10. Hey folks, I'm trying to disable the rotation of a player when moving the mouse, meaning that the unit of the player is looking in the same direction all the time. My first attempt ended up in attaching the player to a Land Clutter Cutter so he can't rotate his unit. However, they are of course not able to rotate or enable their free look. Is there a possibility to enable free look manually or enable free look when a player is attached to something? Otherwise, is there an alternative to attach the player to an object? I thought about overriding the mouse handler but this is not possible. Greetings
  11. Goddamn is 255 not enough? There is no need for more than 200 players... This is just hell playing on servers with more than 150 players. Instead of wasting time on such silly things BI could focus on much more important things like fixing bugs....
  12. chris5790

    Whats happened to this community

    Saying that this only happened after Arma joined Steam is wrong. It's about the casuals joining the Arma community more and more. If started with DayZ back in Arma 2 which was supported by BI itself because they have seen the potential of Arma especially regarding the early DayZ. It was a slight process (and it's still going on) that casuals discovered the "indie" game Arma which was dominated by tactial clans and small groups doing their own missions, creating their own content and just having fun together. Nobody cared about making Arma big because that was not in the interest of them. They wanted to keep everything small and familial, Starting at the time where DayZ was new to Arma. Back there the hype was real - everybody wanted to try out the new mod called DayZ which got into people's mind by online newspapers and gamer portals. Some communities were founded and the small tactial clans grew bigger and bigger. The first fights between server owners and players started and it was all about having the "biggest" server. Back in Arma 2 the limits were at about 90 players - everything above resulted in a server crash after some minutes. After the DayZ hype Arma 3 got released in september 2013. After the alpha most players bought Arma because they expected a "new" DayZ or a new possibility to do the classic tactical stuff. This changed quickly after Tonics release of Altis Life which got popular really fast. Popular youtubers started reviewing the game bringing us the morons we have today in here. The game is casual now. Sadly we have to accept this. I had contact to a lot of stupid people aroung here complaining about everything in Arma without even doing some research. You should keep in mind that BI supports this progress (as they are forced to to keep it popular), just look at the "new" fatigue/stamina system. Concluding it's not all about Steam. But Steam is also a important role in this progress. With Steam it's much easier for the players (and of course also for the developers) to install and maintain the games. It's also easier to distribute your game especially because you don't have to care any more about activation - Steam is doing this for you. Steam is the plattform for the modern game developer. Doing a release without Steam won't work anymore. Is this a bad change? On the one hand: Yes it is. Servers are bashing eatch other, trying to achieve the most players and being casual enough to get the biggest playerbase. Everything is getting more and more commercial and pseudo devs are jumping aroung everywhere stealing stuff others made. I intentional said "stealing" because taking something you don't made and putting this into your "own" mission promoting this as your "own" work is stealing. Everybody can take my work as long as he credits me. On the other hand: No, it's not. More players automatically means that Arma gets more attention which would lead into more attention from BI. The issues mentioned above led me to get inactive in this toxic community unless the "Altis Life" and "Exile" people around here are going away. Same applies to some people aroung here (Sa-Matra, some other devs) because they were breaking the rules of MANW by not publishing the work they did for the contest in a proper open source way to contribute to the community and to encourage people to start developing their own stuff. Seriously, SQF is no advanced math or difficult science. I hope more and more people are getting interested into this. It took me almost half a year to get the appropiate skill to write own stuff which is not total rubbish. Maybe I will come back in Arma 4 (which will never be released so far).
  13. Well then it's much easier to add an MPKilled EVH which would trigger on each PC and can be added on en every machine. This way you would avoid doing a remoteExec.
  14. Well however this is triggered this is bs ay you can't disable rain or fog over a long time without a threaded endless loop...
  15. When I made missions there was always a big fog and rain problem. Even if it was disabled it would come back at least one hour after the mission started.