|
Using Python3 to estimate BIS gear sets for Ninja.
By Izanami 2023-01-06 13:44:19
Yep, only 1 copy, and it's saved. Tried reloading and running it a few times, and still getting roughly the same.
Edit: Changed it back to the 1.0, 3.75, 5.5 and it's still the same.
If you're running the gui_wsdist.exe file, then it will not see any changes you make to the .py files. The .exe is a complete code all bundled into a single file. In order to see the changes, you'll need to create a new gui_wsdist.exe file or run the gui_wsdist.py file.
Edit: I've updated the code after fixing the FTP and nhits for Combo. With similar stats, I can get the MNK spreadsheet to agree to within a few percent with the ~39k mean damage at max buffs that my code is seeing.
Server: Siren
Game: FFXI
Posts: 228
By Siren.Noxzema 2023-01-06 14:02:31
Ah, that's what I was doing wrong, yeah I was running the .exe. Thanks.
But this still makes me want to test out Combo next event lol.
By SimonSes 2023-01-06 14:08:25
But this still makes me want to test out Combo next event lol.
Its basically a 3 hit Raging Fists. Both are same WSC and fTP are very close too:
RF - 1.0 2.1875 3.75
Combo - 1.0 2.4 3.4
Bismarck.Nekhekh
Server: Bismarck
Game: FFXI
Posts: 55
By Bismarck.Nekhekh 2023-01-09 11:08:24
Okay. I finally figured out how to use the program. Is there a way for us peons to add gear that is not listed? Currently I do not have access to R15 oddy gear so base sets would be nice as a comparison for example and +2 empy gear as well. This program at least gives me something to strive for when it comes to sets. Thank you for the hard work though keep up the good work.
By Izanami 2023-01-09 12:04:31
Okay. I finally figured out how to use the program. Is there a way for us peons to add gear that is not listed? Currently I do not have access to R15 oddy gear so base sets would be nice as a comparison for example and +2 empy gear as well. This program at least gives me something to strive for when it comes to sets. Thank you for the hard work though keep up the good work.
If you plan to use the gui_wsdist .exe version of the code, then you can not add your own gear since the .exe version is a complete code already. You'll have to create your own gui_wsdist.exe file after making the changes to the gear.py file I describe below to see changes in the .exe version. At that point, you may as well just run the .py version of the code, though.
If you plan to run the gui_wsdist .py version of the code like a normal python file, then you can simply add whatever gear you want to the gear.py file and run the gui_wsdist.py file normally to see the changes immediately. Just create a new python dictionary containing the stats and jobs for the item you want to add and place the dictionary's variable name in the corresponding gear-slot list.
For example, if you wanted to add Haubergeon for some reason, then you'd create the dictionary as:
Haubergeon = {"Name":"Haubergeon +1", "STR":6, "DEX":6, "AGI":-5, "Accuracy":12, "Attack":12, "Evasion":-20, "Jobs":["war","pld","drk","bst","sam","nin"]}
and add Haubergeon to the bodies list:
bodies = [Haubergeon, Sacro_Breastplate, Hjarrandi_Breastplate, Hashishin_Mintan, . . .]
The gear.py file has nearly 1000 pieces of equipment with examples of how to format stats in the dictionary if you do decide to add your own stuff.
Siren.Vanian
Server: Siren
Game: FFXI
Posts: 82
By Siren.Vanian 2023-01-11 15:47:32
Is there a guide anywhere for setting up python so i can run the .py file so I can add my own gear.
Managed to run .py file, got no gui error, fixed that, then got numpy error, fixed that, now getting numba error when trying to run the weapon skills, but getting error trying to install that
*edit*
nevermind, used an earlier version of python as numba wouldn't install on 3.11. All working now
By Izanami 2023-01-11 16:48:10
Is there a guide anywhere for setting up python so i can run the .py file so I can add my own gear.
Managed to run .py file, got no gui error, fixed that, then got numpy error, fixed that, now getting numba error when trying to run the weapon skills, but getting error trying to install that
*edit*
nevermind, used an earlier version of python as numba wouldn't install on 3.11. All working now
In my case, I did a fresh install of Python 3.8.8 64-bit for Windows10 and ran the following commands from the Windows10 Terminal app (PowerShell) to install the necessary python libraries:
Code
pip install numpy
pip install matplotlib
pip install numba
pip install PySimpleGUI
pip install pillow
Make sure to create a back-up of your modified files so you don't lose everything if you download an updated version of the code later.
Bismarck.Nekhekh
Server: Bismarck
Game: FFXI
Posts: 55
By Bismarck.Nekhekh 2023-01-12 18:32:06
Okay. I finally figured out how to use the program. Is there a way for us peons to add gear that is not listed? Currently I do not have access to R15 oddy gear so base sets would be nice as a comparison for example and +2 empy gear as well. This program at least gives me something to strive for when it comes to sets. Thank you for the hard work though keep up the good work.
If you plan to use the gui_wsdist .exe version of the code, then you can not add your own gear since the .exe version is a complete code already. You'll have to create your own gui_wsdist.exe file after making the changes to the gear.py file I describe below to see changes in the .exe version. At that point, you may as well just run the .py version of the code, though.
If you plan to run the gui_wsdist .py version of the code like a normal python file, then you can simply add whatever gear you want to the gear.py file and run the gui_wsdist.py file normally to see the changes immediately. Just create a new python dictionary containing the stats and jobs for the item you want to add and place the dictionary's variable name in the corresponding gear-slot list.
For example, if you wanted to add Haubergeon for some reason, then you'd create the dictionary as:
Haubergeon = {"Name":"Haubergeon +1", "STR":6, "DEX":6, "AGI":-5, "Accuracy":12, "Attack":12, "Evasion":-20, "Jobs":["war","pld","drk","bst","sam","nin"]}
and add Haubergeon to the bodies list:
bodies = [Haubergeon, Sacro_Breastplate, Hjarrandi_Breastplate, Hashishin_Mintan, . . .]
The gear.py file has nearly 1000 pieces of equipment with examples of how to format stats in the dictionary if you do decide to add your own stuff.
So how often do you update this with gear and how do you use the quick look TP as it is "greyed" out on my version.
By Izanami 2023-01-12 18:54:53
So how often do you update this with gear and how do you use the quick look TP as it is "greyed" out on my version.
There isn't much gear remaining to add outside of lower ranked Odyssey stuff.
I mostly update the gear.py file if I catch typos, such as the Boii Mufflers +3 having 130 INT until recently. I also updated Moonbow Belt +1 to include PUP.
I haven't added TP set checks yet, so the button is greyed out.
By Veydal1 2023-01-13 02:26:24
Sorry if this has been asked covered, but does your code take into consideration WS mods added to gear, like Crepuscular Knife and Utu Grip? I don't see the mods listed when I hover over the item in the GUI, nor in the gear.py file.
By Izanami 2023-01-13 08:42:39
Sorry if this has been asked covered, but does your code take into consideration WS mods added to gear, like Crepuscular Knife and Utu Grip? I don't see the mods listed when I hover over the item in the GUI, nor in the gear.py file.
The mouse-over tool tips will show all stats entered in the gear.py file. The code handles bonus WS mods in the main code, rather than in the gear stats.
Line 180-185 of wsdist.py checks if either Crepuscular Knife or Utu Grip is equipped in the off-hand slot and creates a special stat in the form ["STAT", bonus]. I suppose I need to add main-hand crepuscular knife to this check since I ignored that possibility when the code only supported NIN.
All WSs in weaponskill_scaling.py add this special stat to their WSC:
Code
elif ws_name == "Blade: Metsu":
ftp = 5.0
ftp_rep = False
wsc = 0.8*player_dex + dStat[1]*gearset.playerstats[dStat[0]]
nhits = 1
This is easily tested with the .py version of the gui code. Increase Crepuscular Knife's CHR stat and run a "Quick-look WS" on a non-CHR WS. If I equip Crepuscular Knife to the off-hand slot of the default set the code uses, then Blade: Shun shows 7159 damage. If I give Crepuscular Knife 150000 CHR instead of 15 CHR, then Blade: Shun increases to 73,192 damage.
[+]
Necro Bump Detected!
[32 days between previous and next post]
By Sockfoot 2023-02-14 13:18:37
Was just updating and noticed the original post leads to wsdist_v2, but that seems to be a less updated version, unless I am mistaken? If so, maybe edit the original post to head to the better one?
By Izanami 2023-02-14 14:51:28
Was just updating and noticed the original post leads to wsdist_v2, but that seems to be a less updated version, unless I am mistaken? If so, maybe edit the original post to head to the better one?
Oops. I should've removed that link a long time ago. The "_v2" version of the code is the last working version of the code before I made a working GUI. I had the GUI version take over the original repository. You'll want the gui_wsdist.py link for the most up to date version of the code.
As a side note since this thread has already been bumped:
I'll post an updated code soon. I think I've "finished" TP sets, Ranged Attack sets, and DT conditionals (find the best TP/WS/Magic set with >40% DT, for example), but I'm not sure how to quantify what the "best" set is for Ranged Attacks.
Right now, for Ranged Attack sets, I have the code find the highest (damage^2)*(tp_return) for Gandiva/Armageddon and (damage)*(tp_return^2) for all other ranged weapons. This setup appears to return good white damage sets for Empyrean AM3 and good TP building sets for all other weapons, but the exponents are essentially arbitrary with no real thought put into it. It may make more sense to simply optimize damage up to a certain TP threshold (the lower TP value for WSing, for example). If anyone has any better ideas for this, let me know.
Edit: the TP set finder focuses only on TP return (how long it takes to reach your lower TP limit), but I suppose it'll need the same treatment as the Ranged Attack set finder for Empyrean AM3 sets.
[+]
By Sockfoot 2023-02-14 14:57:09
Also, I don't think the Odyssey Rank selector is working. I've got it set to R25 and it is simulating R30.
Pic
(This is the most recent version if I'm not mistaken, just downloaded it. Says 2023 Jan 31 at the top.)
By Izanami 2023-02-14 15:00:50
Also, I don't think the Odyssey Rank selector is working. I've got it set to R25 and it is simulating R30.
Pic
(This is the most recent version if I'm not mistaken, just downloaded it. Says 2023 Jan 31 at the top.)
After you select the Odyssey rank through the drop-down menu, you'll need to reclick one of the "Select All" buttons for the code to deselect other Odyssey ranks and select only the rank you want. Additionally, make sure to unequip R30 gear from the main tab before rerunning the set finder since it will not unequip them for you unless it finds a better item for the slot.
By Sockfoot 2023-02-14 15:45:44
Perhaps it is just me, but having to select/deselect gear in two places is unintuitive. If I go through the list and make selections, seems like that should override what is in the 'quick list'.
By Izanami 2023-02-14 16:20:09
Additionally, make sure to unequip R30 gear from the main tab before rerunning the set finder since it will not unequip them for you unless it finds a better item for the slot.
Perhaps it is just me, but having to select/deselect gear in two places is unintuitive. If I go through the list and make selections, seems like that should override what is in the 'quick list'.
If I understand your problem correctly, then you are not the first person to have this problem. I have a fix in mind for this, but haven't gotten around to implementing it yet.
Essentially it comes down to simply unequipping items that are already equipped (in the inputs tab) but not selected with a checkbox (in the select gear tab), but only if there is at least one checkbox ticked for that slot (otherwise you can't lock gear to a slot). This has the potential to break the damage simulations for user-defined gearsets, though. I'll look into it more before I push the TP set update soon.
By Izanami 2023-02-16 12:31:16
I've updated the code. At least all of the big changes should be listed below.
Fixed issue with GEO-stat buffs not working (Indi-STR, etc)
Added Langour (MEva-) to GEO buffs
Added a 5th BRD song slot
Added BRD etudes and preludes
BRD songs now increase up to Songs+9 where applicable (Madrigals and Etudes)
Fixed issue with BRD Honor March not being limited to Songs+4 in the gui_wsdist.py file
Empyrean +2 earrings are no longer selected by default with the "Select All" buttons. The +1 versions are instead selected.
Added R0 Odyssey equipment.
New gear has been added, including some TP gear. I wouldn't be surprised if I missed some TP gear.
Gear that is equipped in the inputs tab, but not selected in the Select Gear Tab, will be unequipped automatically when finding the best set if that slot unlocked (if there are other pieces of gear selected for that slot). This fixes the issue brought up the other day.
A simple TP set finder has been added.
- The automated TP set finder will find the set with the lowest time to WS (real world time to reach your selected lower TP limit)
- The "Quicklook TP" button will show time to WS and average TP per round.
- Total white damage is stored, but not used yet. I need to add a few extra stats to the damage logic, such as "DA damage", before TP sets will use damage metrics
- Kick attacks and Daken are applied.
- Zanshin is applied, but it may be applied incorrectly. Let me know if I need to update the Zanshin logic.
- Must be using one of ["Great Sword", "Great Katana", "Great Axe", "Polearm", "Scythe", "Staff"]
- Zanshin gear and traits are added together normally, with SAM getting an extra 25% with Hasso up (assumed always up for now)
- SAM 100 and 1200 job points gifts provide an extra +10% Zanshin that is applied after the 25% bonus to gear+traits
- 25% of the pre-bonus Zanshin is converted to "zanhasso" for SAM main job, which allows Zanshin to proc even if your attack does not miss. This caps at 25% (+10% for the 100+1200 JP gifts)
- Assuming 5/5 Ikishoten merits, Zanshin hits gain an additional 150TP applied before Store TP.
- TP sets are even more marginal than WS sets. You will easily find sets that better match your specific situation than what the code outputs. I recommend treating the code's TP sets as starting points for considering your own situations, similar to how the WS sets should be treated.
- I recommend locking the weapons and using the set finder to find the best armor for your chosen weapon combination.
A new field for gearset DT requirement has been added.
- The set finder will find the best TP/WS/Magic set that has at least the DT you provide.
- The code should stop at the closest best available set if it can't satisfy the condition. The logic uses a while-loop, so it can technically run forever if I messed up, but I did already test this with unrealistic DT requirements.
- The code does this iteratively by finding the best set without conditions, then repeatedly finding the best set with -1% more DT than the previous iteration until it reaches your requested value.
- This process can take a few minutes dependings on which DT pieces it chooses to equip first and how much DT you want in your set. Setting DT=0 will run the standard glass-cannon sets with normal runtime.
- Adding another condition for Subtle Blow (or MEva) likely requires telling the code to fit three pieces of gear simultaneously (rather than the two it does now). This functionality is in the code already, but enabling it would likely result in many tens of minutes to find a single set, especially with all of the gear available now. For now, just find the best DT set and manually add Subtle Blow pieces.
- Note that all Ambuscade capes use DT-5%,
and that Shell V provides an additional -29% MDT that the code does not consider.
- Magic Evasion is saved and shown in the stats summary page, but not yet considered when building sets. This occasionally results in strange TP gear choices, like DRK using Volte or Agony Jerkin +1 R15.
A new "spell" has been added to the spell lists of RNG, COR, SAM, NIN, RDM, and THF which allows the user to simulate ranged attack white damage sets.
- Use the "Quicklook Magic" and "Run Magic" after selecting "Ranged Attack" from the spell list to calculate damage metrics and find Ranged Attack sets.
- Finding a proper metric that weighs TP gain and white damage is difficult. For now there is a new drop-down menu in the "Outputs tab" that lets the user decide if they prefer "Damage" or "Time to WS". This only applies to Ranged TP sets, not melee TP sets for now.
- "Damage" tries to maximize (damage^2)*(tp_return)
- "Time to WS" tries to maximize (damage)*(tp_return^2)
- As I mentioned before, these metrics aren't great and I haven't put any real thought into them, but they seem to return reasonable gear sets. I'll likely update them later if I think of a better metric with actual logic behind the decision.
Dark Knight now has a checkbox for Last Resort.
- +25% JA Haste and +35% (356./1024) attack
Ranger now has checkboxes for Double Shot and Hover Shot
- Double Shot does not affect weapon skills and will only proc if enabled, unless the Relic+3 body is equipped for the special +5%.
- Half of your Double Shot rate is converted into Triple Shot with the Relic body equipped.
- Hover Shot assumes max stacks for +100% damage, +100 Ranged Accuracy, and +100 Magic Accuracy.
Corsair now has a checkbox for Triple Shot.
- Half of your Triple Shot rate is converted into Quad. Shot with the Relic+3 hands equipped.
As always: Let me know if you run into any weird issues. I'm sure there will be at least a few issues I didn't catch. Also let me know what gear I may be missing still. I do not play many jobs, so I likely missed some TP gear.
Edit: I just pushed another small update that adds -29% MDT if you have the WHM checkbox enabled. I should have thought of this earlier... This should help the code find good DT sets that use Mpaca or Gleti, which have good MDef but 0 MDT.
Bismarck.Radec
Server: Bismarck
Game: FFXI
Posts: 143
By Bismarck.Radec 2023-02-16 14:38:49
Is there any option I'm missing for starting at not-0 TP? most of the time it's [150-250] > 1000+ instead of 0 > 1000+
By Izanami 2023-02-16 15:15:52
Is there any option I'm missing for starting at not-0 TP? most of the time it's [150-250] > 1000+ instead of 0 > 1000+
I don't think that will affect much unless you're aiming to WS as close to 1000 TP as possible and are getting ~450 TP/round. In that specific case, you may see a more efficient set if you start at ~150 TP than if you start at 0 TP.
In any case, I've just added "Starting TP" as an option. The value must be < 1000 TP, otherwise the code will just make it 999 anyway.
Edit: I just added the "Starting TP must be >= 0" condition that I forgot to add a minute ago.
[+]
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2023-02-16 15:32:36
While it may not wholly effect the 'rounds until ws' it can have a bit of an affect on your final TP when WS is used.
In that regard, are you simulating the "rounds to > ws > tp return > rounds to > WS" etc?
Great to see further work and attention being put towards it. Keep up the solid work Izanami.
By Izanami 2023-02-16 15:45:07
Quetzalcoatl.Langly said: »In that regard, are you simulating the "rounds to > ws > tp return > rounds to > WS" etc?
No. This is not a full DPS simulator, but it is getting very close to being one. Maybe I'll make a fourth tab for full DPS simulations later.
The WS part of the code randomly selects a TP value between the Min.TP and Max.TP values for the 10,000 simulations to build a distribution plot, or uses the average value for finding the best set. In reality, we only see a handful of those values based on our Store TP value and weapon delays. You could use the same value for Min.TP and Max.TP to force a specific TP value for your weapon skill simulation.
[+]
By Ranoutofspace 2023-02-16 16:28:46
Trying to get sets for Dark/Light nukes but it throw a "KeyError: Dark(Light)" message. Can Kaustra be added too? :D
By Izanami 2023-02-16 17:45:05
Trying to get sets for Dark/Light nukes but it throw a "KeyError: Dark(Light)" message. Looks like I never added light/dark to the helix subdictionary ages ago. This has been corrected now.
Can Kaustra be added too? :D
I had a strange feeling that somebody would ask for this soon. I don't know how well I understand the Kaustra formula on BG:
floor(floor(0.067*Lv)*(37+floor(0.67*dINT)))
It seems that ML40 SCH may do ~17% more damage than ML20 SCH from ML alone (Lv=139 vs Lv=119), ignoring the extra INT.
Do we count Master Levels as "player levels" since they change how things /check, or does Kaustra only use Lv99 (or Lv119 with i119 gear?)
How does Kaustra behave with negative dINT? The base damage formula suggests Kaustra may do negative damage, which suggests we're safe to assume that dINT>=0 at all times.
If I had answers to the above questions, then adding Kaustra would be pretty easy. For now I've added Kaustra to SCH's spell list with the following two assumptions:
Player level = 99 (master levels and i119 do nothing)
dINT>=0 (dINT can not be negative, dINT<=0 results in 0 damage from the dINT term)
If somebody can test these two things in game and post the results (in the SCH thread), then I can update the code to reflect the changes. Or if somebody just happens to know for certain how it works exactly.
Ebullience + Magic Burst
Replace Malignance Earring with Arbatel Earring +2 (sortie +2 earring) if you're lucky enough to get one.
You'll certainly want to use Hachirin-no-Obi over all other belt options. My code does not include Hachirin-no-Obi so it throws Orpheus on. Helix spells do get weather bonuses for SCH in the code since they don't need Hachirin-no-Obi equipped for the bonus.
Somewhat related: I have the code floor enemy magic defense at -50 after things like Malaise (such that 100+MDef = 50 for the (100+Matk)/(100+Mdef) term). Is this correct? I can't remember where I got that information.
By Nsane 2023-02-17 04:49:19
Tested Kaustra today on Lvl.1 Bunnies. Got the same number every time. First time I was Sync to ML.3, than turned sync off and was than ML.30, exact same DMG, did multiple nukes on each sync/unsync.
PS: Can you please make a new thread in the Forum/FFXI/General for your WSDIST, annoying to keep coming back to the Ninja thread every time to see if there's an update or news. Not to mention you want help but if you post it under the ninja job, lots of people are just skipping over the thread cause there not interested in ninja.
Amazing program so far though, thanks for your contribution to the game.
[+]
By SimonSes 2023-02-17 06:26:23
Somewhat related: I have the code floor enemy magic defense at -50 after things like Malaise (such that 100+MDef = 50 for the (100+Matk)/(100+Mdef) term). Is this correct? I can't remember where I got that information.
Lowest possible value in that calculation (100+Mdef) is indeed 50, but some mobs can have like 400 base mdef, so Malaise will barely tickle them.
I dont think this value will have any effect on gear tho, it would only change damage prediction.
[+]
By Izanami 2023-02-17 09:24:07
Tested Kaustra today on Lvl.1 Bunnies. Got the same number every time. First time I was Sync to ML.3, than turned sync off and was than ML.30, exact same DMG, did multiple nukes on each sync/unsync.
Thanks. I just did a quick test as well that shows Kaustra uses Lv99, without adding ML or iLvl from gear.
ML26 SCH without a subjob vs INT=6 (Huge Hornet)
Code
Damage = int( int( round(0.067*player_lvl,1) * (37+0.67*dINT) ) * (1+magic_attack/100) )
= int( int(6.6 * 114.05) * 1.36)
= 1022
= 1240 with player_lvl = 119
ML26 SCH without a subjob vs INT=6 (Huge Hornet)
With gear:
Level = 99
INT = 121+321
dINT = 300 (capped)
Magic Attack = 461
Code
Damage = int( int( round(0.067*player_lvl,1) * (37+0.67*dINT) ) * (1+magic_attack/100) )
= int( int(6.6 * 238) * 5.61)
= 8807
= 10681 with player_lvl = 119
ML26 SCH without a subjob vs INT=6 (Huge Hornet)
Code
Damage = int( int( int( round(0.067*player_lvl,1) * (37 + 40 + 0.67*dINT) ) * (1+magic_attack/100) ) * 1.2 )
= int( int( int(6.6 * 278) * 5.61) * 1.2 )
= 12345
= 10568 without the +40 magic damage
= 14971 with player_lvl = 119
The interesting thing here is that standard "magic damage" stats do not enhance Kaustra damage, but the +40 from the "Stratagem Effect III" job point category seems to be added to the dINT term, which makes it very potent. This extra +40 magic damage is worth between +17% and +108% damage with dINT=300 to dINT=0.
Edit: I've just updated the code to include the +40 magic damage when using Ebullience on SCH. This affects Kaustra damage most heavily, but it seemed to be missing from the standard Black Magic spells as well.
PS: Can you please make a new thread in the Forum/FFXI/General for your WSDIST
I've been meaning to make a General post about this for a while now. I'll try to finish the node I have and make a post about it soon ish.
[+]
By Zannakun 2023-02-18 13:07:14
Izanami, does the TP calculations include chance to miss? I don't seem to get any difference in gear when fighting higher evasive mobs vs one which has no evasion at all.
Code RDM/NIN [Ody:0]: WHM: Haste 2, BRD: Honor March, Victory March, Minuet V, Hunter's
Best TP set to reach 1000 TP with the provided buffs:
main Naegling (LOCKED)
sub Daybreak (LOCKED)
ranged Empty
ammo Coiste Bodhar R0
head Malignance Chapeau
body Malignance Tabard
hands Malignance Gloves
legs Malignance Tights
feet Malignance Boots
neck Anu Torque
waist Windbuffet Belt +1
ear1 Dedition Earring
ear2 Sherida Earring
ring1 Petrov Ring
ring2 Chirich Ring +1 A
back Sucellos's Cape DEX Dual Wield
By Izanami 2023-02-18 13:45:08
Izanami, does the TP calculations include chance to miss? I don't seem to get any difference in gear when fighting higher evasive mobs vs one which has no evasion at all.
It should include the chance to miss.
The problem you're running into is that the code is "trapped" at 20% hit rate.
Notice that your set (with buffs) only has 1441 accuracy (1368 offhand) vs the enemy's 1628 evasion, so your hit rate is floored at 20%. You're so far below the accuracy requirement that the code can not increase your hit rate to 21% by swapping only two pieces of gear at once. You need 1520 accuracy to reach 21% hit rate against that enemy and the code can't find two pieces to swap that would make up the 79 accuracy that you're missing.
In this specific case, the code prefers adding more Store TP to boost the TP gain when you do hit because adding small amounts of accuracy does nothing. This is also how the code behaves when you have capped hit rate so it's no surprise that you'd get the same set when you have floored hit rate.
If you're simulating RDM, then I recommend manually simulating Distract III as well, which appears to be -130 evasion before Enfeebling Effect+ gear. I should put in a checkbox for this later.
Another option is to manually build a set that has 21~99% hit rate and have the code optimize it for you.
Node 456
Updated: 2022 January 28:
ML20 NIN99/WAR53 & R25 Odyssey.
Slightly updated code for easier reading (see Github link below).
While a simple average is nice and convenient for DPS spreadsheets, it does not tell the whole story for most weapon skills. To know exactly how your weapon skill damage will be distributed, you need detailed information about your stats, the enemy you're fighting, and the mechanics of weapon skill damage. As a side-project to learn a bit of basic Python3 programming and about the FFXI damage formulae, I've written a Python3 code to simulate weapon skills and obtain distributions of the damage being dealt given a set of gear and an enemy.
I'm not very familiar with GitHub, but I've put the code on my newly-created GitHub page ( https://github.com/IzaKastra/wsdist_v2).
The code is not meant to replace DPS spreadsheets, but the gear sets provided here should agree with the spreadsheets reasonably well. I believe the sets presented here are the best in slot sets currently available, but you may find marginally better sets for specific enemies. I therefore encourage you to play around with these sets using the spreadsheets to try to find potentially better or worse options that fit within your gear budget.
In addition to finding the best katana weapon skill sets, the code has the added benefit of working with all jobs and all physical and hybrid weapon skills (after minor modifications to adjust for different player race/job stats). This allowed me to also check the best Evisceration, Savage Blade, and Tachi: Jinpu/Koki/Kagero/Goten/Kasha sets for Ninja. I have a version of the code that works for SAM and nearly works for DRK. I "simply" need to work out the DRK Smite trait before it's finished. This is technically the second of three parts of a Python3-based DPS simulator. It currently has everything it needs to be a full DPS simulator, including real-world time between attacks, TP return, and auto-attack/WS damage, but it seems appropriate to stop where I am for now.
I've tested the code's output against SimonSes' NIN Hybrid WS spreadsheet for Blade: Chi and find the difference to be within 0.5%-2% depending on the TP range and buffs used. For physical weapon skills, I tested the results against the Ninja DPS spreadsheet and found that Blade: Shun, Kamu, Hi, and Ku all agree within 5% or better, while Blade: Metsu shows 10% differences due to incorrect Aftermath: Attack+10% handling in the spreadsheet (see the spoiler below). This of course does not mean that I've done everything perfectly.
The spreadsheet is applying Kikoku's aftermath only to the Ninja's base attack (Lv99+STR+Skill), not including BRD songs, attack traits from /WAR, or the +70 attack from job gifts. My in-game testing has shown that Kikoku's AM is applied additively with the other percentage-based boosts like Fury, Chaos, and Berserk; Attack = (Base+BRD)*(1+Berserk+Chaos+Fury+Kikoku_AM)+Food. The image below shows my observed and calculated Attack values with different buffs up.
I've modified the code to automatically adjust a given gearset until it finds the "best" piece in each slot for a specified weapon skill. I then ran the code for 3 different buff states and 3 different TP ranges that I consider to be typical low/mid/high buffs for content in-game:
Low Buffs: Only Grape Daifuku and Dia2, not even trust buffs (but we know you'd end up with March, Paeon, and Evoker's Roll anyway)
Standard Buffs: Grape Daifuku, Dia2, Minuet5, Minuet4, Honor March, Victory March, Lucky Chaos Roll (Songs+7, Rolls+7, HonorMarch+4)
High Buffs: Grape Daifuku, Dia2, Minuet5, Minuet4, Honor March, Victory March, Lucky Chaos Roll, Fury, Frailty (Songs+7, Rolls+7, Geomancy+6, HonorMarch+4)
High Buffs (Hybrid): Grape Daifuku, Dia2, Minuet5, Minuet4, Honor March, Victory March, Lucky Chaos Roll, Fury, Malaise (Songs+7, Rolls+7, Geomancy+6, HonorMarch+4) -- Only used for Blade:Chi
tp = [1000,1300]
tp = [1500,1800]
tp = [2000,2300]
I use max skill-potency geomancy bubbles and songs with 5/5 Minuet merits and 20/20 Minuet job gifts. I did not use any buff-enhancing abilities such as Crooked Cards, Marcato, Blaze of Glory, etc.
My earlier testing suggested that Hitaki is by far the best off-hand weapon for "damage varies with TP" weapon skills. However, it also only showed ~30-70% off-hand hit rate on the Apex Toad target that I'm simulating against (Evasion:1103~1163, Lv131-133), which would likely translate to significantly reduced TP gain and thus significantly reduced WS frequency. Because of this, I removed Hitaki and reran my simulations without it being an option. If you are able to make up for the significantly reduced accuracy and auto attack damage, then Hitaki should probably be your go-to for "damage varies with TP" weapon skills.
I did not test any Herculean gear since I believed it would be a waste of time given the accessibility of Nyame R10+ and the random nature of obtaining "good" augments behind multiple layers of RNG. I encourage you to input the sets I present here into the spreadsheets and see how your Herculean gear compares, though.
It should be noted that these sets are based raw weapon skill damage values. Stats such as Skillchain Bonus (see Nyame) have no effect as a result until I finish the code to be a proper DPS simulator with auto-attacks, TP rounds, auto-WS, and SCs. Swapping some pieces listed in these sets with Nyame will lower weapon skill damage, but the skillchain bonus stat will likely result in larger overall damage.
The details of the code's algorithm are explained in a bit of detail below, but the process is likely very well known to most of you. For now, here is the list of "best average" gear sets for each buff state for a few of Ninja's available weapon skills at specific TP ranges. Each one contains an imgur link to the simulated distributions, which display the gear used and basic player stats for all tests run on that specific weapon skill. A representative image is also presented in each section. The list of all sets can also be found on my FFXIAH item sets page. The comments within each gear set may provide swaps for varying TP ranges.
Note that these gearsets are for a Master Level 20 Lv.NIN99/WAR53, R25 Odyssey gear, and R15 UNM gear.
Blade: Chi
ItemSet 380757
To nobody's surprise, with the release of augmented Nyame gear, the "best average damage" gearset for Blade: Chi is incredibly easy to predict. Blade: Teki and Blade: To likely use an identical weapon skill set, but I did not test them. I would not be surprised if To/Teki used Fotia Belt, though. Since both of them are single-hit weapon skills.
Note that these tests were done on a neutral monster with 100 Magic Defense and no Magic Evasion. I believe many relevant enemies have something like 150 Magic Defense or an SDT value that would guarantee at least a 50% magic damage resist.
Blade: Hi
ItemSet 380758
ItemSet 380759
ItemSet 380760
Kannagi (R15) was locked into the main hand.
Andartia Mantle AGI+Crit Rate for low buffs
Andartia Mantle AGI+WSD for standard/high buffs
Critical hit weapon skill damage varies wildly based on the AGI stat of your target. This is because up to 15% of your Crit Rate comes from dDEX. Unfortunately, Blade: Hi has an 80% AGI modifier, which is essentially useless for meleeing. I'm still convinced the developers accidentally swapped the modifiers for Jishnu's Radiance (80% DEX) and Blade: Hi (80% AGI) and refuse to admit it.
Since Apex Toads do not have a published AGI value to calculate dDEX from, I ended up performing about 2 hours worth of auto-attacks in various sets to estimate it myself (AGI ~ 354-358). Either way, I don't necessarily recommend the Blade: Hi sets presented here. I don't think Blade: Hi is a good weapon skill in general compared to the other Katana options. The conditions required for critical hit weapon skills to perform well are too variable to simply stick with a single set based on a spreadsheet or code. You should do your own research based on exactly what you plan to use the weapon skill on and build your set around that.
Blade: Kamu
Blade: Ku
ItemSet 380763
ItemSet 380764
ItemSet 380765
Blade: Ku is surprisingly powerful when compared to Blade: Shun. The +60% damage on Gokotai, 1.25 FTP, and 30% STR+DEX modifier put in a lot of work to boost the damage. Unfortunately the skillchain properties are not great compared to Blade: Shun with Heishi.
Blade: Metsu
ItemSet 380766
ItemSet 380768
These sets are a good example of not using a lot of Nyame where Nyame would likely win. Blade: Metsu has excellent skillchain properties so I expect at least 4/5 Nyame with Relic legs to win in most cases considering they provide +24% skillchain damage.
With the release of R25 Nyame, most of these sets actually use Nyame for maximum physical damage. The skillchain damage stat on Nyame is just a bonus on top now.
Blade: Shun
Blade: Ten
Savage Blade
ItemSet 380771
ItemSet 380772
ItemSet 380773
For Naegling's "Weaponskill: Attack bonus based on number of upgrades" stat, I assumed the player had at least eight buffs up (protect, shell, haste, utsusemi, kakka, yonin, food, signet) for all sets. Standard buffs added 4 songs and 2 rolls for 14 total buffs, and high buffs added a single GEO bubble for 15 total buffs. The player's base attack then received +1% per buff present. This bonus attack was added to the player's base attack before any other buffs were added.
Evisceration
ItemSet 380942
ItemSet 380770
ItemSet 380943
Tauret was locked into the main hand.
Ryuo Tekko Path A or D
Andartia Mantle DEX+Crit Rate
Kendatsuba Samue +1 or Mpaca Doublet R25 are generally the go-to body slots for Evisceration.
Similar to Blade: Hi, critical hit weapon skill damage will vary wildly depending on the AGI of your target. Your dDEX provides as much as 15% critical hit rate that you're potentially missing on high AGI targets unless you stack more DEX. Luckily, Evisceration has a 50% DEX modifier, so this is not likely to be a problem. I still recommend finding your own set that works well on the content you plan to use Evisceration on (Odyssey Lamia/Aquans or that one Master Trial) instead of just sticking with this set or one from the spreadsheet.
Tachi: Goten
ItemSet 383500
Tachi: Goten is the Lightning-elemental hybrid weapon skill. The Donar Gun would likely be fantastic for this weapon skill, but it would require that you never unequip the gun since you would lose TP to swap to Shuriken for TPing.
Be sure to weaponskill above 2000 TP.
You may want to use Samurai subjob for Hasso/Zanshin in order to increase your TP gain rate when relying on the Great Katana weapon skills.
Tachi: Jinpu
ItemSet 383497
Nyame Path B
Andartia Mantle STR+WSD
Ninja Nodowa +2 when attack capped and TP>2000.
Fotia Belt > Orpheus's Sash when below 1500 TP. You should always weapon skill above 2000 effective TP, though.
Tachi: Jinpu is a powerful tool for a Ninja to have available against Earth-based enemies weak to magic and slashing damage. This is essentially the Great Katana version of Blade: Chi, so you'll want to WS above 2000 effective TP.
You may want to use Samurai subjob for Hasso/Zanshin in order to increase your TP gain rate when relying on the Great Katana weapon skills.
The best part of Tachi: Jinpu is that it creates and endless skillchain loop with itself. When fully buffed, you are able to simply spam Tachi: Jinpu and create powerful skillchains with every use. It's unfortunate that the developers did not allow Blade: Chi to self-skillchain endlessly as well.
Tachi: Kagero
ItemSet 383499
Tachi: Kagero is the Fire-elemental hybrid weapon skill. Tachi: Kagero is especially potent on a few enemies in Odyssey C, such as Puks and Bomb Clusters. Be sure to weaponskill above 2000 TP.
You may want to use Samurai subjob for Hasso/Zanshin in order to increase your TP gain rate when relying on the Great Katana weapon skills.
Tachi: Kasha
ItemSet 383491
ItemSet 383492
Nyame Path B
Andartia Mantle STR+WSD
I don't expect anyone to use Tachi: Kasha on Ninja, but it is a pretty weapon skill.
You may want to use Samurai subjob for Hasso/Zanshin in order to increase your TP gain rate when relying on the Great Katana weapon skills.
Tachi: Kasha is the Great Katana version of Blade: Retsu, since it can Paralyze the enemy. I'm not sure if it is as potent as Blade: Retsu, though.
Tachi: Koki
ItemSet 383498
Nyame Path B
Andartia Mantle STR+WSD
Tachi: Koki is a single-hit weaponskill. Ninja Nodowa +2 will likely not beat Fotia Gorget unless you hold until 3000 TP for some reason.
Epaminondas's Ring can replace Gere Ring when near attack cap, but you lose those rare triple attack procs.
Tachi: Koki is the light-elemental hybrid weapon skill, which means it benefits greatly from Weatherspoon Ring (SoA final reward option). Despite the boost in power from Weatherspoon Ring, I don't see Koki getting much use.
You may want to use Samurai subjob for Hasso/Zanshin in order to increase your TP gain rate when relying on the Great Katana weapon skills.
As a side note: Blade: Ei is a Darkness-based magical Katana weapon skill. There is no Darkness-based hybrid weapon skill. This is unfortunate because it would likely be very powerful with Archon Ring and Pixie Hairpin +1
Based on the sets listed above, we can make a short list of gear priority for a newer Ninja to reference.
Odin: Gere Ring
UNM: Lugra Earring +1 (Aug) > Sailfi Belt +1 (Aug) >= Seething Bomblet +1 (Aug) > Blistering Sallet +1 (Aug)
Lilith: Malignance Gloves > Malignance Tabard > Malignance Boots > Malignance Tights >= Malignance Chapeau
Bumba: Nyame Mail > Nyame Sollerets > Nyame Gauntlets > Nyame Flanchard >= Nyame Helm
Arebeti: Mpaca Cap > Mpaca Hose > Mpaca Doublet > Mpaca Gloves >= > Mpaca Boots
Ngai: Gleti's Knife
Xevioso: Kunimitsu
Relic: Legs > Head > Hands >= Feet > Body(TP low haste)
AF: Head
Adhemar: Head(A) > Body(B) > Hands(B) > Feet(A)
However, just because an item didn't show up here doesn't mean it doesn't hold a best-in-slot position in some situation. The 2021 Ninja Gearsets thread provides excellent gear to use for many weapon skills without considering Odyssey gear. Many of these sets are well within uncertainty of my "best average" sets presented here.
Here I give a "brief," but relatively detailed, description of how the damage was calculated within the code. Let me know if there are any mistakes or inaccuracies that need to be corrected. I'm confident in the algorithm, but I may have done a poor job explaining in some places.
The simulations were based on Apex Toads with three sets of possible stats, excluding their innate -25% MDT. This can be thought of as having three unfortunate Apex Toads in a room and each weapon skill hit one of them randomly. Taken directly from my code, the stats used were:
Code
e_mdef = 0-malaise*(15+3*nbubble) if 0-malaise*(15+3*nbubble) > -50 else -50
apex_toad = {'Level': [131, 132, 133],
'Defense': [1206*(1-dia[dia_potency]-frailty*(0.148+0.027*nbubble)), 1239*(1-dia[dia_potency]-frailty*(0.148+0.027*nbubble)), 1272*(1-dia[dia_potency]-frailty*(0.148+0.027*nbubble))],
'Evasion': [1103, 1133, 1163],
'VIT': [264, 270, 276],
'AGI': [354, 356, 358], # AGI roughly measured using Scoreboard on two different toads.
'MND': [218, 224, 228],
'INT': [285, 293, 299],
'CHR': [270, 277, 284],
'Magic Defense': [e_mdef, e_mdef, e_mdef]} # Enemy Magic Defense has a floor of 50
For Physical weapon skills, I used the standard BG-wiki formula to calculate damage: Due to the random nature of PDIF, a new value is calculated for each hit individually.
Additional hits after the first main-hand hit, whether they be from multi-hit weapon skills or multi-attacks, were performed in the order suggested by the testing of Austar. In the case of multi-attack procs on weapon skills, testing by Saevel and Austar show that there can be no more than two multi-attack checks of any kind per weapon skill and that the off-hand weapon will always get one of these two checks if you have an off-hand weapon equipped, otherwise the main-hand will get both checks only if the weapon skill has at least two natural hits.
In addition to the testing of Saevel and Austar, I tested this by using 404 Blade: Retsu while dual-wielding (2+1 hits) with 29% DA and 31% TA on Apex Toads. The observed TP return distribution from 404 Blade: Retsu closely matches the expected distribution assuming that only the first two hits (the first main hit and the one sub hit in this case) can multi-attack. Any assumptions that all weapon skill hits can multi-attack (6 chances for Blade: Shun for example) quickly cause the expected distribution to diverge from the observed.
For Hybrid weapon skills, I used the equation provided by Bahadir's Blade: Chi testing, Jakey's YouTube video, and SimonSes' NIN Hybrid Damage calculator, which splits the weapon skill damage into two parts
Hybrid = Physical + Magical
The physical damage is calculated using the exact same method as mentioned previously for purely physical weapon skills, with the important change that FTP is 1.0 and non-replicating for the physical portion of Hybrid weapon skills (see Bahadir's testing). The magical damage is calculated using the physical damage and the player's "Magic Damage" stat as a base:
In addition to the basic formula for damage, it is important to explicitly mention the following special cases that are included in the damage calculations:
Unlike the first main-hand hit, the first off-hand hit does not gain the bonus from the standard weapon skill damage stat.
Certain "weapon skill damage" stats on weapons apply to all hits. Examples of this include Naegling Savage Blade Damage +15%, augmented REMA weapons, and the hidden weapon skill damage bonus on Mythics and Relics.
Weapon skills gain a hidden ~+100 accuracy to their first hit. My testing of 1745 unbuffed (Brygid+KuyinHathdenna+YoranUC) Blade: Chi on Apex toads heavily suggests that this bonus applies to the first off-hand hit as well.
Buffs to player Attack are applied in a specific order:
Attack = (8+Gear+Traits+Gifts+Skill+STR+STR(food)+STR(buffs)+BRD)*(1+COR+GEO+Kikoku10%+Berserk)+Attack(food)
The player's secondary/auxiliary/off-hand attack is calculated using only half of their STR stat (see BG-wiki: "Attack")
STR from food is immediately used to calculate base attack, but "Attack+" from food is not applied until all other buffs have taken effect.
Before running the code, I manually selected equipment for each equipment slot that I wanted to test. This allowed me to exclude testing items like Mummu Kecks for Blade: Chi, which would obviously be a waste of time. To allow the output of my code be easily compared to the spreadsheets, the code uses a distribution's average damage to determine which piece of gear is "better" than another. It should be noted that the average is not a good summary statistic for multi-peaked distributions, though. The algorithm itself is simple:
(Edit 2021-08-23: I've adjusted the code's algorithm to use averages for intermediate steps, and 50,000 simulations as the last step. The process for finding best sets is now identical to manually selecting gear in a spreadsheet and checking the DPS value. The advantage is that this code is automated and provides expected damage distributions at the end for further analysis.)
1) For each item slot (or for each pair of two item slots simultaneously), cycle through all selected equipment and calculate the average weapon skill damage from that test gear set.
2) If the average damage is higher than the previous highest, then keep that item equipped, otherwise ignore it and try another combination of gear.
3) After all slots (or all combination of two slots simultaneously) have been tested and the best item in each slot determined, restart from the beginning with the previous best set as the starting place, checking each slot (or combination of two slots simultaneously) again, up to 20 times until. This allows for some gear to change based on changes to already tested slots.
4) Stop early if gear changes result in an average damage increase less than 0.5%, or if no changes are made within two consecutive iterations. This is the convergence criterion and it usually triggered before iteration 7.
With the above algorithm, the code's runtime is ~3 seconds to find a best set while swapping only one slot at a time, or ~180 seconds if changing two slots simultaneously. An additional 10 seconds is required to build a distribution of 50,000 simulations for the fancy output plots.
The list of gear tested in each slot is presented here. All weapon skills used the same pool of gear. All UNM gear is R15. All Odyssey gear is R25. Code
mains = [Heishi, Kannagi, Kikoku, Nagi, Gokotai]
subs = [Ternion, Kunimitsu, Gleti_Knife, Tauret, Gokotai, Crepuscular_Knife]
grips = [Alber_Strap]
ammos = [Yetshila, Seething_Bomblet, Cath_Palug_Stone, Aurgelmir_Orb, Pemphredo_Tathlum, Ghastly_Tathlum, Crepuscular_Pebble]
heads = [Adhemar_Bonnet_A, Adhemar_Bonnet_B, Hachiya_Hatsuburi, Mochizuki_Hatsuburi, Malignance_Chapeau, Kendatsuba_Jinpachi, Mummu_Bonnet, Nyame_Helm, Mpaca_Cap, Blistering_Sallet]
necks = [Ninja_Nodowa, Fotia_Gorget, Caro_Necklace, Baetyl_Pendant]
ears = [Ishvara_Earring, Lugra_Earring_Aug, Moonshade_Earring, Brutal_Earring, Friomisi_Earring, Crematio_Earring, Balder_Earring, Mache_Earring1, Mache_Earring2, Odr_Earring, Crepuscular_Earring]
ears2 = [Ishvara_Earring, Lugra_Earring_Aug, Moonshade_Earring, Brutal_Earring, Friomisi_Earring, Crematio_Earring, Balder_Earring, Mache_Earring1, Mache_Earring2, Odr_Earring, Crepuscular_Earring]
bodies = [Kendatsuba_Samue, Adhemar_Jacket_A, Adhemar_Jacket_B, Malignance_Tabard, Nyame_Mail, Samnuha_Coat, Gyve_Doublet, Abnoba_Kaftan, Mpaca_Doublet, Tatenashi_Haramaki, Ryuo_Domaru_A, Agony_Jerkin]
hands = [Adhemar_Wristbands_A, Adhemar_Wristbands_B, Mochizuki_Tekko, Mummu_Wrists, Malignance_Gloves, Kendatsuba_Tekko, Nyame_Gauntlets, Mpaca_Gloves, Tatenashi_Gote, Ryuo_Tekko_A, Ryuo_Tekko_D]
rings = [Gere_Ring, Hetairoi_Ring, Shukuyu_Ring, Apate_Ring, Ilabrat_Ring, Regal_Ring, Epona_Ring, Petrov_Ring, Rufescent_Ring, Begrudging_Ring, Epaminondas_Ring, Mummu_Ring, Beithir_Ring, Dingir_Ring, Metamorph_Ring, Shiva_Ring1, Shiva_Ring2, Weatherspoon_Ring]
rings2 = [Gere_Ring, Hetairoi_Ring, Shukuyu_Ring, Apate_Ring, Ilabrat_Ring, Regal_Ring, Epona_Ring, Petrov_Ring, Rufescent_Ring, Begrudging_Ring, Epaminondas_Ring, Mummu_Ring, Beithir_Ring, Dingir_Ring, Metamorph_Ring, Shiva_Ring1, Shiva_Ring2, Weatherspoon_Ring]
capes = [Andartia_DAdex, Andartia_DAstr, Andartia_DAagi, Andartia_Critagi, Andartia_Critdex, Andartia_WSDstr, Andartia_WSDdex, Andartia_WSDagi, Andartia_Nuke]
belts = [Windbuffet_Belt, Fotia_Belt, Grunfeld_Rope, Kentarch_Belt, Sailfi_Belt, Orpheus_Sash]
legs = [Kendatsuba_Hakama, Adhemar_Kecks_A, Adhemar_Kecks_B, Mochizuki_Hakama, Samnuha_Tights, Jokushu_Haidate, Malignance_Tights, Mummu_Kecks, Gyve_Trousers, Hizamaru_Hizayoroi, Nyame_Flanchard, Mpaca_Hose, Tatenashi_Haidate, Ryuo_Hakama_A, Rao_Haidate_B]
feet = [Mochizuki_Kyahan, Adhemar_Gamashes_A, Adhemar_Gamashes_B, Malignance_Boots, Mummu_Gamashes, Kendatsuba_Sune_Ate, Nyame_Sollerets, Mpaca_Boots, Tatenashi_SuneAte, Ryuo_SuneAte_D, Rao_SuneAte_D]
Finally, since this post is already pretty long, I may as well link my official forum post from last year. This post details my requested Ninja job adjustments. Feel free to give it a like/comment.
https://forum.square-enix.com/ffxi/threads/57263-2020-2021-Ninja-Job-Adjustment-and-Feedback?s=66c8aaed6a12e3a576c9ee8f403e1174
|
|