Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.08.2010, 22:09   #1
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию SPELL_AURA_PERIODIC_TRIGGER_SPELL

Нашёл спелл: http://ru.wowhead.com/spell=42464
Он триггерит нужный нам спелл http://ru.wowhead.com/spell=42454
Но вот беда - неверно он как-то это делает... Триггерный спелл триггерится каждые 2 секунды, получается ещё раньше чем кончается действие самого триггерного спелла (оно длится 3 секунды). В результате бафф сбивается, теряется и всякая хрень с ним происходит.
Попытался сделать таки образом, чтобы если на цели триггерного спелла уже висит аура - не кастовать снова.
Выплыл к void Aura::TriggerSpell() Но тут никак не проверить цель именно триггерного спелла, а она весьма интересна: Targets (22, 7) (TARGET_CASTER_COORDINATES, TARGET_AREAEFFECT_INSTANT)
В результате провести проверку на наличие ауры нельзя.
Кто что может сказать?
KiriX вне форума   Ответить с цитированием
Старый 16.08.2010, 22:14   #2
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Может, проверять через bool Unit::HasAura(uint32 spellId, SpellEffectIndex effIndex) const и в случае наличия ауры не кастовать снова?
virusav вне форума   Ответить с цитированием
Старый 16.08.2010, 22:18   #3
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Может, проверять через bool Unit::HasAura(uint32 spellId, SpellEffectIndex effIndex) const и в случае наличия ауры не кастовать снова?
Чуток внимательнее читаем
Я знаю чем определить наличие ауры, но дело в том, что невозможно получить цель триггерного спелла, т.е. кричера на которого триггерный спелл будет наложен, а значит и определять наличие ауры тупо не у кого...
KiriX вне форума   Ответить с цитированием
Старый 16.08.2010, 22:28   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Что-то я не догнал.
Код:
&Aura::HandlePeriodicTriggerSpell,                      // 23 SPELL_AURA_PERIODIC_TRIGGER_SPELL
Код:
void Aura::HandlePeriodicTriggerSpell(bool apply, bool /*Real*/)
{
    m_isPeriodic = apply;

    Unit *target = GetTarget();

    if (!apply)
    {
        switch(GetId())
Есть цель, есть спелл.
Или я снова не понял?
virusav вне форума   Ответить с цитированием
Старый 16.08.2010, 23:03   #5
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Что-то я не догнал.
Код:
&Aura::HandlePeriodicTriggerSpell,                      // 23 SPELL_AURA_PERIODIC_TRIGGER_SPELL
Код:
void Aura::HandlePeriodicTriggerSpell(bool apply, bool /*Real*/)
{
    m_isPeriodic = apply;

    Unit *target = GetTarget();

    if (!apply)
    {
        switch(GetId())
Есть цель, есть спелл.
Или я снова не понял?
Ну во первых - в приведённом куске нам вообще ловить нечего - идём дальше, а именно void Aura::TriggerSpell(), где и происходит сам триггер. А цель там будет только цель самой ауры, которая триггерит нужный спел. А цель этой ауры - self, т.е. тот на ком висит аура, тот, кто её скастовал.
НО! Там идёт такая приблизительно строка:
triggerTarget->CastSpell(triggerTarget, triggeredSpellInfo, true, NULL, this, casterGUID);
Всё бы ничего, но вот незадача - цель спелла 42454 - TARGET_AREAEFFECT_INSTANT. Т.е. пофиг, что указано в triggerTarget - выборка целей идёт в обработке цели TARGET_AREAEFFECT_INSTANT. Можно указать даже triggerTarget=caster - спелл всё равно сработает на того кого надо, отбирая цели в TARGET_AREAEFFECT_INSTANT.
Как я недавно понял, исключение в данном случае для спелла этого нужно делать как раз в обработчике целей. Понятнее так?
KiriX вне форума   Ответить с цитированием
Старый 16.08.2010, 23:48   #6
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Target 7 выбирает мобов по entry.
Надо смотреть на оффе, с какой периодичностью срабатывает.
zergtmn вне форума   Ответить с цитированием
Старый 16.08.2010, 23:55   #7
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от zergtmn Посмотреть сообщение
Target 7 выбирает мобов по entry.
Надо смотреть на оффе, с какой периодичностью срабатывает.
Нифига не понял
Сейчас периодичность не суть - мне интересно как это можно реализовать... предположим, периодичность раз в 5 секунд...
KiriX вне форума   Ответить с цитированием
Старый 23.09.2010, 22:21   #8
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Ап, есть продвижения по данному виду таргета?
Sid вне форума   Ответить с цитированием
Старый 24.09.2010, 10:51   #9
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

А причем тут таргеты - они как-раз даже по описанию правильно отрабатывают
Какая цель может быть у арейного каста - только автоматически выбираемая и выбирается корректно.

По самой проблеме которая как сам KiriX написал связана не с целями:

B рекомендуется читать английские комментарии:
Цитата:
If it helps, l think a lot of the problem stems from the fact that theres actually a 'catpured totem' debuff that gets applied. however, it seems to last perhaps 1-2 seconds, then has a 1 second cooldown or so (hard to tell exactly.) What you can do is time your killing blow for most classes till you see the debuff on the croc, then kill. It took me 3-4 crocs to realize that, but l think that may be partly whats interfering with the pet issue.
l'll edit in a minute to find out the debuff name. It sort of looks like a sunset icon at any rate.
Цитата:
Figured out how this Totem works, the crocodile next to it will receive a "Capture Totem" debuff. You MUST kill the crocodile while they have this debuff to get recognition. It goes on and off the target every 1 seconds or so. Kind of stupid I know...
Так что вообще проблемы не вижу...
__________________
Так как устал объяснять знайте ICQ не пользуюсь

Последний раз редактировалось Vladimir; 24.09.2010 в 11:09.
Vladimir вне форума   Ответить с цитированием
Старый 24.09.2010, 12:03   #10
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Допустим спелл 20553 имеет такие же таргеты (1.12). Применяется боссом Магмадар, в мк (тригерится от пассивной ауры с периодичностью 2 сек и должен накладываться на его аддов, которых надо отводить от самого босса чтобы они не попадали под бафф(дебафф). В итоге накладывается на всех подряд вокруг и именно на врагов - т.е босс кастует этот спел на рейд
Аналогично с рефлектом у Мажордомо, кастит щиты на рейд
Sid вне форума   Ответить с цитированием
Старый 25.09.2010, 08:25   #11
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Проблемы с 20553 связаны с неправильным определением позитивности спела - к изначальной теме никакого отношения все равно нет.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 01.04.2011, 20:01   #12
Den
Ученый
 
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Что-то похожее и у спела 38437 (+ еще таких хватает).
Код:
if (triggerTarget->IsAllTotemSlotsUsed())
    triggerTarget->CastSpell(triggerTarget, 38437, true, NULL, this);
else
    triggerTarget->RemoveAurasDueToSpell(38437);
return;
Получается он вешается на 4 сек. а обновляется через каждые 2 сек.
Может проверку такую выставлять ?
Код:
if (triggerTarget->GetAura(38437, EFFECT_INDEX_0))
    return;

Последний раз редактировалось Den; 01.04.2011 в 20:04.
Den вне форума   Ответить с цитированием
Старый 04.04.2011, 08:08   #13
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Я эту проблему так и не поборол... Забросил, потому что решил реализовать хаково через EventAI. Но затык вышел и там
KiriX вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 12:47. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot