0 Members and 1 Guest are viewing this topic.
; ; Spectating script v1.4 by Kegetys <Kegetys@dnainternet.net> ; http://www.ofp.kege.cjb.net;; Requires Armed Assault Version 1.00 or up;; NV added by Solom?(MySide==1): DeathCamArray=[b1,b2,b3,b4,b5,b6,b7,b8]?(MySide==2): DeathCamArray=[a1,a2,a3,a4,a5,a6,a7,a8] DeathCamArrayTemp = []{if ((not isNull _x) and (alive _x)) then {DeathCamArrayTemp = DeathCamArrayTemp + [_x]}} foreach DeathCamArrayDeathCamArray = DeathCamArrayTempDeathCamNameCache = []{if (name _x == "Error: No unit") then {DeathCamNameCache = DeathCamNameCache + ["object"]} else {DeathCamNameCache = DeathCamNameCache + [name _x]}} foreach DeathCamArrayDeathCamEventHandledVehicles = []{DeathCamEventHandledVehicles = DeathCamEventHandledVehicles + [_x];_x addEventHandler["fired",{if ((_this select 0) == (vehicle DeathCamCurTarget)) then {_this exec "missileCam.sqs"}}]} forEach DeathCamArray_seagull = _this select 2_seagull setpos[0,0,0]DeathCamCurCamTarget = "HeliHEmpty" CreateVehicle getpos player_HeightDummy = "HeliHEmpty" CreateVehicle getpos player~2.5titleCut ["","BLACK OUT", 1.5]~2titleCut ["","BLACK IN", 4]? count DeathCamArray == 0 : _vhltemp = player? count DeathCamArray == 0 : goto "seagull"DeathCamMissileCamEnabled = trueDeathCamNVGEnabled = falseDeathCamCineViewSpecial = 0DeathCamComSpeed = 0.4DeathCamRelPos = [0,-2,0.3]DeathCamTarHeight = 1.7DeathCamIndex = 0DeathCamCurTarget = playerDeathCam = "camera" camCreate [(getpos player select 0)+2, (getpos player select 1)+2, 200 ]DeathCam cameraEffect ["internal","front"]DeathCam camSetTarget vehicle DeathCamCurCamTargetDeathCam camSetPos [(getpos player select 0)+2, (getpos player select 1)+2, 500 ]DeathCam camSetFOV 0.976DeathCam camCommand "inertia on"DeathCam camCommit 0showCinemaBorder false#start_ok = false_ok = createDialog "RscFDFDlgSpectateDeath"ctrlShow [1046001,false];ctrlShow [1046002,false];ctrlShow [1046003,false];ctrlShow [1046004,false];ctrlShow [1046005,false];ctrlShow [1046006,false];ctrlShow [1046007,false];ctrlShow [1046008,true];ctrlShow [1046009,false];ctrlShow [1046010,false];ctrlShow [1046011,false];ctrlShow [1046012,false];ctrlShow [1046013,false];ctrlShow [1046014,false];ctrlShow [1046015,false];ctrlShow [1046016,false];ctrlShow [1046017,false];ctrlShow [1046018,false];ctrlShow [1046019,false];ctrlShow [1046020,false];ctrlShow [1046021,false];ctrlShow [1046022,false];ctrlShow [1046023,false];ctrlShow [1046024,false]ctrlSetText [116969,name player]ctrlShow [1047002,false];ctrlShow [1047001,false];ctrlShow [1048001,false]sliderSetRange [1046010, 0.2, 7] sliderSetPosition [1046010, 1] kegfoo = 0{_i = lbAdd [1047002, DeathCamNameCache select kegfoo];lbSetData [1047002, _i, format["%1",kegfoo]];if (side _x == west) then {lbSetColor[1047002, _i, [0.8,0.8,1,0.8]]};if (side _x == EAST) then {lbSetColor[1047002, _i, [1,0.8,0.8,0.8]]};if (side _x == GUER) then {lbSetColor[1047002, _i, [0.8,1,0.8,0.8]]};if ((name _x == format["%1","Error: No unit"]) and ((DeathCamNameCache select kegfoo) == "object")) then {lbSetColor[1047002, _i, [0,0,0,0.4]]};kegfoo = kegfoo + 1} foreach DeathCamArraylbSetCurSel [1047002, 0] kegfoo = 0{if (player == _x) then {lbSetCurSel [1047002, kegfoo] };kegfoo = kegfoo + 1} foreach DeathCamArrayif !(_ok) then {hint "notok";exit}#loopkegfoo = 0{if (not alive _x) then {lbSetColor[1047002, kegfoo, [0,0,0,0.4]]};kegfoo = kegfoo + 1} foreach DeathCamArray? lbData[1047002,(lbCurSel 1047002)] != format["%1",DeathCamIndex] : _TargetChange = 1? _TargetChange == 1 : DeathCamIndex = lbCurSel 1047002? (_TargetChange == 1) and (dialog): 0 exec "nextCam.sqs"_TargetChange = 0_seagull setpos[0,0,(getpos _vhlTemp select 2)+15]? !dialog : goto "seagull"DeathCam camCommit DeathCamComSpeed_vhlTemp = vehicle DeathCamCurTarget;missileCamif !(_vhlTemp in DeathCamEventHandledVehicles) then {DeathCamEventHandledVehicles = DeathCamEventHandledVehicles + [_vhlTemp];_vhlTemp addEventHandler["fired",{if ((_this select 0) == (vehicle DeathCamCurTarget)) then {_this exec "missileCam.sqs"}}]}; NVG View ?if DeathCamNVGEnabled then {camUseNVG true} else {camUseNVG false}; Cinematic view?? DeathCamCineViewSpecial == 1 : goto "camspecial"; 1st Person view?? DeathCamCineViewSpecial == 3 : goto "camspecial1st"; Gunner view?? DeathCamCineViewSpecial == 4 : goto "camspecialgunnerview"; The following will reduce the effect of warping spectated object to the camera itself_Divider = 100 - (speed _vhlTemp * 2)? _Divider < 10 : _Divider = 10_moX = (getpos DeathCamCurCamTarget select 0) + (((getpos _vhlTemp select 0) - (getpos DeathCamCurCamTarget select 0))/_Divider)_moY = (getpos DeathCamCurCamTarget select 1) + (((getpos _vhlTemp select 1) - (getpos DeathCamCurCamTarget select 1))/_Divider)_moZ = ((getpos DeathCamCurCamTarget select 2)-DeathCamTarHeight) + (((getpos _vhlTemp select 2) - ((getpos DeathCamCurCamTarget select 2)-DeathCamTarHeight))/_Divider); Workaround for an ofp "feature" with the setpos/getpos commands and roadway lods_HeightDummy setpos [getpos _vhlTemp select 0,getpos _vhlTemp select 1,0]_h2 = _vhlTemp distance _HeightDummy_h1 = _h2 + DeathCamTarHeight? vehicle DeathCamCurTarget == DeathCamCurTarget : _moZ = ((_h1)-DeathCamTarHeight) + (((_h2) - ((_h1)-DeathCamTarHeight))/_Divider)DeathCamCurCamTarget setpos[_moX,_moY,_moZ + DeathCamTarHeight]DeathCamCurCamTarget setdir getdir _vhlTemp; Top view?? DeathCamCineViewSpecial == 2 : goto "camspecialTop"_RealRelPos = [(DeathCamRelPos select 0) * (sliderPosition 1046010), (DeathCamRelPos select 1) * (sliderPosition 1046010), (DeathCamRelPos select 2) * ((sliderPosition 1046010)*2)]? ((speed vehicle DeathCamCurTarget >= 150)) : _RealRelPos = [(DeathCamRelPos select 0) * (sliderPosition 1046010) * 5, (DeathCamRelPos select 1) * (sliderPosition 1046010) * 5, (DeathCamRelPos select 2) * ((sliderPosition 1046010)*2) * 5]DeathCam camSetRelPos _RealRelPos goto "loop"; Cinematic view#camspecialDeathCamCurCamTarget setpos[getpos _vhlTemp select 0,getpos _vhlTemp select 1,(getpos _vhlTemp select 2) + DeathCamTarHeight]DeathCamCurCamTarget setdir getdir _vhlTemp; Reset cam if object is far away... if its a very fast object use a more distant view? ((speed vehicle DeathCamCurTarget >= 150)) and (((DeathCam) distance (DeathCamCurCamTarget)) > 400) : DeathCam camSetRelPos [3,400.1,10.0]? ((speed vehicle DeathCamCurTarget < 150)) and (((DeathCam) distance (DeathCamCurCamTarget)) > 100) : DeathCam camSetRelPos DeathCamRelPos; Distance slider sets zoom (FOV) in cinematic viewDeathCam camSetFOV 0.976 * ((sliderPosition 1046010)/5)goto "loop"; Top view#camspecialTopDeathCamCurCamTarget setdir 0DeathCam camSetPos [getpos DeathCamCurCamTarget select 0,getpos DeathCamCurCamTarget select 1,(getpos DeathCamCurCamTarget select 2)+(30 * sliderPosition 1046010 * 1.5)]goto "loop"; User pressed esc, return seagull control#seagulltitleCut ["","BLACK IN", 0]_seagull setpos [0,0,0]_h = sqrt(((_vhlTemp distance _seagull) * (_vhlTemp distance _seagull)) - (sqrt(((getpos _vhlTemp select 0) * (getpos _vhlTemp select 0)) + ((getpos _vhlTemp select 1) * (getpos _vhlTemp select 1))) * sqrt(((getpos _vhlTemp select 0) * (getpos _vhlTemp select 0)) + ((getpos _vhlTemp select 1) * (getpos _vhlTemp select 1))))) + ((getpos _vhlTemp select 2)+15)? _h > 80 : _h = 80_seagull setpos [(getpos _vhlTemp select 0)-15+random 30, (getpos _vhlTemp select 1)-15+random 30,_h]_seagull setvelocity[0,0,0]_seagull switchCamera "INTERNAL"_seagull cameraEffect ["terminate","FRONT"]_seagull camCommand "manual on"; Return back to spectating@((getpos _seagull select 2) > 150) && (count DeathCamArray != 0)titleCut ["","BLACK OUT", 0.5]~0.5titleCut ["","BLACK IN", 2]DeathCam cameraEffect ["internal","front"]goto "start"#camspecial1stclosedialog 821151551titleCut ["","BLACK IN", 1]~0.1_ok = createDialog "RscFDFDlgSpectateDeath1st"hint " Press ESC to return "_name = name (DeathCamArray select DeathCamIndex)if (_name == "Error: No unit") then {_name = ""}ctrlSetText [116969,_name]#camspecial1stloop~0.001(vehicle DeathCamCurTarget) switchCamera "INTERNAL"(vehicle DeathCamCurTarget) cameraEffect ["terminate","FRONT"]? (DeathCamCineViewSpecial == 3) && (dialog) : goto "camspecial1stloop"DeathCamCineViewSpecial = 0titleCut ["","BLACK IN", 1]closedialog 821151552~0.1DeathCam cameraEffect ["internal","front"]goto "start"#camspecialgunnerviewclosedialog 821151551titleCut ["","BLACK IN", 1]~0.1_ok = createDialog "RscFDFDlgSpectateDeath1st"hint " Press ESC to return "_name = name (DeathCamArray select DeathCamIndex)if (_name == format["%1","error: no unit"]) then {_name = ""}ctrlSetText [116969,_name]#camspecialgunnerviewloop~0.001(vehicle DeathCamCurTarget) switchCamera "GUNNER"(vehicle DeathCamCurTarget) cameraEffect ["terminate","BACK"]? (DeathCamCineViewSpecial == 4) && (dialog) : goto "camspecialgunnerviewloop"DeathCamCineViewSpecial = 0titleCut ["","BLACK IN", 1]closedialog 821151552~0.1DeathCam cameraEffect ["internal","front"]goto "start"
DeathCamArray = [A1,A2,A3,A4,A5,A6,A7,A8,B1,B2,B3,B4,B5,B6,B7,B8]{if (side _x != side player) then {DeathCamArray = DeathCamArray - [_x]}} forEach DeathCamArray;
?(MySide==1): DeathCamArray=[b1,b2,b3,b4,b5,b6,b7,b8]?(MySide==2): DeathCamArray=[a1,a2,a3,a4,a5,a6,a7,a8]