Advertisement
Guest User

Untitled

a guest
Oct 26th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.45 KB | None | 0 0
  1. --initial spawn of convoys
  2. for airfield, coalitionId in pairs( unitAccess.state ) do
  3. if airfield ~= nil then
  4. for ClientName, ClientTemplate in pairs( _DATABASE.Templates.ClientsByName ) do
  5. if airfield == 'Mineralnye-Vody' then
  6. unitAccess.bName = 'Mineralnye Vody'
  7. else
  8. unitAccess.bName = airfield
  9. end
  10. if string.find( ClientTemplate.name, unitAccess.bName, 1, true ) then
  11. if ClientTemplate.CoalitionID == coalitionId then
  12. trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 0)
  13. else
  14. trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 100)
  15. end
  16. end
  17. end
  18. if unitAccess.rivalBases[airfield] ~= nil then
  19. for _,v in ipairs(unitAccess.rivalBases[airfield]) do
  20. if unitAccess.state[v] ~= coalitionId then
  21. if coalitionId ~= nil then
  22. if GROUP:FindByName( coalitionId.."_"..airfield.."_"..v.."_1" ) then
  23. if unitAccess.curConvoys <= unitAccess.maxConvoys then
  24. --spawn convoy
  25. unitAccess.spawnAI[coalitionId.."_"..airfield.."_"..v.."_1"] = SPAWN:New( coalitionId.."_"..airfield.."_"..v.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
  26. unitAccess.curConvoys = unitAccess.curConvoys + 1
  27. --spawn opposing AI
  28. if coalitionId == 1 then
  29. if GROUP:FindByName( "2_"..v.."_"..airfield.."_1" ) then
  30. unitAccess.spawnAI["2_"..v.."_"..airfield.."_1"] = SPAWN:New( "2_"..v.."_"..airfield.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
  31. unitAccess.curConvoys = unitAccess.curConvoys + 1
  32. end
  33. else
  34. if GROUP:FindByName( "1_"..v.."_"..airfield.."_1" ) then
  35. unitAccess.spawnAI["1_"..v.."_"..airfield.."_1"] = SPAWN:New( "1_"..v.."_"..airfield.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
  36. unitAccess.curConvoys = unitAccess.curConvoys + 1
  37. end
  38. end
  39. end
  40. end
  41. end
  42. end
  43. end
  44. end
  45. end
  46. end
  47.  
  48. --function that runs when a base is captured, should not be fired after the initial software load
  49. function unitAccess.enableDisableUnits( _coalitionId, _airfieldName )
  50. if _coalitionId ~= unitAccess.state[_airfieldName] then
  51. 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)
  52. if _coalitionId == 1 then
  53. trigger.action.outSoundForCoalition( 1, 'Level_Up.ogg' )
  54. trigger.action.outSoundForCoalition( 2, 'Death.ogg' )
  55. elseif _coalitionId == 2 then
  56. trigger.action.outSoundForCoalition( 2, 'Level_Up.ogg' )
  57. trigger.action.outSoundForCoalition( 1, 'Death.ogg' )
  58. end
  59. --switch spawn flag for base/farp
  60. if _airfieldName == 'Mineralnye-Vody' then
  61. unitAccess.bName = 'Mineralnye Vody'
  62. else
  63. unitAccess.bName = _airfieldName
  64. end
  65. for curairfield, curcoalitionId in pairs( unitAccess.state ) do
  66. if string.find( _airfieldName, curairfield, 1, true ) then
  67. unitAccess.state[curairfield] = _coalitionId
  68. for ClientName, ClientTemplate in pairs( _DATABASE.Templates.ClientsByName ) do
  69. if string.find( ClientTemplate.name, curairfield, 1, true ) then
  70. if ClientTemplate.CoalitionID == _coalitionId then
  71. trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 0)
  72. else
  73. trigger.action.setUserFlag("AIRCRAFT_"..ClientTemplate.unitId, 100)
  74. end
  75. end
  76. end
  77. end
  78. end
  79.  
  80. --loop through all convoys, give back unitAccess.curConvoyGrps = unitAccess.curConvoyGrps - 1
  81. unitAccess.stateF:write(mist.utils.serialize('state', unitAccess.state))
  82.  
  83. if unitAccess.rivalBases[_airfieldName] ~= nil then
  84. for _,v in ipairs(unitAccess.rivalBases[_airfieldName]) do
  85. if unitAccess.state[v] ~= _coalitionId then
  86. if unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"] ~= nil then
  87. unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
  88. unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
  89. elseif unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"] ~= nil then
  90. unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
  91. unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
  92. end
  93. --Set base AI offense spawn up
  94. if unitAccess.spawnAI[_coalitionId.."_".._airfieldName.."_"..v.."_1"] ~= nil then
  95. unitAccess.spawnAI[_coalitionId.."_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStart()
  96. unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
  97. else
  98. if GROUP:FindByName( _coalitionId.."_".._airfieldName.."_"..v.."_1" ) then
  99. unitAccess.spawnAI[_coalitionId.."_".._airfieldName.."_"..v.."_1"] = SPAWN:New( _coalitionId.."_".._airfieldName.."_"..v.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
  100. unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
  101. end
  102. if _coalitionId == 1 then
  103. if GROUP:FindByName( "2_"..v.."_".._airfieldName.."_1" ) then
  104. unitAccess.spawnAI["2_"..v.."_".._airfieldName.."_1"] = SPAWN:New( "2_"..v.."_".._airfieldName.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
  105. unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
  106. end
  107. else
  108. if GROUP:FindByName( "1_"..v.."_".._airfieldName.."_1" ) then
  109. unitAccess.spawnAI["1_"..v.."_".._airfieldName.."_1"] = SPAWN:New( "1_"..v.."_".._airfieldName.."_1" ):Limit( 5, 0 ):SpawnScheduled( 3600, 0.5 )
  110. unitAccess.curConvoyGrps = unitAccess.curConvoys + 1
  111. end
  112. end
  113. --shipbattles
  114. if _airfieldName == 'Batumi' and unitAccess.curShips <= unitAccess.maxShips then
  115. --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 )
  116. 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 )
  117. 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 )
  118. unitAccess.curShips = unitAccess.curShips + 2
  119. end
  120. if _airfieldName == 'Anapa-Vityazevo' and unitAccess.curShips <= unitAccess.maxShips then
  121. --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 )
  122. 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 )
  123. 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 )
  124. unitAccess.curShips = unitAccess.curShips + 2
  125. end
  126. end
  127. else
  128. if unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"] ~= nil then
  129. unitAccess.spawnAI["2_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
  130. unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
  131. elseif unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"] ~= nil then
  132. unitAccess.spawnAI["1_".._airfieldName.."_"..v.."_1"]:SpawnScheduleStop()
  133. unitAccess.curConvoyGrps = unitAccess.curConvoys - 1
  134. end
  135. end
  136. end
  137. end
  138. for i=1, unitAccess.supportGroups do
  139. if GROUP:FindByName( _coalitionId.."_".._airfieldName.."_Support_"..i ) then
  140. SPAWN:New( _coalitionId.."_".._airfieldName.."_Support_"..i ):Limit( 8, 1 ):Array( 270, 1, 100, 100 ):Spawn()
  141. end
  142. end
  143. for i=1, unitAccess.hawkGroups do
  144. if GROUP:FindByName( _coalitionId.."_".._airfieldName.."_Hawk_"..i ) then
  145. SPAWN:New( _coalitionId.."_".._airfieldName.."_Hawk_"..i ):Limit( 4, 1 ):Array( 0, 1, 100, 100 ):Spawn()
  146. end
  147. end
  148. end
  149. end
  150.  
  151. function unitAccess.eventHandler:onEvent(_event)
  152. local status, err = pcall(
  153. function(_event)
  154. if _event.id == 6 then
  155. --pilot ejected
  156. local _unit = _event.initiator
  157. if _unit:getName() ~= nil and _unit:getTypeName() ~= nil then
  158. --give spawn amount back on death of base defense
  159. if string.find( _unit:getName(), '_DEF_', 1, true ) then
  160. unitAccess.curBaseCapGrps = unitAccess.curBaseCapGrps - 1
  161. end
  162. if string.find( _unit:getName(), '_SHP_', 1, true ) then
  163. unitAccess.curShips = unitAccess.curShips - 1
  164. end
  165. end
  166. elseif _event.id == 10 then
  167. --basecapture
  168. local _capBase = _event.place
  169. local _unit = _event.initiator
  170. if _capBase:getName() == 'Mineralnye Vody' then
  171. unitAccess.bName = 'Mineralnye-Vody'
  172. else
  173. unitAccess.bName = _capBase:getName()
  174. end
  175. env.info('Captured: '..unitAccess.bName)
  176. --if not string.find( unitAccess.bName, '#', 1, true )
  177. if unitAccess.state[unitAccess.bName] ~= nil then
  178. env.info(unitAccess.state[unitAccess.bName]..' ? '.._unit:getCoalition())
  179. if unitAccess.state[unitAccess.bName] ~= _unit:getCoalition() then
  180. env.info(unitAccess.state[unitAccess.bName]..' != '.._unit:getCoalition())
  181. unitAccess.enableDisableUnits( _unit:getCoalition(), unitAccess.bName )
  182. end
  183. end
  184. end
  185. end
  186. , _event)
  187. if (not status) then
  188. env.error(string.format("Error while handling event %s", err), false)
  189. end
  190. end
  191.  
  192. --automated spawning system
  193. unitAccess.CAP2 = { '__TMP__CAP_F-15C', '__TMP__CAP_F16C', '__TMP__CAP_F-5E-3' }
  194. unitAccess.CAP1 = { '__TMP__CAP_M-2000C', '__TMP__CAP_Su-27', '__TMP__CAP_MiG-21Bis' }
  195. 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' }
  196. 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' }
  197.  
  198. local US_RNDSpawn = SPAWN
  199. :New( "__TMP__RND_P-51D" )
  200. :Limit( 4, 0 )
  201. :RandomizeTemplate( unitAccess.RND2 )
  202. :InitRepeat()
  203. :SpawnScheduled( 1800, 0.5 )
  204.  
  205. local RU_RNDSpawn = SPAWN
  206. :New( "__TMP__RND_Fw 190 D-9" )
  207. :Limit( 4, 0 )
  208. :RandomizeTemplate( unitAccess.RND1 )
  209. :InitRepeat()
  210. :SpawnScheduled( 1800, 0.5 )
  211.  
  212. --spawn helis
  213. --local US_CASHELI = SPAWN
  214. --:New( "__TMP__HELI_Mi-28N" )
  215. --:RandomizeRoute( 1, 6, 1000 )
  216. --:Limit( 2, 0 )
  217. --:InitRepeat()
  218. --:CleanUp(300)
  219. --:SpawnScheduled( 2700, 0.5 )
  220.  
  221. --local RU_CASHELI = SPAWN
  222. --:New( "__TMP__HELI_AH-64A" )
  223. --:RandomizeRoute( 1, 6, 1000 )
  224. --:Limit( 2, 0 )
  225. --:InitRepeat()
  226. --:CleanUp(300)
  227. --:SpawnScheduled( 2700, 0.5 )
  228.  
  229. --SpawnInTankers
  230. local US_KC135 = SPAWN:New( "__TMP__TNK_BlueKC-135" ):RandomizeRoute( 1, 6, 1000 ):Limit( 1, 0 ):InitRepeat():SpawnScheduled( 300, 0.1 )
  231. local US_S3B = SPAWN:New( "__TMP__TNK_BlueS-3B" ):RandomizeRoute( 1, 6, 1000 ):Limit( 1, 0 ):InitRepeat():SpawnScheduled( 300, 0.1 )
  232. local RU_IL78 = SPAWN:New( "__TMP__TNK_RedIL-78M" ):RandomizeRoute( 1, 6, 1000 ):Limit( 1, 0 ):InitRepeat():SpawnScheduled( 300, 0.1 )
  233.  
  234. function triggerBaseDefenses ( client )
  235. local clientUnit = UNIT:FindByName( client.ClientName )
  236. for airfield, airfieldobj in pairs( unitAccess.state ) do
  237. unitAccess.zoneScheduler[client.ClientName..'_'..airfield..'_'..unitAccess.state[airfield]] = SCHEDULER:New( nil,
  238. function ( client )
  239. if unitAccess.zone[airfield] ~= nil and clientUnit ~= nil then
  240. if ( clientUnit:IsInZone( unitAccess.zone[airfield] ) and not(clientUnit:IsFriendly( unitAccess.state[airfield] )) ) then
  241. if unitAccess.defSpawn[unitAccess.state[airfield].."_DEF_"..airfield.."_1"] == nil then
  242. if GROUP:FindByName( unitAccess.state[airfield].."_DEF_"..airfield.."_1" ) then
  243. if unitAccess.curBaseCapGrps <= unitAccess.maxBaseCapGrps then
  244. if string.find( airfield, 'FARP', 1, true ) then
  245. MESSAGE:New( "Player detected at "..airfield.."! Scramble All Attack Choppers, Defend at all cost!", 25 ):ToCoalition(unitAccess.state[airfield])
  246. unitAccess.defSpawn[unitAccess.state[airfield].."_DEF_"..airfield.."_1"] = SPAWN
  247. :New( unitAccess.state[airfield].."_DEF_"..airfield.."_1" )
  248. :Limit( 2, 1 )
  249. :CleanUp(300)
  250. :InitRepeat()
  251. :Spawn()
  252. else
  253. MESSAGE:New( "Player detected at "..airfield.."! Scramble All Fighters, Defend at all cost!", 25 ):ToCoalition(unitAccess.state[airfield])
  254. unitAccess.defSpawn[unitAccess.state[airfield].."_DEF_"..airfield.."_1"] = SPAWN
  255. :New( unitAccess.state[airfield].."_DEF_"..airfield.."_1" )
  256. :Limit( 2, 1 )
  257. :InitRepeat()
  258. :Spawn()
  259. end
  260. unitAccess.curBaseCapGrps = unitAccess.curBaseCapGrps + 1
  261. end
  262. end
  263. end
  264. else
  265. --env.info('NOT IN ZONE!')
  266. end
  267. end
  268. end,
  269. { client },
  270. 0,
  271. 5
  272. )
  273. end
  274. end
  275.  
  276. local blueClients = SET_CLIENT:New():FilterCoalitions("blue"):FilterStart()
  277. blueClients:ForEachClient(
  278. function ( blueClient )
  279. blueClient:Alive( triggerBaseDefenses )
  280. end
  281. )
  282.  
  283. local redClients = SET_CLIENT:New():FilterCoalitions("red"):FilterStart()
  284. redClients:ForEachClient(
  285. function ( redClient )
  286. redClient:Alive( triggerBaseDefenses )
  287. end
  288. )
  289.  
  290. --startEventHandler
  291. world.addEventHandler(unitAccess.eventHandler)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement