Statistics: Posted by EntropyWins — 24 Jan 2018, 23:49
OnFire = function(self)
self:Fire()
KamikazeWeapon.OnFire()
end,
Statistics: Posted by Exotic_Retard — 06 Dec 2016, 23:20
local DeathNukeWeapon = import('/lua/sim/defaultweapons.lua').DeathNukeWeapon
local KamikazeWeapon = WeaponFile.KamikazeWeapon
DeployableNuke = Class(KamikazeWeapon){
OnFire = function(self)
end,
Fire = function(self)
local bp = self:GetBlueprint()
local proj = self.unit:CreateProjectile(bp.ProjectileId, 0, 0, 0, nil, nil, nil):SetCollision(false)
proj:ForkThread(proj.EffectThread)
-- Play the explosion sound
local projBp = proj:GetBlueprint()
if projBp.Audio.NukeExplosion then
self:PlaySound(projBp.Audio.NukeExplosion)
end
proj.InnerRing = NukeDamage()
proj.InnerRing:OnCreate(bp.NukeInnerRingDamage, bp.NukeInnerRingRadius, bp.NukeInnerRingTicks, bp.NukeInnerRingTotalTime)
proj.OuterRing = NukeDamage()
proj.OuterRing:OnCreate(bp.NukeOuterRingDamage, bp.NukeOuterRingRadius, bp.NukeOuterRingTicks, bp.NukeOuterRingTotalTime)
local launcher = self.unit
local pos = proj:GetPosition()
local army = launcher:GetArmy()
local brain = launcher:GetAIBrain()
local damageType = bp.DamageType
proj.InnerRing:DoNukeDamage(launcher, pos, brain, army, damageType)
proj.OuterRing:DoNukeDamage(launcher, pos, brain, army, damageType)
-- Stop it calling DoDamage any time in the future.
proj.DoDamage = function(self, instigator, DamageData, targetEntity) end
end,
}
Statistics: Posted by Dudekahedron — 06 Dec 2016, 22:25
Statistics: Posted by Exotic_Retard — 06 Dec 2016, 22:04
Statistics: Posted by Tokyto — 06 Dec 2016, 22:01
ProjectileId = '/projectiles/TIFMissileNuke01/TIFMissileNuke01_proj.bp',
#
# Terran Nuke Missile
#
local TIFMissileNuke = import('/lua/terranprojectiles.lua').TIFMissileNuke
TIFMissileNuke01 = Class(TIFMissileNuke) {
InitialEffects = {'/effects/emitters/nuke_munition_launch_trail_02_emit.bp',},
LaunchEffects = {
'/effects/emitters/nuke_munition_launch_trail_03_emit.bp',
'/effects/emitters/nuke_munition_launch_trail_05_emit.bp',
'/effects/emitters/nuke_munition_launch_trail_07_emit.bp',
},
ThrustEffects = {'/effects/emitters/nuke_munition_launch_trail_04_emit.bp',
'/effects/emitters/nuke_munition_launch_trail_06_emit.bp',
},
OnImpact = function(self, TargetType, TargetEntity)
if not TargetEntity or not EntityCategoryContains(categories.PROJECTILE, TargetEntity) then
# Play the explosion sound
local myBlueprint = self:GetBlueprint()
if myBlueprint.Audio.Explosion then
self:PlaySound(myBlueprint.Audio.Explosion)
end
nukeProjectile = self:CreateProjectile('/effects/Entities/UEFNukeEffectController01/UEFNukeEffectController01_proj.bp', 0, 0, 0, nil, nil, nil):SetCollision(false)
nukeProjectile:PassDamageData(self.DamageData)
nukeProjectile:PassData(self.Data)
end
TIFMissileNuke.OnImpact(self, TargetType, TargetEntity)
end,
DoTakeDamage = function(self, instigator, amount, vector, damageType)
if self.ProjectileDamaged then
for k,v in self.ProjectileDamaged do
v(self)
end
end
TIFMissileNuke.DoTakeDamage(self, instigator, amount, vector, damageType)
end,
OnCreate = function(self)
TIFMissileNuke.OnCreate(self)
local launcher = self:GetLauncher()
if launcher and not launcher:IsDead() and launcher.EventCallbacks.ProjectileDamaged then
self.ProjectileDamaged = {}
for k,v in launcher.EventCallbacks.ProjectileDamaged do
table.insert( self.ProjectileDamaged, v )
end
end
self:SetCollisionShape('Sphere', 0, 0, 0, 2.0)
self:ForkThread( self.MovementThread )
end,
CreateEffects = function( self, EffectTable, army, scale)
for k, v in EffectTable do
self.Trash:Add(CreateAttachedEmitter(self, -1, army, v):ScaleEmitter(scale))
end
end,
MovementThread = function(self)
local army = self:GetArmy()
local launcher = self:GetLauncher()
self.CreateEffects( self, self.InitialEffects, army, 1 )
self:TrackTarget(false)
WaitSeconds(2.5) # Height
self:SetCollision(true)
self.CreateEffects( self, self.LaunchEffects, army, 1 )
WaitSeconds(2.5)
self.CreateEffects( self, self.ThrustEffects, army, 3 )
WaitSeconds(2.5)
self:TrackTarget(true) # Turn ~90 degrees towards target
self:SetDestroyOnWater(true)
self:SetTurnRate(47.36)
WaitSeconds(2) # Now set turn rate to zero so nuke flies straight
self:SetTurnRate(0)
self:SetAcceleration(0.001)
self.WaitTime = 0.5
while not self:BeenDestroyed() do
self:SetTurnRateByDist()
WaitSeconds(self.WaitTime)
end
end,
SetTurnRateByDist = function(self)
local dist = self:GetDistanceToTarget()
#Get the nuke as close to 90 deg as possible
if dist > 150 then
#Freeze the turn rate as to prevent steep angles at long distance targets
self:SetTurnRate(0)
elseif dist > 75 and dist <= 150 then
# Increase check intervals
self.WaitTime = 0.3
elseif dist > 32 and dist <= 75 then
# Further increase check intervals
self.WaitTime = 0.1
elseif dist < 32 then
# Turn the missile down
self:SetTurnRate(50)
end
end,
CheckMinimumSpeed = function(self, minSpeed)
if self:GetCurrentSpeed() < minSpeed then
return false
end
return true
end,
SetMinimumSpeed = function(self, minSpeed, resetAcceleration)
if self:GetCurrentSpeed() < minSpeed then
self:SetVelocity(minSpeed)
if resetAcceleration then
self:SetAcceleration(0)
end
end
end,
GetDistanceToTarget = function(self)
local tpos = self:GetCurrentTargetPosition()
local mpos = self:GetPosition()
local dist = VDist2(mpos[1], mpos[3], tpos[1], tpos[3])
return dist
end,
}
TypeClass = TIFMissileNuke01
Statistics: Posted by Dudekahedron — 06 Dec 2016, 21:53
Statistics: Posted by Exotic_Retard — 06 Dec 2016, 21:12
Statistics: Posted by Tokyto — 06 Dec 2016, 20:58
local NukeDamage = import('/lua/sim/NukeDamage.lua').NukeAOE
DeathNukeWeapon = Class(BareBonesWeapon) {
OnFire = function(self)
end,
Fire = function(self)
local bp = self:GetBlueprint()
local proj = self.unit:CreateProjectile(bp.ProjectileId, 0, 0, 0, nil, nil, nil):SetCollision(false)
proj:ForkThread(proj.EffectThread)
-- Play the explosion sound
local projBp = proj:GetBlueprint()
if projBp.Audio.NukeExplosion then
self:PlaySound(projBp.Audio.NukeExplosion)
end
proj.InnerRing = NukeDamage()
proj.InnerRing:OnCreate(bp.NukeInnerRingDamage, bp.NukeInnerRingRadius, bp.NukeInnerRingTicks, bp.NukeInnerRingTotalTime)
proj.OuterRing = NukeDamage()
proj.OuterRing:OnCreate(bp.NukeOuterRingDamage, bp.NukeOuterRingRadius, bp.NukeOuterRingTicks, bp.NukeOuterRingTotalTime)
local launcher = self.unit
local pos = proj:GetPosition()
local army = launcher:GetArmy()
local brain = launcher:GetAIBrain()
local damageType = bp.DamageType
proj.InnerRing:DoNukeDamage(launcher, pos, brain, army, damageType)
proj.OuterRing:DoNukeDamage(launcher, pos, brain, army, damageType)
-- Stop it calling DoDamage any time in the future.
proj.DoDamage = function(self, instigator, DamageData, targetEntity) end
end,
}
Statistics: Posted by Dudekahedron — 06 Dec 2016, 19:50