Ru-MaNGOS

Вернуться   Ru-MaNGOS > Дополнения > Скрипты

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

Скрипты ScriptDev2

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.10.2010, 05:46   #1
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию [Fix]EscortAI

Ну начну с того что поправил одну ошибку в эскорте, а именно что когда ставим паузу эскорту и к примеру на эскортера нападают, то при выходе из комбата он бежит месту спауна в базе. Щас, при паузе, он будет бежать к месту начала атаки.
Вторая модификация. Незнаю как на оффе (я сужу по другим играм), если игрок отстает от эскортера он останавливается, поворачивается к игроку и ждет его (радиус отставания я сделал 28), подбегаем к нему на расстояние 10 он снова начинает бежать. Думаю это будет гораздо лудше чем он умрет. Делал на основе курицы в танарисе . Она бежит через всех мобов на пролом, пока их убьешь курица в деспавн уйдет. Для того чтобы функция была активна указываем при старте эскорта гуид игрока. Start(true, pPlayer->GetGUID());
Для того чтобы эскортер игнорировал остановку и не ждал, пишем так Start(true);
Сразу говорю я гитом не пользуюсь и черепахой, escort.cpp полностью.
Вложения
Тип файла: rar NewEscortAI.rar (4.6 Кб, 409 просмотров)
MaxXx2021 вне форума   Ответить с цитированием
Старый 18.10.2010, 06:14   #2
alien
Ученый
 
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
alien На верном пути
По умолчанию

Цитата:
Незнаю как на оффе (я сужу по другим играм), если игрок отстает от эскортера он останавливается, поворачивается к игроку и ждет его (радиус отставания я сделал 28), подбегаем к нему на расстояние 10 он снова начинает бежать
На оффе моб некого не ждет. Если он доходит до финальной точки, а игрока нету то квест провален. Если по пути его убивают(из-за того что игрока небыло рядом или он не помого) то квест тоже провален.
alien вне форума   Ответить с цитированием
Старый 18.10.2010, 06:17   #3
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от alien Посмотреть сообщение
На оффе моб некого не ждет. Если он доходит до финальной точки, а игрока нету то квест провален. Если по пути его убивают(из-за того что игрока небыло рядом или он не помого) то квест тоже провален.
Я про убийство не говорю я про то что если моб спокойно бежит, то он останавливается подождать если игрок отбегает через чур далеко он деспавнится
MaxXx2021 вне форума   Ответить с цитированием
Старый 18.10.2010, 06:25   #4
SeT
Ученый
 
Аватар для SeT
 
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
SeT На верном пути
По умолчанию

Цитата:
Сообщение от MaxXx2021 Посмотреть сообщение
Я про убийство не говорю я про то что если моб спокойно бежит, то он останавливается подождать если игрок отбегает через чур далеко он деспавнится
нет такого на оффе.
SeT вне форума   Ответить с цитированием
Старый 18.10.2010, 06:28   #5
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от SeT Посмотреть сообщение
нет такого на оффе.
Эххх ну да ладно оставлю для себя
MaxXx2021 вне форума   Ответить с цитированием
Старый 18.10.2010, 18:24   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В СД2 при сопровождении нпц идет по точкам с паузами, если они есть.
При вхождении нпц в бой в точке 3, после окончания боя он вернется в точку 3 и продолжит путь к точке 4.

Упомянутый квест на курицу в Танарисе и подобные ему работают именно так (те, что мне довелось выполнять).
virusav вне форума   Ответить с цитированием
Старый 19.10.2010, 04:55   #7
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
В СД2 при сопровождении нпц идет по точкам с паузами, если они есть.
При вхождении нпц в бой в точке 3, после окончания боя он вернется в точку 3 и продолжит путь к точке 4.

Упомянутый квест на курицу в Танарисе и подобные ему работают именно так (те, что мне довелось выполнять).
Пример, битва за подгород. Ведем Тралла до двора ставим эскорту SetEscortPause(true);
Тралл входит в бой, ну скажем игроки более одеты, тралл выходит из комбата и бежит к месту спауна в базе, что потверждает данный текст
Код:
void npc_escortAI::EnterEvadeMode()
{
    m_creature->RemoveAllAuras();
    m_creature->DeleteThreatList();
    m_creature->CombatStop(true);
    m_creature->SetLootRecipient(NULL);

    if (HasEscortState(STATE_ESCORT_ESCORTING))
    {
        debug_log("SD2: EscortAI has left combat and is now returning to CombatStartPosition.");

        if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
        {
            AddEscortState(STATE_ESCORT_RETURNING);

            float fPosX, fPosY, fPosZ;
            m_creature->GetCombatStartPosition(fPosX, fPosY, fPosZ);
            m_creature->GetMotionMaster()->MovePoint(POINT_LAST_POINT, fPosX, fPosY, fPosZ);
        }
    }
    else
    {
        if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
            m_creature->GetMotionMaster()->MoveTargetedHome();
    }

    Reset();
}
из которого видно что при HasEscortState(STATE_ESCORT_ESCORTING)
он начинает движение.
А если будет HasEscortState(STATE_ESCORT_PAUSED) куда он побежит?
MaxXx2021 вне форума   Ответить с цитированием
Старый 19.10.2010, 19:32   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Надо еще в базе посмотреть, назначен ли ему АИ-скрипт, т.к. часто скрипты СД2 и АИ идут вместе, о чем пишется в коммитах на форуме СД2.
Если АИ есть, то это может сильно изменить общее поведение заскриптованного нпц.
virusav вне форума   Ответить с цитированием
Старый 21.10.2010, 05:45   #9
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Надо еще в базе посмотреть, назначен ли ему АИ-скрипт, т.к. часто скрипты СД2 и АИ идут вместе, о чем пишется в коммитах на форуме СД2.
Если АИ есть, то это может сильно изменить общее поведение заскриптованного нпц.
Это я знаю И всегда обнуляю поле ЕвентАИ, при выставление СкриптНэйм. Дело в самом коде эскорта, что пауза не учитана в EnterEvadeMode()
Код:
void npc_escortAI::EnterEvadeMode()
{
    m_creature->RemoveAllAuras();
    m_creature->DeleteThreatList();
    m_creature->CombatStop(true);
    m_creature->SetLootRecipient(NULL);

    if (HasEscortState(STATE_ESCORT_ESCORTING) || HasEscortState(STATE_ESCORT_PAUSED))
    {
        debug_log("SD2: EscortAI has left combat and is now returning to CombatStartPosition.");

        if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
        {
            float fPosX, fPosY, fPosZ;
            m_creature->GetCombatStartPosition(fPosX, fPosY, fPosZ);

            if(!HasEscortState(STATE_ESCORT_PAUSED))
            {
               AddEscortState(STATE_ESCORT_RETURNING);
               m_creature->GetMotionMaster()->MovePoint(POINT_LAST_POINT, fPosX, fPosY, fPosZ);
            }
             else
               m_creature->GetMotionMaster()->MovePoint(0, fPosX, fPosY, fPosZ);
        }
    }
    else
    {
        if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
            m_creature->GetMotionMaster()->MoveTargetedHome();
    }

    Reset();
}
Вот так я решил эту проблему.
MaxXx2021 вне форума   Ответить с цитированием
Ответ


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

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



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


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