• Announcements

    • Flosstradamus

      Official Discord   03/15/17

      https://discord.gg/FMkqWpF Click the link above and join our Official Discord!  Chat with developers and get quicker support!
    • Vishpala

      New XM8 Discord Bot   05/15/17

      Our new XM8 Discord Bot will send you notifications about events happening in-game, even if you are not online!  Read about it on the Devblog:  


  • Content count

  • Joined

  • Last visited

Community Reputation

50 Excellent


About BlackheartsGaming

  • Rank

Personal Information

  1. https://community.bistudio.com/wiki/this In Scripts/Functions: The given arguments that were passed by a call, exec, execVM or spawn. For the arguments in scripts executed by mission-made actions or Event Handlers, check addAction and Event Handlers. In Addons' config files: An array with the current object as its first (and only) element. In Addons' custom UserActions: Unit that is activating the action. In Dialogs: An array with the current control as its first (and only) element (only available during runtime). Rough explanation but, in the the script you posted. _this would refer to the variables or objects passed to the script in an exec call. For example: [_player] ExecVM "/scripts/yourscriptname.sqf"; _sessionId = _this select 0; Would be the first element of the array passed starting with 0.
  2. Do you have a list of the bug fixes you made by any chance? I've made a few myself here and there. Would be nice if we could revive this mod and keep it going. Edit: I should look before I speak. I see your changes here. I will look them over. https://github.com/kuplion/A3XAI/commit/0fb9d48990fb78d406c11a717ccc4e7b05ee82f9
  3. Face had tons of plans for this code, but we all know where that went. Shame. Best AI code out there.
  4. Unpack the a3xai.pbo file. Locate the file: \a3xai\compile\A3XAI_unit_events\A3XAI_handleDeathEvent.sqf. Rem out (or remove if you want) the following lines starting around line 52 (ish). if !(isNull _victim) then { //{ // if (_x in A3XAI_launcherTypes) exitWith { // if (_x in (weapons _victim)) then { // _victim removeWeapon _x; // } else { // _launcherItem = _x; // { // if (_launcherItem in weaponCargo _x) exitWith { // deleteVehicle _x; // if (A3XAI_debugLevel > 1) then {diag_log format ["A3XAI Debug: Deleted WeaponHolderSimulated containing launcher %1.",_launcherItem];}; // }; // } forEach ((getPosATL _victim) nearObjects ["WeaponHolderSimulated",10]); // }; // }; //} forEach ((_victim getVariable ["loadout",[[],[]]]) select 0); //{ // if (_forEachIndex > 0) then { // _victim removeMagazines _x; // }; //} forEach ((_victim getVariable ["loadout",[[],[]]]) select 1); if (_vehicle isEqualTo (_unitGroup getVariable ["assignedVehicle",objNull])) then { Profit.
  5. https://community.bistudio.com/wiki/playSound3D Example: playSound3D ["A3\Sounds_F\sfx\blip1.wav", player, false, getPosASL player, 1, 1, 0] Replace the getPosASL player with a coordinate from your mission, say the center of the arty strike. Adjust the last number 0 to be the distance you want the sound to be audible. IE: 500 meters. You can find the sound files in the PBO's from your Arma3 Addons folder.
  6. Just FYI, you can simplify this by adding the code to: ExileServer_object_vehicle_carefulCreateVehicle.sqf. Both the non-persistent and the persistent vehicle scripts call this script to create the vehicle. This makes it so you only have to override one file. If you only want it for one or the other, add it to the appropriate script.
  7. The Exile_Item_Safekit is the item class, if you wanted to add tabs to an existing constructed safe it would be Exile_Container_Safe.
  8. Revert the code in ExileServer_util_getFragKiller.sqf to: //if ((typeOf _killer) isEqualTo "Exile_Unit_Player") then //{ // _player = _killer; //} //else //{ // _sessionID = _killer getVariable ["ExileSessionID", -1]; // if !(_sessionID isEqualTo -1) then // { // _player = _sessionID call ExileServer_system_session_getPlayerObject; // }; //}; if ((typeOf _killer) isEqualTo "Exile_Unit_Player") then { _player = _killer; } else { _uid = getPlayerUID _killer; { if ((getPlayerUID _x) isEqualTo _uid) exitWith { _player = _x; }; } forEach allPlayers; }; See if this fixes the issue and report back so the Devs can have a deeper look.
  9. I've tested this more here is what I found. Using the default code in ExileServer_util_getFragKiller, the _player variable returned when the killing player is in an armed vehicle (tested with default armed Exile cars and the Huey), is _killingPlayer: <NULL-object>" which results in the code 4, NPC. Reverting the code (ExileServer_util_getFragKiller.sqf) back to 1.0.2, the killing player is reported properly. This only happens when a player kills another player from an armed vehicle. Player kills with weapons are not effected.
  10. No I am not. I am using extended stats logging (I cannot find the original post to credit the author). Here is my MPKilled file. I'll highlight the lines that are different from the default exile file for you. I'm outputting the variable for _killingPlayer to the log file now to try and see if this isn't getting set properly and then returning code 4. I'll do some more data gathering for you. Thanks!
  11. Getting reports by players that the server is reporting that players their kills are sometimes being reported as killed by NPC and they are not getting the proper perks. In researching the issue, I noticed changes to the onMPKilled event handler assigned to player objects. Most notably the change to ExileServer_util_getFragKiller. New code: if ((typeOf _killer) isEqualTo "Exile_Unit_Player") then { _player = _killer; } else { _sessionID = _killer getVariable ["ExileSessionID", -1]; if !(_sessionID isEqualTo -1) then { _player = _sessionID call ExileServer_system_session_getPlayerObject; }; }; Previous Code: if ((typeOf _killer) isEqualTo "Exile_Unit_Player") then { _player = _killer; } else { _uid = getPlayerUID _killer; { if ((getPlayerUID _x) isEqualTo _uid) exitWith { _player = _x; }; } forEach allPlayers; }; For some reason the call to this function isn't returning that the killing player is in fact a player and then throws exception 4 in ExileServer_util_getFragType: if (isNull _killingPlayer) then { throw 4; }; For logging and statistic purposes I export every player kill to a database table and it's being reported properly, but I am not using the above code to determine that. format["insertPlayerHistory:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11", getPlayerUID _victim, name _victim, _victimPosition select 0, _victimPosition select 1, _victimPosition select 2, _kName, _kUID, _kDistance, _killerPosition select 0, _killerPosition select 1, _killerPosition select 2] call ExileServer_system_database_query_fireAndForget; _kName, and _KUID are derived from variable that are set higher in the file. This was from an advanced logging mod that someone else wrote (my apologies for not crediting them here). _kName = name _killer; _kUID = getPlayerUID _killer; Anyone else received any complaints? I'll keep doing some more troubleshooting and testing and report back.
  12. @Eichi Confirms what I suspected, but without any official documentation, I could only speculate. I was already headed down the path of swapping out the Exile simulation with the new Dynamic Simulation to test if it would provide better performance. It's hard to tell right now with only 1 or 2 players in the dev server however. In reading the Dynamic Simulation documentation, they are some things that need to be addressed and as you stated will (hopefully) be improved in the future. Thanks for the explanation. I really appreciate your time.
  13. @Eichi I was mistaken about your workaround making is so the simulation was enabled all the time. Your fix, simply switched on global simulation when the object was spawned. The simulation monitor then shuts it off. I misread the code. We have over 10000 base parts on the server and yes 700 of them are doors, gates or hatches. Further testing revealed they are being properly handled by the simulation manager code. There isn't any good documentation on EnableSimulationGlobal and how this impacts server performance. If we were to leave simulation on these on all the time wouldn't that have a negative impact on server performance? Again, I don't fully understand the concept, but know you did this for a good reason. Enlighten me o great Arma Script God.
  14. The more I stare at this, the more I think I may have spoken to soon. The workaround for the Exile base objects with doors isn't actually adding to the number of simulated objects. It only turns on globalsimulation when the object is spawned into the world during the load from constructions routine. EnableSimulationGlobal is set to true when the object is spawned and matches a certain class. It's then handed off to the simulation monitor and if no players are near it, it then shuts off the simulation. I'll keep at it, if nothing else I am learning new things.
  15. Here is a snippet of code you can use to see how many vehicles (objects) have simulation turned on in your server. I use Infistar, so open up the debug panel with the F3 key. Paste this in the panel and execute it server side. Open your server report and look for the output. 16:05:17 "ObjectsSimEnabled: 105" 16:05:17 "ObjectsSimdisabled: 2010"