Jump to content

doc. caliban

  • Content Count

  • Joined

  • Last visited

  • Medals

Everything posted by doc. caliban

  1. Hello. Ace Map Gestures. Sometimes they fail to work for me during a mission while the other two players can see each other's. What kind of troubleshooting can I do? Is there a way to reinitialize the feature in the debug window? -Doc
  2. I can see how that would get messed up. I hadn't thought about garrisoned units being spawned back into incorrect positions. On the topic of "FORTIFY", I've stopped using it because I feel that the garrisoning functionality is pretty bad. I think that a rewrite of the building / position detection is badly needed. I'd say the biggest issues for me are that they miss a ton of buildings, and that they end up underneath elevated structures, as though AGL is not taken into account for the position they are supposed to move to. I may look at the code from other mods that do a better job with that and try to adapt it to Gaia. I really miss being able to have AI troops deal with that on their own. Part of the reason my zone automation leaves undefined groups alone is that I also disallow Gaia from using groups that aren't hers, and I use undefined groups as manually garrisoned groups. I don't like having to do that as it removes the dynamic and somewhat random positioning of the units, but I gave up on the built in function.
  3. Hello. ACE Movement. Does it do anything other than let you climb onto H-barriers? It seems like it's more just a button that generates a message saying, "Can't climb here". I'd been hoping for something more along the lines of the old Enhanced Movement mod. Am I using it incorrectly? -Doc
  4. Is Gaia partially broken due to an Arma update? This is the behavior I see now, and I believe that it is new. Test mission with no mods loaded. Zone 1 Group 1 "MOVE" Group 2 "NOFOLLOW" I engage the groups until both are aware of my location. Result: Both groups fire on me. I move out of view of both groups. Result: Both groups send everyone except for the Group Leader out of the zone to look for me. Expected behavior: All members of the NOFOLLOW group should stay in Zone 1. All members of the MOVE group should be sent after me. Basically, everything works as expected until contact is made. Then the zone assignments don't seem to be handled properly anymore.
  5. Thanks! I like the renaming of the commands but have been too lazy to bother yet. Do you have a screenshot of your UI? I'd love to see it. As for versions of Gaia, it doesn't look like there is anything newer than late 2017... is that the case? BTW, I am still having the issue with the new version where "nofollow" groups leave their zones once they lose line of sight of me. I'm going to do some proper testing and post a new reply with my results. I haven't had any issues with the cache system that I'm aware of. I was using ZBE Cache for a while but stopped because the Gaia one seemed fine. We usually only play with 2-4 players, but the missions often have well over 100 AI units... sometimes almost double that. It allows me to lay out a long, multi-session mission that way, and the cache keeps it from having undue impact on performance. (One of my guys has a lower-spec machine, so I try to conserve everywhere that I can.) That's why I adjust the mission view distance to something appropriate for the map and mission, and why I have the cache distance automatically fine-tune itself to that. The zone automation that I have is 100% compatible with using the normal method. If a group does not have the "gaiaCommand" variable set, the automation completely ignores it. Thus, you can have a mix of both if need be. Here's my current method and code for zone automation. Place a zone (or all of them) and name them however you want. Nest them as much as you want to. (I name mine gz_x because my marker alpha automation looks for "gz".) Place groups in the desired zones (it keys off of the Group Leader position) with one of the following lines in each Group Leader's Init field (use your custom command names): (group this) setVariable ["gaiaCommand", "NOFOLLOW", false]; (group this) setVariable ["gaiaCommand", "MOVE", false]; (group this) setVariable ["gaiaCommand", "FORTIFY", false]; Do not run gaia\gaia_init.sqf from your init.sqf. Use execVM "gaia\gaia.sqf" instead, and create that file with the following content: if (isServer ) then { // FUNCTION TO DETERMINE THE SIZE OF AN AREA-TYPE MARKER. MarkerArea = { switch (markerShape _this) do { case "RECTANGLE": {getMarkerSize _this params ["_msw", "_msh"]; _msw * _msh}; case "ELLIPSE": {getMarkerSize _this params ["_msw", "_msh"]; _msw * _msh * 0.25 * pi}; default {0} } }; // CREATE A LIST OF ALL AREA-TYPE MARKERS ARRANGED FROM SMALLEST TO LARGEST. allMarkersByArea = [allMapMarkers,[],{_x call MarkerArea},"ASCEND"] call BIS_fnc_sortBy; // FUNCTION TO DETERMINE THE SMALLEST AREA MARKER THAT AN OBJECT IS WITHIN. getGaiaZone = { {if (_this inArea _x) exitWith {_x}; ""} forEach allMarkersByArea}; // ASSIGN ZONE AND ROLE TO EACH GROUP THAT HAS THE "gaiaCommand" VARIABLE. { if (!isNil {_x getVariable "gaiaCommand"}) then { private _unit = leader _x; private _zone = _unit call getGaiaZone; private _command = _x getVariable "gaiaCommand"; _x setVariable ["GAIA_ZONE_INTEND",[_zone, _command], false]; _x setVariable ["gaiaCommand", nil]; } } forEach allGroups; // Initialize Gaia call compile preprocessfile "gaia\gaia_init.sqf"; }; Now when you start the mission, that file will find all of the groups with "gaiaCommand", determine their intended zones, and issue the actual Gaia variable with zone and order assignments. Any groups that are manually assigned, or not assigned at all, will be left as is. Then Gaia launches and off you go. Here's the code I put in initServer.sqf to automatically hide the Gaia zones. I got tired of changing the alpha on them all the time for editing and hiding them in missions. Now I just put them in a layer and toggle the viability when needed for editing, and this makes sure they never show up on the map in a mission. If you place this in init.sqf, the zones will be visible on the MP pre-mission briefing map, thus why I use initSever. // HIDE GAIA ZONE AREA MARKERS { if (_x find "gz" == 0) then { format ["%1",_x] setMarkerAlpha 0; }; } forEach allMapMarkers;
  6. I thought I'd share some of the changes I've made to this awesome mod. Most of it is geared toward making mission creation even easier. There are a few AI tweaks that we wanted for our small coop group. Feedback is welcome! MISSION CREATION Gaia zones are automatically determined based on the smallest zone marker occupied by the Group Leader. Reason: Instead of manually entering the zone name in each Group Leader's Init field, I simply set a variable that specifies the command (move, nofollow, fortify), and use a function that automatically detects which zone the Group Leader is in and then passes the final Gaia zone/order variable to the Group. If the Group Leader is in multiple zones (nested) the Group is assigned to the smallest zone occupied. Once your zones are all laid out, you can simply copy-paste "move", "nofollow", and "fortify" groups into whichever zones you want and the rest is taken care of automatically. Instead of the original Gaia Group Leader Init line, add one of the following 3 lines for the desired functionality. (group this) setVariable ["gaiaCommand", "NOFOLLOW", false]; (group this) setVariable ["gaiaCommand", "MOVE", false]; (group this) setVariable ["gaiaCommand", "FORTIFY", false]; Groups in which the Leader does not have gaiaCommand defined are left alone in case you want to use them for non-Gaia things. (Assuming you have MCC_GAIA_ATTACKS_FOR_NONGAIA set to false as well.) You can still use the old method if and when you wish: (group this) setVariable ["GAIA_ZONE_INTEND",["zoneMarkerName", "MOVE" or "NOFOLLOW" or "FORTIFY"], false]; Gaia zone area markers are automatically hidden during mission startup. Reason: This allows you to simply add your zone markers to a layer that you can toggle visibility on/off while editing, but you don't have to remember to set their alpha to 0 before playing the mission. This happens in initServer.sqf so that the markers are also hidden on the initial MP mission map. Level 1 cache distance (all units in the group except the leader) is dynamically set to the mission view distance -100m, or 1,500m; whichever is smallest. The max range is user definable. Reason: Performance and ease of configuration. In most cases it makes no sense to have the whole group uncached beyond the view distance. This way you don't have to manually update the cache distance every time you create a mission with a view distance below the user defined maximum because it's always set to the optimal distance. I take 100m off of the view distance for the cache value since you aren't typically moving and looking through a scope into the nearly opaque last dozens of meters of the view distance anyway. Level 2 cache distance (cache the group leader as well) is user definable as either a multiplier or a fixed additional distance. Reason: This gives you more control over the caching. AI BEHAVIOR A random (60-480 seconds) timeout for mortar and artillery missions is generated between each fire mission. Reason: We didn't want a known safety window between fire missions. AI units will check to see if they are likely inside of a building before they pop smoke. Reason: Units kept giving their positions away by (uselessly) popping smoke inside the small buildings they were hiding in. Reduced the waypoint random timeout range by half. Reason: We felt that the infantry groups and helicopters were sitting ducks for too long at each waypoint.
  7. @strider42, any thoughts on this? With the newer version, Gaia is sending "nofollow" and "garrison" groups out of their zone like "move" groups. Before they have a target all 3 groups stay within the zone, but once there's action, they all leave the zone. -Doc EDIT: It's working properly now. I'm not sure what why that was happening but obviously an error on my part. EDIT: Dang it, it's doing it again. I have two groups, both "nofollow", in a zone. They stay in the zone as long as they can see me and shoot at me. As soon as I move out of sight, they both leave the zone and come after me.
  8. If anyone is interested in preventing the AI from popping smoke inside of buildings, this is how I managed it. It's not fancy or perfect, but it works. I did it because I was tired of AI units giving away their position to me by popping smoke in little buildings that I hadn't searched yet. POP! Fshhhhhhhh.... smoke billowing through a wall. "I'm going to guess that there is a bad guy inside of that building over there." Open up \gaia\functions\control\fn_issueOrders.sqf Search for "go smoke it". You will find this section: //did we have more then 20% loss? go smoke it if ((_x getVariable ["GAIA_PreviousPoints",1])>(_x getVariable ["GAIA_points",1])) then { if (alive leader _x) then {"SmokeShell" createVehicle (position leader _x);}; }; There is a garrison related GAIA function called gaia_fnc_indoors.sqf that I originally employed, but it checks for something over the unit's head (like a ceiling) to determine if the unit is indoors. The problem with that is it gives false positives when standing under trees, certain bushes, etc. It would be good for using before firing a flare, though! My solution was simply to find the nearest building and make sure the unit is more than 10m from it. I came up with that number by checking several buildings and determining that the far interior corners were usually around 8m max from the building position. The unit may end up being inside of a larger building, or several meters away from a smaller one, but it's good enough for my purposes. I could dynamically set the minimum distance based on the building's hypotenuse, but I could not find a way to get the dimensions of the building to use in calculating that. Here's my change: //Did we have more than 20% loss? Are we outdoors? Go smoke it! if ((_x getVariable ["GAIA_PreviousPoints",1])>(_x getVariable ["GAIA_points",1])) then { _nearestBuilding = nearestBuilding (position leader _x); if ((alive leader _x) && ((position leader _x) distance _nearestBuilding > 10))then { "SmokeShell" createVehicle (position leader _x); }; }; It's a small thing, but it happens a lot so it seemed worth figuring out.
  9. @strider42 Thank you! Is the linked-to version "stand alone" in its functionality? Regardless, I'll grab it and have a look. Thanks again, -Doc EDIT: I made some changes to the gaia init file to reflect the way I use it as a standalone and auto-detect and assign zones. So far it's working perfectly. Once I know for sure there aren't any bugs in how I'm using it, I'll post a sample mission here that contains my zone automation and explain how it works.
  10. Interesting, strider42. I wonder what version of GAIA I'm using... this is my line 38, and it does have a matching function: { _dummy= [_group,_TargetPos] call fnc_DoAttackMechInf;}; The header of the file says, :"spirit 14-1-2014". I love GAIA and have made many little usability tweaks, like automated zone detection and assignment, cache distance based on mission view distance, units checking to see if they are inside of a building before popping smoke, reduced the frequency at which GAIA checks in on all the groups by half (every 1 second instead of every half second), etc. Probably some other small things that I don't recall at the moment. I looked at the latest GAIA code from MCC and it mostly looks the same as the old stand alone version that I use. I figured I'd do some updating by picking things from MCC but Winmerge found almost no differences, though I haven't done a comprehensive comparison yet. I'd say that my only frustration with the mod is the transport system. Either I am using it incorrectly, or it rarely moves troops around. -Doc p.s. I get a kick out the the comments in the scripts.
  11. doc. caliban

    SERVERKEY help

    I'm running into the same issue. The mod works fine, so I assume there are no code errors. I've signed it in the past but have edited several of the scripts since then and swapped one sound file out, so I need to sign it again. This time it fails. Now I can't publish the mod. The lack of error logging is tragic. I've done some testing. If I re-sign the older pbo it signs fine. If I change anything at all in the pbo, it will fail to sign it after that. To say that I'm sick of troubleshooting finicky crap like this is an understatement.
  12. I'm working on a shotgun mod that has custom buckshot and an explosive round that emulates the FRAG12. The problem I'm seeing is that they both destroy destructible buildings, which makes no sense. The frag round only does a tiny fraction of what a vanilla 40mm does and shouldn't be destroying buildings either. Something in my config must be wrong, and I was trying to keep the damage toned down to realistic levels as well. One factor I have a hard time with is "caliber" where 1 is supposedly the penetration of a 7.62mm round. I'm not so much worried about my specs in general though. I really need to end up with double-ought that doesn't take a control tower down after a couple dozen shots. lol Any feedback about the config at all is welcome though. Here's what I've got: class CfgAmmo { class SubmunitionBase; class ShotgunBase; class BulletBase; class B_12Gauge_00Buck: ShotgunBase { simulation="shotSpread"; hit=2; indirectHit=0; indirectHitRange=0; cartridge="FxCartridge_65_caseless"; cost=2; typicalSpeed=404; visibleFire=4; audibleFire=8; airFriction=-0.008; caliber=0.3; }; class B_12Gauge_FRAG12: BulletBase { hit=42; indirectHit=1; indirectHitRange=1; suppressionRadiusHit=5; explosive=0.02; caliber=0.3; typicalSpeed=274.3; airFriction=-0.008; cartridge="FxCartridge_65_caseless"; deflecting=3; }; };
  13. Hello. I'm using invisible markers and the Link > Random Start option to randomly place a hostage in one of several locations. The problem I am having is that markers have no Z axis, so there is no way to place one in a building who's floor isn't pretty much at ground level. Are there any clever workarounds that would let me randomly spawn my hostage in a room on the second floor of a building? I even have problems placing them on the ground level floor of a building if the surface of the floor is very far above the ground itself. Thanks, -Doc EDIT: This is what I've come up with so far. I place the unit where I want it in a building and use the Log menu option of copying the location to the clipboard. I then paste that location array into an array. I add as many position arrays as I want. I then use that array or position arrays in the unit's init field: _array = [[3536.25,19998.9,3.78328],[3533.76,19999.2,3.77739],[3536.17,19995.6,3.80299]]; _hostagePos = selectRandom _array; this setPos _hostagePos;
  14. doc. caliban

    CBA - Community Base Addons - ARMA 3

    Requesting help with adding and removing event handlers. When I add an EH in the debug console in the game like this, I get a return number in the console as expected: ["test", {systemChat str _this}] call CBA_fnc_addEventHandler; Return window shows a number. If I add the _id = as per the official example, so that I can then use _id to remove the EH, the debug console shows no return number. _id = ["test", {systemChat str _this}] call CBA_fnc_addEventHandler; Return window shows nothing. Using hint to show the value of _id comes back blank. Because of this, I cannot remove the EH because the ID number is required. Note: If don't add _id = and use the returned number in the remove function, everything works. What am I doing incorrectly? Thanks!
  15. Going nuts with the lack of clear documentation on this. The EH fires when a player fires a weapon. It works fine. The EH has several parameters, one of which is the ammo type. Q: Does the EH fire every time a player fires and returns all the parameters as variables that I can then use in the code block? or Q: Do I set one of the parameters to the ammo class name that I want and the EH only fires if the player fires using the specific ammo class? So basically I have no idea if the parameters are generated by the EH or if they are things I define for the EH to use to determine if it fires or not. I've wasted way too much time screwing around trying to work it out on my own. Thanks! -Doc
  16. Can someone help me with using one of the ACE event handlers? <snip> I got it working!
  17. Hello. I'm not sure which subforum this belongs in, but it's related to my personal mod, so I'll put it here. The rifle I primarily use in my mod can fire both subsonic and standard ammo. Currently, to change ammo types I have to either use the action menu (space, scroll down to "reload with whatever", and hit space again), or do it in the inventory by dragging a mag of the desired type to the weapon. I would LOVE a ways to bind this to a keybind like CTR-R for reloading but use the other ammo type. Ideas?
  18. Hello. During a MP mission, I am wanting to run a block of code when a certain magazine is fired from, but only once. Scenario: My players use a couple of weapons that can fire both standard and subsonic ammo. I want to switch OPFOR from SAFE to AWARE if a non-subsonic round is fired. I know the code for making the switch to AWARE, so I'm only looking for a solution to triggering it. I was looking at the FiredMan EH but I'd have to attach it to each player, and the code would need to then remove the EH from all players when the EH fires the first time. That seems overly complicated. Using a trigger or mission-level EH would be simpler, and have it only run on the server would be ideal. What would be a clean, simple solution for this? The trigger can be based on the magazine or ammo class name. Thanks! -Doc
  19. I have a portable generator and 4 work lights in a location. I want the lights to go out if the generator is shot. This kills the lights: private _lamps = nearestObjects [generator, ["Lamps_base_F"], 50]; { for "_i" from 0 to count getAllHitPointsDamage _x -1 do { _x setHitIndex [_i, 0.97]; }; } forEach _lamps; I want to use the "hit" event handler or a trigger to run that code when the generator is shot. I'd like it to be as few moving parts as possible, like if the whole thing could be contained in the generator's init, I have so many other things I'm doing with the mission that I'm losing productive time trying to keep figuring this one out on my own. Any help is appreciated! -Doc OK, figured out where to place the code in the EH. Seems obvious now, but I've never used one before. Place this in the generator's init field, give the generator the variable name "generator", and set the distance to whatever you want. The work lights in that range will go out. this addeventhandler ["hitPart", { _lamps = nearestObjects [generator, ["Lamps_base_F"], 50]; { for "_i" from 0 to count getAllHitPointsDamage _x -1 do { _x setHitIndex [_i, 0.97]; }; } forEach _lamps; }];
  20. doc. caliban

    Hide yellow object icons in 3d view?

    After using Eden for YEARS I finally discovered the solution to this by accident! If you create a layer and place your entities inside of it, you can hide the entities and their icons by clicking the "Toggle Layer Visibility" button in the lower-right of the left-hand pane. (Entities Pane) It looks like a folder with an eye on it. What I had never noticed is that the button immediately to the left of that one, "Toggle Layer Transformation" (Folder with a lock on it) disables editing of the entities in that folder and hides all the yellow icons while leaving the entities on the map. Perfect!
  21. I have a layer that I can hide which has a ton of trees I've added to the map. I don't want to have to hide them but their yellow indicator icons on the map make a huge mess. Is there a way to disable/hide those in the editor?
  22. I have a custom version of the Nightstalker that I use in a private mod. When using the sight on top of the scope, it zooms in pretty far. I want it to behave like the sight on top of the DMS, which does not zoom in at all. The default config for zoom is: opticsZoomMin=0.25; opticsZoomMax=1.25; opticsZoomInit=0.75; I've tried several variations in the numbers, and have read about the settings in the config reference, but I am just not understanding it properly. Any help would be greatly appreciated!
  23. doc. caliban

    AI Facts & Myths Compilation List

    Great topic! Thank you for all the work you've put into compiling this. Regarding hearing, in my limited testing I don't think that the AI hear the supersonic crack of ammo which is kind of disappointing. I could be wrong, but I've tried firing both supersonic and subsonic ammo from a suppressed weapon past an AI and get no reaction either way. (Definitely close enough for the round to still be supersonic, but far enough that they don't hear the suppressed weapon.) And example would be a subsonic 9mm round from 100m away, and a .338 round out of a suppressed MAR-10 from the same distance. No reaction either way with the rounds going right over their heads. Our little group mod includes custom ammo for 9mm and .45 ACP that is modeled on real life ballistics of subsonic and +P loads, and we use the subsonic when it would be appropriate in a mission to do so. Sadly, the AI don't seem to notice either way. I wonder if an event handler could be used that triggers awareness if an AI unit hears whatever sound file is used for the sonic crack? That would be a great bit of additional realism. -Doc
  24. doc. caliban


    I am trying to give spawned AI bandits more magazines for us to loot. My idea is to use something like this in the right place: _currentMag = currentMagazine _unit; _unit addMagazines [_currentMag, floor(random 6)]; I tried adding it to fn_addWeapon.sqf in ravage.pbo but I get intermittent results, and always some kind of error when the first bandits spawn. Sometimes the bandits have multiple magazines as per my code, but most of the time they have the single reload that they have by default. EDIT: I just tried adding it to spawn_bandits.sqf as well but with no luck. I would like this to apply to both faction AI groups, and to individual renegades. I think that my idea is sound, but I am not implementing it correctly. Suggestions? -Doc SOLVED: I added this to the end of fn_addWeapon.sqf: _magarray = primaryWeaponMagazine _unit; if !(_magarray isEqualTo []) then { _mag = _magarray select 0; _unit addMagazines [_mag, ceil(random 8)]; }else { _magarray = handgunMagazine _unit; if !(_magarray isEqualTo []) then { _mag = _magarray select 0; _unit addMagazines [_mag, ceil(random 8)]; }; }; There may be a better way to do it, but so far this is working perfectly. -Doc
  25. doc. caliban


    Can I add the additional condition of the MP player being within a minimum distance? That way a gunshot down the street won't trigger the enableAI "Move" line. I'd need to add something like {_x distance playableUnit <25} so that the MP player would have to be within 25m AND become a target. Not sure how to do that. Edit: {_this distance _zTarget <50} would probably be simpler. I just don't know how to add it properly... I'm trying various synaxes... Edit 2: I give up for now as the trial and error starts becoming a waste of time. This is what I have and it seems like it should work, but I get an error saying it's missing a ; on the line testing for distance. I've not done any scripting since early 2017 so I don't remember enough to understand where the problem is. sleep .5; { _x disableAI "MOVE"; _x spawn { waitUntil {sleep 1; !isNil {_this getVariable "_zTarget"}}; waitUntil {sleep 1; true {_this distance _zTarget <30}}; _this enableAI "MOVE" }; } forEach units ZedGroup; Would love to solve this on my own, but I've blown over an hour dealing with a syntax error. Not worth it. 😕