|
Using Python3 to estimate BIS gear sets for Ninja.
By Izanami 2022-11-27 23:04:39
Link to gui_wsdist GitHub repository: https://github.com/IzaKastra/wsdist
I've updated the GUI to include nuking sets (ignoring Magic Evasion for now). Basic TP sets are next.
You should be able to simply download the gui_wsdist.exe and item_list.txt files and the icons32/ and icons64/ directories to run the code successfully.
Inputs Tab:
Added a drop-down menu for selecting Ninjutsu and Black Magic spells to test. This list currently includes elemental Black Magic I-VI, -ja, and Ninjutsu nukes. The black magic spells use the BG Wiki table for [M,V] in various dINT ranges (see get_dint_m_v.py) while the ninjutsu nukes use the [M,V] values for various dINT ranges determined from my previous testing. The BG Wiki page for ninjutsu has still not been updated to reflect my ninjutsu testing results, though.
Under the drop-down menu for spells, I've added checkboxes for bursting and futae. Futae only works for Ninjutsu nukes.
Added a "Quick-look Magic" button to test magic damage with the displayed set. While Magic Accuracy and Magic Accuracy Skill have always been tracked, I do not use them in the code yet.
I've added a "Magic Evasion" stat to the Enemy Input section, but it does not do anything right now. I need to first figure out exactly how magic accuracy affects resist rates.
Select Gear Tab:
Added a button to select all gear in ALL slots that your main job can equip. Keep in mind that nuking items are included now, so finding weapon skill sets will take a long time if you do not de-select the items that wouldn't affect weapon skill damage. I think I've located the main bottleneck for runtime. If I successfully fix it, then the total runtime could be reduced by as much as ~40%. I've already fixed the issue and updated the files on GitHub. The code is about 40~50% faster now. I'll post about it later.
Outputs Tab:
Added the button "Run Magic" for finding the set that provide the highest magic damage. Since magic damage is always perfectly consistent, the "Run Magic" button will never produce a plot; it will stop running after finding and printing the best set.
I've removed the white box from the outputs tab since the GUI brings up a terminal anyway. I'd like to fill this empty space with the gearset stats later (attacks, accuracies, hit rates, STR, triple attack, etc)
I'll add BLM and SCH to the list of main jobs when I can next log on (January?) to confirm the stats for mastered BLM and SCH. These stats will need to be added to the set_stats.py file.
Ramuh.Austar
Server: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2022-11-27 23:08:42
I've added a "Magic Evasion" stat to the Enemy Input section, but it does not do anything right now. I need to first figure out exactly how magic accuracy affects resist rates. do you have a discord? can help you set it up for this
By Izanami 2022-12-04 18:38:26
I've made some decently large changes to the GUI. Let me know if you run into any new issues.
I've reduced the code's runtime significantly (~50% reduction based on cProfile) when determining weapon skill sets by using the equation-form of attacks per weapon (mainhand/offhand) per weapon skill, accounting for attack order, the 8-hit limit, and MA probabilities (see get_ma_rate3() in get_ma_rate.py). I was previously running 50000 simulations (for every set tested) and taking an average to determine this.
Because runtime has improved significantly, I've added just about every item in the gear.py file to the lists by default. You can remove these items in the gear.py file, unless you're using the executable version of the code. Alternatively, you can use the checkboxes in the "Select Gear" tab to deselect items you don't wish to test. The code will only test/select items that your selected main job can use anyway. I tried to add the correct jobs (except SMN) to all gear, but I may have missed a few.
Magic Accuracy and Magic Evasion now affect spell damage. Magic hit rate is calculated as explained on BG Wiki. I'm using the contribution from dINT from Lute's 2016 blog (Japanese), which appears to give -30 to +30 magic accuracy depending on dINT. I may be misinterpreting these blog results, but I'll look into it more later. I do not include resistance ranks for now. If you keep Magic Evasion at <=0, then the code treats hit rate as 100%, otherwise the code will calculate hit rate based on the Magic Evasion you provided and then cap hit rate at 95%.
Thanks to help from Sylph.Brahmsz, we now know exactly how Smite (and Last Resort) is included in attack calculations. I've added Smite when simulating jobs (and subjobs) with a Smite trait and using a 2-handed weapon. We can now calculate all DRK sets with all buff states using the code. Naturally, low-buff Scythe likes Ratri+1 while Great Sword likes NyameR25B with Empy+3 hands.
I've added gear stats to the outputs tab to fill in some of the empty space. Clicking the "Calculate Stats" button in the "Inputs" tab will now show some basic stats for the selected gear and buffs.
Since there is a lot of gear to scroll through, the gear lists now only show items that your main job can equip. This was a surprisingly annoying change to make. I believe I've already fixed all of the edge cases that caused crashes relating to my poor coding practices, but let me know if you run into issues.
I've added placeholders for DRG, SAM, RDM, BLM, SCH, /SAM, /NIN, /SCH, /RDM, /DRG, and /DRK using the skill levels, traits, and job points listed on BG Wiki. I do not know their STR, DEX, VIT, AGI, INT, MND, or CHR, so I've simply copy/pasted the ML20 NIN values until I can confirm their base stats when I resubscribe in January, unless somebody can provide them to me. Specifically, I'm looking for base stats without subjobs (with your ML level so I can adjust to ML20 for the code) and the bonus stats for Lv53 subjobs separately. Sets determined for these jobs right now should be roughly correct since the stats should only be off by a little.
I spent a little extra time adding RDM and DRG gear. NIN, DRK, RDM, DRG, and BLM(magic) are ready to go, but only NIN and DRK use the correct base stats right now. I'll work on adding WHM, SAM, and WAR gear next. I pretty much only play NIN, WHM, and DRK, so let me know if there is some gear that I've forgotten.
The available weapon skills and spells are: Code
ws_list = sorted(
["Blade: Chi", "Blade: Hi", "Blade: Kamu", "Blade: Metsu", "Blade: Shun", "Blade: Ten", "Blade: Ku",
"Tachi: Rana", "Tachi: Fudo", "Tachi: Kaiten", "Tachi: Shoha", "Tachi: Kasha", "Tachi: Gekko", "Tachi: Jinpu",
"Evisceration", "Exenterator",
"Savage Blade", "Death Blossom", "Chant du Cygne", "Knights of Round",
"Insurgency", "Cross Reaper", "Entropy", "Quietus", "Catastrophe",
"Torcleaver", "Scourge", "Resolution",
"Stardiver", "Impulse Drive", "Penta Thrust", "Geirskogul", "Drakesbane", "Camlann's Torment",
"Black Halo", "Judgment","Hexa Strike","Realmrazer"])
spell_list = ["Stone","Stone II","Stone III","Stone IV","Stone V","Stone VI","Stoneja","Doton: Ichi","Doton: Ni","Doton: San",
"Water","Water II","Water III","Water IV","Water V","Water VI","Waterja","Suiton: Ichi","Suiton: Ni","Suiton: San",
"Aero","Aero II","Aero III","Aero IV","Aero V","Aero VI","Aeroja","Huton: Ichi","Huton: Ni","Huton: San",
"Fire","Fire II","Fire III","Fire IV","Fire V","Fire VI","Firaja","Katon: Ichi","Katon: Ni","Katon: San",
"Blizzard","Blizzard II","Blizzard III","Blizzard IV","Blizzard V","Blizzard VI","Blizzaja","Hyoton: Ichi","Hyoton: Ni","Hyoton: San",
"Thunder","Thunder II","Thunder III","Thunder IV","Thunder V","Thunder VI","Thundaja","Raiton: Ichi","Raiton: Ni","Raiton: San",
Ambu: DEX+Crit
Ambu: STR+WSD
Edit: At some point I may need to move this project out of the Ninja-specific forum.
Asura.Cluste
Server: Asura
Game: FFXI
Posts: 15
By Asura.Cluste 2022-12-06 10:16:09
Great job, love playing around with this. Can't wait to test the other jobs.
By Izanami 2022-12-10 19:30:18
I've added some extra stuff to the code:
The code currently supports (ML20) NIN, DRK, BLM, SCH, DRG*, SAM*, WAR*, WHM*, RDM*, COR*, BRD*, /53RDM, /53SAM, /53DRK, /53WAR, /53DRG*, and /53NIN*. Jobs with stars next to them still need base stats corrected and are using base stats from one of the known jobs. Each of these jobs should have most of their gear added. Keep in mind that I really only play NIN >> WHM > DRK, so there's a nonzero chance I didn't include some pieces for some jobs.
A few specifics about new jobs:
Warrior main and subjob includes Fencer traits which can be boosted by Fencer+ gear.
Scholar includes Helix II spells and an Ebullience check box. I assume as SCH you always have the correct weather up, but Hachirin no Obi is not selectable as an item for now.
Corsair can not cast spells, but I've included Quick Draw in the spell list for Corsair. Use the "Run Magic" and "Quicklook Magic" buttons to test Quick Draw. Additionally, my QD magic accuracy is probably incorrect. I recommend keeping enemy magic evasion at 0 if testing quick draw.
??? QD_Macc = Gear_Magic_Accuracy + Magic_Accuracy_Skill(main-hand weapon only) + AGI/2 + 60(Death Penalty) ???
Other specific changes I can think of:
I've added both Ranged and Magical weapon skills. I've also updated the main post to show NIN Blade: Ei and Aeolian Edge sets based on what I found using my code.
The spell list now only shows spells that your main job can use. For example: DRK only shows spells up to tier3 and COR only shows Quick Draw.
The list of weapon skills is now very large (see spoiler below). Thus I've added a filter to the weapon skill list so that it only shows weapon skills that are usable by your selected weapons (main and ranged). There is no job restriction yet.
For example: The code starts as NIN with a katana mainhand, so the default list is katana weapon skills only. If you wanted to test Empyreal Arrow, then you need to equip a bow. If you wanted to test Randgrith, then you'll need to equip a club (and optionally change you main job to WHM to get meaningful results).
Code
ws_dict = {"Katana": ["Blade: Chi", "Blade: Hi", "Blade: Kamu", "Blade: Metsu", "Blade: Shun", "Blade: Ten", "Blade: Ku", "Blade: Ei", "Blade: Yu",],
"Great Katana": ["Tachi: Rana", "Tachi: Fudo", "Tachi: Kaiten", "Tachi: Shoha", "Tachi: Kasha", "Tachi: Gekko", "Tachi: Jinpu",],
"Dagger": ["Evisceration", "Exenterator", "Mercy Stroke", "Aeolian Edge", "Rudra's Storm", "Shark Bite", "Dancing Edge", "Mordant Rime",],
"Sword": ["Savage Blade", "Expiacion", "Death Blossom", "Chant du Cygne", "Knights of Round", "Sanguine Blade", "Seraph Blade","Red Lotus Blade"],
"Scythe": ["Insurgency", "Cross Reaper", "Entropy", "Quietus", "Catastrophe","Infernal Scythe","Shadow of Death","Dark Harvest"],
"Great Sword":["Torcleaver","Scourge","Resolution","Freezebite", "Herculean Slash",],
"Club":["Hexa Strike","Realmrazer","Seraph Strike","Randgrith","Black Halo","Judgment","Seraph Strike"],
"Polearm":["Stardiver", "Impulse Drive", "Penta Thrust", "Geirskogul", "Drakesbane", "Camlann's Torment","Raiden Thrust","Thunder Thrust"],
"Staff":["Cataclysm","Shattersoul","Earth Crusher","Vidohunir"],
"Great Axe":["Ukko's Fury", "Upheaval", "Metatron Torment", "King's Justice",],
"Axe":["Cloudsplitter","Ruinator","Decimation","Rampage","Primal Rend",],
"Archery":["Empyreal Arrow", "Flaming Arrow", "Namas Arrow",],
"Marksmanship":["Last Stand","Hot Shot","Leaden Salute","Wildfire"]}
Fixed issues:
Fixed an issue where Skill+ from gear (non main+sub slots) was counted twice for accuracy and attack. For the most part this only affected Hattori Earring (katana skill), Heathen's Burgeonet (Scythe Skill), and Heathen's Gauntlets (GreatSword Skill).
Finally:
The code is back to being a mess. I'd like to focus on cleaning it up so it's easier to read/modify. I'll do this slowly while I add other jobs.
Ishvara Earring is 2 (two) damage less than Fili Earring +2.
Asura.Cluste
Server: Asura
Game: FFXI
Posts: 15
By Asura.Cluste 2022-12-11 03:31:06
Great stuff!
As for the Bonus BRD/NIN SB Set, why hold the TP to 1500-1800? Is it really worth DPS wise to save to close ~3k on Jobs that can use 1k TP Bonus Weapons + 250 Moon like Cor/Rdm/Brd?
By Izanami 2022-12-11 09:37:44
Great stuff!
As for the Bonus BRD/NIN SB Set, why hold the TP to 1500-1800? Is it really worth DPS wise to save to close ~3k on Jobs that can use 1k TP Bonus Weapons + 250 Moon like Cor/Rdm/Brd?
I don't think so. If you're doing OdysseyC, then you'll want to 1-shot things or they might 1-shot you (or dispel everyone). Maybe in that situation you might want to hold TP a bit longer on BRD, which doesn't get as much attack. That was at least my reasoning for picking 1500-1800 on that set.
As a side note:
I've just added Fenrir+Carbuncle+Ifrit+Leviathan+Titan+Garuda rings and the Hauksbok Bullet. I've also included the missing Magic Attack +61 on COR relic body.
I'll have to skim the other new equipment I added to see what other stats that might've been skipped. I'm most likely to miss magic attack based on how my gear-conversion code converts BG Wiki format to my code's gear format. If you're testing sets for a job you play often and notice a weird item in a "best" set, then it might be a good idea to check the gear.py file for a typo.
[+]
By Izanami 2022-12-12 12:05:57
I've added R30 Odyssey gear to the code. The front page of this post has been updated to reflect changes in the Ninja sets from R30 Odyssey gear against the Lv135 Apex Bat enemy (1338 Def, 1224 Eva, 289 VIT). This was mostly Coiste Bodhar R30 replacing Seething Bomblet +1 R15 and Empyrean +3 legs losing to Mpaca/Nyame by a small amount.
R25 Odyssey gear is still in the gear.py file in preparation for a drop-down menu that will allow the user to select which Odyssey rank to consider. I plan to only include ranks 15,20,25,30. I'll make another post about this when it's completed, probably including DNC as a new job too.
In addition to R30 Odyssey gear, the code has been updated and re-uploaded with the following new features:
Thief, including Sneak Attack and Trick Attack, has been added to the code. SA/TA are checkboxes similar to Futae, Magic Burst, and Ebullience. In order to make room for these check boxes, I setup the code to hide Futae if not NIN main, hide Ebullience if not SCH, and hide Magic Burst if not in ["NIN", "DRK", "RDM", "BLM", "WHM", "GEO", "SCH"]. I'll add DNC flourishes in a similar way.
- Both sneak attack and trick attack force 100% hit rate for the first main+sub hits of the weapon skill being used.
- The first main-hand hit will be a critical hit.
- The first main-hand hit gains bonus damage (added to its base damage) equal to 100% of the player's DEX/AGI for SA/TA. These bonuses are added before the PDIF multiplier, but after FTP is applied. Gear with "Sneak Attack +" or "Trick Attack +" increases this 100% by the bonus listed: SA+30 uses +130% DEX.
Code phys = int( ((wpn_dmg + fstr_wpn + wsc)*ftp + sneak_attack_bonus + trick_attack_bonus) * pdif
Monk, including Impetus and Footwork, has been added to the code. Impetus/Footwork were added in a similar way to SA/TA.
For Impetus I assume 90% max potency (45% crit rate, +90 attack, and +45% crit damage if using Bhikku body too).
I'm not sure how much I trust the MNK Footwork part of the code. Both Dragon Kick and Tornado Kick put out crazy damage when attack capped and with footwork between 1500-1800 TP (~80k average with ~140k peaks; see the bonus set below). Maybe this is normal, but I don't play MNK enough to know. I wasn't able to find an issue with the MNK/Footwork logic in my code, so I'm assuming this is normal. If you frequently play MNK and this doesn't sound correct, please let me know so I can figure out where I went wrong.
Fixed Issues:
This can't be correct, right? Look how much damage it's doing.
Technically Lustratio +1 Legs+Feet (R15D) won, but it was only ~140 damage higher than Nyame R30B legs+feet. I'd rather say Nyame R30B is "best" considering its defensive advantages (and inventory considerations).
Ramuh.Austar
Server: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2022-12-12 13:40:09
I can check your footwork stuff later if you'd like
By Sockfoot 2022-12-12 14:45:57
New to python, so this might be a dumb question. I am attempting to add the Ikenga axe: Code Ikenga_Axe = {"Name": "Ikenga's axe", "Name2": "IkengaAxe_R30", "Skill Type": "Axe", "Type":"Weapon", "DMG": 192+15, "Delay": 288, "STR":15, "DEX":15, "Attack":30+45, "Accuracy": 40+15, "Magic Accuracy":40+15, "TP Bonus": 500, "Weaponskill Damage":5, "Crit Rate":10, "Axe Skill": 255, "Magic Accuracy Skill": 242, "Jobs":["war"]}
Put that in gear.py, item is listed already in item_list.txt (if that matters). Installed libraries and running 'py gui_wsdist.py' successfully, but the item isn't showing up. Am I missing something silly?
edit: Working now. I think it just needed to be added to the list of mains/subs = [ ... ]
Ramuh.Austar
Server: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2022-12-12 14:49:53
anything in quotations would likely need to be case sensitive, change the job to "WAR" and try
By Izanami 2022-12-12 20:01:15
I've had a few messages giving job stats. As of now, the code supports main jobs WAR, MNK, WHM, BLM, RDM, THF, DRK, BRD, SAM, NIN, DRG, COR, and SCH with the correct base stats for ML20 hume. /53 subjob stats still need some work.
I went back through the gear to add the new R25 stats to everything in preparation for supporting multiple Odyssey ranks, and it turns out I'm really bad at adding augments to gear. I've double checked everything and corrected the following errors:
Nyame Helm R30B Double Attack +1 corrected to Double Attack +5
Fixed Bunzi Rod R30 Magic Attack augment +26 to +30
Bunzi Sabots R30 Magic Accuracy augment +10 to +15
Bunzi Gloves R30 Magic Burst II augment +7 to +6
Mpaca Gloves R30 was just a copy paste of R25
Ikenga Hat R25 was using R30 stats and R30 was using R25 stats
Ikenga Boots R25 was using R30 stats and R30 was using R25 stats
Sakpata Helm R30 Double Attack Damage +13 corrected to +15
Since I was already correcting my previous mistakes and adding the correct main job stats for all of our jobs, I've made the following additions to the code:
All R30 Odyssey weapons have been added.
Nyame R30 Path A has been added. However, using the "Select All" buttons will not select Nyame Path A. You will have to manually click their checkboxes if you want to test Nyame Path A. This was intentional.
(I think) I saw some mention of Minstrel Mistral Axe in one of these December update threads. I've therefore added Minstrel Mistral Axe as a weapon skill option.
I've also added Raging Rush, Wheeling Thrust, Sonic Thrust, and Ground Strike. However, Nandaka's "Ignores Defense" effect is not added yet. If you want to test Nandaka, throw on a Dia1 for Nandaka sets to simulate defense-10%
Finally, as far as I can tell, the code properly handles MNK. Dragon/Tornado Kick are just that strong when attack capped and with Footwork...
edit: Working now. I think it just needed to be added to the list of mains/subs = [ ... ] You are correct. If you type out the item stats in the correct Python format, then all you need to do is put it in one of the slot lists for the code to make it available in that slot. If you mess up the stat formatting, then the code should yell at you, hopefully mentioning what you messed up.
Server: Asura
Game: FFXI
Posts: 86
By Asura.Shaedhen 2022-12-14 09:40:29
Thank you for all these additions !
I think there's a little issue in the latest GUI. When you change the selected job, the list of available weapon skills doesn't update and we only get access to katana ones.
Ramuh.Austar
Server: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2022-12-14 09:53:01
change your weapon in the bottom right on the default page that should fix it
[+]
Server: Asura
Game: FFXI
Posts: 86
By Asura.Shaedhen 2022-12-14 10:04:16
It is indeed working when doing that, thanks. Andmy bad then, can disregard my previous message
By Izanami 2022-12-14 11:39:43
Thank you for all these additions !
I think there's a little issue in the latest GUI. When you change the selected job, the list of available weapon skills doesn't update and we only get access to katana ones.
change your weapon in the bottom right on the default page that should fix it
This is correct. I just noticed this issue myself earlier today while testing RNG savage+jishnu sets.
Right now the code only updates the WS list if you manually change either the main or ranged weapon. This means the WS list does not update if the automated finder "Run WS" equips the weapon for you. For example: RNG Savage Blade does find TP Bonus Bow as best, but the WS list doesn't update to show Archery WSs until you manually re-equip the bow.
I just need to copy/paste that "update ws list" code to run when the user changes jobs and copies the best set and this should be fixed.
In other news:
My local copy of the code now supports all jobs except SMN (and BLU traits because I don't understand those yet). I'll push an update after I've finished testing things a bit more and add R15/20/25/30 Odyssey gear together. Hopefully within a day or so.
Edit: I also just noticed that ranged weapon skills are not getting their REMA/Ambu WS damage bonuses (+50% for Trueflight with Gastra R15 for example) because I'm passing the main-hand weapon name on line 236 of wsdist.py. This will be fixed in the next update too, but that update will take a bit so I'll mention it here.
[+]
By Sockfoot 2022-12-14 13:55:40
Just a note, and this is easily fixed by not using the 'Select All', but when finding the best set the sim will use weapons that can't actually perform the WS. Not sure how easy that would be to fix, or if it is worth the effort since you can manually select.
By Izanami 2022-12-14 14:32:33
Just a note, and this is easily fixed by not using the 'Select All', but when finding the best set the sim will use weapons that can't actually perform the WS. Not sure how easy that would be to fix, or if it is worth the effort since you can manually select.
This is technically an easy fix. In fact, the other button "Select <ALL> Main Job" already does this. I added it because I was also tired of unselecting weapons that couldn't use the weapon skill.
When I check sets, I click the "Select <ALL> Main Job" button, which selects everything in all slots that your main job can use, but does not select main-hand weapons that can't use the selected weapon skill (technically it unchecks them if they're already selected). I then manually UNSELECT the stuff I don't care about (like Karieyh Ring +1, Epaminondas's Ring, TP Bonus off-hands, etc).
I'll copy/paste this extra functionality to the other "Select All" button for the Main, Ranged, and Ammo slots now so it's added when I push the next update.
By Izanami 2022-12-15 16:21:13
The most recent version of the code has been uploaded. Again, I don't play most of these jobs, so there could easily be missing gear or mistakes in how I interpret their job abilities. I did not check every job, ws, spell, etc, so let me know if you find any issues.
R15, R20, R25, and R30 Odyssey armor are all included in the gear lists (I may add lower-ranked weapons later). You may now use the simple drop-down menu to choose which rank the "Select All" buttons will select. You can also use the "Quicklook" buttons to compare different ranking Odyssey pieces. Nyame Path A is ignored, but still included in case you wanted to select it manually.
DNC has been added (with incorrect base stats). Apparently, [Climactic, Striking, Ternary] can't be used together. Those three flourishes are part of a drop-down menu so you can only select one at at time.
- Building Flourish provides +25% Attack (applied with Chaos Roll), Accuracy +40, Crit Rate +10%, and Weapon Skill damage +20% (from Job Points)
- Climactic Flourish is treated like Sneak/Trick Attack: The first main-hand hit will be a critical hit and the base damage of that hit gains a +50% CHR bonus (+70% after JP bonuses). The Empyrean +3 head increases Crit Damage by 31% for this one hit if equipped.
- Striking Flourish guarantees a double attack from your main-hand hit (by setting QA=TA=0, DA=1). The main-hand hit also gains +100% CHR bonus similar to SA/TA. Both the main-hand hit and the guaranteed double attack hit gain crit rate +70% when wearing the Empyrean +3 body.
- Ternary Flourish guarantees a triple attack from your main-hand hit (by setting QA=0, TA=1). The main-hand hit also gains +100% CHR bonus similar to SA/TA. There is nothing else fancy going on with Ternary Flourish as far as I can tell.
BST has been added (with incorrect base stats)
GEO has been added (with incorrect base stats)
RNG has been added (with incorrect base stats) without Hover Shot.
RUN has been added (with incorrect base stats)
PLD has been added (with incorrect base stats).
PUP has been added for master WS sets (with incorrect base stats). I'm interested in adding Automaton weapon skills to the "Spells" list, but this is not going to happen for many months.
I've added BLU (without any traits), but I need to read about setting BLU traits and bonus stats based on spells set.
At this point, the code is pretty much an "All Jobs" damage simulator for spells and weapon skills, only missing SMN (and BLU traits). I'm almost certain that there are many small issues throughout the code that need to be fixed. Now that I'm finished adding jobs, I'll slowly go through and correct these issues as I clean up the code itself.
Other changes:
If you've been updating the code as I've added more jobs, you've probably noticed that it's started taking a significant amount of time to use the "Select <ALL> Main Job" button, change jobs, and even just open the GUI. After adding the above jobs with their gear, the delay ended up being 3~10s, which is pretty bad, and especially annoying when testing things. I've modified how the code reads/creates equipment lists so that swapping jobs and selecting equipment is back to being nearly instant (as it should be). In general, the GUI is now much more responsive than before.
This was technically an easy fix, but there was a lot of room to mess something up relating to how the GUI interacts with itself. Let me know if you run into any weird new issues. The only "negative" thing I've seen from this change is that the gear lists can now be scrolled way beyond the displayed gear list.
I've fixed an error in Monk's base stats which gave it TA+8% (a remnant from copy/pasting THF stats to start MNK).
The "Select all" button still selects everything in the displayed list. However, the main code itself now rejects simulations where the main-hand weapon does not match the selected melee weapon skill. Similarly for ranged weapon and ranged weapon skills. Hopefully I didn't overcorrect it to reject valid sets that you'd want to check.
Ranged WSs now get their REMA/Ambuscade weapon damage bonuses.
The True Shot stat now directly increases physical ranged damage dealt. For example: True Shot +5 = +5% physical ranged damage.
ItemSet 388885
Mid Buff: STR(?)+WSD cape
DEX+WSD is ~0.5% worse than STR+WSD for some reason. Dia2+BRD+COR buffs
ItemSet 388884
High Buff: DEX+WSD cape
Server: Asura
Game: FFXI
Posts: 23
By Asura.Itsasaga 2022-12-15 16:24:57
Hello Izanami,
I know I've read from you before you are quite busy. I was just wondering if there is a plan to integrate a TP set calculator at this point (or if I just missed the function in the release).
Regards,
By Izanami 2022-12-15 17:03:46
Hello Izanami,
I know I've read from you before you are quite busy. I was just wondering if there is a plan to integrate a TP set calculator at this point (or if I just missed the function in the release).
Regards,
I have a version that works for NIN, but I was more interested in adding all of the other jobs to the GUI before porting the existing TP set code to the GUI. I'll be too busy to work on it until January sometime since I have a work trip starting tomorrow and then holiday right after. This is the main reason I pushed to quickly release "all jobs" before tonight.
The NIN TP code only compares how long each set takes to get to X TP (in real-world seconds). It is not a DPS simulator and can't be easily combined with the WS simulator. The first version of the "all jobs" TP simulator will be the same. I will work on combining time-to-WS and white-damage-dealt afterwards.
I'll need to figure out how I want to throw in things like Zanshin (with Hasso) and Kick Attacks. The NIN version handles Daken well, so I imagine Kick Attack will be a copy/paste and the only problem will be Zanshin. Again, I won't work on this until January.
Edit:
I've also just fixed where True Shot was being applied in the actual simulations. This did not affect finding the "best" set, but did adjust the damage seen in distribution plots.
[+]
Lakshmi.Buukki
Server: Lakshmi
Game: FFXI
By Lakshmi.Buukki 2022-12-21 10:24:19
Is there a set for Empyreal Arrow, utilizing both TP Bonus Katanas? Thinking about an Arebati prep fight when not in range to use Tauret.
By SimonSes 2022-12-21 10:58:55
Is there a set for Empyreal Arrow, utilizing both TP Bonus Katanas? Thinking about an Arebati prep fight when not in range to use Tauret.
I mean Ullr/arrow is pretty obvious. Full Nyame is pretty obvious too (empy feet +3 could be better if you can cap attack, which I guess might not be possible even with dnc+RDM and 2.0 native attack boost). Cape is obvious too. Neck is almost obvious, fotia could be good, but +2 neck provides accuracy and damage, so I would go with +2. Belt probably Fortia. So whats left rings and earrings? Ring, Epam/Regal most likely. Earrings.. are pretty much whatever I would guess. Ishvara/Telos or something. That's just going with the first guess based by logic, but I think it should be pretty close to bis or bis.
Lakshmi.Buukki
Server: Lakshmi
Game: FFXI
By Lakshmi.Buukki 2022-12-21 11:13:21
That's just going with the first guess based by logic, but I think it should be pretty close to bis or bis.
I mean well yeah, I can throw together a set based on what I think. I'm posting to ask the writer since he uses software to determine max potential. I am asking for just that.
And no I don't know what's "pretty obvious". wtf? I'm asking for a reason, what's obvious to you isn't obvious to everyone else.
By SimonSes 2022-12-21 11:27:26
That's just going with the first guess based by logic, but I think it should be pretty close to bis or bis.
I mean well yeah, I can throw together a set based on what I think. I'm posting to ask the writer since he uses software to determine max potential. I am asking for just that.
And no I don't know what's "pretty obvious". wtf? I'm asking for a reason, what's obvious to you isn't obvious to everyone else.
I understand, but NIN options for ranged 1hit WS are so limited if you have Nyame B, that its not really like you have any real choice. Earrings, neck and waist are only slots when it might not be clear what to use, but the problem is without knowing exact buffs and Arebati V25 stats, it might be impossible to calculate bis items for those slots, because you would need to know - is fSTR2 capped or not, do you need more racc or not, are you ratt capped or not etc.
Lakshmi.Buukki
Server: Lakshmi
Game: FFXI
By Lakshmi.Buukki 2022-12-21 12:25:00
B team Arebati, so max Box Step, Corrosive Ooze or Angon depending on active BST pet, Killer Instinct, Dia 3. Probably SMN for Warcry/Crystal Blessing (I guess this is only necessary if you used ranged accuracy weapon)
By Nariont 2022-12-21 12:46:59
I know you're you're looking for charted BiS but the sets for the THF ones are still likely as good as itll get by and large, replace telos if you have a aug'd +2 jse earring and jse necks
https://www.ffxiah.com/forum/topic/36654/for-the-shinies-a-guide-for-thief/249/#3603101
[+]
Lakshmi.Buukki
Server: Lakshmi
Game: FFXI
By Lakshmi.Buukki 2022-12-21 13:06:33
Thanks. I couldn't remember where that discussing was.
By SimonSes 2022-12-21 13:23:45
B team Arebati, so max Box Step, Corrosive Ooze or Angon depending on active BST pet, Killer Instinct, Dia 3. Probably SMN for Warcry/Crystal Blessing (I guess this is only necessary if you used ranged accuracy weapon)
I wonder if Ooze can land on Arebati. def down is wind in theory and Arebati should be close to immune to that (v25 possibly completely immune to wind?). On the other hand ooze seems to always lands. Unless Ooze is water based def down? Would be good to know all that.
By Nariont 2022-12-21 13:26:30
Ooze from testing on i think BST forums can land on anything iirc
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
|
|