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
-- @type CLIENT
-- @extends Unit#UNIT
-- @extends Base#BASE
CLIENT = {
ONBOARDSIDE = {
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*RAMP-Deploy Troops 4' ):Transport() )
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.ClientName = ClientName
@ -319,6 +319,44 @@ function CLIENT:GetPointVec2()
return nil
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.
-- @param #CLIENT self

View File

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

View File

@ -36,6 +36,9 @@ function MISSILETRAINER:New( Distance )
self.DBUnits = self.DB.Units
for ClientID, Client in pairs( self.DBClients ) do
local function _Alive( Client )
Client:Message( "Welcome to the Missile Trainer", 10, "ID", "TEST" )
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.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 } )
end
Client:Alive( _Alive )
end
-- self.DB:ForEachClient(
@ -145,10 +150,9 @@ function MISSILETRAINER:_EventShot( Event )
local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target
local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit )
local TrainerTargetDCSGroup = TrainerTargetDCSUnit:getGroup()
local TrainerTargetDCSGroupName = TrainerTargetDCSGroup:getName()
local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill
self:T(TrainerTargetDCSUnitName )
local Client = self.DBClients[TrainerTargetDCSUnitName]
if Client then
@ -271,6 +275,7 @@ function MISSILETRAINER:_TrackMissiles()
local TrainerWeapon = MissileData.TrainerWeapon
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 PositionTarget = Client:GetPositionVec3()
@ -284,13 +289,14 @@ function MISSILETRAINER:_TrackMissiles()
TrainerWeapon:destroy()
if self.MessagesOnOff and self.AlertsHits then
self:T( "Destroyed" )
self:T( "killed" )
local Message = MESSAGE:New(
string.format( "%s launched by %s destroyed",
string.format( "%s launched by %s killed '%s'",
TrainerWeapon:getTypeName(),
TrainerSourceUnit:GetTypeName()
),"Tracking", 2, "ID" )
TrainerSourceUnit:GetTypeName(),
TrainerSourceUnit:GetPlayerName()
),"Tracking", 15, "ID" )
if self.AlertsToAll then
Message:ToAll()
@ -300,6 +306,7 @@ function MISSILETRAINER:_TrackMissiles()
MissileData = nil
table.remove( TrackingData.MissileData, MissileDataID )
self:T(TrackingData.MissileData)
end
else
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"
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

View File

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