-
Content Count
4792 -
Joined
-
Last visited
-
Medals
-
Medals
-
Posts posted by pierremgi
-
-
debrief screen is not an outro scene. imho, the intro/outro editor is just a compatibility for old scenarios. Right now, you can trigger some camera scene (script or modules) then the final screen.
-
Please a moderator could close this topic.
- topic already answered many times,
- no accurate answer* (MMF_fncs should not be highlighted over any little thing). Here the question doesn't point on spawning a trigger.
- flaming for nuts.
Edited: * except RCA3 for the basic.
-
1
-
-
Very nice! thank you. Just a remark: Letters and logos on Rafale should be slightly lower on visibility.
-
Note:
This kind of "waitUntil" error happens also with BI scripts. I recently got this error when running a virtual CAS module (Vanilla).
The error comes from the requester.fsm (script id 57)
script:
Spoiler_provider setVariable ["BIS_SUPP_requester", player, TRUE];
_provider setVariable ["BIS_SUPP_supportRunCoords", _supportCoords, TRUE];
_provider setVariable ["BIS_SUPP_ammoType", player getVariable "BIS_SUPP_ammoType", TRUE];
_provider setVariable ["BIS_SUPP_supportType", "CAS_Bombing", TRUE];
_provider setVariable ["BIS_SUPP_supporting", TRUE, TRUE];player kbTell [_provider, "BIS_SUPP_protocol", _supportType + "_Request", BIS_SUPP_channels select ([WEST, EAST, RESISTANCE] find side group player)];
_i = 1;
while {markerPos format ["BIS_SUPP_mrkr_%1", _i] distance [0,0,0] > 0} do {_i = _i + 1};
_mrkrName = format ["BIS_SUPP_mrkr_%1", _i];_mrkr = createMarker [_mrkrName, _supportCoords];
_mrkrName setMarkerTextLocal localize "STR_A3_mdl_supp_disp_cas_bombing";
_mrkrName setMarkerTypeLocal "selector_selectedMission";
_mrkrName setMarkerColorLocal "ColorBlack";
_mrkrName setMarkerSizeLocal [0.75, 0.75];[_provider, _mrkrName] spawn {
_provider = _this select 0;
_mrkrName = _this select 1;
waitUntil {!(_provider getVariable "BIS_SUPP_supporting") || !alive _provider};
deleteMarker _mrkrName;
};if (_virtual) then {
_module setVariable ["BIS_SUPP_lastCall", time, TRUE];
};_deleteVirtual = FALSE;
error:
Spoiler19:27:11 Error in expression <ider getVariable "BIS_SUPP_supporting") || !alive _provider};
deleteMarker _mrkr>
Error position: <|| !alive _provider};
deleteMarker _mrkr>
Error Undefined behavior: waitUntil returned nil. True or false expected.
19:27:21 Error in expression <ider getVariable "BIS_SUPP_supporting") || !alive _provider};
deleteMarker _mrkr>
Error position: <|| !alive _provider};
deleteMarker _mrkr>
Error Undefined behavior: waitUntil returned nil. True or false expected.
19:27:21 In last 10000 miliseconds was lost another 658 these messages.
19:27:31 Error in expression <ider getVariable "BIS_SUPP_supporting") || !alive _provider};
deleteMarker _mrkr>
Error position: <|| !alive _provider};
deleteMarker _mrkr>
Error Undefined behavior: waitUntil returned nil. True or false expected.
19:27:31 In last 10000 miliseconds was lost another 696 these messages.
19:27:41 Error in expression <ider getVariable "BIS_SUPP_supporting") || !alive _provider};
deleteMarker _mrkr>
Error position: <|| !alive _provider};
deleteMarker _mrkr>
Error Undefined behavior: waitUntil returned nil. True or false expected.
19:27:41 In last 10000 miliseconds was lost another 710 these messages.
19:27:51 Error in expression <ider getVariable "BIS_SUPP_supporting") || !alive _provider};
deleteMarker _mrkr>
Error position: <|| !alive _provider};
deleteMarker _mrkr>
Error Undefined behavior: waitUntil returned nil. True or false expected.
19:27:51 In last 10000 miliseconds was lost another 646 these messages.Difficult to reproduce. Use the virtual CAS intensively.
-
2
-
1
-
-
Yes, it's possible (your code should work as far as _killer is defined, and myMoneyImage also... say common to all PC), but not advisable.
Your mission event handler (MEH) "entityKilled" must run on every PC (init.sqf, or initPlayer.sqf if you don't need it on dedi server).
So, you don't need to remote exec this kind of function. As rule of thumb, it's preferable to run something locally instead of remote execute it. (net is a bottleneck)
Usually, there is already MEH "entityKilled" for whatever reason in the scenario (or think about it instead of EH "killed" or even MPEH "MPKilled") .
To keep some code local, just write something like:
if (local _killer) then {...};
Think about _instigator , (see MEH) It's more reliable.
Don't forget myMoneyImage for everyone.
-
No. It's ok in fact. No impact on performance. My bad.
-
2 hours ago, Sneax x said:Thx for your answere ! but it didnt changed something on the problem with the wall, also i can see players names if they are in a vehicle but if i get out i cant see their names if they are still in the vehicle, you have any other idears?
(lineIntersectsSurfaces (count = 0) didnt worked... allways called a error)
Sure lineIntersectsSurfaces (count = 0) never worked as is. That demands a little reading on Biki. Same for ASL positions, you don't understand.
try:
onEachFrame { _units = player nearEntities [["CAManBase","air","landVehicle","ship"], 17]; _units = _units - [player]; { _color = switch (playerSide) do { case (EAST): {[1,0,0,1]}; case (WEST): {[0,0,1,1]}; case (independent): {[0,1,0,1]}; case default {[2.55,0.55,0,10]}; }; if (side _x isEqualto playerSide) then { if (([player,"view", _x] checkVisibility [eyePos player,getPosASL vehicle _x])>0 && alive _x) then { drawIcon3D [ "", _color, [visiblePosition _x select 0,visiblePosition _x select 1, (visiblePosition _x select 2) +((_x ModelToWorld (_x selectionPosition "player")) select 2)+ 1.83], 45, -2, -1, name _x, 2, 0.035, "Puristamedium", "center" ]; }; }; }forEach _units; };-
1
-
-
It's a waste of resource. There is no added value to round some randomized offset.
No added value also: (ASLToAGL getPosASL _x)#2 < 2 . you can use getPos except in specific case you paradrop/land players on buildings.
-
1
-
-
If I'm right, list, thisList work with the pre-condition of the trigger, i.e. detected by the trigger (BLUFOR present...)
Perhaps, you should consider a "none" trigger (no list) but scripted conditions like:
west countSide (allUnits select {_x inArea thisTrigger}) >0
or even:
waitUntil {!isNull player}; west countSide (allUnits select {_x inArea thisTrigger}) >0
-
1
-
-
lineIntersect commands wait for ASL position. Try with lineIntersectsSurfaces (count = 0)
_units = nearestObjects[(visiblePosition player),["Man"], 17]; is not the best code for your aim and performance.
Try
_units = player nearEntities [["CAManBase","air","landVehicle","ship"], 17]; instead
-
1
-
-
You could experience some ground collision, using the ASL variant for getPos and setPos, especially due to a gradient for the shore (are you sure +1 is OK?)
You could use the alternate syntax of getPos here :
_reposition = _this setPos (_transportingVehicle getPos [2, - getDir _transportingVehicle]);
I'd rather use the bis_fnc_findSafePos here.
-
What BIKI says:
Since Arma 3 v1.93.145618 returning anything other than true or false from condition will result in appropriate type error.
And the best example is:
// bad waitUntil { bank getVariable "money" > 0 };
// good waitUntil { bank getVariable ["money", 0] > 0 };
But further:
For some unknown reason if you have waitUntil loop active and game is saved/loaded, some variables in the expression may appear undefined for a short time. As a workaround, assign expression to a variable and make sure it is defined before waitUntil checks it:
waitUntil { private _expression = var1 && (var2 > 10); !isNil "_expression" && { _expression } };
That's a real problem. IMHO, no matter, the way you:
waituntil {count list _bzc > 1}; (or waituntil { if (count list _bzc > 1) then {true} else {false} };)
_bzc must be defined or secured:
If you have any doubt, or error message:
waitUntil { private _expression = (count list _bzc > 1); !isNil "_expression" && { _expression } };
Note 1: if defined (in the true private scope) just above, probably a simple sleep could suffice:
private _bzC = createTrigger ["EmptyDetector", getPos player];
...
waitUntil { sleep 1; count list _bzc > 1};
Note 2: for trigger(s), I'd rather use setTriggerActivation just for the area check and setTriggerStatements with count, instead of trigger pre-condition + list. In other words, waitUntil usage is weird in a trigger.
-
2
-
2
-
-
At what time? allPlayers is just an array of the in-game players, not those who disconnected before the command.
-
1
-
-
2 hours ago, Vandeanson said:I am messing around with your code, trying to reverse engineer it so it can be used as holdaction. This I attempt as the double left click is interfering with the ravage food/drink consummation feature. As in, when I drink, I also repack my mag;)
I am having a a hard (but fun) time replicating your "MGImags" variable to suit my need as I do not fully understand the following line:
player setVariable ["MGImags", +((magazinesAmmoFull player) select {(lbdata [_idc,_selectedIndex]) in _x})];
I believe I understand that you are gathering the magazines in an array here.
magazinesAmmoFull player = all magazines in the weapon and inventory
_idc = the location (uniform, vest, backpack) referred to by 619,633,638
_selectedIndex = the index position 0,1,2,... in the uniform, vest or backpack
from the (magazinesAmmoFull player), you seem to be selecting out only specific information via expression (array select expression).
Is this gathering the mags that are the same type as the one you LB double clicked?
Yes but that works with inventory (double click). Nothing to do with hold action.
2 hours ago, Vandeanson said:I am trying to do the same here, this should filter out any magazines that do not have the same classname as the first magazine in my "magaziesAmmoFull player" array. (once this all works, I ll have to find a way to consider all different magazine types in my inventory).
_magtype1 = magazinesAmmoFull player select 0 select 0; private _Magarray = +((magazinesAmmoFull player) select {_magtype1 in _x});
Yes, same as +((magazinesAmmoFull player) select {_x#0 == (magazinesAmmoFull player select 0 select 0 )})
2 hours ago, Vandeanson said:This is where I am at with my holdaction version right now.
_wpn is undefined when running this code:
When a local variable is undefined, define it. I did it in my code.
Don't reverse engine this kind of code for a hold action. Just think about what you want to do with it. For example, repacking the current magazine of the player. Mixing hold action and inventory controls is probably a waste of time.
I can understand how: the double left click is interfering with the ravage food/drink consummation feature. As in, when I drink, I also repack my mag;)
In fact, double-clicking on a magazine like chemlight (and probably your case with drink) will not repack the current mags but reload your weapon (with an existing mag).
Looking for better feature.
EDITED: DONE.
Now, you can repack only the mags of your current weapon. So, the other mags like chemlights, drinks or foods should not interfere.
-
2
-
1
-
-
1 hour ago, johnnyboy said:And, believe it or not, I have started work on Episode 3!
Cool!

-
1
-
-
Don't remoteExec everything. It's a waste of net resource.
You just have to use global commands for (old) commands I gave you. If I'm right, all the other ones have already global effect (EG), in initPlayerLocal.
BIS_fnc_setIdentity is EL. That means, when you run it, you get the effect locally. BUT, this function is already "customized" to make it work in MP and JIP compatible (see BIKI). So you can write:
if (isServer) then {[this,"WhiteHead_04_cfaces_lrrpcamo02",""] call BIS_fnc_setIdentity};
in the init field of the playable unit.
-
2
-
-
Always mind for syntax! findNearestEnemy, addWaypoint knowsAbout
If you want to script something consistent without any experience, start writing light conditions/events for light scenario, in plain language.
Then, mind for the parameters and results for each command/function.
So make difference between types: string, object, array, group, number, code...
You can add a waypoint for a group, not an array.
For an array of groups (as _grpsGuarding), you can write {_wp = _x addWaypoint [<some position>,0]; _wp set..... } forEach _grpsGuarding;
Here, findNearestEnemy usage is wrong (not saying this command is rotten).
I give you the solution for a waypoint back to the initial positions:
_grpGuarding = [grp1,grp2,...];
_grpAndPos = _grpGuarding apply {[_x,getPos leader _x]};
{ _grp = _x #0; _pos = _x #1; _wp = _grp addWaypoint [_pos,0]; _wp setWaypointType "GUARD"; _wp setWaypointBehaviour "SAFE"; _wp setWaypointCombatMode "GREEN"; _wp setWaypointSpeed "LIMITED"} forEach _grpAndPos;
-
2
-
1
-
-
No.
_grpGuardingPos = _grpGuarding apply {getpos leader _x};
(as far as a position of a group is its leader's one).
You'll return something like:
_grpGuarding = [grp1,grp2,...]
and
_grpGuardingPos = [[xxx1,yyy1,0],[xxx2,yyy2,0],...]
Now if you prefer to couple grps and their positions:
_grpAndPos = _grpGuarding apply {[_x,getPos leader _x]};
returning:
_grpAndPos = [ [grp1,[xxx1,yyy1,0]], [grp2,[xxx2,yyy2,0]], ...];
-
1
-
1
-
-
From initPlayerLocal.sqf, you run the script locally. So, that can't work 100%, because you miss the global commands: addWeaponGlobal & addBackpackGlobal.
[object, face, speaker, pitch, callsign] call BIS_fnc_setIdentity is

So remoteExec it.but it's a special function. FOLLOW BIKI for this command.Now, if you don't need to change anything from start, but just customizing your units, edit loadouts in editor. That's simpler.
-
1
-
1
-
-
When you believe in immortality, dying several times a day.
-
2
-
-
-
You repack the magazines in your inventory (so in uniform,vest, backpack and weapons). And you reload the current weapon.
-
1
-
-
Nice! I'm just releasing my own version for that. Very light, because you just have to double click on a mag in inventory. But more solutions, more choices.
-
2
-
1
-
-
MAGAZINES REPACK
Hi all,
Here is a simple script for repacking magazines by double-clicking on them in inventory. Just add it in init.sqf or better, in initPlayerLocal.sqf
parameters: NONE
SpoilerMGI_fnc_repack = { _idc = ctrlIDC (_this select 0); _selectedIndex = _this select 1; player setVariable ["MGImags", +((magazinesAmmoFull player) select {(lbdata [_idc,_selectedIndex]) in _x})]; player setVariable ["MGIselect", true]; false }; 0 = [] spawn { while {true} do { waitUntil {uisleep 0.5; !(isnull (finddisplay 602)) && isnil {player getVariable "MGIselect"}}; if !(isNull (findDisplay 602)) then { ((findDisplay 602) displayCtrl 619) ctrlSetEventHandler ["LBDblClick", "_this call MGI_fnc_repack"]; ((findDisplay 602) displayCtrl 633) ctrlSetEventHandler ["LBDblClick", "_this call MGI_fnc_repack"]; ((findDisplay 602) displayCtrl 638) ctrlSetEventHandler ["LBDblClick", "_this call MGI_fnc_repack"]; }; waitUntil {uisleep 0.5; !isnil {player getVariable "MGIselect"} or isNull (findDisplay 602)}; if (!isnil {player getVariable "MGIselect"}) then { private ["_mag","_wpnType","_wpn"]; if (player getVariable ["MGImags",[]] isEqualTo []) then { _mag = ""; _wpn = "" } else { _cnts = 0; _mag = (player getVariable "MGImags") select 0 select 0; _fullcnt = getnumber (configFile >> "cfgmagazines" >>_mag >> "count"); if (_fullcnt > 0 && _mag in getArray (configFile >> "cfgWeapons" >> currentWeapon player >> "magazines") && currentWeapon player != "") then { { _wpnType = _x select 3; switch (_wpnType) do { case 1: {_wpn = primaryWeapon player}; case 2: {_wpn = handGunWeapon player}; case 4: {_wpn = secondaryWeapon player}; default {_wpn =""}; }; _cnts = _cnts + (_x select 1); player setammo [_wpn,0]; } count (player getVariable ["MGImags",[]]); _remainingShots = _cnts mod _fullcnt; {player removeMagazineGlobal _mag} count (player getVariable ["MGImags",[]]); player addMagazines [_mag, floor (_cnts/_fullcnt)]; if (_remainingShots >0) then { player addMagazine [_mag,_remainingShots]; }; reload player; }; }; }; player setVariable ["MGIselect", nil]; }; };MODIFIED 01/11/19
Have fun!
-
4
-
2
-


Dedicated server and mods [HELP]
in ARMA 3 - QUESTIONS & ANSWERS
Posted
Typically JSRS, enhanced movement mods apply locally, so on client (or hosted server).
These improvements are optional. They don't need (fortunately) to be remote executed. Usually, it's also the case for mods with display/HUD.
Server administrators can decide to allow them at the clients' discretion. Probably same for MAO blood mist because there is no real need to have the same effect on each PC.
On the other hand, some mods, or even commands are made for server (something like skipTime, weather... as example).