(self, spoolOptions=None, targetProfile=None, ignoreState=False)
| 475 | return False |
| 476 | |
| 477 | def getVolleyParameters(self, spoolOptions=None, targetProfile=None, ignoreState=False): |
| 478 | if self.isEmpty or (self.state < FittingModuleState.ACTIVE and not ignoreState): |
| 479 | return {0: DmgTypes.default()} |
| 480 | if self.__baseVolley is None: |
| 481 | self.__baseVolley = {} |
| 482 | if self.isBreacher: |
| 483 | dmgDelay = 1 |
| 484 | subcycles = math.floor(self.getModifiedChargeAttr("dotDuration", 0) / 1000) |
| 485 | breacher_info = BreacherInfo( |
| 486 | absolute=self.getModifiedChargeAttr("dotMaxDamagePerTick", 0), |
| 487 | relative=self.getModifiedChargeAttr("dotMaxHPPercentagePerTick", 0) / 100) |
| 488 | for i in range(subcycles): |
| 489 | volley = DmgTypes.default() |
| 490 | volley.add_breacher(dmgDelay + i, breacher_info) |
| 491 | self.__baseVolley[dmgDelay + i] = volley |
| 492 | else: |
| 493 | dmgGetter = self.getModifiedChargeAttr if self.charge else self.getModifiedItemAttr |
| 494 | dmgMult = self.getModifiedItemAttr("damageMultiplier", 1) |
| 495 | # Some delay attributes have non-0 default value, so we have to pick according to effects |
| 496 | if {'superWeaponAmarr', 'superWeaponCaldari', 'superWeaponGallente', 'superWeaponMinmatar', 'lightningWeapon'}.intersection(self.item.effects): |
| 497 | dmgDelay = self.getModifiedItemAttr("damageDelayDuration", 0) |
| 498 | elif {'doomsdayBeamDOT', 'doomsdaySlash', 'doomsdayConeDOT', 'debuffLance'}.intersection(self.item.effects): |
| 499 | dmgDelay = self.getModifiedItemAttr("doomsdayWarningDuration", 0) |
| 500 | else: |
| 501 | dmgDelay = 0 |
| 502 | dmgDuration = self.getModifiedItemAttr("doomsdayDamageDuration", 0) |
| 503 | dmgSubcycle = self.getModifiedItemAttr("doomsdayDamageCycleTime", 0) |
| 504 | # Reaper DD can damage each target only once |
| 505 | if dmgDuration != 0 and dmgSubcycle != 0 and 'doomsdaySlash' not in self.item.effects: |
| 506 | subcycles = math.floor(floatUnerr(dmgDuration / dmgSubcycle)) |
| 507 | else: |
| 508 | subcycles = 1 |
| 509 | for i in range(subcycles): |
| 510 | self.__baseVolley[dmgDelay + dmgSubcycle * i] = DmgTypes( |
| 511 | em=(dmgGetter("emDamage", 0)) * dmgMult, |
| 512 | thermal=(dmgGetter("thermalDamage", 0)) * dmgMult, |
| 513 | kinetic=(dmgGetter("kineticDamage", 0)) * dmgMult, |
| 514 | explosive=(dmgGetter("explosiveDamage", 0)) * dmgMult) |
| 515 | spoolType, spoolAmount = resolveSpoolOptions(spoolOptions, self) |
| 516 | spoolBoost = calculateSpoolup( |
| 517 | self.getModifiedItemAttr("damageMultiplierBonusMax", 0), |
| 518 | self.getModifiedItemAttr("damageMultiplierBonusPerCycle", 0), |
| 519 | self.rawCycleTime / 1000, spoolType, spoolAmount)[0] |
| 520 | spoolMultiplier = 1 + spoolBoost |
| 521 | adjustedVolleys = {} |
| 522 | for volleyTime, baseVolley in self.__baseVolley.items(): |
| 523 | adjustedVolley = baseVolley * spoolMultiplier |
| 524 | adjustedVolley.profile = targetProfile |
| 525 | adjustedVolleys[volleyTime] = adjustedVolley |
| 526 | return adjustedVolleys |
| 527 | |
| 528 | def getVolley(self, spoolOptions=None, targetProfile=None, ignoreState=False): |
| 529 | volleyParams = self.getVolleyParameters(spoolOptions=spoolOptions, targetProfile=targetProfile, ignoreState=ignoreState) |
no test coverage detected