Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   EventAI (http://mangos.ytdb.ru/forumdisplay.php?f=20)
-   -   creature_ai_scripts (http://mangos.ytdb.ru/showthread.php?t=2139)

KiriX 16.08.2010 12:45

creature_ai_scripts
 
Столкнулся тут с квестом... http://ru.wowhead.com/quest=11169
Решил проверить, работает или нет. В YTDB есть спец. скрипт для этого квеста, однако у меня почему-то не работает. На НПС в creature_template_addon висит аура http://ru.wowhead.com/spell=42464. Она прокает спелл. Однако, помню как проходил этот кв на оффе. Тотем прокает спелл вовсе не раз в 2 секунды. Он прокает таким образом, что на цели висит бафф положенных 3 секунды, какое-то время цель без баффа и потом тотем снова прокает нужный спелл. С добавлением ауры мы имеем то, что тотем прокает спелл каждые 2 секунды, обновляя ауру на цели, т.о. бафф на цели будет висеть почти постоянно (хотя и с этом есть глюки).
Решил сделать немного иначе - написать скрипт creature_ai_scripts для тотема, чтобы он просто повесил на себя ауру при спавне (без записи в creature_template_addon).
выяснилось, однако, что EventAI для вызываемых спеллом НПС не работает (если поставить суммонящегося НПС в мире - скрипт пашет как надо).
Почему так, имеет ли смысл лделать поддержку EventAI скриптов для призываемых НПС?

timmit 16.08.2010 13:40

А что тебе мешает поставить через 1 секунду не в бою чтобы кастил не повторяя, тогда будет как надо

rsa 16.08.2010 16:03

Напиши обычный скрипт а не EventAI. Это еще и проще и памяти ест меньше.

KiriX 16.08.2010 16:18

Цитата:

Сообщение от timmit (Сообщение 12673)
А что тебе мешает поставить через 1 секунду не в бою чтобы кастил не повторяя, тогда будет как надо

1) Объясняю - ЭвентАИ на призванных не работает - я так и хотел сделать.
Хотя, думаю проще поправить в ядре триггер спелла. Т.е. если на цели есть уже аура от триггера - return; или там щас вроде fasle; Но дело в том, что см. первое предложение.
Цитата:

Сообщение от rsa (Сообщение 12679)
Напиши обычный скрипт а не EventAI. Это еще и проще и памяти ест меньше.

Да в коде много чего можно проще сделать... Хотелось бы понять почему так, а не иначе в данном случае.

KiriX 02.09.2010 12:41

Хм... Очень интересно...
EventAI для мобов призванных в скриптах типа gossip_scripts работает нормально.
Значит надо копать вызов таких НПС, смотреть где у них добавляется загрузка скрипта и добавлять такую же загрузку скрипта при вызове моба посредством спелл-эффекта...

KiriX 03.09.2010 03:17

Всё ясно, разобрался...
Квест из первого поста. Там дают тотем, итем, при юзе которого вызывается собственно тотем.
На данный момент мангос полагает, что тотем не может иметь EventAI, поэтому при суммоне тотема инициализации EventAI не происходит. Хотя такое вполне может быть, т.к. бывает призыв квестовых тотемов.
Вот так должно поправится нормально (сам ещё не тестировал):
PHP код:

diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 3ad5b93
..fcaf38f 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -6853,+6853,@@ void Spell::DoSummonTotem(SpellEffectIndex eff_idxuint8 slot_dbc)
         
m_caster->_AddTotem(TotemSlot(slot),pTotem);
 
     
pTotem->SetOwner(m_caster->GetGUID());
+    
pTotem->AIM_Initialize();                               // some summon totem can have AI
     
pTotem->SetTypeBySummonSpell(m_spellInfo);              // must be after Create call where m_spells initialized
 
     
int32 duration=GetSpellDuration(m_spellInfo); 


LordJZ 03.09.2010 04:39

Когда протестируете, я думаю стоит предложить патч у нас и на getmangos.com.

virusav 03.09.2010 19:04

TotemAI не подойдет?

Vladimir 04.09.2010 02:02

Код:

Spell::DoSummonTotem
{
    ...
    pTotem->Summon(m_caster);
    ...
}

void Totem::Summon(Unit* owner)
{
    owner->GetMap()->Add((Creature*)this);

    AIM_Initialize();
    ...
}


KiriX 04.09.2010 13:37

Цитата:

Сообщение от Vladimir (Сообщение 13560)
Код:

Spell::DoSummonTotem
{
    ...
    pTotem->Summon(m_caster);
    ...
}

void Totem::Summon(Unit* owner)
{
    owner->GetMap()->Add((Creature*)this);

    AIM_Initialize();
    ...
}


Тем не менее EventAI для призванного тотема не инициализируется и тотем им не обладает...
А во втором случае, как я понимаю AIM инициализируется для "хозяина" - (Unit* owner).

Vladimir 05.09.2010 01:54

AIM_Initialize(); в функции вызывается для тотема...

Vladimir 05.09.2010 02:47

Возможно вы правы в том что имеются отличия AIM_Initialize(); вызове - для тотема с temporarySummon от вызывается после добавления на карту. Это я поправлю.

НО.
Описываемый старый вариант - это конечно через... конкретно.

НО
Вами планируемый вариант не менее хаковский

Цитата:

Сообщение от virusav (Сообщение 13549)
TotemAI не подойдет?

Золотые слова...

Так как пассивные тотемы кастуют при призыве на себя спелл из m_spells[0]
Т.е почему бы просто не добавить в creature_template.spell1 необходимый спелл..

Проверил добавил - кастает - зачем надо было городить все выше обсуждаемое...

По мне так раз тотем то первым делом и надо смотреть как сделать его как тотем...

[added]
Порялок инициализации поправлен в [10444] хотя он и неимеет отношение к данному случаю как выяснилось..

KiriX 05.09.2010 11:46

Столкнулся с проблемой, что не правильно работает спелл, который должен кастовать тотем, решил хаком сделать через EventAI чтобы соответствовало действительности и вот натолкнулся на то, что EventAI для тотемов не пашет.
В первом посту я объяснял, что квестовые тотемы (или тотемы НПС) могут иметь уникальное поведение, да и в любом случае нормальная инициализация EventAI для них точно не помешает...


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

ru-mangos.ru - Русское сообщество MaNGOS