Далее. Яблоко с настоящей яблони в реальном мире падает вниз, сквозь стену нельзя пройти, человек не летает и много чего еще. Это законы природы, законы мира в котором мы живем. И они имеют какие-то количественные и качественные значения. Это физика. Вот ее тоже надо смоделировать в игре. Еще один модуль.
Потом модуль взаимодействия перса с миром и модуль взаимодействия между персонажами и ботами. Выстрелил. Стрела в зависимости от силы натяжения тетивы, умений перса, дальности до цели, попала другому персонажу в руку. Потекла кровь, уменьшилась подвижность руки, ухудшились другие характеристики.
Так. Здесь вроде все понятно. Но. Чтобы перс в отсутствии хозяина, или бот, могли выполнять хотя бы элементарные действия, нужна подпрограмма, которая бы отвечала за это. Пару строк кода, диктующие боту те или иные действия. Встретил бот разбойника - бежать. Хмм. Или сражаться? Да и разбойник ли это. Пожалуй, в пару строк кода не уложишься. Необходим полноценный модуль, который в зависимости от поступающих данных и имеющихся навыков, предпочтений и чего-там-еще, плюс какой-то процент рандома, принимал бы решение о действиях и производил их. Но все боты разные - воины, торговцы, крестьяне. Одинаково реагировать не могут. Следовательно, поведенческая матрица для разных сословий должна быть разная. А для большего интереса и правдоподобия, у каждого бота должна быть своя. Некое подобие искусственного интеллекта. То есть где-то в оперативной памяти сервера работает маленькая такая подпрограммка - типа "мозга" бота. Вернее их много - для каждого бота своя. И для персонажей тоже. Только у персов ИИ послабее, ведь его поведение определяет игрок. Можно сказать, что игрок это основной подключаемый модуль модуля ИИ перса.
И что мы получим, если один бот, пусть будет селянином, встретит другого - разбойника? Данные (забудем на время, что все это только картинка) о внешнем виде, вооружении, поведении разбойника поступают в подпрограмму ИИ. Из базы данных вытягиваются характеристики, умения бота, его вооружение на данный момент. Можно добавить рандом в качестве чувств. Испугался - скорее побежит, чем будет сражаться. Злой - наоборот. Еще бы характер сюда примешать. Но это уже будет сильно круто, замечтался. Все это обрабатывается по какому-то алгоритму и принимается решение о нужном действии. На мониторе мы видим дающего стрекача бота. Но стрела быстрее летает, чем он бегает (закон физики, хоть и смоделированный). Координаты наконечника стрелы совместились, скажем, с бедром бегуна. ИИ пришли данные о повреждении. В принципе, ИИ не в состоянии оценить степень повреждения. Ведь у него отсутствуют данные о степени остроты наконечника, силе удара и некоторые другие. Либо он должен иметь доступ к этим данным, либо информация о критичности повреждения приходит со стороны. Ну, тут работает модуль взаимодействия. Просто интересно рассмотреть работу ИИ. Получив информацию, ИИ дает команду упасть или еще чуть проковылять в зависимости от степени повреждения. У перса бы было видно на экране падение некоторых характеристик. Упавшего бота прирезал разбойник. Тут "смерть" реализовать можно по-разному. Либо сам ИИ запускает программу стирания данных из БД и удаления себя самого из области памяти, либо за него это делает другой модуль. У перса же ничего не удаляется. Происходит лишь временная блокировка ИИ. Он отрезается от БД и прочей инфы до воссоздания "тела" с другими координатами нахождения. Смысл стирать, если тут же надо опять создавать? Впрочем, при избыточных ресурсах памяти, можно и ИИ ботов не стирать. Ведь возобновляется же как-то их количество. Зачем опять затрачивать время процессора на стирание-создание? Эту бесхозную область можно и другому боту подсунуть. Новенькому. Но это уже зависит от реализации и полета мысли разработчиков.