Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Скрипты (http://mangos.ytdb.ru/forumdisplay.php?f=19)
-   -   ВойдЗона (http://mangos.ytdb.ru/showthread.php?t=5122)

ExDragon 13.10.2011 15:46

ВойдЗона
 
Как создать войд(АОЕ) зону...
пс расскажите полный цикл создания..
Например зона которая имеет определённые координаты и определённый ид типа огонь например..

rsa 13.10.2011 19:37

войдзоны - это просто мобы со спец. аурой. что вы хотели о них узнать?

ExDragon 14.10.2011 07:37

Предположим boss_lord_marrowgarAI вызывает doSummon(NPC_COLD_FLAME, X, Y, Z);

То каким должен быть класс mob_coldflameAI
чтобы он создал огонь и держал его некоторое время.. а потом уничтожался.. и при этом у него была аура этой самой войдзоны...

rsa 14.10.2011 09:51

Цитата:

Сообщение от ExDragon (Сообщение 25468)
Предположим boss_lord_marrowgarAI вызывает doSummon(NPC_COLD_FLAME, X, Y, Z);

То каким должен быть класс mob_coldflameAI
чтобы он создал огонь и держал его некоторое время.. а потом уничтожался.. и при этом у него была аура этой самой войдзоны...

вообще-то мой код ICC опубликован полтора года назад и там именно это есть. из него уже только ленивый свою версию не сделал... TC вон довольно неплохо допилили. скоро некоторые мангосдевы перебьют с BSW на тупые SD2 таймеры и объявят результат великой победой SD2 team :)))
Однако лучший пример войдзон - это именно войдзоны из моего же кода RS, тоже полуторагодичной давности (спеллы 74562 и 74792 со всей обвеской). coldflame - довольно специфический моб, он кроме стандартных фич войдзоны еще много чего должен уметь.

MaxXx2021 14.10.2011 14:33

Цитата:

Сообщение от rsa (Сообщение 25469)
вообще-то мой код ICC опубликован полтора года назад и там именно это есть. из него уже только ленивый свою версию не сделал... TC вон довольно неплохо допилили. скоро некоторые мангосдевы перебьют с BSW на тупые SD2 таймеры и объявят результат великой победой SD2 team :)))
Однако лучший пример войдзон - это именно войдзоны из моего же кода RS, тоже полуторагодичной давности (спеллы 74562 и 74792 со всей обвеской). coldflame - довольно специфический моб, он кроме стандартных фич войдзоны еще много чего должен уметь.

Как смешно... :popcorm1: Там помимо таймеров, можно все скрипты на помойку целиком выкинуть. Если кто то реализовывает не думайте, что он берет все от вас.

По теме:
Все очень просто. Берем создает скрипт на невидимого нпц и в Reset() прописываем ему каст ауры, с определенным радиусом действия и дамагом.
Код:

struct MANGOS_DLL_DECL npc_void_stalkerAI : public ScriptedAI
{
    npc_void_stalkerAI(Creature* pCreature) : ScriptedAI(pCreature)
    {
        Reset();
    }

    void Reset()
    {
        m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
        m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
        m_creature->SetRespawnDelay(DAY);
        DoCastSpellIfCan(m_creature, SPELL_VOID_AURA);
    }

    void AttackStart(Unit* pVictim) {}

    void EnterEvadeMode() {}

    void UpdateAI(const uint32 uiDiff) {}
};


Vinolentus 14.10.2011 15:37

MaxXx2021, то, что вы описали, тоже можно сделать через EventAI.

MaxXx2021 14.10.2011 16:03

Цитата:

Сообщение от Vinolentus (Сообщение 25474)
MaxXx2021, то, что вы описали, тоже можно сделать через EventAI.

Можно, я просто уже не помню как делать эвент аи скрипты :)

Vinolentus 14.10.2011 16:34

Зря. Их практически не надо поддерживать. А еще они более-менее верифицируемы. Хотя мы не можем гарантировать, что они работают так, как задумывал автор, мы можем быть уверены в том, что в процессе выполнения скрипта не возникнет нештатной ситуации.

rsa 14.10.2011 18:50

Цитата:

Сообщение от Vinolentus (Сообщение 25476)
Зря. Их практически не надо поддерживать. А еще они более-менее верифицируемы.

Кстати да. Одна из наиболее серьезных причин, по которой я бросил писать скрипты, именно в этом - написание скриптов в SD2 уже атавизм. Все можно (и нужно) делать через EventAI. Спеллы правда придется не хакать скриптом, а чинить в яде, но это правильный путь... Последняя мешавшая полному перегону скриптов в EventAI проблема - отсутствие поддержки энкаунтеров в чистом ядре - недавно решена Laise (пусть и не полностью, но для такого - вполне достаточно).

MaxXx2021 14.10.2011 19:35

Цитата:

Сообщение от rsa (Сообщение 25478)
Кстати да. Одна из наиболее серьезных причин, по которой я бросил писать скрипты, именно в этом - написание скриптов в SD2 уже атавизм. Все можно (и нужно) делать через EventAI. Спеллы правда придется не хакать скриптом, а чинить в яде, но это правильный путь... Последняя мешавшая полному перегону скриптов в EventAI проблема - отсутствие поддержки энкаунтеров в чистом ядре - недавно решена Laise (пусть и не полностью, но для такого - вполне достаточно).

Это какой функционал ЭвентАИ нужен что бы реализовать Сияние Рассвета, Залы Отражений, Воздушный Бой и тд? Молчу про Катаклизм...

ExDragon 15.10.2011 08:16

Код:

void ColdFlamePath(Unit* pTarget)
        {
                int Ply;
                float StartX, StartY, EndX, EndY, AllZ, vStart, vEnd, uX, uY;
               
                // Координаты босса
                StartX = m_creature->GetPositionX();
                StartY = m_creature->GetPositionY();
                // Координаты цели
                EndX = pTarget->GetPositionX();
                EndY = pTarget->GetPositionY();
                // Общая поаерхность
                AllZ = m_creature->GetPositionZ();
                // Вектор
                vStart = StartX - EndX;
                vEnd = StartY - EndY;

                // Число витков
                Ply = sqrt(pow(vStart, 2) + pow(vEnd, 2)) / 8;

                for (int i = 0; i < Ply; i++)
                {
                        uX = StartX - vStart / Ply * i;
                        uY = StartY - vEnd / Ply * i;

                        doSummon(NPC_COLD_FLAME, uX, uY, AllZ);
                }
        }

Я сделал такою вот функцию.. она вообщем прокладывает путь для огня (если кто играл на оффе то видел что там огонь идёт до игрока) но это функция очень быстрая она мгновенна прокладывает.. а мне хочется чтобы она постепенна вызывала как бы с задержкой.. подскажите как это можно сделать..

MaxXx2021 15.10.2011 11:32

Цитата:

Сообщение от ExDragon (Сообщение 25482)
Код:

void ColdFlamePath(Unit* pTarget)
        {
                int Ply;
                float StartX, StartY, EndX, EndY, AllZ, vStart, vEnd, uX, uY;
               
                // Координаты босса
                StartX = m_creature->GetPositionX();
                StartY = m_creature->GetPositionY();
                // Координаты цели
                EndX = pTarget->GetPositionX();
                EndY = pTarget->GetPositionY();
                // Общая поаерхность
                AllZ = m_creature->GetPositionZ();
                // Вектор
                vStart = StartX - EndX;
                vEnd = StartY - EndY;

                // Число витков
                Ply = sqrt(pow(vStart, 2) + pow(vEnd, 2)) / 8;

                for (int i = 0; i < Ply; i++)
                {
                        uX = StartX - vStart / Ply * i;
                        uY = StartY - vEnd / Ply * i;

                        doSummon(NPC_COLD_FLAME, uX, uY, AllZ);
                }
        }

Я сделал такою вот функцию.. она вообщем прокладывает путь для огня (если кто играл на оффе то видел что там огонь идёт до игрока) но это функция очень быстрая она мгновенна прокладывает.. а мне хочется чтобы она постепенна вызывала как бы с задержкой.. подскажите как это можно сделать..

Это садомазахисткий хак... Берем суммоним одного нпц NPC_COLD_FLAME и заставляем двигаться его под углом к игроку на определенное расстояние. Там PersistentAura.

ExDragon 15.10.2011 11:51

и получится что огонёк бежит к игроку.. а мне нужна полоса огня..

MaxXx2021 15.10.2011 11:54

Цитата:

Сообщение от ExDragon (Сообщение 25484)
и получится что огонёк бежит к игроку.. а мне нужна полоса огня..

Там персистент аура :(. Аура оставляющая динамический обьект и дамаг с огнем вокруг него. У огня лорда марровгара нет визульной формы он просто бежит и оставляет каждые 0.2с на своем месте динамический обьект.
Код:

void Reset()
{
    m_creature->CastSpell(m_creature, SPELL_COLD_FLAME_AURA, false);
    m_creature->GetMotionMaster()->MovePoint(0, X, Y, Z);
}

Код:

    SPELL_COLD_FLAME_AURA                  = 69145,
этого достаточно чтобы были постепенно нарастающие полосы. Только вам как минимум придется два спелла в ядре починить.

ExDragon 15.10.2011 12:10

А где спеллы в ядре?..

MaxXx2021 15.10.2011 12:24

Цитата:

Сообщение от ExDragon (Сообщение 25486)
А где спеллы в ядре?..

да, http://github.com/bwsrv/mangos/commits/master можете тут поискать эти спеллы, я их уже правил.

ExDragon 15.10.2011 12:31



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

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