Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
126105cd0d | ||
|
|
fedaa70d9d | ||
|
|
d1707a0dca | ||
|
|
9065d348d3 | ||
|
|
602916c23f | ||
|
|
0d43a8a4c3 | ||
|
|
1e6431a8b3 | ||
|
|
b6067ff0a2 | ||
|
|
89e426815d | ||
|
|
cf0e88495d | ||
|
|
7c67f18be5 | ||
|
|
9ab7e0dbac | ||
|
|
7e92b58c62 | ||
|
|
9c519b878e | ||
|
|
bb07dd8553 | ||
|
|
60555e72d8 | ||
|
|
a457d1d629 | ||
|
|
0e62b29028 | ||
|
|
8a0cb156b2 | ||
|
|
654f8ed7f5 | ||
|
|
cfa927dcd0 | ||
|
|
4383481a5f | ||
|
|
22063842f9 | ||
|
|
0e5d29a8f9 | ||
|
|
5ee16476dc | ||
|
|
2abb73eab8 | ||
|
|
547d8be21e | ||
|
|
b6d8582867 | ||
|
|
87fd358c4e | ||
|
|
0f4b082b4b | ||
|
|
59847c3756 | ||
|
|
b5d3dc6d56 | ||
|
|
3500867336 | ||
|
|
ea26d57566 | ||
|
|
45f0743c57 | ||
|
|
08d4e852d3 | ||
|
|
7edf1f93cb | ||
|
|
3892dfc78c | ||
|
|
954a164922 | ||
|
|
32fd38ad7c |
@@ -25,6 +25,7 @@ for:
|
||||
before_build:
|
||||
# Prepare pyfa data
|
||||
- sh: find locale/ -type f -name "*.po" -exec msgen "{}" -o "{}" \;
|
||||
- sh: pyenv global system
|
||||
- sh: python3 -B scripts/compile_lang.py
|
||||
- sh: python3 -B scripts/dump_crowdin_progress.py
|
||||
- sh: python3 -B db_update.py
|
||||
|
||||
20
db_update.py
@@ -141,14 +141,15 @@ def update_db():
|
||||
(row['typeName_en-us'].startswith('Civilian') and "Shuttle" not in row['typeName_en-us'])
|
||||
or row['typeName_en-us'] == 'Capsule'
|
||||
or row['groupID'] == 4033 # destructible effect beacons
|
||||
or re.match('AIR .+Booster.*', row['typeName_en-us'])
|
||||
or row['typeID'] == 82941 # Metenox service
|
||||
or re.match(r'AIR .+Booster.*', row['typeName_en-us'])
|
||||
):
|
||||
row['published'] = True
|
||||
# Nearly useless and clutter search results too much
|
||||
elif (
|
||||
row['typeName_en-us'].startswith('Limited Synth ')
|
||||
or row['typeName_en-us'].startswith('Expired ')
|
||||
or re.match('Mining Blitz .+ Booster Dose .+', row['typeName_en-us'])
|
||||
or re.match(r'Mining Blitz .+ Booster Dose .+', row['typeName_en-us'])
|
||||
or row['typeName_en-us'].endswith(' Filament') and (
|
||||
"'Needlejack'" not in row['typeName_en-us'] and
|
||||
"'Devana'" not in row['typeName_en-us'] and
|
||||
@@ -601,7 +602,7 @@ def update_db():
|
||||
eos.gamedata.Item.name.like('%mutated%'),
|
||||
eos.gamedata.Item.name.like('%_PLACEHOLDER%'),
|
||||
# Drifter weapons are published for some reason
|
||||
eos.gamedata.Item.name.in_(('Lux Kontos', 'Lux Xiphos'))
|
||||
eos.gamedata.Item.name.in_(('Lux Kontos', 'Lux Xiphos', 'Lux Ballistra', 'Lux Kopis'))
|
||||
)).all():
|
||||
if 'Asteroid Mining Crystal' in item.name:
|
||||
continue
|
||||
@@ -651,6 +652,16 @@ def update_db():
|
||||
effect.effectName = effectName
|
||||
item.effects[effectName] = effect
|
||||
|
||||
def hardcodeSuppressionTackleRange():
|
||||
beaconTypeID = 79839
|
||||
attrMap = {
|
||||
'warfareBuff1ID': 2405,
|
||||
'warfareBuff1Value': 10}
|
||||
effectMap = {100000: 'pyfaCustomSuppressionTackleRange'}
|
||||
_hardcodeAttribs(beaconTypeID, attrMap)
|
||||
_hardcodeEffects(beaconTypeID, effectMap)
|
||||
|
||||
|
||||
def hardcodeShapash():
|
||||
shapashTypeID = 1000000
|
||||
_copyItem(srcName='Utu', tgtTypeID=shapashTypeID, tgtName='Shapash')
|
||||
@@ -794,8 +805,7 @@ def update_db():
|
||||
_hardcodeAttribs(cybeleTypeID, attrMap)
|
||||
_hardcodeEffects(cybeleTypeID, effectMap)
|
||||
|
||||
# hardcodeShapash()
|
||||
# hardcodeCybele()
|
||||
hardcodeSuppressionTackleRange()
|
||||
|
||||
eos.db.gamedata_session.commit()
|
||||
eos.db.gamedata_engine.execute('VACUUM')
|
||||
|
||||
@@ -14,7 +14,7 @@ with open("version.yml", 'r') as file:
|
||||
os.environ["PYFA_DIST_DIR"] = os.path.join(os.getcwd(), 'dist')
|
||||
|
||||
os.environ["PYFA_VERSION"] = version
|
||||
iscc = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe"
|
||||
iscc = r"C:\Program Files (x86)\Inno Setup 6\ISCC.exe"
|
||||
|
||||
source = os.path.join(os.environ["PYFA_DIST_DIR"], "pyfa")
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ for modName in iterNamespace(__name__, __path__):
|
||||
# loop through python files, extracting update number and function, and
|
||||
# adding it to a list
|
||||
modname_tail = modName.rsplit('.', 1)[-1]
|
||||
m = re.match("^upgrade(?P<index>\d+)$", modname_tail)
|
||||
m = re.match(r"^upgrade(?P<index>\d+)$", modname_tail)
|
||||
if not m:
|
||||
continue
|
||||
index = int(m.group("index"))
|
||||
|
||||
313
eos/effects.py
@@ -37,6 +37,26 @@ class DummyEffect(BaseEffect):
|
||||
pass
|
||||
|
||||
|
||||
class Effect100000(BaseEffect):
|
||||
"""
|
||||
pyfaCustomSuppressionTackleRange
|
||||
|
||||
Used by:
|
||||
Celestial: Insurgency Suppression Interdiction Range Beacon
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
type = ('projected', 'passive', 'gang')
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, beacon, context, projectionRange, **kwargs):
|
||||
if beacon.getModifiedItemAttr('warfareBuff1ID'):
|
||||
value = beacon.getModifiedItemAttr('warfareBuff1Value')
|
||||
id = beacon.getModifiedItemAttr('warfareBuff1ID')
|
||||
if id:
|
||||
fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')
|
||||
|
||||
|
||||
class Effect4(BaseEffect):
|
||||
"""
|
||||
shieldBoosting
|
||||
@@ -62,7 +82,7 @@ class Effect10(BaseEffect):
|
||||
Used by:
|
||||
Celestials from group: Destructible Effect Beacon (6 of 6)
|
||||
Drones from group: Combat Drone (80 of 80)
|
||||
Modules from group: Energy Weapon (216 of 218)
|
||||
Modules from group: Energy Weapon (216 of 220)
|
||||
Celestial: BH Sentry Gun
|
||||
Celestial: EDENCOM Stockpile Non-Interactable (Do not translate)
|
||||
Celestial: Liberation Games Firework Sentry ( DO NOT TRANSLATE)
|
||||
@@ -462,7 +482,7 @@ class Effect67(BaseEffect):
|
||||
Used by:
|
||||
Modules from group: Frequency Mining Laser (3 of 3)
|
||||
Modules from group: Mining Laser (15 of 15)
|
||||
Modules from group: Strip Miner (5 of 5)
|
||||
Modules from group: Strip Miner (6 of 6)
|
||||
Module: Citizen Miner
|
||||
"""
|
||||
|
||||
@@ -507,7 +527,7 @@ class Effect91(BaseEffect):
|
||||
energyWeaponDamageMultiply
|
||||
|
||||
Used by:
|
||||
Modules from group: Heat Sink (19 of 19)
|
||||
Modules from group: Heat Sink (20 of 20)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -558,7 +578,7 @@ class Effect95(BaseEffect):
|
||||
energyWeaponSpeedMultiply
|
||||
|
||||
Used by:
|
||||
Modules from group: Heat Sink (19 of 19)
|
||||
Modules from group: Heat Sink (20 of 20)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -965,6 +985,7 @@ class Effect272(BaseEffect):
|
||||
repairSystemsDurationBonusPostPercentDurationLocationShipModulesRequiringRepairSystems
|
||||
|
||||
Used by:
|
||||
Implants named like: Calyx Repair Booster (3 of 3)
|
||||
Implants named like: Inherent Implants 'Noble' Repair Systems RS (6 of 6)
|
||||
Modules named like: Nanobot Accelerator (8 of 8)
|
||||
Implant: AIR Repairer Booster III
|
||||
@@ -1021,6 +1042,7 @@ class Effect279(BaseEffect):
|
||||
shieldEmmisionSystemsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringShieldEmmisionSystems
|
||||
|
||||
Used by:
|
||||
Implants named like: Asclepius Remote Repair Booster (3 of 3)
|
||||
Implants named like: Zainou 'Gnome' Shield Emission Systems SE (6 of 6)
|
||||
Skill: Shield Emission Systems
|
||||
"""
|
||||
@@ -1060,6 +1082,7 @@ class Effect290(BaseEffect):
|
||||
Used by:
|
||||
Implants named like: Frentix Booster (4 of 4)
|
||||
Implants named like: Halcyon B Booster (5 of 5)
|
||||
Implants named like: Oxybeles Turret Booster (3 of 3)
|
||||
Implants named like: Zainou 'Deadeye' Sharpshooter ST (6 of 6)
|
||||
Skill: Sharpshooter
|
||||
"""
|
||||
@@ -1114,8 +1137,8 @@ class Effect391(BaseEffect):
|
||||
astrogeologyMiningAmountBonusPostPercentMiningAmountLocationShipModulesRequiringMining
|
||||
|
||||
Used by:
|
||||
Implants named like: AIR Mining Yield Booster (3 of 3)
|
||||
Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
|
||||
Implants named like: Mining Booster (6 of 8)
|
||||
Implants named like: ORE 'Harvester' Efficiency (2 of 2)
|
||||
Implants named like: Serenity Limited 'Efficiency' Dose (3 of 3)
|
||||
Implants named like: Serenity Poteque 'Prospector' Harvesting MC (3 of 3)
|
||||
@@ -1774,6 +1797,7 @@ class Effect584(BaseEffect):
|
||||
Implants named like: 'Pyrolancea' Dose (7 of 7)
|
||||
Implants named like: Eifyr and Co. 'Gunslinger' Surgical Strike SS (6 of 6)
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implants named like: Oxybeles Turret Booster (3 of 3)
|
||||
Implant: AIR Pyrolancea Booster II
|
||||
"""
|
||||
|
||||
@@ -2413,6 +2437,7 @@ class Effect784(BaseEffect):
|
||||
Implants named like: Zainou 'Deadeye' Missile Bombardment MB (6 of 6)
|
||||
Modules named like: Rocket Fuel Cache Partition (8 of 8)
|
||||
Implant: Antipharmakon Toxot
|
||||
Implant: Mithridate Volatile Booster
|
||||
Skill: Missile Bombardment
|
||||
"""
|
||||
|
||||
@@ -3278,6 +3303,7 @@ class Effect1030(BaseEffect):
|
||||
remoteArmorSystemsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringRemoteArmorSystems
|
||||
|
||||
Used by:
|
||||
Implants named like: Asclepius Remote Repair Booster (3 of 3)
|
||||
Implants named like: Inherent Implants 'Noble' Remote Armor Repair Systems RA (6 of 6)
|
||||
Modules named like: Remote Repair Augmentor (6 of 8)
|
||||
Skill: Remote Armor Repair Systems
|
||||
@@ -4762,6 +4788,7 @@ class Effect1595(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: 'Pyrolancea' Dose (7 of 7)
|
||||
Implants named like: Eidolon Missile Booster (3 of 3)
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implant: AIR Pyrolancea Booster II
|
||||
Skill: Warhead Upgrades
|
||||
@@ -4782,6 +4809,7 @@ class Effect1596(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: 'Pyrolancea' Dose (7 of 7)
|
||||
Implants named like: Eidolon Missile Booster (3 of 3)
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implant: AIR Pyrolancea Booster II
|
||||
Skill: Warhead Upgrades
|
||||
@@ -4802,6 +4830,7 @@ class Effect1597(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: 'Pyrolancea' Dose (7 of 7)
|
||||
Implants named like: Eidolon Missile Booster (3 of 3)
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implant: AIR Pyrolancea Booster II
|
||||
Skill: Warhead Upgrades
|
||||
@@ -4894,6 +4923,7 @@ class Effect1635(BaseEffect):
|
||||
capitalRepairSystemsSkillDurationBonus
|
||||
|
||||
Used by:
|
||||
Implants named like: Calyx Repair Booster (3 of 3)
|
||||
Modules named like: Nanobot Accelerator (8 of 8)
|
||||
Implant: AIR Repairer Booster III
|
||||
Skill: Capital Repair Systems
|
||||
@@ -5049,6 +5079,7 @@ class Effect1657(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: 'Pyrolancea' Dose (7 of 7)
|
||||
Implants named like: Eidolon Missile Booster (3 of 3)
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implant: AIR Pyrolancea Booster II
|
||||
Skill: Warhead Upgrades
|
||||
@@ -5271,6 +5302,7 @@ class Effect1764(BaseEffect):
|
||||
missileSkillMissileProjectileVelocityBonus
|
||||
|
||||
Used by:
|
||||
Implants named like: Eidolon Missile Booster (3 of 3)
|
||||
Implants named like: Zainou 'Deadeye' Missile Projection MP (6 of 6)
|
||||
Modules named like: Hydraulic Bay Thrusters (8 of 8)
|
||||
Skill: Missile Projection
|
||||
@@ -6784,7 +6816,7 @@ class Effect2296(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implants named like: Tetrimon Resistance Booster (4 of 4)
|
||||
Implants named like: Phylax Armor Booster (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -6807,6 +6839,7 @@ class Effect2297(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: Halcyon B Booster (5 of 5)
|
||||
Implants named like: Pelte Shield Booster (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -6981,9 +7014,10 @@ class Effect2432(BaseEffect):
|
||||
Implants named like: Halcyon B Booster (5 of 5)
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implants named like: Inherent Implants 'Squire' Capacitor Management EM (6 of 6)
|
||||
Implants named like: Kausis Capacitor Booster (3 of 3)
|
||||
Implants named like: Mindflood Booster (4 of 4)
|
||||
Implants named like: Tetrimon Capacitor Booster (4 of 4)
|
||||
Modules named like: Semiconductor Memory Cell (8 of 8)
|
||||
Implant: Aegytica Volatile Booster
|
||||
Implant: Antipharmakon Aeolis
|
||||
Implant: Basic Capsuleer Engineering Augmentation Chip
|
||||
Implant: Genolution Core Augmentation CA-1
|
||||
@@ -7609,7 +7643,6 @@ class Effect2696(BaseEffect):
|
||||
maxRangeBonusEffectLasers
|
||||
|
||||
Used by:
|
||||
Implants named like: Tetrimon Precision Booster (4 of 4)
|
||||
Modules named like: Energy Locus Coordinator (8 of 8)
|
||||
"""
|
||||
|
||||
@@ -7862,6 +7895,7 @@ class Effect2735(BaseEffect):
|
||||
Implants named like: X Instinct Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterArmorHPPenalty'
|
||||
displayName = 'Armor Capacity'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7881,6 +7915,7 @@ class Effect2736(BaseEffect):
|
||||
Implants named like: Sooth Sayer Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterArmorRepairAmountPenalty'
|
||||
displayName = 'Armor Repair Amount'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7902,6 +7937,7 @@ class Effect2737(BaseEffect):
|
||||
Implants named like: X Instinct Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterShieldCapacityPenalty'
|
||||
displayName = 'Shield Capacity'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7921,6 +7957,7 @@ class Effect2739(BaseEffect):
|
||||
Implants named like: Sooth Sayer Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterTurretOptimalRangePenalty'
|
||||
displayName = 'Turret Optimal Range'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7940,6 +7977,7 @@ class Effect2741(BaseEffect):
|
||||
Implants named like: X Instinct Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterTurretFalloffPenalty'
|
||||
displayName = 'Turret Falloff'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7959,6 +7997,7 @@ class Effect2745(BaseEffect):
|
||||
Implants named like: Exile Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterCapacitorCapacityPenalty'
|
||||
displayName = 'Cap Capacity'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7977,6 +8016,7 @@ class Effect2746(BaseEffect):
|
||||
Items from market group: Implants & Boosters > Booster > Booster Slot 02 (9 of 13)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterMaxVelocityPenalty'
|
||||
displayName = 'Velocity'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -7995,6 +8035,7 @@ class Effect2747(BaseEffect):
|
||||
Implants named like: Frentix Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterTurretTrackingPenalty'
|
||||
displayName = 'Turret Tracking'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -8014,6 +8055,7 @@ class Effect2748(BaseEffect):
|
||||
Implants named like: X Instinct Booster (3 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterMissileVelocityPenalty'
|
||||
displayName = 'Missile Velocity'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -8032,6 +8074,7 @@ class Effect2749(BaseEffect):
|
||||
Implants named like: Blue Pill Booster (3 of 5)
|
||||
"""
|
||||
|
||||
runTime = 'late'
|
||||
attr = 'boosterAOEVelocityPenalty'
|
||||
displayName = 'Missile Explosion Velocity'
|
||||
type = 'boosterSideEffect'
|
||||
@@ -8360,7 +8403,6 @@ class Effect2803(BaseEffect):
|
||||
energyWeaponDamageMultiplyPassive
|
||||
|
||||
Used by:
|
||||
Implants named like: Harvest Damage Booster (4 of 4)
|
||||
Modules named like: Energy Collision Accelerator (8 of 8)
|
||||
Implant: Wisdom of Gheinok
|
||||
"""
|
||||
@@ -8471,6 +8513,7 @@ class Effect2847(BaseEffect):
|
||||
Implants named like: Halcyon G Booster (5 of 5)
|
||||
Implant: Antipharmakon Iokira
|
||||
Implant: Ogdin's Eye Coordination Enhancer
|
||||
Implant: Theriac Volatile Booster
|
||||
Skill: Motion Prediction
|
||||
"""
|
||||
|
||||
@@ -9250,7 +9293,7 @@ class Effect3001(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Modules from group: Missile Launcher Torpedo (22 of 22)
|
||||
Items from market group: Ship Equipment > Turrets & Launchers (446 of 928)
|
||||
Items from market group: Ship Equipment > Turrets & Launchers (446 of 930)
|
||||
Module: Interdiction Sphere Launcher I
|
||||
"""
|
||||
|
||||
@@ -9311,7 +9354,7 @@ class Effect3025(BaseEffect):
|
||||
overloadSelfDamageBonus
|
||||
|
||||
Used by:
|
||||
Modules from group: Energy Weapon (105 of 218)
|
||||
Modules from group: Energy Weapon (105 of 220)
|
||||
Modules from group: Hybrid Weapon (107 of 223)
|
||||
Modules from group: Precursor Weapon (19 of 19)
|
||||
Modules from group: Projectile Weapon (101 of 167)
|
||||
@@ -9450,7 +9493,7 @@ class Effect3035(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Modules named like: Capital Flex Hardener (9 of 9)
|
||||
Variations of module: Multispectrum Shield Hardener I (18 of 18)
|
||||
Variations of module: Multispectrum Shield Hardener I (19 of 19)
|
||||
"""
|
||||
|
||||
type = 'overheat'
|
||||
@@ -13102,7 +13145,8 @@ class Effect4088(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
|
||||
Celestial: Dazh Liminality Locus
|
||||
Celestial: Final Liminality
|
||||
Celestial: Triglavian Minor Victory
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -13123,7 +13167,8 @@ class Effect4089(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
|
||||
Celestial: Dazh Liminality Locus
|
||||
Celestial: Final Liminality
|
||||
Celestial: Triglavian Minor Victory
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -13279,6 +13324,7 @@ class Effect4135(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Class Wolf Rayet Effects (6 of 6)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -13296,6 +13342,7 @@ class Effect4136(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Class Wolf Rayet Effects (6 of 6)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -13314,6 +13361,7 @@ class Effect4137(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Class Wolf Rayet Effects (6 of 6)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -13333,6 +13381,7 @@ class Effect4138(BaseEffect):
|
||||
Used by:
|
||||
Celestials named like: Class Wolf Rayet Effects (6 of 6)
|
||||
Celestials named like: Volatile Ice Storm (2 of 2)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -16588,6 +16637,7 @@ class Effect4951(BaseEffect):
|
||||
Implants named like: Halcyon R Booster (5 of 5)
|
||||
Implant: AIR Hardshell Booster II
|
||||
Implant: Antipharmakon Thureo
|
||||
Implant: Balneum Volatile Booster
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -16623,6 +16673,7 @@ class Effect4967(BaseEffect):
|
||||
shieldBoosterDurationBonusShieldSkills
|
||||
|
||||
Used by:
|
||||
Implants named like: Calyx Repair Booster (3 of 3)
|
||||
Modules named like: Core Defense Operational Solidifier (8 of 8)
|
||||
Implant: AIR Repairer Booster III
|
||||
"""
|
||||
@@ -17307,10 +17358,10 @@ class Effect5068(BaseEffect):
|
||||
|
||||
class Effect5069(BaseEffect):
|
||||
"""
|
||||
mercoxitCrystalBonus
|
||||
deepcoreMiningBonus
|
||||
|
||||
Used by:
|
||||
Module: Medium Mercoxit Mining Crystal Optimization I
|
||||
Module: Medium Deep Core Mining Optimization I
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -18007,7 +18058,6 @@ class Effect5189(BaseEffect):
|
||||
trackingSpeedBonusEffectLasers
|
||||
|
||||
Used by:
|
||||
Implants named like: Tetrimon Precision Booster (4 of 4)
|
||||
Modules named like: Energy Metastasis Adjuster (8 of 8)
|
||||
"""
|
||||
|
||||
@@ -18435,7 +18485,7 @@ class Effect5230(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Modules from group: Flex Shield Hardener (5 of 5)
|
||||
Modules from group: Shield Hardener (102 of 102)
|
||||
Modules from group: Shield Hardener (103 of 103)
|
||||
"""
|
||||
|
||||
type = 'active'
|
||||
@@ -18625,7 +18675,7 @@ class Effect5264(BaseEffect):
|
||||
warfareLinkCPUAddition
|
||||
|
||||
Used by:
|
||||
Modules from group: Command Burst (10 of 10)
|
||||
Modules from group: Command Burst (12 of 12)
|
||||
Modules from group: Gang Coordinator (6 of 6)
|
||||
"""
|
||||
|
||||
@@ -19359,7 +19409,7 @@ class Effect5343(BaseEffect):
|
||||
shipBonusDroneDamageMultiplierGBC1
|
||||
|
||||
Used by:
|
||||
Variations of ship: Myrmidon (3 of 3)
|
||||
Ships named like: Myrmidon (2 of 2)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -19376,7 +19426,7 @@ class Effect5348(BaseEffect):
|
||||
shipBonusDroneHitpointsGBC1
|
||||
|
||||
Used by:
|
||||
Variations of ship: Myrmidon (3 of 3)
|
||||
Ships named like: Myrmidon (2 of 2)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -19615,6 +19665,7 @@ class Effect5364(BaseEffect):
|
||||
Implants named like: Halcyon R Booster (5 of 5)
|
||||
Implant: AIR Hardshell Booster II
|
||||
Implant: Antipharmakon Kosybo
|
||||
Implant: Vis Vitalis Volatile Booster
|
||||
Implant: Wisdom of Gheinok
|
||||
"""
|
||||
|
||||
@@ -19871,7 +19922,7 @@ class Effect5397(BaseEffect):
|
||||
baseMaxScanDeviationModifierModuleOnline2None
|
||||
|
||||
Used by:
|
||||
Variations of module: Scan Pinpointing Array I (2 of 2)
|
||||
Variations of module: Scan Pinpointing Array I (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -19889,7 +19940,7 @@ class Effect5398(BaseEffect):
|
||||
systemScanDurationModuleModifier
|
||||
|
||||
Used by:
|
||||
Modules from group: Scanning Upgrade Time (2 of 2)
|
||||
Modules from group: Scanning Upgrade Time (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -19905,7 +19956,7 @@ class Effect5399(BaseEffect):
|
||||
baseSensorStrengthModifierModule
|
||||
|
||||
Used by:
|
||||
Variations of module: Scan Rangefinding Array I (2 of 2)
|
||||
Variations of module: Scan Rangefinding Array I (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -20177,6 +20228,7 @@ class Effect5437(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implants named like: Mnemon Relic Coherence Booster (3 of 3)
|
||||
Modules named like: Emission Scope Sharpener (8 of 8)
|
||||
Implant: Poteque 'Prospector' Archaeology AC-905
|
||||
Implant: Poteque 'Prospector' Environmental Analysis EY-1005
|
||||
@@ -20626,23 +20678,6 @@ class Effect5501(BaseEffect):
|
||||
skill='Command Ships', **kwargs)
|
||||
|
||||
|
||||
class Effect5503(BaseEffect):
|
||||
"""
|
||||
eliteBonusCommandShipDroneTrackingCS2
|
||||
|
||||
Used by:
|
||||
Ship: Eos
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, ship, context, projectionRange, **kwargs):
|
||||
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
|
||||
'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
|
||||
skill='Command Ships', **kwargs)
|
||||
|
||||
|
||||
class Effect5505(BaseEffect):
|
||||
"""
|
||||
eliteBonusCommandShipMediumHybridRoFCS1
|
||||
@@ -24487,6 +24522,7 @@ class Effect6164(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Drifter Incursion (6 of 6)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -24494,7 +24530,7 @@ class Effect6164(BaseEffect):
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, beacon, context, projectionRange, **kwargs):
|
||||
fit.ship.boostItemAttr('maxVelocity', beacon.getModifiedItemAttr('maxVelocityMultiplier'), stackingPenalties=True, **kwargs)
|
||||
fit.ship.boostItemAttr('maxVelocity', beacon.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
|
||||
|
||||
|
||||
class Effect6166(BaseEffect):
|
||||
@@ -28307,7 +28343,7 @@ class Effect6566(BaseEffect):
|
||||
moduleBonusFighterSupportUnit
|
||||
|
||||
Used by:
|
||||
Modules from group: Fighter Support Unit (9 of 9)
|
||||
Modules from group: Fighter Support Unit (10 of 10)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -28627,7 +28663,7 @@ class Effect6582(BaseEffect):
|
||||
moduleBonusSiegeModule
|
||||
|
||||
Used by:
|
||||
Modules named like: Siege Module (3 of 3)
|
||||
Modules named like: Siege Module (4 of 4)
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -31117,7 +31153,7 @@ class Effect6732(BaseEffect):
|
||||
moduleBonusWarfareLinkArmor
|
||||
|
||||
Used by:
|
||||
Variations of module: Armor Command Burst I (2 of 2)
|
||||
Variations of module: Armor Command Burst I (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'active', 'gang'
|
||||
@@ -31138,7 +31174,7 @@ class Effect6733(BaseEffect):
|
||||
moduleBonusWarfareLinkShield
|
||||
|
||||
Used by:
|
||||
Variations of module: Shield Command Burst I (2 of 2)
|
||||
Variations of module: Shield Command Burst I (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'active', 'gang'
|
||||
@@ -33580,7 +33616,7 @@ class Effect7009(BaseEffect):
|
||||
Used by:
|
||||
Structure Modules from group: Structure Citadel Service Module (2 of 2)
|
||||
Structure Modules from group: Structure Engineering Service Module (6 of 6)
|
||||
Structure Modules from group: Structure FLEX Service Module (3 of 3)
|
||||
Structure Modules from group: Structure FLEX Service Module (4 of 4)
|
||||
Structure Modules from group: Structure Resource Processing Service Module (4 of 4)
|
||||
Structure Module: Standup Moon Drill I
|
||||
"""
|
||||
@@ -34789,6 +34825,11 @@ class Effect7117(BaseEffect):
|
||||
roleBonusWarpSpeed
|
||||
|
||||
Used by:
|
||||
Ships from group: Blockade Runner (5 of 5)
|
||||
Ships from group: Covert Ops (9 of 9)
|
||||
Ships from group: Hauler (5 of 18)
|
||||
Ships from group: Interceptor (10 of 10)
|
||||
Ships from group: Interdictor (4 of 4)
|
||||
Ship: Azariel
|
||||
Ship: Cynabal
|
||||
Ship: Dramiel
|
||||
@@ -35278,6 +35319,7 @@ class Effect7202(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Triglavian Invasion System Effects (3 of 3)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -35296,6 +35338,7 @@ class Effect7203(BaseEffect):
|
||||
|
||||
Used by:
|
||||
Celestials named like: Triglavian Invasion System Effects (3 of 3)
|
||||
Celestial: Drifter Crisis
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -35578,7 +35621,8 @@ class Effect7237(BaseEffect):
|
||||
systemWarpSpeedBonus
|
||||
|
||||
Used by:
|
||||
Celestial: Dazh Liminality Locus
|
||||
Celestial: Drifter Crisis
|
||||
Celestial: Final Liminality
|
||||
Celestial: Turnur Aftermath
|
||||
"""
|
||||
|
||||
@@ -35886,7 +35930,8 @@ class Effect8031(BaseEffect):
|
||||
systemMaxTargets
|
||||
|
||||
Used by:
|
||||
Celestial: Dazh Liminality Locus
|
||||
Celestial: Final Liminality
|
||||
Celestial: Triglavian Minor Victory
|
||||
"""
|
||||
|
||||
runTime = 'early'
|
||||
@@ -37672,64 +37717,13 @@ class Effect8264(BaseEffect):
|
||||
skill='Industrial Command Ships', **kwargs)
|
||||
|
||||
|
||||
class Effect8267(BaseEffect):
|
||||
"""
|
||||
weaponDisruptorResistanceBonusPassive
|
||||
|
||||
Used by:
|
||||
Implants named like: Harvest Anti Disruptor Booster (4 of 4)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, container, context, projectionRange, **kwargs):
|
||||
fit.ship.boostItemAttr(
|
||||
'weaponDisruptionResistance',
|
||||
container.getModifiedItemAttr('weaponDisruptionResistanceBonus'), **kwargs)
|
||||
|
||||
|
||||
class Effect8268(BaseEffect):
|
||||
"""
|
||||
nosferatuDurationBonusPassive
|
||||
|
||||
Used by:
|
||||
Implants named like: Harvest Nosferatu Booster (4 of 4)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, module, context, projectionRange, **kwargs):
|
||||
fit.modules.filteredItemBoost(
|
||||
lambda mod: mod.item.group.name == 'Energy Nosferatu', 'duration',
|
||||
module.getModifiedItemAttr('durationBonus'), **kwargs)
|
||||
|
||||
|
||||
class Effect8269(BaseEffect):
|
||||
"""
|
||||
stasisWebifierMaxRangeAddPassive
|
||||
|
||||
Used by:
|
||||
Implants named like: Harvest Webifier Booster (4 of 4)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, module, context, projectionRange, **kwargs):
|
||||
fit.modules.filteredItemIncrease(
|
||||
lambda mod: mod.item.group.name == 'Stasis Web', 'maxRange',
|
||||
module.getModifiedItemAttr('stasisWebRangeAdd'), **kwargs)
|
||||
|
||||
|
||||
class Effect8270(BaseEffect):
|
||||
"""
|
||||
capacitorWarfareResistanceBonusPassive
|
||||
|
||||
Used by:
|
||||
Implants named like: Halcyon Y Booster (5 of 5)
|
||||
Implants named like: Tetrimon Anti Drain Booster (4 of 4)
|
||||
Implants named like: Nocturne Anti Drain Booster (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
@@ -38080,6 +38074,23 @@ class Effect8323(BaseEffect):
|
||||
skill='Gallente Hauler', **kwargs)
|
||||
|
||||
|
||||
class Effect8328(BaseEffect):
|
||||
"""
|
||||
relicVirusStrengthBonusPassive
|
||||
|
||||
Used by:
|
||||
Implants named like: Palimpsest Relic Strength Booster (3 of 3)
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, container, context, projectionRange, **kwargs):
|
||||
fit.modules.filteredItemIncrease(
|
||||
lambda mod: mod.item.requiresSkill('Archaeology'), 'virusStrength',
|
||||
container.getModifiedItemAttr('virusStrengthBonus'), **kwargs)
|
||||
|
||||
|
||||
class Effect8360(BaseEffect):
|
||||
"""
|
||||
shipBonusMissileReloadTimeGC2
|
||||
@@ -41312,3 +41323,103 @@ class Effect12221(BaseEffect):
|
||||
fit.modules.filteredChargeBoost(
|
||||
lambda mod: mod.charge.requiresSkill('Breacher Pod Launcher Operation'), 'dotDuration',
|
||||
skill.getModifiedItemAttr('durationBonus') * skill.level, **kwargs)
|
||||
|
||||
|
||||
class Effect12249(BaseEffect):
|
||||
"""
|
||||
shipBonusDroneDamageHeavyMediumLightMultiplierGBC1
|
||||
|
||||
Used by:
|
||||
Ship: Eos
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, ship, context, projectionRange, **kwargs):
|
||||
fit.drones.filteredItemBoost(
|
||||
lambda drone: (
|
||||
drone.item.requiresSkill('Light Drone Operation')
|
||||
or drone.item.requiresSkill('Medium Drone Operation')
|
||||
or drone.item.requiresSkill('Heavy Drone Operation')),
|
||||
'damageMultiplier', ship.getModifiedItemAttr('shipBonusGBC1'),
|
||||
skill='Gallente Battlecruiser', **kwargs)
|
||||
|
||||
|
||||
class Effect12250(BaseEffect):
|
||||
"""
|
||||
shipBonusSentryDroneDamageAndSentryHPMultiplierGBC3
|
||||
|
||||
Used by:
|
||||
Ship: Eos
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, ship, context, projectionRange, **kwargs):
|
||||
for attrName in ('damageMultiplier', 'shieldCapacity', 'armorHP', 'hp'):
|
||||
fit.drones.filteredItemBoost(
|
||||
lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'), attrName,
|
||||
ship.getModifiedItemAttr('shipBonusGBC3'), skill='Gallente Battlecruiser', **kwargs)
|
||||
|
||||
|
||||
class Effect12251(BaseEffect):
|
||||
"""
|
||||
shipBonusDroneHPHeavyMediumLightGBC1
|
||||
|
||||
Used by:
|
||||
Ship: Eos
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, ship, context, projectionRange, **kwargs):
|
||||
for attrName in ('shieldCapacity', 'armorHP', 'hp'):
|
||||
fit.drones.filteredItemBoost(
|
||||
lambda drone: (
|
||||
drone.item.requiresSkill('Light Drone Operation')
|
||||
or drone.item.requiresSkill('Medium Drone Operation')
|
||||
or drone.item.requiresSkill('Heavy Drone Operation')),
|
||||
attrName, ship.getModifiedItemAttr('shipBonusGBC1'),
|
||||
skill='Gallente Battlecruiser', **kwargs)
|
||||
|
||||
|
||||
class Effect12252(BaseEffect):
|
||||
"""
|
||||
eliteBonusCommandShipDroneTrackingHeavyMediumLightCS2
|
||||
|
||||
Used by:
|
||||
Ship: Eos
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, ship, context, projectionRange, **kwargs):
|
||||
fit.drones.filteredItemBoost(
|
||||
lambda drone: (
|
||||
drone.item.requiresSkill('Light Drone Operation')
|
||||
or drone.item.requiresSkill('Medium Drone Operation')
|
||||
or drone.item.requiresSkill('Heavy Drone Operation')),
|
||||
'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
|
||||
skill='Command Ships', **kwargs)
|
||||
|
||||
|
||||
class Effect12253(BaseEffect):
|
||||
"""
|
||||
eliteBonusCommandShipDroneTrackingSentryCS4
|
||||
|
||||
Used by:
|
||||
Ship: Eos
|
||||
"""
|
||||
|
||||
type = 'passive'
|
||||
|
||||
@staticmethod
|
||||
def handler(fit, ship, context, projectionRange, **kwargs):
|
||||
fit.drones.filteredItemBoost(
|
||||
lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
|
||||
'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips4'),
|
||||
skill='Command Ships', **kwargs)
|
||||
|
||||
@@ -176,7 +176,7 @@ class DmgTypes:
|
||||
floatUnerr(self._thermal) == floatUnerr(other._thermal) and
|
||||
floatUnerr(self._kinetic) == floatUnerr(other._kinetic) and
|
||||
floatUnerr(self._explosive) == floatUnerr(other._explosive) and
|
||||
sorted(self._breachers) == sorted(other._breachers),
|
||||
sorted(self._breachers) == sorted(other._breachers) and
|
||||
self.profile == other.profile)
|
||||
|
||||
def __add__(self, other):
|
||||
|
||||
@@ -273,7 +273,7 @@ class GraphCanvasPanel(wx.Panel):
|
||||
legendLines = []
|
||||
for i, iData in enumerate(legendData):
|
||||
color, lineStyle, label = iData
|
||||
legendLines.append(Line2D([0], [0], color=color, linestyle=lineStyle, label=label.replace('$', '\$')))
|
||||
legendLines.append(Line2D([0], [0], color=color, linestyle=lineStyle, label=label.replace('$', r'\$')))
|
||||
|
||||
if len(legendLines) > 0 and self.graphFrame.ctrlPanel.showLegend:
|
||||
legend = self.subplot.legend(handles=legendLines)
|
||||
|
||||
@@ -43,6 +43,10 @@ class BoosterViewDrop(wx.DropTarget):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
data = dragged_data.split(':')
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
|
||||
@@ -41,6 +41,10 @@ class CargoViewDrop(wx.DropTarget):
|
||||
def OnData(self, x, y, t):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -56,6 +56,10 @@ class CommandViewDrop(wx.DropTarget):
|
||||
def OnData(self, x, y, t):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -52,6 +52,10 @@ class DroneViewDrop(wx.DropTarget):
|
||||
def OnData(self, x, y, t):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -52,6 +52,10 @@ class FighterViewDrop(wx.DropTarget):
|
||||
def OnData(self, x, y, t):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -46,6 +46,10 @@ class ImplantViewDrop(wx.DropTarget):
|
||||
def OnData(self, x, y, t):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -65,6 +65,10 @@ class ProjectedViewDrop(wx.DropTarget):
|
||||
def OnData(self, x, y, t):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -123,9 +123,11 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
|
||||
data.groups[_t('Abyssal Weather')] = self.getAbyssalWeather()
|
||||
data.groups[_t('Sansha Incursion')] = self.getEffectBeacons(
|
||||
_t('ContextMenu|ProjectedEffectManipulation|Sansha Incursion'))
|
||||
data.groups[_t('Drifter Incursion')] = self.getDrifterIncursion()
|
||||
data.groups[_t('Triglavian Invasion')] = self.getInvasionBeacons()
|
||||
# data.groups[_t('Pirate Insurgency')] = self.getEffectBeacons(
|
||||
# _t('ContextMenu|ProjectedEffectManipulation|Insurgency'))
|
||||
data.groups[_t('Pirate Insurgency')] = self.getEffectBeacons(
|
||||
_t('ContextMenu|ProjectedEffectManipulation|Insurgency'),
|
||||
extra_garbage=(_t('ContextMenu|ProjectedEffectManipulation|Beacon'),))
|
||||
return data
|
||||
|
||||
def getEffectBeacons(self, *groups, extra_garbage=()):
|
||||
@@ -176,7 +178,6 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
|
||||
container.append(Entry(beacon.ID, beaconname, shortname))
|
||||
# Break loop on 1st result
|
||||
break
|
||||
data.sort()
|
||||
return data
|
||||
|
||||
def getAbyssalWeather(self):
|
||||
@@ -233,8 +234,21 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
|
||||
data.sort()
|
||||
return data
|
||||
|
||||
def getDrifterIncursion(self):
|
||||
data = self.getEffectBeacons(_t('ContextMenu|ProjectedEffectManipulation|Drifter Incursion'))
|
||||
# Drifter Crisis
|
||||
item = Market.getInstance().getItem(87294)
|
||||
data.items.append(Entry(item.ID, item.name, item.name))
|
||||
return data
|
||||
|
||||
def getInvasionBeacons(self):
|
||||
data = self.getDestructibleBeacons()
|
||||
# Trig Minor Victory
|
||||
item = Market.getInstance().getItem(87177)
|
||||
data.items.append(Entry(item.ID, item.name, item.name))
|
||||
# Trig Final Liminality
|
||||
item = Market.getInstance().getItem(87164)
|
||||
data.items.append(Entry(item.ID, item.name, item.name))
|
||||
# Turnur weather
|
||||
item = Market.getInstance().getItem(74002)
|
||||
data.items.append(Entry(item.ID, item.name, item.name))
|
||||
@@ -247,5 +261,4 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
|
||||
data.items.append(Entry(item.ID, item.name, item.name))
|
||||
return data
|
||||
|
||||
|
||||
AddEnvironmentEffect.register()
|
||||
|
||||
@@ -22,9 +22,9 @@ class ItemDescription(wx.Panel):
|
||||
|
||||
desc = item.description.replace("\n", "<br>")
|
||||
# Strip font tags
|
||||
desc = re.sub("<( *)font( *)color( *)=(.*?)>(?P<inside>.*?)<( *)/( *)font( *)>", "\g<inside>", desc)
|
||||
desc = re.sub("<( *)font( *)color( *)=(.*?)>(?P<inside>.*?)<( *)/( *)font( *)>", r"\g<inside>", desc)
|
||||
# Strip URLs
|
||||
desc = re.sub("<( *)a(.*?)>(?P<inside>.*?)<( *)/( *)a( *)>", "\g<inside>", desc)
|
||||
desc = re.sub("<( *)a(.*?)>(?P<inside>.*?)<( *)/( *)a( *)>", r"\g<inside>", desc)
|
||||
desc = "<body bgcolor='{}' text='{}'>{}</body>".format(
|
||||
bgcolor.GetAsString(wx.C2S_HTML_SYNTAX),
|
||||
fgcolor.GetAsString(wx.C2S_HTML_SYNTAX),
|
||||
|
||||
@@ -163,6 +163,10 @@ class PFListPane(wx.ScrolledWindow):
|
||||
def RemoveAllChildren(self):
|
||||
for widget in self._wList:
|
||||
widget.Destroy()
|
||||
# this forces the garbage collector to work properly by removing dangling references to objects which are still alive, otherwise widget cannot be gc-ed eventually causing GDI id exhaustion and crash
|
||||
for i in widget.__dict__.keys():
|
||||
widget.__dict__[i] =None
|
||||
del widget
|
||||
|
||||
self.Scroll(0, 0)
|
||||
self._wList = []
|
||||
|
||||
@@ -127,6 +127,10 @@ class FittingViewDrop(wx.DropTarget):
|
||||
if self.GetData():
|
||||
dragged_data = DragDropHelper.data
|
||||
# pyfalog.debug("fittingView: recieved drag: " + self.dropData.GetText())
|
||||
|
||||
if dragged_data is None:
|
||||
return t
|
||||
|
||||
data = dragged_data.split(':')
|
||||
self.dropFn(x, y, data)
|
||||
return t
|
||||
|
||||
@@ -13,8 +13,8 @@ from service.market import Market
|
||||
|
||||
|
||||
def stripHtml(text):
|
||||
text = re.sub('<\s*br\s*/?\s*>', '\n', text)
|
||||
text = re.sub('</?[^/]+?(/\s*)?>', '', text)
|
||||
text = re.sub(r'<\s*br\s*/?\s*>', '\n', text)
|
||||
text = re.sub(r'</?[^/]+?(/\s*)?>', '', text)
|
||||
return text
|
||||
|
||||
|
||||
|
||||
@@ -481,6 +481,35 @@ class SkillTreeView(wx.Panel):
|
||||
|
||||
toClipboard(list)
|
||||
|
||||
def exportSkillsSuperCondensed(self, evt):
|
||||
char = self.charEditor.entityEditor.getActiveEntity()
|
||||
|
||||
skills = {}
|
||||
explicit_levels = {}
|
||||
implicit_levels = {}
|
||||
for s in char.__class__.getSkillNameMap().keys():
|
||||
skill = char.getSkill(s)
|
||||
if skill.level < 1:
|
||||
continue
|
||||
skills[skill.item.ID] = skill
|
||||
explicit_levels[skill.item.ID] = skill.level
|
||||
|
||||
for skill in skills.values():
|
||||
for req_skill, level in skill.item.requiredSkills.items():
|
||||
if req_skill.ID not in implicit_levels or implicit_levels[req_skill.ID] < level:
|
||||
implicit_levels[req_skill.ID] = level
|
||||
|
||||
condensed = {}
|
||||
for typeID, level in explicit_levels.items():
|
||||
if typeID not in implicit_levels or implicit_levels[typeID] < level:
|
||||
condensed[skills[typeID].item.name] = level
|
||||
|
||||
lines = []
|
||||
for skill in sorted(condensed):
|
||||
lines.append(f'{skill}\t{condensed[skill]}')
|
||||
|
||||
toClipboard('\n'.join(lines))
|
||||
|
||||
def onSecStatus(self, event):
|
||||
sChar = Character.getInstance()
|
||||
char = self.charEditor.entityEditor.getActiveEntity()
|
||||
|
||||
@@ -66,8 +66,8 @@ class UpdateDialog(wx.Dialog):
|
||||
self.browser.Bind(wx.html2.EVT_WEBVIEW_NEWWINDOW, self.OnNewWindow)
|
||||
|
||||
link_patterns = [
|
||||
(re.compile("#(\d+)", re.I), r"https://github.com/pyfa-org/Pyfa/issues/\1"),
|
||||
(re.compile("@(\w+)", re.I), r"https://github.com/\1")
|
||||
(re.compile(r"#(\d+)", re.I), r"https://github.com/pyfa-org/Pyfa/issues/\1"),
|
||||
(re.compile(r"@(\w+)", re.I), r"https://github.com/\1")
|
||||
]
|
||||
|
||||
markdowner = markdown2.Markdown(
|
||||
|
||||
32
gui/utils/gdi.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import gc
|
||||
from ctypes import *
|
||||
from collections import defaultdict
|
||||
import os
|
||||
def gdiReport(desc=''):
|
||||
PH = windll.kernel32.OpenProcess(0x400, 0, os.getpid())
|
||||
numGdi = windll.user32.GetGuiResources(PH, 0)
|
||||
windll.kernel32.CloseHandle(PH)
|
||||
print (f'{desc}, {numGdi}')
|
||||
|
||||
|
||||
last = None
|
||||
def output_memory():
|
||||
global last
|
||||
d = defaultdict(int)
|
||||
for o in gc.get_objects():
|
||||
name = type(o).__name__
|
||||
if name == 'Bitmap':
|
||||
del o
|
||||
d[name] += 1
|
||||
|
||||
items = d.items()
|
||||
items = sorted(items,key=lambda x:x[1])
|
||||
print('------')
|
||||
for key, value in items:
|
||||
if last is not None:
|
||||
if value -last[key] !=0:
|
||||
print(f'{key} {value - last[key]}, {value}')
|
||||
else:
|
||||
print( key, value)
|
||||
|
||||
last = d
|
||||
@@ -96,7 +96,7 @@ class FloatBox(wx.TextCtrl):
|
||||
if currentValue == self._storedValue:
|
||||
event.Skip()
|
||||
return
|
||||
if currentValue == '' or re.match('^\d*\.?\d*$', currentValue):
|
||||
if currentValue == '' or re.match(r'^\d*\.?\d*$', currentValue):
|
||||
self._storedValue = currentValue
|
||||
self.updateColor()
|
||||
event.Skip()
|
||||
@@ -131,7 +131,7 @@ class FloatRangeBox(wx.TextCtrl):
|
||||
if currentValue == self._storedValue:
|
||||
event.Skip()
|
||||
return
|
||||
if currentValue == '' or re.match('^\d*\.?\d*-?\d*\.?\d*$', currentValue):
|
||||
if currentValue == '' or re.match(r'^\d*\.?\d*-?\d*\.?\d*$', currentValue):
|
||||
self._storedValue = currentValue
|
||||
event.Skip()
|
||||
else:
|
||||
|
||||
BIN
imgs/icons/10877@1x.png
Normal file
|
After Width: | Height: | Size: 721 B |
BIN
imgs/icons/10877@2x.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
imgs/icons/1156@1x.png
Normal file
|
After Width: | Height: | Size: 762 B |
BIN
imgs/icons/1156@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 717 B |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 804 B After Width: | Height: | Size: 787 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 788 B After Width: | Height: | Size: 799 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 796 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 785 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 807 B After Width: | Height: | Size: 756 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 816 B After Width: | Height: | Size: 806 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 809 B After Width: | Height: | Size: 816 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 823 B After Width: | Height: | Size: 805 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 756 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 831 B After Width: | Height: | Size: 792 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 821 B After Width: | Height: | Size: 803 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 839 B After Width: | Height: | Size: 798 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 819 B After Width: | Height: | Size: 747 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 817 B After Width: | Height: | Size: 790 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 801 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 823 B After Width: | Height: | Size: 789 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25235@1x.png
Normal file
|
After Width: | Height: | Size: 769 B |
BIN
imgs/icons/25235@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25236@1x.png
Normal file
|
After Width: | Height: | Size: 805 B |
BIN
imgs/icons/25236@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25237@1x.png
Normal file
|
After Width: | Height: | Size: 796 B |
BIN
imgs/icons/25237@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 784 B After Width: | Height: | Size: 809 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 847 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 829 B After Width: | Height: | Size: 856 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 833 B |
|
Before Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25245@1x.png
Normal file
|
After Width: | Height: | Size: 802 B |
BIN
imgs/icons/25245@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25246@1x.png
Normal file
|
After Width: | Height: | Size: 841 B |
BIN
imgs/icons/25246@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25247@1x.png
Normal file
|
After Width: | Height: | Size: 840 B |
BIN
imgs/icons/25247@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 782 B After Width: | Height: | Size: 821 B |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 816 B After Width: | Height: | Size: 850 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 823 B After Width: | Height: | Size: 839 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 814 B |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 787 B After Width: | Height: | Size: 794 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 836 B After Width: | Height: | Size: 847 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 846 B After Width: | Height: | Size: 853 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 848 B After Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 816 B After Width: | Height: | Size: 807 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 778 B After Width: | Height: | Size: 797 B |