Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --initial spawn of convoys
- for airfield, coalitionId in pairs( unitAccess.state ) do
- if airfield ~= nil then
- for ClientName, ClientTemplate in pairs( _DATABASE.Templates.ClientsByName ) do
- if airfield == 'Mineralnye-Vody' then
- unitAccess.bName = 'Mineralnye Vody'
- else
- unitAccess.bName = airfield
- end
- if string.find( ClientTemplate.name, unitAccess.bName, 1, true ) then
- if ClientTemplate.CoalitionID == coalitionId then
- trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 0)
- else
- trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 100)
- end
- end
- end
- if unitAccess.rivalBases[airfield] ~= nil then
- for _,v in ipairs(unitAccess.rivalBases[airfield]) do
- if unitAccess.state[v] ~= coalitionId then
- if coalitionId ~= nil then
- if GROUP:FindByName( coalitionId.."_"..airfield.."_"..v.."_1" ) then
- if unitAccess.curConvoys <= unitAccess.maxConvoys then
- --spawn convoy
- unitAccess.spawnAI[coalitionId.."_"..airfield.."_"..v.."_1"] = SPAWN:New( coalitionId.."_"..airfield.."_"..v.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
- unitAccess.curConvoys = unitAccess.curConvoys + 1
- --spawn opposing AI
- if coalitionId == 1 then
- if GROUP:FindByName( "2_"..v.."_"..airfield.."_1" ) then
- unitAccess.spawnAI["2_"..v.."_"..airfield.."_1"] = SPAWN:New( "2_"..v.."_"..airfield.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
- unitAccess.curConvoys = unitAccess.curConvoys + 1
- end
- else
- if GROUP:FindByName( "1_"..v.."_"..airfield.."_1" ) then
- unitAccess.spawnAI["1_"..v.."_"..airfield.."_1"] = SPAWN:New( "1_"..v.."_"..airfield.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
- unitAccess.curConvoys = unitAccess.curConvoys + 1
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- --function that runs when a base is captured, should not be fired after the initial software load
- function unitAccess.enableDisableUnits( _coalitionId, _airfieldName )
- if _coalitionId ~= unitAccess.state[_airfieldName] then
- trigger.action.outText( unitAccess.firstToUpper( unitAccess.coalitionDesc( _coalitionId )) .. " Captured Base At " .. _airfieldName.."!! "..unitAccess.firstToUpper( unitAccess.coalitionDesc( _coalitionId )).." May Now Spawn At This Base and Sling Load Defense Into Position!!" , 60 , true)
- if _coalitionId == 1 then
- trigger.action.outSoundForCoalition( 1, 'Level_Up.ogg' )
- trigger.action.outSoundForCoalition( 2, 'Death.ogg' )
- elseif _coalitionId == 2 then
- trigger.action.outSoundForCoalition( 2, 'Level_Up.ogg' )
- trigger.action.outSoundForCoalition( 1, 'Death.ogg' )
- end
- --switch spawn flag for base/farp
- if _airfieldName == 'Mineralnye-Vody' then
- unitAccess.bName = 'Mineralnye Vody'
- else
- unitAccess.bName = _airfieldName
- end
- for curairfield, curcoalitionId in pairs( unitAccess.state ) do
- if string.find( _airfieldName, curairfield, 1, true ) then
- unitAccess.state[curairfield] = _coalitionId
- for ClientName, ClientTemplate in pairs( _DATABASE.Templates.ClientsByName ) do
- if string.find( ClientTemplate.name, curairfield, 1, true ) then
- if ClientTemplate.CoalitionID == _coalitionId then
- trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 0)
- else
- trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 100)
- end
- end
- end
- end
- end
- --loop through all convoys, give back unitAccess.curConvoyGrps = unitAccess.curConvoyGrps - 1
- unitAccess.stateF:write(mist.utils.serialize('state', unitAccess.state))
- if unitAccess.rivalBases[_airfieldName] ~= nil then
- for _,v in ipairs(unitAccess.rivalBases[_airfieldName]) do
- if unitAccess.state[v] ~= _coalitionId then
- if unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"] ~= nil then
- unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
- unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
- elseif unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"] ~= nil then
- unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
- unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
- end
- --Set base AI offense spawn up
- if unitAccess.spawnAI[_coalitionId.."_".._airfieldName.."_"..v.."_1"] ~= nil then
- unitAccess.spawnAI[_coalitionId.."_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStart()
- unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
- else
- if GROUP:FindByName( _coalitionId.."_".._airfieldName.."_"..v.."_1" ) then
- unitAccess.spawnAI[_coalitionId.."_".._airfieldName.."_"..v.."_1"] = SPAWN:New( _coalitionId.."_".._airfieldName.."_"..v.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
- unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
- end
- if _coalitionId == 1 then
- if GROUP:FindByName( "2_"..v.."_".._airfieldName.."_1" ) then
- unitAccess.spawnAI["2_"..v.."_".._airfieldName.."_1"] = SPAWN:New( "2_"..v.."_".._airfieldName.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
- unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
- end
- else
- if GROUP:FindByName( "1_"..v.."_".._airfieldName.."_1" ) then
- unitAccess.spawnAI["1_"..v.."_".._airfieldName.."_1"] = SPAWN:New( "1_"..v.."_".._airfieldName.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
- unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
- end
- end
- --shipbattles
- if _airfieldName == 'Batumi' and unitAccess.curShips <= unitAccess.maxShips then
- --unitAccess.spawnAI["__TMP__SHP_".._coalitionId.."_Batumi_1"] = SPAWN:New( "__TMP__SHP_".._coalitionId.."_Batumi_1" ):Limit( 1, 1 ):Array( 0, 1, 100, 100 ):SpawnScheduled( 3600, 1 )
- unitAccess.spawnAI["__TMP__SHP_".._coalitionId.."_Batumi_2"] = SPAWN:New( "__TMP__SHP_".._coalitionId.."_Batumi_2" ):Limit( 1, 1 ):Array( 0, 1, 100, 100 ):SpawnScheduled( 3600, 1 )
- unitAccess.spawnAI["__TMP__SHP_".._coalitionId.."_Batumi_3"] = SPAWN:New( "__TMP__SHP_".._coalitionId.."_Batumi_3" ):Limit( 1, 1 ):Array( 0, 1, 100, 100 ):SpawnScheduled( 3600, 1 )
- unitAccess.curShips = unitAccess.curShips + 2
- end
- if _airfieldName == 'Anapa-Vityazevo' and unitAccess.curShips <= unitAccess.maxShips then
- --unitAccess.spawnAI["__TMP__SHP_".._coalitionId.."_Anapa-Vityazevo_1"] = SPAWN:New( "__TMP__SHP_".._coalitionId.."_Anapa-Vityazevo_1" ):Limit( 1, 1 ):Array( 0, 1, 100, 100 ):SpawnScheduled( 3600, 1 )
- unitAccess.spawnAI["__TMP__SHP_".._coalitionId.."_Anapa-Vityazevo_2"] = SPAWN:New( "__TMP__SHP_".._coalitionId.."_Anapa-Vityazevo_2" ):Limit( 1, 1 ):Array( 0, 1, 100, 100 ):SpawnScheduled( 3600, 1 )
- unitAccess.spawnAI["__TMP__SHP_".._coalitionId.."_Anapa-Vityazevo_3"] = SPAWN:New( "__TMP__SHP_".._coalitionId.."_Anapa-Vityazevo_3" ):Limit( 1, 1 ):Array( 0, 1, 100, 100 ):SpawnScheduled( 3600, 1 )
- unitAccess.curShips = unitAccess.curShips + 2
- end
- end
- else
- if unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"] ~= nil then
- unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
- unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
- elseif unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"] ~= nil then
- unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
- unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
- end
- end
- end
- end
- for i=1, unitAccess.supportGroups do
- if GROUP:FindByName( _coalitionId.."_".._airfieldName.."_Support_"..i ) then
- SPAWN:New( _coalitionId.."_".._airfieldName.."_Support_"..i ):Limit( 8, 1 ):Array( 270, 1, 100, 100 ):Spawn()
- end
- end
- for i=1, unitAccess.hawkGroups do
- if GROUP:FindByName( _coalitionId.."_".._airfieldName.."_Hawk_"..i ) then
- SPAWN:New( _coalitionId.."_".._airfieldName.."_Hawk_"..i ):Limit( 4, 1 ):Array( 0, 1, 100, 100 ):Spawn()
- end
- end
- end
- end
- function unitAccess.eventHandler:onEvent(_event)
- local status, err = pcall(
- function(_event)
- if _event.id == 6 then
- --pilot ejected
- local _unit = _event.initiator
- if _unit:getName() ~= nil and _unit:getTypeName() ~= nil then
- --give spawn amount back on death of base defense
- if string.find( _unit:getName(), '_DEF_', 1, true ) then
- unitAccess.curBaseCapGrps = unitAccess.curBaseCapGrps - 1
- end
- if string.find( _unit:getName(), '_SHP_', 1, true ) then
- unitAccess.curShips = unitAccess.curShips - 1
- end
- end
- elseif _event.id == 10 then
- --basecapture
- local _capBase = _event.place
- local _unit = _event.initiator
- if _capBase:getName() == 'Mineralnye Vody' then
- unitAccess.bName = 'Mineralnye-Vody'
- else
- unitAccess.bName = _capBase:getName()
- end
- env.info('Captured: '..unitAccess.bName)
- --if not string.find( unitAccess.bName, '#', 1, true )
- if unitAccess.state[unitAccess.bName] ~= nil then
- env.info(unitAccess.state[unitAccess.bName]..' ? '.._unit:getCoalition())
- if unitAccess.state[unitAccess.bName] ~= _unit:getCoalition() then
- env.info(unitAccess.state[unitAccess.bName]..' != '.._unit:getCoalition())
- unitAccess.enableDisableUnits( _unit:getCoalition(), unitAccess.bName )
- end
- end
- end
- end
- , _event)
- if (not status) then
- env.error(string.format("Error while handling event %s", err), false)
- end
- end
- --automated spawning system
- unitAccess.CAP2 = { '__TMP__CAP_F-15C', '__TMP__CAP_F16C', '__TMP__CAP_F-5E-3' }
- unitAccess.CAP1 = { '__TMP__CAP_M-2000C', '__TMP__CAP_Su-27', '__TMP__CAP_MiG-21Bis' }
- unitAccess.RND2 = { '__TMP__RND_P-51D', '__TMP__RND_F-86F', '__TMP__RND_MQ-9', '__TMP__RND_Hawk', '__TMP__RND_F/A-18C', '__TMP__RND_F/A-14A', '__TMP__RND_F-117A', '__TMP__RND_B-1B', '__TMP__RND_C-130' }
- unitAccess.RND1 = { '__TMP__RND_MiG-15bis', '__TMP__RND_Fw 190 D-9', '__TMP__RND_Su-17M4', '__TMP__RND_Bf 109 K-4', '__TMP__RND_MiG-23MLD', '__TMP__RND_MiG-25PD', '__TMP__RND_MiG-27K', '__TMP__RND_Tu-160', '__TMP__RND_Yak-40' }
- local US_RNDSpawn = SPAWN
- :New( "__TMP__RND_P-51D" )
- :Limit( 4, 0 )
- :RandomizeTemplate( unitAccess.RND2 )
- :InitRepeat()
- :SpawnScheduled( 1800, 0.5 )
- local RU_RNDSpawn = SPAWN
- :New( "__TMP__RND_Fw 190 D-9" )
- :Limit( 4, 0 )
- :RandomizeTemplate( unitAccess.RND1 )
- :InitRepeat()
- :SpawnScheduled( 1800, 0.5 )
- --spawn helis
- --local US_CASHELI = SPAWN
- --:New( "__TMP__HELI_Mi-28N" )
- --:RandomizeRoute( 1, 6, 1000 )
- --:Limit( 2, 0 )
- --:InitRepeat()
- --:CleanUp(300)
- --:SpawnScheduled( 2700, 0.5 )
- --local RU_CASHELI = SPAWN
- --:New( "__TMP__HELI_AH-64A" )
- --:RandomizeRoute( 1, 6, 1000 )
- --:Limit( 2, 0 )
- --:InitRepeat()
- --:CleanUp(300)
- --:SpawnScheduled( 2700, 0.5 )
- --SpawnInTankers
- local US_KC135 = SPAWN:New( "__TMP__TNK_BlueKC-135" ):RandomizeRoute( 1, 6, 1000 ):Limit( 1, 0 ):InitRepeat():SpawnScheduled( 300, 0.1 )
- local US_S3B = SPAWN:New( "__TMP__TNK_BlueS-3B" ):RandomizeRoute( 1, 6, 1000 ):Limit( 1, 0 ):InitRepeat():SpawnScheduled( 300, 0.1 )
- local RU_IL78 = SPAWN:New( "__TMP__TNK_RedIL-78M" ):RandomizeRoute( 1, 6, 1000 ):Limit( 1, 0 ):InitRepeat():SpawnScheduled( 300, 0.1 )
- function triggerBaseDefenses ( client )
- local clientUnit = UNIT:FindByName( client.ClientName )
- for airfield, airfieldobj in pairs( unitAccess.state ) do
- unitAccess.zoneScheduler[client.ClientName..'_'..airfield..'_'..unitAccess.state[airfield]] = SCHEDULER:New( nil,
- function ( client )
- if unitAccess.zone[airfield] ~= nil and clientUnit ~= nil then
- if ( clientUnit:IsInZone( unitAccess.zone[airfield] ) and not(clientUnit:IsFriendly( unitAccess.state[airfield] )) ) then
- if unitAccess.defSpawn[unitAccess.state[airfield].."_DEF_"..airfield.."_1"] == nil then
- if GROUP:FindByName( unitAccess.state[airfield].."_DEF_"..airfield.."_1" ) then
- if unitAccess.curBaseCapGrps <= unitAccess.maxBaseCapGrps then
- if string.find( airfield, 'FARP', 1, true ) then
- MESSAGE:New( "Player detected at "..airfield.."! Scramble All Attack Choppers, Defend at all cost!", 25 ):ToCoalition(unitAccess.state[airfield])
- unitAccess.defSpawn[unitAccess.state[airfield].."_DEF_"..airfield.."_1"] = SPAWN
- :New( unitAccess.state[airfield].."_DEF_"..airfield.."_1" )
- :Limit( 2, 1 )
- :CleanUp(300)
- :InitRepeat()
- :Spawn()
- else
- MESSAGE:New( "Player detected at "..airfield.."! Scramble All Fighters, Defend at all cost!", 25 ):ToCoalition(unitAccess.state[airfield])
- unitAccess.defSpawn[unitAccess.state[airfield].."_DEF_"..airfield.."_1"] = SPAWN
- :New( unitAccess.state[airfield].."_DEF_"..airfield.."_1" )
- :Limit( 2, 1 )
- :InitRepeat()
- :Spawn()
- end
- unitAccess.curBaseCapGrps = unitAccess.curBaseCapGrps + 1
- end
- end
- end
- else
- --env.info('NOT IN ZONE!')
- end
- end
- end,
- { client },
- 0,
- 5
- )
- end
- end
- local blueClients = SET_CLIENT:New():FilterCoalitions("blue"):FilterStart()
- blueClients:ForEachClient(
- function ( blueClient )
- blueClient:Alive( triggerBaseDefenses )
- end
- )
- local redClients = SET_CLIENT:New():FilterCoalitions("red"):FilterStart()
- redClients:ForEachClient(
- function ( redClient )
- redClient:Alive( triggerBaseDefenses )
- end
- )
- --startEventHandler
- world.addEventHandler(unitAccess.eventHandler)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement