Compare commits

...

40 Commits

Author SHA1 Message Date
DarkPhoenix
126105cd0d Bump version 2025-04-15 16:41:19 +02:00
DarkPhoenix
fedaa70d9d Update icons 2025-04-15 16:40:56 +02:00
DarkPhoenix
d1707a0dca Update effects 2025-04-15 16:38:48 +02:00
DarkPhoenix
9065d348d3 Update static data 2025-04-15 16:16:22 +02:00
DarkPhoenix
602916c23f Bump version 2025-03-26 16:44:24 +01:00
DarkPhoenix
0d43a8a4c3 Update static data 2025-03-26 16:44:01 +01:00
DarkPhoenix
1e6431a8b3 Update ESI endpoint version 2025-03-26 15:36:53 +01:00
DarkPhoenix
b6067ff0a2 Force publish metenox service 2025-03-18 08:57:55 +01:00
DarkPhoenix
89e426815d Update static data 2025-03-13 12:13:09 +01:00
DarkPhoenix
cf0e88495d Bump version 2025-03-13 12:00:52 +01:00
DarkPhoenix
7c67f18be5 Add drifter incursion beacons 2025-03-13 11:57:09 +01:00
DarkPhoenix
9ab7e0dbac Add trig victory effects 2025-03-13 11:44:24 +01:00
DarkPhoenix
7e92b58c62 Add support for insurgency suppression bonus 2025-03-13 11:28:57 +01:00
DarkPhoenix
9c519b878e Remove debugging stuff 2025-03-12 16:54:41 +01:00
DarkPhoenix
bb07dd8553 Debugging 2025-03-12 16:49:14 +01:00
DarkPhoenix
60555e72d8 Debugging 2025-03-12 16:41:28 +01:00
DarkPhoenix
a457d1d629 Debugging 2025-03-12 16:23:35 +01:00
DarkPhoenix
0e62b29028 Debugging 2025-03-12 16:16:21 +01:00
DarkPhoenix
8a0cb156b2 Debugging 2025-03-12 16:07:26 +01:00
DarkPhoenix
654f8ed7f5 Install requests as a dependency for one of build scripts 2025-03-12 15:37:26 +01:00
DarkPhoenix
cfa927dcd0 Run booster side effect penalties in late stage 2025-03-12 15:20:00 +01:00
DarkPhoenix
4383481a5f Bump version 2025-03-12 15:02:32 +01:00
DarkPhoenix
22063842f9 Add new eos effects 2025-03-12 14:57:14 +01:00
DarkPhoenix
0e5d29a8f9 Update effects 2025-03-12 14:19:45 +01:00
DarkPhoenix
5ee16476dc Update icons 2025-03-12 14:00:09 +01:00
DarkPhoenix
2abb73eab8 Update static data to 2842658 2025-03-12 13:51:22 +01:00
DarkPhoenix
547d8be21e Add debugging functions 2025-03-05 10:32:26 +01:00
DarkPhoenix
b6d8582867 Fix standup fighter export 2025-01-13 23:27:26 +01:00
DarkPhoenix
87fd358c4e Bump version 2024-12-05 15:08:54 +01:00
Anton Vorobyov
0f4b082b4b Merge pull request #2629 from cryonox/dev/issue2121
Fix wxWidget crash caused by GDI object limit
2024-12-05 13:20:53 +01:00
DarkPhoenix
59847c3756 Update for today's patch 2024-12-05 13:16:56 +01:00
DarkPhoenix
b5d3dc6d56 Bump version 2024-11-28 17:28:21 +01:00
DarkPhoenix
3500867336 Revert wxpython version bump 2024-11-27 23:41:29 +01:00
Anton Vorobyov
ea26d57566 Merge pull request #2635 from wereii/fix-syntax-warnings
Fix invalid escape syntax warnings
2024-11-27 23:38:15 +01:00
Anton Vorobyov
45f0743c57 Merge branch 'master' into fix-syntax-warnings 2024-11-27 23:37:50 +01:00
DarkPhoenix
08d4e852d3 Fix comparison issue which broke graphs in some cases 2024-11-27 23:25:49 +01:00
Anton Vorobyov
7edf1f93cb Merge pull request #2631 from ugurilter/master
fix arbitrary content being dragged and dropped causing errors
2024-11-26 19:59:08 +01:00
Ugur Ilter
3892dfc78c fix arbitrary content being dragged and dropped causing errors
Fixes #2630
2024-09-26 15:52:26 +03:00
wereii
954a164922 Fix invalid escape syntax warnings
Additionally use rawstrings with all regex calls
2024-09-11 17:25:38 +02:00
cryonox
32fd38ad7c Fix wxWidget crash caused by GDI id limit 2024-08-15 17:50:41 +08:00
345 changed files with 37360 additions and 3999 deletions

View File

@@ -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

View File

@@ -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')

View File

@@ -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")

View File

@@ -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"))

View File

@@ -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)

View File

@@ -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):

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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),

View File

@@ -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 = []

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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
View 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

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

BIN
imgs/icons/10877@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
imgs/icons/1156@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

BIN
imgs/icons/1156@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 804 B

After

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 788 B

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 818 B

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 808 B

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

After

Width:  |  Height:  |  Size: 816 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 B

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 839 B

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 B

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25235@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

BIN
imgs/icons/25235@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25236@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 B

BIN
imgs/icons/25236@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25237@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

BIN
imgs/icons/25237@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 B

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 808 B

After

Width:  |  Height:  |  Size: 847 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 B

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25245@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

BIN
imgs/icons/25245@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25246@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 841 B

BIN
imgs/icons/25246@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25247@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 B

BIN
imgs/icons/25247@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 782 B

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

After

Width:  |  Height:  |  Size: 847 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 846 B

After

Width:  |  Height:  |  Size: 853 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 848 B

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 778 B

After

Width:  |  Height:  |  Size: 797 B

Some files were not shown because too many files have changed in this diff Show More