speedweasel

Donator
  • Content count

    365
  • Donations

    0.00 EUR 
  • Joined

  • Last visited

  • Days Won

    1

speedweasel last won the day on May 16 2016

speedweasel had the most liked content!

Community Reputation

276 Excellent

6 Followers

About speedweasel

  • Rank
    Underboss

Personal Information

Recent Profile Visitors

4758 profile views
  1. speedweasel

    Exile breaks Zeus UI

    Thanks. Anyone with deeper insight?
  2. speedweasel

    Exile breaks Zeus UI

    Any idea why Exile breaks the Zeus UI? Error message is in the screenshot attached. This error is always shown when using Zeus with the Exile mod loaded on the client.
  3. speedweasel

    Improved loot spawner for v1.0.3

    Private accepts several alternative syntaxes, including an array of strings (like I've used above). https://community.bistudio.com/wiki/private
  4. speedweasel

    Improved loot spawner for v1.0.3

    Sure. Any number between 0 and 100 should work. Be aware that 0.1 would mean an average of 1 crate in 1000 loot spawns. That's pretty rare. Many players will never find a crate.
  5. speedweasel

    Improved loot spawner for v1.0.3

    Improved loot spawner for Exile v1.0.3. Makes the size of loot spawns less predictable and occasionally spawns a large crate full of gear. Fully configurable. Instructions: 1. Overwrite the CfgExileLootSettings class in your mission config.cpp file with the code below. Just overwrite the class - including the class name and the opening and closing braces {} - Do not overwrite the whole config.cpp file. class CfgExileLootSettings { /** * Lifetime of loot in minutes. Synchronize this with * the garbage collector settings of your server * CfgSettings! */ lifeTime = 30; /** * Interval in seconds when the client searches for * new buildings to spawn loot in */ spawnInterval = 12; /** * This is a percentage value to determine how many loot * positions should contain loot when the system spawns loot. * * If a building has 20 positions defined, Exile will * spawn loot in 10 random positions of them. * * This means smaller buildings spawn less loot and larger * ones spawn more loot. * * You can also cap it at a maximum value. See below. */ maximumPositionCoverage = 30; /** * Limit the number of loot positions per building. If the * above percentage value exceeds this value, it will be capped. * * Example: Coverage is 50%. Building has 60 loot positions defined. * This results in 30 loot positions and that is too much. So we * cap this at 10 */ maximumNumberOfLootSpotsPerBuilding = 3; /** * Exile spawns a random number of items per loot spot. This * is the upper cap for that. So 3 means it will never spawn more than 3 items in one spot. */ maximumNumberOfItemsPerLootSpot = 7; /** * This is the mid range for the number of loot items per spot. Exile is most likely to spawn this number of items. https://community.bistudio.com/wiki/random */ midNumberOfItemsPerLootSpot = 3; /** * This is the minimum number of loot items per spot. */ minimumNumberOfItemsPerLootSpot = 1; /** * This is the chance (as a percentage) of spawning a crate full of items. */ percentageChanceToSpawnCrate = 1; // 2 = 2% chance to spawn a crate. Keep it low. /** * The number of items to spawn in a crate. */ numberOfItemsPerCrate = 50; /** * Radius in meter to spawn loot AROUND each player. * Do NOT touch this value if you dont know what you do. * The higher the number, the higher the drop rates, the * easier your server will lag. * * 50m = Minimum * 200m = Maximum */ spawnRadius = 60; /** * Defines the radius around trader cities where the system should * not spawn loot. Set this to 0 if you want to have loot spawning * in trader citites, ugh. */ minimumDistanceToTraderZones = 500; /** * Defines the radius around territories where no loot spawns. * This does not regard the actual size of a territory. So do not * set this to a lower value than the maximum radius of a territory, * which is 150m by default. */ minimumDistanceToTerritories = 150; }; 2. Tune the settings in CfgExileLootSettings to your liking. 3. Overwrite the ExileServer_system_lootManager_spawnLootInBuilding function with the code below, using the regular Exile CustomCode overwrite method. /** * ExileServer_system_lootManager_spawnLootInBuilding * * Exile Mod * exile.majormittens.co.uk * © 2015 Exile Mod Team * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. */ private["_numberOfItemsPerCrate","_percentageChanceToSpawnCrate","_midNumberOfItemsPerLootSpot","_minimumNumberOfItemsPerLootSpot","_crate","_building", "_buildingConfig", "_lootTableName", "_localPositions", "_lootConfig", "_maximumNumberOfLootPositions", "_maximumPositionCoverage", "_maximumNumberOfItemsPerLootSpot", "_numberOfPositionsToUse", "_lootPositions", "_spawnedItemClassNames", "_lootWeaponHolderNetIDs", "_lootPosition", "_lootHolder", "_numberOfItemsToSpawn", "_n", "_itemClassName", "_cargoType", "_magazineClassNames", "_magazineClassName", "_numberOfMagazines"]; _building = _this; _building setVariable ["ExileLootSpawnedAt", time]; _building setVariable ["ExileHasLoot", true]; _buildingConfig = configFile >> "CfgBuildings" >> typeOf _building; _lootTableName = getText (_buildingConfig >> "table"); _localPositions = getArray (_buildingConfig >> "positions"); if ((getPosATL _building) call ExileClient_util_world_isInRadiatedZone) then { _lootTableName = "Radiation"; }; _lootConfig = missionConfigFile >> "CfgExileLootSettings"; _maximumNumberOfLootPositions = getNumber (_lootConfig >> "maximumNumberOfLootSpotsPerBuilding"); _maximumPositionCoverage = getNumber (_lootConfig >> "maximumPositionCoverage"); _maximumNumberOfItemsPerLootSpot = getNumber (_lootConfig >> "maximumNumberOfItemsPerLootSpot"); _minimumNumberOfItemsPerLootSpot = getNumber (_lootConfig >> "minimumNumberOfItemsPerLootSpot"); _midNumberOfItemsPerLootSpot = getNumber (_lootConfig >> "midNumberOfItemsPerLootSpot"); _numberOfPositionsToUse = 1 max (((count _localPositions) * _maximumPositionCoverage / 100) min _maximumNumberOfLootPositions); _localPositions = _localPositions call ExileClient_util_array_shuffle; _lootPositions = _localPositions select [0, _numberOfPositionsToUse]; _spawnedItemClassNames = []; _lootWeaponHolderNetIDs = []; _percentageChanceToSpawnCrate = getNumber (_lootConfig >> "percentageChanceToSpawnCrate"); _numberOfItemsPerCrate = getNumber (_lootConfig >> "numberOfItemsPerCrate"); { _lootPosition = ASLToATL (AGLToASL (_building modelToWorld _x)); if (_lootPosition select 2 < 0.05) then { _lootPosition set [2, 0.05]; }; _lootHolder = objNull; _numberOfItemsToSpawn = round random [_minimumNumberOfItemsPerLootSpot,_midNumberOfItemsPerLootSpot,_maximumNumberOfItemsPerLootSpot]; // [min,mid,max] if (random 100 <= _percentageChanceToSpawnCrate) then {_numberOfItemsToSpawn = _numberOfItemsPerCrate}; // occasionally have a big loot cache for "_n" from 1 to _numberOfItemsToSpawn do { _itemClassName = _lootTableName call ExileServer_system_lootManager_dropItem; if !(_itemClassName in _spawnedItemClassNames) then { if (isNull _lootHolder) then { if (_numberOfItemsToSpawn == _numberOfItemsPerCrate) then //if you have a big loot cache, put it in a random crate { _crate = selectRandom [ "Box_IND_Ammo_F", "Box_T_East_Ammo_F", "Box_East_Ammo_F", "Box_NATO_Ammo_F", "Box_Syndicate_Ammo_F", "Box_IND_Wps_F", "Box_T_East_Wps_F", "Box_East_Wps_F", "Box_T_NATO_Wps_F", "Box_Syndicate_Wps_F", "Box_Syndicate_WpsLaunch_F", "Box_IND_WpsSpecial_F", "Box_East_WpsSpecial_F", "Box_T_NATO_WpsSpecial_F", "Box_NATO_WpsSpecial_F", "Box_IND_Support_F", "Box_East_Support_F", "Box_NATO_Support_F"]; _lootHolder = createVehicle [_crate, _lootPosition, [], 0, "CAN_COLLIDE"]; clearWeaponCargoGlobal _lootHolder; // empty crate clearMagazineCargoGlobal _lootHolder; // empty crate clearItemCargoGlobal _lootHolder; // empty crate clearBackpackCargoGlobal _lootHolder; // empty crate } else { _lootHolder = createVehicle ["LootWeaponHolder", _lootPosition, [], 0, "CAN_COLLIDE"]; }; _lootHolder setDir (random 360); _lootHolder setPosATL _lootPosition; _lootHolder setVariable ["ExileSpawnedAt", time]; _lootWeaponHolderNetIDs pushBack (netId _lootHolder); }; _cargoType = _itemClassName call ExileClient_util_cargo_getType; switch (_cargoType) do { case 1: { if (_itemClassName isEqualTo "Exile_Item_MountainDupe") then { _lootHolder addMagazineCargoGlobal [_itemClassName, 2]; } else { _lootHolder addMagazineCargoGlobal [_itemClassName, 1]; }; }; case 3: { _lootHolder addBackpackCargoGlobal [_itemClassName, 1]; }; case 2: { _lootHolder addWeaponCargoGlobal [_itemClassName, 1]; if !(_itemClassName isKindOf ["Exile_Melee_Abstract", configFile >> "CfgWeapons"]) then { _magazineClassNames = getArray(configFile >> "CfgWeapons" >> _itemClassName >> "magazines"); if (count(_magazineClassNames) > 0) then { _magazineClassName = selectRandom _magazineClassNames; _numberOfMagazines = 2 + floor(random 3); _lootHolder addMagazineCargoGlobal [_magazineClassName, _numberOfMagazines]; _spawnedItemClassNames pushBack _magazineClassName; }; }; _numberOfItemsToSpawn = -1; }; default { _lootHolder addItemCargoGlobal [_itemClassName, 1]; }; }; _spawnedItemClassNames pushBack _itemClassName; }; }; } forEach _lootPositions; _building setVariable ["ExileLootWeaponHolderNetIDs", _lootWeaponHolderNetIDs]; ExileServerBuildingNetIdsWithLoot pushBack (netId _building); Enjoy!
  6. Might I get a copy of your Chernarus mission with ALiVE in it? I want to adjust/tweak it and run it for the Hostile Takeover community. Im working slowly to port it myself but would appreciate a completed version to compare to.

  7. Can we add a checkbox to the respawn dialogue that lets players choose whether they parachute in or not on a per-respawn basis? Sometimes you want to parachute in, other times you don't want to get shot out of the air.
  8. speedweasel

    ALiVE Mod for AI or Occupation?

    Happy to answer questions. ALiVE doesn't work perfectly with Exile but you can get it to work well enough.
  9. speedweasel

    ALiVE AI in Exile

    I'm re-posting a DM here that contains some advice on getting ALiVE AI working with Exile. I've been running ALiVE AI on my Exile Chernarus server for the last month and while there are some compromises and drawbacks, the overall player experience eclipses DMS and A3XAI. Hi, I am using the following modules: Alive Required Virtual AI System (Profile) Military AI Skill Military AI commander Military Placement Module Civilian Placement Module Military Logistics I'm also running the Zeus module so I can spectate and debug the AI. I recommend you do this while developing your mission. You can take the Zeus module out before you 'go live.' In order to add loot, respect and poptabs to AI you'll need to add some event handler code to the end of your description.ext file: class Extended_Init_EventHandlers { class Man { init = "_this call (compile preprocessFileLineNumbers 'ai_init.sqf')"; }; }; This code will apply to every 'man' class of object your server spawns. Once you've added this code above, create a new file called ai_init.sqf in the root of your Exile mission folder (right next to description.ext.) Add the following code to the ai_init.sqf file to give the AI, respect, loot and poptabs. It also registers AI deaths and displays the Exile 'killed' message on your screen: private "_this"; _this = _this select 0; if (side _this == east) then { _poptabs = round random 200; _this setVariable ["ExileMoney",_poptabs,true]; _this addMPEventHandler ["MPKilled",'if (isServer) then {_this call DMS_fnc_OnKilled;};']; _this setVariable ["DMS_AI_Side", "Bandit"]; _this setVariable ["DMS_AI_Type", "Soldier"]; _this setVariable [ "DMS_AI_Respect", missionNamespace getVariable [format ["DMS_%1_%2_RepGain","Bandit","Soldier"],0] ]; }; This assumes all your AI are all OPFOR (east). The code above uses functions from the DMS AI mission system which most server admins run. If you don't want DMS missions running on your server you can edit the DMS config file to turn off all missions and loot drops, etc but you still need DMS running on your server to use the above code. As for AI killing each other. I had the same problem for hours and hours. I've tried every permutation of config settings but all of my OPFOR (OPF_F and OPF_G_F) were spawning in as INDEPENDENT groups and shooting each other (you can use Zeus to confirm this. They are dressed as OPF but show up in green groups). Eventually I swapped to CUP units and the problem stopped. Today I'm running three factions on my Chernarus server; CUP_O_RU, CUP_O_ChDKZ & CUP_I_NAPA and everything works perfectly. It turns out that Exile *does* interfere with the way Alive spawns vanilla Arma 3 OPFOR units. It makes them all spawn in as INDEPENDENT groups. I haven't found the code that does this yet but I have run the same Alive mission with and without Exile loaded and it runs perfectly without Exile. I'm continuing to search Exile's code... So, currently you'll need to use CUP Units (or possibly another mod) to get around the problem of Alive units killing each other. Other things you might want to consider: Use ALIVE blacklists to remove all AA groups and units otherwise they will routinely shoot down player helicopters (google alive blacklists, it's pretty easy) If factions are using vehicles, check the 'Ambient Vehicle' setting at the bottom of the Military Placement Module settings Blacklist all of your trader zones using the Blacklist Marker field in your Military and Civilian Placement Modules Alive units will spawn with weapons that have attachments. This lets players dupe attachments like optics, suppressors. Some units also have thermal and launchers. There is no way around this other than creating your own factions using the Alive ORBAT editor. That's a big job. I run a community server and I trust my players so it's no big deal but larger, public servers will have duping problems. Use the minimum filter settings for Objective Size and Objective Priority in your Military and Civilian Placement Modules. If you have unfiltered objectives the AI commander will place units in the tiniest buildings in the middle of nowhere. Good luck with your mission. Let me know how you go. speed.
  10. speedweasel

    [Need Help] Alive for Exile

    You need to sync up your ALiVE modules, place some TOAR markers, and generally configure ALiVE to work properly. I suggest you get an ALiVE mission working without Exile, then manually merge the two missions when you know ALiVE is working correctly.
  11. I'm guessing some people have a grander, more dignified vision of Exile than others.
  12. Yeah, these messages really don't do anything for Exile. Kinda amateurish and embarrassing actually.
  13. speedweasel

    ALiVE Mod for AI or Occupation?

    Alive performs significantly better than DMS, Occupation or A3XAI for me. With *way* more AI. ALiVE works great with Exile as long as you stick to ALiVE's AI modules and avoid using the other modules (like respawn). I got ALiVE running nicely with Exile in an afternoon. It took another hour the next morning to script the ALiVE AI to have ExileMoney, Respect and loot. DMS (like lots of other addons) focuses the admin on editing scripts and config files and testing iteratively which was fine when I was unemployed but painful if you value your time. With ALiVE you can place your prisoners in the middle of a dynamic, populated environment just using the 3DEN editor. And here's the kicker; the AI environment is different every time. Exile AI mods are just so predictable. You could, but I didn't need to. 50 FPS, 40-50 CPS. We only have half a dozen players on Chernarus but the server is also weak. YMMV. Your post discouraged me from even trying to get Exile and ALiVE working for like 2 weeks. I'm glad that in the end I didn't listen to you.
  14. speedweasel

    DAC or ALiVE?

    ALiVE runs brilliantly with Exile now they have stacked event handlers.