eight04 / wakfu-autobuild

A CLI tool that can find the equipment combination with the highest damage factor.
MIT License
8 stars 4 forks source link

Two questions about parameters #17

Closed arthurflor23 closed 4 years ago

arthurflor23 commented 4 years ago

Hi, thank you so much by the project! I play wakfu since the beta and always created the builds "manually", until yesterday I decided to develop some automated script for that, and found your post/project, and that's exactly what I was looking for!

Anyway, I have two questions about some parameters. The first is about --require, for example, when using control=3, the script will look for combinations that result in exactly 3 of control, or does it also consider above 3? (greater than or equal to symbol)

The second question is about --level, for example, when using --level=200, the script will look for combinations using items from level 0 to 200 (ignoring items level 200+)? In this way, would it be interesting to add another parameter like --min-level, in which it would ignore items less than his value? Or perhaps a filter by items' rarity, such as common, rare, legendary, epic... This would bring fewer combinations to test, and by default, it could be as it is now. I don't know, just suggestions here.

If you think it makes sense, I can take some time to analyze the code and implement on my own and open pull request. Let me know what you think.

Thank you again =]

eight04 commented 4 years ago

when using control=3, the script will look for combinations that result in exactly 3 of control, or does it also consider above 3?

In this case, combinations are only excluded if control < 3. You may get 4 or 5 control as the result.

add another parameter like --min-level

Sounds good. I think you just need to pass the option via cli and change some code around here: https://github.com/eight04/wakfu-autobuild/blob/c16e7fb157f6299fd86ba17a06827e01e961fced/lib/solver.js#L151

However, you may want to analyze whether adding a minimum level does improve the performance. I think most low-level items are dropped during the merging phase: https://github.com/eight04/wakfu-autobuild/blob/c16e7fb157f6299fd86ba17a06827e01e961fced/lib/solver.js#L389-L407

arthurflor23 commented 4 years ago

I see, some high-level items may even have less damage, but compensate for other attributes. This was a point I saw when recommending a level 185 item, but I knew better items (which add to other attributes, not just damage). So making this option adjustable by the user, I think that can result in a more balanced build (hmmm)

I added the --min-level parameter in local project and works (default = 1). In comparative terms, running:

wakfu-autobuild --level 215 --element 3 --require ap=5,mp=2,range=4,initiative=200 --second-mastery singleTarget,area Start searching: WEAPON/HEAD/BACK/SHOULDERS (31577) x CHEST/BELT/LEGS/NECK/RING (27191) x ACCESSORY (8)

wakfu-autobuild --level 215 --min-level 200 --element 3 --require ap=5,mp=2,range=4,initiative=200 --second-mastery singleTarget,area Start searching: WEAPON/HEAD/BACK/SHOULDERS/CHEST (32862) x BELT/LEGS/NECK/RING/ACCESSORY (11418)

arthurflor23 commented 4 years ago

About the rarity of the item, I know that items of lower rarity are automatically discarded because they have less damage, but does it make sense to add any parameters to disable any of them? For example, disable Souvenir items, or disable Rare and Mythical. I say that, because in some combinations here, the same ring was suggested twice but with different rarities.

Another approach would be to discard the Unusual, Common, Rare, Mystical version of duplicate items by default, since the Legendary version is considered better. What do you think?

eight04 commented 4 years ago

wakfu-autobuild --level 215 --element 3 --require ap=5,mp=2,range=4,initiative=200 --second-mastery singleTarget,area

Aren't singleTarget and area damage mutually exclusive?

For example, disable Souvenir items, or disable Rare and Mythical

I have tried to add an option to excluded items by rarity. I was trying to get a "cheap" set by excluding legendary items.

I think rare items are also dropped during the merging phase since there is always a legendary version which surpass it. Therefore to disable a rarity, it only makes sense to disable high-rarity items so the solver will use low-rarity ones.

the same ring was suggested twice but with different rarities.

Any example?

discard the Unusual, Common, Rare, Mystical version of duplicate items

They are discarded during the merging phase.

arthurflor23 commented 4 years ago

Aren't singleTarget and area damage mutually exclusive?

In fact, in this example what I had imagined was that the script would take singleTarget as the first option, and having no other option, would opt for area damage, is that correct?

I have tried to add an option to excluded items by rarity. I was trying to get a "cheap" set by excluding legendary items.

Wow, this approach is really better!

Any example?

Unfortunately I didn't save the combination or options, sorry.

Another point I saw, and I think it is more complicated to solve, is to add the requirements of the items. For example, Bonta's sword can only be equipped with Bonta's ring, and usually the ring is not suggested as it has no status. Or the item requires WP equal to or greater than 8, but the final build does not give 8 WP.

Does the ankama API offer this type of information? Or was it really too complicated?

eight04 commented 4 years ago

In fact, in this example what I had imagined was that the script would take singleTarget as the first option, and having no other option, would opt for area damage, is that correct?

Nope. If an item has 100 elemental mastery, 100 ST mastery, 100 area mastery, the solver adds all of them to mastery score i.e. 300. Though IDK if there is an item includes ST and area at the same time.

Bonta's sword can only be equipped with Bonta's ring, and usually the ring is not suggested as it has no status

This is like a set effect i.e. you only gain these status while wearing both items.

the item requires WP equal to or greater than 8, but the final build does not give 8 WP.

Do you have the item ID? Here is the API: https://www.wakfu.com/en/forum/332-development/236779-json-data

arthurflor23 commented 4 years ago

Nope. If an item has 100 elemental mastery, 100 ST mastery, 100 area mastery, the solver adds all of them to mastery score i.e. 300. Though IDK if there is an item includes ST and area at the same time.

oh, my mistake!

This is like a set effect i.e. you only gain these status while wearing both items. Do you have the item ID? Here is the API: https://www.wakfu.com/en/forum/332-development/236779-json-data

WP >= 8, it is Tell-Tale Boots, and Bonta Sword, Sufokia Sword, Amakna Sword, Brakmar Sword, with the respective rings, Bonta Ring, Sufokia Ring, Amakna Ring, Brakmar Ring.. I checked now that the rings are Epique x-x

There are other items that require, for example, distance mastery >= 400 and <= 500 (Hagen Daz's Helmet), or AP >= 13 (Brrr Belt), and there are certainly several others.

In the links to the items I mentioned, there is no mention of the conditions, except for swords and rings (like "It cannot be carried without the Sufokia Ring."). However, in the Method wakfu builder and in game:

image image

I don't know if it is worth adding such a feature, or if it needs a lot of effort, but the script already helps a lot with what is proposed. What do you think?

eight04 commented 4 years ago

I didn't see any condition information of shadowed boots in official API.

Things that make it complicate:

  1. How do we get condition data?
  2. The order matters. You may only be able to equip item A after equiping B. This is the major difference between single item condition and the set effect.
  3. When an item having a condition is included in the result, we have to validate the set. If it fails, search again with two situations:
    1. Including the item, and make sure other parts can match the condition.
    2. Excluding the item.

BTW currently the solver can't solve with negative requirements i.e. wakfu must lower than -2. We may want to open a new issue for this.

arthurflor23 commented 4 years ago

Hello, Indeed, they don't expose this information in the official API due to a development constraint (https://www.wakfu.com/en/forum/332-development/239089-api-bug-item-information). Just for curiosity, a static list made by users: https://www.wakfu.com/en/forum/8-general-discussions/238317-items-condition-list

  1. How do we get condition data?
  2. The order matters. You may only be able to equip item A after equiping B. This is the major difference between single item condition and the set effect.
  3. When an item having a condition is included in the result, we have to validate the set. If it fails, search again with two situations:

    i. Including the item, and make sure other parts can match the condition. ii. Excluding the item.

Anyway, item 0 is blocked by the API itself, but if they make this information available, items 1 and 2 seem to need a lot of effort.

Thinking of a tree structure, a node split would be created for i and ii scenarios, and maybe there are more and more divisions within each node. All this to validate whether it would be worthwhile to keep item with conditions (which influence other items in the build), or not.

BTW currently the solver can't solve with negative requirements i.e. wakfu must lower than -2. We may want to open a new issue for this.

In addition, I was thinking of adding new options to match these conditions, such as 400 >= distance <= 500. As I understand it, currently only meets 400 >= distance. This could help in future build scenarios that have item with conditions.. so, the options could be passed by the user, or dynamically by the script itself.

I will close the issue, since we have passed the two questions of the title haha If you find it interesting, we can open new issues of the pending features, but I confess that the project is already great. Cheers!