18.10.2010, 05:46 | #1 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
[Fix]EscortAI
Ну начну с того что поправил одну ошибку в эскорте, а именно что когда ставим паузу эскорту и к примеру на эскортера нападают, то при выходе из комбата он бежит месту спауна в базе. Щас, при паузе, он будет бежать к месту начала атаки.
Вторая модификация. Незнаю как на оффе (я сужу по другим играм), если игрок отстает от эскортера он останавливается, поворачивается к игроку и ждет его (радиус отставания я сделал 28), подбегаем к нему на расстояние 10 он снова начинает бежать. Думаю это будет гораздо лудше чем он умрет. Делал на основе курицы в танарисе . Она бежит через всех мобов на пролом, пока их убьешь курица в деспавн уйдет. Для того чтобы функция была активна указываем при старте эскорта гуид игрока. Start(true, pPlayer->GetGUID()); Для того чтобы эскортер игнорировал остановку и не ждал, пишем так Start(true); Сразу говорю я гитом не пользуюсь и черепахой, escort.cpp полностью. |
18.10.2010, 06:14 | #2 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Цитата:
|
|
18.10.2010, 06:17 | #3 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Я про убийство не говорю я про то что если моб спокойно бежит, то он останавливается подождать если игрок отбегает через чур далеко он деспавнится
|
18.10.2010, 06:25 | #4 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
|
18.10.2010, 06:28 | #5 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
18.10.2010, 18:24 | #6 |
Администратор
|
В СД2 при сопровождении нпц идет по точкам с паузами, если они есть.
При вхождении нпц в бой в точке 3, после окончания боя он вернется в точку 3 и продолжит путь к точке 4. Упомянутый квест на курицу в Танарисе и подобные ему работают именно так (те, что мне довелось выполнять). |
19.10.2010, 04:55 | #7 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
Тралл входит в бой, ну скажем игроки более одеты, тралл выходит из комбата и бежит к месту спауна в базе, что потверждает данный текст Код:
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_PAUSED) куда он побежит? |
|
19.10.2010, 19:32 | #8 |
Администратор
|
Надо еще в базе посмотреть, назначен ли ему АИ-скрипт, т.к. часто скрипты СД2 и АИ идут вместе, о чем пишется в коммитах на форуме СД2.
Если АИ есть, то это может сильно изменить общее поведение заскриптованного нпц. |
21.10.2010, 05:45 | #9 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
Код:
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(); } |
|