This commit is contained in:
Sven Van de Velde 2016-05-12 14:53:28 +02:00
parent e486c80350
commit 971f5e9ca4
5 changed files with 154 additions and 80 deletions

View File

@ -12,7 +12,7 @@ Include.File( "Message" )
--- The CLIENT class --- The CLIENT class
-- @type CLIENT -- @type CLIENT
-- @extends Unit#UNIT -- @extends Base#BASE
CLIENT = { CLIENT = {
ONBOARDSIDE = { ONBOARDSIDE = {
NONE = 0, NONE = 0,
@ -48,7 +48,7 @@ CLIENT = {
-- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() ) -- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() )
-- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() ) -- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() )
function CLIENT:New( ClientName, ClientBriefing ) function CLIENT:New( ClientName, ClientBriefing )
local self = BASE:Inherit( self, UNIT:New( Unit.getByName( ClientName ) ) ) local self = BASE:Inherit( self, BASE:New() )
self:F( ClientName, ClientBriefing ) self:F( ClientName, ClientBriefing )
self.ClientName = ClientName self.ClientName = ClientName
@ -319,6 +319,44 @@ function CLIENT:GetPointVec2()
return nil return nil
end end
function CLIENT:GetPositionVec3()
self:F( self.ClientName )
local DCSUnit = Unit.getByName( self.ClientName )
local UnitPos = DCSUnit:getPosition().p
self:T( UnitPos )
return UnitPos
end
function CLIENT:GetID()
self:F( self.ClientName )
local DCSUnit = Unit.getByName( self.ClientName )
local UnitID = DCSUnit:getID()
self:T( UnitID )
return UnitID
end
function CLIENT:GetName()
self:F( self.ClientName )
self:T( self.ClientName )
return self.ClientName
end
function CLIENT:GetTypeName()
self:F( self.ClientName )
local DCSUnit = Unit.getByName( self.ClientName )
local TypeName = DCSUnit:getTypeName()
self:T( TypeName )
return TypeName
end
--- Returns the position of the CLIENT in @{DCSTypes#Vec3} format. --- Returns the position of the CLIENT in @{DCSTypes#Vec3} format.
-- @param #CLIENT self -- @param #CLIENT self

View File

@ -413,6 +413,7 @@ function DATABASE:_RegisterGroup( GroupTemplate )
self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName
self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate
self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId
self:E( {"skill",UnitTemplate.skill})
if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then
self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate
self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate
@ -477,11 +478,10 @@ function DATABASE:_RegisterDatabase()
self.DCSUnitsAlive[DCSUnitName] = DCSUnit self.DCSUnitsAlive[DCSUnitName] = DCSUnit
self.UnitsAlive[DCSUnitName] = self.Units[DCSUnitName] self.UnitsAlive[DCSUnitName] = self.Units[DCSUnitName]
end end
if self.Templates.ClientsByName[DCSUnitName] then
self.Clients[DCSUnitName] = CLIENT:New( DCSUnitName )
end end
for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do
self.Clients[ClientName] = CLIENT:New( ClientName )
end end
end end
end end
@ -504,11 +504,12 @@ function DATABASE:_EventOnBirth( Event )
self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit
self.Units[Event.IniDCSUnitName] = UNIT:New( Event.IniDCSUnit ) self.Units[Event.IniDCSUnitName] = UNIT:New( Event.IniDCSUnit )
if not self.DCSGroups[Event.IniDCSGroupName] then --if not self.DCSGroups[Event.IniDCSGroupName] then
self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName -- self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName
self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName -- self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName
self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup ) -- self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup )
end --end
self:_EventOnPlayerEnterUnit( Event )
end end
end end
end end

View File

@ -36,6 +36,9 @@ function MISSILETRAINER:New( Distance )
self.DBUnits = self.DB.Units self.DBUnits = self.DB.Units
for ClientID, Client in pairs( self.DBClients ) do for ClientID, Client in pairs( self.DBClients ) do
local function _Alive( Client )
Client:Message( "Welcome to the Missile Trainer", 10, "ID", "TEST" ) Client:Message( "Welcome to the Missile Trainer", 10, "ID", "TEST" )
Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil )
@ -63,7 +66,9 @@ function MISSILETRAINER:New( Distance )
Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRange = false } ) Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRange = false } )
Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = true } ) Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = true } )
Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = false } ) Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = false } )
end
Client:Alive( _Alive )
end end
-- self.DB:ForEachClient( -- self.DB:ForEachClient(
@ -145,10 +150,9 @@ function MISSILETRAINER:_EventShot( Event )
local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target
local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit ) local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit )
local TrainerTargetDCSGroup = TrainerTargetDCSUnit:getGroup()
local TrainerTargetDCSGroupName = TrainerTargetDCSGroup:getName()
local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill
self:T(TrainerTargetDCSUnitName )
local Client = self.DBClients[TrainerTargetDCSUnitName] local Client = self.DBClients[TrainerTargetDCSUnitName]
if Client then if Client then
@ -271,6 +275,7 @@ function MISSILETRAINER:_TrackMissiles()
local TrainerWeapon = MissileData.TrainerWeapon local TrainerWeapon = MissileData.TrainerWeapon
local TrainerTargetUnit = MissileData.TrainerTargetUnit local TrainerTargetUnit = MissileData.TrainerTargetUnit
if TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then
local PositionMissile = TrainerWeapon:getPosition().p local PositionMissile = TrainerWeapon:getPosition().p
local PositionTarget = Client:GetPositionVec3() local PositionTarget = Client:GetPositionVec3()
@ -284,13 +289,14 @@ function MISSILETRAINER:_TrackMissiles()
TrainerWeapon:destroy() TrainerWeapon:destroy()
if self.MessagesOnOff and self.AlertsHits then if self.MessagesOnOff and self.AlertsHits then
self:T( "Destroyed" ) self:T( "killed" )
local Message = MESSAGE:New( local Message = MESSAGE:New(
string.format( "%s launched by %s destroyed", string.format( "%s launched by %s killed '%s'",
TrainerWeapon:getTypeName(), TrainerWeapon:getTypeName(),
TrainerSourceUnit:GetTypeName() TrainerSourceUnit:GetTypeName(),
),"Tracking", 2, "ID" ) TrainerSourceUnit:GetPlayerName()
),"Tracking", 15, "ID" )
if self.AlertsToAll then if self.AlertsToAll then
Message:ToAll() Message:ToAll()
@ -300,6 +306,7 @@ function MISSILETRAINER:_TrackMissiles()
MissileData = nil MissileData = nil
table.remove( TrackingData.MissileData, MissileDataID ) table.remove( TrackingData.MissileData, MissileDataID )
self:T(TrackingData.MissileData)
end end
else else
local TrackingTo = string.format( " -> %s launched by %s", local TrackingTo = string.format( " -> %s launched by %s",
@ -313,6 +320,27 @@ function MISSILETRAINER:_TrackMissiles()
ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:AddRange( TrackingData.Client, TrainerWeapon ) .. self:AddBearing( TrackingData.Client, TrainerWeapon ) .. "\n" ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:AddRange( TrackingData.Client, TrainerWeapon ) .. self:AddBearing( TrackingData.Client, TrainerWeapon ) .. "\n"
end end
end end
else
if not ( TrainerWeapon and TrainerWeapon:isExist() ) then
if self.MessagesOnOff and self.AlertsLaunches then
-- Weapon does not exist anymore. Delete from Table
local Message = MESSAGE:New(
string.format( "%s launched by %s is self destructed!",
TrainerWeapon:getTypeName(),
TrainerSourceUnit:GetTypeName()
),"Tracking", 5, "ID" )
if self.AlertsToAll then
Message:ToAll()
else
Message:ToClient( Client )
end
end
MissileData = nil
table.remove( TrackingData.MissileData, MissileDataID )
self:T(TrackingData.MissileData)
end
end
end end
end end

View File

@ -56,11 +56,13 @@ UNIT = {
-- @return Unit#UNIT -- @return Unit#UNIT
function UNIT:New( DCSUnit ) function UNIT:New( DCSUnit )
local self = BASE:Inherit( self, BASE:New() ) local self = BASE:Inherit( self, BASE:New() )
self:F( DCSUnit:getName() ) self:F( DCSUnit )
self.DCSUnit = DCSUnit self.DCSUnit = DCSUnit
if DCSUnit then
self.UnitName = DCSUnit:getName() self.UnitName = DCSUnit:getName()
self.UnitID = DCSUnit:getID() self.UnitID = DCSUnit:getID()
end
return self return self
end end
@ -91,6 +93,11 @@ function UNIT:GetName()
return self.UnitName return self.UnitName
end end
function UNIT:GetPlayerName()
self:F( self.UnitName )
return self.DCSUnit:getPlayerName()
end
function UNIT:GetTypeName() function UNIT:GetTypeName()
self:F( self.UnitName ) self:F( self.UnitName )