Jump to content
  1. Gen0cide


  • Similar Content

    • By Thug
      I would like to learn how to make a simple custom AI mission. Is there any one out there willing to help.
    • By hogscraper
      Updated Dec 22nd: https://github.com/hogscraper/A3_EPOCH_Headless_Client   I have created a repo on Github with this code to make setting it up a little easier. The repo contains the bare essentials to get this up and running but has a crippled AI system. When I put that in the code below, it was crap and was only intended as a generic stand in so server admins would know how to get other AI mission systems up and running. What I overlooked was the lack of any decent ones being out when I first posted this. To force the issue I went ahead and deleted most of what was in the AI_Init code so it still spawns a few AI, but that's it. I want to take the focus in this thread from the AI aspect and stay with just the HC stuff. This repo is still being put together, but it has what you need to reference so you can get your server up and running a little easier.     Updated Dec 10th: I added a section below on processor affinity and how to set this up with multiple instances of Arma. thanks for the heads up axeman!   This isn't for the light of heart. If you feel confident in your ability to follow simple instructions, hopefully this tutorial will help you out. If you get to a point and have to ask yourself, "well how do I do that?" you need to use google. There are tons of tutorials out there on any instruction I give below and they are out of the scope of this tutorial. I had a friend and fellow server admin run through this on a basic A3 and Epoch install on his box and he was able to get it up and running no problems, (other than the BEFilters mentioned below).   SECTION 1: SETTING UP A HEADLESS CLIENT:   This has become so much easier lately as BI have recently included HC tech inside A3. It really is a much easier process than it ever has been in the past. Because of this, I will be redirecting you to a tutorial they made to get you started. You can use wherever you find an ip address, (xxx.xxx.xxx.xxx on the tutorial page), if your sever is local to  the headless client. The best part is, you no longer need another cd key for a headless client in A3. Read this, and when you are done, I will fill in the blanks with what's relevant to Epoch: https://community.bistudio.com/wiki/Arma_3_Headless_Client   At this point you will have an edited mission.sqm with a new unit called headlesshogs_01, (or whatever you called yours). I added a number to my name so I have the option to create more than one at a later date if I need it. You can reference your headless client later to add even more to it by referencing the name you gave it. In most cases, AI systems are built so you only  need to fire and forget but its worth noting if you wish to take this concept further.   Create a new text file in your A3 base folder and rename it Headless_Client_01.bat Inside that file paste this line:   arma3server.exe -client -connect= -mod="@epoch";   This bat file will create a new, dedicated client and connect it to your server, joining the first free headless client slot it can find. If you use a master bat file to run your server you will want to have this code called after BEC has loaded. If you are running them manually, the order is Redis-(wait for load to complete) server launch BEC launch(waits on its own for server launch to complete before running) HC launch(best to wait until BEC is completely loaded before running)     Processor Affinity:   I'm a Windows user so these instructions are valid for that system. Before you begin, you should have some background knowledge about the processor you are running your server on. How many cores it has, which cores if any are hyperthreading cores, etc. This information will help you determine which cores you want to  run which processes so that you have a better idea on what to substitute for the generic values in this tutorial.   When you run multiple instances of any Arma product on the same box, its always best to assign each process to a separate cpu core. This can help get ahead of bottlenecks when the server and the HC are both running code at the same time. You can manually adjust these values through Task Manager but its much easier to just add the information directly to your batch files. If you edit your batch file you only need to edit the beginning of the line:   start /AFFINITY # "arma3server.exe" ... the rest of your start parameters as they already are   The # above are the cpu cores you want to utilize but its a little tricky determining, as its a hex value of a binary number. Your processors need to be arranged with the highest number first. So eight cores would be written down as 87654321 and four cores would be 4321   Once you have written the number of cores you have in that format you will need to create a binary number using the cores you want to run on. If we wanted this process to use cores 8,6,4 and 2 we would utilize the binary like:   87654321 10101010   Just mark a 1 under any core number you want to use and a zero under any that you don't. This new binary number needs to be converted into a hexadecimal value. A quick way to do that is open windows calculator. Click View and choose   Programmer   Click the radio button for Bin, (putting the calculator into binary mode), and enter the number you obtained above. After you hit the last digit you can click the radio button for Hex and it will convert the number. So, for the above 10101010 we would get AA as the hex value to substitute for #:   start /AFFINITY AA arma3server.exe  ...  the rest of your start parameters as they already are   With the server assigned to the cores we wanted the headless client can be done the same way. If the HC only needs to be run on core 3,  87654321 00000100   You get a hex value of 4 and our HC batch line becomes:   start /AFFINITY 4 arma3server.exe  ...  the rest of your start parameters as they already are   You can verify that the OS is running the process on the correct cores by opening Task Manager, right click the process in question and choose Set Affinity. The list it shows you has them ordered with cpu0, (first core) at the top and the list descending to the last core.   Ensure you are using values that you determine are proper for you setup. On my test machine I run the server on  4,3 and 2 and the HC on 1 but haven't noticed much difference whether I give each process one, two or three cpus. This is part of the tutorial where you will need to look at what you have and figure out what's going to work best for you.   Now we have a headless client that will connect to our server so we need to create an init.sqf to handle the HC. Head into your MPMissions folder and find which mission you are calling from within your config.cfg. The default is Epoch.Altis.pbo. You will need to depbo the file and it will create a folder called epoch.Altis with a mission.sqm and a description.ext inside. If you edit the mission.sqm and it is code instead of plain text you depbo'd the file  incorrectly. PBO manager will do this incorrectly so you need Mikero's tools to get a proper unpbo in many cases.   In your new mission folder, you need to create a file named init.sqf. Inside that file place: if !(hasInterface or isServer) then {   HeadlessVariable = true;   publicVariable "HeadlessVariable"; execVm "AI_Init.sqf"; };   "GlobalHint" addPublicVariableEventHandler { private ["_GHint"]; _GHint = _this select 1; hint parseText format["%1", _GHint]; };   The called file above, (AI_Init.sqf), is whatever init file you use to get your AI started. At this point, your server will  have a headless client that will run any AI scripts you would like. The added bit is so the headless client can communicate with the players and let them know when a new AO spawns. The added benefit to this system is that, if the headless client fails to connect, it will continue to retry and the AI system will spawn whenever it finally joins the server. I didn't want the server to run the code as I have the HC for a lot more than one mission so I set this up with the thought in mind that I wanted as much as possible to be removed from the server's  overhead.   While following this section, you may get kicked when you connect as client. There are issues with Arma3 and how it creates the current mp mission in your appdata folder so that if your headless client connects, the next client from that same machine to connect may try to overwrite the current_mission.pbo. Since that will fail it will kick you back to  the server select screen. All you have to do is reconnect. Once connected/disconnected it will assume you already downloaded the mission and will no longer try to re-write the file, allowing your client to connect.   SECTION 2: GETTING AI TO SPAWN   UPDATE: From user Defent, it appears that the Vehicle_Simulation.FSM is deleting any vehicle, (AI included), that was not spawned by a logged in client. That likely means that this code will not work running solely on the server. I have personally verified that when I run this code exactly as written from a headless client it works fine, but when ran by the server it deletes the ai within seconds. We will have to wait on a workaround from the Epoch devs that will allow us to move this code server side in order to do that. I will update this again once we figure out what array or variables are protecting server spawned vehicles.   For this part, I've seen a lot of posts about people having issues with ai being deleted. I had trouble with this as well until I changed a lot of the variables. Certain models will be deleted but I found that creating soldiers and removing their uniform seems to allow them to stick around. I am creating a global array, placing all the ai into it and making that a  public variable. I had originally did this because I was using modified epoch code in a separate pbo on the server but  didn't feel it was appropriate to teach that route since the current restrictions say releasing that modified code is bad. I mention this because I really do not know what affects the ai during cleanup exactly, but it seems to have multiple parts. Certain  models I spawn seem to instantly disappear while others will stick around for a few seconds, fire their guns, then disappear. Since I don't know what exactly fixed the issue I wanted to post the code I am using as it stands right now and maybe we can  figure it out as a community. What I am posting works for me, on a private server, but I wanted some testing done.   I made all of the ai in a group from side RESISTANCE and made all of my triggers pick up side GUE. This mission will make an  AO, somewhere on the map, create a red marker and let all players know. After the mission starts, if thirty minutes goes by and there are still bandits in the AO, the AO ends with a hint saying they took off and the marker will turn yellow.  120 seconds later another AO will picked randomly from the list and continue. If players hunt down the bandits and kill them  all before the thirty minute timer runs out, the AO marker turns green and an ammo box spawns that will last ten minutes before it it deleted. 120 seconds later another AO will be chosen and so on. Each AO that is used is removed from the list and if the list runs through all ten missions it will reset to full and start over.       Inside the mission folder you created for init.sqf you need to make another file called AI_Init.sqf and inside that file place all of the spoiler code inside.
        The above code has positions that are relevant to a custom map I am working are and the AO's themselves have had their text chopped down to something generic. Since this is part of a much larger mission system I am working on I wanted to make a generic version that you could tailor to your own tastes. Pretty much anything you could want just needs to be added to the appropriate section or you could even work out DZMS. I previously got permission from Vampire to modify and use his mission system in my larger A3 mod and it has been working  as well, along side this system, and works the same if I spawn them the same way as this.   One thing I didn't mention above, are BE filters. You will need to take some time and work out which filters you need to edit. I currently have a dozen things I am working on and I honestly can't remember which ones I had to adjust to make this work. The BEC console window will tell you what rule you broke, and that will tell you what changes you  need to make to your filters. Since any AI system you use will likely have much different code, there's no way of knowing which filters will be affected anyways until you test it out. The above mission is more of a basic, to get  started, mission system and really should be used to figure out how to make your own or how to edit existing systems to work with Epoch. Be warned, though, that if you chose to retrofit an A2 mission there will be a ton of things you need to edit to get everything working happily with A3, (like ai skins and loudouts, positions, vehicles, etc).   As I said before, I have tested this many times on my test server and everything seems to be working just fine, but if its not for you guys, let's figure out what's going on! The only issue I have run into is that sometimes the  AI wanders out of the AO. This will prompt the same reaction as killing all of the AI and a reward will spawn as soon as the trigger sees no bandits. I am currently working on things for the ai to do other than a random patrol and am also looking at randomizing their gear and skills and fixing the wandering issue.  If you have a better way, just let me know and I'll gladly update the top of this post! 
  • Advertisement
  • Supporters
  • Discord

  • Create New...