Загрузка данных
БЛОК 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
И каждый раз выдаёт:
какую способность нажать + почему именно её.