Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----------------------------------------------------------------------------
- -- File : /units/UAL0216/UAL0216_script.lua
- --
- -- Author(s): Eddy, EbolaSoup, Resin Smoker, Optimus Prime, Vissroid
- --
- -- Summary : Aeon T2 Artillery Bot Script
- --
- -- Copyright © 2011 4DC_V0.82 All rights reserved.
- -----------------------------------------------------------------------------
- -- Misc Lua called
- local AWalkingLandUnit = import('/lua/aeonunits.lua').AWalkingLandUnit
- local EffectUtils = import('/lua/EffectUtilities.lua')
- local EffectTemplate = import('/lua/EffectTemplates.lua')
- --4DC Specific Lua called
- local Deflector = import('/mods/4DC_V0.82/lua/CustomAbilities/4D_DeflectorShield/DeflectorShield.lua')
- -- Weapon Local lua called
- local CannonWeapon = import('/mods/4DC_V0.82/lua/4D_weapons.lua').UAL0216_CannonWeapon
- UAL0216 = Class(AWalkingLandUnit) {
- Weapons = {
- MainWeapon = Class(CannonWeapon) {
- OnCreate = function(self)
- self.MainWeaponRecoilAnimator = CreateAnimator(self.unit)
- CannonWeapon.OnCreate(self)
- end,
- PlayRackRecoil = function(self, rackList)
- CannonWeapon.PlayRackRecoil(self, rackList)
- if not self.unit:IsDead() and self.unit.Deployed then
- -- Perform recoil shake
- self.unit:ShakeCamera(0.5, 0.25, 0.25, 0.25)
- -- Steam effect from weapon vents
- self.ExhaustEffects = EffectUtils.CreateBoneEffects( self.unit, 'Bot_Arm_Right1', self.unit:GetArmy(), EffectTemplate.WeaponSteam01 )
- self.MainWeaponRecoilAnimator:PlayAnim(self:GetBlueprint().AnimationRecoil):SetRate(self:GetBlueprint().AnimationRecoilRate or 1)
- else
- -- Perform recoil shake
- self.unit:ShakeCamera(0.25, 0.125, 0.125, 0.125)
- end
- end,
- },
- },
- OnCreate = function(self,builder,layer)
- AWalkingLandUnit.OnCreate(self)
- -- Creating Global Variables
- self.MyWeapon = self:GetWeaponByLabel('MainWeapon')
- self.WepBP = self.MyWeapon:GetBlueprint()
- -- Setup of the deployment animation
- self.DeployAnim = CreateAnimator(self)
- self.DeployAnim:PlayAnim(self:GetBlueprint().Display.AnimationArtyDeploy)self.DeployAnim:SetRate(0)
- self.Trash:Add(self.DeployAnim)
- -- Setup of the deflector animation
- self.DeflectorAnim = CreateAnimator(self)
- self.DeflectorAnim:PlayAnim(self:GetBlueprint().Display.AnimationDeflectorDeploy)self.DeflectorAnim:SetRate(0)
- self.Trash:Add(self.DeflectorAnim)
- -- Booleans to record unit state and prevent the toggles from being used while changing modes
- self.ModeChange = false
- self.Deployed = false
- self.Moving = false
- -- Halt Econ
- self:SetMaintenanceConsumptionActive()
- -- Initialize the deflector
- if EntityCategoryContains(categories.DEFLECTOR, self) then
- self:ForkThread(self.KickstartDeflector)
- end
- end,
- OnScriptBitSet = function(self, bit)
- AWalkingLandUnit.OnScriptBitSet(self, bit)
- self:ForkThread(self.testMe)
- if not self:IsDead() and bit == 0 then
- self:ForkThread(self.DeflectorOn)
- elseif not self:IsDead() and bit == 1 then
- if not self.Deployed and not self.ModeChange then
- self:ForkThread(self.DeployArty)
- end
- end
- end,
- OnScriptBitClear = function(self, bit)
- AWalkingLandUnit.OnScriptBitClear(self, bit)
- if not self:IsDead() and bit == 0 then
- self:ForkThread(self.DeflectorOff)
- elseif not self:IsDead() and bit == 1 then
- if self.Deployed and not self.ModeChange then
- self:ForkThread(self.UnDeployArty)
- end
- end
- end,
- OnMotionHorzEventChange = function(self, new, old)
- -- Updates the gloabal variable for when the Meson movement changes
- if not self:IsDead() and new == 'Stopped' then
- self.Moving = false
- elseif not self:IsDead() then
- self.Moving = true
- end
- AWalkingLandUnit.OnMotionHorzEventChange(self, new, old)
- end,
- DeployArty = function(self)
- self.ModeChange = true
- self.MyWeapon:SetEnabled(false)
- IssueClearCommands({self})
- while not self:IsDead() and self.Moving do
- -- Delay till the bot has stopped moving
- WaitSeconds(1)
- end
- if not self:IsDead() then
- -- Deploy cannon for long range artillery support
- self:SetImmobile(true)
- self.MyWeapon:ChangeProjectileBlueprint(self.WepBP.SecondaryProjectileId)
- self.MyWeapon:AddDamageMod(692.5)
- self.MyWeapon:AddDamageRadiusMod(1.75)
- self.MyWeapon:ChangeMaxRadius(60)
- self.MyWeapon:ChangeMinRadius(10)
- self.MyWeapon:ChangeRateOfFire(0.275)
- self.MyWeapon:SetFiringRandomness(0.675)
- self.DeployAnim:SetRate(0.5)
- WaitFor(self.DeployAnim)
- if not self:IsDead() then
- self.Deployed = true
- self.ModeChange = false
- self.MyWeapon:SetEnabled(true)
- end
- end
- end,
- UnDeployArty = function(self)
- self.ModeChange = true
- self.MyWeapon:SetEnabled(false)
- IssueClearCommands({self})
- while not self:IsDead() and self.Moving do
- -- Delay till the bot has stopped moving
- WaitSeconds(1)
- end
- if not self:IsDead() then
- -- Enable bot mode
- self.MyWeapon:ChangeProjectileBlueprint(self.WepBP.ProjectileId)
- self.MyWeapon:AddDamageMod(-692.5)
- self.MyWeapon:AddDamageRadiusMod(-1.75)
- self.MyWeapon:ChangeMaxRadius(self.WepBP.MaxRadius)
- self.MyWeapon:ChangeMinRadius(self.WepBP.MinRadius)
- self.MyWeapon:ChangeRateOfFire(self.WepBP.RateOfFire)
- self.MyWeapon:SetFiringRandomness(self.WepBP.FiringRandomness)
- self.DeployAnim:SetRate(-0.5)
- WaitFor(self.DeployAnim)
- if not self:IsDead() then
- self:SetImmobile(false)
- self.Deployed = false
- self.ModeChange = false
- self.MyWeapon:SetEnabled(true)
- end
- end
- end,
- DeflectorOn = function(self)
- self.DeflectorAnim:SetRate(2)
- WaitFor(self.DeflectorAnim)
- self.Deflector:EnableDeflector()
- end,
- DeflectorOff = function(self)
- self.Deflector:DisableDeflector()
- self.DeflectorAnim:SetRate(-2)
- WaitFor(self.DeflectorAnim)
- end,
- KickstartDeflector = function(self)
- local bp = self:GetBlueprint()
- self.Deflector = Deflector.Deflector_Entity {
- CollisionCenterX = bp.Defense.Deflector.CollisionCenterX or 1,
- CollisionCenterY = bp.Defense.Deflector.CollisionCenterY or 1,
- CollisionCenterZ = bp.Defense.Deflector.CollisionCenterZ or 1,
- CollisionShape = bp.Defense.Deflector.CollisionShape or 'Box',
- CollisionSizeX = bp.Defense.Deflector.CollisionSizeX or 1,
- CollisionSizeY = bp.Defense.Deflector.CollisionSizeY or 1,
- CollisionSizeZ = bp.Defense.Deflector.CollisionSizeZ or 1,
- DeflectorMesh = bp.Defense.Deflector.DeflectorMesh,
- FactionName = bp.General.FactionName,
- ImpactEffects = bp.Defense.Deflector.MeshScale or 1,
- MeshScale = bp.Defense.Deflector.MeshScale or 1,
- Owner = self,
- OwnerAttachBone = bp.Defense.Deflector.OwnerAttachBone,
- OwnerFXBone = bp.General.OwnerFXBone,
- PositionOffsetX = bp.Defense.Deflector.PositionOffsetX or 0,
- PositionOffsetY = bp.Defense.Deflector.PositionOffsetY or 0,
- PositionOffsetZ = bp.Defense.Deflector.PositionOffsetZ or 0,
- SizeSphere = bp.Defense.Deflector.SizeSphere or 1,
- StartOn = bp.Defense.Deflector.StartOn,
- }
- self.Trash:Add(self.Deflector)
- end,
- }
- TypeClass = UAL0216
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement