Guest User

ATC.lua

a guest
May 30th, 2015
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 23.97 KB | None | 0 0
  1. print('ATCLUA:START----------------')
  2.  
  3. local mainMenuPos, parameters = ...
  4. --print('parameters:'..parameters)
  5. --Menu
  6. local menus = data.menus
  7.  
  8. menus['ATC'] = {
  9.     name = _('ATC'),
  10.     items = {
  11.         {   name = _('Inbound'),
  12.             command = sendMessage.new(Message.wMsgLeaderInbound),
  13.             condition = {
  14.                 check = function(self)
  15.                     return data.pUnit:inAir()
  16.                 end
  17.             }
  18.         },
  19.         {   name = _('I\'m lost'),
  20.             command = sendMessage.new(Message.wMsgLeaderRequestAzimuth),
  21.             condition = {
  22.                 check = function(self)
  23.                     return data.pUnit:inAir()
  24.                 end
  25.             }
  26.         },
  27.         {   name = _('Request startup'),
  28.             command = sendMessage.new(Message.wMsgLeaderRequestEnginesLaunch),
  29.             condition = {
  30.                 check = function(self)
  31.                     return not data.pUnit:inAir()
  32.                 end
  33.             }
  34.         }
  35.     }
  36. }
  37.  
  38. menus['VACATC'] = {
  39.     name = _('VACATC'),
  40.     items = {
  41.         { name = _('Nearest'), submenu={ name = _('Nearest'),items = {}}},
  42.         { name = _('Airports 1'), submenu={ name = _('Airports 1'),items = {}}},
  43.         { name = _('Airports 2'), submenu={ name = _('Airports 2'),items = {}}},
  44.         { name = _('Airports 3'), submenu={ name = _('Airports 3'),items = {}}},
  45.         { name = _('FARPs'), submenu={ name = _('FARPs'),items = {}}},
  46.         { name = _('Ships'), submenu={ name = _('Ships'),items = {}}},
  47.        
  48.     }
  49. }
  50.  
  51. local function getATCs()
  52.        
  53.     local atcs = {}
  54.    
  55.     local neutralAirbases = coalition.getServiceProviders(coalition.side.NEUTRAL, coalition.service.ATC)
  56.     for i, airbase in pairs(neutralAirbases) do
  57.         table.insert(atcs, airbase)
  58.     end
  59.    
  60.     local selfCoalition = data.pUnit:getCoalition()
  61.     local ourAirbases = coalition.getServiceProviders(selfCoalition, coalition.service.ATC)
  62.     for i, airbase in pairs(ourAirbases) do
  63.         table.insert(atcs, airbase)
  64.     end
  65.    
  66.     --[[
  67.     local enemyCoalition = selfCoalition == coalition.RED and coalition.BLUE or coalition.RED
  68.     local ourAirbases = coalition.getServiceProviders(enemycoalition. coalition.service.ATC)
  69.     --print("ourAirbases size = "..table.getn(ourAirbases))
  70.     for i, airbase in pairs(ourAirbases) do
  71.         if filterAirbaseType(atc) then
  72.             table.insert(atcs, airbase)
  73.         end
  74.     end
  75.     --]]
  76.        
  77.     local selfPoint = data.pUnit:getPosition().p
  78.     local function distanceSorter(lu, ru)
  79.            
  80.         local lpoint = lu:getPoint()
  81.         local ldist2 = (lpoint.x - selfPoint.x) * (lpoint.x - selfPoint.x) + (lpoint.z - selfPoint.z) * (lpoint.z - selfPoint.z)
  82.        
  83.         local rpoint = ru:getPoint()
  84.         local rdist2 = (rpoint.x - selfPoint.x) * (rpoint.x - selfPoint.x) + (rpoint.z - selfPoint.z) * (rpoint.z - selfPoint.z)
  85.        
  86.         return ldist2 < rdist2
  87.     end
  88.        
  89.     table.sort(atcs, distanceSorter)
  90.    
  91.     return atcs
  92. end
  93.  
  94.  
  95. local function getVacATCs()
  96.     print('getVacATCs:START---------------')
  97.     local atcs = {}
  98.    
  99.     local neutralAirbases = coalition.getServiceProviders(coalition.side.NEUTRAL, coalition.service.ATC)
  100.     for i, airbase in pairs(neutralAirbases) do
  101.         table.insert(atcs, airbase)
  102.     end
  103.    
  104.     local redAirbases = coalition.getServiceProviders(coalition.side.RED,coalition.service.ATC)
  105.     for i, airbase in pairs(redAirbases) do
  106.         table.insert(atcs, airbase)
  107.     end
  108.     local blueAirbases = coalition.getServiceProviders(coalition.side.BLUE,coalition.service.ATC)
  109.     for i, airbase in pairs(blueAirbases) do
  110.         table.insert(atcs, airbase)
  111.     end
  112.    
  113.    
  114.    
  115.     -- local selfCoalition = data.pUnit:getCoalition()
  116.     -- local ourAirbases = coalition.getServiceProviders(selfCoalition, coalition.service.ATC)
  117.     -- for i, airbase in pairs(ourAirbases) do
  118.         -- table.insert(atcs, airbase)
  119.     -- end
  120.    
  121.    
  122.    
  123.    
  124.     --[[
  125.     local enemyCoalition = selfCoalition == coalition.RED and coalition.BLUE or coalition.RED
  126.     local ourAirbases = coalition.getServiceProviders(enemycoalition. coalition.service.ATC)
  127.     --print("ourAirbases size = "..table.getn(ourAirbases))
  128.     for i, airbase in pairs(ourAirbases) do
  129.         if filterAirbaseType(atc) then
  130.             table.insert(atcs, airbase)
  131.         end
  132.     end
  133.     --]]
  134.        
  135.     local selfPoint = data.pUnit:getPosition().p
  136.     local function distanceSorter(lu, ru)
  137.            
  138.         local lpoint = lu:getPoint()
  139.         local ldist2 = (lpoint.x - selfPoint.x) * (lpoint.x - selfPoint.x) + (lpoint.z - selfPoint.z) * (lpoint.z - selfPoint.z)
  140.        
  141.         local rpoint = ru:getPoint()
  142.         local rdist2 = (rpoint.x - selfPoint.x) * (rpoint.x - selfPoint.x) + (rpoint.z - selfPoint.z) * (rpoint.z - selfPoint.z)
  143.        
  144.         return ldist2 < rdist2
  145.     end
  146.    
  147.     local function callsignSorter(l, r)
  148.        
  149.         local lcallsign = l:getCallsign()
  150.         local rcallsign = r:getCallsign()
  151.        
  152.         return lcallsign < rcallsign
  153.    
  154.     end
  155.    
  156.     table.sort(atcs, callsignSorter)
  157.    
  158.    
  159.     print('getVacATCs:END-----------------')
  160.     return atcs
  161.    
  162. end
  163.  
  164. local function buildATCs(self, menu)
  165.     print('BUILDATCS:START-------------')
  166.     local ATCs = {}
  167.     ATCs.vac = getVacATCs()
  168.     ATCs.nearest = getATCs()
  169.     if  not data.showingOnlyPresentRecepients or
  170.         getRecepientsState(ATCs.vac) ~= RecepientState.VOID then
  171.         menu.items[mainMenuPos] = buildRecepientsMenu2(ATCs, _('ATC'),menus['VACATC'], { name = _('ATC'), submenu = menus['ATC'] })
  172.        
  173.     end
  174.     print('BUILDATCS:END---------------')
  175. end
  176.  
  177.  
  178.  
  179. table.insert(data.rootItem.builders, buildATCs)
  180.  
  181.  
  182.  
  183. --Dialogs
  184.  
  185. --Departure Airdrome
  186.  
  187. dialogsData.dialogs['Departure Airdrome'] = {
  188.     name = _('Departure Airdrome'),
  189.     menus = {
  190.         ['Ready to taxi to runway'] = {
  191.             name = _('Ready to taxi to runway'),
  192.             items = {
  193.                 { name = _('Request to taxi to runway'),    command = sendMessage.new(Message.wMsgLeaderRequestTaxiToRunway) },
  194.                 { name = _('Request control hover'),
  195.                     command = sendMessage.new(Message.wMsgLeaderRequestControlHover),
  196.                     condition = {
  197.                         check = function(self)
  198.                             return data.pUnit:hasAttribute('Helicopters')
  199.                         end
  200.                     }
  201.                 },
  202.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  203.             }
  204.         },
  205.         ['Hover Check'] = {
  206.             name = _('Hover Check'),
  207.             items = {
  208.                 { name = _('Request to taxi to runway'),    command = sendMessage.new(Message.wMsgLeaderRequestTaxiToRunway) },
  209.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  210.             }
  211.         },     
  212.         ['Ready to takeoff'] = {
  213.             name = _('Ready to takeoff'),
  214.             items = {
  215.                 { name = _('Request takeoff'),              command = sendMessage.new(Message.wMsgLeaderRequestTakeOff) },
  216.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  217.             }
  218.         },
  219.         ['Taking Off'] = {
  220.             name = _('Taking Off'),
  221.             items = {
  222.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  223.             }
  224.         }
  225.     }
  226. }
  227. dialogsData.dialogs['Departure Airdrome'].stages = {
  228.     ['Closed'] = { 
  229.         [events.NOTIFY_BIRTH_ON_RAMP_HOT]                   = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  230.         [events.DENY_TAKEOFF_FROM_AIRDROME]                 = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  231.         [events.NOTIFY_BIRTH_ON_RUNWAY]                     = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Taking Off'], newStage = 'Taking Off' },
  232.         [events.CLEAR_TO_TAKEOFF_FROM_AIRDROME]             = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Taking Off'], newStage = 'Taking Off' },
  233.         [events.STARTUP_PERMISSION_FROM_AIRDROME]           = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to taxi to runway'], newStage = 'Ready to taxi to runway' },
  234.         [Message.wMsgATCClearedToTaxiRunWay]                = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  235.         [events.TAKEOFF]                                    = TERMINATE(),
  236.         [events.LANDING]                                    = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' }
  237.     },
  238.     ['Hover Check'] = {
  239.         [Message.wMsgATCClearedToTaxiRunWay]            = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  240.         [Message.wMsgATCYouHadTakenOffWithNoPermission] = TERMINATE(),
  241.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  242.         [events.ENGINE_SHUTDOWN]                        = TERMINATE()
  243.     }, 
  244.     ['Ready to taxi to runway'] = {
  245.         [Message.wMsgATCClearedToTaxiRunWay]            = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  246.         [Message.wMsgATCClearedControlHover]            = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Hover Check'], newStage = 'Hover Check' },
  247.         [events.TAKEOFF]                                = TERMINATE(),
  248.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  249.         [events.ENGINE_SHUTDOWN]                        = TERMINATE()
  250.     },
  251.     ['Ready to takeoff'] = {
  252.         [Message.wMsgATCYouAreClearedForTO]             = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Taking Off'], newStage = 'Taking Off' },
  253.         [events.TAKEOFF]                                = TERMINATE(),
  254.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  255.         [events.ENGINE_SHUTDOWN]                        = TERMINATE()
  256.     },
  257.     ['Taking Off'] = {
  258.         [Message.wMsgATCClearedToTaxiRunWay]            = { menu = dialogsData.dialogs['Departure Airdrome'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  259.         [events.TAKEOFF]                                = TERMINATE(),
  260.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  261.         [events.ENGINE_SHUTDOWN]                        = TERMINATE()
  262.     }
  263. }
  264.  
  265. --Departure Helipad
  266.  
  267. dialogsData.dialogs['Departure Helipad'] = {
  268.     name = _('Departure Helipad'),
  269.     menus = {
  270.         ['Hover Check'] = {
  271.             name = _('Hover Check'),
  272.             items = {
  273.                 { name = _('Request takeoff'),              command = sendMessage.new(Message.wMsgLeaderRequestTakeOff) },
  274.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  275.             }
  276.         },
  277.         ['Ready to takeoff'] = {
  278.             name = _('Ready to takeoff'),
  279.             items = {
  280.                 { name = _('Request takeoff'),              command = sendMessage.new(Message.wMsgLeaderRequestTakeOff) },
  281.                 { name = _('Request control hover'),
  282.                         command = sendMessage.new(Message.wMsgLeaderRequestControlHover),
  283.                         condition = {
  284.                             check = function(self)
  285.                                 return data.pUnit:hasAttribute('Helicopters')
  286.                             end
  287.                         }
  288.                 },
  289.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  290.             }
  291.         },
  292.         ['Taking Off'] = {
  293.             name = _('Taking Off'),
  294.             items = {
  295.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  296.             }
  297.         }      
  298.     }
  299. }
  300. dialogsData.dialogs['Departure Helipad'].stages = {
  301.     ['Closed'] = {
  302.         [events.DENY_TAKEOFF_FROM_HELIPAD]                  = { menu = dialogsData.dialogs['Departure Helipad'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  303.         [events.NOTIFY_BIRTH_ON_HELIPAD_HOT]                = { menu = dialogsData.dialogs['Departure Helipad'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  304.         [events.STARTUP_PERMISSION_FROM_HELIPAD]            = { menu = dialogsData.dialogs['Departure Helipad'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  305.         [events.CLEAR_TO_TAKEOFF_FROM_HELIPAD]              = { menu = dialogsData.dialogs['Departure Helipad'].menus['Taking Off'], newStage = 'Taking Off' },
  306.         [events.TAKEOFF]                                    = TERMINATE(),
  307.         [events.LANDING]                                    = { menu = dialogsData.dialogs['Departure Helipad'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' }
  308.     },
  309.     ['Hover Check'] = {
  310.         [Message.wMsgATCYouAreClearedForTO]         = { menu = dialogsData.dialogs['Departure Helipad'].menus['Taking Off'], newStage = 'Taking Off' },
  311.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  312.         [events.ENGINE_SHUTDOWN]                            = TERMINATE()
  313.     },
  314.     ['Ready to takeoff'] = {
  315.         [Message.wMsgATCYouAreClearedForTO]         = { menu = dialogsData.dialogs['Departure Helipad'].menus['Taking Off'], newStage = 'Taking Off' },
  316.         [Message.wMsgATCClearedControlHover]            = { menu = dialogsData.dialogs['Departure Helipad'].menus['Hover Check'], newStage = 'Hover Check' },
  317.         [events.TAKEOFF]                                    = TERMINATE(),
  318.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  319.         [events.ENGINE_SHUTDOWN]                            = TERMINATE()
  320.     },
  321.     ['Taking Off'] = {
  322.         [events.TAKEOFF]                                    = TERMINATE(),
  323.         [Message.wMsgATCTaxiToParkingArea]              = TERMINATE(),
  324.         [events.ENGINE_SHUTDOWN]                            = TERMINATE()
  325.     }
  326. }
  327.  
  328. --Departure Ship
  329.  
  330. dialogsData.dialogs['Departure Ship'] = {
  331.     name = _('Departure Ship'),
  332.     menus = {
  333.         ['Hover Check'] = {
  334.             name = _('Hover Check'),
  335.             items = {
  336.                 { name = _('Request to taxi to runway'),    command = sendMessage.new(Message.wMsgLeaderRequestTaxiToRunway) },
  337.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  338.             }
  339.         },     
  340.         ['Ready to takeoff'] = {
  341.             name = _('Ready to takeoff'),
  342.             items = {
  343.                 { name = _('Request takeoff'),              command = sendMessage.new(Message.wMsgLeaderRequestTakeOff) },
  344.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) },
  345.                 { name = _('Request control hover'),
  346.                     command = sendMessage.new(Message.wMsgLeaderRequestControlHover),
  347.                     condition = {
  348.                         check = function(self)
  349.                             return data.pUnit:hasAttribute('Helicopters')
  350.                         end
  351.                     }
  352.                 }
  353.             }
  354.         },
  355.         ['Taking Off'] = {
  356.             name = _('Taking Off'),
  357.             items = {
  358.                 { name = _('Abort takeoff'),                command = sendMessage.new(Message.wMsgLeaderAbortTakeoff) }
  359.             }
  360.         }
  361.     }
  362. }
  363. dialogsData.dialogs['Departure Ship'].stages = {
  364.     ['Closed'] = { 
  365.         [events.NOTIFY_BIRTH_ON_SHIP_HOT]                   = { menu = dialogsData.dialogs['Departure Ship'].menus['Taking Off'], newStage = 'Taking Off' },
  366.         [events.DENY_TAKEOFF_FROM_SHIP]                     = { menu = dialogsData.dialogs['Departure Ship'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  367.         [events.CLEAR_TO_TAKEOFF_FROM_SHIP]                 = { menu = dialogsData.dialogs['Departure Ship'].menus['Taking Off'], newStage = 'Taking Off' },
  368.         [events.STARTUP_PERMISSION_FROM_SHIP]               = { menu = dialogsData.dialogs['Departure Ship'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' },
  369.         [events.TAKEOFF]                                    = TERMINATE(),
  370.         [events.LANDING]                                    = { menu = dialogsData.dialogs['Departure Ship'].menus['Ready to takeoff'], newStage = 'Ready to takeoff' }
  371.     },
  372.     ['Hover Check'] = {
  373.         [Message.wMsgATCYouHadTakenOffWithNoPermission]     = TERMINATE(),
  374.         [Message.wMsgATCTaxiToParkingArea]                  = TERMINATE(),
  375.         [events.ENGINE_SHUTDOWN]                            = TERMINATE()
  376.     },
  377.     ['Ready to takeoff'] = {
  378.         [Message.wMsgATCClearedControlHover]                = { menu = dialogsData.dialogs['Departure Ship'].menus['Hover Check'], newStage = 'Hover Check' },
  379.         [Message.wMsgATCYouAreClearedForTO]                 = { menu = dialogsData.dialogs['Departure Ship'].menus['Taking Off'], newStage = 'Taking Off' },
  380.         [events.TAKEOFF]                                    = TERMINATE(),
  381.         [Message.wMsgATCTaxiToParkingArea]                  = TERMINATE(),
  382.         [events.ENGINE_SHUTDOWN]                            = TERMINATE()
  383.     },
  384.     ['Taking Off'] = {
  385.         [events.TAKEOFF]                                    = TERMINATE(),
  386.         [Message.wMsgATCTaxiToParkingArea]                  = TERMINATE(),
  387.         [events.ENGINE_SHUTDOWN]                            = TERMINATE()
  388.     }
  389. }
  390.  
  391. --Arrival
  392.  
  393. dialogsData.dialogs['Arrival'] = {}
  394. dialogsData.dialogs['Arrival'].name = _('Arrival')
  395. dialogsData.dialogs['Arrival'].menus = {}
  396. dialogsData.dialogs['Arrival'].menus['Inbound'] = {
  397.     name = _('Inbound'),
  398.     items = {
  399.         { name = _('Abort Inbound'),                        command = sendMessage.new(Message.wMsgLeaderAbortInbound) },
  400.         { name = _('I\'m lost'),                            command = sendMessage.new(Message.wMsgLeaderRequestAzimuth)},      
  401.     }
  402. }
  403. dialogsData.dialogs['Arrival'].menus['Orbit'] = {
  404.     name = _('Orbit'),
  405.     items = {
  406.         { name = _('Abort Inbound'),                        command = sendMessage.new(Message.wMsgLeaderAbortInbound) },
  407.         { name = _('I\'m lost'),                            command = sendMessage.new(Message.wMsgLeaderRequestAzimuth)}
  408.     }
  409. }
  410. dialogsData.dialogs['Arrival'].menus['Ready to land'] = {
  411.     name = _('Ready to land'),
  412.     items = {
  413.         { name = _('Request Landing'),                      command = sendMessage.new(Message.wMsgLeaderRequestLanding) },
  414.         { name = _('Abort Inbound'),                        command = sendMessage.new(Message.wMsgLeaderAbortInbound) },
  415.         { name = _('I\'m lost'),                            command = sendMessage.new(Message.wMsgLeaderRequestAzimuth)}
  416.     }
  417. }
  418. dialogsData.dialogs['Arrival'].menus['Landing'] = {
  419.     name = _('Landing'),
  420.     items = {
  421.         { name = _('Abort Inbound'),                        command = sendMessage.new(Message.wMsgLeaderAbortInbound) }    
  422.     }
  423. }
  424. dialogsData.dialogs['Arrival'].menus['Parking'] = {
  425.     name = _('Parking'),
  426.     items = {
  427.         { name = _('Request takeoff'),                      command = sendMessage.new(Message.wMsgLeaderRequestTakeOff) },
  428.     }
  429. }
  430.  
  431. dialogsData.dialogs['Arrival'].stages = {
  432.     ['Closed'] = {
  433.         [Message.wMsgATCFlyHeading]                     = TO_STAGE('Arrival', 'Inbound'),
  434.         [Message.wMsgATCGoAround]                       = TO_STAGE('Arrival', 'Ready to land'),
  435.         [events.LANDING]                                = TO_STAGE('Arrival', 'Parking'),
  436.         [Message.wMsgATCTaxiToParkingArea]              = TO_STAGE('Arrival', 'Parking'),
  437.         [Message.wMsgLeaderAbortInbound]                = TERMINATE()
  438.     },
  439.     ['Inbound'] = {
  440.         [Message.wMsgATCOrbitForSpacing]                = TO_STAGE('Arrival', 'Orbit'),
  441.         [Message.wMsgATCClearedForVisual]               = TO_STAGE('Arrival', 'Ready to land'),
  442.         [events.LANDING]                                = TO_STAGE('Arrival', 'Parking'),
  443.         [Message.wMsgLeaderAbortInbound]                = TERMINATE()      
  444.     },
  445.     ['Orbit'] = {
  446.         [Message.wMsgATCClearedForVisual]               = TO_STAGE('Arrival', 'Ready to land'),
  447.         [events.LANDING]                                = TO_STAGE('Arrival', 'Parking'),
  448.         [Message.wMsgLeaderAbortInbound]                = TERMINATE(),
  449.     },
  450.     ['Ready to land'] = {
  451.         [Message.wMsgATCYouAreClearedForLanding]        = TO_STAGE('Arrival', 'Landing'),
  452.         [Message.wMsgATCCheckLandingGear]               = TO_STAGE('Arrival', 'Landing'),
  453.         [Message.wMsgATCOrbitForSpacing]                = TO_STAGE('Arrival', 'Orbit'),
  454.         [events.LANDING]                                = TO_STAGE('Arrival', 'Parking'),
  455.         [Message.wMsgLeaderAbortInbound]                = TERMINATE(),
  456.         [Message.wMsgATCGoSecondary]                    = TERMINATE(),
  457.     },
  458.     ['Landing'] = {
  459.         [Message.wMsgATCGoAround]                       = TO_STAGE('Arrival', 'Ready to land'),
  460.         [events.LANDING]                                = TO_STAGE('Arrival', 'Parking'),
  461.         [Message.wMsgLeaderAbortInbound]                = TERMINATE(),
  462.         [Message.wMsgATCGoSecondary]                    = TERMINATE(),
  463.     },
  464.     ['Parking'] = {
  465.         [events.ENGINE_SHUTDOWN]                        = TERMINATE(),
  466.         [Message.wMsgATCTaxiDenied]                     = TERMINATE(),
  467.         [Message.wMsgATCClearedToTaxiRunWay]            = TERMINATE(),
  468.         [Message.wMsgATCYouAreClearedForTO]             = TERMINATE(),
  469.         [Message.wMsgATCTakeoffDenied]                  = TERMINATE(),
  470.         [events.TAKEOFF]                                = TERMINATE(),
  471.     }
  472. }
  473.  
  474. --Dialog Triggers
  475.  
  476. local arrivalDialogTrigger = DialogStartTrigger:new(dialogsData.dialogs['Arrival'])
  477. dialogsData.triggers[Message.wMsgATCFlyHeading]                 = arrivalDialogTrigger
  478. dialogsData.triggers[Message.wMsgATCGoAround]                   = arrivalDialogTrigger
  479. dialogsData.triggers[Message.wMsgATCTaxiToParkingArea]          = arrivalDialogTrigger
  480.  
  481. local departureAirdromeDialogTrigger = DialogStartTrigger:new(dialogsData.dialogs['Departure Airdrome'])
  482. dialogsData.triggers[events.NOTIFY_BIRTH_ON_RAMP_HOT]               = departureAirdromeDialogTrigger
  483. dialogsData.triggers[events.NOTIFY_BIRTH_ON_RUNWAY]                 = departureAirdromeDialogTrigger
  484. dialogsData.triggers[events.STARTUP_PERMISSION_FROM_AIRDROME]       = departureAirdromeDialogTrigger
  485. dialogsData.triggers[Message.wMsgATCClearedToTaxiRunWay]            = departureAirdromeDialogTrigger
  486. dialogsData.triggers[events.DENY_TAKEOFF_FROM_AIRDROME]             = departureAirdromeDialogTrigger
  487. dialogsData.triggers[events.CLEAR_TO_TAKEOFF_FROM_AIRDROME]         = departureAirdromeDialogTrigger
  488.  
  489. local departureHelipadDialogTrigger = DialogStartTrigger:new(dialogsData.dialogs['Departure Helipad'])
  490. dialogsData.triggers[events.NOTIFY_BIRTH_ON_HELIPAD_HOT]            = departureHelipadDialogTrigger
  491. dialogsData.triggers[events.STARTUP_PERMISSION_FROM_HELIPAD]        = departureHelipadDialogTrigger
  492. dialogsData.triggers[events.DENY_TAKEOFF_FROM_HELIPAD]              = departureHelipadDialogTrigger
  493. dialogsData.triggers[events.CLEAR_TO_TAKEOFF_FROM_HELIPAD]          = departureHelipadDialogTrigger
  494.  
  495. local departureShipDialogTrigger = DialogStartTrigger:new(dialogsData.dialogs['Departure Ship'])
  496. dialogsData.triggers[events.NOTIFY_BIRTH_ON_SHIP_HOT]               = departureShipDialogTrigger
  497. dialogsData.triggers[events.STARTUP_PERMISSION_FROM_SHIP]           = departureShipDialogTrigger
  498. dialogsData.triggers[events.DENY_TAKEOFF_FROM_SHIP]                 = departureShipDialogTrigger
  499. dialogsData.triggers[events.CLEAR_TO_TAKEOFF_FROM_SHIP]             = departureShipDialogTrigger
  500.     --Event Handler
  501.  
  502. local enginesAreStarted = false
  503.  
  504. local worldEventHandler = {
  505.     onEvent = function(self, event)
  506.         --print('data.pUnit = '..tostring(data.pUnit and data.pUnit))
  507.         --print('event.id = '..tostring(event.id))
  508.         --print('event.initiator = '..tostring(event.initiator))
  509.         if event.initiator == data.pUnit then
  510.             local airbaseCommunicator= nil
  511.             if event.place ~= nil and event.place:isExist() then
  512.                 airbaseCommunicator = event.place:getCommunicator()
  513.             end
  514.             if event.id == world.event.S_EVENT_BIRTH then
  515.                 if event.place ~= nil then
  516.                     --print('event.subPlace = '..tostring(event.subPlace))
  517.                     if event.subPlace == world.BirthPlace.wsBirthPlace_Park then
  518.                         return events.NOTIFY_BIRTH_ON_RAMP_COLD, airbaseCommunicator
  519.                     elseif event.subPlace == world.BirthPlace.wsBirthPlace_Park_Hot then
  520.                         enginesAreStarted = true
  521.                         return events.NOTIFY_BIRTH_ON_RAMP_HOT, airbaseCommunicator
  522.                     elseif event.subPlace == world.BirthPlace.wsBirthPlace_RunWay then
  523.                         enginesAreStarted = true
  524.                         return events.NOTIFY_BIRTH_ON_RUNWAY, airbaseCommunicator
  525.                     elseif event.subPlace == world.BirthPlace.wsBirthPlace_Heliport_Cold then
  526.                         return events.NOTIFY_BIRTH_ON_HELIPAD_COLD, airbaseCommunicator
  527.                     elseif event.subPlace == world.BirthPlace.wsBirthPlace_Heliport_Hot then
  528.                         enginesAreStarted = true
  529.                         return events.NOTIFY_BIRTH_ON_HELIPAD_HOT, airbaseCommunicator
  530.                     elseif event.subPlace == world.BirthPlace.wsBirthPlace_Ship_Cold then
  531.                         return events.NOTIFY_BIRTH_ON_SHIP_COLD, airbaseCommunicator
  532.                     elseif event.subPlace == world.BirthPlace.wsBirthPlace_Ship then
  533.                         enginesAreStarted = true
  534.                         return events.NOTIFY_BIRTH_ON_SHIP_HOT, airbaseCommunicator
  535.                     end
  536.                 end
  537.             elseif event.id == world.event.S_EVENT_TAKEOFF then
  538.                 return events.TAKEOFF, airbaseCommunicator
  539.             elseif event.id == world.event.S_EVENT_LAND then
  540.                 return events.LANDING, airbaseCommunicator
  541.             elseif event.id == world.event.S_EVENT_ENGINE_STARTUP then
  542.                 enginesAreStarted = true
  543.                 return events.ENGINE_STARTUP, airbaseCommunicator
  544.             elseif event.id == world.event.S_EVENT_ENGINE_SHUTDOWN then
  545.                 enginesAreStarted = false
  546.                 return events.ENGINE_SHUTDOWN, airbaseCommunicator
  547.             end
  548.         end
  549.     end
  550. }
  551.  
  552. table.insert(data.worldEventHandlers, worldEventHandler)
  553.  
  554. --Message Handler
  555.  
  556. local msgHandler = {
  557.     onMsg = function(self, pMessage, pRecepient)
  558.         self:onMsgEvent(pMessage:getEvent(), pMessage:getSender(), pRecepient)
  559.     end,
  560.     onMsgEvent = function(self, event, pMsgSender, pRecepient)
  561.         local pUnit = pMsgSender:getUnit()
  562.         local nUnitCategory = pUnit:getCategory()
  563.         if nUnitCategory == Object.Category.BASE or nUnitCategory == Object.Category.UNIT then
  564.             local airbaseCategory = pUnit:getDesc().category
  565.             if event == Message.wMsgATCClearedForEngineStartUp then
  566.                 if airbaseCategory == Airbase.Category.HELIPAD then
  567.                     return events.STARTUP_PERMISSION_FROM_HELIPAD
  568.                 elseif airbaseCategory == Airbase.Category.AIRDROME then
  569.                     return events.STARTUP_PERMISSION_FROM_AIRDROME
  570.                 elseif airbaseCategory == Airbase.Category.SHIP then
  571.                     return events.STARTUP_PERMISSION_FROM_SHIP
  572.                 end
  573.             elseif event == Message.wMsgATCTakeoffDenied then
  574.                 local typeName = pMsgSender:getUnit():getTypeName()
  575.                 if airbaseCategory == Airbase.Category.HELIPAD then
  576.                     return events.DENY_TAKEOFF_FROM_HELIPAD
  577.                 elseif airbaseCategory == Airbase.Category.AIRDROME then
  578.                     return events.DENY_TAKEOFF_FROM_AIRDROME
  579.                 elseif airbaseCategory == Airbase.Category.SHIP then
  580.                     return events.DENY_TAKEOFF_FROM_SHIP
  581.                 end
  582.             elseif event == Message.wMsgATCYouAreClearedForTO then
  583.                 local typeName = pMsgSender:getUnit():getTypeName()
  584.                 if airbaseCategory == Airbase.Category.HELIPAD then
  585.                     return events.CLEAR_TO_TAKEOFF_FROM_HELIPAD
  586.                 elseif airbaseCategory == Airbase.Category.AIRDROME then
  587.                     return events.CLEAR_TO_TAKEOFF_FROM_AIRDROME
  588.                 elseif airbaseCategory == Airbase.Category.SHIP then
  589.                     return events.CLEAR_TO_TAKEOFF_FROM_SHIP
  590.                 end
  591.             end
  592.         end
  593.     end
  594. }
  595.  
  596. table.insert(data.msgHandlers, msgHandler)
  597. print('ATCLUA:END------------------')
Advertisement
Add Comment
Please, Sign In to add comment