Skip to content

Commit b807e2a

Browse files
committed
Add on-fit pilot security attribute, and use it in effects
1 parent 2bb35a1 commit b807e2a

File tree

4 files changed

+42
-11
lines changed

4 files changed

+42
-11
lines changed

eos/db/migrations/upgrade48.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Migration 48
3+
4+
- added pilot security column (CONCORD ships)
5+
"""
6+
7+
8+
import sqlalchemy
9+
10+
11+
def upgrade(saveddata_engine):
12+
try:
13+
saveddata_engine.execute("SELECT pilotSecurity FROM fits LIMIT 1")
14+
except sqlalchemy.exc.DatabaseError:
15+
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN pilotSecurity FLOAT")

eos/db/saveddata/fit.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@
6363
Column("ignoreRestrictions", Boolean, default=0),
6464
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
6565
Column("modified", DateTime, nullable=True, default=datetime.datetime.now, onupdate=datetime.datetime.now),
66-
Column("systemSecurity", Integer, nullable=True)
66+
Column("systemSecurity", Integer, nullable=True),
67+
Column("pilotSecurity", Float, nullable=True),
6768
)
6869

6970
projectedFits_table = Table("projectedFits", saveddata_meta,

eos/effects.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32121,22 +32121,24 @@ class Effect6871(BaseEffect):
3212132121
type = 'passive'
3212232122

3212332123
@staticmethod
32124-
def handler(fit, src, context, projectionRange, **kwargs):
32124+
def handler(fit, ship, context, projectionRange, **kwargs):
3212532125

3212632126
# Get pilot sec status bonus directly here, instead of going through the intermediary effects
3212732127
# via https://forums.eveonline.com/default.aspx?g=posts&t=515826
3212832128
try:
32129-
bonus = max(0, min(50.0, (src.owner.character.secStatus * 10)))
32129+
sec_status = ship.owner.getPilotSecurity(low_limit=0, high_limit=5)
3213032130
except (KeyboardInterrupt, SystemExit):
3213132131
raise
3213232132
except:
32133-
bonus = None
32133+
return
3213432134

32135-
if bonus is not None:
32136-
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
32137-
'armorDamageAmount', bonus, **kwargs)
32138-
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
32139-
'shieldBonus', bonus, **kwargs)
32135+
bonus = sec_status * 10
32136+
fit.modules.filteredItemBoost(
32137+
lambda mod: mod.item.requiresSkill('Repair Systems'),
32138+
'armorDamageAmount', bonus, **kwargs)
32139+
fit.modules.filteredItemBoost(
32140+
lambda mod: mod.item.requiresSkill('Shield Operation'),
32141+
'shieldBonus', bonus, **kwargs)
3214032142

3214132143

3214232144
class Effect6872(BaseEffect):
@@ -40869,12 +40871,12 @@ def handler(fit, ship, context, projectionRange, **kwargs):
4086940871

4087040872
# Get pilot sec status bonus directly here, instead of going through the intermediary effects
4087140873
try:
40872-
capped_ss = max(-10, min(0, (ship.owner.character.secStatus)))
40874+
sec_status = ship.owner.getPilotSecurity(low_limit=-10, high_limit=0)
4087340875
except (KeyboardInterrupt, SystemExit):
4087440876
raise
4087540877
except:
4087640878
return
40877-
bonus = ship.getModifiedItemAttr('ATFrigDmgBonus') * capped_ss
40879+
bonus = ship.getModifiedItemAttr('ATFrigDmgBonus') * sec_status
4087840880
fit.modules.filteredItemBoost(
4087940881
lambda mod: (mod.item.requiresSkill('Small Energy Turret')
4088040882
or mod.item.requiresSkill('Small Hybrid Turret')

eos/saveddata/fit.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,6 +1743,18 @@ def getSystemSecurity(self):
17431743
secstatus = FitSystemSecurity.NULLSEC
17441744
return secstatus
17451745

1746+
def getPilotSecurity(self, low_limit=-10, high_limit=5):
1747+
secstatus = self.pilotSecurity
1748+
# Not defined -> use character SS, with 0.0 fallback if it fails
1749+
if secstatus is None:
1750+
try:
1751+
secstatus = self.character.secStatus
1752+
except (SystemExit, KeyboardInterrupt):
1753+
raise
1754+
except:
1755+
secstatus = 0
1756+
return max(low_limit, min(high_limit, secstatus))
1757+
17461758
def activeModulesIter(self):
17471759
for mod in self.modules:
17481760
if mod.state >= FittingModuleState.ACTIVE:
@@ -1824,6 +1836,7 @@ def __deepcopy__(self, memo=None):
18241836
fitCopy.targetProfile = self.targetProfile
18251837
fitCopy.implantLocation = self.implantLocation
18261838
fitCopy.systemSecurity = self.systemSecurity
1839+
fitCopy.pilotSecurity = self.pilotSecurity
18271840
fitCopy.notes = self.notes
18281841

18291842
for i in self.modules:

0 commit comments

Comments
 (0)