Guest User

Untitled

a guest
Feb 2nd, 2014
55
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ---------------------------------------------------------------
  2. -- File: /mods/4DC_V0.82/lua/CustomAbilities/4D_DeflectorShield/DeflectorShield.lua
  3. -- 4DC Custom deflector shield using DMS
  4. -- Author: Resin Smoker
  5. -- Special Thanks: Domino
  6. -- Copyright © 2014 4DC_V0.82 All rights reserved.
  7. ---------------------------------------------------------------
  8.  
  9. local Entity = import('/lua/sim/Entity.lua').Entity
  10. local utils = import('/lua/utilities.lua')
  11. local EffectTemplate = import('/lua/EffectTemplates.lua')
  12. local myDebug = false
  13.  
  14. Deflector_Entity = Class(Entity) {
  15.  
  16.     OnCreate = function(self,spec)
  17.         Entity.OnCreate(self,spec)
  18.         if myDebug then
  19.             WARN('DeflectorShield.lua, OnCreate')
  20.         end            
  21.                        
  22.         if spec and spec.Owner then
  23.             --> Set "self" parameters
  24.             self.Army = self:GetArmy()
  25.             self.Deflector_Spec = spec 
  26.             self.EffectsBag = {}
  27.             self.FxStatus = false
  28.             self.MeshScale = spec.MeshScale or 1                           
  29.             self.Trash = TrashBag()
  30.             --> Set owner          
  31.             self:SetOwner(spec.Owner)
  32.             --> Set trash
  33.             self.Owner.Trash:Add(self)                 
  34.             --> Set the entities Mesh
  35.             self:SetMesh(spec.DeflectorMesh)   
  36.             --> Set Deflector Size.
  37.             self:SetDrawScale(self.MeshScale or 1.0)                                       
  38.             --> Attach to the Owner
  39.             self:AttachBoneTo(-1, self.Owner, self.Deflector_Spec.OwnerAttachBone)
  40.             --> Set the Deflector Offset Position
  41.             self:SetOffset()                       
  42.             --> Set the Deflector visable state
  43.             if self.Deflector_Spec.StartOn == true then        
  44.                 self:EnableDeflector()
  45.             else
  46.                 self:DisableDeflector()
  47.             end            
  48.         else
  49.             self:Destroy()     
  50.         end      
  51.     end,
  52.    
  53.     OnCollisionCheck = function(self, other)
  54.         if myDebug then
  55.             WARN('DeflectorShield.lua, OnCollisionCheck')
  56.         end    
  57.         if not self:BeenDestroyed() and other then
  58.             if IsProjectile(other) and not other:BeenDestroyed() and not IsAlly(self:GetArmy(), other:GetArmy()) then
  59.                 self:ReflectProjectile(other)
  60.             end
  61.         end        
  62.     end,
  63.    
  64.     ReflectProjectile = function(self, other)
  65.         if myDebug then
  66.             WARN('DeflectorShield.lua, ReflectProjectile', x ,y ,z)
  67.         end        
  68.         if not other:HasReflected() then
  69.             other:SetReflected(other)
  70.         end
  71.         other.DamageData.DamageFriendly = true
  72.         other.DamageData.DamageSelf = true
  73.                    
  74.         local x, y, z = other:GetVelocity()
  75. --      WARN('***')    
  76. --      WARN('Incomming Projectile speed', x ,y ,z)    
  77. --      local relectMul = 1
  78. --  
  79. --      if self.ReflectRandomVector then
  80. --          x = x + (relectMul * ((Random() * 2) - 1))
  81. --          y = z + (relectMul * ((Random() * 2) - 1))
  82. --          z = z + (relectMul * ((Random() * 2) - 1))
  83. --      end
  84. --     
  85. --      --if myDebug then
  86. --          WARN('Reflected Projectile speed', x ,y ,z)
  87. --          WARN('  ***')
  88. --      --end          
  89.    
  90.         other:SetVelocityAlign(true)
  91.         other:TrackTarget(false)
  92.         other:SetVelocity(-x,-y,-z)
  93.         other:SetVelocity(12)
  94.         other:SetLifetime(5)
  95.         other:SetReflected(self)
  96.     end,
  97.    
  98.     ##########################################################################################
  99.     ## --Set Collision Shape
  100.     ##########################################################################################         
  101.    
  102.     SetShape = function(self, state)
  103.         if self.Deflector_Spec.CollisionShape == 'Box' and state == true then
  104.             self:SetCollisionShape('Box', self.Deflector_Spec.CollisionCenterX, self.Deflector_Spec.CollisionCenterY, self.Deflector_Spec.CollisionCenterZ, self.Deflector_Spec.CollisionSizeX, self.Deflector_Spec.CollisionSizeY, self.Deflector_Spec.CollisionSizeZ)
  105.         elseif self.Deflector_Spec.CollisionShape == 'Sphere' and state == true then
  106.             self:SetCollisionShape('Sphere', 0, 0, 0, self.Deflector_Spec.SizeSphere)
  107.         else
  108.             self:SetCollisionShape('None')
  109.         end
  110.     end,
  111.    
  112.     ##########################################################################################
  113.     ## --Enable / Disable Deflector
  114.     ##########################################################################################
  115.    
  116.     EnableDeflector = function(self)
  117.         if myDebug then
  118.             WARN('DeflectorShield.lua, EnableDeflector')
  119.         end
  120.         --> Play the shield activation sound
  121.         if self.Deflector_Spec.Audio.ShieldOn then
  122.         WARN('sounds')
  123.             self.Owner:PlayUnitSound('ShieldOn')  
  124.         end
  125.         -- Activate Econ
  126.         if self.Deflector_Spec.Economy.MaintenanceConsumptionPerSecondEnergy > 0 then
  127.             self.Owner:SetMaintenanceConsumptionActive()
  128.         end
  129.         --> Set Collision Shape
  130.         self:SetShape(true)                                    
  131.         --> Set Deflector visability.
  132.         self:SetVisable(true)
  133.         --> Add beam from unit to deflector
  134.         self:BeamFX(true)    
  135.     end,
  136.    
  137.     DisableDeflector = function(self)
  138.         if myDebug then
  139.             WARN('DeflectorShield.lua, DisableDeflector')
  140.         end
  141.         --> Play the shield de-activation sound
  142.         if self.Deflector_Spec.Audio.ShieldOff then
  143.             self.Owner:PlayUnitSound('ShieldOff')  
  144.         end
  145.         -- De-activate Econ
  146.         if self.Deflector_Spec.Economy.MaintenanceConsumptionPerSecondEnergy > 0 then
  147.             self.Owner:SetMaintenanceConsumptionInactive()
  148.         end                                
  149.         --> Set Collision Shape
  150.         self:SetShape(false)                                               
  151.         --> Set Deflector visability.
  152.         self:SetVisable(false)      
  153.         --> Add beam from unit to deflector
  154.         self:BeamFX(false)    
  155.     end,        
  156.    
  157.     ##########################################################################################
  158.     ## --Set/Get Owner
  159.     ##########################################################################################
  160.    
  161.     SetOwner = function(self, Owner)
  162.         if myDebug then
  163.             WARN('DeflectorShield.lua, SetOwner')
  164.         end    
  165.         if Owner then
  166.             self.Owner = Owner
  167.             if not Owner.Trash then
  168.                 Owner.Trash = TrashBag()
  169.             end        
  170.             Owner.Trash:Add(self)
  171.         else
  172.             return
  173.         end
  174.     end,
  175.    
  176.     GetOwner = function(self)
  177.         return self.Owner or nil
  178.     end,
  179.                
  180.     ##########################################################################################
  181.     ## --Set Initial Offset Position
  182.     ##########################################################################################
  183.            
  184.     SetOffset = function(self)
  185.         if myDebug then
  186.             WARN('DeflectorShield.lua, SetOffset')
  187.         end                
  188.         local xOff = self.Deflector_Spec.PositionOffsetX or 0      
  189.         local yOff = self.Deflector_Spec.PositionOffsetY or 0      
  190.         local zOff = self.Deflector_Spec.PositionOffsetZ or 0              
  191.         self:SetParentOffset(Vector(xOff, yOff, zOff))
  192.     end,
  193.            
  194.     ##########################################################################################
  195.     ## --Set Visable.
  196.     ##########################################################################################
  197.            
  198.     SetVisable = function(self, state)
  199.         if myDebug then
  200.             WARN('DeflectorShield.lua, SetVisable ', state)
  201.         end    
  202.         if state == true then  
  203.             self:SetVizToFocusPlayer('Always')
  204.             self:SetVizToNeutrals('Always')
  205.             self:SetVizToEnemies('Always')
  206.             self:SetVizToAllies('Always')
  207.         elseif state == false then                 
  208.             self:SetVizToFocusPlayer('Never')
  209.             self:SetVizToNeutrals('Never')
  210.             self:SetVizToEnemies('Never')
  211.             self:SetVizToAllies('Never')
  212.         end
  213.     end,
  214.    
  215.     ##########################################################################################
  216.     ## --Beam Effects.
  217.     ########################################################################################## 
  218.    
  219.     BeamFX = function(self, state)
  220.         if myDebug then
  221.             WARN('DeflectorShield.lua, BeamFX ', state)
  222.         end
  223.         if state == true then
  224.             for k, v in EffectTemplate.ReclaimBeams do
  225.                 local beamEffect = AttachBeamEntityToEntity(self, -1, self.Owner, self.Deflector_Spec.OwnerFXBone, self.Army, v ):ScaleEmitter(1)
  226.                 table.insert( self.EffectsBag, beamEffect)
  227.                 self.Trash:Add(beamEffect)
  228.             end            
  229.         elseif state == false then
  230.             if self.EffectsBag then            
  231.                 for k, v in self.EffectsBag do
  232.                     v:Destroy()
  233.                 end
  234.                 self.EffectsBag = {}    
  235.             end                          
  236.         end                                                
  237.     end,           
  238.                      
  239. }
RAW Paste Data