Тема: [Fix]EscortAI
Показать сообщение отдельно
Старый 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 вне форума   Ответить с цитированием