Jump to content


  • Content Count

  • Joined

  • Last visited

  • Medals

Community Reputation

1454 Excellent

About fn_Quiksilver

  • Rank
    Warrant Officer

Recent Profile Visitors

3178 profile views
  1. Local effect is more performance friendly than Global effect. If possible I would just run the code where group is local and keep the effect local to cut down on network traffic.
  2. These are things BIS should (have) work(ed) on. That vanilla AI don't use buildings at all is a sign of the PvE apocalypse for BIS as they move toward PvP "emergent gameplay". Do you control unit rotation as well with setDir? I relied on swarming AI to overwhelm the defenders, spawning extra bots just outside the door once players/defenders lose control of the doorway/etc. clumsy compared to this challenge you guys are working on
  3. fn_Quiksilver

    Apex Framework

    Updated to 1.1.6 Hotfix 1 Arsenal fix - [FIXED] Arsenal bug (displaying gear for incorrect role when using whitelisting or blacklisting). - [FIXED] HVT could not be captured. - [FIXED] Vehicle Inventory Editor worked even on destroyed vehicles. - [FIXED] Artillery Computer parameter was not working since 1.1.4. - [FIXED] Fighter pilot could not activate Simple Object planes.
  4. fn_Quiksilver

    General Discussion (dev branch)

    Requesting a fix for an Arsenal bug (this is a 2 minute job) - When custom gear list is held in missionnamespace, it is always forced global even when "isGlobal" parameter is false. Here is the fix: BIS_fnc_addVirtualItemCargo /* Author: Karel Moricky Description: Add virtual items to an object (e.g., ammo box). Virtual items can be selected in the Arsenal. Parameter(s): 0: OBJECT - objct to which items will be added 1: STRING or ARRAY of STRINGs - item class(es) to be added 2 (Optional): BOOL - true to add items globally (default: false) 3 (Optional): BOOL - true to add Arsenal action (default: true) Returns: ARRAY of ARRAYs - all virtual items within the object's space in format [<items>,<weapons>,<magazines>,<backpacks>] */ private ["_object","_classes","_isGlobal","_add","_type","_initAction","_cargo","_cargoArray","_save"]; _object = _this param [0,missionnamespace,[missionnamespace,objnull]]; _classes = _this param [1,[],["",true,[]]]; _isGlobal = _this param [2,false,[false]]; _initAction = _this param [3,true,[true]]; _add = _this param [4,1,[1]]; _type = _this param [5,0,[0]]; //--- Get cargo list _cargo = _object getvariable ["bis_addVirtualWeaponCargo_cargo",[[],[],[],[]]]; _cargoArray = _cargo select _type; if (_add == 0) exitwith {_cargoArray}; //--- Modify cargo list _save = false; if (typename _classes != typename []) then {_classes = [_classes]}; if (count _classes == 0 && _add < 0) then { _cargoArray = []; _save = true; } else { { //--- Use config classnames (conditions are case sensitive) private ["_class"]; _x = _x param [0,"",["",true]]; if (typename _x == typename true) then {_x = "%ALL";}; _class = switch _type do { case 0; case 1: {configname (configfile >> "cfgweapons" >> _x);}; case 2: {configname (configfile >> "cfgmagazines" >> _x);}; case 3: {configname (configfile >> "cfgvehicles" >> _x);}; default {""}; }; if (_class == "") then {_class = _x;}; if (_add > 0) then { if (!(_class in _cargoArray) && (_class != "" || _class == "%ALL")) then {_cargoArray set [count _cargoArray,_class];}; } else { _cargoArray = _cargoArray - [_class]; }; _save = true; } foreach _classes; }; _cargo set [_type,_cargoArray]; if (_save) then { if (typename _object == typename missionnamespace) then { _object setvariable ["bis_addVirtualWeaponCargo_cargo",_cargo]; publicvariable "bis_addVirtualWeaponCargo_cargo"; } else { _object setvariable ["bis_addVirtualWeaponCargo_cargo",_cargo,_isGlobal]; }; }; if (!is3DEN && _initAction && typename _object == typename objnull) then { if ({count _x > 0} count _cargo > 0) then { //--- Init arsenal ["AmmoboxInit",_object] call bis_fnc_arsenal; } else { //--- Terminate arsenal ["AmmoboxExit",_object] call bis_fnc_arsenal; }; }; _cargoArray change this bit (when missionnamespace is used it is always "publicvariable" instead of adhering to the _isGlobal parameter). if (_save) then { if (typename _object == typename missionnamespace) then { _object setvariable ["bis_addVirtualWeaponCargo_cargo",_cargo]; publicvariable "bis_addVirtualWeaponCargo_cargo"; // it should be checking _isGlobal before publicvariable } else { _object setvariable ["bis_addVirtualWeaponCargo_cargo",_cargo,_isGlobal]; }; }; to simply if (_save) then { _object setvariable ["bis_addVirtualWeaponCargo_cargo",_cargo,_isGlobal]; // this syntax works with missionnamespace too now };
  5. fn_Quiksilver

    Apex Framework

    Updated to 1.1.6 Role Whitelisting & Performance In this patch the core focus was on introducing Role Whitelisting to the new Role Selection System. Also included are many bug fixes, tweaks and significant performance improvements. - [ADDED] Role Whitelisting for Role Selection System. - [ADDED] Parameter option for Ambient Civilians. - [ADDED] Parameter option for Ambient Animals. - [ADDED] 2 New buttons to Role Selection menu (Arsenal + Group). - [TWEAKED] When over 50 players on server, Ambient Animals and Ambient Civilians are disabled regardless of parameter option, to preserve performance during peak demand. - [TWEAKED] Implemented improved "switchLight" command. - [TWEAKED] Implemented new command "lnbSetTooltip" to role selection system menu lists. - [TWEAKED] AI Tank gunners more likely to attack player-occupied buildings. - [TWEAKED] Capped ability for client to spam "Jump" animation net messages. - [TWEAKED] Role Selection System documentation in the file "documentation\role selection system.txt" for role whitelisting. - [FIXED] (Bigly network optimization) Removed beta net code for new Roles system. - [FIXED] Server-spawned UAV turrets would be deleted when the UAV operator used them and then left the slot. - [FIXED] Server script error in robocop AFK auto-kick system. - [FIXED] Server script error when initializing Group Management system. - [FIXED] Client script error when opening the Virtual Arsenal system. - [REMOVED] Game bug workaround for date year sync issue, as BIS has fixed it internally.
  6. fn_Quiksilver

    General Discussion (dev branch)

    @oukej Small issue with the "doSuppressiveFire" system. If the target is killed/deleted during the suppression, the unit will aim at the ground while continuing to fire.
  7. thanks for the feedback a small issue which everyone gets frustrated by but tolerates without mentioning.
  8. the big one is enabling optional tank HE shell against infantry. specifically the autocannon Nyx, should be attacking with its autocannon instead of switching to 7.62 when firing at infantry.
  9. yeah i can make it an addon. only issue is that it uses “ingameuiseteventhandler”, which cant be stacked, so if its used by any other addon or the mission itself, there would be a conflict
  10. Hi lads, Small code snippet I'd like to contribute which I strongly encourage all vanilla missions/servers to apply. Problem: When trying to "Treat" an injured player, if he moves even slightly, the Treat will fail, and your soldier will still go through the whole animation. There are two issues here. The failure condition for the action is way too sensitive for regular gameplay. The animation will continue several seconds after the attempt has failed. The result is that players get frustrated by an awkward game mechanic, attempting to treat someone over and over who may not be staying perfectly still. Solution: The below code means that the injured unit can still move slightly and do other normal movements, and will still be Treated/healed as long as they stay in proximity. If the injured unit leaves proximity or dies or whatever, the Treat animation will terminate. The result is that a very common and frustrating moment of gameplay is smoothed out. https://github.com/auQuiksilver/Apex-Framework/blob/master/Apex_framework.terrain/code/functions/fn_clientInGameUIAction.sqf#L84-L149 We applied this change some time ago for use in the "Apex Framework" + I&A mission. Here is a use-able code snippet: // Treat Overwrite by Quiksilver // Paste in player init script // Multiplayer + Singleplayer QS_fnc_treatOverwrite = { params ['_actionTarget']; player setVariable ['QS_treat_entryAnim',(animationState player),FALSE]; player setVariable ['QS_treat_target',_actionTarget,FALSE]; _animEvent = player addEventHandler [ 'AnimDone', { params ['_unit','_anim']; if (['medicdummyend',_anim,false] call (missionNamespace getVariable 'BIS_fnc_inString')) then { if ((lifeState _unit) in ['HEALTHY','INJURED']) then { _target = _unit getVariable ['QS_treat_target',objNull]; if (!isNull _target) then { if (((_target distance _unit) <= 2.5) && (isNull (objectParent _target)) && ((lifeState _target) in ['HEALTHY','INJURED'])) then { _unit removeItem 'FirstAidKit'; _target setDamage [([0.25,0] select (_unit getUnitTrait 'medic')),TRUE]; }; }; }; if (!isNull (_unit getVariable ['QS_treat_target',objNull])) then { _unit setVariable ['QS_treat_target',objNull,FALSE]; }; }; } ]; player playActionNow 'MedicOther'; [_actionTarget,_animEvent] spawn { params ['_injured','_animEvent']; _timeout = diag_tickTime + 10; uiSleep 0.5; waitUntil { uiSleep 0.05; ((isNull (player getVariable 'QS_treat_target')) || {(!((lifeState player) in ['HEALTHY','INJURED']))} || {(diag_tickTime > _timeout)} || {((_injured distance player) > 2.5)}) }; if ((_injured distance player) > 2.5) then { player setVariable ['QS_treat_target',objNull,FALSE]; if ((lifeState player) in ['HEALTHY','INJURED']) then { if (isMultiplayer) then { _nearbyPlayers = (allPlayers inAreaArray [(getPos player),100,100,0,FALSE,-1]) select {(!(_x isEqualTo player))}; if (!(_nearbyPlayers isEqualTo [])) then { [player,(player getVariable ['QS_treat_entryAnim',''])] remoteExec ['switchMove',_nearbyPlayers,FALSE]; }; } else { player switchMove (player getVariable ['QS_treat_entryAnim','']); }; }; }; if (!isNull (player getVariable 'QS_treat_target')) then { player setVariable ['QS_treat_target',objNull,FALSE]; }; player removeEventHandler ['AnimDone',_animEvent]; }; }; inGameUISetEventHandler [ "Action", " params ['_actionTarget','','','_actionName','','','','','','','']; private _return = FALSE; if (_actionName isEqualTo 'HealSoldier') then { _return = TRUE; [_actionTarget] call QS_fnc_treatOverwrite; }; _return; " ];
  11. fn_Quiksilver

    Disable Artillery Computer

    if you want to disable it for certain assets only, you need to use the “getinman” event to remove, and the “getoutman”/killed/respawn events to re-add
  12. fn_Quiksilver

    Apex Framework

    Updated to 1.1.4 (Release Candidate 2) More bug fixes and tweaks ahead of the Stable build release - [TWEAKED] Reduced slightly AI skills on Tanoa, raised slightly AI skills on Altis/Malden. - [TWEAKED] CAS pilots will have Role menu appear on respawn, instead of having to run long distance to access at an Arsenal crate. - [TWEAKED] If you are a gunner in an armed offroad and get incapacitated, you'll be knocked out of the vehicle instead of remain on the gun. - [FIXED] widthRailway config error when joining server. - [FIXED] Arsenal could sometimes display gear for a role different to yours. - [FIXED] Enemy transport helos would regularly de-spawn after dropping soldiers. - [FIXED] Transport leaderboard was broken in 1.1.4 update. - [FIXED] A Classic mode enemy HQ had a white flag instead of faction flags. - [FIXED] Bug with players unable to join roles which were close to capacity. Ex. sniper (1 / 2) - [REMOVED] Ear collector leaderboard (network optimization). - [REMOVED] Obsolete leaderboard player registration code (network optimization).
  13. cold war era is definitely the easiest era to find the "fun" in arma combat. 2035 tech makes finding the fun more of a challenge, with all the high tech equipment. like, imo its just less interesting to creep around in a jungle with thermal screen, compared to naked eye or nvg
  14. fn_Quiksilver

    Draw circle on terrain in script

    If you see something in our missions just ask the mission maker 🙂 our solution isn't as sexy as all that math, but its simple and efficient: https://github.com/auQuiksilver/Apex-Framework/blob/master/Apex_framework.terrain/code/functions/fn_config.sqf#L295 We used them to create those pretty terrain circles:
  15. Depends on your audience. If your audience is the End User/Player, then Steam + Armaholic. If your audience is server admins/communities, then posting it in "User Missions" subforum here is sufficient.