awgil / ffxiv_bossmod

BossMod FFXIV dalamud plugin
BSD 3-Clause "New" or "Revised" License
261 stars 109 forks source link

More information #6

Closed Moonlight-Everlit closed 1 year ago

Moonlight-Everlit commented 2 years ago

Heyo - first of all, thank you for another great plugin that is being worked on ^^

Was just wondering if it was possible to add some information either here or in the plugin itself, to let players know which bosses/jobs this works with. Been somewhat confused but I guess that would be enough to get started :P

awgil commented 2 years ago

I definitely need to add some pictures and details, that's true.

So far this plugin contains two major parts - "boss modules" (currently provides hints and "radar" for endwalker ex trials and savages, plus very simple hints for endwalker a-ranks), and "auto rotation" (an extension of ideas from xivcombo and moaction plugins, this is very experimental, currently there is some support for WAR and WHM).

trini0n commented 2 years ago

Commenting on this as it seems relevant - I'd be interested in helping out in creating auto rotations for different classes I play. I think an interesting one could be PLD since all rotations are more or less mapped out per fight by theorycrafters in the Balance.

If you have anything you'd like help with in terms of contributing towards rotations / skills / boss fights lmk!

Moonlight-Everlit commented 2 years ago

As I mainly play DRK and SAM/RPR, I sadly can't contribute much to PLD rotations yet - but when it comes to testing, I can totally help and it would give me a reason to play other classes some more ;)

trini0n commented 2 years ago

Oh, yeah I main PLD and I just meant to comment here to ask @awgil if there's any documentation on how to set the project up in the best way to contribute!

awgil commented 2 years ago

There is no documentation currently. If you want to try writing your rotation module, it goes roughly like this:

  1. Set up the dev environment - should be really simple, just clone repo, open solution in VS and build. There are two projects - actual plugin and UIDev - latter is used to quickly iterate on things without running the game. To test that everything works correctly, you can remove the installed version of the plugin, then build from your clone - it should automatically be picked up by dalamud, and then hot reload will work etc.
  2. Look how existing rotations are made. Currently there is a fully-developed WAR module (that's my main, and it's quite solid I think, I've made orange logs with it) and WHM module (this is much less developed, I didn't play whm much yet and I don't have a clear vision of how good healer autorotation would look). I would assume all tanks and probably all dps would be quite similar to WAR, however. Specifically, look into source files in Autorotation directory.
  3. Class rotation module is typically made of two layers - "rotation" and "actions". Former contains rotation logic itself (list of actions, definition of state and strategy, and functions for selecting next-best action), latter contains logic to inspect game state, build state structures, and then execute appropriate actions. The main reason for that split is to be able to debug rotation logic out of game in UIDev project - it obviously doesn't have access to game state. For WAR, UIDev contains "simulator" which allows configuring initial state and then performs simulation. I found it very useful for debugging rotation logic.
  4. State/strategy split is a bit subjective, I might revise it in future. Also simulator will probably be at some point moved from UIDev to main plugin, since I plan to integrate it with cooldown planner module eventually.
awgil commented 2 years ago

Also, few extra notes:

  1. This is alpha, I don't consider things like internal autorotation API or general module structur as 'stable', I might find reasons to revamp things in future. For example, I'd like to better support openers in rotation, and I probably want to improve integration with cooldown planner (so that you could do things like delay offensive cds until add phases).
  2. Adapting rotation from balance discord to autorotation module is not as straightforward as it might seem, since approaches are different. Autorotation module has to inspect state at any given moment and determine next-best action, it doesn't have any high-level context or plan of what it's trying to do that it can remember over course of multiple frames. One good example would be WAR's decision whether to spend gauge asap or preserve it until next buff window. Another example would be lack of a concept of "opener". I don't have a good idea of how to implement that in a robust way yet (you have to consider that in real fight unexpected things happen - people die, raidbuffs drift, bosses have downtime, etc. - and autorotation should handle all that gracefully and not degrade into doing stupid things).
trini0n commented 2 years ago

Gotcha, thanks I'll give it a shot. Do you use Discord / would you mind if I sent some questions through there? Running into some issues with building the project (namely The type or namespace name 'Replay' could not be found) and also have some general questions about C# since I'm not the most familiar with it.

Feel free to add me Brandon#6248 if you're open to it!

awgil commented 2 years ago

Sure, you can write any questions to veyn#7947.

I'll be back at home in the evening, for now I'm not near my pc and have no idea what this error means :)