mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Rework of SPAWN
- Visible Array - Internal table in SPAWN GROUP functions - Route - RouteToZone - CopyRoute SPAWN functions - SpawnFromUnit - SpawnInZone Replaced SpawnFromCarrier overall
This commit is contained in:
parent
effc400a46
commit
17bfcf8373
@ -10,8 +10,8 @@ _TraceClass = {
|
|||||||
--SEAD = true,
|
--SEAD = true,
|
||||||
--DESTROYBASETASK = true,
|
--DESTROYBASETASK = true,
|
||||||
--MOVEMENT = true,
|
--MOVEMENT = true,
|
||||||
--SPAWN = true,
|
SPAWN = true,
|
||||||
--GROUP = true,
|
GROUP = true,
|
||||||
--UNIT = true,
|
--UNIT = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,13 +52,13 @@ function CARGO_ZONE:Spawn()
|
|||||||
self:T( CargoHostSpawn )
|
self:T( CargoHostSpawn )
|
||||||
|
|
||||||
if self.CargoHostSpawn then
|
if self.CargoHostSpawn then
|
||||||
local CargoHostGroup = Group.getByName( self.CargoHostSpawn:SpawnGroupName() )
|
local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex():GetDCSGroup()
|
||||||
if CargoHostGroup then
|
if CargoHostGroup then
|
||||||
if not CargoHostGroup:isExist() then
|
if not CargoHostGroup:isExist() then
|
||||||
self.CargoHostSpawn:ReSpawn()
|
self.CargoHostSpawn:ReSpawn(1)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self.CargoHostSpawn:ReSpawn()
|
self.CargoHostSpawn:ReSpawn(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ function CARGO_ZONE:GetHostUnit()
|
|||||||
if self.CargoHostName then
|
if self.CargoHostName then
|
||||||
|
|
||||||
-- A Host has been given, signal the host
|
-- A Host has been given, signal the host
|
||||||
local CargoHostGroup = Group.getByName( self.CargoHostSpawn:SpawnGroupName() )
|
local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex():GetDCSGroup()
|
||||||
local CargoHostUnit
|
local CargoHostUnit
|
||||||
if CargoHostGroup == nil then
|
if CargoHostGroup == nil then
|
||||||
CargoHostUnit = StaticObject.getByName( self.CargoHostName )
|
CargoHostUnit = StaticObject.getByName( self.CargoHostName )
|
||||||
@ -253,8 +253,8 @@ end
|
|||||||
function CARGO_ZONE:GetCargoHostUnit()
|
function CARGO_ZONE:GetCargoHostUnit()
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
local CargoHostUnit = Group.getByName( self.CargoHostSpawn:SpawnGroupName() ):getUnit(1)
|
local CargoHostUnit = self.CargoHostSpawn:GetGroupFromIndex(1):GetUnit(1)
|
||||||
if CargoHostUnit and CargoHostUnit:isExist() then
|
if CargoHostUnit and CargoHostUnit:IsAlive() then
|
||||||
return CargoHostUnit
|
return CargoHostUnit
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -347,7 +347,7 @@ self:T()
|
|||||||
local Valid = true
|
local Valid = true
|
||||||
|
|
||||||
self.CargoClient = Client
|
self.CargoClient = Client
|
||||||
local ClientUnit = Client:GetClientGroupUnit()
|
local ClientUnit = Client:GetClientGroupDCSUnit()
|
||||||
|
|
||||||
return Valid
|
return Valid
|
||||||
end
|
end
|
||||||
@ -499,10 +499,10 @@ self:T()
|
|||||||
if SpawnCargo then
|
if SpawnCargo then
|
||||||
if self.CargoZone:GetCargoHostUnit() then
|
if self.CargoZone:GetCargoHostUnit() then
|
||||||
--- ReSpawn the Cargo from the CargoHost
|
--- ReSpawn the Cargo from the CargoHost
|
||||||
self.CargoGroupName = self.CargoSpawn:FromHost( self.CargoZone:GetCargoHostUnit(), 60, 30, self.CargoName, false ).name
|
self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30 ):GetName()
|
||||||
else
|
else
|
||||||
--- ReSpawn the Cargo in the CargoZone without a host ...
|
--- ReSpawn the Cargo in the CargoZone without a host ...
|
||||||
self.CargoGroupName = self.CargoSpawn:InZone( self.CargoZone:GetCargoZoneName(), self.CargoName ).name
|
self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone ):GetName()
|
||||||
end
|
end
|
||||||
self:StatusNone()
|
self:StatusNone()
|
||||||
end
|
end
|
||||||
@ -534,7 +534,7 @@ self:T()
|
|||||||
|
|
||||||
local Valid = true
|
local Valid = true
|
||||||
|
|
||||||
local ClientUnit = Client:GetClientGroupUnit()
|
local ClientUnit = Client:GetClientGroupDCSUnit()
|
||||||
|
|
||||||
local CarrierPos = ClientUnit:getPoint()
|
local CarrierPos = ClientUnit:getPoint()
|
||||||
local CarrierPosMove = ClientUnit:getPoint()
|
local CarrierPosMove = ClientUnit:getPoint()
|
||||||
@ -630,8 +630,10 @@ self:T()
|
|||||||
self:T( 'self.CargoName = ' .. self.CargoName )
|
self:T( 'self.CargoName = ' .. self.CargoName )
|
||||||
self:T( 'self.CargoGroupName = ' .. self.CargoGroupName )
|
self:T( 'self.CargoGroupName = ' .. self.CargoGroupName )
|
||||||
|
|
||||||
self.CargoSpawn:FromCarrier( Client:GetClientGroupUnit(), TargetZoneName, self.CargoGroupName )
|
--self.CargoSpawn:FromCarrier( Client:GetClientGroupDCSUnit(), TargetZoneName, self.CargoGroupName )
|
||||||
|
|
||||||
|
self.CargoSpawn:SpawnFromUnit( Client:GetClientGroupUnit(), self.CargoGroupName ):RouteToZone( ZONE:New( TargetZoneName ) )
|
||||||
|
|
||||||
self:StatusUnLoaded()
|
self:StatusUnLoaded()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
@ -666,7 +668,7 @@ self:T()
|
|||||||
if not self.CargoClientInitGroupSpawn then
|
if not self.CargoClientInitGroupSpawn then
|
||||||
self.CargoClientInitGroupSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() )
|
self.CargoClientInitGroupSpawn = SPAWN:New( self.CargoClient:GetClientGroupName() )
|
||||||
end
|
end
|
||||||
self.CargoClientInitGroupSpawn:Spawn( self.CargoClient:GetClientGroupName() )
|
self.CargoClientInitGroupSpawn:ReSpawn( 1 )
|
||||||
end
|
end
|
||||||
|
|
||||||
local SpawnCargo = true
|
local SpawnCargo = true
|
||||||
@ -705,7 +707,7 @@ self:T()
|
|||||||
self:T( self.CargoClient.ClientName )
|
self:T( self.CargoClient.ClientName )
|
||||||
self:T( 'Client Exists.' )
|
self:T( 'Client Exists.' )
|
||||||
|
|
||||||
if routines.IsUnitInRadius( self.CargoClient:GetClientGroupUnit(), Client:ClientPosition(), 150 ) then
|
if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), Client:ClientPosition(), 150 ) then
|
||||||
Near = true
|
Near = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -720,7 +722,7 @@ self:T()
|
|||||||
|
|
||||||
local Valid = true
|
local Valid = true
|
||||||
|
|
||||||
local ClientUnit = Client:GetClientGroupUnit()
|
local ClientUnit = Client:GetClientGroupDCSUnit()
|
||||||
|
|
||||||
local CarrierPos = ClientUnit:getPoint()
|
local CarrierPos = ClientUnit:getPoint()
|
||||||
local CarrierPosMove = ClientUnit:getPoint()
|
local CarrierPosMove = ClientUnit:getPoint()
|
||||||
@ -812,7 +814,7 @@ self:T()
|
|||||||
local OnBoarded = false
|
local OnBoarded = false
|
||||||
|
|
||||||
if self.CargoClient and self.CargoClient:ClientGroup() then
|
if self.CargoClient and self.CargoClient:ClientGroup() then
|
||||||
if routines.IsUnitInRadius( self.CargoClient:GetClientGroupUnit(), self.CargoClient:ClientPosition(), 10 ) then
|
if routines.IsUnitInRadius( self.CargoClient:GetClientGroupDCSUnit(), self.CargoClient:ClientPosition(), 10 ) then
|
||||||
|
|
||||||
-- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough.
|
-- Switch Cargo from self.CargoClient to Client ... Each cargo can have only one client. So assigning the new client for the cargo is enough.
|
||||||
self:StatusLoaded( Client )
|
self:StatusLoaded( Client )
|
||||||
|
|||||||
@ -175,6 +175,24 @@ self:T()
|
|||||||
|
|
||||||
local ClientGroup = self:ClientGroup()
|
local ClientGroup = self:ClientGroup()
|
||||||
|
|
||||||
|
if ClientGroup then
|
||||||
|
if ClientGroup:isExist() then
|
||||||
|
return UNIT:New( ClientGroup:getUnit(1) )
|
||||||
|
else
|
||||||
|
return UNIT:New( self.ClientGroupUnit )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Returns the DCSUnit of the @{CLIENT}.
|
||||||
|
-- @treturn DCSUnit
|
||||||
|
function CLIENT:GetClientGroupDCSUnit()
|
||||||
|
self:T()
|
||||||
|
|
||||||
|
local ClientGroup = self:ClientGroup()
|
||||||
|
|
||||||
if ClientGroup then
|
if ClientGroup then
|
||||||
if ClientGroup:isExist() then
|
if ClientGroup:isExist() then
|
||||||
return ClientGroup:getUnits()[1]
|
return ClientGroup:getUnits()[1]
|
||||||
@ -189,7 +207,7 @@ end
|
|||||||
function CLIENT:GetUnit()
|
function CLIENT:GetUnit()
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
return UNIT:New( self:GetClientGroupUnit() )
|
return UNIT:New( self:GetClientGroupDCSUnit() )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -198,7 +216,7 @@ end
|
|||||||
function CLIENT:ClientPosition()
|
function CLIENT:ClientPosition()
|
||||||
--self:T()
|
--self:T()
|
||||||
|
|
||||||
ClientGroupUnit = self:GetClientGroupUnit()
|
ClientGroupUnit = self:GetClientGroupDCSUnit()
|
||||||
|
|
||||||
if ClientGroupUnit then
|
if ClientGroupUnit then
|
||||||
if ClientGroupUnit:isExist() then
|
if ClientGroupUnit:isExist() then
|
||||||
@ -294,7 +312,7 @@ self:T()
|
|||||||
end
|
end
|
||||||
MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self )
|
MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self )
|
||||||
else
|
else
|
||||||
if self:GetClientGroupUnit() and not self:GetClientGroupUnit():inAir() then
|
if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then
|
||||||
if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then
|
if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then
|
||||||
MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self )
|
MESSAGE:New( Message, MessageCategory, MessageDuration, MessageId ):ToClient( self )
|
||||||
self.Messages[MessageId].MessageTime = timer.getTime()
|
self.Messages[MessageId].MessageTime = timer.getTime()
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
Include.File( "Routines" )
|
Include.File( "Routines" )
|
||||||
Include.File( "Base" )
|
Include.File( "Base" )
|
||||||
Include.File( "Menu" )
|
Include.File( "Menu" )
|
||||||
|
Include.File( "Group" )
|
||||||
|
|
||||||
DATABASE = {
|
DATABASE = {
|
||||||
ClassName = "DATABASE",
|
ClassName = "DATABASE",
|
||||||
@ -138,6 +139,9 @@ function DATABASE:Spawn( SpawnTemplate )
|
|||||||
|
|
||||||
self:_RegisterGroup( SpawnTemplate )
|
self:_RegisterGroup( SpawnTemplate )
|
||||||
coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate )
|
coalition.addGroup( SpawnCountryID, SpawnCategoryID, SpawnTemplate )
|
||||||
|
|
||||||
|
local SpawnGroup = GROUP:New( Group.getByName( SpawnTemplate.name ) )
|
||||||
|
return SpawnGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -206,7 +210,7 @@ end
|
|||||||
|
|
||||||
--- Track DCSRTE DEAD or CRASH events for the internal scoring.
|
--- Track DCSRTE DEAD or CRASH events for the internal scoring.
|
||||||
function DATABASE:OnDeadOrCrash( event )
|
function DATABASE:OnDeadOrCrash( event )
|
||||||
self:T( { event } )
|
--self:T( { event } )
|
||||||
|
|
||||||
local TargetUnit = nil
|
local TargetUnit = nil
|
||||||
local TargetGroup = nil
|
local TargetGroup = nil
|
||||||
@ -241,7 +245,7 @@ function DATABASE:OnDeadOrCrash( event )
|
|||||||
TargetUnitCategory = DATABASECategory[TargetCategory]
|
TargetUnitCategory = DATABASECategory[TargetCategory]
|
||||||
TargetUnitType = TargetType
|
TargetUnitType = TargetType
|
||||||
|
|
||||||
self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } )
|
--self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } )
|
||||||
end
|
end
|
||||||
|
|
||||||
for PlayerName, PlayerData in pairs( self.Players ) do
|
for PlayerName, PlayerData in pairs( self.Players ) do
|
||||||
|
|||||||
177
Moose/Group.lua
177
Moose/Group.lua
@ -13,13 +13,14 @@ GROUP = {
|
|||||||
ClassName="GROUP",
|
ClassName="GROUP",
|
||||||
}
|
}
|
||||||
|
|
||||||
function GROUP:New( _Group )
|
function GROUP:New( DCSGroup )
|
||||||
local self = BASE:Inherit( self, BASE:New() )
|
local self = BASE:Inherit( self, BASE:New() )
|
||||||
self:T( _Group:getName() )
|
self:T( DCSGroup:getName() )
|
||||||
|
|
||||||
self._Group = _Group
|
self.DCSGroup = DCSGroup
|
||||||
self.GroupName = _Group:getName()
|
self.GroupName = DCSGroup:getName()
|
||||||
self.GroupID = _Group:getID()
|
self.GroupID = DCSGroup:getID()
|
||||||
|
self.Controller = DCSGroup:getController()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -29,13 +30,29 @@ function GROUP:NewFromName( GroupName )
|
|||||||
local self = BASE:Inherit( self, BASE:New() )
|
local self = BASE:Inherit( self, BASE:New() )
|
||||||
self:T( GroupName )
|
self:T( GroupName )
|
||||||
|
|
||||||
self._Group = Group.getByName( GroupName )
|
self.DCSGroup = Group.getByName( GroupName )
|
||||||
self.GroupName = self._Group:getName()
|
self.GroupName = self.DCSGroup:getName()
|
||||||
self.GroupID = self._Group:getID()
|
self.GroupID = self.DCSGroup:getID()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GROUP:GetDCSGroup()
|
||||||
|
self:T( { self.GroupName } )
|
||||||
|
return self.DCSGroup
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:GetDCSUnit( UnitNumber )
|
||||||
|
self:T( { self.GroupName, UnitNumber } )
|
||||||
|
return self.DCSGroup:getUnit( UnitNumber )
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:Activate()
|
||||||
|
self:T( { self.GroupName } )
|
||||||
|
trigger.action.activateGroup( self:GetDCSGroup() )
|
||||||
|
return self:GetDCSGroup()
|
||||||
|
end
|
||||||
|
|
||||||
function GROUP:GetName()
|
function GROUP:GetName()
|
||||||
self:T( self.GroupName )
|
self:T( self.GroupName )
|
||||||
@ -43,40 +60,59 @@ function GROUP:GetName()
|
|||||||
return self.GroupName
|
return self.GroupName
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GROUP:GetPoint()
|
||||||
|
self:T( self.GroupName )
|
||||||
|
|
||||||
|
local GroupPoint = self:GetUnit(1):GetPoint()
|
||||||
|
self:T( GroupPoint )
|
||||||
|
return GroupPoint
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function GROUP:Destroy()
|
function GROUP:Destroy()
|
||||||
self:T( self.GroupName )
|
self:T( self.GroupName )
|
||||||
|
|
||||||
for Index, UnitData in pairs( self._Group:getUnits() ) do
|
for Index, UnitData in pairs( self.DCSGroup:getUnits() ) do
|
||||||
self:CreateEventCrash( timer.getTime(), UnitData )
|
self:CreateEventCrash( timer.getTime(), UnitData )
|
||||||
end
|
end
|
||||||
|
|
||||||
self._Group:destroy()
|
self.DCSGroup:destroy()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function GROUP:GetUnit( UnitNumber )
|
function GROUP:GetUnit( UnitNumber )
|
||||||
self:T( self.GroupName )
|
self:T( { self.GroupName, UnitNumber } )
|
||||||
return UNIT:New( self._Group:getUnit( UnitNumber ) )
|
return UNIT:New( self.DCSGroup:getUnit( UnitNumber ) )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function GROUP:IsAir()
|
function GROUP:IsAir()
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
local IsAirResult = self._Group:getCategory() == Group.Category.AIRPLANE or self._Group:getCategory() == Group.Category.HELICOPTER
|
local IsAirResult = self.DCSGroup:getCategory() == Group.Category.AIRPLANE or self.DCSGroup:getCategory() == Group.Category.HELICOPTER
|
||||||
|
|
||||||
self:T( IsAirResult )
|
self:T( IsAirResult )
|
||||||
return IsAirResult
|
return IsAirResult
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GROUP:IsAlive()
|
||||||
|
self:T()
|
||||||
|
|
||||||
|
local IsAliveResult = self.DCSGroup and self.DCSGroup:isExist()
|
||||||
|
|
||||||
|
self:T( IsAliveResult )
|
||||||
|
return IsAliveResult
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function GROUP:AllOnGround()
|
function GROUP:AllOnGround()
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
local AllOnGroundResult = true
|
local AllOnGroundResult = true
|
||||||
|
|
||||||
for Index, UnitData in pairs( self._Group:getUnits() ) do
|
for Index, UnitData in pairs( self.DCSGroup:getUnits() ) do
|
||||||
if UnitData:inAir() then
|
if UnitData:inAir() then
|
||||||
AllOnGroundResult = false
|
AllOnGroundResult = false
|
||||||
end
|
end
|
||||||
@ -92,7 +128,7 @@ self:T()
|
|||||||
|
|
||||||
local MaxVelocity = 0
|
local MaxVelocity = 0
|
||||||
|
|
||||||
for Index, UnitData in pairs( self._Group:getUnits() ) do
|
for Index, UnitData in pairs( self.DCSGroup:getUnits() ) do
|
||||||
|
|
||||||
local Velocity = UnitData:getVelocity()
|
local Velocity = UnitData:getVelocity()
|
||||||
local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z )
|
local VelocityTotal = math.abs( Velocity.x ) + math.abs( Velocity.y ) + math.abs( Velocity.z )
|
||||||
@ -129,13 +165,13 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function GROUP:Embarking( Point, Duration, EmbarkingGroup )
|
function GROUP:Embarking( Point, Duration, EmbarkingGroup )
|
||||||
trace.f( self.ClassName, { self.GroupName, Point, Duration, EmbarkingGroup._Group } )
|
trace.f( self.ClassName, { self.GroupName, Point, Duration, EmbarkingGroup.DCSGroup } )
|
||||||
|
|
||||||
local Controller = self:_GetController()
|
local Controller = self:_GetController()
|
||||||
|
|
||||||
trace.i( self.ClassName, EmbarkingGroup.GroupID )
|
trace.i( self.ClassName, EmbarkingGroup.GroupID )
|
||||||
trace.i( self.ClassName, EmbarkingGroup._Group:getID() )
|
trace.i( self.ClassName, EmbarkingGroup.DCSGroup:getID() )
|
||||||
trace.i( self.ClassName, EmbarkingGroup._Group.id )
|
trace.i( self.ClassName, EmbarkingGroup.DCSGroup.id )
|
||||||
|
|
||||||
Controller:pushTask( { id = 'Embarking',
|
Controller:pushTask( { id = 'Embarking',
|
||||||
params = { x = Point.x,
|
params = { x = Point.x,
|
||||||
@ -169,9 +205,112 @@ trace.f( self.ClassName, { self.GroupName, Point, Radius } )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GROUP:Route( GoPoints )
|
||||||
|
self:T( GoPoints )
|
||||||
|
|
||||||
|
local Points = routines.utils.deepCopy( GoPoints )
|
||||||
|
local MissionTask = { id = 'Mission', params = { route = { points = Points, }, }, }
|
||||||
|
|
||||||
|
--self.Controller.setTask( self.Controller, MissionTask )
|
||||||
|
|
||||||
|
routines.scheduleFunction( self.Controller.setTask, { self.Controller, MissionTask}, timer.getTime() + 1 )
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:RouteToZone( Zone, Randomize, Speed, Formation )
|
||||||
|
self:T( Zone )
|
||||||
|
|
||||||
|
local GroupPoint = self:GetPoint()
|
||||||
|
|
||||||
|
local PointFrom = {}
|
||||||
|
PointFrom.x = GroupPoint.x
|
||||||
|
PointFrom.y = GroupPoint.y
|
||||||
|
PointFrom.type = "Turning Point"
|
||||||
|
PointFrom.action = "Cone"
|
||||||
|
PointFrom.speed = 20 / 1.6
|
||||||
|
|
||||||
|
|
||||||
|
local PointTo = {}
|
||||||
|
local ZonePoint
|
||||||
|
|
||||||
|
if Randomize then
|
||||||
|
ZonePoint = Zone:GetRandomPoint()
|
||||||
|
else
|
||||||
|
ZonePoint = Zone:GetPoint()
|
||||||
|
end
|
||||||
|
|
||||||
|
PointTo.x = ZonePoint.x
|
||||||
|
PointTo.y = ZonePoint.y
|
||||||
|
PointTo.type = "Turning Point"
|
||||||
|
|
||||||
|
if Formation then
|
||||||
|
PointTo.action = Formation
|
||||||
|
else
|
||||||
|
PointTo.action = "Cone"
|
||||||
|
end
|
||||||
|
|
||||||
|
if Speed then
|
||||||
|
PointTo.speed = Speed
|
||||||
|
else
|
||||||
|
PointTo.speed = 20 / 1.6
|
||||||
|
end
|
||||||
|
|
||||||
|
local Points = { PointFrom, PointTo }
|
||||||
|
|
||||||
|
self:T( Points )
|
||||||
|
|
||||||
|
self:Route( Points )
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function GROUP:CopyRoute( Begin, End, Randomize, Radius )
|
||||||
|
self:T( { Begin, End } )
|
||||||
|
|
||||||
|
local Points = {}
|
||||||
|
|
||||||
|
-- Could be a Spawned Group
|
||||||
|
local GroupName = string.match( self:GetName(), ".*#" )
|
||||||
|
if GroupName then
|
||||||
|
GroupName = GroupName:sub( 1, -2 )
|
||||||
|
else
|
||||||
|
GroupName = self:GetName()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:T( { GroupName } )
|
||||||
|
|
||||||
|
local Template = _Database.Groups[GroupName].Template
|
||||||
|
|
||||||
|
if Template then
|
||||||
|
if not Begin then
|
||||||
|
Begin = 0
|
||||||
|
end
|
||||||
|
if not End then
|
||||||
|
End = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
for TPointID = Begin + 1, #Template.route.points - End do
|
||||||
|
if Template.route.points[TPointID] then
|
||||||
|
Points[#Points+1] = routines.utils.deepCopy( Template.route.points[TPointID] )
|
||||||
|
if Randomize then
|
||||||
|
if not Radius then
|
||||||
|
Radius = 500
|
||||||
|
end
|
||||||
|
Points[#Points].x = Points[#Points].x + math.random( Radius * -1, Radius )
|
||||||
|
Points[#Points].y = Points[#Points].y + math.random( Radius * -1, Radius )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Points
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function GROUP:_GetController()
|
function GROUP:_GetController()
|
||||||
|
|
||||||
return self._Group:getController()
|
return self.DCSGroup:getController()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -174,12 +174,12 @@ function MISSION:ReportToAll()
|
|||||||
local AlivePlayers = ''
|
local AlivePlayers = ''
|
||||||
for ClientID, Client in pairs( self._Clients ) do
|
for ClientID, Client in pairs( self._Clients ) do
|
||||||
if Client:ClientGroup() then
|
if Client:ClientGroup() then
|
||||||
if Client:GetClientGroupUnit() then
|
if Client:GetClientGroupDCSUnit() then
|
||||||
if Client:GetClientGroupUnit():getLife() > 0.0 then
|
if Client:GetClientGroupDCSUnit():getLife() > 0.0 then
|
||||||
if AlivePlayers == '' then
|
if AlivePlayers == '' then
|
||||||
AlivePlayers = ' Players: ' .. Client:GetClientGroupUnit():getPlayerName()
|
AlivePlayers = ' Players: ' .. Client:GetClientGroupDCSUnit():getPlayerName()
|
||||||
else
|
else
|
||||||
AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupUnit():getPlayerName()
|
AlivePlayers = AlivePlayers .. ' / ' .. Client:GetClientGroupDCSUnit():getPlayerName()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -486,7 +486,7 @@ trace.scheduled("MISSIONSCHEDULER","Scheduler")
|
|||||||
if Mission.GoalFunction ~= nil then
|
if Mission.GoalFunction ~= nil then
|
||||||
Mission.GoalFunction( Mission, Client )
|
Mission.GoalFunction( Mission, Client )
|
||||||
end
|
end
|
||||||
_Database:_AddMissionTaskScore( Client:GetClientGroupUnit(), Mission.Name, 25 )
|
_Database:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 )
|
||||||
|
|
||||||
-- if not Mission:IsCompleted() then
|
-- if not Mission:IsCompleted() then
|
||||||
-- end
|
-- end
|
||||||
|
|||||||
@ -66,41 +66,51 @@ routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all
|
|||||||
tbl_str[#tbl_str + 1] = '{'
|
tbl_str[#tbl_str + 1] = '{'
|
||||||
|
|
||||||
for ind,val in pairs(tbl) do -- serialize its fields
|
for ind,val in pairs(tbl) do -- serialize its fields
|
||||||
|
local ind_str = {}
|
||||||
if type(ind) == "number" then
|
if type(ind) == "number" then
|
||||||
tbl_str[#tbl_str + 1] = '['
|
ind_str[#ind_str + 1] = '['
|
||||||
tbl_str[#tbl_str + 1] = tostring(ind)
|
ind_str[#ind_str + 1] = tostring(ind)
|
||||||
tbl_str[#tbl_str + 1] = ']='
|
ind_str[#ind_str + 1] = ']='
|
||||||
else --must be a string
|
else --must be a string
|
||||||
tbl_str[#tbl_str + 1] = '['
|
ind_str[#ind_str + 1] = '['
|
||||||
tbl_str[#tbl_str + 1] = routines.utils.basicSerialize(ind)
|
ind_str[#ind_str + 1] = routines.utils.basicSerialize(ind)
|
||||||
tbl_str[#tbl_str + 1] = ']='
|
ind_str[#ind_str + 1] = ']='
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local val_str = {}
|
||||||
if ((type(val) == 'number') or (type(val) == 'boolean')) then
|
if ((type(val) == 'number') or (type(val) == 'boolean')) then
|
||||||
tbl_str[#tbl_str + 1] = tostring(val)
|
val_str[#val_str + 1] = tostring(val)
|
||||||
tbl_str[#tbl_str + 1] = ','
|
val_str[#val_str + 1] = ','
|
||||||
elseif type(val) == 'string' then
|
tbl_str[#tbl_str + 1] = table.concat(ind_str)
|
||||||
tbl_str[#tbl_str + 1] = routines.utils.basicSerialize(val)
|
tbl_str[#tbl_str + 1] = table.concat(val_str)
|
||||||
tbl_str[#tbl_str + 1] = ','
|
elseif type(val) == 'string' then
|
||||||
|
val_str[#val_str + 1] = routines.utils.basicSerialize(val)
|
||||||
|
val_str[#val_str + 1] = ','
|
||||||
|
tbl_str[#tbl_str + 1] = table.concat(ind_str)
|
||||||
|
tbl_str[#tbl_str + 1] = table.concat(val_str)
|
||||||
elseif type(val) == 'nil' then -- won't ever happen, right?
|
elseif type(val) == 'nil' then -- won't ever happen, right?
|
||||||
tbl_str[#tbl_str + 1] = 'nil,'
|
val_str[#val_str + 1] = 'nil,'
|
||||||
|
tbl_str[#tbl_str + 1] = table.concat(ind_str)
|
||||||
|
tbl_str[#tbl_str + 1] = table.concat(val_str)
|
||||||
elseif type(val) == 'table' then
|
elseif type(val) == 'table' then
|
||||||
if ind == "__index" then
|
if ind == "__index" then
|
||||||
tbl_str[#tbl_str + 1] = "__index"
|
-- tbl_str[#tbl_str + 1] = "__index"
|
||||||
tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it
|
-- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it
|
||||||
else
|
else
|
||||||
|
|
||||||
tbl_str[#tbl_str + 1] = _Serialize(val)
|
val_str[#val_str + 1] = _Serialize(val)
|
||||||
tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it
|
val_str[#val_str + 1] = ',' --I think this is right, I just added it
|
||||||
|
tbl_str[#tbl_str + 1] = table.concat(ind_str)
|
||||||
|
tbl_str[#tbl_str + 1] = table.concat(val_str)
|
||||||
end
|
end
|
||||||
elseif type(val) == 'function' then
|
elseif type(val) == 'function' then
|
||||||
tbl_str[#tbl_str + 1] = "function " .. tostring(ind)
|
-- tbl_str[#tbl_str + 1] = "function " .. tostring(ind)
|
||||||
tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it
|
-- tbl_str[#tbl_str + 1] = ',' --I think this is right, I just added it
|
||||||
else
|
else
|
||||||
env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind))
|
-- env.info('unable to serialize value type ' .. routines.utils.basicSerialize(type(val)) .. ' at index ' .. tostring(ind))
|
||||||
env.info( debug.traceback() )
|
-- env.info( debug.traceback() )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
tbl_str[#tbl_str + 1] = '}'
|
tbl_str[#tbl_str + 1] = '}'
|
||||||
return table.concat(tbl_str)
|
return table.concat(tbl_str)
|
||||||
|
|||||||
850
Moose/Spawn.lua
850
Moose/Spawn.lua
File diff suppressed because it is too large
Load Diff
@ -226,7 +226,7 @@ self:T()
|
|||||||
local RouteMessage = "Fly to "
|
local RouteMessage = "Fly to "
|
||||||
self:T( Task.LandingZones )
|
self:T( Task.LandingZones )
|
||||||
for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do
|
for LandingZoneID, LandingZoneName in pairs( Task.LandingZones.LandingZoneNames ) do
|
||||||
RouteMessage = RouteMessage .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupUnit():getPoint(), true, true } ) .. ' km. '
|
RouteMessage = RouteMessage .. LandingZoneName .. ' at ' .. routines.getBRStringZone( { zone = LandingZoneName, ref = Client:GetClientGroupDCSUnit():getPoint(), true, true } ) .. ' km. '
|
||||||
end
|
end
|
||||||
Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot: Route", 20 )
|
Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot: Route", 20 )
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ self:T()
|
|||||||
|
|
||||||
-- check if the Client is in the landing zone
|
-- check if the Client is in the landing zone
|
||||||
self:T( Task.LandingZones.LandingZoneNames )
|
self:T( Task.LandingZones.LandingZoneNames )
|
||||||
Task.CurrentLandingZoneName = routines.IsUnitInZones( Client:GetClientGroupUnit(), Task.LandingZones.LandingZoneNames )
|
Task.CurrentLandingZoneName = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames )
|
||||||
|
|
||||||
if Task.CurrentLandingZoneName then
|
if Task.CurrentLandingZoneName then
|
||||||
|
|
||||||
@ -331,7 +331,7 @@ end
|
|||||||
function STAGELANDING:Validate( Mission, Client, Task )
|
function STAGELANDING:Validate( Mission, Client, Task )
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
Task.CurrentLandingZoneName = routines.IsUnitInZones( Client:GetClientGroupUnit(), Task.LandingZones.LandingZoneNames )
|
Task.CurrentLandingZoneName = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames )
|
||||||
if Task.CurrentLandingZoneName then
|
if Task.CurrentLandingZoneName then
|
||||||
|
|
||||||
-- Client is in de landing zone.
|
-- Client is in de landing zone.
|
||||||
@ -357,7 +357,7 @@ self:T()
|
|||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
|
|
||||||
if Task.IsLandingRequired and Client:GetClientGroupUnit():inAir() then
|
if Task.IsLandingRequired and Client:GetClientGroupDCSUnit():inAir() then
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -397,14 +397,14 @@ end
|
|||||||
function STAGELANDED:Validate( Mission, Client, Task )
|
function STAGELANDED:Validate( Mission, Client, Task )
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
if not routines.IsUnitInZones( Client:GetClientGroupUnit(), Task.CurrentLandingZoneName ) then
|
if not routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName ) then
|
||||||
self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." )
|
self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." )
|
||||||
Task.Signalled = false
|
Task.Signalled = false
|
||||||
Task:RemoveCargoMenus( Client )
|
Task:RemoveCargoMenus( Client )
|
||||||
return -2
|
return -2
|
||||||
end
|
end
|
||||||
|
|
||||||
if Task.IsLandingRequired and Client:GetClientGroupUnit():inAir() then
|
if Task.IsLandingRequired and Client:GetClientGroupDCSUnit():inAir() then
|
||||||
self:T( "Client went back in the air. Go back to stage Landing." )
|
self:T( "Client went back in the air. Go back to stage Landing." )
|
||||||
Task.Signalled = false
|
Task.Signalled = false
|
||||||
return -1
|
return -1
|
||||||
@ -464,7 +464,7 @@ function STAGEUNLOAD:Validate( Mission, Client, Task )
|
|||||||
self:T()
|
self:T()
|
||||||
env.info( 'STAGEUNLOAD:Validate()' )
|
env.info( 'STAGEUNLOAD:Validate()' )
|
||||||
|
|
||||||
if routines.IsUnitInZones( Client:GetClientGroupUnit(), Task.CurrentLandingZoneName ) then
|
if routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName ) then
|
||||||
else
|
else
|
||||||
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
||||||
Task:RemoveCargoMenus( Client )
|
Task:RemoveCargoMenus( Client )
|
||||||
@ -473,7 +473,7 @@ self:T()
|
|||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
if not Client:GetClientGroupUnit():inAir() then
|
if not Client:GetClientGroupDCSUnit():inAir() then
|
||||||
else
|
else
|
||||||
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
||||||
Task:RemoveCargoMenus( Client )
|
Task:RemoveCargoMenus( Client )
|
||||||
@ -578,7 +578,7 @@ self:T()
|
|||||||
self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName )
|
self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName )
|
||||||
|
|
||||||
if not Task.IsSlingLoad then
|
if not Task.IsSlingLoad then
|
||||||
if not routines.IsUnitInZones( Client:GetClientGroupUnit(), Task.CurrentLandingZoneName ) then
|
if not routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName ) then
|
||||||
Task:RemoveCargoMenus( Client )
|
Task:RemoveCargoMenus( Client )
|
||||||
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
||||||
Task.CargoName = nil
|
Task.CargoName = nil
|
||||||
@ -587,7 +587,7 @@ self:T()
|
|||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
|
|
||||||
if not Client:GetClientGroupUnit():inAir() then
|
if not Client:GetClientGroupDCSUnit():inAir() then
|
||||||
else
|
else
|
||||||
-- The carrier is back in the air, undo the loading process.
|
-- The carrier is back in the air, undo the loading process.
|
||||||
Task:RemoveCargoMenus( Client )
|
Task:RemoveCargoMenus( Client )
|
||||||
@ -673,7 +673,7 @@ self:T()
|
|||||||
function STAGEARRIVE:Validate( Mission, Client, Task )
|
function STAGEARRIVE:Validate( Mission, Client, Task )
|
||||||
self:T()
|
self:T()
|
||||||
|
|
||||||
Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupUnit(), Task.LandingZones )
|
Task.CurrentLandingZoneID = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones )
|
||||||
if ( Task.CurrentLandingZoneID ) then
|
if ( Task.CurrentLandingZoneID ) then
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
@ -12,27 +12,49 @@ UNIT = {
|
|||||||
ClassName="UNIT",
|
ClassName="UNIT",
|
||||||
}
|
}
|
||||||
|
|
||||||
function UNIT:New( _Unit )
|
function UNIT:New( DCSUnit )
|
||||||
local self = BASE:Inherit( self, BASE:New() )
|
local self = BASE:Inherit( self, BASE:New() )
|
||||||
self:T( _Unit:getName() )
|
self:T( DCSUnit:getName() )
|
||||||
|
|
||||||
self._Unit = _Unit
|
self.DCSUnit = DCSUnit
|
||||||
self.UnitName = _Unit:getName()
|
self.UnitName = DCSUnit:getName()
|
||||||
self.UnitID = _Unit:getID()
|
self.UnitID = DCSUnit:getID()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function UNIT:IsAlive()
|
||||||
|
self:T( self.UnitName )
|
||||||
|
|
||||||
|
return ( self.DCSUnit and self.DCSUnit:isExist() )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function UNIT:GetCallSign()
|
function UNIT:GetCallSign()
|
||||||
self:T( self.UnitName )
|
self:T( self.UnitName )
|
||||||
|
|
||||||
return self._Unit:getCallsign()
|
return self.DCSUnit:getCallsign()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function UNIT:GetPoint()
|
||||||
|
self:T( self.UnitName )
|
||||||
|
|
||||||
|
local UnitPos = self.DCSUnit:getPosition().p
|
||||||
|
|
||||||
|
local UnitPoint = {}
|
||||||
|
UnitPoint.x = UnitPos.x
|
||||||
|
UnitPoint.y = UnitPos.z
|
||||||
|
|
||||||
|
self:T( UnitPoint )
|
||||||
|
return UnitPoint
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function UNIT:GetPositionVec3()
|
function UNIT:GetPositionVec3()
|
||||||
self:T( self.UnitName )
|
self:T( self.UnitName )
|
||||||
|
|
||||||
local UnitPos = self._Unit:getPosition().p
|
local UnitPos = self.DCSUnit:getPosition().p
|
||||||
|
|
||||||
self:T( UnitPos )
|
self:T( UnitPos )
|
||||||
return UnitPos
|
return UnitPos
|
||||||
|
|||||||
@ -30,6 +30,17 @@ trace.f( self.ClassName, ZoneName )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ZONE:GetPoint()
|
||||||
|
self:T( self.ZoneName )
|
||||||
|
|
||||||
|
local Zone = trigger.misc.getZone( self.ZoneName )
|
||||||
|
local Point = { x = Zone.point.x, y = Zone.point.z }
|
||||||
|
|
||||||
|
self:T( { Zone, Point } )
|
||||||
|
|
||||||
|
return Point
|
||||||
|
end
|
||||||
|
|
||||||
function ZONE:GetRandomPoint()
|
function ZONE:GetRandomPoint()
|
||||||
trace.f( self.ClassName, self.ZoneName )
|
trace.f( self.ClassName, self.ZoneName )
|
||||||
|
|
||||||
@ -55,3 +66,4 @@ trace.f( self.ClassName, self.ZoneName )
|
|||||||
|
|
||||||
return Zone.radius
|
return Zone.radius
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1,15 +1,81 @@
|
|||||||
Include.File( "Spawn" )
|
Include.File( "Spawn" )
|
||||||
|
|
||||||
SpawnTest = SPAWN:New( 'TEST' ):Schedule( 1, 1, 15, 0.4 ):Repeat()
|
|
||||||
|
|
||||||
SpawnTestPlane = SPAWN:New( 'TESTPLANE' ):Schedule( 1, 1, 15, 0.4 ):RepeatOnLanding()
|
-- Tests Batumi
|
||||||
|
---------------
|
||||||
|
Spawn_Plane_Scheduled = SPAWN:New( "Spawn Plane Scheduled" ):SpawnScheduled( 30, 0.4 )
|
||||||
|
Spawn_Helicopter_Scheduledd = SPAWN:New( "Spawn Helicopter Scheduled" ):SpawnScheduled( 30, 1 )
|
||||||
|
Spawn_Ship_Scheduled = SPAWN:New( "Spawn Ship Scheduled" ):SpawnScheduled( 30, 0.5 )
|
||||||
|
Spawn_Vehicle_Scheduled = SPAWN:New( "Spawn Vehicle Scheduled" ):SpawnScheduled( 30, 0.5 )
|
||||||
|
|
||||||
SpawnTestShipPlane = SPAWN:New( 'SHIPPLANE' ):Schedule( 1, 1, 15, 0.4 ):RepeatOnLanding()
|
-- Tests Tbilisi
|
||||||
|
----------------
|
||||||
SpawnTestShipHeli = SPAWN:New( 'SHIPHELI' ):Schedule( 1, 1, 15, 0.4 ):RepeatOnLanding()
|
Spawn_Plane_Limited_Repeat = SPAWN:New( "Spawn Plane Limited Repeat" ):Limit( 1, 1 ):Repeat():Spawn()
|
||||||
|
Spawn_Plane_Limited_RepeatOnLanding = SPAWN:New( "Spawn Plane Limited RepeatOnLanding" ):Limit( 1, 1 ):Repeat():Spawn()
|
||||||
SpawnCH53E = SPAWN:New( 'VEHICLE' )
|
Spawn_Plane_Limited_RepeatOnEngineShutDown = SPAWN:New( "Spawn Plane Limited RepeatOnEngineShutDown" ):Limit( 1, 1 ):Repeat():Spawn()
|
||||||
|
Spawn_Helicopter_Limited_Repeat = SPAWN:New( "Spawn Helicopter Limited Repeat" ):Limit( 1, 1 ):Repeat():Spawn()
|
||||||
|
Spawn_Helicopter_Limited_RepeatOnLanding = SPAWN:New( "Spawn Helicopter Limited RepeatOnLanding" ):Limit( 1, 1 ):Repeat():Spawn()
|
||||||
|
Spawn_Helicopter_Limited_RepeatOnEngineShutDown = SPAWN:New( "Spawn Helicopter Limited RepeatOnEngineShutDown" ):Limit( 1, 1 ):Repeat():Spawn()
|
||||||
|
|
||||||
|
|
||||||
SpawnTestHelicopterCleanUp = SPAWN:New( "TEST_HELI_CLEANUP" ):Limit( 3, 100 ):Schedule( 10, 0 ):RandomizeRoute( 1, 1, 1000 ):CleanUp( 180 )
|
-- Tests Soganlug
|
||||||
SpawnTestVehiclesCleanUp = SPAWN:New( "TEST_AAA_CLEANUP" ):Limit( 3, 100 ):Schedule( 10, 0 ):RandomizeRoute( 1, 1, 1000 )
|
Spawn_Plane_Limited_Scheduled = SPAWN:New( "Spawn Plane Limited Scheduled" ):Limit( 2, 10 ):SpawnScheduled( 30, 0 )
|
||||||
|
Spawn_Helicopter_Limited_Scheduled = SPAWN:New( "Spawn Helicopter Limited Scheduled" ):Limit( 2, 10 ):SpawnScheduled( 30, 0 )
|
||||||
|
Spawn_Ground_Limited_Scheduled = SPAWN:New( "Spawn Vehicle Limited Scheduled" ):Limit( 1, 20 ):SpawnScheduled( 90, 0 )
|
||||||
|
|
||||||
|
-- Tests Sukhumi
|
||||||
|
Spawn_Plane_Limited_Scheduled_RandomizeRoute = SPAWN:New( "Spawn Plane Limited Scheduled RandomizeRoute" ):Limit( 2, 10 ):RandomizeRoute( 1, 1, 4000 ):SpawnScheduled( 30, 0 )
|
||||||
|
Spawn_Helicopter_Limited_Scheduled_RandomizeRoute = SPAWN:New( "Spawn Helicopter Limited Scheduled RandomizeRoute" ):Limit( 2, 10 ):RandomizeRoute( 1, 1, 4000 ):SpawnScheduled( 30, 0 )
|
||||||
|
Spawn_Vehicle_Limited_Scheduled_RandomizeRoute = SPAWN:New( "Spawn Vehicle Limited Scheduled RandomizeRoute" ):Limit( 10, 10 ):RandomizeRoute( 1, 1, 1000 ):SpawnScheduled( 1, 0 )
|
||||||
|
|
||||||
|
|
||||||
|
-- Tests Kutaisi
|
||||||
|
----------------
|
||||||
|
-- Spawn Helicopters and Ground attack.
|
||||||
|
-- Observe when helicopters land but are not dead and are out of the danger zone, that they get removed after a while (+/- 180 seconds) and ReSpawn.
|
||||||
|
Spawn_Helicopter_Scheduled_CleanUp = SPAWN:New( "Spawn Helicopter Scheduled CleanUp" ):Limit( 3, 100 ):RandomizeRoute( 1, 1, 1000 ):CleanUp( 180 ):SpawnScheduled( 10, 0 )
|
||||||
|
Spawn_Vehicle_Scheduled_CleanUp = SPAWN:New( "Spawn Vehicle Scheduled CleanUp" ):Limit( 3, 100 ):RandomizeRoute( 1, 1, 1000 ):SpawnScheduled( 10, 0 )
|
||||||
|
|
||||||
|
-- Test Matrix Visible Setup
|
||||||
|
|
||||||
|
SpawnTestVisible = SPAWN:New( "Spawn Vehicle Visible Scheduled" ):Limit( 200, 200 ):SpawnArray( 59, 20, 20, 10 ):SpawnScheduled( 10, 0.2 )
|
||||||
|
|
||||||
|
Spawn_Templates_1 = { "Spawn Vehicle Visible Template A",
|
||||||
|
"Spawn Vehicle Visible Template B",
|
||||||
|
"Spawn Vehicle Visible Template C",
|
||||||
|
"Spawn Vehicle Visible Template D",
|
||||||
|
"Spawn Vehicle Visible Template E",
|
||||||
|
"Spawn Vehicle Visible Template F",
|
||||||
|
"Spawn Vehicle Visible Template G",
|
||||||
|
"Spawn Vehicle Visible Template H",
|
||||||
|
"Spawn Vehicle Visible Template I",
|
||||||
|
"Spawn Vehicle Visible Template J"
|
||||||
|
}
|
||||||
|
|
||||||
|
Spawn_Vehicle_Visible_RandomizeTemplate_Scheduled_1 = SPAWN:New( "Spawn Vehicle Visible RandomizeTemplate Scheduled" )
|
||||||
|
:Limit( 40, 40 )
|
||||||
|
:RandomizeTemplate( Spawn_Templates_1 )
|
||||||
|
:SpawnArray( 49, 20, 8, 8 )
|
||||||
|
:SpawnScheduled( 10, 0.2 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Tests Maykop
|
||||||
|
Spawn_Infantry = SPAWN:New( "Spawn Infantry" )
|
||||||
|
:Limit( 10, 10 )
|
||||||
|
|
||||||
|
|
||||||
|
Spawn_Vehicle_Host = SPAWN:New( "Spawn Vehicle Host" )
|
||||||
|
:Limit( 10, 10 )
|
||||||
|
:SpawnArray( 0, 5, 8, 8 )
|
||||||
|
:SpawnScheduled( 10, 0.2 )
|
||||||
|
|
||||||
|
|
||||||
|
Spawn_Vehicle_SpawnToZone = SPAWN:New( "Spawn Vehicle SpawnToZone" )
|
||||||
|
:Limit( 10, 10 )
|
||||||
|
|
||||||
|
Spawn_Helicopter_SpawnToZone = SPAWN:New( "Spawn Helicopter SpawnToZone" )
|
||||||
|
:Limit( 10, 10 )
|
||||||
|
:SpawnScheduled( 60, 0.2 )
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user