pyfa-org / Pyfa

Python fitting assistant, cross-platform fitting tool for EVE Online
GNU General Public License v3.0
1.6k stars 404 forks source link

Damage Pattern Editor doesn't allow decimal points #505

Closed falcon397 closed 5 years ago

falcon397 commented 8 years ago

I cannot input decimal points into the fields in the damage pattern editor. I then tried to setup the damage patterns in a text file and attempted to copy them into the application. This matters because some damage types require decimal places of at least one significant digit (for example hybrid void S does 7.7 kin/therm damage).

blitzmann commented 8 years ago

Yeah I should get this fixed.

I should note that: 1) You can find the charge in the market browser and right click -> Set as Damage Pattern to work around this. 2) Even though you cannot put in 7.7 / 7.7 into the input boxes (at this time), the damage pattern calcs actually work on percentages. So you can effectively convert this to 50 / 50 and it'll work the same (for example, Void S does 15.4 damage total, 50% of which is Therm, 50% of which is Kin)

falcon397 commented 8 years ago

Yeah, #2 is close to solving my problem, but not quite, I'm trying to make a comprehensive damage pattern and target resist import for my corp.

On Sun, Jan 17, 2016, 7:37 AM blitzmann notifications@github.com wrote:

Yeah I should get this fixed.

I should note that: 1) You can find the charge in the market browser and right click -> Set as Damage Pattern to work around this. 2) Even though you cannot put in 7.7 / 7.7 into the input boxes (at this time), the damage pattern calcs actually work on percentages. So you can effectively convert this to 50 / 50 and it'll work the same (for example, Void S does 15.4 damage total, 50% of which is Therm, 50% of which is Kin)

— Reply to this email directly or view it on GitHub https://github.com/DarkFenX/Pyfa/issues/505#issuecomment-172342139.

################Damage Patterns###################

DamageProfile=[Pure] EM,100,0,0,0 DamageProfile=[Pure] Thermal,0,100,0,0 DamageProfile=[Pure] Kinetic,0,0,100,0 DamageProfile=[Pure] Explosive,0,0,0,100 DamageProfile=[Hybrids] Iron,0,2,3,0 DamageProfile=[Hybrids] Tungsten,0,2,4,0 DamageProfile=[Hybrids] Iridium,0,3,4,0 DamageProfile=[Hybrids] Lead,0,3,5,0 DamageProfile=[Hybrids] Thorium,0,4,5,0 DamageProfile=[Hybrids] Uranium,0,4,6,0 DamageProfile=[Hybrids] Plutonium,0,5,6,0 DamageProfile=[Hybrids] Antimatter,0,5,7,0 DamageProfile=[Hybrids] Javelin,0,8,6,0 DamageProfile=[Hybrids] Spike,0,4,4,0 DamageProfile=[Hybrids] Null,0,6,5,0 DamageProfile=[Hybrids] Void,0,7.7,7.7,0 DamageProfile=[Lasers] Radio,5,0,0,0 DamageProfile=[Lasers] Microwave,4,2,0,0 DamageProfile=[Lasers] Infrared,5,2,0,0 DamageProfile=[Lasers] Standard,5,3,0,0 DamageProfile=[Lasers] Ultraviolet,6,3,0,0 DamageProfile=[Lasers] Xray,6,4,0,0 DamageProfile=[Lasers] Gamma,7,4,0,0 DamageProfile=[Lasers] Multifrequency,7,5,0,0 DamageProfile=[Lasers] Conflagration,7.7,7.7,0,0 DamageProfile=[Lasers] Scorch,9,2,0,0 DamageProfile=[Lasers] Aurora,5,3,0,0 DamageProfile=[Lasers] Gleam,7,7,0,0 DamageProfile=[Projectiles] Carbonized Lead,0,0,4,1 DamageProfile=[Projectiles] Nuclear,0,0,1,4 DamageProfile=[Projectiles] Proton,3,0,2,0 DamageProfile=[Projectiles] Depleted Uranium,0,3,2,3 DamageProfile=[Projectiles] Titanium Sabot,0,0,6,2 DamageProfile=[Projectiles] Fusion,0,0,2,10 DamageProfile=[Projectiles] Phased Plasma,0,10,2,0 DamageProfile=[Projectiles] EMP,9,0,1,2 DamageProfile=[Projectiles] Quake,0,0,5,9 DamageProfile=[Projectiles] Tremor,0,0,3,5 DamageProfile=[Projectiles] Barrage,0,0,5,6 DamageProfile=[Projectiles] Hail,0,0,3,11 DamageProfile = [Asteroid] Angel Cartel,23,7,26,44 DamageProfile = [Asteroid] Blood Raiders,55,45,0,0 DamageProfile = [Asteroid] Guristas,0,17,83,0 DamageProfile = [Asteroid] Rogue Drone,10,18,28,44 DamageProfile = [Asteroid] Sansha's Nation,58,42,0,0 DamageProfile = [Asteroid] Serpentis,0,53,47,0 DamageProfile = [Deadspace] Angel Cartel,6,9,26,59 DamageProfile = [Deadspace] Blood Raiders,53,47,0,0 DamageProfile = [Deadspace] Guristas,0,19,81,0 DamageProfile = [Deadspace] Rogue Drone,8,34,32,26 DamageProfile = [Deadspace] Sansha's Nation,57,43,0,0 DamageProfile = [Deadspace] Serpentis,0,62,38,0 DamageProfile = [Mission] Amarr Empire,56,43,1,0 DamageProfile = [Mission] Caldari State,0,31,69,0 DamageProfile = [Mission] CONCORD,26,12,20,42 DamageProfile = [Mission] Gallente Federation,0,58,42,0 DamageProfile = [Mission] Khanid,56,40,4,0 DamageProfile = [Mission] Minmatar Republic,14,5,23,58 DamageProfile = [Mission] Mordu,2,32,66,0 DamageProfile = [Mission] Thukker,0,37,7,56 DamageProfile = [Other] Friendlies,13,46,35,6 DamageProfile = [Other] The Law,36,29,24,11 DamageProfile = [Other] Sleepers,29,29,21,21 DamageProfile = [Other] Incursion Sansha's Nation,16,13,36,35

################Target Resists###################

TargetResists = [Asteroid] Angel Cartel,50.0,42.0,34.0,26.0 TargetResists = [Asteroid] Blood Raiders,27.0,35.0,44.0,53.0 TargetResists = [Asteroid] Guristas,51.0,34.0,26.0,43.0 TargetResists = [Asteroid] Rogue Drone,29.0,37.0,46.0,55.0 TargetResists = [Asteroid] Sansha's Nation,30.0,38.0,46.0,55.0 TargetResists = [Asteroid] Serpentis,43.0,35.0,27.0,52.0 TargetResists = [Deadspace] Angel Cartel,57.0,48.0,39.0,30.0 TargetResists = [Deadspace] Blood Raiders,28.0,38.0,47.0,56.0 TargetResists = [Deadspace] Guristas,57.0,38.0,29.0,48.0 TargetResists = [Deadspace] Rogue Drone,33.0,39.0,47.0,55.0 TargetResists = [Deadspace] Sansha's Nation,28.0,37.0,47.0,56.0 TargetResists = [Deadspace] Serpentis,47.0,38.0,29.0,56.0 TargetResists = [Mission] Amarr Empire,26.0,34.0,43.0,51.0 TargetResists = [Mission] CONCORD,42.0,41.0,42.0,42.0 TargetResists = [Mission] Caldari State,54.0,37.0,29.0,46.0 TargetResists = [Mission] Gallente Federation,45.0,36.0,28.0,54.0 TargetResists = [Mission] Khanid,26.0,29.0,37.0,42.0 TargetResists = [Mission] Minmatar Republic,55.0,45.0,38.0,29.0 TargetResists = [Mission] Mordu,42.0,35.0,32.0,35.0 TargetResists = [Mission] Thukker,30.0,27.0,32.0,31.0 TargetResists = [Other] Friendlies,31.0,29.0,32.0,36.0 TargetResists = [Other] Incursion Sansha's Nation,53.0,53.0,53.0,54.0 TargetResists = [Other] Sleepers,30.0,30.0,30.0,30.0 TargetResists = [Other] The Law,31.0,35.0,38.0,40.0

falcon397 commented 8 years ago

Right, but I'm writing an import for all ammo types as well as for target resists, and I'm organizing then into folders. I tried to download your source code and do it myself, but I'm a c# guy, not really python, so without a debugger I'm useless, and I didn't feel like loading up a Linux vm, tracking down the libraries you're using and installing those, just to find what looks like a data type mismatch, that's just a guess though.

On Sun, Jan 17, 2016, 7:37 AM blitzmann notifications@github.com wrote:

Yeah I should get this fixed.

I should note that: 1) You can find the charge in the market browser and right click -> Set as Damage Pattern to work around this. 2) Even though you cannot put in 7.7 / 7.7 into the input boxes (at this time), the damage pattern calcs actually work on percentages. So you can effectively convert this to 50 / 50 and it'll work the same (for example, Void S does 15.4 damage total, 50% of which is Therm, 50% of which is Kin)

— Reply to this email directly or view it on GitHub https://github.com/DarkFenX/Pyfa/issues/505#issuecomment-172342139.

Ebag333 commented 7 years ago

There are now profiles for NPC ships as well as all the ammo types in markets included by default in Pyfa.

@falcon397 if you don't see them, click on the Help menu and select Import Database Defaults. (Make sure you're on the current version first.)

Yeah, #2 is close to solving my problem, but not quite, I'm trying to make a comprehensive damage pattern and target resist import for my corp.

I think you missed the point @blitzmann was making. The damage profiles work off percentages, so if you enter 7.7 kin and 7.7 therm this is the exact same as 77 kin and 77 therm. It doesn't care about the absolute value, only the percentage.

. @blitzmann you should be able to close this issue as it's been resolved multiple ways now. :)

blitzmann commented 7 years ago

Gonna leave this open for now until I can get around to it. There are workarounds, but we should handle decimals. :)

Ebag333 commented 7 years ago

Yeah, the database obviously handles decimals (floats!) but if you try and edit it via the GUI it drops them.

minlexx commented 7 years ago

My results of a brief digging: gui\patternEditor.py line 128: setattr(self, "%sEdit"%type, IntCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize)) IntCtrl is the thing (subclass of TextCtrl with IntValidator attached) that doesn't allow decimal points in input, I believe. Few words about IntCtrl and decimal points, but I don't see any FloatCtrl in my wxPython installation folder (...Python27\Lib\site-packages\wx-3.0-msw\wx\lib). Probably it can be replaced by simple TextCtrl with manually written float validator attached, or by wx.lib.masked.numctrl.NumCrtl() ... Are there any negative consequences possible of floating numbers input in that dialog?

This topic has an example of FloatValidator btw... Maybe I can try to fix this? If you @blitzmann say

we should handle decimals. :)

Ebag333 commented 7 years ago

Maybe I can try to fix this?

PLEASE. I'm terrible at wxPython, so if you want to take that on, my hats off to you. @blitzmann is rather busy right now with other things anyway, so if you feel comfortable taking it on, submit and PR and we can review it.

minlexx commented 7 years ago

I am also not an expert in wxWidgets, but I can try in a free time. Sadly I have a free time only at weekends :(

blitzmann commented 7 years ago

Looks into this some to give you a bit more info. Some info:

The database field itself is and int. See https://github.com/pyfa-org/Pyfa/blob/master/eos/db/saveddata/damagePattern.py

So right off that bat we need to do a migration script for current databases to upgrade them to FLOAT.

Not only that, but we are doing IntCtrl: https://github.com/pyfa-org/Pyfa/blob/master/gui/patternEditor.py#L126

I am not sure if there is an equivalent float ctrl. And then finally we convert the type again to INT ensure it's an int here: https://github.com/pyfa-org/Pyfa/blob/master/gui/patternEditor.py#L126

EDIT: sorry, didn't realize the new comments above. You already figured most of this out.

Take a look at the target resist editor. That allows floats, and does custom validation in a janky way to not allow letters to be saved (you can still input them though), I don't know about wx.lib.masked.numctrl.NumCrtl(), might be useful. But yeah, however you do it works for me, I don't see any problem with either way. Just submit a PR whenever you're ready. :)

minlexx commented 7 years ago

The database field itself is an int

So, the issue is deeper than just a GUI input limiation, I also have to fix the database and make a migration script then.. I didn't expect to touch anything inside eos/ :)

blitzmann commented 7 years ago

So, the issue is deeper than just a GUI input limiation, I also have to fix the database and make a migration script then..

Yep. :)

I'm starting to recall that I also wanted to change these to floats, but then found out that it was a little more cumbersome and decided to leave it alone. Then I promptly forgot about it ;D

DarkFenX commented 5 years ago

Done in 4f784e2eea65aab180dc3eef8e9e9f7af0ecf467