Jump to content

Northup

Member
  • Content Count

    87
  • Joined

  • Last visited

  • Medals

Everything posted by Northup

  1. Northup

    Remote Exec Play music?

    private _playerSide = side player; if (_playerSide == WinningSide) then { titleText [WinMessage, "PLAIN", -1, true, true]; playMusic ["LeadTrack01_F_Bootcamp", 132]; } else { titleText [LoseMessage, "PLAIN", -1, true, true]; playMusic "BackgroundTrack03_F_EPC"; }; Seems to. I've changed it. Will report back if anything changes.
  2. Northup

    Remote Exec Play music?

    1. Assuming you mean playMusic "RadioAmbient1"; and hitting local exec,YES. playMusic ["LeadTrack01_F_Bootcamp", 132] also works. 2. LOL. I had someone in the discord ask me the same thing. Yes, I did. I have intromusic that plays on OnplayerRespawn that works fine. 3.I have 2 functions: //NUP\NUP_flagCapture\functions\NUP_fnc_updateScores.sqf { private _side = _x select 1; switch (_side) do { case west: { NUP_points_BLUFOR = NUP_points_BLUFOR + 1; }; case east: { NUP_points_OPFOR = NUP_points_OPFOR + 1; }; case independent: { NUP_points_INDFOR = NUP_points_INDFOR + 1; }; case civilian: { NUP_points_CIV = NUP_points_CIV + 1; }; }; } forEach (missionNamespace getVariable ["NUP_flagArray", []]); diag_log format ["Blu score: %1, Opf score: %2, Ind score: %3, Civ score: %4", NUP_points_BLUFOR, NUP_points_OPFOR, NUP_points_INDFOR, NUP_points_CIV]; private _winningSide = []; // Array to store winning sides private _maxScore = NUP_points_maxScore; diag_log format ["_maxscore: %1", _maxScore]; // Determine winning sides if (NUP_points_BLUFOR >= _maxScore) then { _winningSide pushBack west; }; if (NUP_points_OPFOR >= _maxScore) then { _winningSide pushBack east; }; if (NUP_points_INDFOR >= _maxScore) then { _winningSide pushBack independent; }; if (NUP_points_CIV >= _maxScore) then { _winningSide pushBack civilian; }; // Check if any side has reached the maximum score and trigger end mission if so if (count _winningSide == 1) then { [_winningSide] call NUP_fnc_endMission; "endMusic.sqf" remoteExec ["execVM",0]; }; // NUP_fnc_endMission: params ["_winningSide"]; WinningSide = _winningSide select 0; private _winnerOutcome = switch (WinningSide) do { case west: { "BLUFOR WINS!" }; case east: { "OPFOR WINS!" }; case independent: { "INDEPENDENT WINS!" }; case civilian: { "CIVILIANS WIN!" }; }; WinMessage = format ["MISSION ACCOMPLISHED! %1", _winnerOutcome]; LoseMessage = format ["MISSION FAILED! %1 ", _winnerOutcome]; // Get the position of the NUP_endMissionCamera object private _cameraPos = getPos NUP_endMissionCamera; // Calculate starting and ending positions for the camera private _startPos = [ (_cameraPos select 0), // Same X position (_cameraPos select 1), // Same Y position (_cameraPos select 2) + 10 // 10 meters above ]; private _endPos = [ (_cameraPos select 0), // Same X position (_cameraPos select 1), // Same Y position (_cameraPos select 2) + 50 // 50 meters above (40 meters up during 30 seconds) ]; // Create the camera private _camera = "camera" camCreate _startPos; _camera cameraEffect ["internal", "back"]; _camera camSetTarget NUP_endMissionCamera; _camera camSetFOV 1; _camera camCommit 0; // Start the cinematic borders [0, 0.5, false, true] call BIS_fnc_cinemaBorder; // Move the camera over 30 seconds _camera camSetPos _endPos; _camera camCommit 30; publicVariable "WinningSide"; publicVariable "LoseMessage"; publicVariable "WinMessage"; // Wait until the camera has finished it's trajectory waitUntil { camCommitted _camera }; // Terminate the camera effect and destroy the camera _camera cameraEffect ["terminate", "back"]; camDestroy _camera; // Force all players back to the lobby after the outro ["END1", false] call BIS_fnc_endMission; and in initServer: if !(isServer) exitWith {}; NUP_flagArray = []; NUP_points_BLUFOR = 0; NUP_points_OPFOR = 0; NUP_points_INDFOR = 0; NUP_points_CIV = 0; NUP_points_maxScore = 5; NUP_scoring_interval = 5; NUP_deadlock = 0; [] spawn { while {true} do { [] call NUP_fnc_updateScores; sleep NUP_scoring_interval; }; }; Both are registered. class NUP_flagCapture { tag = "NUP"; class flagCapture { file = "NUP\NUP_flagCapture\functions"; class initSafezone {}; class initFlag {}; class playerMarkers {}; class captureFlag {}; class addFlagHoldAction {}; class getFlagSupplies {}; class updateFlagSupplyActions {}; class addMedicalHoldAction {}; class addEquipmentHoldAction {}; class addRespawnPosition {}; class addVehicleServices {}; class cinematicBorder {}; class updateScores {}; class endMission {}; }; };
  3. Northup

    Remote Exec Play music?

    Tried that. Oddly enough, same result. I'm at a total loss.
  4. Northup

    Safezone

    I wound up going with a trigger in the end but I utilized parts of your approach. Still needs some more rigorous testing, but I think this might work: https://pastebin.com/knHsGNJs Wound up adding some functionality to kill enemy players. else { if (_entity == player) then { _entity commandChat "You've entered an enemy safezone."; }; if (_entity isKindOf "man") then {_entity call BIS_fnc_neutralizeUnit;}; if (count (crew _vehicle) > 0) then { _vehicle call BIS_fnc_neutralizeUnit; }; }; } forEach _new_safezone;
  5. Northup

    Safezone

    Thanks for the suggestion! I suppose a marker would be more efficient than a trigger. This should be fairly easy to start with, I'm trying to iterate as I go. Not sure if I will have the same issue I had with the trigger, if so I will report back. The issue was that the player exiting a vehicle within the trigger caused them to be vulnerable for 10 seconds. The vehicle would not remain invulnerable.
  6. I've got a safeZone script I am working on. Players spawn on a base, and should be able to use bunkers as "elevators" to other parts of the base via add action, at which point they will be teleported to the corresponding bunker object. I've looked at the wiki for both BIS_fnc_holdActionAdd and I've narrowed it down to the custom arguments, but I have no idea how to extrapolate that. I am using the bunker names to help the script determine which bunker should send a player to. The action is added, but having trouble passing the destination variable. _baseEntry1 = objNull; _baseEntry2 = objNull; _baseExit1 = objNull; _baseExit2 = objNull; //Initialize Elevators _syncedobjs = synchronizedObjects _logic; { if (toLower str _x find "base_exit_1" == 0) then { _baseExit1 = _x; } } forEach _syncedobjs; _syncedobjs = synchronizedObjects _logic; { if (toLower str _x find "base_exit_2" == 0) then { _baseExit2 = _x; } } forEach _syncedobjs; _syncedobjs = synchronizedObjects _logic; { if (toLower str _x find "base_entry_1" == 0) then { _baseEntry1 = _x; } } forEach _syncedobjs; _syncedobjs = synchronizedObjects _logic; { if (toLower str _x find "base_entry_2" == 0) then { _baseEntry2 = _x; } } forEach _syncedobjs; diag_log format["logic instance: %1", _logic]; diag_log format["_baseExit1: %1", _baseExit1]; diag_log format["_baseExit1 position: %1", getPosATL _baseExit1]; diag_log format["_baseExit2: %1", _baseExit2]; diag_log format["_baseExit2 position: %1", getPosATL _baseExit2]; diag_log format["_baseEntry1: %1", _baseEntry1]; diag_log format["_baseEntry1 position: %1", getPosATL _baseEntry1]; diag_log format["_baseEntry2: %1", _baseEntry2]; diag_log format["_baseEntry2 position: %1", getPosATL _baseEntry2]; // Code executed when action is performed _actionCode = { private ["_baseEntry1"]; // Define _baseEntry1 as a private variable to access it within this code block // Teleport [0, "BLACK", 1, 1] spawn BIS_fnc_fadeEffect; sleep 0.5; player setPosATL (getPosATL _baseEntry1); [1, "BLACK", 1, 1] spawn BIS_fnc_fadeEffect; }; // Add action to the object _baseExit1 _baseExit1 addAction [ "Exit to Helipad", // Title of the action _actionCode, // Code executed when action is performed [_baseEntry1], // Additional parameters: passing _baseEntry1 6, // Priority of the action true, // Show in the action menu true, // Hide the action on completion "", // Condition for the action to be available "alive player" // Condition for the action to be shown ];
  7. Thank you Larrow! Yes. Entry_1 always exits to Exit_1 and Exit_1 always enters to Entry_1.
  8. Solved. Didn't know about factions either. Stored the faction as a variable in the player once they are "in game". in initplayerlocal.ini: params[ "_player" ]; //Draw player side icons [] spawn NUP_fnc_playerMarkers; waitUntil {getClientStateNumber > 7}; player setVariable ["playerFaction", faction player]; in fn_playerMarkers: if (isServer) then { waitUntil { !isNull findDisplay 12 }; ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", { private ["_color", "_playerFaction"]; diag_log format ["step 1 faction player: %1",_playerFaction]; _playerFaction = player getVariable "playerFaction"; switch (_playerFaction) do { case "BLU_F": { _color = [0, 0.3, 0.6, 1]; // Blue color for BLUFOR }; case "OPF_F": { _color = [0.5, 0, 0, 1]; // Red color for OPFOR }; case "IND_F": { _color = [0, 0.5, 0, 1]; // Green color for Independent }; default { _color = [0.4, 0, 0.5, 1]; // Purple color for Civilian }; }; Edit: Big thanks to you Larrow for again pointing me in the right direction.
  9. I have a custom player marker system. For the most part, it functions fine. However I had to implement some workarounds. 4 sides PVP only (Blufor, Opfor, Independent and Civilian.) Simply put, it creates markers on the map and gps minimap for each teammate, in addition to one for the player. However, since I am making use of civilians as a playable faction, they occasionally showed up with Blufor's team markers until I set side relations and -10000 rating for each civilian. Once that was solved I ran into a new issue: (I didn't know this) Players apparently become civilians from the moment they die until they respawn - meaning civilian positions would be relayed to a non civilian player. As such, I figured I might be able to make the regular markers only appear when the player is alive. That worked. So I also figured I could make some OTHER markers display based on _oldUnit in onPlayerRespawn. But I get nothing. My intent is to have RespawnOnStart = 0, so that _oldunit would have a chance to be set, because while I am sure there's a way to get the team the player selected in the lobby and display markers based on that but I wouldn't quite know where to begin. onPlayerRespawn.sqf params ["_oldUnit", "_killer", "_respawn", "_respawnDelay"]; _miniMapEH = ((uiNamespace getVariable "RscCustomInfoMiniMap") displayCtrl 101) ctrlAddEventHandler ["Draw", { private ["_color"]; switch (side _oldUnit) do { case west: { _color = [0, 0.3, 0.6, 1]; // Blue color for BLUFOR }; case east: { _color = [0.5, 0, 0, 1]; // Red color for OPFOR }; case independent: { _color = [0, 0.5, 0, 1]; // Green color for Independent }; default { _color = [0.4, 0, 0.5, 1]; // Purple color for Civilian }; }; // Loop through all playable units to draw icons for each player on the same side { if (side _x == side _oldUnit) then { // Draw colored dot icons for team players on the map _this select 0 drawIcon [ "\A3\ui_f\data\map\markers\military\dot_CA.paa", // Icon path _color, // Color based on player's side getPosASLVisual _x, 32, // Icon width 32, // Icon height getDirVisual _x, "", // Empty text 1, // Scale 0.04, // Text size "PuristaMedium", // Text font "right" // Text align ]; _this select 0 drawIcon [ "\A3\ui_f\data\map\vehicleicons\iconManVirtual_ca.paa", // Icon path [1, 1, 1, 0.65], // White color with 65% opacity getPosASLVisual _x, 25, // Icon width 25, // Icon height getDirVisual _x, name _x, // Name 1, // Scale 0.04, // Text size "PuristaMedium", // Text font "right" // Text align ]; }; } forEach allUnits; }]; diag_log format ["_oldUnit Side: %1", side _oldUnit];
  10. It doesn't exist, not there. That's how I display the other GPS icons. I was trying gps and map by process of elimination. And yes, I meant side, not team. I wasn't aware that ICON would do that. As for groups, I was reading about them but hadn't gotten that far with it yet. Brilliant. o7 Edit: Only potential issue with markers vs icons is inability to change fonts.
  11. Q1. Not sure, but probably not. Q2. Arma has to sync an exceptionally large amount of data between the server and client. It's not so much the bandwidth these days as it is that the systems Arma was programmed to work on didn't have things like 3d vcache, and multicore processing wasn't anywhere near what it is today. Arma mostly runs on a single core, where clock speed, ram, network and vcache are king. Q3. That's impossible to answer unless you can somehow predict what players (or AI for that matter) are going to be doing at every exact moment during a match. That said, C4G recently held an event for KOTH servers that saw them increase the playercount to 150 on some servers. People complained, and there was an increase in desync, but not enough that I was personally bothered by it. That's the thing though. I have a 7800x3d, and I use a custom memalloc. Generally in the AO on a full infantry server, I can get 60 mostly solid fps if my viewdistance is lowered to around 1500-1000. VD down to 200 gets me 100+. There's also a public King of the Hill server maintained by Dwarden, iirc. That has something like 150 player slots. It's rarely full but when it is, it can be an interesting experience. Check it out if you can. All that is to say that your client's fps will largely be a result of their own hardware. Making a blazingly fast, state of the art server with space lasers still wouldn't overcome the limits of outdated client hardware.
  12. Northup

    ChatGPT is Awesome

    It certainly helps bridge the curiosity gap that would otherwise compel some to give up, but it has way too many issues to be reliable. It invents commands that don't exist, and will then gaslight you about their existence. It has trouble understanding more of the convoluted ways Arma works under the hood. Like anything, it does a lot better if you do things in very small segments with lots of logging. It will insist your defined variable lack of capitalization is the issue, especially when it isn't.
  13. Hmm. Might make use of setterrainheight and triggers. Name the triggers something like terrainTrigger_%1. Make sure trigger c - trigger area Z size is 0.002, set itz height pos to 0. Make sure it is level with ground in vr when you save it as a comp. Then, reference those triggers in your script: private _triggerNames = [terrainTrigger_01, terrainTrigger_02, terrainTrigger_03, terrainTrigger_04]; { private _triggerPos = getPosWorld _x; private _triggerSize = triggerArea _x; private _height = _triggerPos select 2; private _position = getPosWorld _x; private _triggerLength = (_triggerSize) # 0; private _triggerWidth = (_triggerSize) # 1; private _triggerAngle = (_triggerSize) # 2; private _pos = [(_position#0 + cos(_triggerAngle) * _triggerLength + sin(_triggerAngle) * _triggerWidth), (_position#1 - sin(_triggerAngle) * _triggerLength + cos(_triggerAngle) * _triggerWidth)]; private _positionsAndHeights = []; _pos pushBack _height; for "_i" from 0 to (_triggerLength * 8) do { private _pos2 = _pos; for "_j" from 0 to (_triggerWidth * 8) do { _positionsAndHeights pushBack _pos2; _pos2 = _pos2 vectorAdd [-0.25 * sin(_triggerAngle), -0.25 * cos(_triggerAngle), 0]; }; _pos = _pos vectorAdd [-0.25 * cos(_triggerAngle), 0.25 * sin(_triggerAngle), 0]; }; setTerrainHeight[_positionsAndHeights, true]; } forEach _triggerNames; The downside is I'm not near math smart enough to smooth the edges, so you'll have to find a relatively open area to minimize jarring transitions (don't place it partially on a hill.
  14. New to this stuff, but maybe changing the naming convention for markers based on what they are for might work (opforSpawn_1, independentSpawn_6, etc,) store them to arrays, then run the function separately on each array.
  15. Hi all. Starting a new mission, and I want the weather to be configurable by an authorized in game admin via the parameters menu. Since it's a multiplayer mission, I want to ensure all clients match the intended setting. In description.ext: class Params { class BR_TimeOfDay { title = "Environment: Time of Day"; values[] = {0,4,8,12,16,18,20,24}; texts[] = {"Random Time of Day", "Dawn","Mid Morning","Noon","Afternoon","Evening","Night","Midnight"}; default = 0; }; }; In initServer.sqf: // === Get the BR_daytime variable from Params in description.ext _BR_Time = ["BR_TimeOfDay"] call BIS_fnc_getParamValue; // === Check if host selected random. If so, select a random value from the options available, if not, use the value they selected, set date on server and broadcast to all clients. if (_BR_Time == 0) then { _randomTime = [4, 8, 12, 16, 18, 20, 24] call BIS_fnc_selectRandom; [_randomTime] call BIS_fnc_paramDaytime; diag_log format["_randomTime value: %1", _randomTime]; // Debug output ["setDate", [2024, 10, 10, _randomTime, 0]] call BIS_fnc_MP; } else { [_BR_Time] call BIS_fnc_paramDaytime; diag_log format["_BR_Time value: %1", _BR_Time]; // Debug output ["setDate", [2024, 10, 10, _BR_Time, 0]] call BIS_fnc_MP; }; The code "works" but I get a hint error: [BIS_fnc_MP] Error: type Array, expected string, on index 1, in ["setDate"[2024,10,10,8,0],0,false,false] In this case, the "8" in ["setDate"[2024,10,10,8,0],0,false,false] does represent the correct value being passed, so I am at a loss as to what is causing it. The same is true when "random" is selected. The time of day changes, but I still get a hint error. 8:22:15 "3den Enhanced: Debug Options initialized." 8:22:57 A null object passed as a target to RemoteExec(Call) 'bis_fnc_objectvar' 8:23:00 Starting mission: 8:23:00 Mission file: SomeName%2eAltis 8:23:00 Mission world: Stratis 8:23:00 Mission directory: C:\Users\Username\Documents\Arma 3\mpmissions\SomeName%2eAltis.Stratis\ 8:23:01 No more slot to add connection at 033057 (3386.8,5735.4) 8:23:01 d:\bis\source\stable\futura\lib\network\networkserver.cpp NetworkServer::OnClientStateChanged:NOT IMPLEMENTED - briefing! 8:23:03 "_BR_Time value: 8" 8:23:04 Mission id: 1c9cc5d519ba6c4a31aabc2dc1d86b6da522b887
  16. Northup

    Removed

    Removed
  17. Ok. So I've got a mission I had to add icons to the player map and GPS. Depends on how you are running the mission. If it's a self hosted thing on your own PC, things that would work in that environment won't work the same way in a dedicated server environment. I'm learning this is true for a lot of stuff: Weather, Time, and.... drawing stuff on the map and GPS. Long and short of it is, anything you draw needs to be drawn on all client machines. Here's a snippet of some code I use to draw an icon on the player map and GPS. Works in a dedicated server environment. Should work regardless. //Draw on Map waitUntil {!isNull findDisplay 12}; findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", { _ALP_towers = missionNamespace getVariable "ALP_triggerTowers"; { _this select 0 drawIcon [getMissionPath format ["\images\tower%1_ca.paa", (_forEachIndex + 1)], [1,1,1,1], (getPos (_x select 0)), 24, 24, 0, "", 1, 0.03, "TahomaB", "right"]; } forEach _ALP_towers; }]; //Draw on GPS private _displays = uiNamespace getVariable ["igui_displays", []]; { private _ctrl = _x displayCtrl 101; if (!isNull _ctrl && ctrlType _ctrl == 101) then { _ctrl ctrlAddEventHandler ["Draw", { _ALP_towers = missionNamespace getVariable "ALP_triggerTowers"; { _this select 0 drawIcon [getMissionPath format ["\images\tower%1_ca.paa", (_forEachIndex + 1)], [1,1,1,1], (getPos (_x select 0)), 24, 24, 0, "", 1, 0.03, "TahomaB", "right"]; } forEach _ALP_towers; }]; }; } forEach _displays; I have this code running in initplayerlocal. This is a mission with no addons, no mods, pure vanilla.
  18. Context: I have mission that contains multiple flagpoles. Each is named (Flag_1, Flag_2) Player captures a flagpole, it should change the marker color of TowerPost%1. Marker will stay the same until another team captures the flagpole. I've tried this, and ultimately, I am unsure of what to use to determine if a flag has been captured, and returning it's name for a split string. Edit: I just modified the aftercommand to get the flagside the same way the existing code did, then use that to set the markercolor. I wasn't able to figure out how to get the name of flag1, split the string, and format towerpost%1 based on that, but this really isn't that much more work. _flag = this; params ["_winSide"]; _afterCommand = {**_get = _flag getVariable ["TER_flagSide",civilian];** _marker1 = "TowerPost1"; _mkrcolor = switch (_get) do { case west: { _marker1 setmarkerColor "ColorBLUFOR"; }; case east: { _marker1 setmarkerColor "ColorOPFOR"; }; case independent: { _marker1 setmarkerColor "ColorIndependent"; }; default { _marker1 setmarkerColor "ColorGrey"; }; }; }; _fncOwnFlag = { params ["_winSide"]; _flagPath = "\a3\data_f\flags\%1.paa"; _fileFlag = switch _winSide do { case west: {"flag_nato_co"}; case east: {"flag_csat_co"}; case independent: {"flag_aaf_co"}; default {"flag_white_co"} }; format [_flagPath,_fileFlag]; }; _actionParams = ["_flag", "_caller", "_actionId", "_arguments"]; _flag setflagAnimationPhase 1; _flag setFlagTexture (civilian call _fncOwnFlag); _flag setVariable ["TER_flagSide",civilian]; _icon = "\a3\ui_f\data\igui\cfg\holdactions\holdaction_takeoff2_ca.paa"; _duration = 10; _addID = [_flag, "Capture Post", _icon, _icon, "_target getVariable [""TER_flagSide"",civilian] != side _this", "true", { }, { params ["_flag", "_caller", "_actionId", "_arguments","_progress","_maxProgress"]; _arguments params ["_actionParams","_fncOwnFlag","_afterCommand"]; _relProgress = _progress/_maxProgress; if (_relProgress < 0.5) then { _flag setFlagAnimationPhase (1-(2*_relProgress)); } else { if (_relProgress == 0.5) then {_flag setFlagTexture (side _caller call _fncOwnFlag)}; _flag setFlagAnimationPhase ((2*_relProgress)-1); }; }, { params ["_flag", "_caller", "_actionId", "_arguments"]; _arguments params ["_actionParams","_fncOwnFlag","_afterCommand"]; _flag setVariable ["TER_flagSide",side _caller]; [] call _afterCommand; }, { params ["_flag", "_caller", "_actionId", "_arguments"]; _arguments params ["_actionParams","_fncOwnFlag","_afterCommand"]; _flag setFlagAnimationPhase 1; _side = _flag getVariable ["TER_flagSide",civilian]; _flag setFlagTexture (_side call _fncOwnFlag); }, [_actionParams,_fncOwnFlag,_afterCommand], _duration, 1.5, false] call BIS_fnc_holdActionAdd; _addID
  19. I am an idiot. Works fine. I shouldn't stay up so late.
  20. Just got around to testing it. Issue: Seems only one marker updates. In the mission I have currently, I have anywhere between 1 and 7 such "capturable" flags. Reproduce: Copy and paste the flag and marker in the 3d editor. Start the mission and capture both flags. Context: The flag (and everything else) is part of a larger mission. I was using attempting to use capturable flags to change the color of a marker, then using the markercolor to act as a switch of sorts. Each flag (will) belong to a composition that spawns in via LARs. The composition is a simple "base" with 3 cargo houses (two military and one medical) and a numbered tower. The idea is that the flag can be captured by any side at any time, and recaptured by another side, ad infinitum, until the match ends. Each cargo house has an object. In the military houses, that object is a supply crate. In the medical it is also a supply crate. The supply crate will restore the players last arsenal loadout, presumably with a timed hold object counter like the flag capture has. The (object that I haven't decided) in the medical house would restore a player's health via addaction, presumably with a hold object counter like the flag capture has. Why a marker? A, to visually ID who owns a given post on the player map and gps, and B, to retrieve who owns the flag --> so that the addactions/hold actions can be restricted to only work with the side that currently "owns" the flag/marker. The post will also contain a respawn point, llso only available to the side holding the flag, which on mission start would ideally be empty (so no spawn at towerpost), instead of a white flag (I couldn't figure out out to default an empty flagpole in my original init). Both the medical and rearm features will have a 5 minute timeout for that player, to prevent pumping and dumping. In addition, there are 3 triggers, each with a veh repair script. Those will be side restricted as well. I've gotten as far as getting my original solution to work with loadouts, but there is no timer yet. Mission File
  21. I'll work on switching to this over the next couple days. This is good stuff. Thanks @Larrow
  22. Trying to enable an addaction based on the player side and color marker matching. This is in the init of a supply box on mission start. Anyone know how I would go about updating it whenever a marker color changes? _mrkr = "TowerPost1"; _mrkrcolor = getMarkerColor _mrkr; _color = switch (side player) do { case west: { "ColorBlufor" }; case east: { "ColorOpfor" }; case independent: { "ColorIndependent" }; default { "ColorGrey" }; }; _canRearm = (_color == _mrkrcolor); if (_canRearm) then { player addAction ["Rearm", { private _customLoadout = player getVariable "enh_savedloadout"; if (isNil "_customLoadout") exitWith { player setUnitLoadout (configFile >> "CfgVehicles" >> typeOf player); systemChat "Could not find custom loadout"; systemChat "Restored default unit loadout"; }; player setUnitLoadout _customLoadout; systemChat "Rearmed and Reloaded"; }]; };
  23. In that case, what would be a better, more efficient approach?
×