I can give you a start, working for an ordinary Smoke grenade:
write the following in the init for the player's unit:
[this] exec "WaitSmoke.sqs"
Then you need two scripts, WaitSmoke.sqs:
_man = _this select 0
_man addEventHandler ["Fired", {if ((_this select 4) == "SmokeShell") then {_grenade = nearestObject [_this select 0, _this select 4]; [_grenade] exec "SmokeThrown.sqs"}}]
exit
which, once a smoke shell is thrown, launches SmokeThrown.sqs:
Edit: improved the following
_grenade = _this select 0
~6
_where = getPos _grenade
_GrenadeLongitude = _where select 0
_GrenadeLatitude = _where select 1
_armour = getPos tanky
_TankLongitude = _armour select 0
_TankLatitude = _armour select 1
_eastwest = (_TankLongitude - _GrenadeLongitude)
_northsouth = (_TankLatitude - _GrenadeLatitude)
_gap = sqrt ( (_eastwest)^2 + (_northsouth)^2)
Hint format ["%1", _gap]
? (_gap > 5): exit
~4
UnassignVehicle tankC
UnassignVehicle tankD
UnassignVehicle tankG
exit
The empty enemy tank is to be named "tanky".
Create a group of three enemy crew, the leader is to be named "tankC" with "this moveInCommander tanky" in his init line.
The other two should be "tankD" with "this moveInDriver tanky" in his init line
and "tankG" with "this moveInGunner tanky" in his init line.
Hope you appreciate Pythagoras. Getting the smoke grenade within 5 metres requires some serious throwing accuracy, so you may want to increase the necessary radius for _gap.