Загрузка данных


БЛОК 1/5

ТЗ: Arms Warrior Slayer M+ Rotation Helper

Цель

Написать аддон/модуль, который в реальном времени показывает следующую приоритетную способность для:

Arms Warrior / Slayer / Mythic+

Аддон ничего не нажимает сам, только рекомендует способность.

Функция условно:

GetNextSpell() -> spellID, reason

⸻

1. Ротация должна учитывать количество целей

Отдельная логика для:

* 1 цели
* 2 целей
* 3+ целей

Важно:

Sweeping Strikes использовать только при 2+ целях.

⸻

2. Что нужно отслеживать

Игрок

* Rage
* Avatar
* Sweeping Strikes
* Sudden Death stacks
* Executioner stacks
* Imminent Demise stacks
* Collateral Damage stacks
* Overpower charges
* Bladestorm CD
* Colossus Smash CD
* Avatar CD
* Mortal Strike CD
* Cleave CD
* Heroic Strike / Apex proc

Цель

* HP %
* Rend
* длительность Rend
* Colossus Smash debuff
* количество противников рядом

====================

БЛОК 2/5

3. Основной AoE priority

Для 2+ целей:

1. Sweeping Strikes
2. Cleave, если Rend отсутствует
3. Avatar
4. Colossus Smash
5. Cleave, если Collateral Damage = 3
6. Bladestorm
7. Execute, если Sudden Death = 2 stacks
8. Cleave
9. Overpower, если 2 charges
10. Execute, если Sudden Death = 1
11. Overpower
12. Execute в обычной Execute phase
13. Mortal Strike
14. Slam

⸻

4. Single Target

При одной цели использовать отдельную ротацию.

Приоритет примерно:

1. Rend / Cleave для поддержания Rend
2. Avatar
3. Colossus Smash
4. Heroic Strike при Apex proc
5. Execute при Sudden Death x2
6. Bladestorm
7. Mortal Strike
8. Execute при Sudden Death
9. Overpower
10. Execute по HP
11. Slam

Sweeping Strikes на одной цели не показывать.

====================

БЛОК 3/5

5. Sudden Death

Критически важно отслеживать количество стаков:

0 / 1 / 2

Не просто true/false.

Sudden Death x2

Execute имеет высокий приоритет, чтобы не потерять следующий proc.

Sudden Death x1

Если Overpower имеет 2 charges:

сначала Overpower

потом Execute.

Sudden Death нельзя определять только по HP цели.

⸻

6. Overpower

Нужно знать количество зарядов:

0 / 1 / 2

При 2 charges приоритет повышается, чтобы не потерять следующий заряд/reset.

⸻

7. Rend

На 2+ целях Cleave используется для нанесения/обновления Rend.

Если Rend отсутствует:

Cleave получает высокий приоритет.

⸻

8. Collateral Damage

Отслеживать количество стаков.

Если:

Collateral Damage >= 3

и Cleave доступен:

→ рекомендовать Cleave.

====================

БЛОК 4/5

9. Bladestorm / Slayer

Нужно учитывать взаимодействие:

* Sudden Death
* Executioner
* Imminent Demise
* Bladestorm CD

Желательно сделать отдельную функцию:

ShouldExecuteBeforeBladestorm()

чтобы при необходимости Execute мог использоваться перед Bladestorm.

⸻

10. Season 2 Set

Не делать автоматическое правило:

Accumulating Strength → Slam всегда выше Mortal Strike

Slam должен оставаться filler, если нет отдельного подтверждённого условия для повышения его приоритета.

Старую механику можно оставить как отдельную настройку:

ExperimentalSlamPriority = false

⸻

11. Проверка доступности способности

Одна общая функция:

CanCast(spellID)

Проверять:

* изучен ли spell
* spell override
* cooldown
* charges
* Rage
* range
* target
* usable

Использовать spell ID, а не названия.

====================

БЛОК 5/5

12. Enemy Count

Автоматически определять количество противников.

Дополнительно сделать ручной режим:

AUTO / 1 / 2 / 3 / 4 / 5+

для тестирования и ситуаций, когда автоматический подсчёт ошибается.

⸻

13. Debug Mode

Обязательно.

Показывать примерно:

Enemy count: 4
Rend: 10 sec
Sudden Death: 1
Executioner: 3
Collateral Damage: 3
Overpower charges: 2
Bladestorm CD: 5.4

Next:

CLEAVE

Reason:

Collateral Damage x3

⸻

14. Архитектура

Разделить хотя бы на:

UpdateCombatState()

CountEnemies()

CanCast()

SingleTargetRotation()

AOERotation()

ShouldExecuteBeforeBladestorm()

GetNextSpell()

⸻

15. Основные тесты

1 цель + Sweeping Strikes ready
→ НЕ показывать Sweeping Strikes.

4 цели + Sweeping Strikes ready
→ Sweeping Strikes.

Rend отсутствует
→ Cleave.

Collateral Damage = 3
→ Cleave.

Sudden Death = 2
→ Execute.

Sudden Death = 1 + Overpower = 2 charges
→ Overpower.

Sudden Death = 1 + Overpower = 1 charge
→ Execute.

⸻

Итог

Нужно сделать priority engine, который учитывает:

* количество целей
* Rend
* Sudden Death stacks
* Overpower charges
* Collateral Damage
* Executioner
* Imminent Demise
* Bladestorm
* Avatar + Colossus Smash
* Apex/Heroic Strike

И каждый раз выдаёт:

какую способность нажать + почему именно её.