From 1f0b1ea355998cf67aecb95d39bcf392b92c04eb Mon Sep 17 00:00:00 2001 From: Ciaran Fisher Date: Wed, 21 Oct 2015 20:22:36 +0100 Subject: [PATCH] Release 1.8 Changed destruction to use explosion as its guaranteed to work. Aircraft is now destroyed after takeoff. --- CSAR.lua | 90 +++++++++++++++++++++++++++++++++----------------- csar-test.miz | Bin 460600 -> 460820 bytes 2 files changed, 59 insertions(+), 31 deletions(-) diff --git a/CSAR.lua b/CSAR.lua index 6716a10..8e4951d 100644 --- a/CSAR.lua +++ b/CSAR.lua @@ -1,6 +1,6 @@ -- CSAR Script for DCS Ciribob - 2015 --- Version 1.7 - 09/10/2015 --- DCS 1.7 Compatible - Needs Mist 4.0.55 or higher! +-- Version 1.8 - 21/10/2015 +-- DCS 1.5 Compatible - Needs Mist 4.0.55 or higher! csar = {} @@ -19,6 +19,8 @@ csar.disableIfNoEjection = false -- if true disables aircraft even if the pilot csar.disableAircraftTimeout = true -- Allow aircraft to be used after 20 minutes if the pilot isnt rescued csar.disableTimeoutTime = 20 -- Time in minutes for TIMEOUT +csar.destructionHeight = 150 -- height in meters an aircraft will be destroyed at if the aircraft is disabled + csar.disableCSARAircraft = false -- if set to TRUE then if a CSAR heli crashes or is shot down, it'll have to be rescued by another CSAR Heli! csar.enableForAI = false -- set to false to disable AI units from being rescued. @@ -102,31 +104,31 @@ function csar.eventHandler:onEvent(_event) elseif _event.id == 15 then --player entered unit - -- if its a sar heli, re-add check status script - for _, _heliName in pairs(csar.csarUnits) do + -- if its a sar heli, re-add check status script + for _, _heliName in pairs(csar.csarUnits) do - if _heliName == _event.initiator:getName() then - -- add back the status script - for _woundedName, _groupInfo in pairs(csar.woundedGroups) do + if _heliName == _event.initiator:getName() then + -- add back the status script + for _woundedName, _groupInfo in pairs(csar.woundedGroups) do - if _groupInfo.side == _event.initiator:getCoalition() then + if _groupInfo.side == _event.initiator:getCoalition() then - --env.info(string.format("Schedule Respawn %s %s",_heliName,_woundedName)) - -- queue up script - -- Schedule timer to check when to pop smoke - timer.scheduleFunction(csar.checkWoundedGroupStatus, { _heliName, _woundedName }, timer.getTime() + 5) - end + --env.info(string.format("Schedule Respawn %s %s",_heliName,_woundedName)) + -- queue up script + -- Schedule timer to check when to pop smoke + timer.scheduleFunction(csar.checkWoundedGroupStatus, { _heliName, _woundedName }, timer.getTime() + 5) end end end + end - if _event.initiator:getName() then + if _event.initiator:getName() then - env.info("Checking Unit - ".._event.initiator:getName()) - csar.checkDisabledAircraftStatus( _event.initiator:getName()) - end + env.info("Checking Unit - ".._event.initiator:getName()) + csar.checkDisabledAircraftStatus( _event.initiator:getName()) + end - return true + return true elseif (_event.id == 9) then -- Pilot dead @@ -138,6 +140,10 @@ function csar.eventHandler:onEvent(_event) return -- error! end + if csar.currentlyDisabled[_unit:getName()] ~= nil then + return --already ejected once! + end + trigger.action.outTextForCoalition(_unit:getCoalition(), "MAYDAY MAYDAY! " .._unit:getTypeName() .. " shot down. No Chute!", 10) --mark plane as broken and unflyable @@ -211,7 +217,7 @@ function csar.eventHandler:onEvent(_event) if _disable then csar.currentlyDisabled[_unit:getName()] = {timeout = (csar.disableTimeoutTime*60) + timer.getTime(),desc=_text, noPilot = false} - -- timer.scheduleFunction(csar.checkDisabledAircraftStatus, _unit:getName(), timer.getTime() + 1) + -- timer.scheduleFunction(csar.checkDisabledAircraftStatus, _unit:getName(), timer.getTime() + 1) end end @@ -249,39 +255,61 @@ function csar.checkDisabledAircraftStatus(_name) if csar.disableAircraftTimeout then - local _text = string.format("This aircraft cannot be flow as the pilot was killed in a crash. Reinforcements in %.2dM,%.2dS", (_time/60), _time%60) + local _text = string.format("This aircraft cannot be flow as the pilot was killed in a crash. Reinforcements in %.2dM,%.2dS\n\nIt will be destroyed on takeoff!", (_time/60), _time%60) --display message, - csar.displayMessageToSAR(_unit,_text, 10) + csar.displayMessageToSAR(_unit,_text, 10,true) else --display message, - csar.displayMessageToSAR(_unit, "This aircraft cannot be flown again as the pilot was killed in a crash", 10) + csar.displayMessageToSAR(_unit, "This aircraft cannot be flown again as the pilot was killed in a crash\n\nIt will be destroyed on takeoff!", 10,true) end else if csar.disableAircraftTimeout then --display message, - csar.displayMessageToSAR(_unit, _details.desc .. " needs to be rescued or reinforcements arrive before this aircraft can be flown again! Reinforcements in "..string.format("%.2dM,%.2d",(_time/60), _time%60), 10) + csar.displayMessageToSAR(_unit, _details.desc .. " needs to be rescued or reinforcements arrive before this aircraft can be flown again! Reinforcements in "..string.format("%.2dM,%.2d",(_time/60), _time%60).."\n\nIt will be destroyed on takeoff!", 10,true) else --display message, - csar.displayMessageToSAR(_unit, _details.desc .. " needs to be rescued before this aircraft can be flown again! ", 10) + csar.displayMessageToSAR(_unit, _details.desc .. " needs to be rescued before this aircraft can be flown again!\n\nIt will be destroyed on takeoff!", 10,true) end end - --destroy in 10 seconds - timer.scheduleFunction(csar.destroyUnit, {_name, _unit:getPlayerName()}, timer.getTime() + 10) + if csar.destroyUnit(_unit) then + return --plane destroyed + else + --check again in 10 seconds + timer.scheduleFunction(csar.checkDisabledAircraftStatus, _name, timer.getTime() + 10) + end + end end end -function csar.destroyUnit(_args) - local _unit = Unit.getByName(_args[1]) +function csar.destroyUnit(_unit) --destroy if the SAME player is still in the aircraft -- if a new player got in it'll be destroyed in a bit anyways - if _unit ~= nil and _unit:getPlayerName() == _args[2] then - _unit:destroy() + if _unit ~= nil and _unit:getPlayerName() ~= nil then + + if csar.heightDiff(_unit) > csar.destructionHeight then + + csar.displayMessageToSAR(_unit, "Aircraft Destroyed as the pilot needs to be rescued!", 10,true) + --if we're off the ground then explode + trigger.action.explosion(_unit:getPoint(),100); + + return true + end + --_unit:destroy() destroy doesnt work for playes who arent the host in multiplayer end + + return false +end + +function csar.heightDiff(_unit) + + local _point = _unit:getPoint() + + return _point.y - land.getHeight({ x = _point.x, y = _point.z }) end csar.addBeaconToGroup = function(_woundedGroupName, _freq) @@ -1304,4 +1332,4 @@ timer.scheduleFunction(csar.addMedevacMenuItem, nil, timer.getTime() + 5) world.addEventHandler(csar.eventHandler) -env.info("Medevac event handler added") \ No newline at end of file +env.info("CSAR event handler added") \ No newline at end of file diff --git a/csar-test.miz b/csar-test.miz index 2974406f909a94717213fbd162fb14a3c3a917d8..d4502c9a8ebab22e9a7d5816b2828a748ed4165a 100644 GIT binary patch delta 10147 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

~riB9C*%mbD72(%^X$V*FrK^6(Q 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 LIR+{P2LJ#7odznr