Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable counterintel by default for AI units #6635

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/snippets/ai.6635.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- (#6635) Enable counterintel by default for units created by AIs. This includes Cybran aircraft stealth, Cybran land scout's cloak, and UEF strategic bomber's jamming.
98 changes: 49 additions & 49 deletions units/DRA0202/DRA0202_Script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,57 +22,55 @@ local CreateRotator = CreateRotator
DRA0202 = ClassUnit(CAirUnit) {
Weapons = {
AntiAirMissiles = ClassWeapon(CAAMissileNaniteWeapon) {},
---@class DRA0202_GroundMissile : CIFMissileCorsairWeapon
GroundMissile = ClassWeapon(CIFMissileCorsairWeapon) {

IdleState = State (CIFMissileCorsairWeapon.IdleState) {

Main = function(self)
CIFMissileCorsairWeapon.IdleState.Main(self)
end,

OnGotTarget = function(self)
if self.unit:IsUnitState('Moving') then
self.unit:SetSpeedMult(1.0)
else
self.unit:SetBreakOffTriggerMult(2.0)
self.unit:SetBreakOffDistanceMult(8.0)
self.unit:SetSpeedMult(0.67)
CIFMissileCorsairWeapon.IdleState.OnGotTarget(self)
end
end,
},

OnGotTarget = function(self)
local unit = self.unit

if unit:IsUnitState('Moving') then
unit:SetSpeedMult(1.0)
else
unit:SetBreakOffTriggerMult(2.0)
unit:SetBreakOffDistanceMult(8.0)
unit:SetSpeedMult(0.67)
CIFMissileCorsairWeapon.OnGotTarget(self)
end
end,

OnLostTarget = function(self)
local unit = self.unit

unit:SetBreakOffTriggerMult(1.0)
unit:SetBreakOffDistanceMult(1.0)
unit:SetSpeedMult(1.0)
CIFMissileCorsairWeapon.OnLostTarget(self)
end,
IdleState = State(CIFMissileCorsairWeapon.IdleState) {
---@param self DRA0202_GroundMissile
Main = function(self)
CIFMissileCorsairWeapon.IdleState.Main(self)
end,
---@param self DRA0202_GroundMissile
OnGotTarget = function(self)
if self.unit:IsUnitState('Moving') then
self.unit:SetSpeedMult(1.0)
else
self.unit:SetBreakOffTriggerMult(2.0)
self.unit:SetBreakOffDistanceMult(8.0)
self.unit:SetSpeedMult(0.67)
CIFMissileCorsairWeapon.IdleState.OnGotTarget(self)
end
end,
},

---@param self DRA0202_GroundMissile
OnGotTarget = function(self)
local unit = self.unit

if unit:IsUnitState('Moving') then
unit:SetSpeedMult(1.0)
else
unit:SetBreakOffTriggerMult(2.0)
unit:SetBreakOffDistanceMult(8.0)
unit:SetSpeedMult(0.67)
CIFMissileCorsairWeapon.OnGotTarget(self)
end
end,

---@param self DRA0202_GroundMissile
OnLostTarget = function(self)
local unit = self.unit

unit:SetBreakOffTriggerMult(1.0)
unit:SetBreakOffDistanceMult(1.0)
unit:SetSpeedMult(1.0)
CIFMissileCorsairWeapon.OnLostTarget(self)
end,
},
},

OnStopBeingBuilt = function(self,builder,layer)
CAirUnit.OnStopBeingBuilt(self,builder,layer)
self:SetMaintenanceConsumptionInactive()
self:SetScriptBit('RULEUTC_StealthToggle', true)
self:RequestRefreshUI()
end,

---@param self DRA0202
---@param target? Unit | Blip
RotateWings = function(self, target)
local trash = self.Trash

Expand All @@ -82,7 +80,7 @@ DRA0202 = ClassUnit(CAirUnit) {
end
if not self.RWingRotator then
self.RWingRotator = CreateRotator(self, 'B03', 'x')
TrashBagAdd(trash,self.RWingRotator)
TrashBagAdd(trash, self.RWingRotator)
end
local fighterAngle = 0
local bomberAngle = -90
Expand All @@ -109,17 +107,19 @@ DRA0202 = ClassUnit(CAirUnit) {
end
end,

---@param self DRA0202
OnCreate = function(self)
CAirUnit.OnCreate(self)
local trash = self.Trash
TrashBagAdd(trash,ForkThread(self.MonitorWings,self))
TrashBagAdd(trash, ForkThread(self.MonitorWings, self))
end,

---@param self DRA0202
MonitorWings = function(self)
local airTarget
while self and not self.Dead do
local airTargetWeapon = self:GetWeaponByLabel('AntiAirMissiles')
if airTargetWeapon then
if airTargetWeapon then
airTarget = airTargetWeapon:GetCurrentTarget()
end

Expand Down
25 changes: 19 additions & 6 deletions units/UEA0304/UEA0304_Script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,27 @@ UEA0304 = ClassUnit(TAirUnit) {
LinkedRailGun2 = ClassWeapon(TAirToAirLinkedRailgun) {},
},

OnStopBeingBuilt = function(self,builder,layer)
TAirUnit.OnStopBeingBuilt(self,builder,layer)
--Turns Jamming off when unit is built
self:SetScriptBit('RULEUTC_JammingToggle', true)
---@param self UEA0304
---@param builder Unit
---@param layer Layer
OnStopBeingBuilt = function(self, builder, layer)
TAirUnit.OnStopBeingBuilt(self, builder, layer)
-- Don't turn off jamming for AI so that it uses it by default
if self.Brain.BrainType == 'Human' then
self:SetScriptBit('RULEUTC_JammingToggle', true)
else
self:SetMaintenanceConsumptionActive()
end
end,


--- Do not allow friendly fire from our own army's strategic bombers
---@param self UEA0304
---@param instigator Unit
---@param amount number
---@param vector Vector
---@param damageType DamageType
OnDamage = function(self, instigator, amount, vector, damageType)
if instigator and instigator.Army == self.Army and instigator.Blueprint.CategoriesHash.STRATEGICBOMBER then
if instigator and instigator.Army == self.Army and instigator.Blueprint.CategoriesHash["STRATEGICBOMBER"] then
return
end

Expand Down
16 changes: 12 additions & 4 deletions units/URA0303/URA0303_Script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,21 @@ URA0303 = ClassUnit(CAirUnit) {
Missiles1 = ClassWeapon(CAAMissileNaniteWeapon) {},
Missiles2 = ClassWeapon(CAAMissileNaniteWeapon) {},
},
OnStopBeingBuilt = function(self,builder,layer)
CAirUnit.OnStopBeingBuilt(self,builder,layer)

---@param self URA0303
---@param builder Unit
---@param layer Layer
OnStopBeingBuilt = function(self, builder, layer)
CAirUnit.OnStopBeingBuilt(self, builder, layer)
self:SetMaintenanceConsumptionInactive()
self:SetScriptBit('RULEUTC_StealthToggle', true)
-- Don't turn off stealth for AI so that it uses it by default
if self.Brain.BrainType == 'Human' then
self:SetScriptBit('RULEUTC_StealthToggle', true)
else
self:SetMaintenanceConsumptionActive()
end
self:RequestRefreshUI()
end,

}

TypeClass = URA0303
33 changes: 23 additions & 10 deletions units/URA0304/URA0304_Script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,34 @@ URA0304 = ClassUnit(CAirUnit) {
AAGun1 = ClassWeapon(CAAAutocannon) {},
AAGun2 = ClassWeapon(CAAAutocannon) {},
},
ContrailBones = {'Left_Exhaust','Center_Exhaust','Right_Exhaust'},
ExhaustBones = {'Left_Exhaust','Center_Exhaust','Right_Exhaust'},

OnStopBeingBuilt = function(self,builder,layer)
CAirUnit.OnStopBeingBuilt(self,builder,layer)
--Turns Stealth off when unit is built
self:SetScriptBit('RULEUTC_StealthToggle', true)
ContrailBones = { 'Left_Exhaust', 'Center_Exhaust', 'Right_Exhaust' },
ExhaustBones = { 'Left_Exhaust', 'Center_Exhaust', 'Right_Exhaust' },

---@param self URA0304
---@param builder Unit
---@param layer Layer
OnStopBeingBuilt = function(self, builder, layer)
CAirUnit.OnStopBeingBuilt(self, builder, layer)
-- Don't turn off stealth for AI so that it uses it by default
if self.Brain.BrainType == 'Human' then
self:SetScriptBit('RULEUTC_StealthToggle', true)
else
self:SetMaintenanceConsumptionActive()
end
end,


---@param self URA0304
---@param instigator Unit
---@param amount number
---@param vector Vector
---@param damageType DamageType
OnDamage = function(self, instigator, amount, vector, damageType)
if instigator and instigator:GetBlueprint().CategoriesHash.STRATEGICBOMBER and instigator.Army == self.Army then
if instigator and instigator.Army == self.Army and instigator.Blueprint.CategoriesHash["STRATEGICBOMBER"] then
return
end

CAirUnit.OnDamage(self, instigator, amount, vector, damageType)
end,
}

TypeClass = URA0304
41 changes: 26 additions & 15 deletions units/URA0401/URA0401_script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@ local util = import("/lua/utilities.lua")
local fxutil = import("/lua/effectutilities.lua")

---@class URA0401 : CAirUnit
---@field MovementAmbientExhaustEffectsBag table # Old style trashbag that is a table
---@field AnimManip moho.AnimationManipulator # Takeoff/landing animations
URA0401 = ClassUnit(CAirUnit) {
Weapons = {
Missile01 = ClassWeapon(CDFRocketIridiumWeapon) {},
Missile02 = ClassWeapon(CDFRocketIridiumWeapon) {},
HeavyBolter = ClassWeapon(CDFHeavyElectronBolterWeapon){},
HeavyBolterBack = ClassWeapon(CDFHeavyElectronBolterWeapon){},
HeavyBolter = ClassWeapon(CDFHeavyElectronBolterWeapon) {},
HeavyBolterBack = ClassWeapon(CDFHeavyElectronBolterWeapon) {},
AAMissile01 = ClassWeapon(CAAMissileNaniteWeapon) {},
AAMissile02 = ClassWeapon(CAAMissileNaniteWeapon) {},
},
Expand All @@ -31,25 +33,33 @@ URA0401 = ClassUnit(CAirUnit) {
'Exhaust_Right03',
},

DestructionPartsChassisToss = {'URA0401',},
DestructionPartsChassisToss = { 'URA0401', },
DestroyNoFallRandomChance = 1.1,

OnStopBeingBuilt = function(self,builder,layer)
CAirUnit.OnStopBeingBuilt(self,builder,layer)
self:SetScriptBit('RULEUTC_StealthToggle', true)
---@param self URA0401
---@param builder Unit
---@param layer Layer
OnStopBeingBuilt = function(self, builder, layer)
CAirUnit.OnStopBeingBuilt(self, builder, layer)
-- Don't turn off stealth for AI so that it uses it by default
if self.Brain.BrainType == 'Human' then
self:SetScriptBit('RULEUTC_StealthToggle', true)
else
self:SetMaintenanceConsumptionActive()
end
self.AnimManip = CreateAnimator(self)
self.Trash:Add(self.AnimManip)
end,

---@param self URA0401
---@param new HorizontalMovementState
---@param old HorizontalMovementState
OnMotionHorzEventChange = function(self, new, old )
OnMotionHorzEventChange = function(self, new, old)
CAirUnit.OnMotionHorzEventChange(self, new, old)

if self.ThrustExhaustTT1 == nil then
if self.ThrustExhaustTT1 == nil then
if self.MovementAmbientExhaustEffectsBag then
fxutil.CleanupEffectBag(self,'MovementAmbientExhaustEffectsBag')
fxutil.CleanupEffectBag(self, 'MovementAmbientExhaustEffectsBag')
else
self.MovementAmbientExhaustEffectsBag = {}
end
Expand All @@ -60,16 +70,17 @@ URA0401 = ClassUnit(CAirUnit) {
KillThread(self.ThrustExhaustTT1)
fxutil.CleanupEffectBag(self, 'MovementAmbientExhaustEffectsBag')
self.ThrustExhaustTT1 = nil
end
end
end,

---@param self URA0401
MovementAmbientExhaustThread = function(self)
while not self.Dead do
local ExhaustEffects = {
'/effects/emitters/dirty_exhaust_smoke_01_emit.bp',
'/effects/emitters/dirty_exhaust_sparks_01_emit.bp',
'/effects/emitters/dirty_exhaust_sparks_01_emit.bp',
}
local ExhaustBeam = '/effects/emitters/missile_exhaust_fire_beam_03_emit.bp'
local ExhaustBeam = '/effects/emitters/missile_exhaust_fire_beam_03_emit.bp'

for kE, vE in ExhaustEffects do
for kB, vB in self.MovementAmbientExhaustBones do
Expand All @@ -80,9 +91,9 @@ URA0401 = ClassUnit(CAirUnit) {

WaitSeconds(2)
fxutil.CleanupEffectBag(self, 'MovementAmbientExhaustEffectsBag')
WaitSeconds(util.GetRandomFloat(1,7))
end

WaitSeconds(util.GetRandomFloat(1, 7))
end
end,

---@param self URA0401
Expand Down
16 changes: 13 additions & 3 deletions units/URL0101/URL0101_Script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,23 @@ local CWalkingLandUnit = import("/lua/cybranunits.lua").CWalkingLandUnit

---@class URL0101 : CWalkingLandUnit
URL0101 = ClassUnit(CWalkingLandUnit) {

---@param self URL0101
---@param builder Unit
---@param layer Layer
OnStopBeingBuilt = function(self, builder, layer)
CWalkingLandUnit.OnStopBeingBuilt(self, builder, layer)

self.Trash:Add(CreateRotator(self, 'Spinner', 'y', nil, 90, 5, 90))
self:SetMaintenanceConsumptionInactive()
self:SetScriptBit('RULEUTC_CloakToggle', true)
self:RequestRefreshUI()

-- Don't turn off cloak for AI so that it uses it by default
if self.Brain.BrainType == 'Human' then
self:SetMaintenanceConsumptionInactive()
self:SetScriptBit('RULEUTC_CloakToggle', true)
self:RequestRefreshUI()
else
self:SetMaintenanceConsumptionActive()
end
end,
}

Expand Down
13 changes: 8 additions & 5 deletions units/XRA0305/XRA0305_script.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,18 @@ local CDFLaserDisintegratorWeapon = import("/lua/cybranweapons.lua").CDFLaserDis

---@class XRA0305 : CAirUnit
XRA0305 = ClassUnit(CAirUnit) {

Weapons = {
Missiles1 = ClassWeapon(CAAMissileNaniteWeapon) {},
Disintegrator01 = ClassWeapon(CDFLaserDisintegratorWeapon) {},
},

OnStopBeingBuilt = function(self,builder,layer)
CAirUnit.OnStopBeingBuilt(self,builder,layer)

---@param self XRA0305
---@param builder Unit
---@param layer Layer
OnStopBeingBuilt = function(self, builder, layer)
CAirUnit.OnStopBeingBuilt(self, builder, layer)
self:SetMaintenanceConsumptionActive()
end,
}
TypeClass = XRA0305

TypeClass = XRA0305
Loading