Data Realms Fan Forums http://45.55.195.193/ |
|
force shield http://45.55.195.193/viewtopic.php?f=73&t=30730 |
Page 1 of 1 |
Author: | x50mmboy [ Sat Mar 17, 2012 3:25 am ] |
Post subject: | force shield |
hi, some time ago someone post the force shield like the protoos units, there is a little problem with that the shield by some weapons can be penetrated before it's break, the missiles can penetrate it, slowly but they can and some gun shots like the shot of the sjg-4 of the werhmacht mod, the missiles suppose to explode in the surface of the shield, no transpassing it, so i'm wandering if it's a propertie that change this or some command line in the lua script or in the ini file this is the lua script: i'm already modificate it, only the resistence of the shield. function Create(self) self.shieldmult = 0.8 --set the multiplier to slow particles with self.counter = 0; --set shield damage to 0 self.countertime = Timer() --set the regen timer local curdist = 80; --find the closest actor, set it to be self.parent for actor in MovableMan.Actors do local avgx = actor.Pos.X - self.Pos.X; local avgy = actor.Pos.Y - self.Pos.Y; local dist = math.sqrt(avgx ^ 2 + avgy ^ 2); if dist < curdist then curdist = dist; self.parent = actor; end end self.yellow = CreateAEmitter("forceshieldwall2b") --create the yellow glow emitter self.red = CreateAEmitter("forceshieldwall3") --and the red self.yellow.Pos = self.Pos --and place them on self self.red.Pos = self.Pos MovableMan:AddParticle(self.yellow) --and add them on scene MovableMan:AddParticle(self.red) if self.parent ~= nil then --if parent was found calculate offset vector to it self.offset = Vector(self.parent.Pos.X - self.Pos.X , self.parent.Pos.Y - self.Pos.Y) end self.disptime = Timer() --set the print timer end function Update(self) if MovableMan:IsActor(self.parent) then --make sure parent is accessible to avoid crashing self.Pos = self.parent.EyePos --set the center of the shield and coloured emitters to the parent's head self.yellow.Pos = self.parent.EyePos self.red.Pos = self.parent.EyePos self.impulse = Vector(0,0) --reset impulse for particle in MovableMan.Particles do --cycle through particles if particle.HitsMOs == true then --if the particle is dangerous dist = SceneMan:ShortestDistance(self.Pos , particle.Pos , true) --get a vector pointing to the particle if dist.Magnitude < 60 and (not(self.PresetName == particle.PresetName)) then --if the particle is close if math.abs(particle.Vel.AbsRadAngle - dist.AbsRadAngle) > math.pi / 4 then --if the particle is headed towards parent self.impulse = Vector(self.impulse.X + particle.Vel.X * self.shieldmult * particle.Mass , self.impulse.Y + particle.Vel.Y * self.shieldmult * particle.Mass) --add the force caused by the particle to impulse --self.impulse:CapMagnitude(1200) particle.Vel = Vector(particle.Vel.X * self.shieldmult , particle.Vel.Y * self.shieldmult) --slow down the particle self.counter = self.counter + math.abs(particle.Mass) * particle.Vel.Magnitude / self.shieldmult --decrease the strength of the shield self.countertime:Reset() --reset the shield recharge time self.glow = CreateMOSParticle("Shield glow") --create a glow on the particle self.glow.Pos = particle.Pos MovableMan:AddParticle(self.glow) end end end end for particle in MovableMan.Items do --do the same thing to items dist = SceneMan:ShortestDistance(self.Pos , particle.Pos , true) if dist.Magnitude < 60 and (not(self.PresetName == particle.PresetName)) and particle.Vel.Magnitude > 5 then if math.abs(particle.Vel.AbsRadAngle - dist.AbsRadAngle) > math.pi / 4 then self.impulse = Vector(self.impulse.X + particle.Vel.X * self.shieldmult * particle.Mass , self.impulse.Y + particle.Vel.Y * self.shieldmult * particle.Mass) --self.impulse:CapMagnitude(2200) particle.Vel = Vector(particle.Vel.X * self.shieldmult , particle.Vel.Y * self.shieldmult) self.counter = self.counter + math.abs(particle.Mass) * particle.Vel.Magnitude / self.shieldmult self.countertime:Reset() self.glow = CreateMOSParticle("Shield glow") --create a glow on the particle self.glow.Pos = particle.Pos MovableMan:AddParticle(self.glow) end end end self.impulse:SetMagnitude(self.impulse.Magnitude * 2) self.parent:AddAbsImpulseForce(self.impulse , self.parent.Pos) --give parent a jolt else --if parent is dead, gib the shield and the colour emitters self:GibThis() self.yellow:GibThis() self.red:GibThis() end if self.counter < 20500 then --if the shield is strong disable non-blue emitters, enable blue, set shield velocity multiplier to be small self:EnableEmission(true) self.yellow:EnableEmission(false) self.red:EnableEmission(false) self.shieldmult = 50 end if self.counter > 20500 and self.counter < 30000 then --if the shield has taken some damage, enable yellow emitter, disable others, set shield velocity multiplier to be medium self:EnableEmission(false) self.yellow:EnableEmission(true) self.red:EnableEmission(false) self.shieldmult = 0.5 end if self.counter > 30000 then --if the shield is weak, enable red, disable others, set shield velocity multiplier to be large self:EnableEmission(false) self.yellow:EnableEmission(false) self.red:EnableEmission(true) self.shieldmult = 0.7 end if self.counter > 50000 then --if the shield is too damaged, gib it and the emitters self:GibThis() self.yellow:GibThis() self.red:GibThis() end if self.countertime:IsPastSimMS(3000) and self.counter > 0 then --if the shield hasn't taken hits in 3 seconds start regenerating it self.counter = self.counter - 600 * TimerMan.DeltaTimeSecs end if self.disptime:IsPastSimMS(500) then --print shield strength every half a second print(math.floor(self.counter)) self.disptime:Reset() end end function Destroy(self) end plz help thnks |
Author: | carriontrooper [ Sat Mar 17, 2012 4:01 pm ] |
Post subject: | Re: force shield |
Whoa nelly, that code bit could be spoilered and put in the code tag. So that people could 1) easily read it 2) easily copy it Because if you just pasted it on like that, people would have trouble copying it into a .lua file, because forum formatting does things to text like that. If you're feeling more adventurous, try attaching the .lua file, or a .rar of the .rte here. Good luck! |
Author: | MesoTroniK [ Mon Apr 09, 2012 1:24 am ] |
Post subject: | Re: force shield |
Sorry I cannot help you with this scripting, but I did want to mention that your shield if it works as advertised interests me greatly. Some of Mehman's units that have a shield stop bullets, but reflect things like launched grenades and rockets. That type while extemely entertaining, can be a bit OP. A version that takes a rocket in the chin and can also stop all the particles spewed from the blast, but lose alot of it's energy sounds like something I would add to this robot soldier I'm making. |
Author: | Skeggy [ Sat Apr 14, 2012 7:47 pm ] |
Post subject: | Re: force shield |
Where could I find the original script? |
Page 1 of 1 | All times are UTC [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |