mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Clients
This commit is contained in:
parent
01a5b523da
commit
87f4ebee64
@ -765,31 +765,48 @@ function BASE:CreateEventTakeoff( EventTime, Initiator )
|
|||||||
world.onEvent( Event )
|
world.onEvent( Event )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Creation of a S_EVENT_PLAYER_ENTER_AIRCRAFT event.
|
||||||
|
-- @param #BASE self
|
||||||
|
-- @param Wrapper.Unit#UNIT PlayerUnit The aircraft unit the player entered.
|
||||||
|
function BASE:CreateEventPlayerEnterAircraft( PlayerUnit )
|
||||||
|
self:F( { PlayerUnit } )
|
||||||
|
|
||||||
|
local Event = {
|
||||||
|
id = EVENTS.PlayerEnterAircraft,
|
||||||
|
time = timer.getTime(),
|
||||||
|
initiator = PlayerUnit:GetDCSObject()
|
||||||
|
}
|
||||||
|
|
||||||
|
world.onEvent(Event)
|
||||||
|
end
|
||||||
|
|
||||||
-- TODO: Complete DCS#Event structure.
|
-- TODO: Complete DCS#Event structure.
|
||||||
--- The main event handling function... This function captures all events generated for the class.
|
--- The main event handling function... This function captures all events generated for the class.
|
||||||
-- @param #BASE self
|
-- @param #BASE self
|
||||||
-- @param DCS#Event event
|
-- @param DCS#Event event
|
||||||
function BASE:onEvent(event)
|
function BASE:onEvent(event)
|
||||||
--self:F( { BaseEventCodes[event.id], event } )
|
|
||||||
|
|
||||||
if self then
|
if self then
|
||||||
for EventID, EventObject in pairs( self.Events ) do
|
|
||||||
|
for EventID, EventObject in pairs(self.Events) do
|
||||||
if EventObject.EventEnabled then
|
if EventObject.EventEnabled then
|
||||||
--env.info( 'onEvent Table EventObject.Self = ' .. tostring(EventObject.Self) )
|
|
||||||
--env.info( 'onEvent event.id = ' .. tostring(event.id) )
|
|
||||||
--env.info( 'onEvent EventObject.Event = ' .. tostring(EventObject.Event) )
|
|
||||||
if event.id == EventObject.Event then
|
if event.id == EventObject.Event then
|
||||||
|
|
||||||
if self == EventObject.Self then
|
if self == EventObject.Self then
|
||||||
|
|
||||||
if event.initiator and event.initiator:isExist() then
|
if event.initiator and event.initiator:isExist() then
|
||||||
event.IniUnitName = event.initiator:getName()
|
event.IniUnitName = event.initiator:getName()
|
||||||
end
|
end
|
||||||
|
|
||||||
if event.target and event.target:isExist() then
|
if event.target and event.target:isExist() then
|
||||||
event.TgtUnitName = event.target:getName()
|
event.TgtUnitName = event.target:getName()
|
||||||
end
|
end
|
||||||
--self:T( { BaseEventCodes[event.id], event } )
|
|
||||||
--EventObject.EventFunction( self, event )
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -140,37 +140,6 @@ function DATABASE:New()
|
|||||||
|
|
||||||
self.UNITS_Position = 0
|
self.UNITS_Position = 0
|
||||||
|
|
||||||
--- @param #DATABASE self
|
|
||||||
local function CheckPlayers( self )
|
|
||||||
|
|
||||||
local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ), AlivePlayersNeutral = coalition.getPlayers( coalition.side.NEUTRAL )}
|
|
||||||
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
|
|
||||||
--self:E( { "CoalitionData:", CoalitionData } )
|
|
||||||
for UnitId, UnitData in pairs( CoalitionData ) do
|
|
||||||
if UnitData and UnitData:isExist() then
|
|
||||||
|
|
||||||
local UnitName = UnitData:getName()
|
|
||||||
local PlayerName = UnitData:getPlayerName()
|
|
||||||
local PlayerUnit = UNIT:Find( UnitData )
|
|
||||||
--self:T( { "UnitData:", UnitData, UnitName, PlayerName, PlayerUnit } )
|
|
||||||
|
|
||||||
if PlayerName and PlayerName ~= "" then
|
|
||||||
if self.PLAYERS[PlayerName] == nil or self.PLAYERS[PlayerName] ~= UnitName then
|
|
||||||
--self:E( { "Add player for unit:", UnitName, PlayerName } )
|
|
||||||
self:AddPlayer( UnitName, PlayerName )
|
|
||||||
--_EVENTDISPATCHER:CreateEventPlayerEnterUnit( PlayerUnit )
|
|
||||||
local Settings = SETTINGS:Set( PlayerName )
|
|
||||||
Settings:SetPlayerMenu( PlayerUnit )
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--self:E( "Scheduling" )
|
|
||||||
--PlayerCheckSchedule = SCHEDULER:New( nil, CheckPlayers, { self }, 1, 1 )
|
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -224,8 +193,7 @@ end
|
|||||||
--- Deletes a Static from the DATABASE based on the Static Name.
|
--- Deletes a Static from the DATABASE based on the Static Name.
|
||||||
-- @param #DATABASE self
|
-- @param #DATABASE self
|
||||||
function DATABASE:DeleteStatic( DCSStaticName )
|
function DATABASE:DeleteStatic( DCSStaticName )
|
||||||
|
self.STATICS[DCSStaticName] = nil
|
||||||
--self.STATICS[DCSStaticName] = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Finds a STATIC based on the StaticName.
|
--- Finds a STATIC based on the StaticName.
|
||||||
@ -867,7 +835,7 @@ end
|
|||||||
function DATABASE:_RegisterClients()
|
function DATABASE:_RegisterClients()
|
||||||
|
|
||||||
for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do
|
for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do
|
||||||
self:T( { "Register Client:", ClientName } )
|
self:I(string.format("Register Client %s", tostring(ClientName)))
|
||||||
self:AddClient( ClientName )
|
self:AddClient( ClientName )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -877,15 +845,15 @@ end
|
|||||||
--- @param #DATABASE self
|
--- @param #DATABASE self
|
||||||
function DATABASE:_RegisterStatics()
|
function DATABASE:_RegisterStatics()
|
||||||
|
|
||||||
local CoalitionsData = { GroupsRed = coalition.getStaticObjects( coalition.side.RED ), GroupsBlue = coalition.getStaticObjects( coalition.side.BLUE ) }
|
local CoalitionsData={GroupsRed=coalition.getStaticObjects(coalition.side.RED), GroupsBlue=coalition.getStaticObjects(coalition.side.BLUE), GroupsNeutral=coalition.getStaticObjects(coalition.side.NEUTRAL)}
|
||||||
self:I( { Statics = CoalitionsData } )
|
|
||||||
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
|
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
|
||||||
for DCSStaticId, DCSStatic in pairs( CoalitionData ) do
|
for DCSStaticId, DCSStatic in pairs( CoalitionData ) do
|
||||||
|
|
||||||
if DCSStatic:isExist() then
|
if DCSStatic:isExist() then
|
||||||
local DCSStaticName = DCSStatic:getName()
|
local DCSStaticName = DCSStatic:getName()
|
||||||
|
|
||||||
self:T( { "Register Static:", DCSStaticName } )
|
self:I( { "Register Static:", DCSStaticName } )
|
||||||
self:AddStatic( DCSStaticName )
|
self:AddStatic( DCSStaticName )
|
||||||
else
|
else
|
||||||
self:E( { "Static does not exist: ", DCSStatic } )
|
self:E( { "Static does not exist: ", DCSStatic } )
|
||||||
@ -912,8 +880,23 @@ function DATABASE:_RegisterAirbases()
|
|||||||
-- Add and register airbase.
|
-- Add and register airbase.
|
||||||
local airbase=self:AddAirbase( DCSAirbaseName )
|
local airbase=self:AddAirbase( DCSAirbaseName )
|
||||||
|
|
||||||
|
-- Unique ID.
|
||||||
|
local airbaseUID=airbase:GetID(true)
|
||||||
|
|
||||||
-- Debug output.
|
-- Debug output.
|
||||||
self:I(string.format("Register Airbase: %s, getID=%d, GetID=%d (unique=%d)", DCSAirbaseName, DCSAirbase:getID(), airbase:GetID(), airbase:GetID(true)))
|
local text=string.format("Register Airbase: %s (ID=%d UID=%d), category=%s, parking=%d [", tostring(DCSAirbaseName), airbaseID, airbaseUID, AIRBASE.CategoryName[airbase.category], airbase.NparkingTotal)
|
||||||
|
for _,terminalType in pairs(AIRBASE.TerminalType) do
|
||||||
|
if airbase.NparkingTerminal and airbase.NparkingTerminal[terminalType] then
|
||||||
|
text=text..string.format("%d=%d ", terminalType, airbase.NparkingTerminal[terminalType])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
text=text.."]"
|
||||||
|
self:I(text)
|
||||||
|
|
||||||
|
-- Check for DCS bug IDs.
|
||||||
|
if airbaseID~=airbase:GetID() then
|
||||||
|
--self:E("WARNING: :getID does NOT match :GetID!")
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -945,9 +928,13 @@ function DATABASE:_EventOnBirth( Event )
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if Event.IniObjectCategory == 1 then
|
if Event.IniObjectCategory == 1 then
|
||||||
|
|
||||||
Event.IniUnit = self:FindUnit( Event.IniDCSUnitName )
|
Event.IniUnit = self:FindUnit( Event.IniDCSUnitName )
|
||||||
Event.IniGroup = self:FindGroup( Event.IniDCSGroupName )
|
Event.IniGroup = self:FindGroup( Event.IniDCSGroupName )
|
||||||
|
|
||||||
|
-- Get player name.
|
||||||
local PlayerName = Event.IniUnit:GetPlayerName()
|
local PlayerName = Event.IniUnit:GetPlayerName()
|
||||||
|
|
||||||
if PlayerName then
|
if PlayerName then
|
||||||
self:I( { "Player Joined:", PlayerName } )
|
self:I( { "Player Joined:", PlayerName } )
|
||||||
self:AddClient( Event.IniDCSUnitName )
|
self:AddClient( Event.IniDCSUnitName )
|
||||||
@ -956,10 +943,16 @@ function DATABASE:_EventOnBirth( Event )
|
|||||||
end
|
end
|
||||||
local Settings = SETTINGS:Set( PlayerName )
|
local Settings = SETTINGS:Set( PlayerName )
|
||||||
Settings:SetPlayerMenu( Event.IniUnit )
|
Settings:SetPlayerMenu( Event.IniUnit )
|
||||||
--MENU_INDEX:Refresh( Event.IniGroup )
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
_DATABASE:CreateEventBirth(-EventTime,Initiator,IniUnitName,place,subplace)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -192,6 +192,7 @@ world.event.S_EVENT_DELETE_ZONE = world.event.S_EVENT_MAX + 1003
|
|||||||
world.event.S_EVENT_NEW_ZONE_GOAL = world.event.S_EVENT_MAX + 1004
|
world.event.S_EVENT_NEW_ZONE_GOAL = world.event.S_EVENT_MAX + 1004
|
||||||
world.event.S_EVENT_DELETE_ZONE_GOAL = world.event.S_EVENT_MAX + 1005
|
world.event.S_EVENT_DELETE_ZONE_GOAL = world.event.S_EVENT_MAX + 1005
|
||||||
world.event.S_EVENT_REMOVE_UNIT = world.event.S_EVENT_MAX + 1006
|
world.event.S_EVENT_REMOVE_UNIT = world.event.S_EVENT_MAX + 1006
|
||||||
|
world.event.S_EVENT_PLAYER_ENTER_AIRCRAFT = world.event.S_EVENT_MAX + 1007
|
||||||
|
|
||||||
|
|
||||||
--- The different types of events supported by MOOSE.
|
--- The different types of events supported by MOOSE.
|
||||||
@ -233,6 +234,7 @@ EVENTS = {
|
|||||||
NewZoneGoal = world.event.S_EVENT_NEW_ZONE_GOAL,
|
NewZoneGoal = world.event.S_EVENT_NEW_ZONE_GOAL,
|
||||||
DeleteZoneGoal = world.event.S_EVENT_DELETE_ZONE_GOAL,
|
DeleteZoneGoal = world.event.S_EVENT_DELETE_ZONE_GOAL,
|
||||||
RemoveUnit = world.event.S_EVENT_REMOVE_UNIT,
|
RemoveUnit = world.event.S_EVENT_REMOVE_UNIT,
|
||||||
|
PlayerEnterAircraft = world.event.S_EVENT_PLAYER_ENTER_AIRCRAFT,
|
||||||
-- Added with DCS 2.5.6
|
-- Added with DCS 2.5.6
|
||||||
DetailedFailure = world.event.S_EVENT_DETAILED_FAILURE or -1, --We set this to -1 for backward compatibility to DCS 2.5.5 and earlier
|
DetailedFailure = world.event.S_EVENT_DETAILED_FAILURE or -1, --We set this to -1 for backward compatibility to DCS 2.5.5 and earlier
|
||||||
Kill = world.event.S_EVENT_KILL or -1,
|
Kill = world.event.S_EVENT_KILL or -1,
|
||||||
@ -489,6 +491,11 @@ local _EVENTMETA = {
|
|||||||
Event = "OnEventRemoveUnit",
|
Event = "OnEventRemoveUnit",
|
||||||
Text = "S_EVENT_REMOVE_UNIT"
|
Text = "S_EVENT_REMOVE_UNIT"
|
||||||
},
|
},
|
||||||
|
[EVENTS.PlayerEnterAircraft] = {
|
||||||
|
Order = 1,
|
||||||
|
Event = "OnEventPlayerEnterAircraft",
|
||||||
|
Text = "S_EVENT_PLAYER_ENTER_AIRCRAFT"
|
||||||
|
},
|
||||||
-- Added with DCS 2.5.6
|
-- Added with DCS 2.5.6
|
||||||
[EVENTS.DetailedFailure] = {
|
[EVENTS.DetailedFailure] = {
|
||||||
Order = 1,
|
Order = 1,
|
||||||
@ -915,6 +922,21 @@ do -- Event Creation
|
|||||||
world.onEvent( Event )
|
world.onEvent( Event )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Creation of a S_EVENT_PLAYER_ENTER_AIRCRAFT event.
|
||||||
|
-- @param #EVENT self
|
||||||
|
-- @param Wrapper.Unit#UNIT PlayerUnit The aircraft unit the player entered.
|
||||||
|
function EVENT:CreateEventPlayerEnterAircraft( PlayerUnit )
|
||||||
|
self:F( { PlayerUnit } )
|
||||||
|
|
||||||
|
local Event = {
|
||||||
|
id = EVENTS.PlayerEnterAircraft,
|
||||||
|
time = timer.getTime(),
|
||||||
|
initiator = PlayerUnit:GetDCSObject()
|
||||||
|
}
|
||||||
|
|
||||||
|
world.onEvent( Event )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Main event function.
|
--- Main event function.
|
||||||
|
|||||||
@ -829,25 +829,27 @@ function AIRBASE:_InitParkingSpots()
|
|||||||
-- Put coordinates of parking spots into table.
|
-- Put coordinates of parking spots into table.
|
||||||
for _,spot in pairs(parkingdata) do
|
for _,spot in pairs(parkingdata) do
|
||||||
|
|
||||||
-- New parking spot.
|
-- New parking spot.
|
||||||
local park={} --#AIRBASE.ParkingSpot
|
local park={} --#AIRBASE.ParkingSpot
|
||||||
park.Vec3=spot.vTerminalPos
|
park.Vec3=spot.vTerminalPos
|
||||||
park.Coordinate=COORDINATE:NewFromVec3(spot.vTerminalPos)
|
park.Coordinate=COORDINATE:NewFromVec3(spot.vTerminalPos)
|
||||||
park.DistToRwy=spot.fDistToRW
|
park.DistToRwy=spot.fDistToRW
|
||||||
park.Free=nil
|
park.Free=nil
|
||||||
park.TerminalID=spot.Term_Index
|
park.TerminalID=spot.Term_Index
|
||||||
park.TerminalID0=spot.Term_Index_0
|
park.TerminalID0=spot.Term_Index_0
|
||||||
park.TerminalType=spot.Term_Type
|
park.TerminalType=spot.Term_Type
|
||||||
park.TOAC=spot.TO_AC
|
park.TOAC=spot.TO_AC
|
||||||
|
|
||||||
for _,terminalType in pairs(AIRBASE.TerminalType) do
|
self.NparkingTotal=self.NparkingTotal+1
|
||||||
if self._CheckTerminalType(terminalType, park.TerminalType) then
|
|
||||||
self.NparkingTerminal[terminalType]=self.NparkingTerminal[terminalType]+1
|
for _,terminalType in pairs(AIRBASE.TerminalType) do
|
||||||
end
|
if self._CheckTerminalType(terminalType, park.TerminalType) then
|
||||||
|
self.NparkingTerminal[terminalType]=self.NparkingTerminal[terminalType]+1
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
self.parkingByID[park.TerminalID]=park
|
self.parkingByID[park.TerminalID]=park
|
||||||
table.insert(self.parking, park)
|
table.insert(self.parking, park)
|
||||||
end
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|||||||
@ -117,6 +117,8 @@ end
|
|||||||
-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() )
|
-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() )
|
||||||
-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() )
|
-- Mission:AddClient( CLIENT:FindByName( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() )
|
||||||
function CLIENT:FindByName( ClientName, ClientBriefing, Error )
|
function CLIENT:FindByName( ClientName, ClientBriefing, Error )
|
||||||
|
|
||||||
|
-- Client
|
||||||
local ClientFound = _DATABASE:FindClient( ClientName )
|
local ClientFound = _DATABASE:FindClient( ClientName )
|
||||||
|
|
||||||
if ClientFound then
|
if ClientFound then
|
||||||
@ -132,6 +134,10 @@ function CLIENT:FindByName( ClientName, ClientBriefing, Error )
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Transport defines that the Client is a Transport. Transports show cargo.
|
||||||
|
-- @param #CLIENT self
|
||||||
|
-- @param #string ClientName Name of the client unit.
|
||||||
|
-- @return #CLIENT
|
||||||
function CLIENT:Register( ClientName )
|
function CLIENT:Register( ClientName )
|
||||||
|
|
||||||
local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) -- #CLIENT
|
local self = BASE:Inherit( self, UNIT:Register( ClientName ) ) -- #CLIENT
|
||||||
@ -204,8 +210,6 @@ function CLIENT:ShowMissionBriefing( MissionBriefing )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Resets a CLIENT.
|
--- Resets a CLIENT.
|
||||||
-- @param #CLIENT self
|
-- @param #CLIENT self
|
||||||
-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client.
|
-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client.
|
||||||
@ -291,6 +295,7 @@ function CLIENT:GetDCSGroup()
|
|||||||
local ClientUnit = Unit.getByName( self.ClientName )
|
local ClientUnit = Unit.getByName( self.ClientName )
|
||||||
|
|
||||||
local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) }
|
local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) }
|
||||||
|
|
||||||
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
|
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
|
||||||
self:T3( { "CoalitionData:", CoalitionData } )
|
self:T3( { "CoalitionData:", CoalitionData } )
|
||||||
for UnitId, UnitData in pairs( CoalitionData ) do
|
for UnitId, UnitData in pairs( CoalitionData ) do
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user