I recently did this for a script. I used FTechs "OnDefense" which is called every time a ship is hit. You can get more info about it from the readme that comes with FTech.
Your script would then look like this:
Ftech stuff:
class ShieldtechDef(FoundationTech.TechDef):
def OnDefense(self, pShip, pInstance, oYield, pEvent):
if oYield:
if oYield.IsPhaseYield() or oYield.IsDrainYield():
return
Code to get the weapon properties:
pWeapon = App.Weapon_Cast(pEvent.GetSource())
pWeapon.GetRechargeRate()
pWeapon.GetNormalDischargeRate()
pWeapon.GetMaxCharge()
pWeapon.GetMinFiringCharge()
pWeapon.GetFireSound()
pWeapon.GetFireStartSound()
pWeapon.GetFireLoopSound()
pWeapon.GetPowerSetting()
pWeapon.GetMaxDamage()
pWeapon.GetMaxDamageDistance()
pWeapon.GetChargeLevel()
pWeapon.GetChargePercentage()
more Ftech stuff:
def OnBeamDefense(self, pShip, pInstance, oYield, pEvent):
return self.OnDefense(pShip, pInstance, oYield, pEvent)
def OnPulseDefense(self, pShip, pInstance, pTorp, oYield, pEvent):
return self.OnDefense(pShip, pInstance, oYield, pEvent)
def OnTorpDefense(self, pShip, pInstance, pTorp, oYield, pEvent):
return self.OnDefense(pShip, pInstance, oYield, pEvent)
def Attach(self, pInstance):
pInstance.lTechs.append(self)
pInstance.lTorpDefense.insert(0, self)
pInstance.lPulseDefense.insert(0, self)
pInstance.lBeamDefense.insert(0, self)
oShieldtech = ShieldtechDef('Shieldtech')