Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
xolseg Написал:Я не знаю, по этому и задаю такие вопросы.
Хорошо зайдем с другого бока,... есть некий нпц которые эмулирует человека, т.е.
1. Он ходит убивает мобов
2. Он ходит выполняет задания которые дают нпц
3. Он получает профессию.
4. Он может войти в пати и обучатся по мере роста навыков и заложенного в него кода
5. Он может создать клан для таких же ботов как и он и фармить рб.
6. Он может убить игрока, при условии что на него началась агрессия
7. Он может крафтить вещи и продавать их на рынке анализируя этот рынок по средствам "аукциона".
Возьмем этот минимум.
А теперь, у меня возник вопрос, есть некий пул задач которые способен выполнить бот, каким образом сервер будет обрабатывать эти задачи/задания?
Возьмем допустим 1 задачу, убийство мобов, нпц попадает в локацию и начинает истреблять мобов, куда пападает эта задача и как она обрабатывается?
Я понимаю, что данные попадают в тредпул АИ и он имеет свои ограничения, но нельзя его расширить/разделить, сделать слоями в конце концов или я что то не верно понимаю?
Немного описания работы АИ.
АИ на данный момент, если брать Quest и просто событийные-хуки (см. оверлордов), все эти вещи событийно-ориентированные. Происходит событие, которое мы забиндили для данного АИ -> получаем вызов нашего перегруженного метода, причем в том же самом потоке, где стоит хук (это не слишком хорошо, но нет проблем с конкурентной средой множества вызовов, хотя было бы очень и очень неплохо исправить это).
Если наследоваться напрямую от АИ, то там наши возможности расширяются - можно полностью перегрузить любые действия/состояния АИ.
Смена состояния АИ (актив, инактив, тхинк и другие) происходят каждый тик контроллера. Эти состояния отвечают за действия этого АИ, тобишь от простого рана до нужной точки, до каста скилла. Именно смена состояний и их выполнение ложится на плечи АИ трид пула. Так же состояние может не измениться, но в любом случае будут выполнены те или иные действия, что бы определить смену состояния АИ.
Мы можем класть действия в очередь действий АИ, которые меняют статус АИ (по сути действия и состояния АИ есть одно и тоже, в наших серверах нет их разделения, во всяком случае я не видел), так же возможны варианты фаер выполнения действия, т.е. отменяется текущее действие АИ или же корректно завершается и наше действие выполняется в обход очереди, при этом обычно очищается очередь действий, хотя и не везде.
В некоторых серверах нет очереди действий и там есть только текущее действие/состояние и следующее действие/состояние.
АИ трид пул можно расширить, достаточно взглянуть в настройки трид пулов сервера, либо самому изменить их в коде менеджера трид пулов. Правда, тогда нагрузка на процессор будет возрастать логарифмически. Ибо каждая добавленная единица - увеличит количество одновременно выполняемых потоков из пула.
Теперь вернемся к Вашей задаче. Изначально задача начинает свой путь с создания инстанса нашего АИ. Именно там, скорее всего отдается первое действие АИ, плюс там по большей части контролируются действия АИ. Мы оцениваем ситуацию, анализируем персонажа к которому приаттачен АИ и выбираем первое действие, которое будет инициировать очередь действий, например это валд до ближайшего города, к НПЦ телепортеру. Последующие действия выбираются через событийную прослойку, если она создана (а Вам, как минимум нужно будет ее расширять, для нормального АИ фейков). Грубо говоря, через события квеста и эвентов (оверлорд, назовем эвенты, чтобы не было масло масляным) мы выбираем следующий наш шаг для АИ. А имплементация АИ (сам АИ движек), которому мы передаем задания - уже выполняет эти действия.
В принципе можно обойтись только имплементом АИ (наследование от оригинальных АИ классов, без работы с событийной прослойки квестов, етц), но тогда нужно будет перегружать, как минимум реализацию состояния THINK, плюс возможно создавать свои состояния, хотя можно и без них, через хардкод.
Ух, как-то много я прям таки написал, целую поэму
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 1,340
Тем: 134
Зарегистрирован: Dec 2010
Репутация:
6,742
у project-world'а есть это.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
BlackPR Написал:у project-world'а есть это.
Что это? Ну что у вас за привычка вставить фразу без цитаты, ответ в пустоту получается....
Сообщений: 433
Тем: 35
Зарегистрирован: Jun 2009
Репутация:
1,392
xolseg, загляните в скайп) Есть интересное предложение для вас.
Сообщений: 693
Тем: 13
Зарегистрирован: Jul 2011
Репутация:
1,624
Отклонюсь от тему, но какова нагрузка ботов на сам эмуль ?
Сообщений: 433
Тем: 35
Зарегистрирован: Jun 2009
Репутация:
1,392
Ну в последней реве, добился потребления статичного(стоит в IDLE) бота на уровень 0.07 мб на штуку.
В живом режиме, когда боты бегают по сереверу и выпиливают мобов и друг друга - примерно в пять раз выше.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
SmileForMe Написал:Отклонюсь от тему, но какова нагрузка ботов на сам эмуль ?
Ну я думаю всё зависит от задач этих самых ботов/фейков, выше уже писалось как идет обработка и что именно нагружает машину, а именно тредзадач АИ... Т.е. зависит от кол-во этих задач в пуле АИ.
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
Похвально что кто-то мыслит как я, вот только одно но!
Встречал в енете реализации всяких ИИ, но не разу не видел ИИ который бы изучал местность по которой передвигается.
Успех ИИ как мне кажется кроется как раз в способности изучить местность и окружающий мир, узнать где мобы сильные, где слабые и т.д. Естественно бот должен сохранять данные назовем это "накоплением опыта".
Написать этот минимальный базис чтобы бот не был тупой головешкой которая двигается в одну из сторон по рандомному условию и когда на что-то натыкается в радиусе он предпринимает какие-то действия и тогда это уже будет большое достижение, отталкиваться от этого базиса чтобы бот мог адаптироваться к миру.
Бле, вспомнил я 14ю серию Log Horizon
P.S. Тоже задумывался на ботами для сервера, но руки еще не доходили пока проблем выше крыши с обновлением
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
SmileForMe Написал:Отклонюсь от тему, но какова нагрузка ботов на сам эмуль ?
Большая, если их много... и игроков тоже. Я об этом писал на первой странице и обьяснял причины.
AV -> ~40, ArchLinux.
Железо: Intel Xeon 3220, 8 гб ОЗУ.
Флаги JVM
-Xms6G
-Xmx6G
-XX ermSize=256m
-XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSIncrementalMode
-XX:MaxGCPauseMillis=200
-XX:+DoEscapeAnalysis
-XX:+UseBiasedLocking
-XX:+EliminateLocks
-XX:CMSIncrementalSafetyFactor=50
-XX arallelGCThreads=5
-XX arallelCMSThreads=4
-XX:+AggressiveOpts
-XX:NewSize=512m
-XX:MaxNewSize=1024m
-XX:NewRatio=2
-XX:SurvivorRatio=8
-XX:TargetSurvivorRatio=60
-XX:MaxTenuringThreshold=5
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80
-XX:+CMSParallelRemarkEnabled
-XX:+CMSClassUnloadingEnabled
-XX:+UseCompressedOops
-XX:+UseFastAccessorMethods
-Dfile.encoding=UTF-8
-Djava.net.preferIPv4Stack=true
Количество активных ботов - 600. Ощутимо так залагивает, из-за огромного количества задач АИ трид пула.
Тик: 1 секунда
Щеколдовый АИ пул: 24
Обычный АИ пул: 15
При вариации от 16 до 32 щеколд - AV растет, но не так сильно, как без щеколды, буста не чувствуется.
При вариации обычного пула от 10 до 30 - очень сильно растет AV, буст чувствуется.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 1,340
Тем: 134
Зарегистрирован: Dec 2010
Репутация:
6,742
xolseg Написал:Что это? Ну что у вас за привычка вставить фразу без цитаты, ответ в пустоту получается....
У меня такая привычка? Все очень просто. Когда я пишу без цитаты - значит это ответ на первый пост. Вы спрашивали где можно наковырять этот функционал, я и сказал что в сборке project-world это есть.
Могу видео снять где покажу как это пашет.
|