Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   Вопрос-ответ(Нужная тема) (http://mangos.ytdb.ru/showthread.php?t=8103)

Felzewell 19.07.2014 17:48

Вопрос-ответ(Нужная тема)
 
Добрый день уважаемые. Хотелось бы узнать у Вас о парочке важных для меня вещей. Описываю чтоб меня поняли правильно: Скриптую (а точнее пробую) Тюрьму Штормграда(Не смейтесь сильно)) я новичок, начинать с чего то надо...) В общем много чего заскриптовал удачно, но столкнулся с парочкой проблем:
1 босс. Рэндольф Молох:
-Можно ли через:
Код:

void ReceiveEmote
заставить моба после аггро сделать поклон ? Если да, то если не составит труда дайте пример или укажите где его искать.
-Когда он использует http://ru.wowhead.com/spell=55964 на оффе происходит визуальный эффект на подобие маленького вихря, но у меня он просто исчезает и все... (добавлял способность себе: эффект вихря присутствует, у моба по прежнему нету(
-При использовании того же самого спелла http://ru.wowhead.com/spell=55964, босс после первого исчезновения(75% хп) появляется со 100% и снова произносит фразу аггро и нападает, при втором ванише(35%) он появляеться с 75% хп и опять кидает фразу аггро, и только после этого его можно добить оканчательно... в общем кидаю код. Буду очень благодарен за любую помощь!
Код:

//Created by BeingHuman (Felzewell)

/* ScriptData
SDName: Boss_Randolph
SD%Complete: 70%
SDComment: Исправить скилл Vanish решить проблему с его эффектом, добавить как нибудь поклон в начале...
SDCategory: Stockade
EndScriptData */

#include "precompiled.h"
#include "stockade.h"

enum
{
    SAY_AGGRO                                                = -1800000,
    SAY_DEATH                                                = -1800001,
        SAY_VANISH                                                = -1800002,

    SPELL_WILDLY_STABBING                        = 86726,
    SPELL_SWEEP                                                = 86729,
    SPELL_VANISH                                        = 55964,
};

struct MANGOS_DLL_DECL boss_randolphAI : public ScriptedAI
{
    boss_randolphAI(Creature* pCreature) : ScriptedAI(pCreature)
        {
                m_pInstance = (instance_stockade*)pCreature->GetInstanceData();
                Reset();
        }

        instance_stockade* m_pInstance;
    uint32 m_uiWildlyStabbingTimer;
        uint32 m_uiSweepTimer;
        uint32 m_uiVanishTimer;
        bool m_bFirstVanish;
        bool m_bSecondVanish;

    void Reset() override
    {
        m_uiWildlyStabbingTimer = 3000;
                m_uiSweepTimer                        = 6000;
                m_uiVanishTimer                        = 0;
                m_bFirstVanish                        = false;
                m_bSecondVanish                        = false;
    }

        void Aggro(Unit* /*pWho*/) override
    {
        DoScriptText(SAY_AGGRO, m_creature);

        if (m_pInstance)
            m_pInstance->SetData(TYPE_RANDOLPH, IN_PROGRESS);
    }

        void JustDied(Unit* /*pKiller*/) override
    {
        DoScriptText(SAY_DEATH, m_creature);

        if (m_pInstance)
            m_pInstance->SetData(TYPE_RANDOLPH, DONE);
    }

    void JustReachedHome() override
    {
        if (m_pInstance)
            m_pInstance->SetData(TYPE_RANDOLPH, FAIL);
    }

    void AttackedBy(Unit* pAttacker) override
    {
        if (m_creature->getVictim())
            return;

        AttackStart(pAttacker);
    }

    void AttackStart(Unit* pWho) override
    {

        if (m_creature->Attack(pWho, true))
        {
            m_creature->AddThreat(pWho);
            m_creature->SetInCombatWith(pWho);
            pWho->SetInCombatWith(m_creature);

            m_creature->GetMotionMaster()->MoveChase(pWho);
        }
    }

    void MovementInform(uint32 uiMotionType, uint32 /*uiPointId*/) override
    {
        if (uiMotionType != POINT_MOTION_TYPE)
            return;

        m_creature->SetSheath(SHEATH_STATE_UNARMED);
        m_creature->SetStandState(UNIT_STAND_STATE_KNEEL);
    }

        void UpdateAI(const uint32 uiDiff) override
    {

        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;

                //Wildly Stabbing
                if (m_uiWildlyStabbingTimer < uiDiff)
        {
            if (DoCastSpellIfCan(m_creature, SPELL_WILDLY_STABBING) == CAST_OK)
                m_uiWildlyStabbingTimer = urand(20000, 25000);
        }
        else
            m_uiWildlyStabbingTimer -= uiDiff;

                //Sweep
                if (m_uiSweepTimer < uiDiff)
        {
            if (DoCastSpellIfCan(m_creature, SPELL_SWEEP) == CAST_OK)
                m_uiSweepTimer = urand(10000, 12000);
        }
        else
            m_uiSweepTimer -= uiDiff;

                //Vanish
                if (!m_bFirstVanish && m_creature->GetHealthPercent() <= 65.0f)
        {
          if (DoCastSpellIfCan(m_creature, SPELL_VANISH) == CAST_OK)
            {
                                DoScriptText(SAY_VANISH, m_creature);
                m_bFirstVanish = true;
                                m_uiVanishTimer = 5000;
            }
        }
                else
                        m_uiVanishTimer -= uiDiff;

                if (!m_bSecondVanish && m_bFirstVanish && m_creature->GetHealthPercent() <= 35.0f)
        {
          if (DoCastSpellIfCan(m_creature, SPELL_VANISH) == CAST_OK)
            {
                                DoScriptText(SAY_VANISH, m_creature);
                m_bSecondVanish = true;
                                m_uiVanishTimer = 5000;
            }
        }
                else
                        m_uiVanishTimer -= uiDiff;

        DoMeleeAttackIfReady();
    }

};

CreatureAI* GetAI_boss_randolph(Creature* pCreature)
{
    return new boss_randolphAI(pCreature);
}

void AddSC_boss_randolph()
{
    Script* pNewScript;

    pNewScript = new Script;
    pNewScript->Name = "boss_randolph";
    pNewScript->GetAI = &GetAI_boss_randolph;
    pNewScript->RegisterSelf();
}

2. Не могли бы вы подсказать или указать примером как реализовать движение моба из точки в точку(пример та же самая тюрьма штормграда, НПС из одной точки появляеться во второй, а уже из второй идет/бежит в третью)Заранее благодарен за любую помощь.Спасибо за внимание.

Karazhan 21.07.2014 19:53

Цитата:

-При использовании того же самого спелла http://ru.wowhead.com/spell=55964, босс после первого исчезновения(75% хп) появляется со 100% и снова произносит фразу аггро и нападает, при втором ванише(35%) он появляеться с 75% хп и опять кидает фразу аггро, и только после этого его можно добить оканчательно... в общем кидаю код. Буду очень благодарен за любую помощь!
EnterEvadeMode в вашем скрипте отсутствует. Используется стандартный ScriptedAI.
Код:

void ScriptedAI::EnterEvadeMode()
{
    m_creature->RemoveAllAurasOnEvade(); удаление всех аур при эвейде, исключая CONTROL_VEHICLE and FLY.
    m_creature->DeleteThreatList(); удаляет весь лист угрозы.
    m_creature->CombatStop(true); бой останавливается полностью. Вот и ответ.

    if (m_creature->isAlive())
        m_creature->GetMotionMaster()->MoveTargetedHome();

    m_creature->SetLootRecipient(NULL);

    Reset();
}

В СД2 оверрайдят эвейд мод для определённого босса(жаль EAI того не умеет)
Код:

void EnterEvadeMode() override
    {
        // Don't evade during vanish phase
        if (m_creature->HasAura(SPELL_VANISH)
            return;

        ScriptedAI::EnterEvadeMode();
    }

Вот попробуйте заоверрайдить(переписать тоесть). При наличии этой ауры не должен уходить в эвейд.
Брал пример со скрипта Мороуза. override добавлять обязательно.
По поводу поклона - есть функция.
Код:

void ScriptedAI::EnterCombat(Unit* pEnemy)
{
    if (pEnemy)
        Aggro(pEnemy);
}

Может она вам поможет.
По поводу движения моба есть 2 пути. Creature_movement_template. Или EscortAI. Также есть db_script_on_creature_movement.

Felzewell 22.07.2014 22:46

Премного благодарен) Надо будет пробовать, надеюсь поможет

Karazhan 30.07.2014 21:58

Ну как, помогло?

Felzewell 31.07.2014 13:17

к сожалению... нет... Моих знаний к сожалению мало но я пытался сделать как вы говорили:
Код:

        void EnterEvadeMode() override
    {
        // Don't evade during vanish phase
        if (m_creature->HasAura(SPELL_VANISH))
            return;

                m_creature->CombatStop(false);

        ScriptedAI::EnterEvadeMode();
    }

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

Karazhan 02.08.2014 21:14

Эмоции на Катаклизме работают через раз - я на Рагнаросе заметил это. По поводу ваниша - хз у Xfurry вроде работало.

Karazhan 01.11.2014 18:09

Код:

                m_creature->CombatStop(false);
Вам не стоит это добавлять. Вы же оверрайдите EvadeMode. Нашёл примерно похожий примерчик.
Код:

void AttackStart(Unit* pWho) override
    {
        // Don't attack while banished
        if (m_creature->HasAura(SPELL_LEOTHERAS_BANISH))
            return;

        ScriptedAI::AttackStart(pWho);
    }

if(если) (m_creature - то есть само существо(так обозначают в Мангосе)->указатель
HasAura(имеет ауру) -SPELL_LEOTHERAS_BANISH(номера теперь не обозначают, берут из enum)
return; - идёт возврат.
Тоесть Слепец имеет ауру - атаку не начнёт. Аура исчезла - бой начнёт с помощью
Код:

ScriptedAI::AttackStart(pWho);
Эксперты кода поправьте меня пожалуйста, если я ошибаюсь.

Den 01.11.2014 21:30

Я не эксперт, но и поправлять тут нечего, обычная проверка на ауру.

Цитата:

номера теперь не обозначают, берут из enum
Это для понятности и удобства.

Karazhan 02.11.2014 08:52

Код:

void EnterEvadeMode() override
    {
        // Don't evade during vanish phase
        if (m_creature->HasAura(SPELL_VANISH)
            return;

        ScriptedAI::EnterEvadeMode();
    }

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

Karazhan 08.02.2015 07:23

Прошу прощения Felzewell
Код:

void EnterEvadeMode() override
    {
        // Don't evade if the boss has the ember blast invisibility aura
        if (m_creature->HasAura(SPELL_EMBER_BLAST))
            return;

        ScriptedAI::EnterEvadeMode();
    }

https://github.com/scriptdev2/script..._alar.cpp#L174
Вот эта проверка работает(тоже проверка на ауру) - сделайте также и просьба не ставьте CombatStop(false)
Если вы конечно ещё этим занимаетесь)
P.S: Рагнаросу бы тоже наверное стоит впаять.
Код:

void EnterEvadeMode() override
    {
        // Don't evade during vanish phase
        if (m_uiPhase == PHASE_SUBMERGED)
            return;

        ScriptedAI::EnterEvadeMode();
    }

На оффициалке(в хард мод режиме) после 2 переходок и при достижении 10 процентов хп Рагна сваливает под лаву и появляются три архидруида. Вопрос если сбросить комбат(элементарной командой .combat stop) Рагна уйдёт в эвейд или же он пока не наступит героическая фаза с ногами он не сможет этого сделать? Ни разу не удалось узнать.

ANGELCMEPTI 11.06.2015 01:48

Добрый день, 5 лет не прикасался к эмулю вова, сейчас решил собрать кату. Собрал всё по гайду (под ubuntu), накатил последнюю базу YTDB, собиралось всё вроде бы гладко, но при запуске сервака сыпится немало ошибок, и в игре большая часть квестов не работает. Больше всего пугает, что у рог вообще не появляются комбо поинты...

Собственно у меня вопрос: так и должно быть и это нынешнее состояние каты, или я что-то упустил при сборке сервака?

Amaru 13.06.2015 00:52

Цитата:

Сообщение от ANGELCMEPTI (Сообщение 33991)
Добрый день, 5 лет не прикасался к эмулю вова, сейчас решил собрать кату. Собрал всё по гайду (под ubuntu), накатил последнюю базу YTDB, собиралось всё вроде бы гладко, но при запуске сервака сыпится немало ошибок, и в игре большая часть квестов не работает. Больше всего пугает, что у рог вообще не появляются комбо поинты...

Собственно у меня вопрос: так и должно быть и это нынешнее состояние каты, или я что-то упустил при сборке сервака?

Нужно патчить клиент. Но как патчить, никто не говорит

ANGELCMEPTI 13.06.2015 18:29

Цитата:

Сообщение от Amaru (Сообщение 33996)
Нужно патчить клиент. Но как патчить, никто не говорит

Я в курсе что нужно заменить wow.exe на пропатченый, без этого в игре вообще ничего не работает, ни один скил, ни один моб. У меня заменён и после этого уже описанная мною ситуация... Или там что-то ещё пропатченное должно быть?

ANGELCMEPTI 14.06.2015 01:35

Цитата:

Сообщение от ANGELCMEPTI (Сообщение 33997)
Я в курсе что нужно заменить wow.exe на пропатченый, без этого в игре вообще ничего не работает, ни один скил, ни один моб. У меня заменён и после этого уже описанная мною ситуация... Или там что-то ещё пропатченное должно быть?

Хотя поискав так сервера каты везде пишут, что нужно только скачать пропатченный wow.exe.

ANGELCMEPTI 16.06.2015 00:16

Так же хочу спросить разработчиков ядра, кто-нибудь может объяснить в чём заключалась идея таблицы npc_trainer_template? Я не совсем понимаю её смысл и отличие от npc_trainer. Сейчас эта таблица не используется (по крайней мере в YTDB базе).

Собственно интересуюсь т.к. появилась идея переписать немного механизм работы этих таблиц для того, что бы корректно работали наставники профессий.

virusav 16.06.2015 09:35

Если более одного нпц обучают одним и тем же спеллам, например, за разные расы, то создается один шаблон.

Dubstep 26.06.2015 00:38

хз где спросить, но по пробую тут. YTDB будет поддерживать WoD?

YuruY 26.06.2015 07:43

А cMangos?

lovepsone 26.06.2015 19:21

Цитата:

Сообщение от Dubstep (Сообщение 34010)
хз где спросить, но по пробую тут. YTDB будет поддерживать WoD?

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

Dubstep 26.06.2015 23:50

Цитата:

Сообщение от YuruY (Сообщение 34011)
А cMangos?

Есть же тринити, вы делали и там и там :)

YuruY 27.06.2015 19:40

Ну у них же своя база, они самые крутые.)
Про тринку писать и спрашивать тут по крайней мере не логично.

Для меня это второстепенно, после того как есть мангос.

У меня база и под Панд есть, и что толку, по привычке собираю все сниффы, ядра то нет.
ВоД тоже упорно сниффается, до 6.2.0х, почти фулл отсниффано, не собирал еще, пока смысла нет т.к. билды двигаются и много чего меняется.
Да и мало кому это нужно, помогают в сборе новинок пару человек всего, тоже видимо по старой привычке.)
Все остальные ждут только готовое, даже кешами хер кто помогает.(

Dubstep 27.06.2015 21:59

Цитата:

Сообщение от YuruY (Сообщение 34015)
Ну у них же своя база, они самые крутые.)
Про тринку писать и спрашивать тут по крайней мере не логично.

Для меня это второстепенно, после того как есть мангос.

У меня база и под Панд есть, и что толку, по привычке собираю все сниффы, ядра то нет.
ВоД тоже упорно сниффается, до 6.2.0х, почти фулл отсниффано, не собирал еще, пока смысла нет т.к. билды двигаются и много чего меняется.
Да и мало кому это нужно, помогают в сборе новинок пару человек всего, тоже видимо по старой привычке.)
Все остальные ждут только готовое, даже кешами хер кто помогает.(

т.е как я понял вы скорее всего тринити не будете поддерживать. Тогда такой вопрос: сниффами вы не поделитесь?:) Интересует вод

YuruY 28.06.2015 06:05

Цитата:

сниффами вы не поделитесь? Интересует вод
Сниффер вам в руки. Берите да сниффайте, кто мешает?

Dubstep 28.06.2015 09:13

мешает время :), а точнее его отсутствие на "взять сниффер не побегать" )

YuruY 29.06.2015 14:42

А у кого оно есть то.

Dubstep 30.06.2015 13:51

Ну так у вас уже есть снифы :)

YuruY 30.06.2015 16:42

Они много у кого есть, и что?


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

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