Need help to create HET ForceGun on my mod. Everything is ok for me, but not understand why the HETForceGun is not working in Turret Factory! Can someone that knows about moding in this game, help me to solve the problem?
weapongenerator.lua
--======================================================================================================--
--=========================================HET FORCE TURRET=============================================--
--======================================================================================================--
function WeaponGenerator.generateHETForceGun(rand, force, tech, material, rarity)
local weapon = Weapon()
weapon:setBeam()
local fireDelay = 0.2 -- always the same with beams, does not really matter
local reach = rand:getFloat(150, 200)
weapon.fireDelay = fireDelay
weapon.reach = reach
weapon.appearanceSeed = rand:getInt()
weapon.continuousBeam = true
weapon.appearance = WeaponAppearance.Tesla
weapon.name = "HET Force Gun /* Weapon Name*/"%_t
weapon.prefix = "HET Force Gun /* Weapon Prefix*/"%_t
weapon.icon = "data/textures/icons/HETforce-gun.png" -- previously echo-ripples.png
weapon.sound = "beam"
weapon.material = material
weapon.rarity = rarity
weapon.tech = tech
local forceFactor = (1 + rand:getFloat(0.5, 1) + rarity.value) * material.strengthFactor * material.strengthFactor
weapon.impactParticles = ImpactParticles.Energy
weapon.blength = weapon.reach
local hue = rand:getFloat(0, 360)
local saturation = 0.3
local value = 0.1
local forceType = rand:getInt(1, 6)
if forceType == 1 then -- ForceType::OtherPush
weapon.otherForce = force * forceFactor
weapon.banimationSpeed = 1
hue = 0
value = 0.4
saturation = 0.05
elseif forceType == 2 then -- ForceType::OtherPull
weapon.otherForce = -force * forceFactor
weapon.banimationSpeed = -1
hue = 240
value = 0.5
saturation = 0.2
elseif forceType == 3 then -- ForceType::SelfPush
weapon.selfForce = force * forceFactor
weapon.banimationSpeed = 1
hue = 60
value = 0.4
elseif forceType == 4 then -- ForceType::SelfPull
weapon.selfForce = -force * forceFactor
weapon.banimationSpeed = -1
hue = 180
value = 0.4
saturation = 0.1
elseif forceType == 5 then -- ForceType::BothPush
weapon.otherForce = force * forceFactor
weapon.selfForce = force * forceFactor
weapon.banimationSpeed = 1
hue = 30
value = 0.4
elseif forceType == 6 then -- ForceType::BothPull
weapon.otherForce = -force * forceFactor
weapon.selfForce = -force * forceFactor
weapon.banimationSpeed = -1
hue = 210
value = 0.5
saturation = 0.2
end
weapon.bouterColor = ColorHSV(hue, 1, value * 0.25)
weapon.binnerColor = ColorHSV(hue, saturation, value)
weapon.bwidth = 0.5
weapon.bauraWidth = 1
weapon.banimationSpeed = weapon.banimationSpeed * 4
weapon.bshape = BeamShape.Swirly
return weapon
end
generatorFunction[WeaponType.HETForceGun] = WeaponGenerator.generateHETForceGun
turretgenerator.lua
--======================================================================================================--
--=========================================HET FORCE TURRET=============================================--
--======================================================================================================--
scales[WeaponType.HETForceGun] = scales[WeaponType.ForceGun]
possibleSpecialties[WeaponType.HETForceGun] = possibleSpecialties[WeaponType.ForceGun]
function TurretGenerator.generateHETForceTurret(rand, force, tech, material, rarity)
local result = TurretTemplate()
-- generate weapons
local numWeapons = rand:getInt(1, 2)
local weapon = WeaponGenerator.generateHETForceGun(rand, force, tech, material, rarity)
force = math.max(math.abs(weapon.selfForce), math.abs(weapon.otherForce))
local requiredCrew = math.floor(1 + math.sqrt(force / 2000))
local crew = Crew()
crew:add(requiredCrew, CrewMan(CrewProfessionType.Engine))
result.crew = crew
if weapon.otherForce ~= 0 then weapon.otherForce = weapon.otherForce / numWeapons end
if weapon.selfForce ~= 0 then weapon.selfForce = weapon.selfForce / numWeapons end
-- attach weapons to turret
TurretGenerator.attachWeapons(rand, result, weapon, numWeapons)
-- add more beams, for this we add invisible weapons doing nothing but creating beams
local weapons = {result:getWeapons()}
for _, weapon in pairs(weapons) do
weapon.selfForce = 0
weapon.otherForce = 0
weapon.bshape = BeamShape.Swirly
weapon.bshapeSize = 1.25
weapon.appearance = WeaponAppearance.Invisible
result:addWeapon(weapon)
end
local forceToEnergy = rand:getFloat(1, 4)
local energyPerSecond = force / 1000 * forceToEnergy
local increasePerSecond = energyPerSecond * rand:getFloat(0.01, 0.03)
TurretGenerator.createContinuousEnergyCooling(result, energyPerSecond, increasePerSecond)
TurretGenerator.scale(rand, result, WeaponType.HETForceGun, tech, 1)
TurretGenerator.addSpecialties(rand, result, WeaponType.HETForceGun)
return result
end
generatorFunction[WeaponType.HETForceGun] = TurretGenerator.generateHETForceTurret
galaxy.lua
-- I don't wanna work on Raw turrets (but can add to my plans if needed!)
weaponProbabilities[WeaponType.HETMiningLaser] = {p = 0.65} -- Mining Turret
weaponProbabilities[WeaponType.HETSalvagingLaser] = {p = 0.65} -- Salvage Turret
weaponProbabilities[WeaponType.HETRepairBeam] = {d = 0.65, p = 1.0} -- Repair Turret
weaponProbabilities[WeaponType.HETForceGun] = {d = 0.85, p = 1.0} -- Force Gun Turret
weapontype.lua
-- Unarmed Turrets --
WeaponTypes.addType("HETMiningLaser", "(HET) MiningLaser /* Weapon Type */"%_t, unarmed)
WeaponTypes.addType("HETSalvagingLaser", "(HET) SalvagingLaser /* Weapon Type */"%_t, unarmed)
WeaponTypes.addType("HETRepairBeam", "(HET) Repair /* Weapon Type */"%_t, unarmed)
WeaponTypes.addType("HETForceGun", "(HET) Force Gun /* Weapon Type */"%_t, unarmed)
-- Armed Turrets (Future HET weapons) --
-- WeaponTypes.addType("HETChainGun", "(HET) Chaingun /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETPointDefenseChainGun", "(HET) Point Defense Chaingun /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETPointDefenseLaser", "(HET) Point Defense Laser /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETPlasmaGun", "(HET) Plasma /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETRocketLauncher", "(HET) Launcher /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETCannon", "(HET) Cannon /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETRailGun", "(HET) Railgun /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETBolter", "(HET) Bolter /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETLightningGun", "(HET) Lightning Gun /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETTeslaGun", "(HET) Tesla Gun /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETPulseCannon", "(HET) Pulse Cannon /* Weapon Type */"%_t, armed)
-- WeaponTypes.addType("HETAntiFighter", "(HET) Anti Fighter /* Weapon Type */"%_t, armed)
inventoryitemprice.lua
function ArmedObjectPrice(object)
local costFactor = 1.0
-- collect turret stats
local dps = object.dps
local material = object.material
if object.coolingType == 0 and object.heatPerShot > 0 then
dps = dps * object.shootingTime / (object.shootingTime + object.coolingTime)
end
dps = dps + dps * object.shieldDamageMultiplicator + dps * object.hullDamageMultiplicator
dps = dps + object.hullRepairRate * 2.0 + object.shieldRepairRate * 3.0
dps = dps + math.abs(object.selfForce) * 0.005 + math.abs(object.otherForce) * 0.01
local value = dps * 0.5 * object.reach * 0.5
-- mining laser value scales with the used material and the efficiency
if object.stoneRefinedEfficiency > 0 or object.stoneRawEfficiency > 0 then
costFactor = 3.0
local materialFactor = material.strengthFactor * 5.0
local efficiencyFactor = object.stoneRefinedEfficiency * 17.5 + object.stoneRawEfficiency * 5.6 -- -30%
-- default valor local efficiencyFactor = object.stoneRefinedEfficiency * 25.0 + object.stoneRawEfficiency * 8.0
value = value * materialFactor
value = value * (1.0 + efficiencyFactor)
end
if object.metalRefinedEfficiency > 0 or object.metalRawEfficiency > 0 then
costFactor = 3.0
local efficiencyFactor = object.metalRefinedEfficiency * 17.5 + object.metalRawEfficiency * 5.6 -- -30%
-- default valor local efficiencyFactor = object.metalRefinedEfficiency * 25.0 + object.metalRawEfficiency * 8.0
value = value * (1.0 + efficiencyFactor)
end
-- rocket launchers gain value if they fire seeker rockets
if object.seeker then
value = value * 2.5
end
--value = value * 1.5
local rarityFactor = 1.0 + 1.35 ^ object.rarity.value
value = value * rarityFactor
value = value * (1.0 + object.shieldPenetration)
value = value * costFactor
-- check for numerical errors that can occur by changing weapon stats to things like NaN or inf
value = math.max(0, value)
if value ~= value then value = 0 end
if not (value > -math.huge and value < math.huge) then value = 0 end
return value
end