This commit is contained in:
FlightControl_Master 2017-09-29 12:11:25 +02:00
parent b84d08f052
commit 632ce65bf5
4 changed files with 131 additions and 29 deletions

View File

@ -167,7 +167,7 @@ function MESSAGE:ToClient( Client, Settings )
if self.MessageType then
local Settings = Settings or ( Client and _DATABASE:GetPlayerSettings( Client:GetPlayerName() ) ) or _SETTINGS -- Core.Settings#SETTINGS
self.MessageDuration = Settings:GetMessageTime( self.MessageType )
self.MessageCategory = self.MessageType .. ": "
self.MessageCategory = "" -- self.MessageType .. ": "
end
if self.MessageDuration ~= 0 then
@ -192,7 +192,7 @@ function MESSAGE:ToGroup( Group, Settings )
if self.MessageType then
local Settings = Settings or ( Group and _DATABASE:GetPlayerSettings( Group:GetPlayerName() ) ) or _SETTINGS -- Core.Settings#SETTINGS
self.MessageDuration = Settings:GetMessageTime( self.MessageType )
self.MessageCategory = self.MessageType .. ": "
self.MessageCategory = "" -- self.MessageType .. ": "
end
if self.MessageDuration ~= 0 then
@ -259,7 +259,7 @@ function MESSAGE:ToCoalition( CoalitionSide, Settings )
if self.MessageType then
local Settings = Settings or _SETTINGS -- Core.Settings#SETTINGS
self.MessageDuration = Settings:GetMessageTime( self.MessageType )
self.MessageCategory = self.MessageType .. ": "
self.MessageCategory = "" -- self.MessageType .. ": "
end
if CoalitionSide then
@ -303,7 +303,7 @@ function MESSAGE:ToAll()
if self.MessageType then
local Settings = Settings or _SETTINGS -- Core.Settings#SETTINGS
self.MessageDuration = Settings:GetMessageTime( self.MessageType )
self.MessageCategory = self.MessageType .. ": "
self.MessageCategory = "" -- self.MessageType .. ": "
end
if self.MessageDuration ~= 0 then

View File

@ -50,6 +50,8 @@
-- ## Each zone has a name:
--
-- * @{#ZONE_BASE.GetName}(): Returns the name of the zone.
-- * @{#ZONE_BASE.SetName}(): Sets the name of the zone.
--
--
-- ## Each zone implements two polymorphic functions defined in @{Zone#ZONE_BASE}:
--
@ -121,6 +123,17 @@ function ZONE_BASE:GetName()
return self.ZoneName
end
--- Sets the name of the zone.
-- @param #ZONE_BASE self
-- @param #string ZoneName The name of the zone.
-- @return #ZONE_BASE
function ZONE_BASE:SetName( ZoneName )
self:F2()
self.ZoneName = ZoneName
end
--- Returns if a Vec2 is within the zone.
-- @param #ZONE_BASE self
-- @param Dcs.DCSTypes#Vec2 Vec2 The Vec2 to test.
@ -651,6 +664,15 @@ function ZONE_RADIUS:IsNoneInZoneOfCoalition( Coalition )
end
--- Is None in Zone?
-- @param #ZONE_RADIUS self
-- @return #boolean
function ZONE_RADIUS:IsNoneInZone()
return self:CountCoalitions() == 0
end
--- Get the Zone Coalitions.
-- Returns nil if there are none ot two coalitions in the zone!
-- @param #ZONE_RADIUS self

View File

@ -10,7 +10,7 @@
-- @module Protect
--- @type PROTECT.__ Methods which are not intended for mission designers, but which are used interally by the moose designer :-)
-- @extends Core.Base#BASE
-- @extends Core.Fsm#FSM
--- @type PROTECT
-- @extends #PROTECT.__
@ -35,7 +35,7 @@ function PROTECT:New( ProtectZone, Coalition )
local self = BASE:Inherit( self, FSM:New() ) -- #PROTECT
self.ProtectZone = ProtectZone
self.ProtectZone = ProtectZone -- Core.Zone#ZONE
self.ProtectUnitSet = SET_UNIT:New()
self.ProtectStaticSet = SET_STATIC:New()
self.CaptureUnitSet = SET_UNIT:New()
@ -44,22 +44,43 @@ function PROTECT:New( ProtectZone, Coalition )
self:AddTransition( { "-", "Protected", "Captured" }, "Protected", "Protected" )
self:AddTransition( { "Protected", "Attacked" }, "Destroyed", "Destroyed" )
self:AddTransition( { "Protected", "Attacked", "Empty" }, "Empty", "Empty" )
self:AddTransition( { "Protected", "Destroyed" }, "Attacked", "Attacked" )
self:AddTransition( { "Protected", "Empty", "Attacked" }, "Attacked", "Attacked" )
self:AddTransition( { "Protected", "Attacked", "Destroyed" }, "Captured", "Captured" )
self:AddTransition( { "Protected", "Attacked", "Empty" }, "Captured", "Captured" )
self:ScheduleRepeat( 60, 60, 0, nil, self.Status, self )
self:ScheduleRepeat( 15, 15, 0.1, nil, self.StatusCoalition, self )
self:ScheduleRepeat( 15, 15, 0.1, nil, self.StatusZone, self )
self:ScheduleRepeat( 5, 300, 0, nil, self.StatusSmoke, self )
self:SetCoalition( Coalition )
self:__Protected( 5 )
self.SmokeTime = nil
return self
end
--- Get the ProtectZone
-- @param #PROTECT self
-- @return Core.Zone#ZONE_BASE
function PROTECT:GetProtectZone()
return self.ProtectZone
end
--- Get the name of the ProtectZone
-- @param #PROTECT self
-- @return #string
function PROTECT:GetProtectZoneName()
return self.ProtectZone:GetName()
end
--- Set the owning coalition of the zone.
-- @param #PROTECT self
-- @param DCSCoalition.DCSCoalition#coalition Coalition
@ -121,9 +142,9 @@ end
function PROTECT:IsProtected()
local IsAllCoalition = self.ProtectZone:IsAllInZoneOfCoalition( self.Coalition )
self:E( { IsAllCoalition = IsAllCoalition } )
return IsAllCoalition
local IsProtected = self.ProtectZone:IsAllInZoneOfCoalition( self.Coalition )
self:E( { IsProtected = IsProtected } )
return IsProtected
end
function PROTECT:IsCaptured()
@ -136,12 +157,18 @@ end
function PROTECT:IsAttacked()
local IsSomeCoalition = self.ProtectZone:IsSomeInZoneOfCoalition( self.Coalition )
self:E( { IsSomeCoalition = IsSomeCoalition } )
return IsSomeCoalition
local IsAttacked = self.ProtectZone:IsSomeInZoneOfCoalition( self.Coalition )
self:E( { IsAttacked = IsAttacked } )
return IsAttacked
end
function PROTECT:IsEmpty()
local IsEmpty = self.ProtectZone:IsNoneInZone()
self:E( { IsEmpty = IsEmpty } )
return IsEmpty
end
--- Check if the units are still alive.
-- @param #PROTECT self
@ -204,10 +231,32 @@ end
-- @param #PROTECT self
-- @param #SMOKECOLOR.Color SmokeColor
function PROTECT:Smoke( SmokeColor )
self.ProtectZone:GetCoordinate():Smoke( SmokeColor )
local CurrentTime = timer.getTime()
self.SmokeColor = SmokeColor
end
--- Flare.
-- @param #PROTECT self
-- @param #SMOKECOLOR.Color FlareColor
function PROTECT:Flare( FlareColor )
self.ProtectZone:FlareZone( FlareColor, math.random( 1, 360 ) )
end
--- Bound.
-- @param #PROTECT self
function PROTECT:onafterProtected()
if self.Coalition == coalition.side.BLUE then
self.ProtectZone:BoundZone( 12, country.id.USA )
else
self.ProtectZone:BoundZone( 12, country.id.RUSSIA )
end
end
function PROTECT:onenterCaptured()
local NewCoalition = self.ProtectZone:GetCoalition()
@ -215,23 +264,54 @@ function PROTECT:onenterCaptured()
self:SetCoalition( NewCoalition )
end
--- Check status ProtectZone.
--- Check status Coalition ownership.
-- @param #PROTECT self
function PROTECT:Status()
function PROTECT:StatusCoalition()
self:E( { State = self:GetState() } )
self.ProtectZone:Scan()
if self:IsProtected() then
self:Protected()
else
if self:IsAttacked() then
self:Attacked()
else
if self:IsCaptured() then
self:Captured()
end
if self:IsCaptured() then
self:Captured()
end
end
end
--- Check status Zone.
-- @param #PROTECT self
function PROTECT:StatusZone()
self:E( { State = self:GetState() } )
self.ProtectZone:Scan()
if self:IsAttacked() then
self:Attacked()
else
if self:IsEmpty() then
self:Empty()
end
end
end
--- Check status Smoke.
-- @param #PROTECT self
function PROTECT:StatusSmoke()
local CurrentTime = timer.getTime()
if self.SmokeTime == nil or self.SmokeTime + 300 <= CurrentTime then
if self.SmokeColor then
self.ProtectZone:GetCoordinate():Smoke( self.SmokeColor )
self.SmokeColor = nil
self.SmokeTime = CurrentTime
end
end
end

View File

@ -415,9 +415,9 @@ function POSITIONABLE:GetMessageText( Message, Name ) --R2.1 added
local DCSObject = self:GetDCSObject()
if DCSObject then
Name = Name and ( " (" .. Name .. ")" ) or ""
local Callsign = string.format( "[%s]", self:GetCallsign() ~= "" and self:GetCallsign() or self:GetName() )
local MessageText = Callsign .. Name .. ": " .. Message
Name = Name and ( " => " .. Name ) or ""
local Callsign = string.format( "%s", self:GetCallsign() ~= "" and self:GetCallsign() or self:GetName() )
local MessageText = string.format("[%s%s]: %s", Callsign, Name, Message )
return MessageText
end