• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.
Закладки 1 Закладки

Автор Тема: Туториал: NPC, лошади и вы  (Прочитано 1456 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Туториал: NPC, лошади и вы
« : 11 Декабрь, 2006, 08:29:59 »
+1
Источники:
  TES CS Wiki:  NPC, Horses and you...
  Rumor Wiki:  Персонажи, лошади и вы...
Перевод: Gwathlobal


Персонажи, лошади и вы...

Вступление
Это руководство не предназначено для новичков, а для людей, которые сразу же после создания первого NPC начали биться об одну и ту же чертову стену... Когда они в изобилии сыплют словами, вроде «ДА ЗАЛЕЗАЙ ТЫ НА ЭТОГО ***!» или «НУ СЛЕЗЬ ЖЕ ТЫ, НАКОНЕЦ, С ЭТОЙ ***!». Если один из этих людей – вы, то, возможно, вам поможет это руководство.

Его цель следующая...
• Заставить ваших NPC залезать на лошади, когда вы это делаете
• Заставить ваших NPC слезать с лошади, когда вы это делаете
Это не:
• Я уверен, самое лучшее решение проблемы.
• Не быстрое или оптимизированное решение.
• Не самое понятное решение.
Ну, что ж, приступим, помолясь...


Важные факторы
После нескольких часов тестов я, кажется, понял, как взаимодействуют NPC и лошади. Возможно, что-то нижеследующее неточно или даже не верно; неважно, для меня это были ключи, открывающие тайны NPC, лошадей и вас. ;)
• NPC верно реагируют на пакет TRAVEL с включенным флагом 'Use Horse' и взбираются на лошадь. Пакет FOLLOW с 'Use Horse' , похоже, не заставляет NPC залезать на лошадь.
• Соответственно, NPC верно реагируют на пакет TRAVEL с выключенным флагом и слезают с лошади, если на ней были; Опять же, пакет FOLLOW не работает.
• В отличие от залезания, слезание не срабатывает от функции addScriptPackage. Вместо этого, оно активируется командой evaluatePackage (evp).

Пакеты
Для вашего NPC вам нужно четыре пакта ИИ:

• ПАКЕТ 1 - TRAVEL
  • ИМЯ: 'travelToHorse'
  • ЦЕЛЬ: Заставить NPC двигаться к лошади. Когда NPC достаточно близко к лошади, флаг USE HORSE будет задействован и NPC оседлает лошадь.
  • ХРАНЕНИЕ: Вне списка пакетов NPC
  • ФЛАГИ
    • Use Horse
  • LOCATION(МЕСТО): HorseType (напр:E3Horse)
• ПАКЕТ 2 - FOLLOW
  • ИМЯ: 'followOnHorse'
  • ЦЕЛЬ: После того как NPC залез на лошадь, активируется этот пакет, и NPC будет следовать за игроком.
  • ХРАНЕНИЕ: Вне списка пакетов NPC
  • ФЛАГИ
    • Use Horse
  • TARGET(ЦЕЛЬ): ('Abandoned Mine','PlayerRef')
    • DISTANCE (ДИСТАНЦИЯ): 350 (используется в главных квестах)
• ПАКЕТ 3 - TRAVEL
  • ИМЯ: 'travelToPlayer'
  • ЦЕЛЬ: Заставляет NPC спешиться и идти к игроку.
  • ХРАНЕНИЕ: Первый в списке пакетов NPC
  • УСЛОВИЯ: getScriptVariable( CELL , dismountFlag )==1 and isRidingHorse==1
    • Где CELL начальная ячейка, где был создан NPC, используйте USE INFO на NPC, что это определить.
  • LOCATION(МЕСТО): Player
• ПАКЕТ 4 - FOLLOW
  • ИМЯ: 'followOnFoot'
  • ЦЕЛЬ: Заставляет NPC следовать за игрокам пешком.
  • ХРАНЕНИЕ: Вне списка пакетов NPC
  • TARGET(ЦЕЛЬ): Player
    • DISTANCE(ДИСТАНЦИЯ): 0 (по умолчанию)
Скрипт
Этот скрипт должен быть включен в главный скрипт NPC:

float mountTimer
short isMountTimerOn
short mounted
short dismountFlag

begin gamemode
  ;секция для спешивания
   if mounted == 1
     if Player.IsRidingHorse == 0
       if IsRidingHorse == 0
         Message "NPC спешился"
         set dismountFlag to 0
         set mounted to 0
         set isMountTimerOn to 0
         set mountTimer to 0
         addScriptPackage followOnFoot
       else
         if isMountTimerOn == 0
           Message "Пытаюсь заставить NPC спешиться"
           set isMountTimerOn to 1
           set mountTimer to 3
           set dismountFlag to 1
           evp
         else
           if mountTimer <= 0
             Message "Время dismountTimer истекло"
             set mountTimer to 3
             evp
           else
             set mountTimer to mountTimer - getSecondsPassed
           endif
         endif
       endif
     else; следим за временем
       if isRidingHorse == 0;NPC удалось спешиться
         Message "Игрок спешился вне очереди, NPC спешился"
         addScriptPackage followOnFoot
         set isMountTimerOn to 0
         set mountTimer to 0
         set dismountFlag to 0
         set mounted to 0
       else
         if isMountTimerOn == 1;NPC все еще пытается спешиться
           Message " Игрок спешился вне очереди, таймер не истек."
           removeScriptPackage
           addScriptPackage followOnHorse
           set isMountTimerOn to 0
           set mountTimer to 0
           set dismountFlag to 0
         endif
       endif
     endif
   endif

  ;секция для залезания на лошадь
   if mounted == 0
     if Player.isRidingHorse==1
       if isRidingHorse==1
         Message "NPC залез на лошадь"
         set mounted to 1
         set isMountTimerOn to 0
         set mountTimer to 0
         addScriptPackage followOnHorse
       else
         if isMountTimerOn == 0
           Message "Пытаюсь заставить NPC залезть на лошадь"
           set isMountTimerOn to 1
           set mountTimer to 3
           addScriptPackage travelToHorse
         else
           if isMountTimerOn <= 0
             Message "Таймер mountTimer истек"
             set mountTimer to 3
             addScriptPackage travelToHorse
           else
             set mountTimer to mountTimer - getSecondsPassed
           endif
         endif
       endif
     else; следим за временем
       if isRidingHorse == 1;NPC удалось залезть на лошадь
         Message "Игрок залез на лошадь вне очереди, NPC залез на лошадь."
         addScriptPackage followOnHorse
         set isMountTimerOn to 0
         set mountTimer to 0
         set mounted to 1
       else
         if isMountTimerOn == 1; здесь NPC еще не залез на лошадь
           Message " Игрок залез на лошадь вне очереди, таймер не истек."
           removeScriptPackage
           addScriptPackage followOnFoot
           set isMountTimerOn to 0
           set mountTimer to 0
         endif
       endif
     endif
   endif
End

Предупреждения и примечания

Предупреждения
• Скрипт предполагает, что лошадь для NPC находится рядом, иначе, вы можете долго ждать, пока он до нее добежит. Можно использовать функцию getDistance, чтобы определить, пошел ли к ней NPC или нет.
• Очевидно, что NPC должен владеть лошадью, прямо или через фракцию.
• Я использовал уникальный ID для лошади 'E3Horse', так что NPC не будет обращать внимание на других лошадей.
• Не используйте 'continue when PC is near' в 'Пакете 2' или NPC никогда не спешится.

Примечания
• Переменная 'mounted' типа short установлена в 0. Это переключатель, чтобы я знал, что надо менять пакеты.
• Переменная mounted используется дл залезания и слезания с лошади, а dismountFlag – это особый индикатор, используемый только для одного пакета, и только во время спешивания.
• Вам, должно быть, интересно, зачем мне таймер... хе-хе... потому, что эти гребаные NPC постоянно забывают, что им нужно делать. Иногда вы увидите, что они сдвинутся и остановятся, а потом появится сообщение "время вышло" и они снова сдвинутся. ;)
Награды За огромный вклад в развитие Румора

Оффлайн Luna

  • Распорядитель ФА
  • *
  • *
  • Сообщений: 2261
  • Репутация: 71.5
  • Пол: Женский
    • Просмотр профиля
    • Имперский Город
    • Email
Re: Туториал: NPC, лошади и вы
« Ответ #1 : 28 Октябрь, 2011, 06:10:48 »
+1
ой.. какой большущий скрипт.. зато все предусмотрено.  :yes:

 :PS: я чуть попроще делаю. правда, и НПС там получается менее сообразительный, не сразу понимает, что ГГ слез с лошади, только когда тот в какую-то дверь заходит, но, в принципе, для игры с компаньоном вполне достаточно оказывается.
я в поле результирующего скрипта топика "Следуй за мной" в диалоге ставлю

RemoveScriptPackage
 if ( player.IsRidingHorse == 0 )
 AddScriptPackage aaaSelFollow2
 else
 AddScriptPackage aaaSelenaFollow
 endif

и вполне внятно работает.
Награды Участникам бета-тестов TESO За упорство в ожидании окончания 2х-недельной загрузки файлов TESO За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Re: Туториал: NPC, лошади и вы
« Ответ #2 : 29 Октябрь, 2011, 02:10:21 »
0
Спасибо, Luna. Было бы неплохо на Румор вики сделать соответствующее дополнение в статье.
Награды За огромный вклад в развитие Румора

Оффлайн Luna

  • Распорядитель ФА
  • *
  • *
  • Сообщений: 2261
  • Репутация: 71.5
  • Пол: Женский
    • Просмотр профиля
    • Имперский Город
    • Email
Re: Туториал: NPC, лошади и вы
« Ответ #3 : 29 Октябрь, 2011, 12:44:27 »
0
 :rolleyes:  Garin, пожалуйста, буду рада, если кому-то понадобится это. 
Награды Участникам бета-тестов TESO За упорство в ожидании окончания 2х-недельной загрузки файлов TESO За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума

Оффлайн Tiara

  • high-lvl age Tsaesci
  • *
  • Сообщений: 7840
  • Репутация: 92.5
  • Пол: Женский
    • Steam ID - Tiara_Ra
    • Просмотр профиля
Re: Туториал: NPC, лошади и вы
« Ответ #4 : 29 Октябрь, 2011, 12:50:46 »
0
Luna, конечно понадобится. А  статьи для вики пока можно размещать на форуме в выделенном для этого разделе. Мы их переформатируем под вики-формат и вы сможете их сами разместить на вики потом.
We work in the dark - we do what we can - we give what we have. Our doubt is our passion, and our passion is our task. The rest is the madness of art.


GM Tiarum, GM "Pride Inc" (pvp), AD|DC (EU), Trueflame, cp561+
альтмеры, vamp:
Tiara Raise - Mplar, AR 47
Tiara Ra - mDK,AR 31
Tia Ra -  mSorc, AR 7
Tiara Moneta -  mNB, AR 4
Charity Iceborn (DC-side) - Mplar, AR 16
Rayna Sunlight (EP-side) - Mplar, AR 7

Tia-Heal-All - арго, mplar, vamp, AR11
Tia Dra - редгард,  stamDK, ww, AR 5
Tiara Ray - имперец,  BS-tankplar, vamp, AR 6
Ki Tiara - кот, dk-tank, pve slave, ww
Награды Участникам бета-тестов TESO За кропотливую работу на форуме/вики

Оффлайн Luna

  • Распорядитель ФА
  • *
  • *
  • Сообщений: 2261
  • Репутация: 71.5
  • Пол: Женский
    • Просмотр профиля
    • Имперский Город
    • Email
Re: Туториал: NPC, лошади и вы
« Ответ #5 : 04 Апрель, 2012, 16:29:16 »
+1
И еще один вариант моделирования поведения компаньона при следовании за игроком:

После создания диалогов создаем глобальную целочисленную переменную, например, Follow
В результирующем поле  топика "Следуй за мной" вписываем скриптовую команду Set Follow to 1
В результирующих полях других топиков пишем Set Follow to 0
Создаем пакет путешествия Travel к игроку (Условие IsRidingHorse ==1, объект Player, время и день выполнения пакета Any), добавляем его в лист АИ-пакетов компаньона.
Создаем лошадь и заклинание ее призыва, заклинание добавляем в спелл-лист компаньона (необязательно)

Пишем скрипт:



Scn aaaaaCompFollowScr; имя скрипта

float fQuestDelayTime; вводим вещественную переменную, которая позволит изменить частоту выполнения скрипта

Begin GameMode; начало блока
Set fQuestDelayTime to 1; устанавливаем частоту выполнения скрипта  1 раз в секунду

If Follow == 1; проверка глобальной переменной - если была произнесена фраза "Следуй за мной"
   If (Player.IsSneaking == 0)&&(Player.IsRidingHorse == 0)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow1==0)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow2==0)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow3==0); если игрок НЕ крадется, НЕ едет на лошади и компаньон НЕ выполняет никаких пакетов следования     
        aaaaaCompRef.AddScriptPackage aaaaaCompFollow1; добавляем пакет следования пешком
            elseIf (Player.IsSneaking == 1)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow2==0); если игрок крадется, и пакет следования крадучись не запущен
              aaaaaCompRef.RemoveScriptPackage aaaaaCompFollow3; на всякий случай удаляем пакет следования на лошади
              aaaaaCompRef.RemoveScriptPackage aaaaaCompFollow1; на всякий случай удаляем пакет следования пешком
              aaaaaCompRef.AddScriptPackage aaaaaCompFollow2; запускаем пакет следования крадучись
                 elseIf (Player.IsSneaking == 0)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow2==1); если игрок НЕ крадется и выполняется пакет следования крадучись 
                    aaaaaCompRef.RemoveScriptPackage aaaaaCompFollow2; удаляем этот пакет
                    aaaaaCompRef.AddScriptPackage aaaaaCompFollow1; добавляем пакет следования пешком
                        elseIf ( Player.IsRidingHorse == 1)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow3==0); если игрок едет на лошади и пакет следования за игроком на лошади не запущен 
                          aaaaaCompRef.RemoveScriptPackage aaaaaCompFollow2; удаляем пакет следования крадучись
                           aaaaaCompRef.RemoveScriptPackage aaaaaCompFollow1; удаляем пакет следования пешком
                            aaaaaCompRef.Cast aCompHorseSpell aaaaaCompRef; заставляем компаньона призвать свою лошадь                                                                aaaaaCompRef.AddScriptPackage aaaaaCompFollow3; запускаем пакет следования на лошади
                               elseIf ( Player.IsRidingHorse ==0)&&(aaaaaCompRef.GetIsCurrentPackage aaaaaCompFollow3==1); если игрок слез с лошади и выполняется пакет следования на лошади 
                               aaaaaCompRef.RemoveScriptPackage aaaaaCompFollow3; удаляется пакет следования на лошади   
                               aaaaaCompRef.EvaluatePackage aaaaaCompTravel; заставляем компаньона пересмотреть действующие АИ пакеты и запустить выполнение пакета путешествия к игроку
                                   endIf; конец условия
                               endIf; конец условия
                         endIf; конец условия
               endIf; конец условия
            endIf; конец условия
    endIf; конец условия
EndIf; конец условия
End; конец блока


Вид скрипта - квестовый. Вешаем скрипт на наш квест.

« Последнее редактирование: 04 Апрель, 2012, 16:40:00 от Luna »
Награды Участникам бета-тестов TESO За упорство в ожидании окончания 2х-недельной загрузки файлов TESO За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума

Теги:
 

Туториал По Анимации Mocap От Rx31

Автор GarinРаздел Туториалы по анимации

Ответов: 10
Просмотров: 7897
Последний ответ 03 Январь, 2008, 14:40:47
от Garin
Туториал "Лошадь на продажу" (Horse For Sale Tutorial)

Автор GarinРаздел Туториалы по TES 4 Oblivion

Ответов: 0
Просмотров: 1898
Последний ответ 09 Декабрь, 2006, 01:19:04
от Garin
Туториал по созданию иконок к Морровинду в Gimp

Автор TiaraРаздел Туториалы по TES 3 CS

Ответов: 0
Просмотров: 1214
Последний ответ 16 Февраль, 2011, 19:01:12
от Tiara
Wiki: Fallout3:Туториал о создании компаньона-животного

Автор WikiBotРаздел Конструктор G.E.C.K.

Ответов: 0
Просмотров: 839
Последний ответ 26 Октябрь, 2011, 20:00:47
от WikiBot
Помогите найти туториал

Автор 7DagothРаздел Мастерская TES IV

Ответов: 2
Просмотров: 936
Последний ответ 28 Январь, 2012, 12:26:31
от 7Dagoth

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal