OK, there still needs to be a tiny bit of dynamic code in my solution! Still, there's absolutely no dynamic variables, so I hope you forgive me...
triggers = []; // List of triggers that we will make.
_tPosX = (getPos player) select 0;
_tSize = 20;
for "_i" from 0 to 2 do
{
_tPosY = ((getPos player) select 1) + 50 * _i;
_trigger = createTrigger ["EmptyDetector", [_tPosX, _tPosY]];
_trigger setTriggerArea [_tSize, _tSize, 0, true];
_trigger setTriggerActivation ["WEST", "PRESENT", true];
_trigger setTriggerStatements ["this", format ["nul = [%1] execVM 'trigger.sqf'", _i], ""];
triggers = triggers + [_trigger]; // Store this trigger into the list.
};
_triggerIndex = _this select 0;
_trigger = triggers select _triggerIndex; // Take the trigger out of the list again.
// do stuff with the trigger...
Frankly, though, I imagine all you and he wanted to do was have access to the objects that triggered the trigger (thisList , when used within the code in a trigger, is the same as "list _trigger" used in a script), in which case, it could have just been:
_trigger setTriggerStatements ["this", "nul = thisList execVM 'trigger.sqf'", ""];