1. Threat list
2. Отсутствует Список угроз у всех питомцев / прислужников прирученных или засуммоненных, а также у тотемов.
3. Список угроз должен быть у всех питомцев/(и тд), также должен стрелять эвент UNIT_THREAT_SITUATION_UPDATE и работать API UnitThreatSituation
4. 2.04.2021
5. Полагаю, что ни на одной пиратке это никогда не работало.
6. -
7. Включить индикатор: "Предупреждать об угрозе", затем натравите вторым окном любого питомца на себя и проверьте API /dump UnitThreatSituation("player")
8. Доказательство:
Скрытый текст
Дк травит вурдалка на лока
Скриншот из видео (тайм код: 5:58)
Снимок экрана 2021-04-04 095252.jpg
[свернуть]Скрытый текст
Лока бьет питомец ханта и когда тот берет его в таргет, можно увидеть статус угрозы 100%
Скриншот из видео (тайм код: 10:48)
Снимок экрана 2021-04-04 100307.jpg
[свернуть]Скрытый текст
Прист вызывает финду на дк
Скриншот из видео (тайм код: 3:49)
Снимок экрана 2021-04-03 133056.jpg
[свернуть]Скрытый текст
Друида бьет пет лока
Скриншот из видео (тайм код: 5:30)
Снимок экрана 2021-04-05 095602.jpg
[свернуть]Скрытый текст
Друид кастует Лунный огонь в прислужника дк и тот на него агрится, но затем дк направляет пета на другого
Скриншот из видео (тайм код: 5:51) - этот момент довольно интересный, его бы разобрать детальнее
Снимок экрана 2021-04-03 133056.jpg
[свернуть]Скрытый текст
Хант травит пета на паладина
Скриншот из видео (тайм код: 1:16)
Снимок экрана 2021-04-03 133056.jpg
[свернуть]
Можно и дальше находить такие моменты, но в следующем патче (Cataclysm) появился аддон* CompactUnitFrame с рейд фреймами, где одна из текстур этого аддона отвечала за индикатор угрозы
Снимок экрана 2021-04-03 133056.jpg, завязанная на этом API UnitThreatSituation
Скрытый текст
на 1016 строчке видим, как задается эта текстура
На 95 строке видим, что вызывается функция, когда стреляет этот евентPHP код:
frame.aggroHighlight:SetTexture("Interface\\RaidFrame\\Raid-FrameHighlights");
на 382 строке видим, что она делает:PHP код:
elseif ( event == "UNIT_THREAT_SITUATION_UPDATE" ) then
CompactUnitFrame_UpdateAggroHighlight(self);
PHP код:
function CompactUnitFrame_UpdateAggroHighlight(frame)
if ( not frame.optionTable.displayAggroHighlight ) then
frame.aggroHighlight:Hide();
return;
end
local status = UnitThreatSituation(frame.displayedUnit);
if ( status and status > 0 ) then
frame.aggroHighlight:SetVertexColor(GetThreatStatu sColor(status));
frame.aggroHighlight:Show();
else
frame.aggroHighlight:Hide();
end
end
[свернуть]
На рейтейле эта механика работает и по сей день, можно убедиться из видео:
Тайм-код (3:46)
p.s. Добавлю, что в других записях, где не видно индикатор угрозы при таких же обстоятельствах, в этих случаях скорее всего отключен индикатор:
Снимок экрана 2021-04-05 113250.jpg
* CompactUnitFrame этот аддон из mpq патча - папки FrameXML, т.е. это близзардовский интерфейс, не какой-то сторонний.
- Добавлю еще один пример из FrameXML (Build 12213 (3.3.5)):
Скрытый текст
Начинаю по порядку:
1. Заходим в PlayerFrame.xml и видим на 23 строчке:
- это и есть текстура угрозыPHP код:
<Texture name="PlayerFrameFlash" file="Interface\TargetingFrame\UI-TargetingFrame-Flash" hidden="true">
2. Далее заходим в луа файл PlayerFrame.lua и видим, что на 4 строчке вызывается функция UnitFrame_Initialize, где PlayerFrameFlash - последний аргумент
Переходим по этой функции и видим:PHP код:
function PlayerFrame_OnLoad(self)
UnitFrame_Initialize(self, "player", PlayerName, PlayerPortrait,
PlayerFrameHealthBar, PlayerFrameHealthBarText,
PlayerFrameManaBar, PlayerFrameManaBarText,
PlayerFrameFlash);
3. threatIndicator - это и есть PlayerFrameFlash
41 строчка -- запоминаем;PHP код:
self.threatIndicator = threatIndicator;
Далее видим, как на 50 строчке вызывается функция:
Переходим в нее и видим, как на 408 строчке регистрируется наш эвентPHP код:
UnitFrameThreatIndicator_Initialize(unit, self, threatFeedbackUnit);
на 420 строчке видим, что вызывается функция, когда стреляет этот эвент:PHP код:
unitFrame:RegisterEvent("UNIT_THREAT_SITUATION_UPDATE");
4. переходим в эту функцию и видим, что на 432 строчке снова фигурирует наша APIPHP код:
if ( event == "UNIT_THREAT_SITUATION_UPDATE" ) then
UnitFrame_UpdateThreatIndicator(self.threatIndicat or, self.threatNumericIndicator,...);
end
и далееPHP код:
status = UnitThreatSituation(indicator.feedbackUnit, indicator.unit);
Отсюда делаем вывод, что если показывается индикатор, когда на нас направлен чей-то питомец или суммон (копии мага например), у этих питомцев должен быть Список угроз - без него не будет работать API, а также стрелять евент.PHP код:
if ( IsThreatWarningEnabled() ) then -- **
if (status and status > 0) then
indicator:SetVertexColor(GetThreatStatusColor(stat us));
indicator:Show();
else
indicator:Hide();
end
** API IsThreatWarningEnabled
[свернуть]
- Нашел еще один интересный момент, оказывается и некоторые тотемы должны иметь Список угроз, в данном видео конкретно Опаляющий тотем
Скрытый текст
Здесь видно, что когда шаман ставит тотемы, Индикатор угрозы у ханта постепенно меняется с оранжевого на красный, видимо тотем хотел сначала пета атаковать (не факт)
Скриншот из видео (тайм код: 0:21 3:57)
Снимок экрана 2021-04-06 124832.jpg
[свернуть]
- Здесь видно, что когда хант притворяется мертвым, пет лока идет атаковать пета ханта
Скрытый текст
Индикатор угрозы ханта и его пета сразу поменялись.
Скриншот из видео (тайм код: 1:14 9:09)
Снимок экрана 2021-04-06 124832.jpg
[свернуть]
Ну и последний железобетонный пруф
Записал видео с ретейла где видно, что стреляет эвент когда меня атакует пет лока, и работает API
Дополнение к теме
Питомцы и вход в бой: дополнение
Отправка пета в атаку должна давать иммунитет к сапу.
Если провести параллель между этими темами и моей, то становится совершенно очевидно, что механика комбата у питомцев и их хозяев работает не правильно.
Как должно работать:
1. Пет бежит атаковать врага (также со всеми суммонами), получает Список угроз и вместе с хозяином получают скрытый комбат.
2. Хозяин должен получить настоящий комбат только в том случае, если баффнет или похилит своего питомца / суммона, когда тот будет в настоящем комбате!
p.s. Сейчас похоже на то, что у нас какой-то костыль написан, это срочно нужно менять.
p.s.s. Также хочу добавить, что был не прав в этой теме. Когда питомец или любой суммон, получает контроль, Список угроз никуда не девается, и соответственно скрытый комбат никуда не исчезает. Но тем не менее, настоящий комбат не должен передаваться хозяину, как только питомец/суммон входит в бой!