FAForever Forums
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Login

    Shield Drone frustration

    Scheduled Pinned Locked Moved Modding & Tools
    4 Posts 2 Posters 309 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R Offline
      Resin_Smoker
      last edited by Resin_Smoker

      Been working on the shield drone in tandem with other units from 4DC and its really close to working. AKA. it flies around and sacrifices itself to place a personal shield on units that dont already have one.

      So far the little drone will move up to a target unit, shoot out its enhancement beam and collect the information to pass the model and LOD to "CreateShield" in Unit.lua.

      My code to collect the model spec and pass it to Unit.lua "CreateShield".

      			-- Define the shield spec
      			self.DroneShieldSpec = {
      				ImpactEffects = impactFx,
      				ImpactMesh = nil,
      				Mesh = nil,
      				MeshZ = nil,
      				Owner = self,
      				OwnerShieldMesh = bpDisplay[1],
      				PassOverkillDamage = false,
      				PersonalShield = true,
      				RegenAssistMult = 60,
      				ShieldEnergyDrainRechargeTime = 5,
      				ShieldMaxHealth = sldHealth,
      				ShieldRechargeTime = rChgTime,
      				ShieldRegenRate = sldHealth * 0.01,
      				ShieldRegenStartTime =	1,
      				ShieldVerticalOffset = 0,
      				ShieldSize = 2.5,
      				CollisionCenterX = bp.CollisionOffsetX or 0,
      				CollisionCenterY = bp.CollisionOffsetY or 0,
      				CollisionCenterZ = bp.CollisionOffsetZ or 0,
      				CollisionSizeX = bp.SizeX * 25.0 or 1,
      				CollisionSizeY = bp.SizeY * 25.0 or 1,
      				CollisionSizeZ = bp.SizeZ * 25.0 or 1,
      				MaintenanceConsumptionPerSecondEnergy = eCost,
      			}
      			
      			if myDebug then WARN('	Completed shield spec: '..repr(self.DroneShieldSpec)) end
      						
      			--Create the personal shield
      			if myDebug then WARN('	Passing spec to CreateShield in Shield.lua') end
      			self.CreateShield(self.DroneShieldSpec)
      

      CreateShield (Unit.lua 4405), please notice its here that it calls DestroyShield.

          CreateShield = function(self, bpShield)
              -- Copy the shield template so we don't alter the blueprint table.
              local bpShield = table.deepcopy(bpShield)
              self:DestroyShield()
      
              if bpShield.PersonalShield then
                  self.MyShield = PersonalShield(bpShield, self)
              elseif bpShield.AntiArtilleryShield then
                  self.MyShield = AntiArtilleryShield(bpShield, self)
              elseif bpShield.PersonalBubble then
                  self.MyShield = PersonalBubble(bpShield, self)
              elseif bpShield.TransportShield then
                  self.MyShield = TransportShield(bpShield, self)
              else
                  self.MyShield = Shield(bpShield, self)
              end
      
              self:SetFocusEntity(self.MyShield)
              self.Trash:Add(self.MyShield)
          end,
      

      Below is my F9 log with WARNING indicating that the spec created exists. Along with the destroy error near the end.

      WARNING: *** /mods/4DC/hook/lua/sim/Unit.lua SpawnPersonalShield ***
      WARNING:         Completed shield spec: 
      WARNING:  - CollisionCenterX: 0
      WARNING:  - CollisionCenterY: 0
      WARNING:  - CollisionCenterZ: -0.050000000745058
      WARNING:  - CollisionSizeX: 27.5
      WARNING:  - CollisionSizeY: 30.000001907349
      WARNING:  - CollisionSizeZ: 27.5
      WARNING:  - ImpactEffects: SeraphimShieldHit01
      WARNING:  - MaintenanceConsumptionPerSecondEnergy: 10
      WARNING:  - Owner: table: 1EB7A7D0 (skipped) 
      WARNING:  - OwnerShieldMesh: table: 1C825820
      WARNING:  -    AlbedoName: /units/xsl0202/xsl0202_albedo.dds
      WARNING:  -    LODCutoff: 215
      WARNING:  -    LookupName: /effects/entities/PhaseShield/PhaseShieldLookup.dds
      WARNING:  -    MeshName: /units/xsl0202/xsl0202_lod0.scm
      WARNING:  -    NormalsName: /units/xsl0202/xsl0202_normalsTS.dds
      WARNING:  -    Occlude: false
      WARNING:  -    Scrolling: true
      WARNING:  -    SecondaryName: 
      WARNING:  -    ShaderName: PhaseShield
      WARNING:  -    Silhouette: false
      WARNING:  -    SpecularName: /units/xsl0202/xsl0202_SpecTeam.dds
      WARNING:  - PassOverkillDamage: false
      WARNING:  - PersonalShield: true
      WARNING:  - RegenAssistMult: 60
      WARNING:  - ShieldEnergyDrainRechargeTime: 5
      WARNING:  - ShieldMaxHealth: 1250
      WARNING:  - ShieldRechargeTime: 60
      WARNING:  - ShieldRegenRate: 12.5
      WARNING:  - ShieldRegenStartTime: 1
      WARNING:  - ShieldSize: 2.5
      WARNING:  - ShieldVerticalOffset: 0
      WARNING:         Passing spec to CreateShield in Shield.lua
      WARNING: ***Unit.lua CreatShield***
      WARNING: Error running lua script: ...gramdata\faforever\gamedata\lua.nx2\lua\sim\unit.lua(4409): attempt to call method `DestroyShield' (a nil value)
               stack traceback:
               	...gramdata\faforever\gamedata\lua.nx2\lua\sim\unit.lua(4409): in function `CreateShield'
               	...gramdata\faforever\gamedata\lua.nx2\lua\sim\unit.lua(5852): in function `SpawnDroneShield'
               	...d_shielddronesuperclass\4d_shielddronesuperclass.lua(157): in function <...d_shielddronesuperclass\4d_shielddronesuperclass.lua:122>
      

      Notice the part near the bottom where it is referring to DestroyShield (Unit.lua line 4443). Please notice that the line number in the error code shown are different from the snippet above. This is because I have a slightly modified version of unit.lua so i can log this to be able to trace back events and such. (I dont change what Unit.lua does and yes i have the original backed up) However I'm referring to the standard FAF unit.lua lines that you have available.

          DestroyShield = function(self)
              if self.MyShield then
                  self:ClearFocusEntity()
                  self.MyShield:Destroy()
                  self.MyShield = nil
              end
          end,
      

      I know for a fact that self.Shield doesn't exist as the unit being enhanced with a Drone-Shield never had one, nor was capable of having one on its own. What I'm thinking is taking place is that somehow "self" isn't being passed in some way. For what, I'm at a loss as I've come at this from every possible angle I can think of for the last day. Anyone have a suggestion or spot something I've outright missed?

      Thanks in advance!

      Resin

      Kykhu Oss https://youtu.be/JUgyGTgeZb8
      Unit Thrower https://youtu.be/iV8YBXVxxeI
      Beam Tentacle https://youtu.be/le5SNwHvC4c
      Blackhole https://www.youtube.com/watch?v=D9NGQC5rr0c
      Resurection https://www.youtube.com/watch?v=WdbIQ4vHkMs

      1 Reply Last reply Reply Quote 0
      • N Offline
        Nomander
        last edited by

        You made a typo here:

           		self.CreateShield(self.DroneShieldSpec)
        

        It should be

        self:CreateShield(self.DroneShieldSpec)
        

        self is passed in when a colon is used.

        1 Reply Last reply Reply Quote 1
        • R Offline
          Resin_Smoker
          last edited by

          YES !!!! I got the shield drone to work !

          Video link (If it first doesn't work, then YouTube may still be processing it): https://youtu.be/IV39URap11s

          Kykhu Oss https://youtu.be/JUgyGTgeZb8
          Unit Thrower https://youtu.be/iV8YBXVxxeI
          Beam Tentacle https://youtu.be/le5SNwHvC4c
          Blackhole https://www.youtube.com/watch?v=D9NGQC5rr0c
          Resurection https://www.youtube.com/watch?v=WdbIQ4vHkMs

          1 Reply Last reply Reply Quote 2
          • R Offline
            Resin_Smoker
            last edited by

            Fixed the eCost not being done when then shield is active.

            Kykhu Oss https://youtu.be/JUgyGTgeZb8
            Unit Thrower https://youtu.be/iV8YBXVxxeI
            Beam Tentacle https://youtu.be/le5SNwHvC4c
            Blackhole https://www.youtube.com/watch?v=D9NGQC5rr0c
            Resurection https://www.youtube.com/watch?v=WdbIQ4vHkMs

            1 Reply Last reply Reply Quote 1
            • First post
              Last post